In [ ]:
Pkg.status()

In [ ]:
Pkg.add("Sigma")

In [ ]:
Pkg.checkout("Sigma") # Update to latest version

In [ ]:
using Sigma

In [ ]:
## Very simple reasoning
## =====================
person_is_man = flip(0.7)
person_is_mortal = ifelse(person_is_man,
                          true,
                          flip(0.777))
prob(person_is_mortal)

In [ ]:
prob(person_is_man, person_is_mortal)

In [ ]:
prob(person_is_mortal, person_is_man)

In [ ]:
## Paramter Estimation
## ===================
λ = uniform(0,2)
x = mvexponential(λ, 3)
observations = x == [0.083, 0.55, 2.37]
λsamples = rand(λ, observations, 1000; precision = 0.001)

In [ ]:
plot(x=λsamples, Geom.histogram)

In [ ]:
using PyPlot

In [ ]:
## Sample from implicit equations
## ==============================
X = uniform(-2,2)
Y = uniform(-2,2)
Z = uniform(-2,2)

# Constants control shape of elipsoid
a = 2
b = 1
c = 0.5
ellip_cond = ((X*X)/(a*a) + (Y*Y)/(b*b) + (Z*Z)/(c*c)) ==  1.0
xyz = RandArray([X,Y,Z])
samples_ellipsoid = rand(xyz, ellip_cond, 1000)

In [ ]:
scatter3D([s[1] for s in samples_ellipsoid], [s[2] for s in samples_ellipsoid], [s[3] for s in samples_ellipsoid])

In [ ]:
## Matrix Factorization
## ====================
matrix_to_factorize = [ 0.266358   0.136936   0.202717   0.332619
                        0.0819769  0.0283733  0.0352097  0.088259
                        0.632486   0.364566   0.55913    0.8302  
                        1.008      0.468944   0.669905   1.20826 ]

# Factors have prior probabilities
# Create random array size 5x2, all uniformly distributed between 0 and 1
W = mvuniform(0.0,1.0,4,2)
H = mvuniform(0.0,1.0,2,4)

W_sample, H_sample = rand((W,H), W*H == matrix_to_factorize; precision = 0.01)
W_sample * H_sample