gaussian(mean,sdev,x)=1./sqrt(2*pi*sdev*sdev)*exp(-(x-mean)**2/(2*sdev*sdev));
exponential(mean,x)=1./mean*exp(-x/mean);
gamma_pdf(a,b,x)=1./(gamma(a)*b**a)*x**(a-1)*exp(-x/b);
lognormal(mean,sdev,x)=1./(x*sqrt(2*pi*sdev*sdev))*exp(-(log(x)-mean)**2/(2*sdev*sdev));
chi_squared(order,x)=1./(2*gamma(order/2.))*(x/2)**(order/2.-1)*exp(-x/2);
fisher_f(m,n,x)=gamma((m+n)/2.)/gamma(m/2.)/gamma(n/2.)*m**(m/2.)*n**(n/2.)*x**(m/2.-1)*(n+m*x)**(-m/2.-n/2.);
student_t(n,x)=gamma((n+1)/2.)/(sqrt(pi*n)*gamma(n/2.))*(1+x*x/n)**(-(n+1)/2.);
cauchy(median,half,x)=1./(half*pi*(1+((x-median)/half)**2));
extreme_value(a,b,x)=1./b*exp(-(x-a)/b)*exp(-exp(-(x-a)/b));
weibull(b,a,x)=1.*b/(a**b)*x**(b-1)*exp(-(x/a)**b);
gaussian_tail(mean,sdev,a,x)=1./((1./2*erfc(a/sqrt(2*sdev*sdev)))*sqrt(2*pi*sdev*sdev))*exp(-(x-mean)**2/(2*sdev*sdev));
laplace(a,x)=1./(2*a)*exp(-abs(x/a));
logistic_pdf(a,x)=exp(-x/a)/a/(1+exp(-x/a))**2;
exppow(a,b,x)=1./(2*a*gamma(1+1./b))*exp(-abs(x/a)**b);
beta_pdf(a,b,x)=gamma(a+b)/(gamma(a)*gamma(b))*x**(a-1)*(1-x)**(b-1);
rayleigh(sigma,x)=x/sigma**2*exp(-x*x/(2*sigma**2));
rayleigh_tail(sigma,lb,x)=x/sigma**2*exp((lb**x-x*x)/(2*sigma**2));
pareto(a,b,x)=(1.*a/b)/(x/b)**(a+1);
gumbel_1(a,b,x)=a*b*exp(-(b*exp(-a*x)+a*x));
gumbel_2(a,b,x)=a*b*x**(-a-1)*exp(-b*x**(-a));
erlang(a,n,x)=gamma_pdf(n,a,x);

#Z(x)=floor(x)
round(x)=(x - floor(x) < .5) ? floor(x) : ceil(x);
Z(x)=round(x)
poisson(mean,x)=mean**x/Z(x)!*exp(-mean);
binomial(n,p,x)=n!/Z(x)!/(n-Z(x))!*p**Z(x)*(1-p)**(n-Z(x));
negative_binomial(n,p,x)=gamma(n+Z(x))/gamma(Z(x)+1)/gamma(n)*p**n*(1-p)**Z(x);
bernoulli(p,x)=Z(x)<1?(1-p):p;
geometric0(p,x)=p*(1-p)**(Z(x)-1);
geometric(p,x)=p*(1-p)**(Z(x));
hypergeometric_C(a,b)=a!/(b!*(a-b)!);
hypergeometric(n1,n2,t,x)=hypergeometric_C(n1,Z(x))*hypergeometric_C(n2,t-Z(x))/hypergeometric_C(n1+n2,t);
pascal(n,p,x)=(n+Z(x)-1)!/Z(x)!/(n-1)!*p**n*(1-p)**Z(x);
logarithmic(p,x)=-1/log(1-p)*p**Z(x)/Z(x);
