package scientific.matplot

import std.math.*
import std.unittest.*
import std.unittest.testmacro.*

import scientific.numbers.*
import scientific.linear.*
import scientific.special.*
import scientific.stats.random.*
import scientific.stats.normal.*
import scientific.stats.continuous.*

public func besselJPlot() {
    fplot({x => besselJ(x, 0)}, 0.0, 10.0).display_name("n = 0")
    hold(true)
    fplot({x => besselJ(x, 1)}, 0.0, 10.0).display_name("n = 1")
    fplot({x => besselJ(x, 2)}, 0.0, 10.0).display_name("n = 2")
    fplot({x => besselJ(x, 3)}, 0.0, 10.0).display_name("n = 3")
    hold(false)
    title("Bessel function of the first kind")
    xlabel("x")
    ylabel("J_n(x)")
    legend(true)
    save("./tests/imgs/special/besselj.png", "png")
    clear()
}

public func alphaPlot() {
    fplot({x => alphaPDF(x, 1.0)}, 0.01, 3.0).display_name("a = 1.0")
    hold(true)
    fplot({x => alphaPDF(x, 2.0)}, 0.01, 3.0).display_name("a = 2.0")
    fplot({x => alphaPDF(x, 3.0)}, 0.01, 3.0).display_name("a = 3.0")
    hold(false)
    title("Alpha PDF plot")
    xlabel("x")
    ylabel("f(x,a)")
    legend(true)
    save("./tests/imgs/stats/continuous/alpha/alphapdf.png", "png")
    clear()

    fplot({x => alphaCDF(x, 1.0)}, 0.01, 3.0).display_name("a = 1.0")
    hold(true)
    fplot({x => alphaCDF(x, 2.0)}, 0.01, 3.0).display_name("a = 2.0")
    fplot({x => alphaCDF(x, 3.0)}, 0.01, 3.0).display_name("a = 3.0")
    hold(false)
    title("Alpha CDF plot")
    xlabel("x")
    ylabel("F(x,a)")
    legend(true)
    save("./tests/imgs/stats/continuous/alpha/alphacdf.png", "png")
    clear()
}

public func anglitPlot() {
    fplot({x => anglitPDF(x)}, -Float64.getPI()/4.0, Float64.getPI()/4.0)
    title("Anglit PDF plot")
    xlabel("x")
    ylabel("f(x)")
    save("./tests/imgs/stats/continuous/anglit/anglitpdf.png", "png")
    clear()

    fplot({x => anglitCDF(x)}, -Float64.getPI()/4.0, Float64.getPI()/4.0)
    title("Anglit CDF plot")
    xlabel("x")
    ylabel("F(x)")
    save("./tests/imgs/stats/continuous/anglit/anglitcdf.png", "png")
    clear()
}

public func arcsinePlot() {
    fplot({x => arcsinePDF(x)}, 0.01, 0.99)
    title("Arcsine PDF plot")
    xlabel("x")
    ylabel("f(x)")
    save("./tests/imgs/stats/continuous/arcsine/arcsinepdf.png", "png")
    clear()

    fplot({x => arcsineCDF(x)}, 0.01, 0.99)
    title("Arcsine CDF plot")
    xlabel("x")
    ylabel("F(x)")
    save("./tests/imgs/stats/continuous/arcsine/arcsinecdf.png", "png")
    clear()
}

public func argusPlot() {
    fplot({x => argusPDF(x, 1.0)}, 0.01, 0.99).display_name("k = 1.0")
    hold(true)
    fplot({x => argusPDF(x, 2.0)}, 0.01, 0.99).display_name("k = 2.0")
    fplot({x => argusPDF(x, 3.0)}, 0.01, 0.99).display_name("k = 3.0")
    hold(false)
    title("Argus PDF plot")
    xlabel("x")
    ylabel("f(x,k)")
    legend(true)
    save("./tests/imgs/stats/continuous/argus/arguspdf.png", "png")
    clear()

    fplot({x => argusCDF(x, 1.0)}, 0.01, 0.99).display_name("k = 1.0")
    hold(true)
    fplot({x => argusCDF(x, 2.0)}, 0.01, 0.99).display_name("k = 2.0")
    fplot({x => argusCDF(x, 3.0)}, 0.01, 0.99).display_name("k = 3.0")
    hold(false)
    title("Argus CDF plot")
    xlabel("x")
    ylabel("F(x,k)")
    legend(true)
    save("./tests/imgs/stats/continuous/argus/arguscdf.png", "png")
    clear()
}

public func betaPlot() {
    fplot({x => betaPDF(x, 0.5, 0.5)}, 0.01, 0.99).display_name("a = 0.5, b = 0.5")
    hold(true)
    fplot({x => betaPDF(x, 1.0, 1.0)}, 0.01, 0.99).display_name("a = 1.0, b = 1.0")
    fplot({x => betaPDF(x, 5.0, 5.0)}, 0.01, 0.99).display_name("a = 5.0, b = 5.0")
    fplot({x => betaPDF(x, 3.0, 7.0)}, 0.01, 0.99).display_name("a = 3.0, b = 7.0")
    fplot({x => betaPDF(x, 7.0, 3.0)}, 0.01, 0.99).display_name("a = 7.0, b = 3.0")
    hold(false)
    title("Beta PDF plot")
    xlabel("x")
    ylabel("f(x,a,b)")
    legend(true)
    save("./tests/imgs/stats/continuous/beta/betapdf.png", "png")
    clear()
}

public func betaprimePlot() {
    fplot({x => betaprimePDF(x, 1.0, 1.0)}, 0.01, 5.0).display_name("a = 1.0, b = 1.0")
    hold(true)
    fplot({x => betaprimePDF(x, 2.0, 2.0)}, 0.01, 5.0).display_name("a = 2.0, b = 2.0")
    fplot({x => betaprimePDF(x, 5.0, 3.0)}, 0.01, 5.0).display_name("a = 5.0, b = 3.0")
    hold(false)
    title("Beta prime PDF plot")
    xlabel("x")
    ylabel("f(x,a,b)")
    legend(true)
    save("./tests/imgs/stats/continuous/betaprime/betaprimepdf.png", "png")
    clear()
}

public func bradfordPlot() {
    fplot({x => bradfordPDF(x, 1.0)}, 0.01, 0.99).display_name("c = 1.0")
    hold(true)
    fplot({x => bradfordPDF(x, 2.0)}, 0.01, 0.99).display_name("c = 2.0")
    fplot({x => bradfordPDF(x, 3.0)}, 0.01, 0.99).display_name("c = 3.0")
    hold(false)
    title("Bradford PDF plot")
    xlabel("x")
    ylabel("f(x,c)")
    legend(true)
    save("./tests/imgs/stats/continuous/bradford/bradfordpdf.png", "png")
    clear()

    fplot({x => bradfordCDF(x, 1.0)}, 0.01, 0.99).display_name("c = 1.0")
    hold(true)
    fplot({x => bradfordCDF(x, 2.0)}, 0.01, 0.99).display_name("c = 2.0")
    fplot({x => bradfordCDF(x, 3.0)}, 0.01, 0.99).display_name("c = 3.0")
    hold(false)
    title("Bradford CDF plot")
    xlabel("x")
    ylabel("F(x,c)")
    legend(true)
    save("./tests/imgs/stats/continuous/bradford/bradfordcdf.png", "png")
    clear()
}

public func burrPlot() {
    fplot({x => burrPDF(x, 1.0, 1.0)}, 0.01, 5.0).display_name("c = 1.0, d = 1.0")
    hold(true)
    fplot({x => burrPDF(x, 2.0, 2.0)}, 0.01, 5.0).display_name("c = 2.0, d = 2.0")
    fplot({x => burrPDF(x, 5.0, 3.0)}, 0.01, 5.0).display_name("c = 5.0, d = 3.0")
    hold(false)
    title("Burr (Type III) PDF plot")
    xlabel("x")
    ylabel("f(x,c,d)")
    legend(true)
    save("./tests/imgs/stats/continuous/burr/burrpdf.png", "png")
    clear()

    fplot({x => burrCDF(x, 1.0, 1.0)}, 0.01, 5.0).display_name("c = 1.0, d = 1.0")
    hold(true)
    fplot({x => burrCDF(x, 2.0, 2.0)}, 0.01, 5.0).display_name("c = 2.0, d = 2.0")
    fplot({x => burrCDF(x, 5.0, 3.0)}, 0.01, 5.0).display_name("c = 5.0, d = 3.0")
    hold(false)
    title("Burr (Type III) CDF plot")
    xlabel("x")
    ylabel("F(x,c,d)")
    legend(true)
    save("./tests/imgs/stats/continuous/burr/burrcdf.png", "png")
    clear()
}

public func burr12Plot() {
    fplot({x => burr12PDF(x, 1.0, 1.0)}, 0.01, 5.0).display_name("c = 1.0, d = 1.0")
    hold(true)
    fplot({x => burr12PDF(x, 2.0, 2.0)}, 0.01, 5.0).display_name("c = 2.0, d = 2.0")
    fplot({x => burr12PDF(x, 5.0, 3.0)}, 0.01, 5.0).display_name("c = 5.0, d = 3.0")
    hold(false)
    title("Burr (Type XII) PDF plot")
    xlabel("x")
    ylabel("f(x,c,d)")
    legend(true)
    save("./tests/imgs/stats/continuous/burr12/burr12pdf.png", "png")
    clear()

    fplot({x => burr12CDF(x, 1.0, 1.0)}, 0.01, 5.0).display_name("c = 1.0, d = 1.0")
    hold(true)
    fplot({x => burr12CDF(x, 2.0, 2.0)}, 0.01, 5.0).display_name("c = 2.0, d = 2.0")
    fplot({x => burr12CDF(x, 5.0, 3.0)}, 0.01, 5.0).display_name("c = 5.0, d = 3.0")
    hold(false)
    title("Burr (Type XII) CDF plot")
    xlabel("x")
    ylabel("F(x,c,d)")
    legend(true)
    save("./tests/imgs/stats/continuous/burr12/burr12cdf.png", "png")
    clear()
}

public func cauchyPlot() {
    fplot({x => cauchyPDF(x, 0.0, 1.0)}, -5.0, 5.0)
    title("Cauchy PDF plot")
    xlabel("x")
    ylabel("f(x)")
    save("./tests/imgs/stats/continuous/cauchy/cauchypdf.png", "png")
    clear()

    fplot({x => cauchyCDF(x, 0.0, 1.0)}, -5.0, 5.0)
    title("Cauchy CDF plot")
    xlabel("x")
    ylabel("F(x)")
    save("./tests/imgs/stats/continuous/cauchy/cauchycdf.png", "png")
    clear()
}

public func chiPlot() {
    fplot({x => chiPDF(x, 1.0)}, 0.01, 5.0).display_name("k = 1")
    hold(true)
    fplot({x => chiPDF(x, 2.0)}, 0.01, 5.0).display_name("k = 2")
    fplot({x => chiPDF(x, 5.0)}, 0.01, 5.0).display_name("k = 5")
    hold(false)
    title("Chi PDF plot")
    xlabel("x")
    ylabel("f(x,k)")
    save("./tests/imgs/stats/continuous/chi/chipdf.png", "png")
    clear()
}

public func chisqPlot() {
    fplot({x => chisqPDF(x, 2.0)}, 0.01, 10.0).display_name("k = 2")
    hold(true)
    fplot({x => chisqPDF(x, 5.0)}, 0.01, 10.0).display_name("k = 5")
    fplot({x => chisqPDF(x, 10.0)}, 0.01, 10.0).display_name("k = 10")
    hold(false)
    title("Chi-square PDF plot")
    xlabel("x")
    ylabel("f(x,k)")
    save("./tests/imgs/stats/continuous/chisq/chisqpdf.png", "png")
    clear()
}

public func cosinePlot() {
    fplot({x => cosinePDF(x)}, -Float64.getPI(), Float64.getPI())
    title("Cosine PDF plot")
    xlabel("x")
    ylabel("f(x)")
    save("./tests/imgs/stats/continuous/cosine/cosinepdf.png", "png")
    clear()
}

public func crystalballPlot() {
    fplot({x => crystalballPDF(x, 1.0, 1.5)}, -5.0, 5.0).display_name("b = 1.0, m = 1.5")
    hold(true)
    fplot({x => crystalballPDF(x, 2.0, 3.0)}, -5.0, 5.0).display_name("b = 2.0, m = 3.0")
    hold(false)
    title("Crystalball PDF plot")
    xlabel("x")
    ylabel("f(x,b,m)")
    legend(true)
    save("./tests/imgs/stats/continuous/crystalball/crystalballpdf.png", "png")
    clear()
}

public func dgammaPlot() {
    fplot({x => dgammaPDF(x, 1.0)}, -10.0, 10.0).display_name("a = 1")
    hold(true)
    fplot({x => dgammaPDF(x, 2.0)}, -10.0, 10.0).display_name("a = 2")
    fplot({x => dgammaPDF(x, 5.0)}, -10.0, 10.0).display_name("a = 5")
    hold(false)
    title("Double Gamma PDF plot")
    xlabel("x")
    ylabel("f(x,a)")
    save("./tests/imgs/stats/continuous/dgamma/dgammapdf.png", "png")
    clear()
}

public func dweibullPlot() {
    fplot({x => dweibullPDF(x, 1.0)}, -5.0, 5.0).display_name("c = 1")
    hold(true)
    fplot({x => dweibullPDF(x, 2.0)}, -5.0, 5.0).display_name("c = 2")
    fplot({x => dweibullPDF(x, 5.0)}, -5.0, 5.0).display_name("c = 5")
    hold(false)
    title("Double Weibull PDF plot")
    xlabel("x")
    ylabel("f(x,c)")
    save("./tests/imgs/stats/continuous/dweibull/dweibullpdf.png", "png")
    clear()
}

public func erlangPlot() {
    fplot({x => erlangPDF(x, 1, beta:2.0)}, 0.01, 10.0).display_name("b = 2.0, m = 1")
    hold(true)
    fplot({x => erlangPDF(x, 2, beta:3.0)}, 0.01, 10.0).display_name("b = 3.0, m = 2")
    fplot({x => erlangPDF(x, 3, beta:4.0)}, 0.01, 10.0).display_name("b = 4.0, m = 3")
    hold(false)
    title("Erlang PDF plot")
    xlabel("x")
    ylabel("f(x,m,b)")
    legend(true)
    save("./tests/imgs/stats/continuous/erlang/erlangpdf.png", "png")
    clear()
}

public func exponPlot() {
    fplot({x => exponPDF(x)}, 0.01, 5.0)
    title("Exponential PDF plot")
    xlabel("x")
    ylabel("f(x)")
    save("./tests/imgs/stats/continuous/expon/exponpdf.png", "png")
    clear()
}


public func exponnormPlot() {
    fplot({x => exponnormPDF(x, 0.5)}, -2.0, 8.0).display_name("k = 0.5")
    hold(true)
    fplot({x => exponnormPDF(x, 1.0)}, -2.0, 8.0).display_name("k = 1.0")
    fplot({x => exponnormPDF(x, 3.0)}, -2.0, 8.0).display_name("k = 3.0")
    hold(false)
    title("Exponnorm PDF Plot")
    xlabel("x")
    ylabel("f(x)")
    legend(true)
    save("./tests/imgs/stats/continuous/exponnorm/exponnormpdf.png", "png")
    clear()

    fplot({x => exponnormCDF(x, 0.5)}, -2.0, 8.0).display_name("k = 0.5")
    hold(true)
    fplot({x => exponnormCDF(x, 1.0)}, -2.0, 8.0).display_name("k = 1.0")
    fplot({x => exponnormCDF(x, 3.0)}, -2.0, 8.0).display_name("k = 3.0")
    hold(false)
    title("Exponnorm CDF Plot")
    xlabel("x")
    ylabel("F(x)")
    legend(true)
    save("./tests/imgs/stats/continuous/exponnorm/exponnormcdf.png", "png")
    clear()
}


public func exponweibPlot() {
    fplot({x => exponweibPDF(x, 0.5, 2.0)}, 0.01, 3.0).display_name("a = 0.5")
    hold(true)
    fplot({x => exponweibPDF(x, 1.0, 2.0)}, 0.01, 3.0).display_name("a = 1.0")
    fplot({x => exponweibPDF(x, 3.0, 2.0)}, 0.01, 3.0).display_name("a = 3.0")
    hold(false)
    title("Exponweib PDF Plot")
    xlabel("x")
    ylabel("f(x)")
    legend(true)
    save("./tests/imgs/stats/continuous/exponweib/exponweibpdf.png", "png")
    clear()

    fplot({x => exponweibCDF(x, 0.5, 2.0)}, 0.01, 3.0).display_name("a = 0.5")
    hold(true)
    fplot({x => exponweibCDF(x, 1.0, 2.0)}, 0.01, 3.0).display_name("a = 1.0")
    fplot({x => exponweibCDF(x, 3.0, 2.0)}, 0.01, 3.0).display_name("a = 3.0")
    hold(false)
    title("Exponweib CDF Plot")
    xlabel("x")
    ylabel("F(x)")
    legend(true)
    save("./tests/imgs/stats/continuous/exponweib/exponweibcdf.png", "png")
    clear()
}

public func exponpowPlot() {
    fplot({x => exponpowPDF(x, 1.0)}, 0.01, 2.0).display_name("b = 1.0")
    hold(true)
    fplot({x => exponpowPDF(x, 2.0)}, 0.01, 2.0).display_name("b = 2.0")
    fplot({x => exponpowPDF(x, 3.0)}, 0.01, 2.0).display_name("b = 3.0")
    hold(false)
    title("Exponpow PDF Plot")
    xlabel("x")
    ylabel("f(x)")
    legend(true)
    save("./tests/imgs/stats/continuous/exponpow/exponpowpdf.png", "png")
    clear()

    fplot({x => exponpowCDF(x, 1.0)}, 0.01, 2.0).display_name("b = 1.0")
    hold(true)
    fplot({x => exponpowCDF(x, 2.0)}, 0.01, 2.0).display_name("b = 2.0")
    fplot({x => exponpowCDF(x, 3.0)}, 0.01, 2.0).display_name("b = 3.0")
    title("Exponpow CDF Plot")
    xlabel("x")
    ylabel("F(x)")
    legend(true)
    save("./tests/imgs/stats/continuous/exponpow/exponpowcdf.png", "png")
    clear()
}

public func fPlot() {

    fplot({x => fPDF(x, 1, 2)}, 0.01, 2.0).display_name("df1 = 1, df2 = 2")
    hold(true)
    fplot({x => fPDF(x, 3, 3)}, 0.01, 2.0).display_name("df1 = 3, df2 = 3")
    hold(false)
    title("F PDF Plot")
    xlabel("x")
    ylabel("f(x)")
    legend(true)
    save("./tests/imgs/stats/continuous/f/fpdf.png", "png")
    clear()
    /*
    fplot({x => fCDF(x, 1, 2)}, 0.01, 5.0).display_name("a = 1, b = 2")
    hold(true)
    fplot({x => fCDF(x, 3, 3)}, 0.01, 5.0).display_name("a = 3, b = 3")
    fplot({x => fCDF(x, 3, 1)}, 0.01, 5.0).display_name("a = 3, b = 1")
    hold(false)
    title("F CDF Plot")
    xlabel("x")
    ylabel("F(x)")
    legend(true)
    save("./tests/imgs/stats/continuous/f/fcdf.png", "png")
    clear()
    */
}

public func fatiguelifePlot() {

    fplot({x => fatiguelifePDF(x, 1.0)}, 0.01, 4.0).display_name("c = 1.0")
    hold(true)
    fplot({x => fatiguelifePDF(x, 2.0)}, 0.01, 4.0).display_name("c = 2.0")
    fplot({x => fatiguelifePDF(x, 3.0)}, 0.01, 4.0).display_name("c = 3.0")
    hold(false)
    title("Fatiguelife PDF Plot")
    xlabel("x")
    ylabel("f(x)")
    legend(true)
    save("./tests/imgs/stats/continuous/fatiguelife/fatiguelifepdf.png", "png")
    clear()
    fplot({x => fatiguelifeCDF(x, 1.0)}, 0.01, 4.0).display_name("c = 1.0")
    hold(true)
    fplot({x => fatiguelifeCDF(x, 2.0)}, 0.01, 4.0).display_name("c = 2.0")
    fplot({x => fatiguelifeCDF(x, 3.0)}, 0.01, 4.0).display_name("c = 3.0")
    hold(false)
    title("Fatiguelife CDF Plot")
    xlabel("x")
    ylabel("F(x)")
    legend(true)
    save("./tests/imgs/stats/continuous/fatiguelife/fatiguelifecdf.png", "png")
    clear()
}


public func fiskPlot() {

    fplot({x => fiskPDF(x, 1.0)}, 0.01, 6.0).display_name("c = 1.0")
    hold(true)
    fplot({x => fiskPDF(x, 2.0)}, 0.01, 6.0).display_name("c = 2.0")
    fplot({x => fiskPDF(x, 3.0)}, 0.01, 6.0).display_name("c = 3.0")
    hold(false)
    title("Fisk PDF Plot")
    xlabel("x")
    ylabel("f(x)")
    legend(true)
    save("./tests/imgs/stats/continuous/fisk/fiskpdf.png", "png")
    clear()

    fplot({x => fiskCDF(x, 1.0)}, 0.01, 6.0).display_name("c = 1.0")
    hold(true)
    fplot({x => fiskCDF(x, 2.0)}, 0.01, 6.0).display_name("c = 2.0")
    fplot({x => fiskCDF(x, 3.0)}, 0.01, 6.0).display_name("c = 3.0")
    hold(false)
    title("Fisk CDF Plot")
    xlabel("x")
    ylabel("F(x)")
    legend(true)
    save("./tests/imgs/stats/continuous/fisk/fiskcdf.png", "png")
    clear()
}

public func foldcauchyPlot() {

    fplot({x => foldcauchyPDF(x, 1.0)}, 0.01, 10.0).display_name("c = 1.0")
    hold(true)
    fplot({x => foldcauchyPDF(x, 2.0)}, 0.01, 10.0).display_name("c = 2.0")
    fplot({x => foldcauchyPDF(x, 3.0)}, 0.01, 10.0).display_name("c = 3.0")
    hold(false)
    title("Foldcauchy PDF Plot")
    xlabel("x")
    ylabel("f(x)")
    legend(true)
    save("./tests/imgs/stats/continuous/foldcauchy/foldcauchypdf.png", "png")
    clear()

    fplot({x => foldcauchyCDF(x, 1.0)}, 0.01, 10.0).display_name("c = 1.0")
    hold(true)
    fplot({x => foldcauchyCDF(x, 2.0)}, 0.01, 10.0).display_name("c = 2.0")
    fplot({x => foldcauchyCDF(x, 3.0)}, 0.01, 10.0).display_name("c = 3.0")
    hold(false)
    title("Foldcauchy CDF Plot")
    xlabel("x")
    ylabel("F(x)")
    legend(true)
    save("./tests/imgs/stats/continuous/foldcauchy/foldcauchycdf.png", "png")
    clear()
}

public func foldnormPlot() {

    fplot({x => foldnormPDF(x, 1.0)}, 0.01, 6.0).display_name("b = 1.0")
    hold(true)
    fplot({x => foldnormPDF(x, 2.0)}, 0.01, 6.0).display_name("b = 2.0")
    fplot({x => foldnormPDF(x, 3.0)}, 0.01, 6.0).display_name("b = 3.0")
    hold(false)
    title("Foldnorm PDF Plot")
    xlabel("x")
    ylabel("f(x)")
    legend(true)
    save("./tests/imgs/stats/continuous/foldnorm/foldnormpdf.png", "png")
    clear()

    fplot({x => foldnormCDF(x, 1.0)}, 0.01, 6.0).display_name("b = 1.0")
    hold(true)
    fplot({x => foldnormCDF(x, 2.0)}, 0.01, 6.0).display_name("b = 2.0")
    fplot({x => foldnormCDF(x, 3.0)}, 0.01, 6.0).display_name("b = 3.0")
    hold(false)
    title("Foldnorm CDF Plot")
    xlabel("x")
    ylabel("F(x)")
    legend(true)
    save("./tests/imgs/stats/continuous/foldnorm/foldnormcdf.png", "png")
    clear()
}


public func gammaPlot() {

    fplot({x => gammaPDF(x, 1.0)}, 0.01, 10.0).display_name("a = 1.0, b = 1.0")
    hold(true)
    fplot({x => gammaPDF(x, 2.0)}, 0.01, 10.0).display_name("a = 2.0, b = 1.0")
    fplot({x => gammaPDF(x, 3.0)}, 0.01, 10.0).display_name("a = 3.0, b = 1.0")
    hold(false)
    title("Gamma PDF Plot")
    xlabel("x")
    ylabel("f(x)")
    legend(true)
    save("./tests/imgs/stats/continuous/gamma/gammapdf.png", "png")
    clear()

    fplot({x => gammaCDF(x, 1.0)}, 0.01, 10.0).display_name("a = 1.0, b = 1.0")
    hold(true)
    fplot({x => gammaCDF(x, 2.0)}, 0.01, 10.0).display_name("a = 2.0, b = 1.0")
    fplot({x => gammaCDF(x, 3.0)}, 0.01, 10.0).display_name("a = 3.0, b = 1.0")
    hold(false)
    title("Gamma CDF Plot")
    xlabel("x")
    ylabel("F(x)")
    legend(true)
    save("./tests/imgs/stats/continuous/gamma/gammacdf.png", "png")
    clear()
}


public func genlogisticPlot() {

    fplot({x => genlogisticPDF(x, 5.0)}, 0.01, 6.0).display_name("c = 5.0")
    hold(true)
    fplot({x => genlogisticPDF(x, 10.0)}, 0.01, 6.0).display_name("c = 10.0")
    fplot({x => genlogisticPDF(x, 15.0)}, 0.01, 6.0).display_name("c = 15.0")
    hold(false)
    title("Genlogistic PDF Plot")
    xlabel("x")
    ylabel("f(x)")
    legend(true)
    save("./tests/imgs/stats/continuous/genlogistic/genlogisticpdf.png", "png")
    clear()

    fplot({x => genlogisticCDF(x, 5.0)}, 0.01, 6.0).display_name("c = 5.0")
    hold(true)
    fplot({x => genlogisticCDF(x, 10.0)}, 0.01, 6.0).display_name("c = 10.0")
    fplot({x => genlogisticCDF(x, 15.0)}, 0.01, 6.0).display_name("c = 15.0")
    hold(false)
    title("Genlogistic CDF Plot")
    xlabel("x")
    ylabel("F(x)")
    legend(true)
    save("./tests/imgs/stats/continuous/genlogistic/genlogisticcdf.png", "png")
    clear()
}

public func gennormPlot() {

    fplot({x => gennormPDF(x, 1.0)}, -3.0, 3.0).display_name("b = 1.0")
    hold(true)
    fplot({x => gennormPDF(x, 2.0)}, -3.0, 3.0).display_name("b = 2.0")
    fplot({x => gennormPDF(x, 3.0)}, -3.0, 3.0).display_name("b = 3.0")
    hold(false)
    title("Gennorm PDF Plot")
    xlabel("x")
    ylabel("f(x)")
    legend(true)
    save("./tests/imgs/stats/continuous/gennorm/gennormpdf.png", "png")
    clear()

    fplot({x => gennormCDF(x, 1.0)}, -3.0, 3.0).display_name("b = 1.0")
    hold(true)
    fplot({x => gennormCDF(x, 2.0)}, -3.0, 3.0).display_name("b = 2.0")
    fplot({x => gennormCDF(x, 3.0)}, -3.0, 3.0).display_name("b = 3.0")
    hold(false)
    title("Gennorm CDF Plot")
    xlabel("x")
    ylabel("F(x)")
    legend(true)
    save("./tests/imgs/stats/continuous/gennorm/gennormcdf.png", "png")
    clear()
}

public func genexponPlot() {

    fplot({x => genexponPDF(x, 3.0, 5.0, 7.0)}, 0.01, 1.0).display_name("a=3, b=5, c=7")
    hold(true)
    fplot({x => genexponPDF(x, 5.0, 5.0, 5.0)}, 0.01, 1.0).display_name("a=5, b=5, c=5")
    fplot({x => genexponPDF(x, 7.0, 9.0, 11.0)}, 0.01, 1.0).display_name("a=7, b=9, c=11")
    hold(false)
    ylabel("f(x)")
    save("./tests/imgs/stats/continuous/genexpon/genexponpdf.png", "png")
    clear()

    fplot({x => genexponCDF(x, 3.0, 5.0, 7.0)}, 0.01, 1.0).display_name("a=3, b=5, c=7")
    hold(true)
    fplot({x => genexponCDF(x, 5.0, 5.0, 5.0)}, 0.01, 1.0).display_name("a=5, b=5, c=5")
    fplot({x => genexponCDF(x, 7.0, 9.0, 11.0)}, 0.01, 1.0).display_name("a=7, b=9, c=11")
    hold(false)
    ylabel("F(x)")
    save("./tests/imgs/stats/continuous/genexpon/genexponcdf.png", "png")
    clear()
}

public func gumbel_lPlot() {

    fplot({x => gumbel_lPDF(x)}, -6.0, 3.0)
    hold(true)
    title("Gumbel_l PDF Plot")
    xlabel("x")
    ylabel("f(x)")
    legend(true)
    save("./tests/imgs/stats/continuous/gumbel_l/gumbel_lpdf.png", "png")
    clear()

    fplot({x => gumbel_lCDF(x)}, -6.0, 3.0)
    hold(true)
    title("Gumbel_l CDF Plot")
    xlabel("x")
    ylabel("F(x)")
    legend(true)
    save("./tests/imgs/stats/continuous/gumbel_l/gumbel_lcdf.png", "png")
    clear()
}

public func gumbel_rPlot() {

    fplot({x => gumbel_rPDF(x)}, -3.0, 6.0)
    hold(true)
    title("Gumbel_r PDF Plot")
    xlabel("x")
    ylabel("f(x)")
    legend(true)
    save("./tests/imgs/stats/continuous/gumbel_r/gumbel_rpdf.png", "png")
    clear()

    fplot({x => gumbel_rCDF(x)}, -3.0, 6.0)
    hold(true)
    title("Gumbel_r CDF Plot")
    xlabel("x")
    ylabel("F(x)")
    legend(true)
    save("./tests/imgs/stats/continuous/gumbel_r/gumbel_rcdf.png", "png")
    clear()
}


public func genextremePlot() {

    fplot({x => genextremePDF(x, 0.0)}, -2.0, 6.0).display_name("c = 0.0")
    hold(true)
    fplot({x => genextremePDF(x, -0.1)}, -2.0, 6.0).display_name("c = -0.1")
    fplot({x => genextremePDF(x, -0.3)}, -2.0, 6.0).display_name("c = -0.3")
    hold(false)
    title("Genextreme PDF Plot")
    xlabel("x")
    ylabel("f(x)")
    legend(true)
    save("./tests/imgs/stats/continuous/genextreme/genextremepdf.png", "png")
    clear()

    fplot({x => genextremeCDF(x, 0.0)}, -2.0, 6.0).display_name("c = 0.0")
    hold(true)
    fplot({x => genextremeCDF(x, -0.1)}, -2.0, 6.0).display_name("c = -0.1")
    fplot({x => genextremeCDF(x, -0.3)}, -2.0, 6.0).display_name("c = -0.3")
    hold(false)
    title("Genextreme CDF Plot")
    xlabel("x")
    ylabel("F(x)")
    legend(true)
    save("./tests/imgs/stats/continuous/genextreme/genextremecdf.png", "png")
    clear()
}


public func gengammaPlot() {

    fplot({x => gengammaPDF(x, 5.0, -3.0)}, 0.2, 1.5).display_name("a=5,c=-3")
    hold(true)
    fplot({x => gengammaPDF(x, 3.0, -1.0)}, 0.2, 1.5).display_name("a=3,c=-1")
    fplot({x => gengammaPDF(x, 1.0, 3.0)},  0.2, 1.5).display_name("a=1,c=3")
    hold(false)
    title("Gengamma PDF Plot")
    xlabel("x")
    ylabel("f(x)")
    legend(true)
    save("./tests/imgs/stats/continuous/gengamma/gengammapdf.png", "png")
    clear()

    fplot({x => gengammaCDF(x, 5.0, -3.0)}, 0.2, 1.5).display_name("a=5,c=-3")
    hold(true)
    fplot({x => gengammaCDF(x, 3.0, -1.0)}, 0.2, 1.5).display_name("a=3,c=-1")
    fplot({x => gengammaCDF(x, 1.0, 3.0)},  0.2, 1.5).display_name("a=1,c=3")
    hold(false)
    title("Gengamma CDF Plot")
    xlabel("x")
    ylabel("F(x)")
    legend(true)
    save("./tests/imgs/stats/continuous/gengamma/gengammacdf.png", "png")
    clear()
}

public func genhalflogisticPlot() {

    fplot({x => genhalflogisticPDF(x, 1.5)}, 0.01, 0.49).display_name("c = 1.5")
    hold(true)
    fplot({x => genhalflogisticPDF(x, 1.0)}, 0.01, 0.49).display_name("c = 1.0")
    fplot({x => genhalflogisticPDF(x, 2.0)}, 0.01, 0.49).display_name("c = 2.0")
    hold(false)
    title("Genhalflogistic PDF Plot")
    xlabel("x")
    ylabel("f(x)")
    legend(true)
    save("./tests/imgs/stats/continuous/genhalflogistic/genhalflogisticpdf.png", "png")
    clear()

    fplot({x => genhalflogisticCDF(x, 1.5)}, 0.01, 0.49).display_name("c = 1.5")
    hold(true)
    fplot({x => genhalflogisticCDF(x, 1.0)}, 0.01, 0.49).display_name("c = 1.0")
    fplot({x => genhalflogisticCDF(x, 2.0)}, 0.01, 0.49).display_name("c = 2.0")
    hold(false)
    title("Genhalflogistic CDF Plot")
    xlabel("x")
    ylabel("F(x)")
    legend(true)
    save("./tests/imgs/stats/continuous/genhalflogistic/genhalflogisticcdf.png", "png")
    clear()
}

public func gilbratPlot() {

    fplot({x => gilbratPDF(x)}, 0.01, 10.0)
    hold(true)
    title("gilbrat PDF Plot")
    xlabel("x")
    ylabel("f(x)")
    legend(true)
    save("./tests/imgs/stats/continuous/gilbrat/gilbratpdf.png", "png")
    clear()

    fplot({x => gilbratCDF(x)}, 0.01, 10.0)
    hold(true)
    title("gilbrat CDF Plot")
    xlabel("x")
    ylabel("F(x)")
    legend(true)
    save("./tests/imgs/stats/continuous/gilbrat/gilbratcdf.png", "png")
    clear()
}


public func gompertzPlot() {

    fplot({x => gompertzPDF(x, 1.0)}, 0.01, 3.0).display_name("k = 1.0")
    hold(true)
    fplot({x => gompertzPDF(x, 3.0)}, 0.01, 3.0).display_name("k = 3.0")
    fplot({x => gompertzPDF(x, 5.0)}, 0.01, 3.0).display_name("k = 5.0")
    hold(false)
    title("Gompertz PDF Plot")
    xlabel("x")
    ylabel("f(x)")
    legend(true)
    save("./tests/imgs/stats/continuous/gompertz/gompertzpdf.png", "png")
    clear()

    fplot({x => gompertzCDF(x, 1.0)}, 0.01, 3.0).display_name("k = 1.0")
    hold(true)
    fplot({x => gompertzCDF(x, 3.0)}, 0.01, 3.0).display_name("k = 3.0")
    fplot({x => gompertzCDF(x, 5.0)}, 0.01, 3.0).display_name("k = 5.0")
    hold(false)
    title("Gompertz CDF Plot")
    xlabel("x")
    ylabel("F(x)")
    legend(true)
    save("./tests/imgs/stats/continuous/gompertz/gompertzcdf.png", "png")
    clear()
}


public func halfcauchyPlot() {

    fplot({x => halfcauchyPDF(x)}, 0.01, 10.0)
    title("halfcauchy PDF Plot")
    xlabel("x")
    ylabel("f(x)")
    save("./tests/imgs/stats/continuous/halfcauchy/halfcauchypdf.png", "png")
    clear()

    fplot({x => halfcauchyCDF(x)}, 0.01, 10.0)
    title("halfcauchy CDF Plot")
    xlabel("x")
    ylabel("F(x)")
    save("./tests/imgs/stats/continuous/halfcauchy/halfcauchycdf.png", "png")
    clear()
}


public func halfgennormPlot() {

    fplot({x => halfgennormPDF(x, 1.0)}, 0.01, 4.0).display_name("k = 1.0")
    hold(true)
    fplot({x => halfgennormPDF(x, 2.0)}, 0.01, 4.0).display_name("k = 2.0")
    fplot({x => halfgennormPDF(x, 3.0)}, 0.01, 4.0).display_name("k = 3.0")
    hold(false)
    title("halfgennorm PDF Plot")
    xlabel("x")
    ylabel("f(x)")
    legend(true)
    save("./tests/imgs/stats/continuous/halfgennorm/halfgennormpdf.png", "png")
    clear()

    fplot({x => halfgennormCDF(x, 1.0)}, 0.01, 4.0).display_name("k = 1.0")
    hold(true)
    fplot({x => halfgennormCDF(x, 2.0)}, 0.01, 4.0).display_name("k = 2.0")
    fplot({x => halfgennormCDF(x, 3.0)}, 0.01, 4.0).display_name("k = 3.0")
    hold(false)
    title("halfgennorm CDF Plot")
    xlabel("x")
    ylabel("F(x)")
    legend(true)
    save("./tests/imgs/stats/continuous/halfgennorm/halfgennormcdf.png", "png")
    clear()
}

public func halflogisticPlot() {

    fplot({x => halflogisticPDF(x)}, 0.01, 5.0)
    title("halflogistic PDF Plot")
    xlabel("x")
    ylabel("f(x)")
    save("./tests/imgs/stats/continuous/halflogistic/halflogisticpdf.png", "png")
    clear()

    fplot({x => halflogisticCDF(x)}, 0.01, 5.0)
    title("halflogistic CDF Plot")
    xlabel("x")
    ylabel("F(x)")
    save("./tests/imgs/stats/continuous/halflogistic/halflogisticcdf.png", "png")
    clear()
}

public func halfnormPlot() {

    fplot({x => halfnormPDF(x)}, 0.01, 3.0)
    title("halfnorm PDF Plot")
    xlabel("x")
    ylabel("f(x)")
    save("./tests/imgs/stats/continuous/halfnorm/halfnormpdf.png", "png")
    clear()

    fplot({x => halfnormCDF(x)}, 0.01, 3.0)
    title("halfnorm CDF Plot")
    xlabel("x")
    ylabel("F(x)")
    save("./tests/imgs/stats/continuous/halfnorm/halfnormcdf.png", "png")
    clear()
}

public func hypsecantPlot() {

    fplot({x => hypsecantPDF(x)}, -4.0, 4.0)
    title("hypsecant PDF Plot")
    xlabel("x")
    ylabel("f(x)")
    save("./tests/imgs/stats/continuous/hypsecant/hypsecantpdf.png", "png")
    clear()

    fplot({x => hypsecantCDF(x)}, -4.0, 4.0)
    title("hypsecant CDF Plot")
    xlabel("x")
    ylabel("F(x)")
    save("./tests/imgs/stats/continuous/hypsecant/hypsecantcdf.png", "png")
    clear()
}

public func invgammaPlot() {

    fplot({x => invgammaPDF(x, 1.0)}, 0.01, 1.0).display_name("k = 1.0")
    hold(true)
    fplot({x => invgammaPDF(x, 2.0)}, 0.01, 1.0).display_name("k = 2.0")
    fplot({x => invgammaPDF(x, 3.0)}, 0.01, 1.0).display_name("k = 3.0")
    hold(false)
    title("invgamma PDF Plot")
    xlabel("x")
    ylabel("f(x)")
    legend(true)
    save("./tests/imgs/stats/continuous/invgamma/invgammapdf.png", "png")
    clear()

    fplot({x => invgammaCDF(x, 1.0)}, 0.01, 1.0).display_name("k = 1.0")
    hold(true)
    fplot({x => invgammaCDF(x, 2.0)}, 0.01, 1.0).display_name("k = 2.0")
    fplot({x => invgammaCDF(x, 3.0)}, 0.01, 1.0).display_name("k = 3.0")
    hold(false)
    title("invgamma CDF Plot")
    xlabel("x")
    ylabel("F(x)")
    legend(true)
    save("./tests/imgs/stats/continuous/invgamma/invgammacdf.png", "png")
    clear()
}


public func invgaussPlot() {

    fplot({x => invgaussPDF(x, 1.0)}, 0.01, 2.0).display_name("k = 1.0")
    hold(true)
    fplot({x => invgaussPDF(x, 2.0)}, 0.01, 2.0).display_name("k = 2.0")
    fplot({x => invgaussPDF(x, 3.0)}, 0.01, 2.0).display_name("k = 3.0")
    hold(false)
    title("invgauss PDF Plot")
    xlabel("x")
    ylabel("f(x)")
    legend(true)
    save("./tests/imgs/stats/continuous/invgauss/invgausspdf.png", "png")
    clear()

    fplot({x => invgaussCDF(x, 1.0)}, 0.02, 2.0).display_name("k = 1.0")
    hold(true)
    fplot({x => invgaussCDF(x, 2.0)}, 0.02, 2.0).display_name("k = 2.0")
    fplot({x => invgaussCDF(x, 3.0)}, 0.02, 2.0).display_name("k = 3.0")
    hold(false)
    title("invgauss CDF Plot")
    xlabel("x")
    ylabel("F(x)")
    legend(true)
    save("./tests/imgs/stats/continuous/invgauss/invgausscdf.png", "png")
    clear()
}


public func invweibullPlot() {

    fplot({x => invweibullPDF(x, 1.0)}, 0.01, 2.0).display_name("k = 1.0")
    hold(true)
    fplot({x => invweibullPDF(x, 2.0)}, 0.01, 2.0).display_name("k = 2.0")
    fplot({x => invweibullPDF(x, 3.0)}, 0.01, 2.0).display_name("k = 3.0")
    hold(false)
    title("invweibull PDF Plot")
    xlabel("x")
    ylabel("f(x)")
    legend(true)
    save("./tests/imgs/stats/continuous/invweibull/invweibullpdf.png", "png")
    clear()

    fplot({x => invweibullCDF(x, 1.0)}, 0.01, 2.0).display_name("k = 1.0")
    hold(true)
    fplot({x => invweibullCDF(x, 2.0)}, 0.01, 2.0).display_name("k = 2.0")
    fplot({x => invweibullCDF(x, 3.0)}, 0.01, 2.0).display_name("k = 3.0")
    hold(false)
    title("invweibull CDF Plot")
    xlabel("x")
    ylabel("F(x)")
    legend(true)
    save("./tests/imgs/stats/continuous/invweibull/invweibullcdf.png", "png")
    clear()
}


public func johnsonsbPlot() {

    fplot({x => johnsonsbPDF(x, 1.0, 2.0)}, 0.01, 0.99).display_name("a = 1.0, b = 2.0")
    hold(true)
    fplot({x => johnsonsbPDF(x, 2.0, 4.0)}, 0.01, 0.99).display_name("a = 2.0, b = 4.0")
    fplot({x => johnsonsbPDF(x, 3.0, 5.0)}, 0.01, 0.99).display_name("a = 3.0, b = 5.0")
    hold(false)
    title("johnsonsb PDF Plot")
    xlabel("x")
    ylabel("f(x)")
    legend(true)
    save("./tests/imgs/stats/continuous/johnsonsb/johnsonsbpdf.png", "png")
    clear()

    fplot({x => johnsonsbCDF(x, 1.0, 2.0)}, 0.01, 0.99).display_name("a = 1.0, b = 2.0")
    hold(true)
    fplot({x => johnsonsbCDF(x, 2.0, 4.0)}, 0.01, 0.99).display_name("a = 2.0, b = 4.0")
    fplot({x => johnsonsbCDF(x, 3.0, 5.0)}, 0.01, 0.99).display_name("a = 3.0, b = 5.0")
    hold(false)
    title("johnsonsb CDF Plot")
    xlabel("x")
    ylabel("F(x)")
    // legend(true)
    save("./tests/imgs/stats/continuous/johnsonsb/johnsonsbcdf.png", "png")
    clear()
}


public func johnsonsuPlot() {

    fplot({x => johnsonsuPDF(x, 1.0, 1.0)}, -4.00, 1.00).display_name("a=b=1.0")
    hold(true)
    fplot({x => johnsonsuPDF(x, 2.0, 2.0)}, -4.00, 1.00).display_name("a=b=2.0")
    fplot({x => johnsonsuPDF(x, 3.0, 3.0)}, -4.00, 1.00).display_name("a=b=3.0")
    hold(false)
    title("johnsonsu PDF Plot")
    xlabel("x")
    ylabel("f(x)")
    legend(true)
    save("./tests/imgs/stats/continuous/johnsonsu/johnsonsupdf.png", "png")
    clear()

    fplot({x => johnsonsuCDF(x, 1.0, 1.0)}, -4.00, 1.00).display_name("a=b=1.0")
    hold(true)
    fplot({x => johnsonsuCDF(x, 2.0, 2.0)}, -4.00, 1.00).display_name("a=b=2.0")
    fplot({x => johnsonsuCDF(x, 3.0, 3.0)}, -4.00, 1.00).display_name("a=b=3.0")
    hold(false)
    title("johnsonsu CDF Plot")
    xlabel("x")
    ylabel("F(x)")
    // legend(true)
    save("./tests/imgs/stats/continuous/johnsonsu/johnsonsucdf.png", "png")
    clear()
}

public func kappa3Plot() {

    fplot({x => kappa3PDF(x, 1.0)}, 0.01, 5.0).display_name("k=1.0")
    hold(true)
    fplot({x => kappa3PDF(x, 2.0)}, 0.01, 5.0).display_name("k=2.0")
    fplot({x => kappa3PDF(x, 3.0)}, 0.01, 5.0).display_name("k=3.0")
    hold(false)
    title("kappa3 PDF Plot")
    xlabel("x")
    ylabel("f(x)")
    legend(true)
    save("./tests/imgs/stats/continuous/kappa3/kappa3pdf.png", "png")
    clear()

    fplot({x => kappa3CDF(x, 1.0)}, 0.01, 5.0).display_name("k=1.0")
    hold(true)
    fplot({x => kappa3CDF(x, 2.0)}, 0.01, 5.0).display_name("k=2.0")
    fplot({x => kappa3CDF(x, 3.0)}, 0.01, 5.0).display_name("k=3.0")
    hold(false)
    title("kappa3 CDF Plot")
    xlabel("x")
    ylabel("F(x)")
    legend(true)
    save("./tests/imgs/stats/continuous/kappa3/kappa3cdf.png", "png")
    clear()
}


public func kappa4Plot() {

    fplot({x => kappa4PDF(x, 0.0, 0.0)}, 0.0, 4.0).display_name("h=k=0.0")
    hold(false)
    title("kappa4 PDF Plot")
    xlabel("x")
    ylabel("f(x)")
    legend(true)
    save("./tests/imgs/stats/continuous/kappa4/kappa4pdf.png", "png")
    clear()

    fplot({x => kappa4CDF(x, 0.0, 0.0)}, 0.0, 4.0).display_name("h=k=0.0")
    hold(false)
    title("kappa4 CDF Plot")
    xlabel("x")
    ylabel("F(x)")
    legend(true)
    save("./tests/imgs/stats/continuous/kappa4/kappa4cdf.png", "png")
    clear()
}


public func laplace_asymmetricPlot() {

    fplot({x => laplace_asymmetricPDF(x, 1.0)}, -3.0, 3.0).display_name("k=1.0")
    hold(true)
    fplot({x => laplace_asymmetricPDF(x, 2.0)}, -3.0, 3.0).display_name("k=2.0")
    fplot({x => laplace_asymmetricPDF(x, 3.0)}, -3.0, 3.0).display_name("k=3.0")
    hold(false)
    title("laplace_asymmetric PDF Plot")
    xlabel("x")
    ylabel("f(x)")
    legend(true)
    save("./tests/imgs/stats/continuous/laplace_asymmetric/laplace_asymmetricpdf.png", "png")
    clear()

    fplot({x => laplace_asymmetricCDF(x, 1.0)}, -3.0, 3.0).display_name("k=1.0")
    hold(true)
    fplot({x => laplace_asymmetricCDF(x, 2.0)}, -3.0, 3.0).display_name("k=2.0")
    fplot({x => laplace_asymmetricCDF(x, 3.0)}, -3.0, 3.0).display_name("k=3.0")
    hold(false)
    title("laplace_asymmetric CDF Plot")
    xlabel("x")
    ylabel("F(x)")
    legend(true)
    save("./tests/imgs/stats/continuous/laplace_asymmetric/laplace_asymmetriccdf.png", "png")
    clear()
}

public func laplacePlot() {

    fplot({x => laplacePDF(x, 1.0, 1.0)}, -1.0, 7.0).display_name("a=b=1.0")
    hold(true)
    fplot({x => laplacePDF(x, 2.0, 2.0)}, -1.0, 7.0).display_name("a=b=2.0")
    fplot({x => laplacePDF(x, 3.0, 3.0)}, -1.0, 7.0).display_name("a=b=3.0")
    hold(false)
    title("laplace PDF Plot")
    xlabel("x")
    ylabel("f(x)")
    legend(true)
    save("./tests/imgs/stats/continuous/laplace/laplacepdf.png", "png")
    clear()

    fplot({x => laplaceCDF(x, 1.0, 1.0)}, -1.0, 7.0).display_name("a=b=1.0")
    hold(true)
    fplot({x => laplaceCDF(x, 2.0, 2.0)}, -1.0, 7.0).display_name("a=b=2.0")
    fplot({x => laplaceCDF(x, 3.0, 3.0)}, -1.0, 7.0).display_name("a=b=3.0")
    hold(false)
    title("laplace CDF Plot")
    xlabel("x")
    ylabel("F(x)")
    legend(true)
    save("./tests/imgs/stats/continuous/laplace/laplacecdf.png", "png")
    clear()
}


public func levy_lPlot() {

    fplot({x => levy_lPDF(x)}, -4.0, -0.001)
    title("levy_l PDF Plot")
    xlabel("x")
    ylabel("f(x)")
    save("./tests/imgs/stats/continuous/levy_l/levy_lpdf.png", "png")
    clear()

    fplot({x => levy_lCDF(x)}, -4.0, -0.001)
    title("levy_l CDF Plot")
    xlabel("x")
    ylabel("F(x)")
    save("./tests/imgs/stats/continuous/levy_l/levy_lcdf.png", "png")
    clear()
}

public func levyPlot() {

    fplot({x => levyPDF(x)}, 0.01, 4.0)
    title("levy PDF Plot")
    xlabel("x")
    ylabel("f(x)")
    save("./tests/imgs/stats/continuous/levy/levypdf.png", "png")
    clear()

    fplot({x => levyCDF(x)}, 0.01, 4.0)
    title("levy CDF Plot")
    xlabel("x")
    ylabel("F(x)")
    save("./tests/imgs/stats/continuous/levy/levycdf.png", "png")
    clear()
}


public func loggammaPlot() {

    fplot({x => loggammaPDF(x, 1.0)}, -4.0, 4.0).display_name("k=1.0")
    hold(true)
    fplot({x => loggammaPDF(x, 2.0)}, -4.0, 4.0).display_name("k=2.0")
    fplot({x => loggammaPDF(x, 3.0)}, -4.0, 4.0).display_name("k=3.0")
    hold(false)
    title("loggamma PDF Plot")
    xlabel("x")
    ylabel("f(x)")
    legend(true)
    save("./tests/imgs/stats/continuous/loggamma/loggammapdf.png", "png")
    clear()

    fplot({x => loggammaCDF(x, 1.0)}, -4.0, 4.0).display_name("k=1.0")
    hold(true)
    fplot({x => loggammaCDF(x, 2.0)}, -4.0, 4.0).display_name("k=2.0")
    fplot({x => loggammaCDF(x, 3.0)}, -4.0, 4.0).display_name("k=3.0")
    hold(false)
    title("loggamma CDF Plot")
    xlabel("x")
    ylabel("F(x)")
    // legend(true)
    save("./tests/imgs/stats/continuous/loggamma/loggammacdf.png", "png")
    clear()
}

public func logisticPlot() {

    fplot({x => logisticPDF(x)}, -4.0, 4.0)
    title("logistic PDF Plot")
    xlabel("x")
    ylabel("f(x)")
    save("./tests/imgs/stats/continuous/logistic/logisticpdf.png", "png")
    clear()

    fplot({x => logisticCDF(x)}, -4.0, 4.0)
    title("logistic CDF Plot")
    xlabel("x")
    ylabel("F(x)")
    save("./tests/imgs/stats/continuous/logistic/logisticcdf.png", "png")
    clear()
}

public func loglaplacePlot() {

    fplot({x => loglaplacePDF(x, 1.0)}, 0.01, 4.0).display_name("c=1.0")
    hold(true)
    fplot({x => loglaplacePDF(x, 2.0)}, 0.01, 4.0).display_name("c=2.0")
    fplot({x => loglaplacePDF(x, 3.0)}, 0.01, 4.0).display_name("c=3.0")
    hold(false)
    title("loglaplace PDF Plot")
    xlabel("x")
    ylabel("f(x)")
    legend(true)
    save("./tests/imgs/stats/continuous/loglaplace/loglaplacepdf.png", "png")
    clear()

    fplot({x => loglaplaceCDF(x, 1.0)}, 0.01, 4.0).display_name("c=1.0")
    hold(true)
    fplot({x => loglaplaceCDF(x, 2.0)}, 0.01, 4.0).display_name("c=2.0")
    fplot({x => loglaplaceCDF(x, 3.0)}, 0.01, 4.0).display_name("c=3.0")
    hold(false)
    title("loglaplace CDF Plot")
    xlabel("x")
    ylabel("F(x)")
    // legend(true)
    save("./tests/imgs/stats/continuous/loglaplace/loglaplacecdf.png", "png")
    clear()
}


public func lognormalPlot() {

    fplot({x => lognormalPDF(x, 1.0)}, 0.01, 4.0).display_name("s=1.0")
    hold(true)
    fplot({x => lognormalPDF(x, 2.0)}, 0.01, 4.0).display_name("s=2.0")
    fplot({x => lognormalPDF(x, 3.0)}, 0.01, 4.0).display_name("s=3.0")
    hold(false)
    title("lognormal PDF Plot")
    xlabel("x")
    ylabel("f(x)")
    legend(true)
    save("./tests/imgs/stats/continuous/lognormal/lognormalpdf.png", "png")
    clear()

    fplot({x => lognormalCDF(x, 1.0)}, 0.01, 4.0).display_name("s=1.0")
    hold(true)
    fplot({x => lognormalCDF(x, 2.0)}, 0.01, 4.0).display_name("s=2.0")
    fplot({x => lognormalCDF(x, 3.0)}, 0.01, 4.0).display_name("s=3.0")
    hold(false)
    title("lognormal CDF Plot")
    xlabel("x")
    ylabel("F(x)")
    // legend(true)
    save("./tests/imgs/stats/continuous/lognormal/lognormalcdf.png", "png")
    clear()
}


public func loguniformPlot() {

    fplot({x => loguniformPDF(x, 1.0, 2.0)}, 1.01, 1.99).display_name("a=1,b=2")
    hold(true)
    fplot({x => loguniformPDF(x, 1.0, 3.0)}, 1.01, 2.99).display_name("a=1,b=3")
    fplot({x => loguniformPDF(x, 1.0, 4.0)}, 1.01, 3.99).display_name("a=1,b=4")
    hold(false)
    title("loguniform PDF Plot")
    xlabel("x")
    ylabel("f(x)")
    legend(true)
    save("./tests/imgs/stats/continuous/loguniform/loguniformpdf.png", "png")
    clear()

    fplot({x => loguniformCDF(x, 1.0, 2.0)}, 1.01, 1.99).display_name("a=1,b=2")
    hold(true)
    fplot({x => loguniformCDF(x, 1.0, 3.0)}, 1.01, 2.99).display_name("a=1,b=3")
    fplot({x => loguniformCDF(x, 1.0, 4.0)}, 1.01, 3.99).display_name("a=1,b=4")
    hold(false)
    title("loguniform CDF Plot")
    xlabel("x")
    ylabel("F(x)")
    // legend(true)
    save("./tests/imgs/stats/continuous/loguniform/loguniformcdf.png", "png")
    clear()
}


public func lomaxPlot() {

    fplot({x => lomaxPDF(x, 1.0)}, 0.01, 4.0).display_name("c=1.0")
    hold(true)
    fplot({x => lomaxPDF(x, 2.0)}, 0.01, 4.0).display_name("c=2.0")
    fplot({x => lomaxPDF(x, 3.0)}, 0.01, 4.0).display_name("c=3.0")
    hold(false)
    title("lomax PDF Plot")
    xlabel("x")
    ylabel("f(x)")
    legend(true)
    save("./tests/imgs/stats/continuous/lomax/lomaxpdf.png", "png")
    clear()

    fplot({x => lomaxCDF(x, 1.0)}, 0.01, 4.0).display_name("c=1.0")
    hold(true)
    fplot({x => lomaxCDF(x, 2.0)}, 0.01, 4.0).display_name("c=2.0")
    fplot({x => lomaxCDF(x, 3.0)}, 0.01, 4.0).display_name("c=3.0")
    hold(false)
    title("lomax CDF Plot")
    xlabel("x")
    ylabel("F(x)")
    // legend(true)
    save("./tests/imgs/stats/continuous/lomax/lomaxcdf.png", "png")
    clear()
}


public func maxwellPlot() {

    fplot({x => maxwellPDF(x)}, 0.01, 4.0)
    title("maxwell PDF Plot")
    xlabel("x")
    ylabel("f(x)")
    save("./tests/imgs/stats/continuous/maxwell/maxwellpdf.png", "png")
    clear()

    fplot({x => maxwellCDF(x)}, 0.01, 4.0)
    title("maxwell CDF Plot")
    xlabel("x")
    ylabel("F(x)")
    save("./tests/imgs/stats/continuous/maxwell/maxwellcdf.png", "png")
    clear()
}


public func mielkePlot() {

    fplot({x => mielkePDF(x, 1.0, 1.0)}, 0.01, 4.0).display_name("a=b=1")
    hold(true)
    fplot({x => mielkePDF(x, 3.0, 3.0)}, 0.01, 4.0).display_name("a=b=3")
    fplot({x => mielkePDF(x, 5.0, 5.0)}, 0.01, 4.0).display_name("a=b=5")
    hold(false)
    title("mielke PDF Plot")
    xlabel("x")
    ylabel("f(x)")
    legend(true)
    save("./tests/imgs/stats/continuous/mielke/mielkepdf.png", "png")
    clear()

    fplot({x => mielkeCDF(x, 1.0, 1.0)}, 0.01, 4.0).display_name("a=b=1")
    hold(true)
    fplot({x => mielkeCDF(x, 3.0, 3.0)}, 0.01, 4.0).display_name("a=b=3")
    fplot({x => mielkeCDF(x, 5.0, 5.0)}, 0.01, 4.0).display_name("a=b=5")
    hold(false)
    title("mielke CDF Plot")
    xlabel("x")
    ylabel("F(x)")
    // legend(true)
    save("./tests/imgs/stats/continuous/mielke/mielkecdf.png", "png")
    clear()
}


public func moyalPlot() {

    fplot({x => moyalPDF(x)}, -2.0, 8.0)
    title("moyal PDF Plot")
    xlabel("x")
    ylabel("f(x)")
    save("./tests/imgs/stats/continuous/moyal/moyalpdf.png", "png")
    clear()

    fplot({x => moyalCDF(x)}, -2.0, 8.0)
    title("moyal CDF Plot")
    xlabel("x")
    ylabel("F(x)")
    save("./tests/imgs/stats/continuous/moyal/moyalcdf.png", "png")
    clear()
}


public func nakagamiPlot() {

    fplot({x => nakagamiPDF(x, 1.0)}, 0.01, 2.5).display_name("k=1.0")
    hold(true)
    fplot({x => nakagamiPDF(x, 2.0)}, 0.01, 2.5).display_name("k=2.0")
    fplot({x => nakagamiPDF(x, 3.0)}, 0.01, 2.5).display_name("k=3.0")
    hold(false)
    title("nakagami PDF Plot")
    xlabel("x")
    ylabel("f(x)")
    legend(true)
    save("./tests/imgs/stats/continuous/nakagami/nakagamipdf.png", "png")
    clear()

    fplot({x => nakagamiCDF(x, 1.0)}, 0.01, 2.5).display_name("k=1.0")
    hold(true)
    fplot({x => nakagamiCDF(x, 2.0)}, 0.01, 2.5).display_name("k=2.0")
    fplot({x => nakagamiCDF(x, 3.0)}, 0.01, 2.5).display_name("k=3.0")
    hold(false)
    title("nakagami CDF Plot")
    xlabel("x")
    ylabel("F(x)")
    // legend(true)
    save("./tests/imgs/stats/continuous/nakagami/nakagamicdf.png", "png")
    clear()
}


public func paretoPlot() {

    fplot({x => paretoPDF(x, 1.0)}, 1.01, 2.5).display_name("k=1.0")
    hold(true)
    fplot({x => paretoPDF(x, 2.0)}, 1.01, 2.5).display_name("k=2.0")
    fplot({x => paretoPDF(x, 3.0)}, 1.01, 2.5).display_name("k=3.0")
    hold(false)
    title("pareto PDF Plot")
    xlabel("x")
    ylabel("f(x)")
    legend(true)
    save("./tests/imgs/stats/continuous/pareto/paretopdf.png", "png")
    clear()

    fplot({x => paretoCDF(x, 1.0)}, 1.01, 2.5).display_name("k=1.0")
    hold(true)
    fplot({x => paretoCDF(x, 2.0)}, 1.01, 2.5).display_name("k=2.0")
    fplot({x => paretoCDF(x, 3.0)}, 1.01, 2.5).display_name("k=3.0")
    hold(false)
    title("pareto CDF Plot")
    xlabel("x")
    ylabel("F(x)")
    // legend(true)
    save("./tests/imgs/stats/continuous/pareto/paretocdf.png", "png")
    clear()
}


public func pearson3Plot() {

    fplot({x => pearson3PDF(x, 1.0)}, 0.0, 2.0).display_name("k=1")
    hold(true)
    fplot({x => pearson3PDF(x, 3.0)}, 0.0, 2.0).display_name("k=3")
    fplot({x => pearson3PDF(x, 5.0)}, 0.0, 2.0).display_name("k=5")
    hold(false)
    title("pearson3 PDF Plot")
    xlabel("x")
    ylabel("f(x)")
    legend(true)
    save("./tests/imgs/stats/continuous/pearson3/pearson3pdf.png", "png")
    clear()
}


public func powerlawPlot() {

    fplot({x => powerlawPDF(x, 1.0)}, 0.01, 0.99).display_name("k=1.0")
    hold(true)
    fplot({x => powerlawPDF(x, 2.0)}, 0.01, 0.99).display_name("k=2.0")
    fplot({x => powerlawPDF(x, 3.0)}, 0.01, 0.99).display_name("k=3.0")
    hold(false)
    title("powerlaw PDF Plot")
    xlabel("x")
    ylabel("f(x)")
    legend(true)
    save("./tests/imgs/stats/continuous/powerlaw/powerlawpdf.png", "png")
    clear()

    fplot({x => powerlawCDF(x, 1.0)}, 0.01, 0.99).display_name("k=1.0")
    hold(true)
    fplot({x => powerlawCDF(x, 2.0)}, 0.01, 0.99).display_name("k=2.0")
    fplot({x => powerlawCDF(x, 3.0)}, 0.01, 0.99).display_name("k=3.0")
    hold(false)
    title("powerlaw CDF Plot")
    xlabel("x")
    ylabel("F(x)")
    // legend(true)
    save("./tests/imgs/stats/continuous/powerlaw/powerlawcdf.png", "png")
    clear()
}


public func powerlognormPlot() {

    fplot({x => powerlognormPDF(x, 1.0, 1.0)}, 0.01, 1.5).display_name("a=b=1")
    hold(true)
    fplot({x => powerlognormPDF(x, 3.0, 3.0)}, 0.01, 1.5).display_name("a=b=3")
    fplot({x => powerlognormPDF(x, 5.0, 5.0)}, 0.01, 1.5).display_name("a=b=5")
    hold(false)
    title("powerlognorm PDF Plot")
    xlabel("x")
    ylabel("f(x)")
    legend(true)
    save("./tests/imgs/stats/continuous/powerlognorm/powerlognormpdf.png", "png")
    clear()

    fplot({x => powerlognormCDF(x, 1.0, 1.0)}, 0.01, 1.5).display_name("a=b=1")
    hold(true)
    fplot({x => powerlognormCDF(x, 3.0, 3.0)}, 0.01, 1.5).display_name("a=b=3")
    fplot({x => powerlognormCDF(x, 5.0, 5.0)}, 0.01, 1.5).display_name("a=b=5")
    hold(false)
    title("powerlognorm CDF Plot")
    xlabel("x")
    ylabel("F(x)")
    // legend(true)
    save("./tests/imgs/stats/continuous/powerlognorm/powerlognormcdf.png", "png")
    clear()
}


public func powernormPlot() {

    fplot({x => powernormPDF(x, 1.0)}, 0.01, 3.99).display_name("k=1.0")
    hold(true)
    fplot({x => powernormPDF(x, 2.0)}, 0.01, 3.99).display_name("k=2.0")
    fplot({x => powernormPDF(x, 3.0)}, 0.01, 3.99).display_name("k=3.0")
    hold(false)
    title("powernorm PDF Plot")
    xlabel("x")
    ylabel("f(x)")
    legend(true)
    save("./tests/imgs/stats/continuous/powernorm/powernormpdf.png", "png")
    clear()

    fplot({x => powernormCDF(x, 1.0)}, 0.01, 3.99).display_name("k=1.0")
    hold(true)
    fplot({x => powernormCDF(x, 2.0)}, 0.01, 3.99).display_name("k=2.0")
    fplot({x => powernormCDF(x, 3.0)}, 0.01, 3.99).display_name("k=3.0")
    hold(false)
    title("powernorm CDF Plot")
    xlabel("x")
    ylabel("F(x)")
    // legend(true)
    save("./tests/imgs/stats/continuous/powernorm/powernormcdf.png", "png")
    clear()
}


public func rayleighPlot() {

    fplot({x => rayleighPDF(x)}, 0.01, 3.0)
    title("rayleigh PDF Plot")
    xlabel("x")
    ylabel("f(x)")
    save("./tests/imgs/stats/continuous/rayleigh/rayleighpdf.png", "png")
    clear()

    fplot({x => rayleighCDF(x)}, 0.01, 3.0)
    title("rayleigh CDF Plot")
    xlabel("x")
    ylabel("F(x)")
    save("./tests/imgs/stats/continuous/rayleigh/rayleighcdf.png", "png")
    clear()
}


public func rdistPlot() {

    fplot({x => rdistPDF(x, 1.0)}, -0.99, 0.99).display_name("k=1.0")
    hold(true)
    fplot({x => rdistPDF(x, 2.0)}, -0.99, 0.99).display_name("k=2.0")
    fplot({x => rdistPDF(x, 3.0)}, -0.99, 0.99).display_name("k=3.0")
    hold(false)
    title("rdist PDF Plot")
    xlabel("x")
    ylabel("f(x)")
    legend(true)
    save("./tests/imgs/stats/continuous/rdist/rdistpdf.png", "png")
    clear()

    fplot({x => rdistCDF(x, 1.0)}, -0.99, 0.99).display_name("k=1.0")
    hold(true)
    fplot({x => rdistCDF(x, 2.0)}, -0.99, 0.99).display_name("k=2.0")
    fplot({x => rdistCDF(x, 3.0)}, -0.99, 0.99).display_name("k=3.0")
    hold(false)
    title("rdist CDF Plot")
    xlabel("x")
    ylabel("F(x)")
    // legend(true)
    save("./tests/imgs/stats/continuous/rdist/rdistcdf.png", "png")
    clear()
}


public func recipinvgaussPlot() {

    fplot({x => recipinvgaussPDF(x, 1.0)}, 0.01, 4.99).display_name("k=1.0")
    hold(true)
    fplot({x => recipinvgaussPDF(x, 2.0)}, 0.01, 4.99).display_name("k=2.0")
    fplot({x => recipinvgaussPDF(x, 3.0)}, 0.01, 4.99).display_name("k=3.0")
    hold(false)
    title("recipinvgauss PDF Plot")
    xlabel("x")
    ylabel("f(x)")
    legend(true)
    save("./tests/imgs/stats/continuous/recipinvgauss/recipinvgausspdf.png", "png")
    clear()

    fplot({x => recipinvgaussCDF(x, 1.0)}, 0.01, 4.99).display_name("k=1.0")
    hold(true)
    fplot({x => recipinvgaussCDF(x, 2.0)}, 0.01, 4.99).display_name("k=2.0")
    fplot({x => recipinvgaussCDF(x, 3.0)}, 0.01, 4.99).display_name("k=3.0")
    hold(false)
    title("recipinvgauss CDF Plot")
    xlabel("x")
    ylabel("F(x)")
    // legend(true)
    save("./tests/imgs/stats/continuous/recipinvgauss/recipinvgausscdf.png", "png")
    clear()
}


public func semicircularPlot() {

    fplot({x => semicircularPDF(x)}, -0.99, 0.99)
    title("semicircular PDF Plot")
    xlabel("x")
    ylabel("f(x)")
    save("./tests/imgs/stats/continuous/semicircular/semicircularpdf.png", "png")
    clear()

    fplot({x => semicircularCDF(x)}, -0.99, 0.99)
    title("semicircular CDF Plot")
    xlabel("x")
    ylabel("F(x)")
    save("./tests/imgs/stats/continuous/semicircular/semicircularcdf.png", "png")
    clear()
}


public func skewcauchyPlot() {

    fplot({x => skewcauchyPDF(x, -0.5)}, -5.0, 4.99).display_name("k=-0.5")
    hold(true)
    fplot({x => skewcauchyPDF(x, 0.2)}, -5.0, 4.99).display_name("k=0.2")
    fplot({x => skewcauchyPDF(x, 0.5)}, -5.0, 4.99).display_name("k=0.5")
    hold(false)
    title("skewcauchy PDF Plot")
    xlabel("x")
    ylabel("f(x)")
    legend(true)
    save("./tests/imgs/stats/continuous/skewcauchy/skewcauchypdf.png", "png")
    clear()

    fplot({x => skewcauchyCDF(x, -0.5)}, -5.0, 4.99).display_name("k=-0.5")
    hold(true)
    fplot({x => skewcauchyCDF(x, 0.2)}, -5.0, 4.99).display_name("k=0.2")
    fplot({x => skewcauchyCDF(x, 0.5)}, -5.0, 4.99).display_name("k=0.5")
    hold(false)
    title("skewcauchy CDF Plot")
    xlabel("x")
    ylabel("F(x)")
    // legend(true)
    save("./tests/imgs/stats/continuous/skewcauchy/skewcauchycdf.png", "png")
    clear()
}


public func tPlot() {

    fplot({x => tPDF(x, 1)}, -5.0, 5.0).display_name("a = 1.0")
    hold(true)
    fplot({x => tPDF(x, 3)}, -5.0, 5.0).display_name("a = 3.0")
    fplot({x => tPDF(x, 5)}, -5.0, 5.0).display_name("a = 5.0")
    hold(false)
    title("T PDF Plot")
    xlabel("x")
    ylabel("f(x)")
    legend(true)
    save("./tests/imgs/stats/continuous/t/tpdf.png", "png")
    clear()

}


public func truncexponPlot() {

    fplot({x => truncexponPDF(x, 1.0)}, 0.01, 0.99).display_name("k=1")
    hold(true)
    fplot({x => truncexponPDF(x, 3.0)}, 0.01, 2.99).display_name("k=3")
    fplot({x => truncexponPDF(x, 5.0)}, 0.01, 4.99).display_name("k=5")
    hold(false)
    title("truncexpon PDF Plot")
    xlabel("x")
    ylabel("f(x)")
    legend(true)
    save("./tests/imgs/stats/continuous/truncexpon/truncexponpdf.png", "png")
    clear()

    fplot({x => truncexponCDF(x, 1.0)}, 0.01, 0.99).display_name("k=1")
    hold(true)
    fplot({x => truncexponCDF(x, 3.0)}, 0.01, 2.99).display_name("k=3")
    fplot({x => truncexponCDF(x, 5.0)}, 0.01, 4.99).display_name("k=5")
    hold(false)
    title("truncexpon CDF Plot")
    xlabel("x")
    ylabel("F(x)")
    // legend(true)
    save("./tests/imgs/stats/continuous/truncexpon/truncexponcdf.png", "png")
    clear()
}


public func truncweibull_minPlot() {

    fplot({x => truncweibull_minPDF(x, 1.0, 2.0, 3.0)}, 1.01, 1.99).display_name("a=1,b=2,c=3")
    hold(true)
    fplot({x => truncweibull_minPDF(x, 1.0, 3.0, 2.0)}, 1.01, 2.99).display_name("a=1,b=3,c=2")
    fplot({x => truncweibull_minPDF(x, 1.0, 3.0, 1.0)}, 1.01, 2.99).display_name("a=1,b=3,c=1")
    hold(false)
    title("truncweibull_min PDF Plot")
    xlabel("x")
    ylabel("f(x)")
    legend(true)
    save("./tests/imgs/stats/continuous/truncweibull_min/truncweibull_minpdf.png", "png")
    clear()

    fplot({x => truncweibull_minCDF(x, 1.0, 2.0, 3.0)}, 1.01, 1.99).display_name("a=1,b=2,c=3")
    hold(true)
    fplot({x => truncweibull_minCDF(x, 1.0, 3.0, 2.0)}, 1.01, 2.99).display_name("a=1,b=3,c=2")
    fplot({x => truncweibull_minCDF(x, 1.0, 3.0, 1.0)}, 1.01, 2.99).display_name("a=1,b=3,c=1")
    hold(false)
    title("truncweibull_min CDF Plot")
    xlabel("x")
    ylabel("F(x)")
    // legend(true)
    save("./tests/imgs/stats/continuous/truncweibull_min/truncweibull_mincdf.png", "png")
    clear()
}


public func waldPlot() {

    fplot({x => waldPDF(x)}, 0.02, 3.99)
    title("wald PDF Plot")
    xlabel("x")
    ylabel("f(x)")
    save("./tests/imgs/stats/continuous/wald/waldpdf.png", "png")
    clear()

    fplot({x => waldCDF(x)}, 0.02, 3.99)
    title("wald CDF Plot")
    xlabel("x")
    ylabel("F(x)")
    save("./tests/imgs/stats/continuous/wald/waldcdf.png", "png")
    clear()
}


public func weibull_maxPlot() {

    fplot({x => weibull_maxPDF(x, 1.0)}, -2.0, -0.01).display_name("k=1")
    hold(true)
    fplot({x => weibull_maxPDF(x, 3.0)}, -2.0, -0.01).display_name("k=3")
    fplot({x => weibull_maxPDF(x, 5.0)}, -2.0, -0.01).display_name("k=5")
    hold(false)
    title("weibull_max PDF Plot")
    xlabel("x")
    ylabel("f(x)")
    legend(true)
    save("./tests/imgs/stats/continuous/weibull_max/weibull_maxpdf.png", "png")
    clear()

    fplot({x => weibull_maxCDF(x, 1.0)}, -2.0, -0.01).display_name("k=1")
    hold(true)
    fplot({x => weibull_maxCDF(x, 3.0)}, -2.0, -0.01).display_name("k=3")
    fplot({x => weibull_maxCDF(x, 5.0)}, -2.0, -0.01).display_name("k=5")
    hold(false)
    title("weibull_max CDF Plot")
    xlabel("x")
    ylabel("F(x)")
    // legend(true)
    save("./tests/imgs/stats/continuous/weibull_max/weibull_maxcdf.png", "png")
    clear()
}


public func weibull_minPlot() {

    fplot({x => weibull_minPDF(x, 1.0)}, 0.01, 2.0).display_name("k=1")
    hold(true)
    fplot({x => weibull_minPDF(x, 3.0)}, 0.01, 2.0).display_name("k=3")
    fplot({x => weibull_minPDF(x, 5.0)}, 0.01, 2.0).display_name("k=5")
    hold(false)
    title("weibull_min PDF Plot")
    xlabel("x")
    ylabel("f(x)")
    legend(true)
    save("./tests/imgs/stats/continuous/weibull_min/weibull_minpdf.png", "png")
    clear()

    fplot({x => weibull_minCDF(x, 1.0)}, 0.01, 2.0).display_name("k=1")
    hold(true)
    fplot({x => weibull_minCDF(x, 3.0)}, 0.01, 2.0).display_name("k=3")
    fplot({x => weibull_minCDF(x, 5.0)}, 0.01, 2.0).display_name("k=5")
    hold(false)
    title("weibull_min CDF Plot")
    xlabel("x")
    ylabel("F(x)")
    // legend(true)
    save("./tests/imgs/stats/continuous/weibull_min/weibull_mincdf.png", "png")
    clear()
}


public func wrapcauchyPlot() {

    fplot({x => wrapcauchyPDF(x, 0.2)}, 0.01, 6.2).display_name("k=0.2")
    hold(true)
    fplot({x => wrapcauchyPDF(x, 0.5)}, 0.01, 6.2).display_name("k=0.5")
    fplot({x => wrapcauchyPDF(x, 0.8)}, 0.01, 6.2).display_name("k=0.8")
    hold(false)
    title("wrapcauchy PDF Plot")
    xlabel("x")
    ylabel("f(x)")
    legend(true)
    save("./tests/imgs/stats/continuous/wrapcauchy/wrapcauchypdf.png", "png")
    clear()

    fplot({x => wrapcauchyCDF(x, 0.2)}, 0.01, 6.2).display_name("k=0.2")
    hold(true)
    fplot({x => wrapcauchyCDF(x, 0.5)}, 0.01, 6.2).display_name("k=0.5")
    fplot({x => wrapcauchyCDF(x, 0.8)}, 0.01, 6.2).display_name("k=0.8")
    hold(false)
    title("wrapcauchy CDF Plot")
    xlabel("x")
    ylabel("F(x)")
    // legend(true)
    save("./tests/imgs/stats/continuous/wrapcauchy/wrapcauchycdf.png", "png")
    clear()
}


public func continuousPlot() {
    let f = gcf()
    f.height(f.height() / 2)
    // besselJPlot()
    // alphaPlot()
    // anglitPlot()
    // arcsinePlot()
    // argusPlot()
    // betaPlot()
    // betaprimePlot()
    // bradfordPlot()
    // burrPlot()
    // burr12Plot()
    // cauchyPlot()
    // chiPlot()
    // chisqPlot()
    // cosinePlot()
    // crystalballPlot()
    // dgammaPlot()
    // dweibullPlot()
    // erlangPlot()
    // exponPlot()
    // exponnormPlot()
    // exponweibPlot()
    // exponpowPlot()
    // fPlot()
    // fatiguelifePlot()
    // fiskPlot()
    // foldcauchyPlot()
    // foldnormPlot()
    // gammaPlot()
    // gausshyperPlot()
    // genlogisticPlot()
    // gennormPlot()
    // genexponPlot()
    // genextremePlot()
    // gumbel_lPlot()
    // gumbel_rPlot()
    // gengammaPlot()
    // genhalflogisticPlot()
    // gilbratPlot()
    // gompertzPlot()
    // halfcauchyPlot()
    // halfgennormPlot()
    // halflogisticPlot() 
    // halfnormPlot()
    // hypsecantPlot()
    // invgammaPlot()
    // invgaussPlot()
    // invweibullPlot()
    // johnsonsbPlot()
    // johnsonsuPlot()
    // kappa3Plot()
    // kappa4Plot()
    // laplace_asymmetricPlot()
    // laplacePlot()
    // levy_lPlot()
    // levyPlot()
    // loggammaPlot()
    // logisticPlot()
    // loglaplacePlot()
    // lognormalPlot()
    // loguniformPlot()
    // lomaxPlot()
    // maxwellPlot() 
    // mielkePlot()
    // moyalPlot()
    // nakagamiPlot()
    // norminvgaussPlot()
    // paretoPlot()
    // pearson3Plot()
    // powerlawPlot()
    // powerlognormPlot()
    // powernormPlot()
    // rayleighPlot()
    // rdistPlot()
    // recipinvgaussPlot()
    // semicircularPlot()
    // skewcauchyPlot()
    // tPlot()
    // truncexponPlot()
    // truncweibull_minPlot()
    // vonmisesPlot()
    // waldPlot()
    // weibull_maxPlot()
    // weibull_minPlot()
    wrapcauchyPlot()
    f.height(f.height() * 2)
}