``````

In [10]:

f(x) = 2x^2 + 3x + 1
g(x) = f(x) - (2x+1)*(x+1)

``````
``````

Out[10]:

g (generic function with 1 method)

``````
``````

In [11]:

α = 2

``````
``````

Out[11]:

2

``````
``````

In [12]:

f(3)

``````
``````

Out[12]:

28

``````
``````

In [13]:

g(2)

``````
``````

Out[13]:

0

``````
``````

In [14]:

x = 3
y = 6
print("x = \$x")
print("y=\$y")
println()
println("x = \$x")
println("y = \$y")

``````
``````

x = 3y=6
x = 3
y = 6

``````
``````

In [15]:

f(2)

``````
``````

Out[15]:

15

``````
``````

In [16]:

ans

``````
``````

Out[16]:

15

``````
``````

In [17]:

big(10)

``````
``````

Out[17]:

10

``````
``````

In [18]:

typeof(ans)

``````
``````

Out[18]:

BigInt (constructor with 10 methods)

``````
``````

In [19]:

methodswith(ans)

``````
``````

Out[19]:

124-element Array{Method,1}: <<(x::BigInt,c::Int32) at gmp.jl:289 \$(x::BigInt,y::BigInt) at gmp.jl:195 \$(a::BigInt,b::BigInt,c::BigInt) at gmp.jl:218 \$(a::BigInt,b::BigInt,c::BigInt,d::BigInt) at gmp.jl:224 \$(a::BigInt,b::BigInt,c::BigInt,d::BigInt,e::BigInt) at gmp.jl:231 isprime(x::BigInt) at gmp.jl:473 isprime(x::BigInt,reps) at gmp.jl:473 BigInt(x::BigInt) at gmp.jl:50 divrem(x::BigInt,y::BigInt) at gmp.jl:312 fld(x::BigInt,y::BigInt) at gmp.jl:195 dec(n::BigInt) at gmp.jl:440 <=(x::BigInt,y::BigInt) at gmp.jl:423 <=(x::BigInt,i::Integer) at gmp.jl:424 <=(i::Integer,x::BigInt) at gmp.jl:425 <=(x::BigInt,f::Union(Float16,Float64,Float32)) at gmp.jl:426 <=(f::Union(Float16,Float64,Float32),x::BigInt) at gmp.jl:427 gcdx(a::BigInt,b::BigInt) at gmp.jl:373 invmod(x::BigInt,y::BigInt) at gmp.jl:203 binomial(n::BigInt,k::Uint64) at gmp.jl:411 binomial(n::BigInt,k::Integer) at gmp.jl:415 hex(n::BigInt) at gmp.jl:441 trailing_ones(x::BigInt) at gmp.jl:307 >>(x::BigInt,c::Int32) at gmp.jl:297 show(io::IO,x::BigInt) at gmp.jl:436 gcd(x::BigInt,y::BigInt) at gmp.jl:195 convert(::Type{Int64},n::BigInt) at gmp.jl:128 convert(::Type{Int32},n::BigInt) at gmp.jl:123 convert(::Type{Int16},n::BigInt) at gmp.jl:124 convert(::Type{Int8},n::BigInt) at gmp.jl:125 convert(::Type{Uint64},n::BigInt) at gmp.jl:146 convert(::Type{Uint32},x::BigInt) at gmp.jl:141 convert(::Type{Uint16},x::BigInt) at gmp.jl:142 convert(::Type{Uint8},x::BigInt) at gmp.jl:143 convert(::Type{Uint128},x::BigInt) at gmp.jl:164 convert(::Type{Int128},x::BigInt) at gmp.jl:168 convert(::Type{Float64},n::BigInt) at gmp.jl:172 convert(::Type{Float32},n::BigInt) at gmp.jl:174 convert(::Type{Float16},n::BigInt) at gmp.jl:175 convert(::Type{FloatingPoint},x::BigInt) at mpfr.jl:90 div(x::BigInt,y::BigInt) at gmp.jl:195 serialize(s,n::BigInt) at gmp.jl:182 >>>(x::BigInt,c::Int32) at gmp.jl:304 <(x::BigInt,y::BigInt) at gmp.jl:429 <(x::BigInt,i::Integer) at gmp.jl:430 <(i::Integer,x::BigInt) at gmp.jl:431 <(x::BigInt,f::Union(Float16,Float64,Float32)) at gmp.jl:432 <(f::Union(Float16,Float64,Float32),x::BigInt) at gmp.jl:433 ~(x::BigInt) at gmp.jl:281 rem(x::BigInt,y::BigInt) at gmp.jl:195 -(x::BigInt) at gmp.jl:281 -(x::BigInt,y::BigInt) at gmp.jl:195 -(x::BigInt,c::Union(Uint8,Uint32,Uint16,Uint64)) at gmp.jl:250 -(c::Union(Uint8,Uint32,Uint16,Uint64),x::BigInt) at gmp.jl:255 -(x::BigInt,c::Union(Int32,Int64,Int8,Int16)) at gmp.jl:261 -(c::Union(Int32,Int64,Int8,Int16),x::BigInt) at gmp.jl:262 -(x::BigFloat,c::BigInt) at mpfr.jl:235 -(c::BigInt,x::BigFloat) at mpfr.jl:244 string(x::BigInt) at gmp.jl:435 count_ones(x::BigInt) at gmp.jl:309 &(x::BigInt,y::BigInt) at gmp.jl:195 &(a::BigInt,b::BigInt,c::BigInt) at gmp.jl:218 &(a::BigInt,b::BigInt,c::BigInt,d::BigInt) at gmp.jl:224 &(a::BigInt,b::BigInt,c::BigInt,d::BigInt,e::BigInt) at gmp.jl:231 mod(x::BigInt,y::BigInt) at gmp.jl:195 ^(x::BigInt,y::Bool) at gmp.jl:357 ^(x::BigInt,y::Uint64) at gmp.jl:343 ^(x::BigInt,y::BigInt) at gmp.jl:356 ^(x::BigInt,y::Integer) at gmp.jl:358 ^(x::Integer,y::BigInt) at gmp.jl:359 ^(x::BigFloat,y::BigInt) at mpfr.jl:317 oct(n::BigInt) at gmp.jl:439 *(x::BigInt,y::BigInt) at gmp.jl:195 *(a::BigInt,b::BigInt,c::BigInt) at gmp.jl:218 *(a::BigInt,b::BigInt,c::BigInt,d::BigInt) at gmp.jl:224 *(a::BigInt,b::BigInt,c::BigInt,d::BigInt,e::BigInt) at gmp.jl:231 *(x::BigInt,c::Union(Uint8,Uint32,Uint16,Uint64)) at gmp.jl:265 *(c::Union(Uint8,Uint32,Uint16,Uint64),x::BigInt) at gmp.jl:269 *(x::BigInt,c::Union(Int32,Int64,Int8,Int16)) at gmp.jl:271 *(c::Union(Int32,Int64,Int8,Int16),x::BigInt) at gmp.jl:275 *(x::BigFloat,c::BigInt) at mpfr.jl:180 *(c::BigInt,x::BigFloat) at mpfr.jl:184 isqrt(x::BigInt) at gmp.jl:337 sqrt(x::BigInt) at mpfr.jl:293 |(x::BigInt,y::BigInt) at gmp.jl:195 |(a::BigInt,b::BigInt,c::BigInt) at gmp.jl:218 |(a::BigInt,b::BigInt,c::BigInt,d::BigInt) at gmp.jl:224 |(a::BigInt,b::BigInt,c::BigInt,d::BigInt,e::BigInt) at gmp.jl:231 trailing_zeros(x::BigInt) at gmp.jl:306 powermod(x::BigInt,p::BigInt,m::BigInt) at gmp.jl:362 powermod(x::BigInt,p::Integer,m::BigInt) at gmp.jl:369 powermod(x::BigInt,p::Integer,m::Integer) at gmp.jl:370 nextpow2(x::BigInt) at gmp.jl:479 lcm(x::BigInt,y::BigInt) at gmp.jl:195 ndigits(x::BigInt) at gmp.jl:471 ndigits(x::BigInt,b::Integer) at gmp.jl:471 BigFloat(x::BigInt) at mpfr.jl:66 /(x::BigFloat,c::BigInt) at mpfr.jl:235 cmp(x::BigInt,y::BigInt) at gmp.jl:319 cmp(x::BigInt,y::Union(Int32,Int64,Int8,Int16)) at gmp.jl:322 cmp(x::BigInt,y::Union(Uint8,Uint32,Uint16,Uint64)) at gmp.jl:325 cmp(x::BigInt,y::Integer) at gmp.jl:327 cmp(x::Integer,y::BigInt) at gmp.jl:328 cmp(x::BigInt,y::Union(Float16,Float64,Float32)) at gmp.jl:331 cmp(x::Union(Float16,Float64,Float32),y::BigInt) at gmp.jl:334 cmp(x::BigFloat,y::BigInt) at mpfr.jl:525 ==(x::BigInt,y::BigInt) at gmp.jl:417 ==(x::BigInt,i::Integer) at gmp.jl:418 ==(i::Integer,x::BigInt) at gmp.jl:419 ==(x::BigInt,f::Union(Float16,Float64,Float32)) at gmp.jl:420 ==(f::Union(Float16,Float64,Float32),x::BigInt) at gmp.jl:421 prevpow2(x::BigInt) at gmp.jl:478 factorial(x::BigInt) at gmp.jl:404 base(b::Integer,n::BigInt) at gmp.jl:444 +(x::BigInt,y::BigInt) at gmp.jl:195 +(a::BigInt,b::BigInt,c::BigInt) at gmp.jl:218 +(a::BigInt,b::BigInt,c::BigInt,d::BigInt) at gmp.jl:224 +(a::BigInt,b::BigInt,c::BigInt,d::BigInt,e::BigInt) at gmp.jl:231 +(x::BigInt,c::Union(Uint8,Uint32,Uint16,Uint64)) at gmp.jl:243 +(c::Union(Uint8,Uint32,Uint16,Uint64),x::BigInt) at gmp.jl:247 +(x::BigInt,c::Union(Int32,Int64,Int8,Int16)) at gmp.jl:259 +(c::Union(Int32,Int64,Int8,Int16),x::BigInt) at gmp.jl:260 +(x::BigFloat,c::BigInt) at mpfr.jl:180 +(c::BigInt,x::BigFloat) at mpfr.jl:184 bin(n::BigInt) at gmp.jl:438

``````
``````

In [20]:

rem(big(10), big(3))

``````
``````

Out[20]:

1

``````
``````

In [21]:

a = big(10)

``````
``````

Out[21]:

10

``````
``````

In [22]:

ans

``````
``````

Out[22]:

10

``````
``````

In [23]:

a^19 / 3

``````
``````

Out[23]:

3.33333333333333333333333333333333333333333333333333333333333333333333333333332e+18 with 256 bits of precision

``````
``````

In [24]:

10^19

``````
``````

Out[24]:

-8446744073709551616

``````
``````

In [25]:

2^7

``````
``````

Out[25]:

128

``````
``````

In [26]:

//

``````
``````

Out[26]:

// (generic function with 8 methods)

``````
``````

In [27]:

methods(//)

``````
``````

Out[27]:

8 methods for generic function //: //(n::Integer,d::Integer) at rational.jl:15 //(x::Rational{T<:Integer},y::Integer) at rational.jl:16 //(x::Integer,y::Rational{T<:Integer}) at rational.jl:17 //(x::Rational{T<:Integer},y::Rational{T<:Integer}) at rational.jl:18 //(x::Complex{T<:Real},y::Real) at rational.jl:19 //(x::Real,y::Complex{T<:Real}) at rational.jl:20 //(x::Complex{T<:Real},y::Complex{T<:Real}) at rational.jl:23 //(X::AbstractArray{T,N},y::Number) at rational.jl:28

``````
``````

In [28]:

3 + -(1, 2)

``````
``````

Out[28]:

2

``````
``````

In [29]:

methods(-)

``````
``````

Out[29]:

129 methods for generic function -: -(x::Bool) at bool.jl:37 -(x::Bool,y::Bool) at bool.jl:40 -(x::Union(Int32,Int8,Int16)) at int.jl:13 -(x::Union(Uint8,Uint32,Uint16)) at int.jl:14 -(B::BitArray{2},J::UniformScaling{T<:Number}) at linalg/uniformscaling.jl:44 -(B::BitArray{N}) at bitarray.jl:789 -(A::BitArray{N},B::BitArray{N}) at bitarray.jl:848 -(A::Array{T,N},B::SparseMatrixCSC{Tv,Ti<:Integer}) at sparse/sparsematrix.jl:639 -(A::Array{T,2},B::Diagonal{T}) at linalg/special.jl:90 -(A::Array{T,2},B::Bidiagonal{T}) at linalg/special.jl:90 -(A::Array{T,2},B::Tridiagonal{T}) at linalg/special.jl:90 -(A::Array{T,2},B::Triangular{T,S<:AbstractArray{T,2},UpLo,IsUnit}) at linalg/special.jl:90 -(A::Array{T,2},B::SymTridiagonal{T}) at linalg/special.jl:99 -(A::Union(SubArray{Bool,N,A<:DenseArray{T,N},I<:(Union(Range{Int64},Int64)...,)},DenseArray{Bool,N})) at array.jl:674 -(A::Union(SubArray{Bool,N,A<:DenseArray{T,N},I<:(Union(Range{Int64},Int64)...,)},DenseArray{Bool,N}),B::Union(SubArray{Bool,N,A<:DenseArray{T,N},I<:(Union(Range{Int64},Int64)...,)},DenseArray{Bool,N})) at array.jl:800 -(A::Union(DenseArray{T,N},SubArray{T,N,A<:DenseArray{T,N},I<:(Union(Range{Int64},Int64)...,)})) at array.jl:665 -{S,T}(A::Union(SubArray{S,N,A<:DenseArray{T,N},I<:(Union(Range{Int64},Int64)...,)},DenseArray{S,N}),B::Union(DenseArray{T,N},SubArray{T,N,A<:DenseArray{T,N},I<:(Union(Range{Int64},Int64)...,)})) at array.jl:722 -{T<:Union(Int32,Int8,Int16)}(x::T<:Union(Int32,Int8,Int16),y::T<:Union(Int32,Int8,Int16)) at int.jl:17 -{T<:Union(Uint8,Uint32,Uint16)}(x::T<:Union(Uint8,Uint32,Uint16),y::T<:Union(Uint8,Uint32,Uint16)) at int.jl:21 -(x::Int64) at int.jl:26 -(x::Uint64) at int.jl:27 -(x::Int128) at int.jl:28 -(x::Uint128) at int.jl:29 -(x::Int64,y::Int64) at int.jl:40 -(x::Uint64,y::Uint64) at int.jl:41 -(x::Int128,y::Int128) at int.jl:42 -(x::Uint128,y::Uint128) at int.jl:43 -(x::Float32) at float.jl:116 -(x::Float64) at float.jl:117 -(x::Float32,y::Float32) at float.jl:121 -(x::Float64,y::Float64) at float.jl:122 -(z::Complex{T<:Real}) at complex.jl:109 -(z::Complex{T<:Real},w::Complex{T<:Real}) at complex.jl:111 -(x::Rational{T<:Integer}) at rational.jl:109 -(x::Float16) at float16.jl:129 -(x::BigInt) at gmp.jl:281 -(x::BigFloat) at mpfr.jl:279 -(x::MathConst{sym}) at constants.jl:21 -(x::Real,z::Complex{T<:Real}) at complex.jl:122 -(z::Complex{T<:Real},x::Real) at complex.jl:123 -(x::Rational{T<:Integer},y::Rational{T<:Integer}) at rational.jl:113 -(x::Char,y::Char) at char.jl:28 -(x::Char,y::Integer) at char.jl:29 -(a::Float16,b::Float16) at float16.jl:132 -(x::BigInt,y::BigInt) at gmp.jl:195 -(x::BigInt,c::Union(Uint8,Uint32,Uint16,Uint64)) at gmp.jl:250 -(c::Union(Uint8,Uint32,Uint16,Uint64),x::BigInt) at gmp.jl:255 -(x::BigInt,c::Union(Int32,Int64,Int8,Int16)) at gmp.jl:261 -(c::Union(Int32,Int64,Int8,Int16),x::BigInt) at gmp.jl:262 -(x::BigFloat,y::BigFloat) at mpfr.jl:192 -(x::BigFloat,c::Union(Uint8,Uint32,Uint16,Uint64)) at mpfr.jl:199 -(c::Union(Uint8,Uint32,Uint16,Uint64),x::BigFloat) at mpfr.jl:204 -(x::BigFloat,c::Union(Int32,Int64,Int8,Int16)) at mpfr.jl:211 -(c::Union(Int32,Int64,Int8,Int16),x::BigFloat) at mpfr.jl:216 -(x::BigFloat,c::Union(Float16,Float64,Float32)) at mpfr.jl:223 -(c::Union(Float16,Float64,Float32),x::BigFloat) at mpfr.jl:228 -(x::BigFloat,c::BigInt) at mpfr.jl:235 -(c::BigInt,x::BigFloat) at mpfr.jl:244 -(x::MathConst{sym},y::MathConst{sym}) at constants.jl:23 -{T<:Number}(x::T<:Number,y::T<:Number) at promotion.jl:190 -(x::Number,y::Number) at promotion.jl:160 -(r::OrdinalRange{T,S}) at range.jl:444 -(r::FloatRange{T<:FloatingPoint}) at range.jl:445 -(r1::OrdinalRange{T,S},r2::OrdinalRange{T,S}) at operators.jl:325 -{T<:FloatingPoint}(r1::FloatRange{T<:FloatingPoint},r2::FloatRange{T<:FloatingPoint}) at operators.jl:331 -(r1::FloatRange{T<:FloatingPoint},r2::FloatRange{T<:FloatingPoint}) at operators.jl:348 -(r1::FloatRange{T<:FloatingPoint},r2::OrdinalRange{T,S}) at operators.jl:349 -(r1::OrdinalRange{T,S},r2::FloatRange{T<:FloatingPoint}) at operators.jl:350 -(x::Ptr{T},y::Ptr{T}) at pointer.jl:64 -(x::Ptr{T},y::Integer) at pointer.jl:67 -{S,T<:Real}(A::Union(SubArray{S,N,A<:DenseArray{T,N},I<:(Union(Range{Int64},Int64)...,)},DenseArray{S,N}),B::Range{T<:Real}) at array.jl:730 -{S<:Real,T}(A::Range{S<:Real},B::Union(DenseArray{T,N},SubArray{T,N,A<:DenseArray{T,N},I<:(Union(Range{Int64},Int64)...,)})) at array.jl:739 -(A::SparseMatrixCSC{Tv,Ti<:Integer}) at sparse/sparsematrix.jl:481 -(A::Bidiagonal{T}) at linalg/bidiag.jl:107 -(A::AbstractArray{Bool,N},x::Bool) at array.jl:771 -(x::Bool,A::AbstractArray{Bool,N}) at array.jl:772 -(A::AbstractArray{T,N},x::Number) at array.jl:775 -(x::Number,A::AbstractArray{T,N}) at array.jl:776 -{Tv,Ti}(A::SparseMatrixCSC{Tv,Ti},B::SparseMatrixCSC{Tv,Ti}) at sparse/sparsematrix.jl:541 -{TvA,TiA,TvB,TiB}(A::SparseMatrixCSC{TvA,TiA},B::SparseMatrixCSC{TvB,TiB}) at sparse/sparsematrix.jl:533 -(A::SparseMatrixCSC{Tv,Ti<:Integer},B::Array{T,N}) at sparse/sparsematrix.jl:637 -(A::SymTridiagonal{T},B::SymTridiagonal{T}) at linalg/tridiag.jl:58 -(A::Tridiagonal{T},B::Tridiagonal{T}) at linalg/tridiag.jl:248 -(A::Tridiagonal{T},B::SymTridiagonal{T}) at linalg/special.jl:99 -(A::SymTridiagonal{T},B::Tridiagonal{T}) at linalg/special.jl:98 -{T,MT,uplo}(A::Triangular{T,MT,uplo,IsUnit},B::Triangular{T,MT,uplo,IsUnit}) at linalg/triangular.jl:13 -{T,MT,uplo1,uplo2}(A::Triangular{T,MT,uplo1,IsUnit},B::Triangular{T,MT,uplo2,IsUnit}) at linalg/triangular.jl:14 -(Da::Diagonal{T},Db::Diagonal{T}) at linalg/diagonal.jl:48 -(A::Bidiagonal{T},B::Bidiagonal{T}) at linalg/bidiag.jl:100 -(J::UniformScaling{T<:Number}) at linalg/uniformscaling.jl:42 -(J1::UniformScaling{T<:Number},J2::UniformScaling{T<:Number}) at linalg/uniformscaling.jl:43 -(J::UniformScaling{T<:Number},B::BitArray{2}) at linalg/uniformscaling.jl:45 -(J::UniformScaling{T<:Number},x::Number) at linalg/uniformscaling.jl:46 -(x::Number,J::UniformScaling{T<:Number}) at linalg/uniformscaling.jl:47 -{TA,TJ<:Number}(A::AbstractArray{TA,2},J::UniformScaling{TJ<:Number}) at linalg/uniformscaling.jl:50 -{TA,TJ<:Number}(J::UniformScaling{TJ<:Number},A::AbstractArray{TA,2}) at linalg/uniformscaling.jl:59 -(A::Diagonal{T},B::Bidiagonal{T}) at linalg/special.jl:89 -(A::Bidiagonal{T},B::Diagonal{T}) at linalg/special.jl:90 -(A::Diagonal{T},B::Tridiagonal{T}) at linalg/special.jl:89 -(A::Tridiagonal{T},B::Diagonal{T}) at linalg/special.jl:90 -(A::Diagonal{T},B::Triangular{T,S<:AbstractArray{T,2},UpLo,IsUnit}) at linalg/special.jl:89 -(A::Triangular{T,S<:AbstractArray{T,2},UpLo,IsUnit},B::Diagonal{T}) at linalg/special.jl:90 -(A::Diagonal{T},B::Array{T,2}) at linalg/special.jl:89 -(A::Bidiagonal{T},B::Tridiagonal{T}) at linalg/special.jl:89 -(A::Tridiagonal{T},B::Bidiagonal{T}) at linalg/special.jl:90 -(A::Bidiagonal{T},B::Triangular{T,S<:AbstractArray{T,2},UpLo,IsUnit}) at linalg/special.jl:89 -(A::Triangular{T,S<:AbstractArray{T,2},UpLo,IsUnit},B::Bidiagonal{T}) at linalg/special.jl:90 -(A::Bidiagonal{T},B::Array{T,2}) at linalg/special.jl:89 -(A::Tridiagonal{T},B::Triangular{T,S<:AbstractArray{T,2},UpLo,IsUnit}) at linalg/special.jl:89 -(A::Triangular{T,S<:AbstractArray{T,2},UpLo,IsUnit},B::Tridiagonal{T}) at linalg/special.jl:90 -(A::Tridiagonal{T},B::Array{T,2}) at linalg/special.jl:89 -(A::Triangular{T,S<:AbstractArray{T,2},UpLo,IsUnit},B::Array{T,2}) at linalg/special.jl:89 -(A::SymTridiagonal{T},B::Triangular{T,S<:AbstractArray{T,2},UpLo,IsUnit}) at linalg/special.jl:98 -(A::Triangular{T,S<:AbstractArray{T,2},UpLo,IsUnit},B::SymTridiagonal{T}) at linalg/special.jl:99 -(A::SymTridiagonal{T},B::Array{T,2}) at linalg/special.jl:98 -(A::Diagonal{T},B::SymTridiagonal{T}) at linalg/special.jl:107 -(A::SymTridiagonal{T},B::Diagonal{T}) at linalg/special.jl:108 -(A::Bidiagonal{T},B::SymTridiagonal{T}) at linalg/special.jl:107 -(A::SymTridiagonal{T},B::Bidiagonal{T}) at linalg/special.jl:108 -{T}(a::HierarchicalValue{T},b::HierarchicalValue{T}) at pkg/resolve/versionweight.jl:19 -{T}(a::HierarchicalValue{T}) at pkg/resolve/versionweight.jl:41 -(a::VWPreBuildItem,b::VWPreBuildItem) at pkg/resolve/versionweight.jl:81 -(a::VWPreBuildItem) at pkg/resolve/versionweight.jl:84 -(a::VWPreBuild,b::VWPreBuild) at pkg/resolve/versionweight.jl:119 -(a::VWPreBuild) at pkg/resolve/versionweight.jl:122 -(a::VersionWeight,b::VersionWeight) at pkg/resolve/versionweight.jl:159 -(a::VersionWeight) at pkg/resolve/versionweight.jl:169 -(a::FieldValue,b::FieldValue) at pkg/resolve/fieldvalue.jl:40 -(a::Vec2,b::Vec2) at graphics.jl:61

``````
``````

In [30]:

l = [1, 2, "3"]

``````
``````

Out[30]:

3-element Array{Any,1}:
1
2
"3"

``````
``````

In [31]:

l + 3

``````
``````

`.+` has no method matching .+(::ASCIIString, ::Int64)

in .+ at array.jl:761
in + at array.jl:773

``````
``````

In [32]:

append!(l, 3)

``````
``````

`append!` has no method matching append!(::Array{Any,1}, ::Int64)

``````
``````

In [33]:

?listen

``````
``````

this listens on localhost only. To listen on all interfaces pass,
"IPv4(0)" or "IPv6(0)" as appropriate.

Base.listen(path) -> PipeServer

Listens on/Creates a Named Pipe/Domain Socket

``````
``````

In [34]:

l[1:end]

``````
``````

Out[34]:

3-element Array{Any,1}:
1
2
"3"

``````
``````

In [35]:

push!(l, 3)

``````
``````

Out[35]:

4-element Array{Any,1}:
1
2
"3"
3

``````
``````

In [36]:

ll = [1, 2, [3, 5]]

``````
``````

Out[36]:

4-element Array{Int64,1}:
1
2
3
5

``````
``````

In [37]:

[1 2 3; 4 5 6]

``````
``````

Out[37]:

2x3 Array{Int64,2}:
1  2  3
4  5  6

``````
``````

In [38]:

transpose(reshape(ll, 2, 2))

``````
``````

Out[38]:

2x2 Array{Int64,2}:
1  2
3  5

``````
``````

In [39]:

methods(push!)

``````
``````

Out[39]:

22 methods for generic function push!: push!(a::Array{Any,1},item) at array.jl:467 push!{T}(a::Array{T,1},item) at array.jl:456 push!(B::BitArray{1},item) at bitarray.jl:454 push!(s::IntSet,n::Integer) at intset.jl:32 push!(::EnvHash,k::String,v) at env.jl:114 push!(t::Associative{K,V},key,v) at dict.jl:241 push!(s::Set{T},x) at set.jl:18 push!{T}(q::Deque{T},x) at /Users/DboyLiao/.julia/v0.3/DataStructures/src/deque.jl:189 push!(s::Stack{S},x) at /Users/DboyLiao/.julia/v0.3/DataStructures/src/stack.jl:16 push!{T,V<:Number,V2<:Number}(ct::Accumulator{T,V<:Number},r::Accumulator{T,V2<:Number}) at /Users/DboyLiao/.julia/v0.3/DataStructures/src/accumulator.jl:50 push!{T,V<:Number}(ct::Accumulator{T,V<:Number},x::T,a::V<:Number) at /Users/DboyLiao/.julia/v0.3/DataStructures/src/accumulator.jl:45 push!{T,V<:Number,V2<:Number}(ct::Accumulator{T,V<:Number},x::T,a::V2<:Number) at /Users/DboyLiao/.julia/v0.3/DataStructures/src/accumulator.jl:46 push!{T,V<:Number}(ct::Accumulator{T,V<:Number},x::T) at /Users/DboyLiao/.julia/v0.3/DataStructures/src/accumulator.jl:47 push!{K,C}(cc::ClassifiedCollections{K,C},key::K,e) at /Users/DboyLiao/.julia/v0.3/DataStructures/src/classifiedcollections.jl:44 push!(s::IntDisjointSets) at /Users/DboyLiao/.julia/v0.3/DataStructures/src/disjoint_set.jl:82 push!{T}(s::DisjointSets{T},x::T) at /Users/DboyLiao/.julia/v0.3/DataStructures/src/disjoint_set.jl:127 push!{T}(h::BinaryHeap{T,Comp},v::T) at /Users/DboyLiao/.julia/v0.3/DataStructures/src/heaps/binary_heap.jl:138 push!{T}(h::MutableBinaryHeap{T,Comp},v::T) at /Users/DboyLiao/.julia/v0.3/DataStructures/src/heaps/mutable_binary_heap.jl:201 push!(s::OrderedSet{T},x) at /Users/DboyLiao/.julia/v0.3/DataStructures/src/orderedset.jl:26 push!(A) at abstractarray.jl:1394 push!(A,a,b) at abstractarray.jl:1395 push!(A,a,b,c...) at abstractarray.jl:1396

``````
``````

In [40]:

t = methodswith(Array)

``````
``````

Out[40]:

``````
``````

In [41]:

typeof(t)

``````
``````

Out[41]:

Array{Method,1}

``````
``````

In [42]:

t[1]

``````
``````

Out[42]:

.^(A::SparseMatrixCSC{Tv,Ti<:Integer},B::Array{T,N}) at sparse/sparsematrix.jl:662

``````
``````

In [43]:

a = [1, 2, 3]
b = [3.3, 5.6, 7.0]

``````
``````

Out[43]:

3-element Array{Float64,1}:
3.3
5.6
7.0

``````
``````

In [44]:

c = cross(a, b)

``````
``````

Out[44]:

3-element Array{Float64,1}:
-2.8
2.9
-1.0

``````
``````

In [45]:

dot(c, a)

``````
``````

Out[45]:

0.0

``````
``````

In [46]:

dot(c, b)

``````
``````

Out[46]:

3.552713678800501e-15

``````
``````

In [47]:

a'

``````
``````

Out[47]:

1x3 Array{Int64,2}:
1  2  3

``````
``````

In [48]:

m = [1 2 3; 2 4 6]

``````
``````

Out[48]:

2x3 Array{Int64,2}:
1  2  3
2  4  6

``````
``````

In [49]:

m'

``````
``````

Out[49]:

3x2 Array{Int64,2}:
1  2
2  4
3  6

``````
``````

In [50]:

M = reshape([1, 2, 3, 4, 5, 6], 2, 3)'

``````
``````

Out[50]:

3x2 Array{Int64,2}:
1  2
3  4
5  6

``````
``````

In [51]:

a ⋅ b

``````
``````

Out[51]:

35.5

``````
``````

In [52]:

a × b

``````
``````

Out[52]:

3-element Array{Float64,1}:
-2.8
2.9
-1.0

``````
``````

In [53]:

print_with_color(symbol("blue"), "Hello world!")

``````
``````

Hello world!

``````
``````

In [54]:

x_n = 0.01
for i = 1:1000
x_n = x_n + (2-x_n^2)/(2*x_n);
end

``````
``````

In [55]:

x_n

``````
``````

Out[55]:

1.4142135623730951

``````
``````

In [56]:

tensor = [i+j+k for i = 1:10, j = 1:6, k = 1:5];

``````
``````

In [57]:

tensor[1, 2, :]

``````
``````

Out[57]:

1x1x5 Array{Int64,3}:
[:, :, 1] =
4

[:, :, 2] =
5

[:, :, 3] =
6

[:, :, 4] =
7

[:, :, 5] =
8

``````
``````

In [58]:

big(zeros(3, 3))

``````
``````

Out[58]:

3x3 Array{BigFloat,2}:
0e+00  0e+00  0e+00
0e+00  0e+00  0e+00
0e+00  0e+00  0e+00

``````
``````

In [59]:

?big

``````
``````

Base.big(x)

Convert a number to a maximum precision representation (typically
"BigInt" or "BigFloat"). See "BigFloat" for information about
some pitfalls with floating-point numbers.

``````
``````

In [60]:

methods(big)

``````
``````

Out[60]:

9 methods for generic function big: big{T,S,UpLo,IsUnit}(A::Triangular{T,S,UpLo,IsUnit}) at linalg/triangular.jl:152 big{T<:FloatingPoint,N}(x::AbstractArray{T<:FloatingPoint,N}) at abstractarray.jl:299 big{T<:FloatingPoint,N}(x::AbstractArray{Complex{T<:FloatingPoint},N}) at abstractarray.jl:300 big{T<:Integer,N}(x::AbstractArray{T<:Integer,N}) at abstractarray.jl:301 big(n::Integer) at /Users/vagrant/buildbot/slave/package_osx10_9/build/base/sysimg.jl:176 big(x::FloatingPoint) at /Users/vagrant/buildbot/slave/package_osx10_9/build/base/sysimg.jl:177 big(q::Rational{T<:Integer}) at /Users/vagrant/buildbot/slave/package_osx10_9/build/base/sysimg.jl:178 big(z::Complex{T<:Real}) at /Users/vagrant/buildbot/slave/package_osx10_9/build/base/sysimg.jl:179 big(x::MathConst{sym}) at constants.jl:51

``````
``````

In [61]:

@which big(zeros(3, 3))

``````
``````

Out[61]:

big{T<:FloatingPoint,N}(x::AbstractArray{T<:FloatingPoint,N}) at abstractarray.jl:299

``````
``````

In [62]:

;ls

``````
``````

Fractoal_in_Julia.ipynb
Intro_to_Julia.ipynb
sierpinski.svg
try_julia.ipynb

``````
``````

In [63]:

run("ls")

``````
``````

`run` has no method matching run(::ASCIIString)

``````
``````

In [64]:

run(`ls`)

``````
``````

Fractoal_in_Julia.ipynb
Intro_to_Julia.ipynb
sierpinski.svg
try_julia.ipynb

``````
``````

In [65]:

t = `ls`

``````
``````

Out[65]:

`ls`

``````
``````

In [66]:

typeof(t)

``````
``````

Out[66]:

Cmd (constructor with 1 method)

``````
``````

In [67]:

?Cmd

``````
``````

DataType   : Cmd (constructor with 1 method)
supertype: AbstractCmd
fields   : (:exec,:ignorestatus,:detach,:env,:dir)

``````
``````

In [68]:

"Hello"^2

``````
``````

Out[68]:

"HelloHello"

``````
``````

In [69]:

"Hello"*2

``````
``````

`*` has no method matching *(::ASCIIString, ::Int64)

``````
``````

In [70]:

function *(a::String, t::Int)
a^t
end

``````
``````

Out[70]:

* (generic function with 116 methods)

``````
``````

In [71]:

"Hello"*2

``````
``````

Out[71]:

"HelloHello"

``````
``````

In [72]:

super(BigInt)

``````
``````

Out[72]:

Integer

``````
``````

In [73]:

super(Integer)

``````
``````

Out[73]:

Real

``````
``````

In [74]:

super(Real)

``````
``````

Out[74]:

Number

``````
``````

In [75]:

super(Number)

``````
``````

Out[75]:

Any

``````
``````

In [76]:

t = super(Real)

``````
``````

Out[76]:

Number

``````
``````

In [77]:

typeof(t)

``````
``````

Out[77]:

DataType

``````
``````

In [78]:

t("3")

``````
``````

type cannot be constructed

``````
``````

In [79]:

@which big(3)

``````
``````

Out[79]:

big(n::Integer) at /Users/vagrant/buildbot/slave/package_osx10_9/build/base/sysimg.jl:176

``````
``````

In [80]:

methods(show)

``````
``````

Out[80]:

89 methods for generic function show: show(io::IO,r::UnitRange{T<:Real}) at range.jl:302 show(io::IO,r::Range{T}) at range.jl:300 show(io::IO,tv::TypeVar) at expr.jl:46 show(io::IO,z::Complex{T<:Real}) at complex.jl:80 show(io::IO,x::Rational{T<:Integer}) at rational.jl:33 show(io::IO,s::IntSet) at intset.jl:176 show(io::IO,::EnvHash) at env.jl:168 show{K,V}(io::IO,t::Associative{K,V}) at dict.jl:20 show(io::IO,iter::Union(KeyIterator{T<:Associative{K,V}},ValueIterator{T<:Associative{K,V}})) at dict.jl:118 show(io::IO,s::Set{T}) at set.jl:10 show(io::IO,c::Char) at char.jl:53 show(io::IO,b::IOBuffer) at iobuffer.jl:27 show(io::IO,s::String) at string.jl:69 show(io::IO,re::Regex) at regex.jl:61 show(io::IO,m::RegexMatch) at regex.jl:89 show(io::IO,s::IOStream) at iostream.jl:26 show(io::IO,t::Task) at task.jl:3 show(io::IO,f::Function) at show.jl:57 show(io::IO,x::IntrinsicFunction) at show.jl:67 show(io::IO,x::UnionType) at show.jl:71 show(io::IO,x::TypeConstructor) at show.jl:80 show(io::IO,x::DataType) at show.jl:83 show(io::IO,tn::TypeName) at show.jl:200 show(io::IO,::Nothing) at show.jl:201 show(io::IO,b::Bool) at show.jl:202 show(io::IO,n::Signed) at show.jl:203 show(io::IO,n::Unsigned) at show.jl:204 show{T}(io::IO,p::Ptr{T}) at show.jl:116 show(io::IO,m::Module) at show.jl:120 show(io::IO,l::LambdaStaticData) at show.jl:128 show(io::IO,t::(Any...,)) at show.jl:197 show(io::IO,s::Symbol) at show.jl:199 show(io::IO,ex::Union(Expr,TopNode,LineNumberNode,SymbolNode,QuoteNode,GotoNode,LabelNode)) at show.jl:234 show(io::IO,W::Woodbury{T}) at linalg/woodbury.jl:42 show(io::IO,M::Bidiagonal{T}) at linalg/bidiag.jl:56 show(io::IO,v::AbstractArray{Any,1}) at show.jl:1194 show(io::IO,v::AbstractArray{T,1}) at show.jl:1195 show(io::IO,X::AbstractArray{T,N}) at show.jl:1130 show(io::IO,stream::Pipe) at stream.jl:171 show(io::IO,stream::PipeServer) at stream.jl:173 show(io::IO,stream::TTY) at stream.jl:220 show(io::IO,e::UVError) at stream.jl:830 show(io::IO,ip::IPv4) at socket.jl:29 show(io::IO,ip::IPv6) at socket.jl:81 show(io::IO,sock::TcpSocket) at socket.jl:314 show(io::IO,sock::TcpServer) at socket.jl:317 show(io::IO,st::StatStruct) at stat.jl:31 show(io::IO,cmd::Cmd) at process.jl:33 show(io::IO,cmds::OrCmds) at process.jl:51 show(io::IO,cmds::AndCmds) at process.jl:69 show(io::IO,cr::CmdRedirect) at process.jl:123 show(io::IO,p::Process) at process.jl:622 show{mime}(io::IO,::MIME{mime}) at multimedia.jl:16 show(io::IO,x::Float64) at grisu.jl:114 show(io::IO,x::Float32) at grisu.jl:115 show(io::IO,x::Float16) at grisu.jl:116 show(io::IO,m::Method) at methodshow.jl:35 show(io::IO,mt::MethodTable) at methodshow.jl:74 show(io::IO,cman::LocalManager) at multi.jl:1124 show(io::IO,cman::SSHManager) at multi.jl:1159 show(io::IO,x::BigInt) at gmp.jl:436 show(io::IO,b::BigFloat) at mpfr.jl:706 show(io::IO,u::UUID) at random.jl:838 show(io::IO,v::VersionNumber) at version.jl:57 show(io::IO,x::Prompt) at LineEdit.jl:49 show(io::IO,C::Cholesky{T}) at linalg/factorization.jl:85 show(io::IO,J::UniformScaling{T<:Number}) at linalg/uniformscaling.jl:14 show(io::IO,f::UmfpackLU{Tv<:Union(Complex{Float64},Float64),Ti<:Union(Int64,Int32)}) at linalg/umfpack.jl:142 show(io::IO,cd::CholmodDense{T<:Union(Complex{Float64},Float64)}) at linalg/cholmod.jl:394 show(io::IO,L::CholmodFactor{Tv<:Union(Complex{Float64},Float64),Ti<:Union(Int64,Int32)}) at linalg/cholmod.jl:943 show(io::IO,A::CholmodSparse{Tv<:Union(Complex{Float64},Float64),Ti<:Union(Int64,Int32)}) at linalg/cholmod.jl:944 show(io::IO,info::CPUinfo) at sysinfo.jl:58 show(io::IO,info::CPUinfo,header::Bool) at sysinfo.jl:58 show(io::IO,info::CPUinfo,header::Bool,prefix::String) at sysinfo.jl:58 show{sym}(io::IO,x::MathConst{sym}) at constants.jl:5 show(io::IO,i::VersionInterval) at pkg/types.jl:13 show(io::IO,s::VersionSet) at pkg/types.jl:36 show(io::IO,a::Available) at pkg/types.jl:69 show(io::IO,f::Fixed) at pkg/types.jl:81 show(io::IO,blk::DequeBlock{T}) at /Users/DboyLiao/.julia/v0.3/DataStructures/src/deque.jl:46 show(io::IO,q::Deque{T}) at /Users/DboyLiao/.julia/v0.3/DataStructures/src/deque.jl:139 show(io::IO,h::MutableBinaryHeap{VT,Comp}) at /Users/DboyLiao/.julia/v0.3/DataStructures/src/heaps/mutable_binary_heap.jl:177 show(io::IO,s::OrderedSet{T}) at /Users/DboyLiao/.julia/v0.3/DataStructures/src/orderedset.jl:18 show{T}(io::IO,l::LinkedList{T}) at /Users/DboyLiao/.julia/v0.3/DataStructures/src/list.jl:20 show{T<:HashAlgorithm}(io::IO,::HashState{T<:HashAlgorithm}) at /Users/DboyLiao/.julia/v0.3/Nettle/src/hash.jl:104 show{T<:HashAlgorithm}(io::IO,::HMACState{T<:HashAlgorithm}) at /Users/DboyLiao/.julia/v0.3/Nettle/src/hmac.jl:16 show(io::IO,msg::Msg) at /Users/DboyLiao/.julia/v0.3/IJulia/src/msg.jl:40 show(io::IO,x::ANY) at show.jl:7 show(x) at show.jl:2

``````
``````

In [81]:

a = 3

``````
``````

Out[81]:

3

``````
``````

In [82]:

show(a)

``````
``````

3

``````
``````

In [1]:

immutable Vector2D
x::Float64
y::Float64
end

``````
``````

In [2]:

methods(show)

``````
``````

Out[2]:

89 methods for generic function show: show(io::IO,r::UnitRange{T<:Real}) at range.jl:302 show(io::IO,r::Range{T}) at range.jl:300 show(io::IO,tv::TypeVar) at expr.jl:46 show(io::IO,z::Complex{T<:Real}) at complex.jl:80 show(io::IO,x::Rational{T<:Integer}) at rational.jl:33 show(io::IO,s::IntSet) at intset.jl:176 show(io::IO,::EnvHash) at env.jl:168 show{K,V}(io::IO,t::Associative{K,V}) at dict.jl:20 show(io::IO,iter::Union(KeyIterator{T<:Associative{K,V}},ValueIterator{T<:Associative{K,V}})) at dict.jl:118 show(io::IO,s::Set{T}) at set.jl:10 show(io::IO,c::Char) at char.jl:53 show(io::IO,b::IOBuffer) at iobuffer.jl:27 show(io::IO,s::String) at string.jl:69 show(io::IO,re::Regex) at regex.jl:61 show(io::IO,m::RegexMatch) at regex.jl:89 show(io::IO,s::IOStream) at iostream.jl:26 show(io::IO,t::Task) at task.jl:3 show(io::IO,f::Function) at show.jl:57 show(io::IO,x::IntrinsicFunction) at show.jl:67 show(io::IO,x::UnionType) at show.jl:71 show(io::IO,x::TypeConstructor) at show.jl:80 show(io::IO,x::DataType) at show.jl:83 show(io::IO,tn::TypeName) at show.jl:200 show(io::IO,::Nothing) at show.jl:201 show(io::IO,b::Bool) at show.jl:202 show(io::IO,n::Signed) at show.jl:203 show(io::IO,n::Unsigned) at show.jl:204 show{T}(io::IO,p::Ptr{T}) at show.jl:116 show(io::IO,m::Module) at show.jl:120 show(io::IO,l::LambdaStaticData) at show.jl:128 show(io::IO,t::(Any...,)) at show.jl:197 show(io::IO,s::Symbol) at show.jl:199 show(io::IO,ex::Union(Expr,TopNode,LineNumberNode,SymbolNode,QuoteNode,GotoNode,LabelNode)) at show.jl:234 show(io::IO,W::Woodbury{T}) at linalg/woodbury.jl:42 show(io::IO,M::Bidiagonal{T}) at linalg/bidiag.jl:56 show(io::IO,v::AbstractArray{Any,1}) at show.jl:1194 show(io::IO,v::AbstractArray{T,1}) at show.jl:1195 show(io::IO,X::AbstractArray{T,N}) at show.jl:1130 show(io::IO,stream::Pipe) at stream.jl:171 show(io::IO,stream::PipeServer) at stream.jl:173 show(io::IO,stream::TTY) at stream.jl:220 show(io::IO,e::UVError) at stream.jl:830 show(io::IO,ip::IPv4) at socket.jl:29 show(io::IO,ip::IPv6) at socket.jl:81 show(io::IO,sock::TcpSocket) at socket.jl:314 show(io::IO,sock::TcpServer) at socket.jl:317 show(io::IO,st::StatStruct) at stat.jl:31 show(io::IO,cmd::Cmd) at process.jl:33 show(io::IO,cmds::OrCmds) at process.jl:51 show(io::IO,cmds::AndCmds) at process.jl:69 show(io::IO,cr::CmdRedirect) at process.jl:123 show(io::IO,p::Process) at process.jl:622 show{mime}(io::IO,::MIME{mime}) at multimedia.jl:16 show(io::IO,x::Float64) at grisu.jl:114 show(io::IO,x::Float32) at grisu.jl:115 show(io::IO,x::Float16) at grisu.jl:116 show(io::IO,m::Method) at methodshow.jl:35 show(io::IO,mt::MethodTable) at methodshow.jl:74 show(io::IO,cman::LocalManager) at multi.jl:1124 show(io::IO,cman::SSHManager) at multi.jl:1159 show(io::IO,x::BigInt) at gmp.jl:436 show(io::IO,b::BigFloat) at mpfr.jl:706 show(io::IO,u::UUID) at random.jl:838 show(io::IO,v::VersionNumber) at version.jl:57 show(io::IO,x::Prompt) at LineEdit.jl:49 show(io::IO,C::Cholesky{T}) at linalg/factorization.jl:85 show(io::IO,J::UniformScaling{T<:Number}) at linalg/uniformscaling.jl:14 show(io::IO,f::UmfpackLU{Tv<:Union(Complex{Float64},Float64),Ti<:Union(Int64,Int32)}) at linalg/umfpack.jl:142 show(io::IO,cd::CholmodDense{T<:Union(Complex{Float64},Float64)}) at linalg/cholmod.jl:394 show(io::IO,L::CholmodFactor{Tv<:Union(Complex{Float64},Float64),Ti<:Union(Int64,Int32)}) at linalg/cholmod.jl:943 show(io::IO,A::CholmodSparse{Tv<:Union(Complex{Float64},Float64),Ti<:Union(Int64,Int32)}) at linalg/cholmod.jl:944 show(io::IO,info::CPUinfo) at sysinfo.jl:58 show(io::IO,info::CPUinfo,header::Bool) at sysinfo.jl:58 show(io::IO,info::CPUinfo,header::Bool,prefix::String) at sysinfo.jl:58 show{sym}(io::IO,x::MathConst{sym}) at constants.jl:5 show(io::IO,i::VersionInterval) at pkg/types.jl:13 show(io::IO,s::VersionSet) at pkg/types.jl:36 show(io::IO,a::Available) at pkg/types.jl:69 show(io::IO,f::Fixed) at pkg/types.jl:81 show(io::IO,blk::DequeBlock{T}) at /Users/DboyLiao/.julia/v0.3/DataStructures/src/deque.jl:46 show(io::IO,q::Deque{T}) at /Users/DboyLiao/.julia/v0.3/DataStructures/src/deque.jl:139 show(io::IO,h::MutableBinaryHeap{VT,Comp}) at /Users/DboyLiao/.julia/v0.3/DataStructures/src/heaps/mutable_binary_heap.jl:177 show(io::IO,s::OrderedSet{T}) at /Users/DboyLiao/.julia/v0.3/DataStructures/src/orderedset.jl:18 show{T}(io::IO,l::LinkedList{T}) at /Users/DboyLiao/.julia/v0.3/DataStructures/src/list.jl:20 show{T<:HashAlgorithm}(io::IO,::HashState{T<:HashAlgorithm}) at /Users/DboyLiao/.julia/v0.3/Nettle/src/hash.jl:104 show{T<:HashAlgorithm}(io::IO,::HMACState{T<:HashAlgorithm}) at /Users/DboyLiao/.julia/v0.3/Nettle/src/hmac.jl:16 show(io::IO,msg::Msg) at /Users/DboyLiao/.julia/v0.3/IJulia/src/msg.jl:40 show(io::IO,x::ANY) at show.jl:7 show(x) at show.jl:2

``````
``````

In [3]:

show(io::IO, v::Vector2D) = println(io, "[\$v.x, \$v.y]")

``````
``````

error in method definition: function Base.show must be explicitly imported to be extended

``````
``````

In [4]:

import Base.show

``````
``````

In [5]:

v = Vector2D(3, 5)

``````
``````

Out[5]:

Vector2D(3.0,5.0)

``````
``````

In [6]:

v

``````
``````

Out[6]:

Vector2D(3.0,5.0)

``````
``````

In [11]:

show(io::IO, v::Vector2D) = print(io, "[\$(v.x), \$(v.y)]")

``````
``````

Out[11]:

show (generic function with 90 methods)

``````
``````

In [12]:

v

``````
``````

Out[12]:

[3.0, 5.0]

``````
``````

In [1]:

immutable Vector2D{T <: Number}
x::T
y::T
end

``````
``````

In [3]:

v = Vector2D(3.6, 3.5)

``````
``````

Out[3]:

Vector2D{Float64}(3.6,3.5)

``````
``````

In [5]:

import Base.show
show(io::IO, v::Vector2D) = print(io, "[\$(v.x), \$(v.y)]")

``````
``````

Out[5]:

show (generic function with 90 methods)

``````
``````

In [6]:

show(v)

``````
``````

[3.6, 3.5]

``````
``````

In [7]:

v2 = Vector2D(3//4, 5//6)

``````
``````

Out[7]:

[3//4, 5//6]

``````
``````

In [9]:

@which show(v2)

``````
``````

Out[9]:

show(x) at show.jl:2

``````
``````

In [10]:

show{T}(io::IO, v::Vector2D{T}) = print(io, "[\$(v.x), \$(v.y)]")

``````
``````

Out[10]:

show (generic function with 91 methods)

``````
``````

In [11]:

@which show(v2)

``````
``````

Out[11]:

show(x) at show.jl:2

``````
``````

In [12]:

show(v2)

``````
``````

[3//4, 5//6]

``````
``````

In [13]:

``````
``````

``````
``````

In [14]:

``````
``````

INFO: Cloning cache of ArrayViews from git://github.com/JuliaLang/ArrayViews.jl.git
INFO: Cloning cache of Calculus from git://github.com/johnmyleswhite/Calculus.jl.git
INFO: Cloning cache of Codecs from git://github.com/dcjones/Codecs.jl.git
INFO: Cloning cache of Contour from git://github.com/tlycken/Contour.jl.git
INFO: Cloning cache of DataArrays from git://github.com/JuliaStats/DataArrays.jl.git
INFO: Cloning cache of DataFrames from git://github.com/JuliaStats/DataFrames.jl.git
INFO: Cloning cache of Distances from git://github.com/JuliaStats/Distances.jl.git
INFO: Cloning cache of Distributions from git://github.com/JuliaStats/Distributions.jl.git
INFO: Cloning cache of DualNumbers from git://github.com/JuliaDiff/DualNumbers.jl.git
INFO: Cloning cache of GZip from git://github.com/JuliaLang/GZip.jl.git
INFO: Cloning cache of Grid from git://github.com/timholy/Grid.jl.git
INFO: Cloning cache of Hexagons from git://github.com/dcjones/Hexagons.jl.git
INFO: Cloning cache of ImmutableArrays from git://github.com/twadleigh/ImmutableArrays.jl.git
INFO: Cloning cache of KernelDensity from git://github.com/JuliaStats/KernelDensity.jl.git
INFO: Cloning cache of Loess from git://github.com/dcjones/Loess.jl.git
INFO: Cloning cache of NaNMath from git://github.com/mlubin/NaNMath.jl.git
INFO: Cloning cache of Optim from git://github.com/JuliaOpt/Optim.jl.git
INFO: Cloning cache of PDMats from git://github.com/JuliaStats/PDMats.jl.git
INFO: Cloning cache of Reexport from git://github.com/simonster/Reexport.jl.git
INFO: Cloning cache of Showoff from git://github.com/dcjones/Showoff.jl.git
INFO: Cloning cache of SortingAlgorithms from git://github.com/JuliaLang/SortingAlgorithms.jl.git
INFO: Cloning cache of StatsBase from git://github.com/JuliaStats/StatsBase.jl.git
INFO: Installing ArrayViews v0.4.8
INFO: Installing Calculus v0.1.6
INFO: Installing Codecs v0.1.3
INFO: Installing Contour v0.0.6
INFO: Installing DataArrays v0.2.11
INFO: Installing DataFrames v0.6.1
INFO: Installing Distances v0.2.0
INFO: Installing Distributions v0.6.3
INFO: Installing DualNumbers v0.1.2
INFO: Installing GZip v0.2.13
INFO: Installing Grid v0.3.7
INFO: Installing Hexagons v0.0.2
INFO: Installing ImmutableArrays v0.0.6
INFO: Installing KernelDensity v0.1.0
INFO: Installing Loess v0.0.3
INFO: Installing NaNMath v0.0.2
INFO: Installing Optim v0.4.0
INFO: Installing PDMats v0.3.1
INFO: Installing Reexport v0.0.2
INFO: Installing Showoff v0.0.3
INFO: Installing SortingAlgorithms v0.0.4
INFO: Installing StatsBase v0.6.12
INFO: Package database updated

``````
``````

In [1]:

``````
``````

In [2]:

using DataFrames
using RDatasets

``````
``````

In [3]:

?dataset

``````
``````

dataset (generic function with 1 method)

``````
``````

In [8]:

iris = dataset("datasets", "iris");

``````
``````

Out[8]:

SepalLengthSepalWidthPetalLengthPetalWidthSpecies15.13.51.40.2setosa24.93.01.40.2setosa34.73.21.30.2setosa44.63.11.50.2setosa55.03.61.40.2setosa65.43.91.70.4setosa

``````
``````

In [9]:

size(iris)

``````
``````

Out[9]:

(150,5)

``````
``````

In [10]:

typeof(iris)

``````
``````

Out[10]:

DataFrame (constructor with 11 methods)

``````
``````

In [22]:

plot(iris, x = "PetalWidth", y = "PetalLength", color = "Species", Geom.point)

``````
``````

Out[22]:

PetalWidth

-3.0
-2.5
-2.0
-1.5
-1.0
-0.5
0.0
0.5
1.0
1.5
2.0
2.5
3.0
3.5
4.0
4.5
5.0
5.5
-2.5
-2.4
-2.3
-2.2
-2.1
-2.0
-1.9
-1.8
-1.7
-1.6
-1.5
-1.4
-1.3
-1.2
-1.1
-1.0
-0.9
-0.8
-0.7
-0.6
-0.5
-0.4
-0.3
-0.2
-0.1
0.0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1.0
1.1
1.2
1.3
1.4
1.5
1.6
1.7
1.8
1.9
2.0
2.1
2.2
2.3
2.4
2.5
2.6
2.7
2.8
2.9
3.0
3.1
3.2
3.3
3.4
3.5
3.6
3.7
3.8
3.9
4.0
4.1
4.2
4.3
4.4
4.5
4.6
4.7
4.8
4.9
5.0
-2.5
0.0
2.5
5.0
-2.6
-2.4
-2.2
-2.0
-1.8
-1.6
-1.4
-1.2
-1.0
-0.8
-0.6
-0.4
-0.2
0.0
0.2
0.4
0.6
0.8
1.0
1.2
1.4
1.6
1.8
2.0
2.2
2.4
2.6
2.8
3.0
3.2
3.4
3.6
3.8
4.0
4.2
4.4
4.6
4.8
5.0

setosa
versicolor
virginica

Species

-10
-8
-6
-4
-2
0
2
4
6
8
10
12
14
16
18
-8.0
-7.5
-7.0
-6.5
-6.0
-5.5
-5.0
-4.5
-4.0
-3.5
-3.0
-2.5
-2.0
-1.5
-1.0
-0.5
0.0
0.5
1.0
1.5
2.0
2.5
3.0
3.5
4.0
4.5
5.0
5.5
6.0
6.5
7.0
7.5
8.0
8.5
9.0
9.5
10.0
10.5
11.0
11.5
12.0
12.5
13.0
13.5
14.0
14.5
15.0
15.5
16.0
-10
0
10
20
-8.0
-7.5
-7.0
-6.5
-6.0
-5.5
-5.0
-4.5
-4.0
-3.5
-3.0
-2.5
-2.0
-1.5
-1.0
-0.5
0.0
0.5
1.0
1.5
2.0
2.5
3.0
3.5
4.0
4.5
5.0
5.5
6.0
6.5
7.0
7.5
8.0
8.5
9.0
9.5
10.0
10.5
11.0
11.5
12.0
12.5
13.0
13.5
14.0
14.5
15.0
15.5
16.0

PetalLength

(function(N){var k=/[\.\/]/,L=/\s*,\s*/,C=function(a,d){return a-d},a,v,y={n:{}},M=function(){for(var a=0,d=this.length;a<d;a++)if("undefined"!=typeof this[a])return this[a]},A=function(){for(var a=this.length;--a;)if("undefined"!=typeof this[a])return this[a]},w=function(k,d){k=String(k);var f=v,n=Array.prototype.slice.call(arguments,2),u=w.listeners(k),p=0,b,q=[],e={},l=[],r=a;l.firstDefined=M;l.lastDefined=A;a=k;for(var s=v=0,x=u.length;s<x;s++)"zIndex"in u[s]&&(q.push(u[s].zIndex),0>u[s].zIndex&&
(e[u[s].zIndex]=u[s]));for(q.sort(C);0>q[p];)if(b=e[q[p++] ],l.push(b.apply(d,n)),v)return v=f,l;for(s=0;s<x;s++)if(b=u[s],"zIndex"in b)if(b.zIndex==q[p]){l.push(b.apply(d,n));if(v)break;do if(p++,(b=e[q[p] ])&&l.push(b.apply(d,n)),v)break;while(b)}else e[b.zIndex]=b;else if(l.push(b.apply(d,n)),v)break;v=f;a=r;return l};w._events=y;w.listeners=function(a){a=a.split(k);var d=y,f,n,u,p,b,q,e,l=[d],r=[];u=0;for(p=a.length;u<p;u++){e=[];b=0;for(q=l.length;b<q;b++)for(d=l[b].n,f=[d[a[u] ],d["*"] ],n=2;n--;)if(d=
f[n])e.push(d),r=r.concat(d.f||[]);l=e}return r};w.on=function(a,d){a=String(a);if("function"!=typeof d)return function(){};for(var f=a.split(L),n=0,u=f.length;n<u;n++)(function(a){a=a.split(k);for(var b=y,f,e=0,l=a.length;e<l;e++)b=b.n,b=b.hasOwnProperty(a[e])&&b[a[e] ]||(b[a[e] ]={n:{}});b.f=b.f||[];e=0;for(l=b.f.length;e<l;e++)if(b.f[e]==d){f=!0;break}!f&&b.f.push(d)})(f[n]);return function(a){+a==+a&&(d.zIndex=+a)}};w.f=function(a){var d=[].slice.call(arguments,1);return function(){w.apply(null,
[a,null].concat(d).concat([].slice.call(arguments,0)))}};w.stop=function(){v=1};w.nt=function(k){return k?(new RegExp("(?:\\.|\\/|^)"+k+"(?:\\.|\\/|\$)")).test(a):a};w.nts=function(){return a.split(k)};w.off=w.unbind=function(a,d){if(a){var f=a.split(L);if(1<f.length)for(var n=0,u=f.length;n<u;n++)w.off(f[n],d);else{for(var f=a.split(k),p,b,q,e,l=[y],n=0,u=f.length;n<u;n++)for(e=0;e<l.length;e+=q.length-2){q=[e,1];p=l[e].n;if("*"!=f[n])p[f[n] ]&&q.push(p[f[n] ]);else for(b in p)p.hasOwnProperty(b)&&
q.push(p[b]);l.splice.apply(l,q)}n=0;for(u=l.length;n<u;n++)for(p=l[n];p.n;){if(d){if(p.f){e=0;for(f=p.f.length;e<f;e++)if(p.f[e]==d){p.f.splice(e,1);break}!p.f.length&&delete p.f}for(b in p.n)if(p.n.hasOwnProperty(b)&&p.n[b].f){q=p.n[b].f;e=0;for(f=q.length;e<f;e++)if(q[e]==d){q.splice(e,1);break}!q.length&&delete p.n[b].f}}else for(b in delete p.f,p.n)p.n.hasOwnProperty(b)&&p.n[b].f&&delete p.n[b].f;p=p.n}}}else w._events=y={n:{}}};w.once=function(a,d){var f=function(){w.unbind(a,f);return d.apply(this,
arguments)};return w.on(a,f)};w.version="0.4.2";w.toString=function(){return"You are running Eve 0.4.2"};"undefined"!=typeof module&&module.exports?module.exports=w:"function"===typeof define&&define.amd?define("eve",[],function(){return w}):N.eve=w})(this);
(function(N,k){"function"===typeof define&&define.amd?define("Snap.svg",["eve"],function(L){return k(N,L)}):k(N,N.eve)})(this,function(N,k){var L=function(a){var k={},y=N.requestAnimationFrame||N.webkitRequestAnimationFrame||N.mozRequestAnimationFrame||N.oRequestAnimationFrame||N.msRequestAnimationFrame||function(a){setTimeout(a,16)},M=Array.isArray||function(a){return a instanceof Array||"[object Array]"==Object.prototype.toString.call(a)},A=0,w="M"+(+new Date).toString(36),z=function(a){if(null==
a)return this.s;var b=this.s-a;this.b+=this.dur*b;this.B+=this.dur*b;this.s=a},d=function(a){if(null==a)return this.spd;this.spd=a},f=function(a){if(null==a)return this.dur;this.s=this.s*a/this.dur;this.dur=a},n=function(){delete k[this.id];this.update();a("mina.stop."+this.id,this)},u=function(){this.pdif||(delete k[this.id],this.update(),this.pdif=this.get()-this.b)},p=function(){this.pdif&&(this.b=this.get()-this.pdif,delete this.pdif,k[this.id]=this)},b=function(){var a;if(M(this.start)){a=[];
for(var b=0,e=this.start.length;b<e;b++)a[b]=+this.start[b]+(this.end[b]-this.start[b])*this.easing(this.s)}else a=+this.start+(this.end-this.start)*this.easing(this.s);this.set(a)},q=function(){var l=0,b;for(b in k)if(k.hasOwnProperty(b)){var e=k[b],f=e.get();l++;e.s=(f-e.b)/(e.dur/e.spd);1<=e.s&&(delete k[b],e.s=1,l--,function(b){setTimeout(function(){a("mina.finish."+b.id,b)})}(e));e.update()}l&&y(q)},e=function(a,r,s,x,G,h,J){a={id:w+(A++).toString(36),start:a,end:r,b:s,s:0,dur:x-s,spd:1,get:G,
set:h,easing:J||e.linear,status:z,speed:d,duration:f,stop:n,pause:u,resume:p,update:b};k[a.id]=a;r=0;for(var K in k)if(k.hasOwnProperty(K)&&(r++,2==r))break;1==r&&y(q);return a};e.time=Date.now||function(){return+new Date};e.getById=function(a){return k[a]||null};e.linear=function(a){return a};e.easeout=function(a){return Math.pow(a,1.7)};e.easein=function(a){return Math.pow(a,0.48)};e.easeinout=function(a){if(1==a)return 1;if(0==a)return 0;var b=0.48-a/1.04,e=Math.sqrt(0.1734+b*b);a=e-b;a=Math.pow(Math.abs(a),
1/3)*(0>a?-1:1);b=-e-b;b=Math.pow(Math.abs(b),1/3)*(0>b?-1:1);a=a+b+0.5;return 3*(1-a)*a*a+a*a*a};e.backin=function(a){return 1==a?1:a*a*(2.70158*a-1.70158)};e.backout=function(a){if(0==a)return 0;a-=1;return a*a*(2.70158*a+1.70158)+1};e.elastic=function(a){return a==!!a?a:Math.pow(2,-10*a)*Math.sin(2*(a-0.075)*Math.PI/0.3)+1};e.bounce=function(a){a<1/2.75?a*=7.5625*a:a<2/2.75?(a-=1.5/2.75,a=7.5625*a*a+0.75):a<2.5/2.75?(a-=2.25/2.75,a=7.5625*a*a+0.9375):(a-=2.625/2.75,a=7.5625*a*a+0.984375);return a};
return N.mina=e}("undefined"==typeof k?function(){}:k),C=function(){function a(c,t){if(c){if(c.tagName)return x(c);if(y(c,"array")&&a.set)return a.set.apply(a,c);if(c instanceof e)return c;if(null==t)return c=G.doc.querySelector(c),x(c)}return new s(null==c?"100%":c,null==t?"100%":t)}function v(c,a){if(a){"#text"==c&&(c=G.doc.createTextNode(a.text||""));"string"==typeof c&&(c=v(c));if("string"==typeof a)return"xlink:"==a.substring(0,6)?c.getAttributeNS(m,a.substring(6)):"xml:"==a.substring(0,4)?c.getAttributeNS(la,
a.substring(4)):c.getAttribute(a);for(var da in a)if(a[h](da)){var b=J(a[da]);b?"xlink:"==da.substring(0,6)?c.setAttributeNS(m,da.substring(6),b):"xml:"==da.substring(0,4)?c.setAttributeNS(la,da.substring(4),b):c.setAttribute(da,b):c.removeAttribute(da)}}else c=G.doc.createElementNS(la,c);return c}function y(c,a){a=J.prototype.toLowerCase.call(a);return"finite"==a?isFinite(c):"array"==a&&(c instanceof Array||Array.isArray&&Array.isArray(c))?!0:"null"==a&&null===c||a==typeof c&&null!==c||"object"==
a&&c===Object(c)||\$.call(c).slice(8,-1).toLowerCase()==a}function M(c){if("function"==typeof c||Object(c)!==c)return c;var a=new c.constructor,b;for(b in c)c[h](b)&&(a[b]=M(c[b]));return a}function A(c,a,b){function m(){var e=Array.prototype.slice.call(arguments,0),f=e.join("\u2400"),d=m.cache=m.cache||{},l=m.count=m.count||[];if(d[h](f)){a:for(var e=l,l=f,B=0,H=e.length;B<H;B++)if(e[B]===l){e.push(e.splice(B,1)[0]);break a}return b?b(d[f]):d[f]}1E3<=l.length&&delete d[l.shift()];l.push(f);d[f]=c.apply(a,
e);return b?b(d[f]):d[f]}return m}function w(c,a,b,m,e,f){return null==e?(c-=b,a-=m,c||a?(180*I.atan2(-a,-c)/C+540)%360:0):w(c,a,e,f)-w(b,m,e,f)}function z(c){return c%360*C/180}function d(c){var a=[];c=c.replace(/(?:^|\s)(\w+)\(([^)]+)\)/g,function(c,b,m){m=m.split(/\s*,\s*|\s+/);"rotate"==b&&1==m.length&&m.push(0,0);"scale"==b&&(2<m.length?m=m.slice(0,2):2==m.length&&m.push(0,0),1==m.length&&m.push(m[0],0,0));"skewX"==b?a.push(["m",1,0,I.tan(z(m[0])),1,0,0]):"skewY"==b?a.push(["m",1,I.tan(z(m[0])),
0,1,0,0]):a.push([b.charAt(0)].concat(m));return c});return a}function f(c,t){var b=O(c),m=new a.Matrix;if(b)for(var e=0,f=b.length;e<f;e++){var h=b[e],d=h.length,B=J(h[0]).toLowerCase(),H=h[0]!=B,l=H?m.invert():0,E;"t"==B&&2==d?m.translate(h[1],0):"t"==B&&3==d?H?(d=l.x(0,0),B=l.y(0,0),H=l.x(h[1],h[2]),l=l.y(h[1],h[2]),m.translate(H-d,l-B)):m.translate(h[1],h[2]):"r"==B?2==d?(E=E||t,m.rotate(h[1],E.x+E.width/2,E.y+E.height/2)):4==d&&(H?(H=l.x(h[2],h[3]),l=l.y(h[2],h[3]),m.rotate(h[1],H,l)):m.rotate(h[1],
c.node.getAttribute("transform");if(!t)return new a.Matrix;t=d(t)}else t=a._.rgTransform.test(t)?J(t).replace(/\.{3}|\u2026/g,c._.transform||aa):d(t),y(t,"array")&&(t=a.path?a.path.toString.call(t):J(t)),c._.transform=t;var b=f(t,c.getBBox(1));if(m)return b;c.matrix=b}function u(c){c=c.node.ownerSVGElement&&x(c.node.ownerSVGElement)||c.node.parentNode&&x(c.node.parentNode)||a.select("svg")||a(0,0);var t=c.select("defs"),t=null==t?!1:t.node;t||(t=r("defs",c.node).node);return t}function p(c){return c.node.ownerSVGElement&&
x(c.node.ownerSVGElement)||a.select("svg")}function b(c,a,m){function b(c){if(null==c)return aa;if(c==+c)return c;v(B,{width:c});try{return B.getBBox().width}catch(a){return 0}}function h(c){if(null==c)return aa;if(c==+c)return c;v(B,{height:c});try{return B.getBBox().height}catch(a){return 0}}function e(b,B){null==a?d[b]=B(c.attr(b)||0):b==a&&(d=B(null==m?c.attr(b)||0:m))}var f=p(c).node,d={},B=f.querySelector(".svg---mgr");B||(B=v("rect"),v(B,{x:-9E9,y:-9E9,width:10,height:10,"class":"svg---mgr",
b)}f.removeChild(B);return d}function q(c){y(c,"array")||(c=Array.prototype.slice.call(arguments,0));for(var a=0,b=0,m=this.node;this[a];)delete this[a++];for(a=0;a<c.length;a++)"set"==c[a].type?c[a].forEach(function(c){m.appendChild(c.node)}):m.appendChild(c[a].node);for(var h=m.childNodes,a=0;a<h.length;a++)this[b++]=x(h[a]);return this}function e(c){if(c.snap in E)return E[c.snap];var a=this.id=V(),b;try{b=c.ownerSVGElement}catch(m){}this.node=c;b&&(this.paper=new s(b));this.type=c.tagName;this.anims=
{};this._={transform:[]};c.snap=a;E[a]=this;"g"==this.type&&(this.add=q);if(this.type in{g:1,mask:1,pattern:1})for(var e in s.prototype)s.prototype[h](e)&&(this[e]=s.prototype[e])}function l(c){this.node=c}function r(c,a){var b=v(c);a.appendChild(b);return x(b)}function s(c,a){var b,m,f,d=s.prototype;if(c&&"svg"==c.tagName){if(c.snap in E)return E[c.snap];var l=c.ownerDocument;b=new e(c);m=c.getElementsByTagName("desc")[0];f=c.getElementsByTagName("defs")[0];m||(m=v("desc"),m.appendChild(l.createTextNode("Created with Snap")),
b.node.appendChild(m));f||(f=v("defs"),b.node.appendChild(f));b.defs=f;for(var ca in d)d[h](ca)&&(b[ca]=d[ca]);b.paper=b.root=b}else b=r("svg",G.doc.body),v(b.node,{height:a,version:1.1,width:c,xmlns:la});return b}function x(c){return!c||c instanceof e||c instanceof l?c:c.tagName&&"svg"==c.tagName.toLowerCase()?new s(c):c.tagName&&"object"==c.tagName.toLowerCase()&&"image/svg+xml"==c.type?new s(c.contentDocument.getElementsByTagName("svg")[0]):new e(c)}a.version="0.3.0";a.toString=function(){return"Snap v"+
this.version};a._={};var G={win:N,doc:N.document};a._.glob=G;var h="hasOwnProperty",J=String,K=parseFloat,U=parseInt,I=Math,P=I.max,Q=I.min,Y=I.abs,C=I.PI,aa="",\$=Object.prototype.toString,F=/^\s*((#[a-f\d]{6})|(#[a-f\d]{3})|rgba?\(\s*([\d\.]+%?\s*,\s*[\d\.]+%?\s*,\s*[\d\.]+%?(?:\s*,\s*[\d\.]+%?)?)\s*\)|hsba?\(\s*([\d\.]+(?:deg|\xb0|%)?\s*,\s*[\d\.]+%?\s*,\s*[\d\.]+(?:%?\s*,\s*[\d\.]+)?%?)\s*\)|hsla?\(\s*([\d\.]+(?:deg|\xb0|%)?\s*,\s*[\d\.]+%?\s*,\s*[\d\.]+(?:%?\s*,\s*[\d\.]+)?%?)\s*\))\s*\$/i;a._.separator=
RegExp("[,\t\n\x0B\f\r \u00a0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029]+");var S=RegExp("[\t\n\x0B\f\r \u00a0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029]*,[\t\n\x0B\f\r \u00a0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029]*"),X={hs:1,rg:1},W=RegExp("([a-z])[\t\n\x0B\f\r \u00a0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029,]*((-?\\d*\\.?\\d*(?:e[\\-+]?\\d+)?[\t\n\x0B\f\r \u00a0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029]*,?[\t\n\x0B\f\r \u00a0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029]*)+)",
"ig"),ma=RegExp("([rstm])[\t\n\x0B\f\r \u00a0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029,]*((-?\\d*\\.?\\d*(?:e[\\-+]?\\d+)?[\t\n\x0B\f\r \u00a0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029]*,?[\t\n\x0B\f\r \u00a0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029]*)+)","ig"),Z=RegExp("(-?\\d*\\.?\\d*(?:e[\\-+]?\\d+)?)[\t\n\x0B\f\r \u00a0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029]*,?[\t\n\x0B\f\r \u00a0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029]*",
"ig"),na=0,ba="S"+(+new Date).toString(36),V=function(){return ba+(na++).toString(36)},m="http://www.w3.org/1999/xlink",la="http://www.w3.org/2000/svg",E={},ca=a.url=function(c){return"url('#"+c+"')"};a._.\$=v;a._.id=V;a.format=function(){var c=/\{([^\}]+)\}/g,a=/(?:(?:^|\.)(.+?)(?=\[|\.|\$|\()|\[('|")(.+?)\2\])(\(\))?/g,b=function(c,b,m){var h=m;b.replace(a,function(c,a,b,m,t){a=a||m;h&&(a in h&&(h=h[a]),"function"==typeof h&&t&&(h=h()))});return h=(null==h||h==m?c:h)+""};return function(a,m){return J(a).replace(c,
function(c,a){return b(c,a,m)})}}();a._.clone=M;a._.cacher=A;a.rad=z;a.deg=function(c){return 180*c/C%360};a.angle=w;a.is=y;a.snapTo=function(c,a,b){b=y(b,"finite")?b:10;if(y(c,"array"))for(var m=c.length;m--;){if(Y(c[m]-a)<=b)return c[m]}else{c=+c;m=a%c;if(m<b)return a-m;if(m>c-b)return a-m+c}return a};a.getRGB=A(function(c){if(!c||(c=J(c)).indexOf("-")+1)return{r:-1,g:-1,b:-1,hex:"none",error:1,toString:ka};if("none"==c)return{r:-1,g:-1,b:-1,hex:"none",toString:ka};!X[h](c.toLowerCase().substring(0,
2))&&"#"!=c.charAt()&&(c=T(c));if(!c)return{r:-1,g:-1,b:-1,hex:"none",error:1,toString:ka};var b,m,e,f,d;if(c=c.match(F)){c[2]&&(e=U(c[2].substring(5),16),m=U(c[2].substring(3,5),16),b=U(c[2].substring(1,3),16));c[3]&&(e=U((d=c[3].charAt(3))+d,16),m=U((d=c[3].charAt(2))+d,16),b=U((d=c[3].charAt(1))+d,16));c[4]&&(d=c[4].split(S),b=K(d[0]),"%"==d[0].slice(-1)&&(b*=2.55),m=K(d[1]),"%"==d[1].slice(-1)&&(m*=2.55),e=K(d[2]),"%"==d[2].slice(-1)&&(e*=2.55),"rgba"==c[1].toLowerCase().slice(0,4)&&(f=K(d[3])),
d[3]&&"%"==d[3].slice(-1)&&(f/=100));if(c[5])return d=c[5].split(S),b=K(d[0]),"%"==d[0].slice(-1)&&(b/=100),m=K(d[1]),"%"==d[1].slice(-1)&&(m/=100),e=K(d[2]),"%"==d[2].slice(-1)&&(e/=100),"deg"!=d[0].slice(-3)&&"\u00b0"!=d[0].slice(-1)||(b/=360),"hsba"==c[1].toLowerCase().slice(0,4)&&(f=K(d[3])),d[3]&&"%"==d[3].slice(-1)&&(f/=100),a.hsb2rgb(b,m,e,f);if(c[6])return d=c[6].split(S),b=K(d[0]),"%"==d[0].slice(-1)&&(b/=100),m=K(d[1]),"%"==d[1].slice(-1)&&(m/=100),e=K(d[2]),"%"==d[2].slice(-1)&&(e/=100),
"deg"!=d[0].slice(-3)&&"\u00b0"!=d[0].slice(-1)||(b/=360),"hsla"==c[1].toLowerCase().slice(0,4)&&(f=K(d[3])),d[3]&&"%"==d[3].slice(-1)&&(f/=100),a.hsl2rgb(b,m,e,f);b=Q(I.round(b),255);m=Q(I.round(m),255);e=Q(I.round(e),255);f=Q(P(f,0),1);c={r:b,g:m,b:e,toString:ka};c.hex="#"+(16777216|e|m<<8|b<<16).toString(16).slice(1);c.opacity=y(f,"finite")?f:1;return c}return{r:-1,g:-1,b:-1,hex:"none",error:1,toString:ka}},a);a.hsb=A(function(c,b,m){return a.hsb2rgb(c,b,m).hex});a.hsl=A(function(c,b,m){return a.hsl2rgb(c,
b,m).hex});a.rgb=A(function(c,a,b,m){if(y(m,"finite")){var e=I.round;return"rgba("+[e(c),e(a),e(b),+m.toFixed(2)]+")"}return"#"+(16777216|b|a<<8|c<<16).toString(16).slice(1)});var T=function(c){var a=G.doc.getElementsByTagName("head")[0]||G.doc.getElementsByTagName("svg")[0];T=A(function(c){if("red"==c.toLowerCase())return"rgb(255, 0, 0)";a.style.color="rgb(255, 0, 0)";a.style.color=c;c=G.doc.defaultView.getComputedStyle(a,aa).getPropertyValue("color");return"rgb(255, 0, 0)"==c?null:c});return T(c)},
qa=function(){return"hsb("+[this.h,this.s,this.b]+")"},ra=function(){return"hsl("+[this.h,this.s,this.l]+")"},ka=function(){return 1==this.opacity||null==this.opacity?this.hex:"rgba("+[this.r,this.g,this.b,this.opacity]+")"},D=function(c,b,m){null==b&&y(c,"object")&&"r"in c&&"g"in c&&"b"in c&&(m=c.b,b=c.g,c=c.r);null==b&&y(c,string)&&(m=a.getRGB(c),c=m.r,b=m.g,m=m.b);if(1<c||1<b||1<m)c/=255,b/=255,m/=255;return[c,b,m]},oa=function(c,b,m,e){c=I.round(255*c);b=I.round(255*b);m=I.round(255*m);c={r:c,
g:b,b:m,opacity:y(e,"finite")?e:1,hex:a.rgb(c,b,m),toString:ka};y(e,"finite")&&(c.opacity=e);return c};a.color=function(c){var b;y(c,"object")&&"h"in c&&"s"in c&&"b"in c?(b=a.hsb2rgb(c),c.r=b.r,c.g=b.g,c.b=b.b,c.opacity=1,c.hex=b.hex):y(c,"object")&&"h"in c&&"s"in c&&"l"in c?(b=a.hsl2rgb(c),c.r=b.r,c.g=b.g,c.b=b.b,c.opacity=1,c.hex=b.hex):(y(c,"string")&&(c=a.getRGB(c)),y(c,"object")&&"r"in c&&"g"in c&&"b"in c&&!("error"in c)?(b=a.rgb2hsl(c),c.h=b.h,c.s=b.s,c.l=b.l,b=a.rgb2hsb(c),c.v=b.b):(c={hex:"none"},
c.r=c.g=c.b=c.h=c.s=c.v=c.l=-1,c.error=1));c.toString=ka;return c};a.hsb2rgb=function(c,a,b,m){y(c,"object")&&"h"in c&&"s"in c&&"b"in c&&(b=c.b,a=c.s,c=c.h,m=c.o);var e,h,d;c=360*c%360/60;d=b*a;a=d*(1-Y(c%2-1));b=e=h=b-d;c=~~c;b+=[d,a,0,0,a,d][c];e+=[a,d,d,a,0,0][c];h+=[0,0,a,d,d,a][c];return oa(b,e,h,m)};a.hsl2rgb=function(c,a,b,m){y(c,"object")&&"h"in c&&"s"in c&&"l"in c&&(b=c.l,a=c.s,c=c.h);if(1<c||1<a||1<b)c/=360,a/=100,b/=100;var e,h,d;c=360*c%360/60;d=2*a*(0.5>b?b:1-b);a=d*(1-Y(c%2-1));b=e=
h=b-d/2;c=~~c;b+=[d,a,0,0,a,d][c];e+=[a,d,d,a,0,0][c];h+=[0,0,a,d,d,a][c];return oa(b,e,h,m)};a.rgb2hsb=function(c,a,b){b=D(c,a,b);c=b[0];a=b[1];b=b[2];var m,e;m=P(c,a,b);e=m-Q(c,a,b);c=((0==e?0:m==c?(a-b)/e:m==a?(b-c)/e+2:(c-a)/e+4)+360)%6*60/360;return{h:c,s:0==e?0:e/m,b:m,toString:qa}};a.rgb2hsl=function(c,a,b){b=D(c,a,b);c=b[0];a=b[1];b=b[2];var m,e,h;m=P(c,a,b);e=Q(c,a,b);h=m-e;c=((0==h?0:m==c?(a-b)/h:m==a?(b-c)/h+2:(c-a)/h+4)+360)%6*60/360;m=(m+e)/2;return{h:c,s:0==h?0:0.5>m?h/(2*m):h/(2-2*
m),l:m,toString:ra}};a.parsePathString=function(c){if(!c)return null;var b=a.path(c);if(b.arr)return a.path.clone(b.arr);var m={a:7,c:6,o:2,h:1,l:2,m:2,r:4,q:4,s:4,t:2,v:1,u:3,z:0},e=[];y(c,"array")&&y(c[0],"array")&&(e=a.path.clone(c));e.length||J(c).replace(W,function(c,a,b){var h=[];c=a.toLowerCase();b.replace(Z,function(c,a){a&&h.push(+a)});"m"==c&&2<h.length&&(e.push([a].concat(h.splice(0,2))),c="l",a="m"==a?"l":"L");"o"==c&&1==h.length&&e.push([a,h[0] ]);if("r"==c)e.push([a].concat(h));else for(;h.length>=
m[c]&&(e.push([a].concat(h.splice(0,m[c]))),m[c]););});e.toString=a.path.toString;b.arr=a.path.clone(e);return e};var O=a.parseTransformString=function(c){if(!c)return null;var b=[];y(c,"array")&&y(c[0],"array")&&(b=a.path.clone(c));b.length||J(c).replace(ma,function(c,a,m){var e=[];a.toLowerCase();m.replace(Z,function(c,a){a&&e.push(+a)});b.push([a].concat(e))});b.toString=a.path.toString;return b};a._.svgTransform2string=d;a._.rgTransform=RegExp("^[a-z][\t\n\x0B\f\r \u00a0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029]*-?\\.?\\d",
"i");a._.transform2matrix=f;a._unit2px=b;a._.getSomeDefs=u;a._.getSomeSVG=p;a.select=function(c){return x(G.doc.querySelector(c))};a.selectAll=function(c){c=G.doc.querySelectorAll(c);for(var b=(a.set||Array)(),m=0;m<c.length;m++)b.push(x(c[m]));return b};setInterval(function(){for(var c in E)if(E[h](c)){var a=E[c],b=a.node;("svg"!=a.type&&!b.ownerSVGElement||"svg"==a.type&&(!b.parentNode||"ownerSVGElement"in b.parentNode&&!b.ownerSVGElement))&&delete E[c]}},1E4);(function(c){function m(c){function a(c,
"id");t&&(v(h.node,{id:h.id}),c.push({old:t,id:h.id}))}l=0;for(E=c.length;l<E;l++)if(e=f[c[l].old])for(h=0,t=e.length;h<t;h++)e[h](c[l].id)}function e(c,a,b){return function(m){m=m.slice(c,a);1==m.length&&(m=m[0]);return b?b(m):m}}function d(c){return function(){var a=c?"<"+this.type:"",b=this.node.attributes,m=this.node.childNodes;if(c)for(var e=0,h=b.length;e<h;e++)a+=" "+b[e].name+'="'+b[e].value.replace(/"/g,'\\"')+'"';if(m.length){c&&(a+=">");e=0;for(h=m.length;e<h;e++)3==m[e].nodeType?a+=m[e].nodeValue:
1==m[e].nodeType&&(a+=x(m[e]).toString());c&&(a+="</"+this.type+">")}else c&&(a+="/>");return a}}c.attr=function(c,a){if(!c)return this;if(y(c,"string"))if(1<arguments.length){var b={};b[c]=a;c=b}else return k("snap.util.getattr."+c,this).firstDefined();for(var m in c)c[h](m)&&k("snap.util.attr."+m,this,c[m]);return this};c.getBBox=function(c){if(!a.Matrix||!a.path)return this.node.getBBox();var b=this,m=new a.Matrix;if(b.removed)return a._.box();for(;"use"==b.type;)if(c||(m=m.add(b.transform().localMatrix.translate(b.attr("x")||
"").match(l)||[];c=this.node;var b=c.className.baseVal,m=b.match(l)||[],e,h,d;if(a.length){for(e=0;d=a[e++];)h=m.indexOf(d),~h||m.push(d);a=m.join(" ");b!=a&&(c.className.baseVal=a)}return this};c.removeClass=function(c){var a=(c||"").match(l)||[];c=this.node;var b=c.className.baseVal,m=b.match(l)||[],e,h;if(m.length){for(e=0;h=a[e++];)h=m.indexOf(h),~h&&m.splice(h,1);a=m.join(" ");b!=a&&(c.className.baseVal=a)}return this};c.hasClass=function(c){return!!~(this.node.className.baseVal.match(l)||[]).indexOf(c)};
c.toggleClass=function(c,a){if(null!=a)return a?this.addClass(c):this.removeClass(c);var b=(c||"").match(l)||[],m=this.node,e=m.className.baseVal,h=e.match(l)||[],d,f,E;for(d=0;E=b[d++];)f=h.indexOf(E),~f?h.splice(f,1):h.push(E);b=h.join(" ");e!=b&&(m.className.baseVal=b);return this};c.clone=function(){var c=x(this.node.cloneNode(!0));v(c.node,"id")&&v(c.node,{id:c.id});m(c);c.insertAfter(this);return c};c.toDefs=function(){u(this).appendChild(this.node);return this};c.pattern=c.toPattern=function(c,
a,b,m){var e=r("pattern",u(this));null==c&&(c=this.getBBox());y(c,"object")&&"x"in c&&(a=c.y,b=c.width,m=c.height,c=c.x);v(e.node,{x:c,y:a,width:b,height:m,patternUnits:"userSpaceOnUse",id:e.id,viewBox:[c,a,b,m].join(" ")});e.node.appendChild(this.node);return e};c.marker=function(c,a,b,m,e,h){var d=r("marker",u(this));null==c&&(c=this.getBBox());y(c,"object")&&"x"in c&&(a=c.y,b=c.width,m=c.height,e=c.refX||c.cx,h=c.refY||c.cy,c=c.x);v(d.node,{viewBox:[c,a,b,m].join(" "),markerWidth:b,markerHeight:m,
orient:"auto",refX:e||0,refY:h||0,id:d.id});d.node.appendChild(this.node);return d};var E=function(c,a,b,m){"function"!=typeof b||b.length||(m=b,b=L.linear);this.attr=c;this.dur=a;b&&(this.easing=b);m&&(this.callback=m)};a._.Animation=E;a.animation=function(c,a,b,m){return new E(c,a,b,m)};c.inAnim=function(){var c=[],a;for(a in this.anims)this.anims[h](a)&&function(a){c.push({anim:new E(a._attrs,a.dur,a.easing,a._callback),mina:a,curStatus:a.status(),status:function(c){return a.status(c)},stop:function(){a.stop()}})}(this.anims[a]);
return c};a.animate=function(c,a,b,m,e,h){"function"!=typeof e||e.length||(h=e,e=L.linear);var d=L.time();c=L(c,a,d,d+m,L.time,b,e);h&&k.once("mina.finish."+c.id,h);return c};c.stop=function(){for(var c=this.inAnim(),a=0,b=c.length;a<b;a++)c[a].stop();return this};c.animate=function(c,a,b,m){"function"!=typeof b||b.length||(m=b,b=L.linear);c instanceof E&&(m=c.callback,b=c.easing,a=b.dur,c=c.attr);var d=[],f=[],l={},t,ca,n,T=this,q;for(q in c)if(c[h](q)){T.equal?(n=T.equal(q,J(c[q])),t=n.from,ca=
n.to,n=n.f):(t=+T.attr(q),ca=+c[q]);var la=y(t,"array")?t.length:1;l[q]=e(d.length,d.length+la,n);d=d.concat(t);f=f.concat(ca)}t=L.time();var p=L(d,f,t,t+a,L.time,function(c){var a={},b;for(b in l)l[h](b)&&(a[b]=l[b](c));T.attr(a)},b);T.anims[p.id]=p;p._attrs=c;p._callback=m;k("snap.animcreated."+T.id,p);k.once("mina.finish."+p.id,function(){delete T.anims[p.id];m&&m.call(T)});k.once("mina.stop."+p.id,function(){delete T.anims[p.id]});return T};var T={};c.data=function(c,b){var m=T[this.id]=T[this.id]||
{};if(0==arguments.length)return k("snap.data.get."+this.id,this,m,null),m;if(1==arguments.length){if(a.is(c,"object")){for(var e in c)c[h](e)&&this.data(e,c[e]);return this}k("snap.data.get."+this.id,this,m[c],c);return m[c]}m[c]=b;k("snap.data.set."+this.id,this,b,c);return this};c.removeData=function(c){null==c?T[this.id]={}:T[this.id]&&delete T[this.id][c];return this};c.outerSVG=c.toString=d(1);c.innerSVG=d()})(e.prototype);a.parse=function(c){var a=G.doc.createDocumentFragment(),b=!0,m=G.doc.createElement("div");
c=J(c);c.match(/^\s*<\s*svg(?:\s|>)/)||(c="<svg>"+c+"</svg>",b=!1);m.innerHTML=c;if(c=m.getElementsByTagName("svg")[0])if(b)a=c;else for(;c.firstChild;)a.appendChild(c.firstChild);m.innerHTML=aa;return new l(a)};l.prototype.select=e.prototype.select;l.prototype.selectAll=e.prototype.selectAll;a.fragment=function(){for(var c=Array.prototype.slice.call(arguments,0),b=G.doc.createDocumentFragment(),m=0,e=c.length;m<e;m++){var h=c[m];h.node&&h.node.nodeType&&b.appendChild(h.node);h.nodeType&&b.appendChild(h);
"string"==typeof h&&b.appendChild(a.parse(h).node)}return new l(b)};a._.make=r;a._.wrap=x;s.prototype.el=function(c,a){var b=r(c,this.node);a&&b.attr(a);return b};k.on("snap.util.getattr",function(){var c=k.nt(),c=c.substring(c.lastIndexOf(".")+1),a=c.replace(/[A-Z]/g,function(c){return"-"+c.toLowerCase()});return pa[h](a)?this.node.ownerDocument.defaultView.getComputedStyle(this.node,null).getPropertyValue(a):v(this.node,c)});var pa={"alignment-baseline":0,"baseline-shift":0,clip:0,"clip-path":0,
1);b[a]=c;var m=a.replace(/-(\w)/gi,function(c,a){return a.toUpperCase()}),a=a.replace(/[A-Z]/g,function(c){return"-"+c.toLowerCase()});pa[h](a)?this.node.style[m]=null==c?aa:c:v(this.node,b)});a.ajax=function(c,a,b,m){var e=new XMLHttpRequest,h=V();if(e){if(y(a,"function"))m=b,b=a,a=null;else if(y(a,"object")){var d=[],f;for(f in a)a.hasOwnProperty(f)&&d.push(encodeURIComponent(f)+"="+encodeURIComponent(a[f]));a=d.join("&")}e.open(a?"POST":"GET",c,!0);a&&(e.setRequestHeader("X-Requested-With","XMLHttpRequest"),
e;m=b.getBoundingClientRect();b=b.ownerDocument;var h=b.body,d=b.documentElement;b=m.top+(g.win.pageYOffset||d.scrollTop||h.scrollTop)-(d.clientTop||h.clientTop||0);m=m.left+(g.win.pageXOffset||d.scrollLeft||h.scrollLeft)-(d.clientLeft||h.clientLeft||0);h=e.createSVGRect();h.x=c-m;h.y=a-b;h.width=h.height=1;b=e.getIntersectionList(h,null);b.length&&(e=b[b.length-1])}return e?x(e):null};a.plugin=function(c){c(a,e,s,G,l)};return G.win.Snap=a}();C.plugin(function(a,k,y,M,A){function w(a,d,f,b,q,e){null==
d&&"[object SVGMatrix]"==z.call(a)?(this.a=a.a,this.b=a.b,this.c=a.c,this.d=a.d,this.e=a.e,this.f=a.f):null!=a?(this.a=+a,this.b=+d,this.c=+f,this.d=+b,this.e=+q,this.f=+e):(this.a=1,this.c=this.b=0,this.d=1,this.f=this.e=0)}var z=Object.prototype.toString,d=String,f=Math;(function(n){function k(a){return a[0]*a[0]+a[1]*a[1]}function p(a){var d=f.sqrt(k(a));a[0]&&(a[0]/=d);a[1]&&(a[1]/=d)}n.add=function(a,d,e,f,n,p){var k=[[],[],[] ],u=[[this.a,this.c,this.e],[this.b,this.d,this.f],[0,0,1] ];d=[[a,
e,n],[d,f,p],[0,0,1] ];a&&a instanceof w&&(d=[[a.a,a.c,a.e],[a.b,a.d,a.f],[0,0,1] ]);for(a=0;3>a;a++)for(e=0;3>e;e++){for(f=n=0;3>f;f++)n+=u[a][f]*d[f][e];k[a][e]=n}this.a=k[0][0];this.b=k[1][0];this.c=k[0][1];this.d=k[1][1];this.e=k[0][2];this.f=k[1][2];return this};n.invert=function(){var a=this.a*this.d-this.b*this.c;return new w(this.d/a,-this.b/a,-this.c/a,this.a/a,(this.c*this.f-this.d*this.e)/a,(this.b*this.e-this.a*this.f)/a)};n.clone=function(){return new w(this.a,this.b,this.c,this.d,this.e,
a)].toFixed(4)};n.toString=function(){return"matrix("+[this.get(0),this.get(1),this.get(2),this.get(3),this.get(4),this.get(5)].join()+")"};n.offset=function(){return[this.e.toFixed(4),this.f.toFixed(4)]};n.determinant=function(){return this.a*this.d-this.b*this.c};n.split=function(){var b={};b.dx=this.e;b.dy=this.f;var d=[[this.a,this.c],[this.b,this.d] ];b.scalex=f.sqrt(k(d[0]));p(d[0]);b.shear=d[0][0]*d[1][0]+d[0][1]*d[1][1];d[1]=[d[1][0]-d[0][0]*b.shear,d[1][1]-d[0][1]*b.shear];b.scaley=f.sqrt(k(d[1]));
p(d[1]);b.shear/=b.scaley;0>this.determinant()&&(b.scalex=-b.scalex);var e=-d[0][1],d=d[1][1];0>d?(b.rotate=a.deg(f.acos(d)),0>e&&(b.rotate=360-b.rotate)):b.rotate=a.deg(f.asin(e));b.isSimple=!+b.shear.toFixed(9)&&(b.scalex.toFixed(9)==b.scaley.toFixed(9)||!b.rotate);b.isSuperSimple=!+b.shear.toFixed(9)&&b.scalex.toFixed(9)==b.scaley.toFixed(9)&&!b.rotate;b.noRotation=!+b.shear.toFixed(9)&&!b.rotate;return b};n.toTransformString=function(a){a=a||this.split();if(+a.shear.toFixed(9))return"m"+[this.get(0),
this.get(1),this.get(2),this.get(3),this.get(4),this.get(5)];a.scalex=+a.scalex.toFixed(4);a.scaley=+a.scaley.toFixed(4);a.rotate=+a.rotate.toFixed(4);return(a.dx||a.dy?"t"+[+a.dx.toFixed(4),+a.dy.toFixed(4)]:"")+(1!=a.scalex||1!=a.scaley?"s"+[a.scalex,a.scaley,0,0]:"")+(a.rotate?"r"+[+a.rotate.toFixed(4),0,0]:"")}})(w.prototype);a.Matrix=w;a.matrix=function(a,d,f,b,k,e){return new w(a,d,f,b,k,e)}});C.plugin(function(a,v,y,M,A){function w(h){return function(d){k.stop();d instanceof A&&1==d.node.childNodes.length&&
x}}function z(a){k.stop();a==+a&&(a+="px");this.node.style.fontSize=a}function d(a){var b=[];a=a.childNodes;for(var e=0,f=a.length;e<f;e++){var l=a[e];3==l.nodeType&&b.push(l.nodeValue);"tspan"==l.tagName&&(1==l.childNodes.length&&3==l.firstChild.nodeType?b.push(l.firstChild.nodeValue):b.push(d(l)))}return b}function f(){k.stop();return this.node.style.fontSize}var n=a._.make,u=a._.wrap,p=a.is,b=a._.getSomeDefs,q=/^url\(#?([^)]+)\)\$/,e=a._.\$,l=a.url,r=String,s=a._.separator,x="";k.on("snap.util.attr.mask",
n("clipPath",b(this)),d.node.appendChild(a.node),!d.node.id&&e(d.node,{id:d.id});e(this.node,{"clip-path":l(d.id)})}});k.on("snap.util.attr.fill",w("fill"));k.on("snap.util.attr.stroke",w("stroke"));var G=/^([lr])(?:\(([^)]*)\))?(.*)\$/i;k.on("snap.util.grad.parse",function(a){a=r(a);var b=a.match(G);if(!b)return null;a=b[1];var e=b[2],b=b[3],e=e.split(/\s*,\s*/).map(function(a){return+a==a?+a:a});1==e.length&&0==e[0]&&(e=[]);b=b.split("-");b=b.map(function(a){a=a.split(":");var b={color:a[0]};a[1]&&
(b.offset=parseFloat(a[1]));return b});return{type:a,params:e,stops:b}});k.on("snap.util.attr.d",function(b){k.stop();p(b,"array")&&p(b[0],"array")&&(b=a.path.toString.call(b));b=r(b);b.match(/[ruo]/i)&&(b=a.path.toAbsolute(b));e(this.node,{d:b})})(-1);k.on("snap.util.attr.#text",function(a){k.stop();a=r(a);for(a=M.doc.createTextNode(a);this.node.firstChild;)this.node.removeChild(this.node.firstChild);this.node.appendChild(a)})(-1);k.on("snap.util.attr.path",function(a){k.stop();this.attr({d:a})})(-1);
k.on("snap.util.attr.class",function(a){k.stop();this.node.className.baseVal=a})(-1);k.on("snap.util.attr.viewBox",function(a){a=p(a,"object")&&"x"in a?[a.x,a.y,a.width,a.height].join(" "):p(a,"array")?a.join(" "):a;e(this.node,{viewBox:a});k.stop()})(-1);k.on("snap.util.attr.transform",function(a){this.transform(a);k.stop()})(-1);k.on("snap.util.attr.r",function(a){"rect"==this.type&&(k.stop(),e(this.node,{rx:a,ry:a}))})(-1);k.on("snap.util.attr.textpath",function(a){k.stop();if("text"==this.type){var d,
k.on("snap.util.attr.text",function(a){if("text"==this.type){for(var b=this.node,d=function(a){var b=e("tspan");if(p(a,"array"))for(var f=0;f<a.length;f++)b.appendChild(d(a[f]));else b.appendChild(M.doc.createTextNode(a));b.normalize&&b.normalize();return b};b.firstChild;)b.removeChild(b.firstChild);for(a=d(a);a.firstChild;)b.appendChild(a.firstChild)}k.stop()})(-1);k.on("snap.util.attr.fontSize",z)(-1);k.on("snap.util.attr.font-size",z)(-1);k.on("snap.util.getattr.transform",function(){k.stop();
return this.transform()})(-1);k.on("snap.util.getattr.textpath",function(){k.stop();return this.textPath})(-1);(function(){function b(d){return function(){k.stop();var b=M.doc.defaultView.getComputedStyle(this.node,null).getPropertyValue("marker-"+d);return"none"==b?b:a(M.doc.getElementById(b.match(q)[1]))}}function d(a){return function(b){k.stop();var d="marker"+a.charAt(0).toUpperCase()+a.substring(1);if(""==b||!b)this.node.style[d]="none";else if("marker"==b.type){var f=b.node.id;f||e(b.node,{id:b.id});
this.node.style[d]=l(f)}}}k.on("snap.util.getattr.marker-end",b("end"))(-1);k.on("snap.util.getattr.markerEnd",b("end"))(-1);k.on("snap.util.getattr.marker-start",b("start"))(-1);k.on("snap.util.getattr.markerStart",b("start"))(-1);k.on("snap.util.getattr.marker-mid",b("mid"))(-1);k.on("snap.util.getattr.markerMid",b("mid"))(-1);k.on("snap.util.attr.marker-end",d("end"))(-1);k.on("snap.util.attr.markerEnd",d("end"))(-1);k.on("snap.util.attr.marker-start",d("start"))(-1);k.on("snap.util.attr.markerStart",
d("start"))(-1);k.on("snap.util.attr.marker-mid",d("mid"))(-1);k.on("snap.util.attr.markerMid",d("mid"))(-1)})();k.on("snap.util.getattr.r",function(){if("rect"==this.type&&e(this.node,"rx")==e(this.node,"ry"))return k.stop(),e(this.node,"rx")})(-1);k.on("snap.util.getattr.text",function(){if("text"==this.type||"tspan"==this.type){k.stop();var a=d(this.node);return 1==a.length?a[0]:a}})(-1);k.on("snap.util.getattr.#text",function(){return this.node.textContent})(-1);k.on("snap.util.getattr.viewBox",
function(){k.stop();var b=e(this.node,"viewBox");if(b)return b=b.split(s),a._.box(+b[0],+b[1],+b[2],+b[3])})(-1);k.on("snap.util.getattr.points",function(){var a=e(this.node,"points");k.stop();if(a)return a.split(s)})(-1);k.on("snap.util.getattr.path",function(){var a=e(this.node,"d");k.stop();return a})(-1);k.on("snap.util.getattr.class",function(){return this.node.className.baseVal})(-1);k.on("snap.util.getattr.fontSize",f)(-1);k.on("snap.util.getattr.font-size",f)(-1)});C.plugin(function(a,v,y,
M,A){function w(a){return a}function z(a){return function(b){return+b.toFixed(3)+a}}var d={"+":function(a,b){return a+b},"-":function(a,b){return a-b},"/":function(a,b){return a/b},"*":function(a,b){return a*b}},f=String,n=/[a-z]+\$/i,u=/^\s*([+\-\/*])\s*=\s*([\d.eE+\-]+)\s*([^\d\s]+)?\s*\$/;k.on("snap.util.attr",function(a){if(a=f(a).match(u)){var b=k.nt(),b=b.substring(b.lastIndexOf(".")+1),q=this.attr(b),e={};k.stop();var l=a[3]||"",r=q.match(n),s=d[a[1] ];r&&r==l?a=s(parseFloat(q),+a[2]):(q=this.asPX(b),
a=s(this.asPX(b),this.asPX(b,a[2]+l)));isNaN(q)||isNaN(a)||(e[b]=a,this.attr(e))}})(-10);k.on("snap.util.equal",function(a,b){var q=f(this.attr(a)||""),e=f(b).match(u);if(e){k.stop();var l=e[3]||"",r=q.match(n),s=d[e[1] ];if(r&&r==l)return{from:parseFloat(q),to:s(parseFloat(q),+e[2]),f:z(r)};q=this.asPX(a);return{from:q,to:s(q,this.asPX(a,e[2]+l)),f:w}}})(-10)});C.plugin(function(a,v,y,M,A){var w=y.prototype,z=a.is;w.rect=function(a,d,k,p,b,q){var e;null==q&&(q=b);z(a,"object")&&"[object Object]"==
b.appendChild(p);p.src=d}}();w.image=function(f,n,k,p,b){var q=this.el("image");if(z(f,"object")&&"src"in f)q.attr(f);else if(null!=f){var e={"xlink:href":f,preserveAspectRatio:"none"};null!=n&&null!=k&&(e.x=n,e.y=k);null!=p&&null!=b?(e.width=p,e.height=b):d(f,function(){a._.\$(q.node,{width:this.offsetWidth,height:this.offsetHeight})});a._.\$(q.node,e)}return q};w.ellipse=function(a,d,k,p){var b;z(a,"object")&&"[object Object]"==a?b=a:null!=a&&(b={cx:a,cy:d,rx:k,ry:p});return this.el("ellipse",b)};
a.attr({id:ID()}),a=a.attr("id")),this.el("use",{"xlink:href":a})):v.prototype.use.call(this)};w.text=function(a,d,k){var p={};z(a,"object")?p=a:null!=a&&(p={x:a,y:d,text:k||""});return this.el("text",p)};w.line=function(a,d,k,p){var b={};z(a,"object")?b=a:null!=a&&(b={x1:a,x2:k,y1:d,y2:p});return this.el("line",b)};w.polyline=function(a){1<arguments.length&&(a=Array.prototype.slice.call(arguments,0));var d={};z(a,"object")&&!z(a,"array")?d=a:null!=a&&(d={points:a});return this.el("polyline",d)};
w.polygon=function(a){1<arguments.length&&(a=Array.prototype.slice.call(arguments,0));var d={};z(a,"object")&&!z(a,"array")?d=a:null!=a&&(d={points:a});return this.el("polygon",d)};(function(){function d(){return this.selectAll("stop")}function n(b,d){var f=e("stop"),k={offset:+d+"%"};b=a.color(b);k["stop-color"]=b.hex;1>b.opacity&&(k["stop-opacity"]=b.opacity);e(f,k);this.node.appendChild(f);return this}function u(){if("linearGradient"==this.type){var b=e(this.node,"x1")||0,d=e(this.node,"x2")||
b;a;)b=a.nextSibling,"defs"!=a.tagName?a.parentNode.removeChild(a):w.clear.call({node:a}),a=b}})()});C.plugin(function(a,k,y,M){function A(a){var b=A.ps=A.ps||{};b[a]?b[a].sleep=100:b[a]={sleep:100};setTimeout(function(){for(var d in b)b[L](d)&&d!=a&&(b[d].sleep--,!b[d].sleep&&delete b[d])});return b[a]}function w(a,b,d,e){null==a&&(a=b=d=e=0);null==b&&(b=a.y,d=a.width,e=a.height,a=a.x);return{x:a,y:b,width:d,w:d,height:e,h:e,x2:a+d,y2:b+e,cx:a+d/2,cy:b+e/2,r1:F.min(d,e)/2,r2:F.max(d,e)/2,r0:F.sqrt(d*
d+e*e)/2,path:s(a,b,d,e),vb:[a,b,d,e].join(" ")}}function z(){return this.join(",").replace(N,"\$1")}function d(a){a=C(a);a.toString=z;return a}function f(a,b,d,h,f,k,l,n,p){if(null==p)return e(a,b,d,h,f,k,l,n);if(0>p||e(a,b,d,h,f,k,l,n)<p)p=void 0;else{var q=0.5,O=1-q,s;for(s=e(a,b,d,h,f,k,l,n,O);0.01<Z(s-p);)q/=2,O+=(s<p?1:-1)*q,s=e(a,b,d,h,f,k,l,n,O);p=O}return u(a,b,d,h,f,k,l,n,p)}function n(b,d){function e(a){return+(+a).toFixed(3)}return a._.cacher(function(a,h,l){a instanceof k&&(a=a.attr("d"));
a=I(a);for(var n,p,D,q,O="",s={},c=0,t=0,r=a.length;t<r;t++){D=a[t];if("M"==D[0])n=+D[1],p=+D[2];else{q=f(n,p,D[1],D[2],D[3],D[4],D[5],D[6]);if(c+q>h){if(d&&!s.start){n=f(n,p,D[1],D[2],D[3],D[4],D[5],D[6],h-c);O+=["C"+e(n.start.x),e(n.start.y),e(n.m.x),e(n.m.y),e(n.x),e(n.y)];if(l)return O;s.start=O;O=["M"+e(n.x),e(n.y)+"C"+e(n.n.x),e(n.n.y),e(n.end.x),e(n.end.y),e(D[5]),e(D[6])].join();c+=q;n=+D[5];p=+D[6];continue}if(!b&&!d)return n=f(n,p,D[1],D[2],D[3],D[4],D[5],D[6],h-c)}c+=q;n=+D[5];p=+D[6]}O+=
D.shift()+D}s.end=O;return n=b?c:d?s:u(n,p,D[0],D[1],D[2],D[3],D[4],D[5],1)},null,a._.clone)}function u(a,b,d,e,h,f,k,l,n){var p=1-n,q=ma(p,3),s=ma(p,2),c=n*n,t=c*n,r=q*a+3*s*n*d+3*p*n*n*h+t*k,q=q*b+3*s*n*e+3*p*n*n*f+t*l,s=a+2*n*(d-a)+c*(h-2*d+a),t=b+2*n*(e-b)+c*(f-2*e+b),x=d+2*n*(h-d)+c*(k-2*h+d),c=e+2*n*(f-e)+c*(l-2*f+e);a=p*a+n*d;b=p*b+n*e;h=p*h+n*k;f=p*f+n*l;l=90-180*F.atan2(s-x,t-c)/S;return{x:r,y:q,m:{x:s,y:t},n:{x:x,y:c},start:{x:a,y:b},end:{x:h,y:f},alpha:l}}function p(b,d,e,h,f,n,k,l){a.is(b,
"array")||(b=[b,d,e,h,f,n,k,l]);b=U.apply(null,b);return w(b.min.x,b.min.y,b.max.x-b.min.x,b.max.y-b.min.y)}function b(a,b,d){return b>=a.x&&b<=a.x+a.width&&d>=a.y&&d<=a.y+a.height}function q(a,d){a=w(a);d=w(d);return b(d,a.x,a.y)||b(d,a.x2,a.y)||b(d,a.x,a.y2)||b(d,a.x2,a.y2)||b(a,d.x,d.y)||b(a,d.x2,d.y)||b(a,d.x,d.y2)||b(a,d.x2,d.y2)||(a.x<d.x2&&a.x>d.x||d.x<a.x2&&d.x>a.x)&&(a.y<d.y2&&a.y>d.y||d.y<a.y2&&d.y>a.y)}function e(a,b,d,e,h,f,n,k,l){null==l&&(l=1);l=(1<l?1:0>l?0:l)/2;for(var p=[-0.1252,
0.1252,-0.3678,0.3678,-0.5873,0.5873,-0.7699,0.7699,-0.9041,0.9041,-0.9816,0.9816],q=[0.2491,0.2491,0.2335,0.2335,0.2032,0.2032,0.1601,0.1601,0.1069,0.1069,0.0472,0.0472],s=0,c=0;12>c;c++)var t=l*p[c]+l,r=t*(t*(-3*a+9*d-9*h+3*n)+6*a-12*d+6*h)-3*a+3*d,t=t*(t*(-3*b+9*e-9*f+3*k)+6*b-12*e+6*f)-3*b+3*e,s=s+q[c]*F.sqrt(r*r+t*t);return l*s}function l(a,b,d){a=I(a);b=I(b);for(var h,f,l,n,k,s,r,O,x,c,t=d?0:[],w=0,v=a.length;w<v;w++)if(x=a[w],"M"==x[0])h=k=x[1],f=s=x[2];else{"C"==x[0]?(x=[h,f].concat(x.slice(1)),
h=x[6],f=x[7]):(x=[h,f,h,f,k,s,k,s],h=k,f=s);for(var G=0,y=b.length;G<y;G++)if(c=b[G],"M"==c[0])l=r=c[1],n=O=c[2];else{"C"==c[0]?(c=[l,n].concat(c.slice(1)),l=c[6],n=c[7]):(c=[l,n,l,n,r,O,r,O],l=r,n=O);var z;var K=x,B=c;z=d;var H=p(K),J=p(B);if(q(H,J)){for(var H=e.apply(0,K),J=e.apply(0,B),H=~~(H/8),J=~~(J/8),U=[],A=[],F={},M=z?0:[],P=0;P<H+1;P++){var C=u.apply(0,K.concat(P/H));U.push({x:C.x,y:C.y,t:P/H})}for(P=0;P<J+1;P++)C=u.apply(0,B.concat(P/J)),A.push({x:C.x,y:C.y,t:P/J});for(P=0;P<H;P++)for(K=
0;K<J;K++){var Q=U[P],L=U[P+1],B=A[K],C=A[K+1],N=0.001>Z(L.x-Q.x)?"y":"x",S=0.001>Z(C.x-B.x)?"y":"x",R;R=Q.x;var Y=Q.y,V=L.x,ea=L.y,fa=B.x,ga=B.y,ha=C.x,ia=C.y;if(W(R,V)<X(fa,ha)||X(R,V)>W(fa,ha)||W(Y,ea)<X(ga,ia)||X(Y,ea)>W(ga,ia))R=void 0;else{var \$=(R*ea-Y*V)*(fa-ha)-(R-V)*(fa*ia-ga*ha),aa=(R*ea-Y*V)*(ga-ia)-(Y-ea)*(fa*ia-ga*ha),ja=(R-V)*(ga-ia)-(Y-ea)*(fa-ha);if(ja){var \$=\$/ja,aa=aa/ja,ja=+\$.toFixed(2),ba=+aa.toFixed(2);R=ja<+X(R,V).toFixed(2)||ja>+W(R,V).toFixed(2)||ja<+X(fa,ha).toFixed(2)||
ja>+W(fa,ha).toFixed(2)||ba<+X(Y,ea).toFixed(2)||ba>+W(Y,ea).toFixed(2)||ba<+X(ga,ia).toFixed(2)||ba>+W(ga,ia).toFixed(2)?void 0:{x:\$,y:aa}}else R=void 0}R&&F[R.x.toFixed(4)]!=R.y.toFixed(4)&&(F[R.x.toFixed(4)]=R.y.toFixed(4),Q=Q.t+Z((R[N]-Q[N])/(L[N]-Q[N]))*(L.t-Q.t),B=B.t+Z((R[S]-B[S])/(C[S]-B[S]))*(C.t-B.t),0<=Q&&1>=Q&&0<=B&&1>=B&&(z?M++:M.push({x:R.x,y:R.y,t1:Q,t2:B})))}z=M}else z=z?0:[];if(d)t+=z;else{H=0;for(J=z.length;H<J;H++)z[H].segment1=w,z[H].segment2=G,z[H].bez1=x,z[H].bez2=c;t=t.concat(z)}}}return t}
function r(a){var b=A(a);if(b.bbox)return C(b.bbox);if(!a)return w();a=I(a);for(var d=0,e=0,h=[],f=[],l,n=0,k=a.length;n<k;n++)l=a[n],"M"==l[0]?(d=l[1],e=l[2],h.push(d),f.push(e)):(d=U(d,e,l[1],l[2],l[3],l[4],l[5],l[6]),h=h.concat(d.min.x,d.max.x),f=f.concat(d.min.y,d.max.y),d=l[5],e=l[6]);a=X.apply(0,h);l=X.apply(0,f);h=W.apply(0,h);f=W.apply(0,f);f=w(a,l,h-a,f-l);b.bbox=C(f);return f}function s(a,b,d,e,h){if(h)return[["M",+a+ +h,b],["l",d-2*h,0],["a",h,h,0,0,1,h,h],["l",0,e-2*h],["a",h,h,0,0,1,
-h,h],["l",2*h-d,0],["a",h,h,0,0,1,-h,-h],["l",0,2*h-e],["a",h,h,0,0,1,h,-h],["z"] ];a=[["M",a,b],["l",d,0],["l",0,e],["l",-d,0],["z"] ];a.toString=z;return a}function x(a,b,d,e,h){null==h&&null==e&&(e=d);a=+a;b=+b;d=+d;e=+e;if(null!=h){var f=Math.PI/180,l=a+d*Math.cos(-e*f);a+=d*Math.cos(-h*f);var n=b+d*Math.sin(-e*f);b+=d*Math.sin(-h*f);d=[["M",l,n],["A",d,d,0,+(180<h-e),0,a,b] ]}else d=[["M",a,b],["m",0,-e],["a",d,e,0,1,1,0,2*e],["a",d,e,0,1,1,0,-2*e],["z"] ];d.toString=z;return d}function G(b){var e=
A(b);if(e.abs)return d(e.abs);Q(b,"array")&&Q(b&&b[0],"array")||(b=a.parsePathString(b));if(!b||!b.length)return[["M",0,0] ];var h=[],f=0,l=0,n=0,k=0,p=0;"M"==b[0][0]&&(f=+b[0][1],l=+b[0][2],n=f,k=l,p++,h[0]=["M",f,l]);for(var q=3==b.length&&"M"==b[0][0]&&"R"==b[1][0].toUpperCase()&&"Z"==b[2][0].toUpperCase(),s,r,w=p,c=b.length;w<c;w++){h.push(s=[]);r=b[w];p=r[0];if(p!=p.toUpperCase())switch(s[0]=p.toUpperCase(),s[0]){case "A":s[1]=r[1];s[2]=r[2];s[3]=r[3];s[4]=r[4];s[5]=r[5];s[6]=+r[6]+f;s[7]=+r[7]+
l;break;case "V":s[1]=+r[1]+l;break;case "H":s[1]=+r[1]+f;break;case "R":for(var t=[f,l].concat(r.slice(1)),u=2,v=t.length;u<v;u++)t[u]=+t[u]+f,t[++u]=+t[u]+l;h.pop();h=h.concat(P(t,q));break;case "O":h.pop();t=x(f,l,r[1],r[2]);t.push(t[0]);h=h.concat(t);break;case "U":h.pop();h=h.concat(x(f,l,r[1],r[2],r[3]));s=["U"].concat(h[h.length-1].slice(-2));break;case "M":n=+r[1]+f,k=+r[2]+l;default:for(u=1,v=r.length;u<v;u++)s[u]=+r[u]+(u%2?f:l)}else if("R"==p)t=[f,l].concat(r.slice(1)),h.pop(),h=h.concat(P(t,
q)),s=["R"].concat(r.slice(-2));else if("O"==p)h.pop(),t=x(f,l,r[1],r[2]),t.push(t[0]),h=h.concat(t);else if("U"==p)h.pop(),h=h.concat(x(f,l,r[1],r[2],r[3])),s=["U"].concat(h[h.length-1].slice(-2));else for(t=0,u=r.length;t<u;t++)s[t]=r[t];p=p.toUpperCase();if("O"!=p)switch(s[0]){case "Z":f=+n;l=+k;break;case "H":f=s[1];break;case "V":l=s[1];break;case "M":n=s[s.length-2],k=s[s.length-1];default:f=s[s.length-2],l=s[s.length-1]}}h.toString=z;e.abs=d(h);return h}function h(a,b,d,e){return[a,b,d,e,d,
e]}function J(a,b,d,e,h,f){var l=1/3,n=2/3;return[l*a+n*d,l*b+n*e,l*h+n*d,l*f+n*e,h,f]}function K(b,d,e,h,f,l,n,k,p,s){var r=120*S/180,q=S/180*(+f||0),c=[],t,x=a._.cacher(function(a,b,c){var d=a*F.cos(c)-b*F.sin(c);a=a*F.sin(c)+b*F.cos(c);return{x:d,y:a}});if(s)v=s[0],t=s[1],l=s[2],u=s[3];else{t=x(b,d,-q);b=t.x;d=t.y;t=x(k,p,-q);k=t.x;p=t.y;F.cos(S/180*f);F.sin(S/180*f);t=(b-k)/2;v=(d-p)/2;u=t*t/(e*e)+v*v/(h*h);1<u&&(u=F.sqrt(u),e*=u,h*=u);var u=e*e,w=h*h,u=(l==n?-1:1)*F.sqrt(Z((u*w-u*v*v-w*t*t)/
(u*v*v+w*t*t)));l=u*e*v/h+(b+k)/2;var u=u*-h*t/e+(d+p)/2,v=F.asin(((d-u)/h).toFixed(9));t=F.asin(((p-u)/h).toFixed(9));v=b<l?S-v:v;t=k<l?S-t:t;0>v&&(v=2*S+v);0>t&&(t=2*S+t);n&&v>t&&(v-=2*S);!n&&t>v&&(t-=2*S)}if(Z(t-v)>r){var c=t,w=k,G=p;t=v+r*(n&&t>v?1:-1);k=l+e*F.cos(t);p=u+h*F.sin(t);c=K(k,p,e,h,f,0,n,w,G,[t,c,l,u])}l=t-v;f=F.cos(v);r=F.sin(v);n=F.cos(t);t=F.sin(t);l=F.tan(l/4);e=4/3*e*l;l*=4/3*h;h=[b,d];b=[b+e*r,d-l*f];d=[k+e*t,p-l*n];k=[k,p];b[0]=2*h[0]-b[0];b[1]=2*h[1]-b[1];if(s)return[b,d,k].concat(c);
c=[b,d,k].concat(c).join().split(",");s=[];k=0;for(p=c.length;k<p;k++)s[k]=k%2?x(c[k-1],c[k],q).y:x(c[k],c[k+1],q).x;return s}function U(a,b,d,e,h,f,l,k){for(var n=[],p=[[],[] ],s,r,c,t,q=0;2>q;++q)0==q?(r=6*a-12*d+6*h,s=-3*a+9*d-9*h+3*l,c=3*d-3*a):(r=6*b-12*e+6*f,s=-3*b+9*e-9*f+3*k,c=3*e-3*b),1E-12>Z(s)?1E-12>Z(r)||(s=-c/r,0<s&&1>s&&n.push(s)):(t=r*r-4*c*s,c=F.sqrt(t),0>t||(t=(-r+c)/(2*s),0<t&&1>t&&n.push(t),s=(-r-c)/(2*s),0<s&&1>s&&n.push(s)));for(r=q=n.length;q--;)s=n[q],c=1-s,p[0][q]=c*c*c*a+3*
c*c*s*d+3*c*s*s*h+s*s*s*l,p[1][q]=c*c*c*b+3*c*c*s*e+3*c*s*s*f+s*s*s*k;p[0][r]=a;p[1][r]=b;p[0][r+1]=l;p[1][r+1]=k;p[0].length=p[1].length=r+2;return{min:{x:X.apply(0,p[0]),y:X.apply(0,p[1])},max:{x:W.apply(0,p[0]),y:W.apply(0,p[1])}}}function I(a,b){var e=!b&&A(a);if(!b&&e.curve)return d(e.curve);var f=G(a),l=b&&G(b),n={x:0,y:0,bx:0,by:0,X:0,Y:0,qx:null,qy:null},k={x:0,y:0,bx:0,by:0,X:0,Y:0,qx:null,qy:null},p=function(a,b,c){if(!a)return["C",b.x,b.y,b.x,b.y,b.x,b.y];a[0]in{T:1,Q:1}||(b.qx=b.qy=null);
switch(a[0]){case "M":b.X=a[1];b.Y=a[2];break;case "A":a=["C"].concat(K.apply(0,[b.x,b.y].concat(a.slice(1))));break;case "S":"C"==c||"S"==c?(c=2*b.x-b.bx,b=2*b.y-b.by):(c=b.x,b=b.y);a=["C",c,b].concat(a.slice(1));break;case "T":"Q"==c||"T"==c?(b.qx=2*b.x-b.qx,b.qy=2*b.y-b.qy):(b.qx=b.x,b.qy=b.y);a=["C"].concat(J(b.x,b.y,b.qx,b.qy,a[1],a[2]));break;case "Q":b.qx=a[1];b.qy=a[2];a=["C"].concat(J(b.x,b.y,a[1],a[2],a[3],a[4]));break;case "L":a=["C"].concat(h(b.x,b.y,a[1],a[2]));break;case "H":a=["C"].concat(h(b.x,
b.y,a[1],b.y));break;case "V":a=["C"].concat(h(b.x,b.y,b.x,a[1]));break;case "Z":a=["C"].concat(h(b.x,b.y,b.X,b.Y))}return a},s=function(a,b){if(7<a[b].length){a[b].shift();for(var c=a[b];c.length;)q[b]="A",l&&(u[b]="A"),a.splice(b++,0,["C"].concat(c.splice(0,6)));a.splice(b,1);v=W(f.length,l&&l.length||0)}},r=function(a,b,c,d,e){a&&b&&"M"==a[e][0]&&"M"!=b[e][0]&&(b.splice(e,0,["M",d.x,d.y]),c.bx=0,c.by=0,c.x=a[e][1],c.y=a[e][2],v=W(f.length,l&&l.length||0))},q=[],u=[],c="",t="",x=0,v=W(f.length,
l&&l.length||0);for(;x<v;x++){f[x]&&(c=f[x][0]);"C"!=c&&(q[x]=c,x&&(t=q[x-1]));f[x]=p(f[x],n,t);"A"!=q[x]&&"C"==c&&(q[x]="C");s(f,x);l&&(l[x]&&(c=l[x][0]),"C"!=c&&(u[x]=c,x&&(t=u[x-1])),l[x]=p(l[x],k,t),"A"!=u[x]&&"C"==c&&(u[x]="C"),s(l,x));r(f,l,n,k,x);r(l,f,k,n,x);var w=f[x],z=l&&l[x],y=w.length,U=l&&z.length;n.x=w[y-2];n.y=w[y-1];n.bx=\$(w[y-4])||n.x;n.by=\$(w[y-3])||n.y;k.bx=l&&(\$(z[U-4])||k.x);k.by=l&&(\$(z[U-3])||k.y);k.x=l&&z[U-2];k.y=l&&z[U-1]}l||(e.curve=d(f));return l?[f,l]:f}function P(a,
b){for(var d=[],e=0,h=a.length;h-2*!b>e;e+=2){var f=[{x:+a[e-2],y:+a[e-1]},{x:+a[e],y:+a[e+1]},{x:+a[e+2],y:+a[e+3]},{x:+a[e+4],y:+a[e+5]}];b?e?h-4==e?f[3]={x:+a[0],y:+a[1]}:h-2==e&&(f[2]={x:+a[0],y:+a[1]},f[3]={x:+a[2],y:+a[3]}):f[0]={x:+a[h-2],y:+a[h-1]}:h-4==e?f[3]=f[2]:e||(f[0]={x:+a[e],y:+a[e+1]});d.push(["C",(-f[0].x+6*f[1].x+f[2].x)/6,(-f[0].y+6*f[1].y+f[2].y)/6,(f[1].x+6*f[2].x-f[3].x)/6,(f[1].y+6*f[2].y-f[3].y)/6,f[2].x,f[2].y])}return d}y=k.prototype;var Q=a.is,C=a._.clone,L="hasOwnProperty",
N=/,?([a-z]),?/gi,\$=parseFloat,F=Math,S=F.PI,X=F.min,W=F.max,ma=F.pow,Z=F.abs;M=n(1);var na=n(),ba=n(0,1),V=a._unit2px;a.path=A;a.path.getTotalLength=M;a.path.getPointAtLength=na;a.path.getSubpath=function(a,b,d){if(1E-6>this.getTotalLength(a)-d)return ba(a,b).end;a=ba(a,d,1);return b?ba(a,b).end:a};y.getTotalLength=function(){if(this.node.getTotalLength)return this.node.getTotalLength()};y.getPointAtLength=function(a){return na(this.attr("d"),a)};y.getSubpath=function(b,d){return a.path.getSubpath(this.attr("d"),
b,d)};a._.box=w;a.path.findDotsAtSegment=u;a.path.bezierBBox=p;a.path.isPointInsideBBox=b;a.path.isBBoxIntersect=q;a.path.intersection=function(a,b){return l(a,b)};a.path.intersectionNumber=function(a,b){return l(a,b,1)};a.path.isPointInside=function(a,d,e){var h=r(a);return b(h,d,e)&&1==l(a,[["M",d,e],["H",h.x2+10] ],1)%2};a.path.getBBox=r;a.path.get={path:function(a){return a.attr("path")},circle:function(a){a=V(a);return x(a.cx,a.cy,a.r)},ellipse:function(a){a=V(a);return x(a.cx||0,a.cy||0,a.rx,
a.ry)},rect:function(a){a=V(a);return s(a.x||0,a.y||0,a.width,a.height,a.rx,a.ry)},image:function(a){a=V(a);return s(a.x||0,a.y||0,a.width,a.height)},line:function(a){return"M"+[a.attr("x1")||0,a.attr("y1")||0,a.attr("x2"),a.attr("y2")]},polyline:function(a){return"M"+a.attr("points")},polygon:function(a){return"M"+a.attr("points")+"z"},deflt:function(a){a=a.node.getBBox();return s(a.x,a.y,a.width,a.height)}};a.path.toRelative=function(b){var e=A(b),h=String.prototype.toLowerCase;if(e.rel)return d(e.rel);
a.is(b,"array")&&a.is(b&&b[0],"array")||(b=a.parsePathString(b));var f=[],l=0,n=0,k=0,p=0,s=0;"M"==b[0][0]&&(l=b[0][1],n=b[0][2],k=l,p=n,s++,f.push(["M",l,n]));for(var r=b.length;s<r;s++){var q=f[s]=[],x=b[s];if(x[0]!=h.call(x[0]))switch(q[0]=h.call(x[0]),q[0]){case "a":q[1]=x[1];q[2]=x[2];q[3]=x[3];q[4]=x[4];q[5]=x[5];q[6]=+(x[6]-l).toFixed(3);q[7]=+(x[7]-n).toFixed(3);break;case "v":q[1]=+(x[1]-n).toFixed(3);break;case "m":k=x[1],p=x[2];default:for(var c=1,t=x.length;c<t;c++)q[c]=+(x[c]-(c%2?l:
n)).toFixed(3)}else for(f[s]=[],"m"==x[0]&&(k=x[1]+l,p=x[2]+n),q=0,c=x.length;q<c;q++)f[s][q]=x[q];x=f[s].length;switch(f[s][0]){case "z":l=k;n=p;break;case "h":l+=+f[s][x-1];break;case "v":n+=+f[s][x-1];break;default:l+=+f[s][x-2],n+=+f[s][x-1]}}f.toString=z;e.rel=d(f);return f};a.path.toAbsolute=G;a.path.toCubic=I;a.path.map=function(a,b){if(!b)return a;var d,e,h,f,l,n,k;a=I(a);h=0;for(l=a.length;h<l;h++)for(k=a[h],f=1,n=k.length;f<n;f+=2)d=b.x(k[f],k[f+1]),e=b.y(k[f],k[f+1]),k[f]=d,k[f+1]=e;return a};
a.path.toString=z;a.path.clone=d});C.plugin(function(a,v,y,C){var A=Math.max,w=Math.min,z=function(a){this.items=[];this.bindings={};this.length=0;this.type="set";if(a)for(var f=0,n=a.length;f<n;f++)a[f]&&(this[this.items.length]=this.items[this.items.length]=a[f],this.length++)};v=z.prototype;v.push=function(){for(var a,f,n=0,k=arguments.length;n<k;n++)if(a=arguments[n])f=this.items.length,this[f]=this.items[f]=a,this.length++;return this};v.pop=function(){this.length&&delete this[this.length--];
return this.items.pop()};v.forEach=function(a,f){for(var n=0,k=this.items.length;n<k&&!1!==a.call(f,this.items[n],n);n++);return this};v.animate=function(d,f,n,u){"function"!=typeof n||n.length||(u=n,n=L.linear);d instanceof a._.Animation&&(u=d.callback,n=d.easing,f=n.dur,d=d.attr);var p=arguments;if(a.is(d,"array")&&a.is(p[p.length-1],"array"))var b=!0;var q,e=function(){q?this.b=q:q=this.b},l=0,r=u&&function(){l++==this.length&&u.call(this)};return this.forEach(function(a,l){k.once("snap.animcreated."+
a.id,e);b?p[l]&&a.animate.apply(a,p[l]):a.animate(d,f,n,r)})};v.remove=function(){for(;this.length;)this.pop().remove();return this};v.bind=function(a,f,k){var u={};if("function"==typeof f)this.bindings[a]=f;else{var p=k||a;this.bindings[a]=function(a){u[p]=a;f.attr(u)}}return this};v.attr=function(a){var f={},k;for(k in a)if(this.bindings[k])this.bindings[k](a[k]);else f[k]=a[k];a=0;for(k=this.items.length;a<k;a++)this.items[a].attr(f);return this};v.clear=function(){for(;this.length;)this.pop()};
v.splice=function(a,f,k){a=0>a?A(this.length+a,0):a;f=A(0,w(this.length-a,f));var u=[],p=[],b=[],q;for(q=2;q<arguments.length;q++)b.push(arguments[q]);for(q=0;q<f;q++)p.push(this[a+q]);for(;q<this.length-a;q++)u.push(this[a+q]);var e=b.length;for(q=0;q<e+u.length;q++)this.items[a+q]=this[a+q]=q<e?b[q]:u[q-e];for(q=this.items.length=this.length-=f-e;this[q];)delete this[q++];return new z(p)};v.exclude=function(a){for(var f=0,k=this.length;f<k;f++)if(this[f]==a)return this.splice(f,1),!0;return!1};
v.insertAfter=function(a){for(var f=this.items.length;f--;)this.items[f].insertAfter(a);return this};v.getBBox=function(){for(var a=[],f=[],k=[],u=[],p=this.items.length;p--;)if(!this.items[p].removed){var b=this.items[p].getBBox();a.push(b.x);f.push(b.y);k.push(b.x+b.width);u.push(b.y+b.height)}a=w.apply(0,a);f=w.apply(0,f);k=A.apply(0,k);u=A.apply(0,u);return{x:a,y:f,x2:k,y2:u,width:k-a,height:u-f,cx:a+(k-a)/2,cy:f+(u-f)/2}};v.clone=function(a){a=new z;for(var f=0,k=this.items.length;f<k;f++)a.push(this.items[f].clone());
return a};v.toString=function(){return"Snap\u2018s set"};v.type="set";a.set=function(){var a=new z;arguments.length&&a.push.apply(a,Array.prototype.slice.call(arguments,0));return a}});C.plugin(function(a,v,y,C){function A(a){var b=a[0];switch(b.toLowerCase()){case "t":return[b,0,0];case "m":return[b,1,0,0,1,0,0];case "r":return 4==a.length?[b,0,a[2],a[3] ]:[b,0];case "s":return 5==a.length?[b,1,1,a[3],a[4] ]:3==a.length?[b,1,1]:[b,1]}}function w(b,d,f){d=q(d).replace(/\.{3}|\u2026/g,b);b=a.parseTransformString(b)||
[];d=a.parseTransformString(d)||[];for(var k=Math.max(b.length,d.length),p=[],v=[],h=0,w,z,y,I;h<k;h++){y=b[h]||A(d[h]);I=d[h]||A(y);if(y[0]!=I[0]||"r"==y[0].toLowerCase()&&(y[2]!=I[2]||y[3]!=I[3])||"s"==y[0].toLowerCase()&&(y[3]!=I[3]||y[4]!=I[4])){b=a._.transform2matrix(b,f());d=a._.transform2matrix(d,f());p=[["m",b.a,b.b,b.c,b.d,b.e,b.f] ];v=[["m",d.a,d.b,d.c,d.d,d.e,d.f] ];break}p[h]=[];v[h]=[];w=0;for(z=Math.max(y.length,I.length);w<z;w++)w in y&&(p[h][w]=y[w]),w in I&&(v[h][w]=I[w])}return{from:u(p),
to:u(v),f:n(p)}}function z(a){return a}function d(a){return function(b){return+b.toFixed(3)+a}}function f(b){return a.rgb(b[0],b[1],b[2])}function n(a){var b=0,d,f,k,n,h,p,q=[];d=0;for(f=a.length;d<f;d++){h="[";p=['"'+a[d][0]+'"'];k=1;for(n=a[d].length;k<n;k++)p[k]="val["+b++ +"]";h+=p+"]";q[d]=h}return Function("val","return Snap.path.toString.call(["+q+"])")}function u(a){for(var b=[],d=0,f=a.length;d<f;d++)for(var k=1,n=a[d].length;k<n;k++)b.push(a[d][k]);return b}var p={},b=/[a-z]+\$/i,q=String;
p.stroke=p.fill="colour";v.prototype.equal=function(a,b){return k("snap.util.equal",this,a,b).firstDefined()};k.on("snap.util.equal",function(e,k){var r,s;r=q(this.attr(e)||"");var x=this;if(r==+r&&k==+k)return{from:+r,to:+k,f:z};if("colour"==p[e])return r=a.color(r),s=a.color(k),{from:[r.r,r.g,r.b,r.opacity],to:[s.r,s.g,s.b,s.opacity],f:f};if("transform"==e||"gradientTransform"==e||"patternTransform"==e)return k instanceof a.Matrix&&(k=k.toTransformString()),a._.rgTransform.test(k)||(k=a._.svgTransform2string(k)),
w(r,k,function(){return x.getBBox(1)});if("d"==e||"path"==e)return r=a.path.toCubic(r,k),{from:u(r[0]),to:u(r[1]),f:n(r[0])};if("points"==e)return r=q(r).split(a._.separator),s=q(k).split(a._.separator),{from:r,to:s,f:function(a){return a}};aUnit=r.match(b);s=q(k).match(b);return aUnit&&aUnit==s?{from:parseFloat(r),to:parseFloat(k),f:d(aUnit)}:{from:this.asPX(e),to:this.asPX(e,k),f:z}})});C.plugin(function(a,v,y,C){var A=v.prototype,w="createTouch"in C.doc;v="click dblclick mousedown mousemove mouseout mouseover mouseup touchstart touchmove touchend touchcancel".split(" ");
var z={mousedown:"touchstart",mousemove:"touchmove",mouseup:"touchend"},d=function(a,b){var d="y"==a?"scrollTop":"scrollLeft",e=b&&b.node?b.node.ownerDocument:C.doc;return e[d in e.documentElement?"documentElement":"body"][d]},f=function(){this.returnValue=!1},n=function(){return this.originalEvent.preventDefault()},u=function(){this.cancelBubble=!0},p=function(){return this.originalEvent.stopPropagation()},b=function(){if(C.doc.addEventListener)return function(a,b,e,f){var k=w&&z[b]?z[b]:b,l=function(k){var l=
b,e,h){var k=function(a){a=a||h.node.ownerDocument.window.event;var b=d("y",h),k=d("x",h),k=a.clientX+k,b=a.clientY+b;a.preventDefault=a.preventDefault||f;a.stopPropagation=a.stopPropagation||u;return e.call(h,a,k,b)};a.attachEvent("on"+b,k);return function(){a.detachEvent("on"+b,k);return!0}}}(),q=[],e=function(a){for(var b=a.clientX,e=a.clientY,f=d("y"),l=d("x"),n,p=q.length;p--;){n=q[p];if(w)for(var r=a.touches&&a.touches.length,u;r--;){if(u=a.touches[r],u.identifier==n.el._drag.id||n.el.node.contains(u.target)){b=
u.clientX;e=u.clientY;(a.originalEvent?a.originalEvent:a).preventDefault();break}}else a.preventDefault();b+=l;e+=f;k("snap.drag.move."+n.el.id,n.move_scope||n.el,b-n.el._drag.x,e-n.el._drag.y,b,e,a)}},l=function(b){a.unmousemove(e).unmouseup(l);for(var d=q.length,f;d--;)f=q[d],f.el._drag={},k("snap.drag.end."+f.el.id,f.end_scope||f.start_scope||f.move_scope||f.el,b);q=[]};for(y=v.length;y--;)(function(d){a[d]=A[d]=function(e,f){a.is(e,"function")&&(this.events=this.events||[],this.events.push({name:d,
f:e,unbind:b(this.node||document,d,e,f||this)}));return this};a["un"+d]=A["un"+d]=function(a){for(var b=this.events||[],e=b.length;e--;)if(b[e].name==d&&(b[e].f==a||!a)){b[e].unbind();b.splice(e,1);!b.length&&delete this.events;break}return this}})(v[y]);A.hover=function(a,b,d,e){return this.mouseover(a,d).mouseout(b,e||d)};A.unhover=function(a,b){return this.unmouseover(a).unmouseout(b)};var r=[];A.drag=function(b,d,f,h,n,p){function u(r,v,w){(r.originalEvent||r).preventDefault();this._drag.x=v;
this._drag.y=w;this._drag.id=r.identifier;!q.length&&a.mousemove(e).mouseup(l);q.push({el:this,move_scope:h,start_scope:n,end_scope:p});d&&k.on("snap.drag.start."+this.id,d);b&&k.on("snap.drag.move."+this.id,b);f&&k.on("snap.drag.end."+this.id,f);k("snap.drag.start."+this.id,n||h||this,v,w,r)}if(!arguments.length){var v;return this.drag(function(a,b){this.attr({transform:v+(v?"T":"t")+[a,b]})},function(){v=this.transform().local})}this._drag={};r.push({el:this,start:u});this.mousedown(u);return this};
A.undrag=function(){for(var b=r.length;b--;)r[b].el==this&&(this.unmousedown(r[b].start),r.splice(b,1),k.unbind("snap.drag.*."+this.id));!r.length&&a.unmousemove(e).unmouseup(l);return this}});C.plugin(function(a,v,y,C){y=y.prototype;var A=/^\s*url\((.+)\)/,w=String,z=a._.\$;a.filter={};y.filter=function(d){var f=this;"svg"!=f.type&&(f=f.paper);d=a.parse(w(d));var k=a._.id(),u=z("filter");z(u,{id:k,filterUnits:"userSpaceOnUse"});u.appendChild(d.node);f.defs.appendChild(u);return new v(u)};k.on("snap.util.getattr.filter",
function(){k.stop();var d=z(this.node,"filter");if(d)return(d=w(d).match(A))&&a.select(d[1])});k.on("snap.util.attr.filter",function(d){if(d instanceof v&&"filter"==d.type){k.stop();var f=d.node.id;f||(z(d.node,{id:d.id}),f=d.id);z(this.node,{filter:a.url(f)})}d&&"none"!=d||(k.stop(),this.node.removeAttribute("filter"))});a.filter.blur=function(d,f){null==d&&(d=2);return a.format('<feGaussianBlur stdDeviation="{def}"/>',{def:null==f?d:[d,f]})};a.filter.blur.toString=function(){return this()};a.filter.shadow=
function(d,f,k,u,p){"string"==typeof k&&(p=u=k,k=4);"string"!=typeof u&&(p=u,u="#000");null==k&&(k=4);null==p&&(p=1);null==d&&(d=0,f=2);null==f&&(f=d);u=a.color(u||"#000");return a.format('<feGaussianBlur in="SourceAlpha" stdDeviation="{blur}"/><feOffset dx="{dx}" dy="{dy}" result="offsetblur"/><feFlood flood-color="{color}"/><feComposite in2="offsetblur" operator="in"/><feComponentTransfer><feFuncA type="linear" slope="{opacity}"/></feComponentTransfer><feMerge><feMergeNode/><feMergeNode in="SourceGraphic"/></feMerge>',
{color:u,dx:d,dy:f,blur:k,opacity:p})};a.filter.shadow.toString=function(){return this()};a.filter.grayscale=function(d){null==d&&(d=1);return a.format('<feColorMatrix type="matrix" values="{a} {b} {c} 0 0 {d} {e} {f} 0 0 {g} {b} {h} 0 0 0 0 0 1 0"/>',{a:0.2126+0.7874*(1-d),b:0.7152-0.7152*(1-d),c:0.0722-0.0722*(1-d),d:0.2126-0.2126*(1-d),e:0.7152+0.2848*(1-d),f:0.0722-0.0722*(1-d),g:0.2126-0.2126*(1-d),h:0.0722+0.9278*(1-d)})};a.filter.grayscale.toString=function(){return this()};a.filter.sepia=
function(d){null==d&&(d=1);return a.format('<feColorMatrix type="matrix" values="{a} {b} {c} 0 0 {d} {e} {f} 0 0 {g} {h} {i} 0 0 0 0 0 1 0"/>',{a:0.393+0.607*(1-d),b:0.769-0.769*(1-d),c:0.189-0.189*(1-d),d:0.349-0.349*(1-d),e:0.686+0.314*(1-d),f:0.168-0.168*(1-d),g:0.272-0.272*(1-d),h:0.534-0.534*(1-d),i:0.131+0.869*(1-d)})};a.filter.sepia.toString=function(){return this()};a.filter.saturate=function(d){null==d&&(d=1);return a.format('<feColorMatrix type="saturate" values="{amount}"/>',{amount:1-
d})};a.filter.saturate.toString=function(){return this()};a.filter.hueRotate=function(d){return a.format('<feColorMatrix type="hueRotate" values="{angle}"/>',{angle:d||0})};a.filter.hueRotate.toString=function(){return this()};a.filter.invert=function(d){null==d&&(d=1);return a.format('<feComponentTransfer><feFuncR type="table" tableValues="{amount} {amount2}"/><feFuncG type="table" tableValues="{amount} {amount2}"/><feFuncB type="table" tableValues="{amount} {amount2}"/></feComponentTransfer>',{amount:d,
amount2:1-d})};a.filter.invert.toString=function(){return this()};a.filter.brightness=function(d){null==d&&(d=1);return a.format('<feComponentTransfer><feFuncR type="linear" slope="{amount}"/><feFuncG type="linear" slope="{amount}"/><feFuncB type="linear" slope="{amount}"/></feComponentTransfer>',{amount:d})};a.filter.brightness.toString=function(){return this()};a.filter.contrast=function(d){null==d&&(d=1);return a.format('<feComponentTransfer><feFuncR type="linear" slope="{amount}" intercept="{amount2}"/><feFuncG type="linear" slope="{amount}" intercept="{amount2}"/><feFuncB type="linear" slope="{amount}" intercept="{amount2}"/></feComponentTransfer>',
{amount:d,amount2:0.5-d/2})};a.filter.contrast.toString=function(){return this()}});return C});

(function (glob, factory) {
// AMD support
if (typeof define === "function" && define.amd) {
// Define as an anonymous module
return factory(Snap);
});
} else {
// Browser globals (glob is window)
// Snap adds itself to window
}
}(this, function (Snap) {

// Get an x/y coordinate value in pixels
var xPX = function(fig, x) {
var client_box = fig.node.getBoundingClientRect();
return x * fig.node.viewBox.baseVal.width / client_box.width;
};

var yPX = function(fig, y) {
var client_box = fig.node.getBoundingClientRect();
return y * fig.node.viewBox.baseVal.height / client_box.height;
};

Snap.plugin(function (Snap, Element, Paper, global) {
// Traverse upwards from a snap element to find and return the first
// note with the "plotroot" class.
Element.prototype.plotroot = function () {
var element = this;
while (!element.hasClass("plotroot") && element.parent() != null) {
element = element.parent();
}
return element;
};

Element.prototype.svgroot = function () {
var element = this;
while (element.node.nodeName != "svg" && element.parent() != null) {
element = element.parent();
}
return element;
};

Element.prototype.plotbounds = function () {
var root = this.plotroot()
var bbox = root.select(".guide.background").node.getBBox();
return {
x0: bbox.x,
x1: bbox.x + bbox.width,
y0: bbox.y,
y1: bbox.y + bbox.height
};
};

Element.prototype.plotcenter = function () {
var root = this.plotroot()
var bbox = root.select(".guide.background").node.getBBox();
return {
x: bbox.x + bbox.width / 2,
y: bbox.y + bbox.height / 2
};
};

// Emulate IE style mouseenter/mouseleave events, since Microsoft always
// does everything right.
// See: http://www.dynamic-tools.net/toolbox/isMouseLeaveOrEnter/
var events = ["mouseenter", "mouseleave"];

for (i in events) {
(function (event_name) {
var event_name = events[i];
Element.prototype[event_name] = function (fn, scope) {
if (Snap.is(fn, "function")) {
var fn2 = function (event) {
if (event.type != "mouseover" && event.type != "mouseout") {
return;
}

var reltg = event.relatedTarget ? event.relatedTarget :
event.type == "mouseout" ? event.toElement : event.fromElement;
while (reltg && reltg != this.node) reltg = reltg.parentNode;

if (reltg != this.node) {
return fn.apply(this, event);
}
};

if (event_name == "mouseenter") {
this.mouseover(fn2, scope);
} else {
this.mouseout(fn2, scope);
}
}
return this;
};
})(events[i]);
}

Element.prototype.mousewheel = function (fn, scope) {
if (Snap.is(fn, "function")) {
var el = this;
var fn2 = function (event) {
fn.apply(el, [event]);
};
}

/Firefox/i.test(navigator.userAgent) ? "DOMMouseScroll" : "mousewheel",
fn2);

return this;
};

// Snap's attr function can be too slow for things like panning/zooming.
// This is a function to directly update element attributes without going
// through eve.
Element.prototype.attribute = function(key, val) {
if (val === undefined) {
return this.node.getAttribute(key, val);
} else {
return this.node.setAttribute(key, val);
}
};
});

// When the plot is moused over, emphasize the grid lines.
var root = this.plotroot();
init_pan_zoom(root);

var xgridlines = root.select(".xgridlines"),
ygridlines = root.select(".ygridlines");

xgridlines.data("unfocused_strokedash",
xgridlines.attr("stroke-dasharray").replace(/px/g, "mm"))
ygridlines.data("unfocused_strokedash",
ygridlines.attr("stroke-dasharray").replace(/px/g, "mm"))

// emphasize grid lines
var destcolor = root.data("focused_xgrid_color");
xgridlines.attr("stroke-dasharray", "none")
.selectAll("path")
.animate({stroke: destcolor}, 250);

destcolor = root.data("focused_ygrid_color");
ygridlines.attr("stroke-dasharray", "none")
.selectAll("path")
.animate({stroke: destcolor}, 250);

// reveal zoom slider
root.select(".zoomslider")
.animate({opacity: 1.0}, 250);
};

// Unemphasize grid lines on mouse out.
var root = this.plotroot();
var xgridlines = root.select(".xgridlines"),
ygridlines = root.select(".ygridlines");

var destcolor = root.data("unfocused_xgrid_color");

xgridlines.attr("stroke-dasharray", xgridlines.data("unfocused_strokedash"))
.selectAll("path")
.animate({stroke: destcolor}, 250);

destcolor = root.data("unfocused_ygrid_color");
ygridlines.attr("stroke-dasharray", ygridlines.data("unfocused_strokedash"))
.selectAll("path")
.animate({stroke: destcolor}, 250);

// hide zoom slider
root.select(".zoomslider")
.animate({opacity: 0.0}, 250);
};

var set_geometry_transform = function(root, tx, ty, scale) {
var xscalable = root.hasClass("xscalable"),
yscalable = root.hasClass("yscalable");

var old_scale = root.data("scale");

var xscale = xscalable ? scale : 1.0,
yscale = yscalable ? scale : 1.0;

tx = xscalable ? tx : 0.0;
ty = yscalable ? ty : 0.0;

var t = new Snap.Matrix().translate(tx, ty).scale(xscale, yscale);

root.selectAll(".geometry, image")
.forEach(function (element, i) {
element.transform(t);
});

bounds = root.plotbounds();

if (yscalable) {
var xfixed_t = new Snap.Matrix().translate(0, ty).scale(1.0, yscale);
root.selectAll(".xfixed")
.forEach(function (element, i) {
element.transform(xfixed_t);
});

root.select(".ylabels")
.transform(xfixed_t)
.selectAll("text")
.forEach(function (element, i) {
var cx = element.asPX("x"),
cy = element.asPX("y");
var st = element.data("static_transform");
unscale_t = new Snap.Matrix();
element.transform(unscale_t);

var y = cy * scale + ty;
element.attr("visibility",
bounds.y0 <= y && y <= bounds.y1 ? "visible" : "hidden");
}
});
}

if (xscalable) {
var yfixed_t = new Snap.Matrix().translate(tx, 0).scale(xscale, 1.0);
var xtrans = new Snap.Matrix().translate(tx, 0);
root.selectAll(".yfixed")
.forEach(function (element, i) {
element.transform(yfixed_t);
});

root.select(".xlabels")
.transform(yfixed_t)
.selectAll("text")
.forEach(function (element, i) {
var cx = element.asPX("x"),
cy = element.asPX("y");
var st = element.data("static_transform");
unscale_t = new Snap.Matrix();

element.transform(unscale_t);

var x = cx * scale + tx;
element.attr("visibility",
bounds.x0 <= x && x <= bounds.x1 ? "visible" : "hidden");
}
});
}

// we must unscale anything that is scale invariance: widths, raiduses, etc.
var size_attribs = ["font-size"];
var unscaled_selection = ".geometry, .geometry *";
if (xscalable) {
size_attribs.push("rx");
unscaled_selection += ", .xgridlines";
}
if (yscalable) {
size_attribs.push("ry");
unscaled_selection += ", .ygridlines";
}

root.selectAll(unscaled_selection)
.forEach(function (element, i) {
// circle need special help
if (element.node.nodeName == "circle") {
var cx = element.attribute("cx"),
cy = element.attribute("cy");
unscale_t = new Snap.Matrix().scale(1/xscale, 1/yscale,
cx, cy);
element.transform(unscale_t);
return;
}

for (i in size_attribs) {
var key = size_attribs[i];
var val = parseFloat(element.attribute(key));
if (val !== undefined && val != 0 && !isNaN(val)) {
element.attribute(key, val * old_scale / scale);
}
}
});
};

// Find the most appropriate tick scale and update label visibility.
var update_tickscale = function(root, scale, axis) {
if (!root.hasClass(axis + "scalable")) return;

var tickscales = root.data(axis + "tickscales");
var best_tickscale = 1.0;
var best_tickscale_dist = Infinity;
for (tickscale in tickscales) {
var dist = Math.abs(Math.log(tickscale) - Math.log(scale));
if (dist < best_tickscale_dist) {
best_tickscale_dist = dist;
best_tickscale = tickscale;
}
}

if (best_tickscale != root.data(axis + "tickscale")) {
root.data(axis + "tickscale", best_tickscale);
var mark_inscale_gridlines = function (element, i) {
var inscale = element.attr("gadfly:scale") == best_tickscale;
element.attr("visibility", inscale ? "visible" : "hidden");
};

var mark_inscale_labels = function (element, i) {
var inscale = element.attr("gadfly:scale") == best_tickscale;
element.attr("visibility", inscale ? "visible" : "hidden");
};

root.select("." + axis + "gridlines").selectAll("path").forEach(mark_inscale_gridlines);
root.select("." + axis + "labels").selectAll("text").forEach(mark_inscale_labels);
}
};

var set_plot_pan_zoom = function(root, tx, ty, scale) {
var old_scale = root.data("scale");
var bounds = root.plotbounds();

var width = bounds.x1 - bounds.x0,
height = bounds.y1 - bounds.y0;

// compute the viewport derived from tx, ty, and scale
var x_min = -width * scale - (scale * width - width),
x_max = width * scale,
y_min = -height * scale - (scale * height - height),
y_max = height * scale;

var x0 = bounds.x0 - scale * bounds.x0,
y0 = bounds.y0 - scale * bounds.y0;

var tx = Math.max(Math.min(tx - x0, x_max), x_min),
ty = Math.max(Math.min(ty - y0, y_max), y_min);

tx += x0;
ty += y0;

// when the scale change, we may need to alter which set of
// ticks is being displayed
if (scale != old_scale) {
update_tickscale(root, scale, "x");
update_tickscale(root, scale, "y");
}

set_geometry_transform(root, tx, ty, scale);

root.data("scale", scale);
root.data("tx", tx);
root.data("ty", ty);
};

var scale_centered_translation = function(root, scale) {
var bounds = root.plotbounds();

var width = bounds.x1 - bounds.x0,
height = bounds.y1 - bounds.y0;

var tx0 = root.data("tx"),
ty0 = root.data("ty");

var scale0 = root.data("scale");

// how off from center the current view is
var xoff = tx0 - (bounds.x0 * (1 - scale0) + (width * (1 - scale0)) / 2),
yoff = ty0 - (bounds.y0 * (1 - scale0) + (height * (1 - scale0)) / 2);

// rescale offsets
xoff = xoff * scale / scale0;
yoff = yoff * scale / scale0;

// adjust for the panel position being scaled
var x_edge_adjust = bounds.x0 * (1 - scale),
y_edge_adjust = bounds.y0 * (1 - scale);

return {
x: xoff + x_edge_adjust + (width - width * scale) / 2,
y: yoff + y_edge_adjust + (height - height * scale) / 2
};
};

// Initialize data for panning zooming if it isn't already.
var init_pan_zoom = function(root) {
return;
}

// The non-scaling-stroke trick. Rather than try to correct for the
// stroke-width when zooming, we force it to a fixed value.
var px_per_mm = root.node.getCTM().a;

// Drag events report deltas in pixels, which we'd like to convert to
// millimeters.
root.data("px_per_mm", px_per_mm);

root.selectAll("path")
.forEach(function (element, i) {
sw = element.asPX("stroke-width") * px_per_mm;
if (sw > 0) {
element.attribute("stroke-width", sw);
element.attribute("vector-effect", "non-scaling-stroke");
}
});

// Store ticks labels original tranformation
root.selectAll(".xlabels > text, .ylabels > text")
.forEach(function (element, i) {
var lm = element.transform().localMatrix;
element.data("static_transform",
new Snap.Matrix(lm.a, lm.b, lm.c, lm.d, lm.e, lm.f));
});

if (root.data("tx") === undefined) root.data("tx", 0);
if (root.data("ty") === undefined) root.data("ty", 0);
if (root.data("scale") === undefined) root.data("scale", 1.0);
if (root.data("xtickscales") === undefined) {

// index all the tick scales that are listed
var xtickscales = {};
var ytickscales = {};
var add_x_tick_scales = function (element, i) {
};
var add_y_tick_scales = function (element, i) {
};

root.data("xtickscales", xtickscales);
root.data("ytickscales", ytickscales);
root.data("xtickscale", 1.0);
}

var min_scale = 1.0, max_scale = 1.0;
for (scale in xtickscales) {
min_scale = Math.min(min_scale, scale);
max_scale = Math.max(max_scale, scale);
}
for (scale in ytickscales) {
min_scale = Math.min(min_scale, scale);
max_scale = Math.max(max_scale, scale);
}
root.data("min_scale", min_scale);
root.data("max_scale", max_scale);

// store the original positions of labels
root.select(".xlabels")
.selectAll("text")
.forEach(function (element, i) {
element.data("x", element.asPX("x"));
});

root.select(".ylabels")
.selectAll("text")
.forEach(function (element, i) {
element.data("y", element.asPX("y"));
});

// mark grid lines and ticks as in or out of scale.
var mark_inscale = function (element, i) {
};

root.select(".xgridlines").selectAll("path").forEach(mark_inscale);
root.select(".ygridlines").selectAll("path").forEach(mark_inscale);
root.select(".xlabels").selectAll("text").forEach(mark_inscale);
root.select(".ylabels").selectAll("text").forEach(mark_inscale);

// figure out the upper ond lower bounds on panning using the maximum
// and minum grid lines
var bounds = root.plotbounds();
var pan_bounds = {
x0: 0.0,
y0: 0.0,
x1: 0.0,
y1: 0.0
};

root.select(".xgridlines")
.selectAll("path")
.forEach(function (element, i) {
var bbox = element.node.getBBox();
if (bounds.x1 - bbox.x < pan_bounds.x0) {
pan_bounds.x0 = bounds.x1 - bbox.x;
}
if (bounds.x0 - bbox.x > pan_bounds.x1) {
pan_bounds.x1 = bounds.x0 - bbox.x;
}
}
});

root.select(".ygridlines")
.selectAll("path")
.forEach(function (element, i) {
var bbox = element.node.getBBox();
if (bounds.y1 - bbox.y < pan_bounds.y0) {
pan_bounds.y0 = bounds.y1 - bbox.y;
}
if (bounds.y0 - bbox.y > pan_bounds.y1) {
pan_bounds.y1 = bounds.y0 - bbox.y;
}
}
});

// nudge these values a little
pan_bounds.x0 -= 5;
pan_bounds.x1 += 5;
pan_bounds.y0 -= 5;
pan_bounds.y1 += 5;
root.data("pan_bounds", pan_bounds);

// Set all grid lines at scale 1.0 to visible. Out of bounds lines
// will be clipped.
root.select(".xgridlines")
.selectAll("path")
.forEach(function (element, i) {
element.attr("visibility", "visible");
}
});

root.select(".ygridlines")
.selectAll("path")
.forEach(function (element, i) {
element.attr("visibility", "visible");
}
});

};

// Panning
Gadfly.guide_background_drag_onmove = function(dx, dy, x, y, event) {
var root = this.plotroot();
var px_per_mm = root.data("px_per_mm");
dx /= px_per_mm;
dy /= px_per_mm;

var tx0 = root.data("tx"),
ty0 = root.data("ty");

var dx0 = root.data("dx"),
dy0 = root.data("dy");

root.data("dx", dx);
root.data("dy", dy);

dx = dx - dx0;
dy = dy - dy0;

var tx = tx0 + dx,
ty = ty0 + dy;

set_plot_pan_zoom(root, tx, ty, root.data("scale"));
};

Gadfly.guide_background_drag_onstart = function(x, y, event) {
var root = this.plotroot();
root.data("dx", 0);
root.data("dy", 0);
init_pan_zoom(root);
};

var root = this.plotroot();
};

if (event.shiftKey) {
var root = this.plotroot();
init_pan_zoom(root);
var new_scale = root.data("scale") * Math.pow(2, 0.002 * event.wheelDelta);
new_scale = Math.max(
root.data("min_scale"),
Math.min(root.data("max_scale"), new_scale))
update_plot_scale(root, new_scale);
event.stopPropagation();
}
};

this.select(".button_logo")
.animate({fill: this.data("mouseover_color")}, 100);
};

this.select(".button_logo")
.animate({fill: this.data("mouseout_color")}, 100);
};

var root = this.plotroot();
init_pan_zoom(root);
var min_scale = root.data("min_scale"),
scale = root.data("scale");
Snap.animate(
scale,
Math.max(min_scale, scale / 1.5),
function (new_scale) {
update_plot_scale(root, new_scale);
},
200);
};

var root = this.plotroot();
init_pan_zoom(root);
var max_scale = root.data("max_scale"),
scale = root.data("scale");

Snap.animate(
scale,
Math.min(max_scale, scale * 1.5),
function (new_scale) {
update_plot_scale(root, new_scale);
},
200);
};

// TODO
};

this.animate({fill: this.data("mouseover_color")}, 100);
};

this.animate({fill: this.data("mouseout_color")}, 100);
};

// compute the position in [0, 1] of the zoom slider thumb from the current scale
var slider_position_from_scale = function(scale, min_scale, max_scale) {
if (scale >= 1.0) {
return 0.5 + 0.5 * (Math.log(scale) / Math.log(max_scale));
}
else {
return 0.5 * (Math.log(scale) - Math.log(min_scale)) / (0 - Math.log(min_scale));
}
}

var update_plot_scale = function(root, new_scale) {
var trans = scale_centered_translation(root, new_scale);
set_plot_pan_zoom(root, trans.x, trans.y, new_scale);

root.selectAll(".zoomslider_thumb")
.forEach(function (element, i) {
var min_pos = element.data("min_pos"),
max_pos = element.data("max_pos"),
min_scale = root.data("min_scale"),
max_scale = root.data("max_scale");
var xmid = (min_pos + max_pos) / 2;
var xpos = slider_position_from_scale(new_scale, min_scale, max_scale);
element.transform(new Snap.Matrix().translate(
Math.max(min_pos, Math.min(
max_pos, min_pos + (max_pos - min_pos) * xpos)) - xmid, 0));
});
};

Gadfly.zoomslider_thumb_dragmove = function(dx, dy, x, y) {
var root = this.plotroot();
var min_pos = this.data("min_pos"),
max_pos = this.data("max_pos"),
min_scale = root.data("min_scale"),
max_scale = root.data("max_scale"),
old_scale = root.data("old_scale");

var px_per_mm = root.data("px_per_mm");
dx /= px_per_mm;
dy /= px_per_mm;

var xmid = (min_pos + max_pos) / 2;
var xpos = slider_position_from_scale(old_scale, min_scale, max_scale) +
dx / (max_pos - min_pos);

// compute the new scale
var new_scale;
if (xpos >= 0.5) {
new_scale = Math.exp(2.0 * (xpos - 0.5) * Math.log(max_scale));
}
else {
new_scale = Math.exp(2.0 * xpos * (0 - Math.log(min_scale)) +
Math.log(min_scale));
}
new_scale = Math.min(max_scale, Math.max(min_scale, new_scale));

update_plot_scale(root, new_scale);
};

var root = this.plotroot();
init_pan_zoom(root);

// keep track of what the scale was when we started dragging
root.data("old_scale", root.data("scale"));
};

};

var toggle_color_class = function(root, color_class, ison) {
var guides = root.selectAll(".guide." + color_class + ",.guide ." + color_class);
var geoms = root.selectAll(".geometry." + color_class + ",.geometry ." + color_class);
if (ison) {
guides.animate({opacity: 0.5}, 250);
geoms.animate({opacity: 0.0}, 250);
} else {
guides.animate({opacity: 1.0}, 250);
geoms.animate({opacity: 1.0}, 250);
}
};

var root = this.plotroot();
var color_class = this.data("color_class");

if (event.shiftKey) {
root.selectAll(".colorkey text")
.forEach(function (element) {
var other_color_class = element.data("color_class");
if (other_color_class != color_class) {
toggle_color_class(root, other_color_class,
element.attr("opacity") == 1.0);
}
});
} else {
toggle_color_class(root, color_class, this.attr("opacity") == 1.0);
}
};

}));

(function (glob, factory) {
// AMD support
if (typeof require === "function" && typeof define === "function" && define.amd) {
});
} else {
}
var fig = Snap("#fig-7af1b554904c4f478f3913ec9578349b");
fig.select("#fig-7af1b554904c4f478f3913ec9578349b-element-4")
.drag(function() {}, function() {}, function() {});
fig.select("#fig-7af1b554904c4f478f3913ec9578349b-element-6")
.data("color_class", "color_setosa")
;
fig.select("#fig-7af1b554904c4f478f3913ec9578349b-element-7")
.data("color_class", "color_versicolor")
;
fig.select("#fig-7af1b554904c4f478f3913ec9578349b-element-8")
.data("color_class", "color_virginica")
;
fig.select("#fig-7af1b554904c4f478f3913ec9578349b-element-10")
.data("color_class", "color_setosa")
;
fig.select("#fig-7af1b554904c4f478f3913ec9578349b-element-11")
.data("color_class", "color_versicolor")
;
fig.select("#fig-7af1b554904c4f478f3913ec9578349b-element-12")
.data("color_class", "color_virginica")
;
fig.select("#fig-7af1b554904c4f478f3913ec9578349b-element-15")
;
fig.select("#fig-7af1b554904c4f478f3913ec9578349b-element-19")
.plotroot().data("unfocused_ygrid_color", "#D0D0E0")
;
fig.select("#fig-7af1b554904c4f478f3913ec9578349b-element-19")
.plotroot().data("focused_ygrid_color", "#A0A0A0")
;
fig.select("#fig-7af1b554904c4f478f3913ec9578349b-element-137")
.plotroot().data("unfocused_xgrid_color", "#D0D0E0")
;
fig.select("#fig-7af1b554904c4f478f3913ec9578349b-element-137")
.plotroot().data("focused_xgrid_color", "#A0A0A0")
;
fig.select("#fig-7af1b554904c4f478f3913ec9578349b-element-429")
.data("mouseover_color", "#cd5c5c")
;
fig.select("#fig-7af1b554904c4f478f3913ec9578349b-element-429")
.data("mouseout_color", "#6a6a6a")
;
fig.select("#fig-7af1b554904c4f478f3913ec9578349b-element-429")
;
fig.select("#fig-7af1b554904c4f478f3913ec9578349b-element-433")
.data("max_pos", 104.83)
;
fig.select("#fig-7af1b554904c4f478f3913ec9578349b-element-433")
.data("min_pos", 87.83)
;
fig.select("#fig-7af1b554904c4f478f3913ec9578349b-element-433")
fig.select("#fig-7af1b554904c4f478f3913ec9578349b-element-435")
.data("max_pos", 104.83)
;
fig.select("#fig-7af1b554904c4f478f3913ec9578349b-element-435")
.data("min_pos", 87.83)
;
fig.select("#fig-7af1b554904c4f478f3913ec9578349b-element-435")
.data("mouseover_color", "#cd5c5c")
;
fig.select("#fig-7af1b554904c4f478f3913ec9578349b-element-435")
.data("mouseout_color", "#6a6a6a")
;
fig.select("#fig-7af1b554904c4f478f3913ec9578349b-element-435")
;
fig.select("#fig-7af1b554904c4f478f3913ec9578349b-element-437")
.data("mouseover_color", "#cd5c5c")
;
fig.select("#fig-7af1b554904c4f478f3913ec9578349b-element-437")
.data("mouseout_color", "#6a6a6a")
;
fig.select("#fig-7af1b554904c4f478f3913ec9578349b-element-437")
;
});

``````
``````

In [16]:

a = [1, 2, 3]

``````
``````

Out[16]:

3-element Array{Int64,1}:
1
2
3

``````
``````

In [18]:

a[end-1]

``````
``````

Out[18]:

2

``````
``````

In [23]:

@which a[1]

``````
``````

Out[23]:

getindex(A::Array{T,N},i0::Real) at array.jl:246

``````
``````

In [24]:

@which length(a)

``````
``````

Out[24]:

length(a::Array{T,N}) at array.jl:21

``````
``````

In [25]:

methodswith(Array)

``````
``````

Out[25]:

``````
``````

In [11]:

function sum1(N::Int)
total = 0 # A integer

for i = 1:N
total += i/2 # i/2 will be promoted to float, which makes total has to be promoted to float, too.
end
end

function sum2(N::Int)
total = 0.0 # Initialize total as float.

for i = 1:N
total += i/2
end
end

``````
``````

Out[11]:

sum2 (generic function with 1 method)

``````
``````

In [17]:

@time sum1(1000000)

``````
``````

elapsed time: 0.086144781 seconds (32000080 bytes allocated, 55.17% gc time)

Out[17]:

2.5000025e11

``````
``````

In [18]:

@time sum2(1000000)

``````
``````

elapsed time: 0.001042188 seconds (96 bytes allocated)

Out[18]:

2.5000025e11

``````
``````

In [19]:

using PyCall

``````
``````

In [21]:

@pyimport requests

``````
``````

In [22]:

s = requests.session()

``````
``````

Out[22]:

PyObject <requests.sessions.Session object at 0x1123f5250>

``````
``````

In [30]:

ismatch(r"^\s*(?:#|\$)", "\\$ a comment")

``````
``````

Out[30]:

false

``````
``````

In [33]:

m = match(r"[0-9]","aaaa1aaaa2aaaa3",11)

``````
``````

Out[33]:

RegexMatch("3")

``````
``````

In [36]:

m.captures

``````
``````

Out[36]:

0-element Array{Union(Nothing,SubString{UTF8String}),1}

``````
``````

In [42]:

m = match(r"(a|b)(c)?(d)?", "bc")

``````
``````

Out[42]:

RegexMatch("bc", 1="b", 2="c", 3=nothing)

``````
``````

In [43]:

m.captures

``````
``````

Out[43]:

3-element Array{Union(Nothing,SubString{UTF8String}),1}:
"b"
"c"
nothing

``````
``````

In [44]:

VERSION

``````
``````

Out[44]:

v"0.3.6"

``````
``````

In [45]:

a = [1, 3.0, 2]

``````
``````

Out[45]:

3-element Array{Float64,1}:
1.0
3.0
2.0

``````
``````

In [46]:

@pyimport numpy as np

``````
``````

Warning: imported binding for transpose overwritten in module __anon__

``````
``````

In [47]:

M_py = np.matrix([[1, 2, 3], [4, 5, 6]])

``````
``````

Out[47]:

1x6 Array{Int64,2}:
1  2  3  4  5  6

``````
``````

In [50]:

M_py = reshape(M_py, 2, 3)

``````
``````

Out[50]:

2x3 Array{Int64,2}:
1  3  5
2  4  6

``````
``````

In [56]:

Σ(x...) = sum(x)

``````
``````

Out[56]:

Σ (generic function with 1 method)

``````
``````

In [58]:

Σ(1, 2, 3, 4, 5, 6, 7)

``````
``````

Out[58]:

28

``````
``````

In [59]:

function test(a::Array, b::Any)
push!(a, b)
end

``````
``````

Out[59]:

test (generic function with 1 method)

``````
``````

In [60]:

m = [1]
test(m, 2)
m

``````
``````

Out[60]:

2-element Array{Int64,1}:
1
2

``````
``````

In [62]:

m = [1 2 3; 4 5 6]

``````
``````

Out[62]:

2x3 Array{Int64,2}:
1  2  3
4  5  6

``````
``````

In [69]:

@which [(1, 2), (3, 4)]

``````
``````

Out[69]:

vcat{T}(X::T...) at abstractarray.jl:517

``````
``````

In [94]:

function test1(a = b, b=1)
return a+b
end

``````
``````

Out[94]:

test1 (generic function with 3 methods)

``````
``````

In [89]:

b = 5

``````
``````

Out[89]:

5

``````
``````

In [91]:

test1()

``````
``````

Out[91]:

6

``````
``````

In [93]:

function test2(;a = b, b=1)
return a+b
end

``````
``````

Out[93]:

test2 (generic function with 1 method)

``````
``````

In [95]:

test2()

``````
``````

b not defined

``````
``````

In [96]:

function test3(b=1, a = b)
return a+b
end

``````
``````

Out[96]:

test3 (generic function with 3 methods)

``````
``````

In [97]:

test3()

``````
``````

Out[97]:

2

``````
``````

In [104]:

if ζ == nothing
println("nothing!")
end

``````
``````

ζ not defined

``````
``````

In [108]:

@pyimport requests

``````
``````

In [109]:

s = requests.session()

``````
``````

Out[109]:

PyObject <requests.sessions.Session object at 0x11192fdd0>

``````
``````

In [110]:

getfield(s.o, :get)

``````
``````

type Ptr has no field get

``````
``````

In [115]:

function return1()
true
end

``````
``````

Out[115]:

return1 (generic function with 1 method)

``````
``````

In [116]:

function return2()
false
end

``````
``````

Out[116]:

return2 (generic function with 1 method)

``````
``````

In [121]:

t = return1() || return1() && return2()

``````
``````

Out[121]:

true

``````
``````

In [122]:

t

``````
``````

Out[122]:

true

``````
``````

In [124]:

x = 1:5

``````
``````

Out[124]:

1:5

``````
``````

In [125]:

typeof(x)

``````
``````

Out[125]:

UnitRange{Int64} (constructor with 1 method)

``````
``````

In [128]:

for i in x
println(i)
end

``````
``````

1
2
3
4
5

``````
``````

In [130]:

for i in 0:6
println(i)
end

``````
``````

0
1
2
3
4
5
6

``````
``````

In [131]:

sizeof(x)

``````
``````

Out[131]:

16

``````
``````

In [132]:

y = [1:6]

``````
``````

Out[132]:

6-element Array{Int64,1}:
1
2
3
4
5
6

``````
``````

In [133]:

sizeof(y)

``````
``````

Out[133]:

48

``````
``````

In [134]:

?sizeof

``````
``````

sizeof(s::String)

The number of bytes in string "s".

``````
``````

In [135]:

?filter

``````
``````

Base.filter(function, collection)

Return a copy of "collection", removing elements for which
"function" is false. For associative collections, the function is
passed two arguments (key and value).

``````
``````

In [136]:

reverse("abcd")

``````
``````

Out[136]:

"dcba"

``````
``````

In [138]:

for i in 1:10
for j in 1:30
if j > 10
break
end
println((i, j))
end
end

``````
``````

(1,1)
(1,2)
(1,3)
(1,4)
(1,5)
(1,6)
(1,7)
(1,8)
(1,9)
(1,10)
(2,1)
(2,2)
(2,3)
(2,4)
(2,5)
(2,6)
(2,7)
(2,8)
(2,9)
(2,10)
(3,1)
(3,2)
(3,3)
(3,4)
(3,5)
(3,6)
(3,7)
(3,8)
(3,9)
(3,10)
(4,1)
(4,2)
(4,3)
(4,4)
(4,5)
(4,6)
(4,7)
(4,8)
(4,9)
(4,10)
(5,1)
(5,2)
(5,3)
(5,4)
(5,5)
(5,6)
(5,7)
(5,8)
(5,9)
(5,10)
(6,1)
(6,2)
(6,3)
(6,4)
(6,5)
(6,6)
(6,7)
(6,8)
(6,9)
(6,10)
(7,1)
(7,2)
(7,3)
(7,4)
(7,5)
(7,6)
(7,7)
(7,8)
(7,9)
(7,10)
(8,1)
(8,2)
(8,3)
(8,4)
(8,5)
(8,6)
(8,7)
(8,8)
(8,9)
(8,10)
(9,1)
(9,2)
(9,3)
(9,4)
(9,5)
(9,6)
(9,7)
(9,8)
(9,9)
(9,10)
(10,1)
(10,2)
(10,3)
(10,4)
(10,5)
(10,6)
(10,7)
(10,8)
(10,9)
(10,10)

``````
``````

In [139]:

for i in 1:10, j in 1:30
if j > 10
break
end
println((i, j))
end

``````
``````

(1,1)
(1,2)
(1,3)
(1,4)
(1,5)
(1,6)
(1,7)
(1,8)
(1,9)
(1,10)

``````
``````

In [141]:

typeof(DomainError)

``````
``````

Out[141]:

DataType

``````
``````

In [143]:

typeof(Number)

``````
``````

Out[143]:

DataType

``````
``````

In [144]:

info("Hello")

``````
``````

INFO: Hello

``````
``````

In [145]:

warn("It's not joking, I'm warning you")

``````
``````

WARNING: It's not joking, I'm warning you

``````
``````

In [146]:

error("Error!!!")

``````
``````

Error!!!

in error at error.jl:21

``````
``````

In [1]:

# Julia generater?
function generator(N::Int)
for i in 1:N
produce(i)
end
end

``````
``````

Out[1]:

generator (generic function with 1 method)

``````
``````

In [159]:

``````
``````

Out[159]:

``````
``````

In [160]:

consume(g)

``````
``````

Out[160]:

1

``````
``````

In [161]:

consume(g)

``````
``````

Out[161]:

2

``````
``````

In [167]:

consume(g)

``````
``````

Out[167]:

8

``````
``````

In [169]:

``````
``````

Out[169]:

``````
``````

In [170]:

``````
``````

Out[170]:

``````
``````

In [172]:

consume(g2)

``````
``````

Out[172]:

1

``````
``````

In [173]:

``````
``````

Out[173]:

``````
``````

In [174]:

``````
``````

`delete!` has no method matching delete!(::Task)

``````
``````

In [176]:

``````
``````

In [2]:

function fun_arry()
sum = 0
c = [1:100000]
for i in c
sum += i
end
sum
end

``````
``````

Out[2]:

fun_arry (generic function with 1 method)

``````
``````

In [3]:

function fun_gener()
sum = 0
for i in g
sum += i
end
sum
end

``````
``````

Out[3]:

fun_gener (generic function with 1 method)

``````
``````

In [8]:

@time fun_arry()

``````
``````

elapsed time: 0.000667396 seconds (800144 bytes allocated)

Out[8]:

5000050000

``````
``````

In [9]:

@time fun_gener()

``````
``````

elapsed time: 0.318235352 seconds (4784288 bytes allocated)

Out[9]:

5000050000

``````
``````

In [20]:

I = [(i, j) for i=1:10, j=1:5];

``````
``````

In [33]:

## β can not be seen outside catch block since catch and try block will introduce new scope
try
β;
catch
β = 3;
end

``````
``````

Out[33]:

3

``````
``````

In [34]:

β

``````
``````

β not defined

``````
``````

In [35]:

## But catch block will return last line.
r = try
β;
catch
β = 3
end

``````
``````

Out[35]:

3

``````
``````

In [36]:

r

``````
``````

Out[36]:

3

``````
``````

In [27]:

## Or use global keyword.
try
α
catch
global α
α = 3
end

``````
``````

Out[27]:

3

``````
``````

In [28]:

α

``````
``````

Out[28]:

3

``````
``````

In [39]:

γ = 0
try
ζ
catch
γ += 1
end

``````
``````

Out[39]:

1

``````
``````

In [40]:

γ

``````
``````

Out[40]:

1

``````
``````

In [37]:

for i in 1:3
x = i
end

``````
``````

In [38]:

x

``````
``````

x not defined

``````
``````

In [42]:

Fs = cell(2)

``````
``````

Out[42]:

2-element Array{Any,1}:
#undef
#undef

``````
``````

In [43]:

?cell

``````
``````

Base.cell(dims)

Construct an uninitialized cell array (heterogeneous array).
"dims" can be either a tuple or a series of integer arguments.

``````
``````

In [44]:

push!(Fs, 1)
push!(Fs, "1")

``````
``````

Out[44]:

4-element Array{Any,1}:
#undef
#undef
1
"1"

``````
``````

In [46]:

Fs[1] = [1, 2, 3]

``````
``````

Out[46]:

3-element Array{Int64,1}:
1
2
3

``````
``````

In [47]:

Fs[2] = true

``````
``````

Out[47]:

true

``````
``````

In [48]:

Fs

``````
``````

Out[48]:

4-element Array{Any,1}:
[1,2,3]
true
1
"1"

``````
``````

In [50]:

println(Fs[1])
println(Fs[2])
println(Fs[3])
println(Fs[4])

``````
``````

[1,2,3]
true
1
1

``````
``````

In [51]:

for item in Fs
println(typeof(item))
end

``````
``````

Array{Int64,1}
Bool
Int64
ASCIIString

``````
``````

In [61]:

@time (1 + 2)::Int

``````
``````

elapsed time: 4.237e-6 seconds (80 bytes allocated)

Out[61]:

3

``````
``````

In [62]:

@time (1 + 2)

``````
``````

elapsed time: 4.104e-6 seconds (80 bytes allocated)

Out[62]:

3

``````
``````

In [74]:

function test(x)
x += 1
end

``````
``````

Out[74]:

test (generic function with 2 methods)

``````
``````

In [75]:

methods(test)

``````
``````

Out[75]:

2 methods for generic function test: test(x::Int64) at In[64]:2 test(x) at In[74]:2

``````
``````

In [77]:

?Dict

``````
``````

Base.Dict()

"Dict{K,V}()" constructs a hash

table with keys of type K and values of type V. The literal syntax
is "{"A"=>1, "B"=>2}" for a "Dict{Any,Any}", or
"["A"=>1, "B"=>2]" for a "Dict" of inferred type.

``````
``````

In [78]:

dd = Dict{String, Int16}()

``````
``````

Out[78]:

Dict{String,Int16} with 0 entries

``````
``````

In [80]:

dd["a"] = 16

``````
``````

Out[80]:

16

``````
``````

In [82]:

dd = {"A"=> 3}

``````
``````

Out[82]:

Dict{Any,Any} with 1 entry:
"A" => 3

``````
``````

In [83]:

dd

``````
``````

Out[83]:

Dict{Any,Any} with 1 entry:
"A" => 3

``````
``````

In [1]:

test(x::Number) = x+1

``````
``````

Out[1]:

test (generic function with 1 method)

``````
``````

In [2]:

@which test(2.5)

``````
``````

Out[2]:

test(x::Number) at In[1]:1

``````
``````

In [3]:

@which test(2)

``````
``````

Out[3]:

test(x::Number) at In[1]:1

``````
``````

In [4]:

?convert

``````
``````

Base.convert(type, x)

Try to convert "x" to the given type. Conversions from floating
point to integer, rational to integer, and complex to real will
raise an "InexactError" if "x" cannot be represented exactly in
the new type.

``````
``````

In [5]:

convert(FloatingPoint, 1)

``````
``````

Out[5]:

1.0

``````
``````

In [6]:

subtypes(Number)

``````
``````

Out[6]:

2-element Array{Any,1}:
Complex{T<:Real}
Real

``````
``````

In [10]:

subtypes(Integer)

``````
``````

Out[10]:

5-element Array{Any,1}:
BigInt
Bool
Char
Signed
Unsigned

``````
``````

In [13]:

type MyComplex<:Complex
im::Number
real::Number
name::String
end

``````
``````

invalid subtyping in definition of MyComplex

``````
``````

In [16]:

isa(1, Number)

``````
``````

Out[16]:

true

``````
``````

In [17]:

type Foo
bar
baz::Int
qux::Float64
end

``````
``````

In [18]:

foo = Foo("ss", 1, 3.5)

``````
``````

Out[18]:

Foo("ss",1,3.5)

``````
``````

In [20]:

typeof(foo)

``````
``````

Out[20]:

Foo (constructor with 2 methods)

``````
``````

In [26]:

repr(foo)

``````
``````

Out[26]:

"Foo(\"ss\",1,3.5)"

``````
``````

In [27]:

typeof(Top)

``````
``````

Out[27]:

UnionType

``````
``````

In [32]:

type Point{T}
x::T
y::T
end

``````
``````

In [33]:

Point{Float64}(1.0,2) # 2 will be converted to 2.0

``````
``````

Out[33]:

Point{Float64}(1.0,2.0)

``````
``````

In [34]:

Point(1.0, 2) # This will fail since neither the arguments does not provide sufficient information of
# this construction of Point type nor the T parameter has been explicitly declared

``````
``````

`Point{T}` has no method matching Point{T}(::Float64, ::Int64)

``````
``````

In [39]:

?is

``````
``````

Base.is(x, y) -> Bool
===(x, y) -> Bool
≡(x, y) -> Bool

Determine whether "x" and "y" are identical, in the sense that
no program could distinguish them. Compares mutable objects by
address in memory, and compares immutable objects (such as numbers)
by contents at the bit level. This function is sometimes called
"egal".

``````
``````

In [40]:

?isa

``````
``````

Base.isa(x, type) -> Bool

Determine whether "x" is of the given "type".

``````
``````

In [42]:

?listen

``````
``````

this listens on localhost only. To listen on all interfaces pass,
"IPv4(0)" or "IPv6(0)" as appropriate.

Base.listen(path) -> PipeServer

Listens on/Creates a Named Pipe/Domain Socket

``````
``````

In [43]:

p = listen("/Users/DboyLiao/pipe")

``````
``````

Out[43]:

PipeServer(active)

``````
``````

In [44]:

conn = accept(p)

``````
``````

interrupt

``````
``````

In [50]:

if is(Int, Int64)
typealias UInt Uint64
else
typealias UInt Uint32
end

``````
``````

Out[50]:

Uint64

``````
``````

In [51]:

UInt

``````
``````

Out[51]:

Uint64

``````
``````

In [47]:

subtypes(Integer)

``````
``````

Out[47]:

5-element Array{Any,1}:
BigInt
Bool
Char
Signed
Unsigned

``````
``````

In [48]:

Unsigned("2")

``````
``````

type cannot be constructed

``````
``````

In [49]:

subtypes(Unsigned)

``````
``````

Out[49]:

5-element Array{Any,1}:
Uint128
Uint16
Uint32
Uint64
Uint8

``````
``````

In [52]:

typealias Vector{T} Array{T, 1}

``````
``````

Out[52]:

Array{T,1}

``````
``````

In [58]:

Vector{Int} <: Vector{Float64}

``````
``````

Out[58]:

false

``````
``````

In [59]:

isa(None, Union())

``````
``````

Out[59]:

false

``````
``````

In [60]:

Union() == None

``````
``````

Out[60]:

true

``````
``````

In [63]:

function firstlast(b::Bool)
return b ? "First" : "Last"
end

println(firstlast(true))

``````
``````

First

``````
``````

In [1]:

x1 = Nullable{Int}()

``````
``````

Nullable not defined

``````
``````

In [4]:

function f(x, y)
println("Dboy Liao")
end

``````
``````

Out[4]:

f (generic function with 1 method)

``````
``````

In [5]:

methods(f)

``````
``````

Out[5]:

1 method for generic function f: f(x,y) at In[4]:2

``````
``````

In [6]:

function f(x::Float64, y::Float64)
x + y
end

``````
``````

Out[6]:

f (generic function with 2 methods)

``````
``````

In [7]:

methods(f)

``````
``````

Out[7]:

2 methods for generic function f: f(x::Float64,y::Float64) at In[6]:2 f(x,y) at In[4]:2

``````
``````

In [9]:

function js_closure()
state = 1
state += 1
state
end
end

``````
``````

Out[9]:

js_closure (generic function with 1 method)

``````
``````

In [10]:

t = js_closure()

``````
``````

Out[10]:

add_one (generic function with 1 method)

``````
``````

In [12]:

t()

``````
``````

Out[12]:

3

``````
``````

In [13]:

t2 = js_closure()

``````
``````

Out[13]:

add_one (generic function with 1 method)

``````
``````

In [14]:

t2()

``````
``````

Out[14]:

2

``````
``````

In [15]:

Float64 <: Number

``````
``````

Out[15]:

true

``````
``````

In [9]:

type Incomplete
xx
Incomplete() = new()
end

``````
``````

In [10]:

z = Incomplete()

``````
``````

Out[10]:

Incomplete(#undef)

``````
``````

In [11]:

z.xx = 3

``````
``````

Out[11]:

3

``````
``````

In [12]:

z.xx

``````
``````

Out[12]:

3

``````
``````

In [1]:

type Node{T<:Number}
value::T
next::Node{T}
Node{T}(value::T) = new(value)
end

``````
``````

In [2]:

n = Node{Int64}(4)

``````
``````

Out[2]:

Node{Int64}(4,#undef)

``````
``````

In [4]:

n.next = Node{Int64}(3)

``````
``````

Out[4]:

Node{Int64}(3,#undef)

``````
``````

In [5]:

n.next

``````
``````

Out[5]:

Node{Int64}(3,#undef)

``````
``````

In [6]:

type HasPlain
n::Int
HasPlain() = new()
end

``````
``````

In [8]:

a = HasPlain()

``````
``````

Out[8]:

HasPlain(4494843176)

``````
``````

In [9]:

a.n = 3

``````
``````

Out[9]:

3

``````
``````

In [10]:

type Point{T<:Real}
x::T
y::T

Point(x,y) = new(x,y)
end

``````
``````

In [12]:

Point{T<:Real}(x::T, y::T) = Point{T}(x,y)

``````
``````

Out[12]:

Point{T<:Real} (constructor with 1 method)

``````
``````

In [13]:

Point(3, 3)

``````
``````

Out[13]:

Point{Int64}(3,3)

``````
``````

In [15]:

x = 12

``````
``````

Out[15]:

12

``````
``````

In [19]:

y = convert(Uint8, x);

``````
``````

In [18]:

typeof(x)

``````
``````

Out[18]:

Int64

``````
``````

In [21]:

print(y)

``````
``````

12

``````
``````

In [23]:

@which y + x

``````
``````

Out[23]:

+(x::Number,y::Number) at promotion.jl:158

``````
``````

In [27]:

ct(::Type{Bool}, x::Real) = (x!=0)

``````
``````

Out[27]:

ct (generic function with 1 method)

``````
``````

In [28]:

ct(Bool, 0.5)

``````
``````

Out[28]:

true

``````
``````

In [29]:

typeof(Type)

``````
``````

Out[29]:

DataType

``````
``````

In [34]:

parse("2")

``````
``````

Out[34]:

2

``````
``````

In [32]:

?parse

``````
``````

Base.parse(str, start; greedy=true, raise=true)

Parse the expression string and return an expression (which could
later be passed to eval for execution). Start is the index of the
first character to start parsing. If "greedy" is true (default),
"parse" will try to consume as much input as it can; otherwise,
it will stop as soon as it has parsed a valid expression.
Incomplete but otherwise syntactically valid expressions will
return "Expr(:incomplete, "(error message)")". If "raise" is
true (default), syntax errors other than incomplete expressions
will raise an error. If "raise" is false, "parse" will return
an expression that will raise an error upon evaluation.

Base.parse(str; raise=true)

Parse the whole string greedily, returning a single expression.  An
error is thrown if there are additional characters after the first
expression. If "raise" is true (default), syntax errors will
raise an error; otherwise, "parse" will return an expression that
will raise an error upon evaluation.

``````
``````

In [36]:

super(Type{Bool})

``````
``````

Out[36]:

Any

``````
``````

In [38]:

ct2(::Bool, x::Number) = (x!=0)

``````
``````

Out[38]:

ct2 (generic function with 2 methods)

``````
``````

In [42]:

NaN

``````
``````

Out[42]:

NaN

``````
``````

In [43]:

x = NaN

``````
``````

Out[43]:

NaN

``````
``````

In [44]:

0//0

``````
``````

invalid rational: 0//0

in Rational at rational.jl:6
in // at rational.jl:15

``````
``````

In [45]:

?show

``````
``````

Base.show(x)

Write an informative text representation of a value to the current
output stream. New types should overload "show(io, x)" where the
first argument is a stream. The representation used by "show"
generally includes Julia-specific formatting and type information.

``````
``````

In [46]:

convert(Rational, 1.2)

``````
``````

Out[46]:

6//5

``````
``````

In [47]:

round(1.2)

``````
``````

Out[47]:

1.0

``````
``````

In [50]:

round(1/0.2)

``````
``````

Out[50]:

5.0

``````
``````

In [52]:

div(3, 2)

``````
``````

Out[52]:

1

``````
``````

In [53]:

?promote_rule

``````
``````

Base.promote_rule(type1, type2)

Specifies what type should be used by "promote" when given values
of types "type1" and "type2". This function should not be
called directly, but should have definitions added to it for new
types as appropriate.

``````
``````

In [55]:

t = Colon()

``````
``````

Out[55]:

Colon()

``````
``````

In [1]:

type MyType <: Number
xx::Int
yy::Int
end

``````
``````

In [2]:

isa(TypeConstructor, MyType)

``````
``````

Out[2]:

false

``````
``````

In [3]:

MyType(3, 4)

``````
``````

Out[3]:

MyType(3,4)

``````
``````

In [9]:

methods(typejoin)

``````
``````

Out[9]:

4 methods for generic function typejoin: typejoin() at promotion.jl:3 typejoin(t::ANY) at promotion.jl:4 typejoin(a::ANY,b::ANY) at promotion.jl:7 typejoin(t::ANY,ts...) at promotion.jl:5

``````
``````

In [10]:

``````
``````

INFO: Cloning cache of ArrayViews from git://github.com/JuliaLang/ArrayViews.jl.git
INFO: Cloning cache of Calculus from git://github.com/johnmyleswhite/Calculus.jl.git
INFO: Cloning cache of Codecs from git://github.com/dcjones/Codecs.jl.git
INFO: Cloning cache of Color from git://github.com/JuliaLang/Color.jl.git
INFO: Cloning cache of Compose from git://github.com/dcjones/Compose.jl.git
INFO: Cloning cache of Contour from git://github.com/tlycken/Contour.jl.git
INFO: Cloning cache of DataArrays from git://github.com/JuliaStats/DataArrays.jl.git
INFO: Cloning cache of DataFrames from git://github.com/JuliaStats/DataFrames.jl.git
INFO: Cloning cache of DataStructures from git://github.com/JuliaLang/DataStructures.jl.git
INFO: Cloning cache of Dates from git://github.com/quinnj/Dates.jl.git
INFO: Cloning cache of Distances from git://github.com/JuliaStats/Distances.jl.git
INFO: Cloning cache of Distributions from git://github.com/JuliaStats/Distributions.jl.git
INFO: Cloning cache of Docile from git://github.com/MichaelHatherly/Docile.jl.git
INFO: Cloning cache of DualNumbers from git://github.com/JuliaDiff/DualNumbers.jl.git
INFO: Cloning cache of FixedPointNumbers from git://github.com/JeffBezanson/FixedPointNumbers.jl.git
INFO: Cloning cache of GZip from git://github.com/JuliaLang/GZip.jl.git
INFO: Cloning cache of Graphics from git://github.com/JuliaLang/Graphics.jl.git
INFO: Cloning cache of Grid from git://github.com/timholy/Grid.jl.git
INFO: Cloning cache of Hexagons from git://github.com/dcjones/Hexagons.jl.git
INFO: Cloning cache of ImmutableArrays from git://github.com/twadleigh/ImmutableArrays.jl.git
INFO: Cloning cache of Iterators from git://github.com/JuliaLang/Iterators.jl.git
INFO: Cloning cache of KernelDensity from git://github.com/JuliaStats/KernelDensity.jl.git
INFO: Cloning cache of Loess from git://github.com/dcjones/Loess.jl.git
INFO: Cloning cache of NaNMath from git://github.com/mlubin/NaNMath.jl.git
INFO: Cloning cache of Optim from git://github.com/JuliaOpt/Optim.jl.git
INFO: Cloning cache of PDMats from git://github.com/JuliaStats/PDMats.jl.git
INFO: Cloning cache of Reexport from git://github.com/simonster/Reexport.jl.git
INFO: Cloning cache of Showoff from git://github.com/dcjones/Showoff.jl.git
INFO: Cloning cache of SortingAlgorithms from git://github.com/JuliaLang/SortingAlgorithms.jl.git
INFO: Cloning cache of StatsBase from git://github.com/JuliaStats/StatsBase.jl.git
INFO: Installing ArrayViews v0.4.10
INFO: Installing Calculus v0.1.6
INFO: Installing Codecs v0.1.3
INFO: Installing Color v0.4.4
INFO: Installing Compose v0.3.11
INFO: Installing Contour v0.0.6
INFO: Installing DataArrays v0.2.12
INFO: Installing DataFrames v0.6.2
INFO: Installing DataStructures v0.3.6
INFO: Installing Dates v0.3.2
INFO: Installing Distances v0.2.0
INFO: Installing Distributions v0.6.6
INFO: Installing Docile v0.4.8
INFO: Installing DualNumbers v0.1.2
INFO: Installing FixedPointNumbers v0.0.6
INFO: Installing GZip v0.2.14
INFO: Installing Graphics v0.1.0
INFO: Installing Grid v0.3.7
INFO: Installing Hexagons v0.0.2
INFO: Installing ImmutableArrays v0.0.6
INFO: Installing Iterators v0.1.7
INFO: Installing KernelDensity v0.1.0
INFO: Installing Loess v0.0.3
INFO: Installing NaNMath v0.0.2
INFO: Installing Optim v0.4.0
INFO: Installing PDMats v0.3.1
INFO: Installing Reexport v0.0.2
INFO: Installing Showoff v0.0.3
INFO: Installing SortingAlgorithms v0.0.4
INFO: Installing StatsBase v0.6.13
INFO: Package database updated

``````
``````

In [13]:

using MyModule

``````
``````

In [15]:

x()

``````
``````

Out[15]:

"x"

``````
``````

In [16]:

MyModule.p()

``````
``````

Out[16]:

"p"

``````
``````

In [17]:

import MyModule

``````
``````

In [18]:

MyModule.x

``````
``````

Out[18]:

x (generic function with 1 method)

``````
``````

In [19]:

``````
``````

Add a requirement entry for "pkg" to "Pkg.dir("REQUIRE")" and
call "Pkg.resolve()". If "vers" are given, they must be
"VersionNumber" objects and they specify acceptable version
intervals for "pkg".

``````
``````

In [21]:

Pkg.dir("REQUIRE")

``````
``````

Out[21]:

"/Users/DboyLiao/.julia/v0.3/REQUIRE"

``````
``````

In [22]:

``````
``````

Out[22]:

2-element Array{Union(ASCIIString,UTF8String),1}:
"/usr/local/Cellar/julia/0.3.6_1/local/share/julia/site/v0.3"
"/usr/local/Cellar/julia/0.3.6_1/share/julia/site/v0.3"

``````
``````

In [26]:

function gen_gen()
state = 0
function gen()
state += 1
state
end
return gen
end

``````
``````

Out[26]:

gen_gen (generic function with 1 method)

``````
``````

In [27]:

g = gen_gen()

``````
``````

Out[27]:

gen (generic function with 1 method)

``````
``````

In [31]:

import Main

``````
``````

In [36]:

Main.dirname("/User/DboyLiao")

``````
``````

Out[36]:

"/User"

``````
``````

In [37]:

homedir()

``````
``````

Out[37]:

"/Users/DboyLiao"

``````
``````

In [38]:

f(x, y) = x + y
Base.+ = f

``````
``````

syntax: unexpected "="

``````
``````

In [39]:

prog = "1+1"

``````
``````

Out[39]:

"1+1"

``````
``````

In [40]:

ex1 = parse(prog)

``````
``````

Out[40]:

:(1 + 1)

``````
``````

In [41]:

typeof(ex1)

``````
``````

Out[41]:

Expr

``````
``````

In [45]:

typeof(ex1.args[1])

``````
``````

Out[45]:

Symbol

``````
``````

In [46]:

``````
``````

Out[46]:

:call

``````
``````

In [47]:

ex3 = parse("(4 + 4) / 2")

``````
``````

Out[47]:

:((4 + 4) / 2)

``````
``````

In [48]:

``````
``````

Out[48]:

:call

``````
``````

In [49]:

ex3.args

``````
``````

Out[49]:

3-element Array{Any,1}:
:/
:(4 + 4)
2

``````
``````

In [50]:

ex3.typ

``````
``````

Out[50]:

Any

``````
``````

In [51]:

ex = Expr(:call, :+, :a, :b)

``````
``````

Out[51]:

:(a + b)

``````
``````

In [54]:

a = 1; b = 1;

``````
``````

In [55]:

eval(ex)

``````
``````

Out[55]:

2

``````
``````

In [61]:

@time 1 + 1

``````
``````

elapsed time: 5.082e-6 seconds (80 bytes allocated)

Out[61]:

2

``````
``````

In [63]:

@time 1+1

``````
``````

elapsed time: 3.834e-6 seconds (80 bytes allocated)

Out[63]:

2

``````
``````

In [64]:

Array(Int64, 0)

``````
``````

Out[64]:

0-element Array{Int64,1}

``````
``````

In [66]:

"" * "3" * "__"

``````
``````

Out[66]:

"3__"

``````
``````

In [67]:

ex = :(println(sin(3)))

``````
``````

Out[67]:

:(println(sin(3)))

``````
``````

In [71]:

quote
\$ex
end

``````
``````

Out[71]:

quote  # In[71], line 2:
println(sin(3))
end

``````
``````

In [72]:

import Base

``````
``````

In [74]:

methods(Base.gc_bytes)

``````
``````

Out[74]:

1 method for generic function gc_bytes: gc_bytes() at util.jl:13

``````
``````

In [75]:

Base.gc_bytes()

``````
``````

Out[75]:

1385489984

``````
``````

In [1]:

macro until(cond, ex)
quote
while !(\$cond)
\$ex
end
end
end

``````
``````

In [7]:

x = 0
@time @until x>3 (println(x); x +=1;)

``````
``````

0
1
2
3
elapsed time: 0.001873346 seconds (15624 bytes allocated)

``````
``````

In [9]:

macroexpand(:(@time @until x<3 (println(x); x +=1;)))

``````
``````

Out[9]:

quote  # util.jl, line 53:
local #408#b0 = Base.gc_bytes() # line 54:
local #409#t0 = Base.time_ns() # line 55:
local #410#g0 = Base.gc_time_ns() # line 56:
local #411#val = begin  # In[1], line 3:
while !(x < 3) # line 4:
begin
println(x)
begin
x += 1
end
end
end
end # line 57:
local #412#g1 = Base.gc_time_ns() # line 58:
local #413#t1 = Base.time_ns() # line 59:
local #414#b1 = Base.gc_bytes() # line 60:
Base.time_print(Base.-(#413#t1,#409#t0),Base.-(#414#b1,#408#b0),Base.-(#412#g1,#410#g0)) # line 61:
#411#val
end

``````
``````

In [6]:

?esc

``````
``````

Base.esc(e::ANY)

Only valid in the context of an Expr returned from a macro.
Prevents the macro hygiene pass from turning embedded variables
into gensym variables. See the *Non-Standard String Literals*
section of the Metaprogramming chapter of the manual for more
details and examples.

``````
``````

In [11]:

Pkg.status()

``````
``````

2 required packages:
- IJulia                        0.2.1
- ArrayViews                    0.4.10
- BinDeps                       0.3.9
- Calculus                      0.1.6
- Codecs                        0.1.3
- Color                         0.4.4
- Compat                        0.3.6
- Compose                       0.3.11
- Contour                       0.0.6
- DataArrays                    0.2.12
- DataFrames                    0.6.2
- DataStructures                0.3.6
- Dates                         0.3.2
- Distances                     0.2.0
- Distributions                 0.6.6
- Docile                        0.4.8
- DualNumbers                   0.1.2
- FixedPointNumbers             0.0.6
- GZip                          0.2.14
- Graphics                      0.1.0
- Grid                          0.3.7
- Hexagons                      0.0.2
- Homebrew                      0.1.14
- ImmutableArrays               0.0.6
- Iterators                     0.1.7
- JSON                          0.4.2
- KernelDensity                 0.1.0
- Loess                         0.0.3
- NaNMath                       0.0.2
- Nettle                        0.1.8
- Optim                         0.4.0
- PDMats                        0.3.1
- REPLCompletions               0.0.3
- Reexport                      0.0.2
- SHA                           0.0.4
- Showoff                       0.0.3
- SortingAlgorithms             0.0.4
- StatsBase                     0.6.13
- URIParser                     0.0.5
- ZMQ                           0.1.17

``````
``````

In [ ]:

``````