calipy.dist.distributions (API)
- class calipy.dist.distributions.CalipyDistribution(node_structure=None, node_name=None)
Bases:
CalipyNodeBase class for all auto-generated Calipy distributions. It wraps a Pyro distribution class and associates a NodeStructure (or any additional dimension-aware info). CalipyDistributions are Subclasses of CalipyNode and therefore come together with a method forward(input_vars, observations, subsample_index, **kwargs) method. The forward() method of distributions can be seen as a way of passing parameters and sampling; the format of inputs and observations is documented within the methods create_input_vars or create_observations that help turn data into the DataTuples needed as input for .forward(). Al CalipyDistributions come with a default_nodestructure consisting of just batch_dims and event_dims being a single dimension with either size 10 or 2.
CalipyDistribution is not usually called by the user, it is called by an script __init__.py in calipy.dist automatically executed during package import. The subclasses of CalipyDistribution are e.g. CalipyDistribution.Normal or CalipyDistribution.Gamma which can be accessed via calipy.dist.Normal or calipy.dist.Gamma
Example usage: Run line by line to investigate Class
# CalipyDistribution objects are CalipyNodes -------------------------- # # i) Imports and definitions import torch import calipy from calipy.base import NodeStructure from calipy.tensor import CalipyTensor from calipy.data import DataTuple # # ii) Invoke and investigate CalipyDistribution CalipyNormal = calipy.dist.Normal CalipyNormal.dists CalipyNormal.input_vars CalipyNormal.input_vars_schema # iii) Build a concrete Node normal_ns = NodeStructure(CalipyNormal) print(normal_ns) calipy_normal = CalipyNormal(node_structure = normal_ns, node_name = 'Normal') calipy_normal.id calipy_normal.node_structure CalipyNormal.default_nodestructure # Calling the forward method normal_dims = normal_ns.dims['batch_dims'] + normal_ns.dims['event_dims'] normal_ns_sizes = normal_dims.sizes mean = CalipyTensor(torch.zeros(normal_ns_sizes), normal_dims) standard_deviation = CalipyTensor(torch.ones(normal_ns_sizes), normal_dims) input_vars_normal = DataTuple(['loc', 'scale'], [mean, standard_deviation]) samples_normal = calipy_normal.forward(input_vars_normal) samples_normal samples_normal.dims # A more convenient way of creating the input_vars and observations data or # at least getting the info on the input signatures create_input_vars = CalipyNormal.create_input_vars help(create_input_vars) input_vars_normal_alt = create_input_vars(loc = mean, scale = standard_deviation) samples_normal_alt = calipy_normal.forward(input_vars_normal_alt) # Since distributions are nodes, we can illustrate them calipy_normal.dtype_chain calipy_normal.id render_1 = calipy_normal.render(input_vars_normal) render_1 render_2 = calipy_normal.render_comp_graph(input_vars_normal) render_2
- classmethod create_distribution_class(pyro_dist_cls)
Dynamically creates a subclass for a Pyro distribution.
- create_pyro_dist()
Instantiate the underlying Pyro distribution with stored parameters. (Sampling or dimension logic can be added later.)
- dists = {'AVFMultivariateNormal': <class 'calipy.dist.distributions.CalipyDistribution.AVFMultivariateNormal'>, 'AffineBeta': <class 'calipy.dist.distributions.CalipyDistribution.AffineBeta'>, 'AsymmetricLaplace': <class 'calipy.dist.distributions.CalipyDistribution.AsymmetricLaplace'>, 'Bernoulli': <class 'calipy.dist.distributions.CalipyDistribution.Bernoulli'>, 'Beta': <class 'calipy.dist.distributions.CalipyDistribution.Beta'>, 'BetaBinomial': <class 'calipy.dist.distributions.CalipyDistribution.BetaBinomial'>, 'Binomial': <class 'calipy.dist.distributions.CalipyDistribution.Binomial'>, 'Categorical': <class 'calipy.dist.distributions.CalipyDistribution.Categorical'>, 'Cauchy': <class 'calipy.dist.distributions.CalipyDistribution.Cauchy'>, 'Chi2': <class 'calipy.dist.distributions.CalipyDistribution.Chi2'>, 'CoalescentTimes': <class 'calipy.dist.distributions.CalipyDistribution.CoalescentTimes'>, 'CoalescentTimesWithRate': <class 'calipy.dist.distributions.CalipyDistribution.CoalescentTimesWithRate'>, 'ContinuousBernoulli': <class 'calipy.dist.distributions.CalipyDistribution.ContinuousBernoulli'>, 'Delta': <class 'calipy.dist.distributions.CalipyDistribution.Delta'>, 'Dirichlet': <class 'calipy.dist.distributions.CalipyDistribution.Dirichlet'>, 'DirichletMultinomial': <class 'calipy.dist.distributions.CalipyDistribution.DirichletMultinomial'>, 'DiscreteHMM': <class 'calipy.dist.distributions.CalipyDistribution.DiscreteHMM'>, 'Distribution': <class 'calipy.dist.distributions.CalipyDistribution.Distribution'>, 'Empirical': <class 'calipy.dist.distributions.CalipyDistribution.Empirical'>, 'ExpandedDistribution': <class 'calipy.dist.distributions.CalipyDistribution.ExpandedDistribution'>, 'Exponential': <class 'calipy.dist.distributions.CalipyDistribution.Exponential'>, 'ExponentialFamily': <class 'calipy.dist.distributions.CalipyDistribution.ExponentialFamily'>, 'ExtendedBetaBinomial': <class 'calipy.dist.distributions.CalipyDistribution.ExtendedBetaBinomial'>, 'ExtendedBinomial': <class 'calipy.dist.distributions.CalipyDistribution.ExtendedBinomial'>, 'FisherSnedecor': <class 'calipy.dist.distributions.CalipyDistribution.FisherSnedecor'>, 'FoldedDistribution': <class 'calipy.dist.distributions.CalipyDistribution.FoldedDistribution'>, 'Gamma': <class 'calipy.dist.distributions.CalipyDistribution.Gamma'>, 'GammaGaussianHMM': <class 'calipy.dist.distributions.CalipyDistribution.GammaGaussianHMM'>, 'GammaPoisson': <class 'calipy.dist.distributions.CalipyDistribution.GammaPoisson'>, 'GaussianHMM': <class 'calipy.dist.distributions.CalipyDistribution.GaussianHMM'>, 'GaussianMRF': <class 'calipy.dist.distributions.CalipyDistribution.GaussianMRF'>, 'GaussianScaleMixture': <class 'calipy.dist.distributions.CalipyDistribution.GaussianScaleMixture'>, 'Geometric': <class 'calipy.dist.distributions.CalipyDistribution.Geometric'>, 'GroupedNormalNormal': <class 'calipy.dist.distributions.CalipyDistribution.GroupedNormalNormal'>, 'Gumbel': <class 'calipy.dist.distributions.CalipyDistribution.Gumbel'>, 'HalfCauchy': <class 'calipy.dist.distributions.CalipyDistribution.HalfCauchy'>, 'HalfNormal': <class 'calipy.dist.distributions.CalipyDistribution.HalfNormal'>, 'ImproperUniform': <class 'calipy.dist.distributions.CalipyDistribution.ImproperUniform'>, 'Independent': <class 'calipy.dist.distributions.CalipyDistribution.Independent'>, 'IndependentHMM': <class 'calipy.dist.distributions.CalipyDistribution.IndependentHMM'>, 'InverseGamma': <class 'calipy.dist.distributions.CalipyDistribution.InverseGamma'>, 'Kumaraswamy': <class 'calipy.dist.distributions.CalipyDistribution.Kumaraswamy'>, 'LKJ': <class 'calipy.dist.distributions.CalipyDistribution.LKJ'>, 'LKJCholesky': <class 'calipy.dist.distributions.CalipyDistribution.LKJCholesky'>, 'LKJCorrCholesky': <class 'calipy.dist.distributions.CalipyDistribution.LKJCorrCholesky'>, 'Laplace': <class 'calipy.dist.distributions.CalipyDistribution.Laplace'>, 'LinearHMM': <class 'calipy.dist.distributions.CalipyDistribution.LinearHMM'>, 'LogNormal': <class 'calipy.dist.distributions.CalipyDistribution.LogNormal'>, 'LogNormalNegativeBinomial': <class 'calipy.dist.distributions.CalipyDistribution.LogNormalNegativeBinomial'>, 'Logistic': <class 'calipy.dist.distributions.CalipyDistribution.Logistic'>, 'LogisticNormal': <class 'calipy.dist.distributions.CalipyDistribution.LogisticNormal'>, 'LowRankMultivariateNormal': <class 'calipy.dist.distributions.CalipyDistribution.LowRankMultivariateNormal'>, 'MaskedDistribution': <class 'calipy.dist.distributions.CalipyDistribution.MaskedDistribution'>, 'MaskedMixture': <class 'calipy.dist.distributions.CalipyDistribution.MaskedMixture'>, 'MixtureOfDiagNormals': <class 'calipy.dist.distributions.CalipyDistribution.MixtureOfDiagNormals'>, 'MixtureOfDiagNormalsSharedCovariance': <class 'calipy.dist.distributions.CalipyDistribution.MixtureOfDiagNormalsSharedCovariance'>, 'MixtureSameFamily': <class 'calipy.dist.distributions.CalipyDistribution.MixtureSameFamily'>, 'Multinomial': <class 'calipy.dist.distributions.CalipyDistribution.Multinomial'>, 'MultivariateNormal': <class 'calipy.dist.distributions.CalipyDistribution.MultivariateNormal'>, 'MultivariateStudentT': <class 'calipy.dist.distributions.CalipyDistribution.MultivariateStudentT'>, 'NanMaskedMultivariateNormal': <class 'calipy.dist.distributions.CalipyDistribution.NanMaskedMultivariateNormal'>, 'NanMaskedNormal': <class 'calipy.dist.distributions.CalipyDistribution.NanMaskedNormal'>, 'NegativeBinomial': <class 'calipy.dist.distributions.CalipyDistribution.NegativeBinomial'>, 'Normal': <class 'calipy.dist.distributions.CalipyDistribution.Normal'>, 'OMTMultivariateNormal': <class 'calipy.dist.distributions.CalipyDistribution.OMTMultivariateNormal'>, 'OneHotCategorical': <class 'calipy.dist.distributions.CalipyDistribution.OneHotCategorical'>, 'OneHotCategoricalStraightThrough': <class 'calipy.dist.distributions.CalipyDistribution.OneHotCategoricalStraightThrough'>, 'OneOneMatching': <class 'calipy.dist.distributions.CalipyDistribution.OneOneMatching'>, 'OneTwoMatching': <class 'calipy.dist.distributions.CalipyDistribution.OneTwoMatching'>, 'OrderedLogistic': <class 'calipy.dist.distributions.CalipyDistribution.OrderedLogistic'>, 'Pareto': <class 'calipy.dist.distributions.CalipyDistribution.Pareto'>, 'Poisson': <class 'calipy.dist.distributions.CalipyDistribution.Poisson'>, 'ProjectedNormal': <class 'calipy.dist.distributions.CalipyDistribution.ProjectedNormal'>, 'Rejector': <class 'calipy.dist.distributions.CalipyDistribution.Rejector'>, 'RelaxedBernoulli': <class 'calipy.dist.distributions.CalipyDistribution.RelaxedBernoulli'>, 'RelaxedBernoulliStraightThrough': <class 'calipy.dist.distributions.CalipyDistribution.RelaxedBernoulliStraightThrough'>, 'RelaxedOneHotCategorical': <class 'calipy.dist.distributions.CalipyDistribution.RelaxedOneHotCategorical'>, 'RelaxedOneHotCategoricalStraightThrough': <class 'calipy.dist.distributions.CalipyDistribution.RelaxedOneHotCategoricalStraightThrough'>, 'SineBivariateVonMises': <class 'calipy.dist.distributions.CalipyDistribution.SineBivariateVonMises'>, 'SineSkewed': <class 'calipy.dist.distributions.CalipyDistribution.SineSkewed'>, 'SkewLogistic': <class 'calipy.dist.distributions.CalipyDistribution.SkewLogistic'>, 'SoftAsymmetricLaplace': <class 'calipy.dist.distributions.CalipyDistribution.SoftAsymmetricLaplace'>, 'SoftLaplace': <class 'calipy.dist.distributions.CalipyDistribution.SoftLaplace'>, 'SpanningTree': <class 'calipy.dist.distributions.CalipyDistribution.SpanningTree'>, 'Stable': <class 'calipy.dist.distributions.CalipyDistribution.Stable'>, 'StudentT': <class 'calipy.dist.distributions.CalipyDistribution.StudentT'>, 'TorchDistribution': <class 'calipy.dist.distributions.CalipyDistribution.TorchDistribution'>, 'TransformedDistribution': <class 'calipy.dist.distributions.CalipyDistribution.TransformedDistribution'>, 'TruncatedPolyaGamma': <class 'calipy.dist.distributions.CalipyDistribution.TruncatedPolyaGamma'>, 'Uniform': <class 'calipy.dist.distributions.CalipyDistribution.Uniform'>, 'Unit': <class 'calipy.dist.distributions.CalipyDistribution.Unit'>, 'VonMises': <class 'calipy.dist.distributions.CalipyDistribution.VonMises'>, 'VonMises3D': <class 'calipy.dist.distributions.CalipyDistribution.VonMises3D'>, 'Weibull': <class 'calipy.dist.distributions.CalipyDistribution.Weibull'>, 'Wishart': <class 'calipy.dist.distributions.CalipyDistribution.Wishart'>, 'ZeroInflatedDistribution': <class 'calipy.dist.distributions.CalipyDistribution.ZeroInflatedDistribution'>, 'ZeroInflatedNegativeBinomial': <class 'calipy.dist.distributions.CalipyDistribution.ZeroInflatedNegativeBinomial'>, 'ZeroInflatedPoisson': <class 'calipy.dist.distributions.CalipyDistribution.ZeroInflatedPoisson'>}
- input_vars_schema: InputSchema | None = None
- name = 'CalipyDistribution'
- observation_schema: InputSchema | None = None
- calipy.dist.distributions.build_default_nodestructure(class_name)
- calipy.dist.distributions.generate_init_for_distribution(dist_cls, base_cls)
- calipy.dist.distributions.generate_schemas_from_pyro(pyro_dist_cls: type) tuple
Generates input_vars and observation schemas from a Pyro distribution class.