pystatistics 2.2.0__tar.gz → 2.3.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {pystatistics-2.2.0 → pystatistics-2.3.0}/CHANGELOG.md +76 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/PKG-INFO +66 -66
- {pystatistics-2.2.0 → pystatistics-2.3.0}/README.md +63 -65
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pyproject.toml +7 -1
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/__init__.py +1 -1
- pystatistics-2.3.0/pystatistics/mvnmle/backends/_em_batched.py +44 -0
- pystatistics-2.3.0/pystatistics/mvnmle/backends/_em_batched_np.py +416 -0
- pystatistics-2.3.0/pystatistics/mvnmle/backends/_em_batched_patterns.py +112 -0
- pystatistics-2.3.0/pystatistics/mvnmle/backends/_em_batched_torch.py +381 -0
- pystatistics-2.3.0/pystatistics/nonparametric_mcar/__init__.py +45 -0
- pystatistics-2.3.0/pystatistics/nonparametric_mcar/hsic.py +237 -0
- pystatistics-2.3.0/pystatistics/nonparametric_mcar/missmech.py +254 -0
- pystatistics-2.3.0/pystatistics/nonparametric_mcar/propensity.py +285 -0
- pystatistics-2.3.0/pystatistics/nonparametric_mcar/result.py +67 -0
- pystatistics-2.3.0/tests/nonparametric_mcar/test_hsic.py +112 -0
- pystatistics-2.3.0/tests/nonparametric_mcar/test_missmech.py +110 -0
- pystatistics-2.3.0/tests/nonparametric_mcar/test_propensity.py +145 -0
- pystatistics-2.3.0/tests/timeseries/__init__.py +0 -0
- pystatistics-2.2.0/pystatistics/mvnmle/backends/_em_batched.py +0 -897
- {pystatistics-2.2.0 → pystatistics-2.3.0}/.github/workflows/publish.yml +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/.github/workflows/trigger-docs-rebuild.yml +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/.gitignore +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/.release/CHECKLIST.md +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/.release/UNRELEASED.md +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/.release/release.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/CLAUDE.md +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/LICENSE +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/benchmarks/mvnmle_bench.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/docs/DESIGN.md +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/docs/Forge.md +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/docs/GPU_BACKEND_NOTES.md +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/docs/Makefile +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/docs/PYSTATSBIO_CONTEXT.md +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/docs/ROADMAP.md +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/docs/_static/custom.css +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/docs/anova.rst +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/docs/conf.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/docs/core.rst +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/docs/descriptive.rst +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/docs/hypothesis.rst +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/docs/index.rst +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/docs/mixed.rst +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/docs/montecarlo.rst +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/docs/mvnmle.rst +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/docs/regression.rst +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/docs/survival.rst +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/GPU_BACKEND_CONVENTION.md +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/anova/__init__.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/anova/_common.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/anova/_contrasts.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/anova/_levene.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/anova/_posthoc.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/anova/_repeated.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/anova/_ss.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/anova/design.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/anova/solution.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/anova/solvers.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/core/__init__.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/core/capabilities.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/core/compute/__init__.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/core/compute/device.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/core/compute/linalg/__init__.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/core/compute/linalg/batched.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/core/compute/linalg/cholesky.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/core/compute/linalg/determinant.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/core/compute/linalg/qr.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/core/compute/linalg/solve.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/core/compute/linalg/svd.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/core/compute/optimization/__init__.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/core/compute/optimization/convergence.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/core/compute/precision.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/core/compute/timing.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/core/compute/tolerances.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/core/datasource.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/core/exceptions.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/core/protocols.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/core/result.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/core/validation.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/descriptive/__init__.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/descriptive/_missing.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/descriptive/_quantile_types.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/descriptive/backends/__init__.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/descriptive/backends/cpu.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/descriptive/backends/gpu.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/descriptive/design.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/descriptive/solution.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/descriptive/solvers.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/gam/__init__.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/gam/_basis.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/gam/_common.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/gam/_fit.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/gam/_gam.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/gam/_gcv.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/gam/_smooth.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/gam/backends/__init__.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/gam/backends/_gpu_family.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/gam/backends/gpu_pirls.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/gam/solution.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/hypothesis/__init__.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/hypothesis/_common.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/hypothesis/_design_factories.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/hypothesis/_p_adjust.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/hypothesis/backends/__init__.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/hypothesis/backends/_chisq_test.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/hypothesis/backends/_fisher_test.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/hypothesis/backends/_ks_test.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/hypothesis/backends/_prop_test.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/hypothesis/backends/_t_test.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/hypothesis/backends/_var_test.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/hypothesis/backends/_wilcox_test.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/hypothesis/backends/cpu.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/hypothesis/backends/gpu.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/hypothesis/design.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/hypothesis/solution.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/hypothesis/solvers.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/mixed/__init__.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/mixed/_common.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/mixed/_deviance.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/mixed/_pirls.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/mixed/_pls.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/mixed/_random_effects.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/mixed/_satterthwaite.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/mixed/design.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/mixed/solution.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/mixed/solvers.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/montecarlo/__init__.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/montecarlo/_ci.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/montecarlo/_common.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/montecarlo/_influence.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/montecarlo/backends/__init__.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/montecarlo/backends/cpu.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/montecarlo/backends/gpu.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/montecarlo/design.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/montecarlo/solution.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/montecarlo/solvers.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/multinomial/__init__.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/multinomial/_common.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/multinomial/_likelihood.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/multinomial/_solver.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/multinomial/backends/__init__.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/multinomial/backends/gpu_likelihood.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/multinomial/solution.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/multivariate/__init__.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/multivariate/_common.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/multivariate/_factor.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/multivariate/_pca.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/multivariate/_rotation.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/multivariate/backends/__init__.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/multivariate/backends/gpu_pca.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/mvnmle/__init__.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/mvnmle/_monotone.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/mvnmle/_objectives/__init__.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/mvnmle/_objectives/base.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/mvnmle/_objectives/cpu.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/mvnmle/_objectives/gpu_fp32.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/mvnmle/_objectives/gpu_fp64.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/mvnmle/_objectives/parameterizations.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/mvnmle/_utils.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/mvnmle/backends/__init__.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/mvnmle/backends/_squarem.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/mvnmle/backends/cpu.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/mvnmle/backends/em.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/mvnmle/backends/gpu.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/mvnmle/datasets.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/mvnmle/design.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/mvnmle/mcar_test.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/mvnmle/patterns.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/mvnmle/solution.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/mvnmle/solvers.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/ordinal/__init__.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/ordinal/_common.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/ordinal/_likelihood.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/ordinal/_solver.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/ordinal/backends/__init__.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/ordinal/backends/gpu_likelihood.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/ordinal/solution.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/py.typed +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/regression/__init__.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/regression/_formatting.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/regression/_glm.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/regression/_linear.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/regression/_nb_theta.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/regression/backends/__init__.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/regression/backends/cpu.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/regression/backends/cpu_glm.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/regression/backends/gpu.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/regression/backends/gpu_glm.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/regression/design.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/regression/families.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/regression/solution.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/regression/solvers.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/survival/__init__.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/survival/_common.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/survival/_cox.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/survival/_discrete.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/survival/_km.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/survival/_logrank.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/survival/backends/__init__.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/survival/backends/cpu.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/survival/backends/gpu.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/survival/design.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/survival/solution.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/survival/solvers.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/timeseries/__init__.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/timeseries/_acf.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/timeseries/_arima_batch.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/timeseries/_arima_factored.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/timeseries/_arima_fit.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/timeseries/_arima_forecast.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/timeseries/_arima_kalman.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/timeseries/_arima_likelihood.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/timeseries/_arima_order.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/timeseries/_common.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/timeseries/_decomposition.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/timeseries/_differencing.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/timeseries/_ets_fit.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/timeseries/_ets_forecast.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/timeseries/_ets_models.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/timeseries/_stationarity.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/timeseries/_whittle.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/timeseries/backends/__init__.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/timeseries/backends/whittle_batch_gpu.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/timeseries/backends/whittle_gpu.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/anova/__init__.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/anova/conftest.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/anova/test_contrasts.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/anova/test_design.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/anova/test_factorial.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/anova/test_levene.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/anova/test_oneway.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/anova/test_posthoc.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/anova/test_r_validation.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/anova/test_repeated_measures.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/benchmark_gpu.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/conftest.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/core/test_datasource.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/core/test_exceptions.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/core/test_result.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/core/test_validation.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/descriptive/__init__.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/descriptive/conftest.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/descriptive/test_cor.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/descriptive/test_cov.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/descriptive/test_describe.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/descriptive/test_gpu.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/descriptive/test_missing.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/descriptive/test_moments.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/descriptive/test_quantile.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/descriptive/test_r_validation.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/anova_ancova_meta.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/anova_ancova_r_results.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/anova_bonferroni_meta.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/anova_bonferroni_r_results.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/anova_eta_meta.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/anova_eta_r_results.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/anova_levene_meta.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/anova_levene_r_results.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/anova_oneway_balanced_meta.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/anova_oneway_balanced_r_results.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/anova_oneway_unbalanced_meta.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/anova_oneway_unbalanced_r_results.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/anova_rm_mixed_meta.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/anova_rm_mixed_r_results.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/anova_rm_within_meta.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/anova_rm_within_r_results.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/anova_tukey_meta.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/anova_tukey_r_results.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/anova_twoway_balanced_meta.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/anova_twoway_balanced_r_results.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/anova_twoway_unbalanced_meta.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/anova_twoway_unbalanced_r_results.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/basic_100x3.csv +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/basic_100x3_meta.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/basic_100x3_r_results.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/collinear_almost.csv +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/collinear_almost_meta.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/collinear_almost_r_results.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/desc_basic_100x5.csv +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/desc_basic_100x5_meta.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/desc_basic_100x5_r_results.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/desc_constant_column.csv +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/desc_constant_column_meta.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/desc_constant_column_r_results.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/desc_extreme_values.csv +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/desc_extreme_values_meta.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/desc_extreme_values_r_results.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/desc_large_1000x10.csv +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/desc_large_1000x10_meta.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/desc_large_1000x10_r_results.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/desc_nan_columnwise.csv +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/desc_nan_columnwise_meta.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/desc_nan_columnwise_r_results.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/desc_nan_scattered.csv +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/desc_nan_scattered_meta.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/desc_nan_scattered_r_results.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/desc_negative_correlation.csv +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/desc_negative_correlation_meta.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/desc_negative_correlation_r_results.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/desc_perfect_correlation.csv +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/desc_perfect_correlation_meta.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/desc_perfect_correlation_r_results.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/desc_single_column.csv +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/desc_single_column_meta.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/desc_single_column_r_results.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/desc_ties.csv +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/desc_ties_meta.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/desc_ties_r_results.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/different_scales.csv +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/different_scales_meta.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/different_scales_r_results.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/generate_anova_fixtures.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/generate_descriptive_fixtures.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/generate_fixtures.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/generate_glm_fixtures.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/generate_hypothesis_fixtures.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/generate_mixed_fixtures.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/generate_montecarlo_fixtures.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/generate_survival_fixtures.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/glm_binomial_balanced.csv +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/glm_binomial_balanced_meta.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/glm_binomial_balanced_r_results.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/glm_binomial_basic.csv +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/glm_binomial_basic_meta.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/glm_binomial_basic_r_results.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/glm_binomial_large.csv +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/glm_binomial_large_meta.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/glm_binomial_large_r_results.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/glm_binomial_separated.csv +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/glm_binomial_separated_meta.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/glm_binomial_separated_r_results.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/glm_gaussian_basic.csv +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/glm_gaussian_basic_meta.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/glm_gaussian_basic_r_results.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/glm_gaussian_large.csv +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/glm_gaussian_large_meta.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/glm_gaussian_large_r_results.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/glm_poisson_basic.csv +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/glm_poisson_basic_meta.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/glm_poisson_basic_r_results.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/glm_poisson_large_counts.csv +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/glm_poisson_large_counts_meta.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/glm_poisson_large_counts_r_results.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/glm_poisson_zeros.csv +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/glm_poisson_zeros_meta.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/glm_poisson_zeros_r_results.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/high_noise.csv +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/high_noise_meta.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/high_noise_r_results.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/htest_chisq_2x2_yates_meta.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/htest_chisq_2x2_yates_r_results.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/htest_chisq_3x3_meta.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/htest_chisq_3x3_r_results.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/htest_chisq_gof_meta.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/htest_chisq_gof_r_results.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/htest_chisq_gof_unequal_meta.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/htest_chisq_gof_unequal_r_results.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/htest_fisher_2x2_less_meta.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/htest_fisher_2x2_less_r_results.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/htest_fisher_2x2_meta.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/htest_fisher_2x2_r_results.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/htest_fisher_3x3_meta.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/htest_fisher_3x3_r_results.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/htest_ks_onesample_norm_meta.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/htest_ks_onesample_norm_r_results.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/htest_ks_twosample_meta.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/htest_ks_twosample_r_results.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/htest_prop_onesample_meta.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/htest_prop_onesample_r_results.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/htest_prop_twosample_meta.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/htest_prop_twosample_r_results.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/htest_t_onesample_meta.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/htest_t_onesample_r_results.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/htest_t_paired_meta.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/htest_t_paired_r_results.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/htest_t_pooled_meta.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/htest_t_pooled_r_results.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/htest_t_welch_meta.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/htest_t_welch_r_results.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/htest_var_basic_meta.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/htest_var_basic_r_results.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/htest_wilcox_ranksum_meta.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/htest_wilcox_ranksum_r_results.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/htest_wilcox_signed_meta.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/htest_wilcox_signed_r_results.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/ill_conditioned.csv +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/ill_conditioned_meta.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/ill_conditioned_r_results.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/large_coeffs.csv +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/large_coeffs_meta.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/large_coeffs_r_results.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/mc_boot_ci_90_meta.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/mc_boot_ci_90_r_results.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/mc_boot_ci_normal_meta.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/mc_boot_ci_normal_r_results.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/mc_boot_ci_skewed_meta.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/mc_boot_ci_skewed_r_results.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/mc_boot_mean_balanced_meta.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/mc_boot_mean_balanced_r_results.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/mc_boot_mean_ordinary_meta.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/mc_boot_mean_ordinary_r_results.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/mc_boot_median_meta.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/mc_boot_median_r_results.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/mc_boot_variance_meta.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/mc_boot_variance_r_results.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/mc_perm_greater_meta.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/mc_perm_greater_r_results.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/mc_perm_not_significant_meta.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/mc_perm_not_significant_r_results.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/mc_perm_significant_meta.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/mc_perm_significant_r_results.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/mixed/glmm_binomial.csv +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/mixed/glmm_poisson.csv +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/mixed/lmm_crossed.csv +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/mixed/lmm_intercept.csv +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/mixed/lmm_ml.csv +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/mixed/lmm_no_effect.csv +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/mixed/lmm_slope.csv +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/mixed/mixed_meta.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/mixed/mixed_r_results.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/near_square.csv +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/near_square_meta.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/near_square_r_results.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/no_intercept.csv +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/no_intercept_meta.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/no_intercept_r_results.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/run_r_anova_validation.R +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/run_r_descriptive_validation.R +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/run_r_glm_validation.R +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/run_r_hypothesis_validation.R +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/run_r_mixed_validation.R +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/run_r_montecarlo_validation.R +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/run_r_survival_validation.R +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/run_r_validation.R +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/run_validation.sh +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/small_noise.csv +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/small_noise_meta.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/small_noise_r_results.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/surv_cox_breslow_meta.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/surv_cox_breslow_r_results.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/surv_cox_single_meta.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/surv_cox_single_r_results.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/surv_cox_ties_meta.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/surv_cox_ties_r_results.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/surv_cox_two_cov_meta.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/surv_cox_two_cov_r_results.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/surv_km_basic_meta.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/surv_km_basic_r_results.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/surv_km_heavy_cens_meta.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/surv_km_heavy_cens_r_results.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/surv_km_loglog_ci_meta.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/surv_km_loglog_ci_r_results.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/surv_km_no_cens_meta.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/surv_km_no_cens_r_results.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/surv_km_plain_ci_meta.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/surv_km_plain_ci_r_results.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/surv_km_ties_meta.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/surv_km_ties_r_results.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/surv_lr_peto_meta.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/surv_lr_peto_r_results.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/surv_lr_three_group_meta.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/surv_lr_three_group_r_results.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/surv_lr_two_group_meta.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/surv_lr_two_group_r_results.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/tall_skinny.csv +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/tall_skinny_meta.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/tall_skinny_r_results.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/validate_against_r.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/gam/__init__.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/gam/test_gam.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/hypothesis/__init__.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/hypothesis/conftest.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/hypothesis/test_chisq_test.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/hypothesis/test_design_split.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/hypothesis/test_fisher_test.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/hypothesis/test_gpu.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/hypothesis/test_ks_test.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/hypothesis/test_p_adjust.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/hypothesis/test_prop_test.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/hypothesis/test_r_validation.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/hypothesis/test_t_test.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/hypothesis/test_var_test.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/hypothesis/test_wilcox_test.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/mixed/__init__.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/mixed/conftest.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/mixed/test_glmm.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/mixed/test_lmm_crossed.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/mixed/test_lmm_intercept.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/mixed/test_lmm_nested.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/mixed/test_lmm_slope.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/mixed/test_pls.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/mixed/test_r_validation.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/mixed/test_random_effects.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/mixed/test_satterthwaite.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/montecarlo/__init__.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/montecarlo/conftest.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/montecarlo/test_batched_solver.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/montecarlo/test_boot_ci.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/montecarlo/test_bootstrap.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/montecarlo/test_gpu.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/montecarlo/test_influence.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/montecarlo/test_permutation.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/montecarlo/test_r_validation.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/multinomial/__init__.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/multinomial/test_multinom.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/multivariate/__init__.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/multivariate/test_multivariate.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/mvnmle/references/apple_em_reference.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/mvnmle/references/apple_reference.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/mvnmle/references/generate_em_fixtures.R +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/mvnmle/references/little_mcar_apple.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/mvnmle/references/little_mcar_complete.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/mvnmle/references/little_mcar_extreme.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/mvnmle/references/little_mcar_missvals.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/mvnmle/references/little_mcar_simple_mcar.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/mvnmle/references/little_mcar_summary.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/mvnmle/references/missvals_em_reference.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/mvnmle/references/missvals_reference.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/mvnmle/references/small_test_reference.json +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/mvnmle/test_em.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/mvnmle/test_gpu.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/mvnmle/test_mcar.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/mvnmle/test_mlest.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/mvnmle/test_mom_mcar.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/mvnmle/test_monotone.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/mvnmle/test_no_silent_fallback.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/mvnmle/test_squarem.py +0 -0
- {pystatistics-2.2.0/tests/ordinal → pystatistics-2.3.0/tests/nonparametric_mcar}/__init__.py +0 -0
- {pystatistics-2.2.0/tests/survival → pystatistics-2.3.0/tests/ordinal}/__init__.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/ordinal/test_ordinal.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/regression/benchmark.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/regression/benchmark.r +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/regression/conftest.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/regression/test_fit.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/regression/test_gamma_nb.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/regression/test_glm.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/regression/test_glm_gpu.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/regression/test_glm_r_validation.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/regression/test_module_split.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/regression/test_r_validation.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/regression/test_stress_gpu.py +0 -0
- {pystatistics-2.2.0/tests/timeseries → pystatistics-2.3.0/tests/survival}/__init__.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/survival/conftest.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/survival/test_coxph.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/survival/test_discrete_time.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/survival/test_gpu.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/survival/test_kaplan_meier.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/survival/test_logrank.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/survival/test_r_validation.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/test_code_quality.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/timeseries/test_acf_stationarity.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/timeseries/test_arima.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/timeseries/test_decomposition.py +0 -0
- {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/timeseries/test_ets.py +0 -0
|
@@ -1,5 +1,81 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 2.3.0
|
|
4
|
+
|
|
5
|
+
- **New subpackage `pystatistics.nonparametric_mcar`** for distribution-
|
|
6
|
+
free MCAR tests, motivated by the Lacuna ablation finding that the
|
|
7
|
+
MVN-based Little's MCAR feature (MLE or MoM plug-in) does not help
|
|
8
|
+
mechanism classification on heavy-tailed / categorical tabular data.
|
|
9
|
+
|
|
10
|
+
- Added `propensity_mcar_test(data, *, model='rf'|'gbm', cv_folds=5,
|
|
11
|
+
n_permutations=199, seed=0, alpha=0.05)`. Fits a sklearn
|
|
12
|
+
`RandomForestClassifier` or `GradientBoostingClassifier` to predict
|
|
13
|
+
each column's missingness indicator from the other columns
|
|
14
|
+
(mean-imputed + per-column missing-indicator features), computes
|
|
15
|
+
out-of-fold AUC, and calibrates against a permutation null. Returns
|
|
16
|
+
a `NonparametricMCARResult` with `statistic = mean_auc - 0.5` and
|
|
17
|
+
permutation-smoothed `p_value`. scikit-learn is an optional extra:
|
|
18
|
+
`pip install pystatistics[nonparametric_mcar]`.
|
|
19
|
+
|
|
20
|
+
- Added `NonparametricMCARResult` dataclass (statistic, p_value,
|
|
21
|
+
rejected, alpha, method, n_observations, n_variables,
|
|
22
|
+
n_missing_cells, extra). Intentionally narrower than the MVN-based
|
|
23
|
+
`MCARTestResult` — no df / ml_mean / ml_cov / patterns, because
|
|
24
|
+
nonparametric tests don't produce those.
|
|
25
|
+
|
|
26
|
+
- Tests: 11 in `tests/nonparametric_mcar/test_propensity.py` covering
|
|
27
|
+
normal cases (MCAR non-rejection, MAR rejection, reproducibility
|
|
28
|
+
under fixed seed, GBM option), edge cases (fully-observed column
|
|
29
|
+
ignored), and failure cases (1D input, too few rows/columns, no
|
|
30
|
+
missingness, invalid hyperparameters).
|
|
31
|
+
|
|
32
|
+
- Added `hsic_mcar_test(data, *, alpha=0.05, n_permutations=199,
|
|
33
|
+
seed=0)`. Hilbert-Schmidt Independence Criterion (Gretton et al.
|
|
34
|
+
2005/2008) between stochastically-imputed observed values and the
|
|
35
|
+
missingness-indicator matrix, with Gaussian RBF kernel and
|
|
36
|
+
median-heuristic bandwidth. Biased HSIC estimator, permutation null
|
|
37
|
+
for calibration. Uses **stochastic** (column-mean + column-std
|
|
38
|
+
noise) imputation rather than plain mean imputation — pure
|
|
39
|
+
mean-imputation pulls heavy-missing rows toward the column
|
|
40
|
+
centroid, which creates a systematic X-R coupling and rejects MCAR
|
|
41
|
+
spuriously on MCAR-generated data. Pure numpy; no sklearn dep.
|
|
42
|
+
|
|
43
|
+
- Added `missmech_mcar_test(data, *, alpha=0.05, n_permutations=199,
|
|
44
|
+
n_neighbors=5, min_pattern_size=6, seed=0)`. Jamshidian-Jalal-style
|
|
45
|
+
test of homogeneity of means across missingness-pattern groups,
|
|
46
|
+
after k-NN imputation (via `sklearn.impute.KNNImputer`). Statistic
|
|
47
|
+
is the between-pattern weighted sum of squared mean differences
|
|
48
|
+
(Σ_p n_p ||μ_p − μ||²), calibrated against a pattern-label
|
|
49
|
+
permutation null — equivalent in hypothesis to Jamshidian & Jalal
|
|
50
|
+
(2010)'s bootstrap, but faster for the cached-scalar use case.
|
|
51
|
+
Requires the same `nonparametric_mcar` extra for sklearn.
|
|
52
|
+
|
|
53
|
+
- Tests: 9 in `test_hsic.py`, 10 in `test_missmech.py` — both
|
|
54
|
+
covering MCAR non-rejection, MAR rejection, reproducibility under
|
|
55
|
+
seed, and the same failure-case matrix as propensity.
|
|
56
|
+
|
|
57
|
+
- Suite: 156/156 across `tests/nonparametric_mcar/` and `tests/mvnmle/`
|
|
58
|
+
pass; no mvnmle regressions from the new subpackage.
|
|
59
|
+
|
|
60
|
+
- **Split `pystatistics/mvnmle/backends/_em_batched.py`** (501 SLOC →
|
|
61
|
+
over the Rule 4 hard limit of 500) into three focused files plus a
|
|
62
|
+
compatibility shim:
|
|
63
|
+
- `_em_batched_patterns.py` (63 SLOC) — `_BatchedPatternIndex`
|
|
64
|
+
dataclass, `_pattern_n`, `build_pattern_index`.
|
|
65
|
+
- `_em_batched_np.py` (203 SLOC) — NumPy CPU backend
|
|
66
|
+
(`compute_conditional_parameters_np`, `e_step_full_batched_np`,
|
|
67
|
+
`compute_loglik_batched_np`, `chi_square_mcar_batched_np`).
|
|
68
|
+
- `_em_batched_torch.py` (239 SLOC) — Torch GPU backend
|
|
69
|
+
(`_e_step_full_torch`, `_loglik_full_torch`,
|
|
70
|
+
`chi_square_mcar_batched_torch`, `compute_conditional_parameters_torch`).
|
|
71
|
+
- `_em_batched.py` (30 SLOC) — thin shim re-exporting every
|
|
72
|
+
symbol so existing importers in `em.py`, `solvers.py`, and
|
|
73
|
+
`mcar_test.py` need no changes.
|
|
74
|
+
The 157-test suite across `tests/test_code_quality.py`,
|
|
75
|
+
`tests/mvnmle/`, and `tests/nonparametric_mcar/` passes after the
|
|
76
|
+
split; `test_no_file_exceeds_500_code_lines` now passes.
|
|
77
|
+
|
|
78
|
+
|
|
3
79
|
## 2.2.0
|
|
4
80
|
|
|
5
81
|
- Fixed a `torch._C._LinAlgError` crash in `chi_square_mcar_batched_torch`
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pystatistics
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.3.0
|
|
4
4
|
Summary: GPU-accelerated statistical computing for Python
|
|
5
5
|
Project-URL: Homepage, https://sgcx.org/technology/pystatistics/
|
|
6
6
|
Project-URL: Documentation, https://sgcx.org/docs/pystatistics/
|
|
@@ -43,6 +43,8 @@ Requires-Dist: furo; extra == 'docs'
|
|
|
43
43
|
Requires-Dist: sphinx>=6.0; extra == 'docs'
|
|
44
44
|
Provides-Extra: gpu
|
|
45
45
|
Requires-Dist: torch>=2.0; extra == 'gpu'
|
|
46
|
+
Provides-Extra: nonparametric-mcar
|
|
47
|
+
Requires-Dist: scikit-learn>=1.3; extra == 'nonparametric-mcar'
|
|
46
48
|
Description-Content-Type: text/markdown
|
|
47
49
|
|
|
48
50
|
# PyStatistics
|
|
@@ -51,73 +53,71 @@ GPU-accelerated statistical computing for Python.
|
|
|
51
53
|
|
|
52
54
|
## What's New
|
|
53
55
|
|
|
56
|
+
### 2.3.0 — Nonparametric MCAR tests for heavy-tailed tabular data
|
|
57
|
+
|
|
58
|
+
Little's MCAR test (1988) and the method-of-moments variant both assume
|
|
59
|
+
multivariate normality of the observed values. On realistic tabular
|
|
60
|
+
data — heavy-tailed, skewed, integer-encoded categoricals — MVN is
|
|
61
|
+
badly violated, and Project Lacuna's 2026-04 ablation study found that
|
|
62
|
+
cached Little's features add nothing to mechanism classification.
|
|
63
|
+
This release ships three distribution-free alternatives in a new
|
|
64
|
+
`pystatistics.nonparametric_mcar` subpackage so downstream projects
|
|
65
|
+
can test which family (if any) provides useful MCAR-detection signal
|
|
66
|
+
when MVN fails.
|
|
67
|
+
|
|
68
|
+
**`propensity_mcar_test`** fits a random forest (or gradient boosting)
|
|
69
|
+
classifier to predict each column's missingness indicator from the
|
|
70
|
+
other columns (mean-imputed + per-column missing-indicator features),
|
|
71
|
+
computes out-of-fold AUC, and calibrates against a permutation null.
|
|
72
|
+
Native mixed-type handling, nonlinear; deterministic under a seed.
|
|
73
|
+
Exposes `statistic = mean_observed_auc − 0.5` (clipped to [0, 0.5])
|
|
74
|
+
and a permutation-smoothed p-value. Optional scikit-learn dependency:
|
|
75
|
+
`pip install pystatistics[nonparametric_mcar]`.
|
|
76
|
+
|
|
77
|
+
**`hsic_mcar_test`** is a Hilbert-Schmidt Independence Criterion test
|
|
78
|
+
(Gretton et al. 2005/2008) between stochastically-imputed observed
|
|
79
|
+
values and the missingness-indicator matrix, with a Gaussian RBF
|
|
80
|
+
kernel and median-heuristic bandwidth. Pure numpy, no sklearn. Uses
|
|
81
|
+
**stochastic** imputation rather than plain mean imputation — the
|
|
82
|
+
latter pulls heavy-missing rows toward the column centroid, which
|
|
83
|
+
creates a systematic X-R coupling that rejects MCAR spuriously on
|
|
84
|
+
MCAR-generated data.
|
|
85
|
+
|
|
86
|
+
**`missmech_mcar_test`** is a Jamshidian-Jalal-style (2010)
|
|
87
|
+
nonparametric test of homogeneity of means across missingness
|
|
88
|
+
patterns. Groups rows by pattern, k-NN imputes to full columns, and
|
|
89
|
+
calibrates a between-pattern weighted sum-of-squared-mean-differences
|
|
90
|
+
statistic against a permutation null over the pattern labels.
|
|
91
|
+
Equivalent in hypothesis to Jamshidian & Jalal's bootstrap but faster
|
|
92
|
+
for the cached-scalar use case.
|
|
93
|
+
|
|
94
|
+
All three return a shared `NonparametricMCARResult` dataclass
|
|
95
|
+
(statistic, p_value, rejected, alpha, method, n_observations,
|
|
96
|
+
n_variables, n_missing_cells, extra) — intentionally narrower than
|
|
97
|
+
the MVN-based `MCARTestResult` from `mvnmle`, since concepts like
|
|
98
|
+
`df` / `ml_mean` / `ml_cov` / `patterns` don't apply to
|
|
99
|
+
distribution-free tests. 30 new tests across propensity, HSIC, and
|
|
100
|
+
MissMech; no mvnmle regressions.
|
|
101
|
+
|
|
102
|
+
**Internal refactor.** Split
|
|
103
|
+
`pystatistics/mvnmle/backends/_em_batched.py` (501 SLOC, over the
|
|
104
|
+
Rule 4 hard limit) into three focused modules — patterns,
|
|
105
|
+
NumPy backend, Torch backend — plus a compatibility shim that
|
|
106
|
+
re-exports every symbol so no importer needs to change. Code-quality
|
|
107
|
+
suite now reports zero files over 500 SLOC.
|
|
108
|
+
|
|
54
109
|
### 2.2.0 — Real-data robustness from Project Lacuna dogfooding
|
|
55
110
|
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
positive-definiteness. On GPU FP32, roundoff can produce covariances
|
|
67
|
-
that pass the cond-number check but have tiny negative eigenvalues —
|
|
68
|
-
Cholesky fails, the call raises `torch._C._LinAlgError`. The fast path
|
|
69
|
-
is now wrapped with `try/except` and falls back to pseudo-inverse when
|
|
70
|
-
the ``regularize`` flag allows. Surfaced on `credit_card_default` ×
|
|
71
|
-
`MNAR-NonLinSocial` during the Lacuna cache build.
|
|
72
|
-
|
|
73
|
-
**Exception-type preservation in `little_mcar_test`.** The
|
|
74
|
-
ML-estimation `try/except` at the top of `little_mcar_test` wrapped
|
|
75
|
-
*every* exception as a bare `RuntimeError` — including
|
|
76
|
-
`PyStatisticsError` subclasses. This broke the documented
|
|
77
|
-
`except PyStatisticsError:` catch pattern downstream: users falling
|
|
78
|
-
back to a sentinel on MLE failure saw their handler bypassed and the
|
|
79
|
-
full build crash. Fix: explicitly re-raise `PyStatisticsError`, and
|
|
80
|
-
use `raise ... from e` for anything else so the chain is preserved.
|
|
81
|
-
|
|
82
|
-
**`regularize=True` default on the EM path (opt-out).** `mlest`,
|
|
83
|
-
`_solve_em`, and `EMBackend.solve` gain `regularize: bool = True`,
|
|
84
|
-
mirroring the existing convention on `mom_mcar_test` and
|
|
85
|
-
`little_mcar_test`. When True, `EMBackend._ensure_pd` applies a small
|
|
86
|
-
diagonal ridge — `max(0, 1e-10 − min_eig) + 1e-12` — to the M-step
|
|
87
|
-
sigma whenever its smallest eigenvalue falls below the PD threshold,
|
|
88
|
-
rather than raising `NumericalError`. The ridge is well below any
|
|
89
|
-
statistical precision on real data — the typical case the old path
|
|
90
|
-
rejected had `min_eig ≈ 1e-13` from pure FP64 roundoff on a matrix
|
|
91
|
-
that's theoretically PSD. Dogfooding surfaced cases where `min_eig`
|
|
92
|
-
hit `−0.66` on realistic MNAR mechanisms; the ridge fallback keeps EM
|
|
93
|
-
progressing. Callers needing strict bit-for-bit behaviour pass
|
|
94
|
-
`regularize=False` to restore the old raise.
|
|
95
|
-
|
|
96
|
-
**Three additional Cholesky ridge-fallbacks** in `_em_batched.py`:
|
|
97
|
-
`e_step_full_batched_np`, `_e_step_full_torch`, and
|
|
98
|
-
`_loglik_full_batched_torch` all compute per-pattern Cholesky of
|
|
99
|
-
`sigma_oo` sub-blocks. Real tabular data can produce individual
|
|
100
|
-
sub-blocks that are numerically indefinite even when the global sigma
|
|
101
|
-
is PD (integer-encoded categoricals with heavy collinearity in the
|
|
102
|
-
intersection of a given missingness pattern's observed variables).
|
|
103
|
-
Each site now wraps Cholesky in `try/except LinAlgError` with a
|
|
104
|
-
`ridge·I` retry (ridge = 1e-10 at pattern scale; statistically
|
|
105
|
-
invisible). Also removed a dead Cholesky call in `e_step_batched_np`
|
|
106
|
-
whose factor was never used downstream — pure crash liability — and
|
|
107
|
-
added a `pinv` fallback to the `np.linalg.solve` at the same site for
|
|
108
|
-
singular sub-blocks.
|
|
109
|
-
|
|
110
|
-
**Impact.** The Project Lacuna cache build on 3,080 (dataset ×
|
|
111
|
-
generator) pairs went from crashing on the first batch containing
|
|
112
|
-
`breast_cancer` or `credit_card_default` (pre-2.2.0) to completing in
|
|
113
|
-
a single pass at 0.9% MoM sentinel rate and 16.4% MLE sentinel rate
|
|
114
|
-
(the MLE sentinels are legitimate EM non-convergence on 1000-pattern
|
|
115
|
-
datasets — not crashes). Synthetic unit tests: 125/125 mvnmle pass.
|
|
116
|
-
|
|
117
|
-
**No API breaks.** New defaults (`regularize=True`) are strictly more
|
|
118
|
-
permissive than the old raises — any caller that was crashing before
|
|
119
|
-
will now proceed with a small `UserWarning`. Callers needing strict
|
|
120
|
-
behaviour pass `regularize=False`.
|
|
111
|
+
Four classes of numerical failure on realistic tabular data — Cholesky
|
|
112
|
+
fast-path crash on GPU FP32 roundoff, bare-`RuntimeError` wrapping
|
|
113
|
+
breaking `PyStatisticsError` catch patterns, M-step sigma PD-check
|
|
114
|
+
false negatives from FP64 roundoff, and per-pattern Cholesky on
|
|
115
|
+
indefinite sub-blocks — all fixed in this release with a unified
|
|
116
|
+
`regularize=True` opt-out-to-strict convention across `mlest`,
|
|
117
|
+
`mom_mcar_test`, `little_mcar_test`, and the batched E-step. The
|
|
118
|
+
Project Lacuna cache build on 3,080 (dataset × generator) pairs went
|
|
119
|
+
from crashing on the first batch to completing in a single pass at
|
|
120
|
+
0.9% MoM / 16.4% MLE sentinel rates. No API breaks.
|
|
121
121
|
|
|
122
122
|
### 2.1.0 — Real-data EM speedup + monotone closed-form MLE
|
|
123
123
|
|
|
@@ -4,73 +4,71 @@ GPU-accelerated statistical computing for Python.
|
|
|
4
4
|
|
|
5
5
|
## What's New
|
|
6
6
|
|
|
7
|
+
### 2.3.0 — Nonparametric MCAR tests for heavy-tailed tabular data
|
|
8
|
+
|
|
9
|
+
Little's MCAR test (1988) and the method-of-moments variant both assume
|
|
10
|
+
multivariate normality of the observed values. On realistic tabular
|
|
11
|
+
data — heavy-tailed, skewed, integer-encoded categoricals — MVN is
|
|
12
|
+
badly violated, and Project Lacuna's 2026-04 ablation study found that
|
|
13
|
+
cached Little's features add nothing to mechanism classification.
|
|
14
|
+
This release ships three distribution-free alternatives in a new
|
|
15
|
+
`pystatistics.nonparametric_mcar` subpackage so downstream projects
|
|
16
|
+
can test which family (if any) provides useful MCAR-detection signal
|
|
17
|
+
when MVN fails.
|
|
18
|
+
|
|
19
|
+
**`propensity_mcar_test`** fits a random forest (or gradient boosting)
|
|
20
|
+
classifier to predict each column's missingness indicator from the
|
|
21
|
+
other columns (mean-imputed + per-column missing-indicator features),
|
|
22
|
+
computes out-of-fold AUC, and calibrates against a permutation null.
|
|
23
|
+
Native mixed-type handling, nonlinear; deterministic under a seed.
|
|
24
|
+
Exposes `statistic = mean_observed_auc − 0.5` (clipped to [0, 0.5])
|
|
25
|
+
and a permutation-smoothed p-value. Optional scikit-learn dependency:
|
|
26
|
+
`pip install pystatistics[nonparametric_mcar]`.
|
|
27
|
+
|
|
28
|
+
**`hsic_mcar_test`** is a Hilbert-Schmidt Independence Criterion test
|
|
29
|
+
(Gretton et al. 2005/2008) between stochastically-imputed observed
|
|
30
|
+
values and the missingness-indicator matrix, with a Gaussian RBF
|
|
31
|
+
kernel and median-heuristic bandwidth. Pure numpy, no sklearn. Uses
|
|
32
|
+
**stochastic** imputation rather than plain mean imputation — the
|
|
33
|
+
latter pulls heavy-missing rows toward the column centroid, which
|
|
34
|
+
creates a systematic X-R coupling that rejects MCAR spuriously on
|
|
35
|
+
MCAR-generated data.
|
|
36
|
+
|
|
37
|
+
**`missmech_mcar_test`** is a Jamshidian-Jalal-style (2010)
|
|
38
|
+
nonparametric test of homogeneity of means across missingness
|
|
39
|
+
patterns. Groups rows by pattern, k-NN imputes to full columns, and
|
|
40
|
+
calibrates a between-pattern weighted sum-of-squared-mean-differences
|
|
41
|
+
statistic against a permutation null over the pattern labels.
|
|
42
|
+
Equivalent in hypothesis to Jamshidian & Jalal's bootstrap but faster
|
|
43
|
+
for the cached-scalar use case.
|
|
44
|
+
|
|
45
|
+
All three return a shared `NonparametricMCARResult` dataclass
|
|
46
|
+
(statistic, p_value, rejected, alpha, method, n_observations,
|
|
47
|
+
n_variables, n_missing_cells, extra) — intentionally narrower than
|
|
48
|
+
the MVN-based `MCARTestResult` from `mvnmle`, since concepts like
|
|
49
|
+
`df` / `ml_mean` / `ml_cov` / `patterns` don't apply to
|
|
50
|
+
distribution-free tests. 30 new tests across propensity, HSIC, and
|
|
51
|
+
MissMech; no mvnmle regressions.
|
|
52
|
+
|
|
53
|
+
**Internal refactor.** Split
|
|
54
|
+
`pystatistics/mvnmle/backends/_em_batched.py` (501 SLOC, over the
|
|
55
|
+
Rule 4 hard limit) into three focused modules — patterns,
|
|
56
|
+
NumPy backend, Torch backend — plus a compatibility shim that
|
|
57
|
+
re-exports every symbol so no importer needs to change. Code-quality
|
|
58
|
+
suite now reports zero files over 500 SLOC.
|
|
59
|
+
|
|
7
60
|
### 2.2.0 — Real-data robustness from Project Lacuna dogfooding
|
|
8
61
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
positive-definiteness. On GPU FP32, roundoff can produce covariances
|
|
20
|
-
that pass the cond-number check but have tiny negative eigenvalues —
|
|
21
|
-
Cholesky fails, the call raises `torch._C._LinAlgError`. The fast path
|
|
22
|
-
is now wrapped with `try/except` and falls back to pseudo-inverse when
|
|
23
|
-
the ``regularize`` flag allows. Surfaced on `credit_card_default` ×
|
|
24
|
-
`MNAR-NonLinSocial` during the Lacuna cache build.
|
|
25
|
-
|
|
26
|
-
**Exception-type preservation in `little_mcar_test`.** The
|
|
27
|
-
ML-estimation `try/except` at the top of `little_mcar_test` wrapped
|
|
28
|
-
*every* exception as a bare `RuntimeError` — including
|
|
29
|
-
`PyStatisticsError` subclasses. This broke the documented
|
|
30
|
-
`except PyStatisticsError:` catch pattern downstream: users falling
|
|
31
|
-
back to a sentinel on MLE failure saw their handler bypassed and the
|
|
32
|
-
full build crash. Fix: explicitly re-raise `PyStatisticsError`, and
|
|
33
|
-
use `raise ... from e` for anything else so the chain is preserved.
|
|
34
|
-
|
|
35
|
-
**`regularize=True` default on the EM path (opt-out).** `mlest`,
|
|
36
|
-
`_solve_em`, and `EMBackend.solve` gain `regularize: bool = True`,
|
|
37
|
-
mirroring the existing convention on `mom_mcar_test` and
|
|
38
|
-
`little_mcar_test`. When True, `EMBackend._ensure_pd` applies a small
|
|
39
|
-
diagonal ridge — `max(0, 1e-10 − min_eig) + 1e-12` — to the M-step
|
|
40
|
-
sigma whenever its smallest eigenvalue falls below the PD threshold,
|
|
41
|
-
rather than raising `NumericalError`. The ridge is well below any
|
|
42
|
-
statistical precision on real data — the typical case the old path
|
|
43
|
-
rejected had `min_eig ≈ 1e-13` from pure FP64 roundoff on a matrix
|
|
44
|
-
that's theoretically PSD. Dogfooding surfaced cases where `min_eig`
|
|
45
|
-
hit `−0.66` on realistic MNAR mechanisms; the ridge fallback keeps EM
|
|
46
|
-
progressing. Callers needing strict bit-for-bit behaviour pass
|
|
47
|
-
`regularize=False` to restore the old raise.
|
|
48
|
-
|
|
49
|
-
**Three additional Cholesky ridge-fallbacks** in `_em_batched.py`:
|
|
50
|
-
`e_step_full_batched_np`, `_e_step_full_torch`, and
|
|
51
|
-
`_loglik_full_batched_torch` all compute per-pattern Cholesky of
|
|
52
|
-
`sigma_oo` sub-blocks. Real tabular data can produce individual
|
|
53
|
-
sub-blocks that are numerically indefinite even when the global sigma
|
|
54
|
-
is PD (integer-encoded categoricals with heavy collinearity in the
|
|
55
|
-
intersection of a given missingness pattern's observed variables).
|
|
56
|
-
Each site now wraps Cholesky in `try/except LinAlgError` with a
|
|
57
|
-
`ridge·I` retry (ridge = 1e-10 at pattern scale; statistically
|
|
58
|
-
invisible). Also removed a dead Cholesky call in `e_step_batched_np`
|
|
59
|
-
whose factor was never used downstream — pure crash liability — and
|
|
60
|
-
added a `pinv` fallback to the `np.linalg.solve` at the same site for
|
|
61
|
-
singular sub-blocks.
|
|
62
|
-
|
|
63
|
-
**Impact.** The Project Lacuna cache build on 3,080 (dataset ×
|
|
64
|
-
generator) pairs went from crashing on the first batch containing
|
|
65
|
-
`breast_cancer` or `credit_card_default` (pre-2.2.0) to completing in
|
|
66
|
-
a single pass at 0.9% MoM sentinel rate and 16.4% MLE sentinel rate
|
|
67
|
-
(the MLE sentinels are legitimate EM non-convergence on 1000-pattern
|
|
68
|
-
datasets — not crashes). Synthetic unit tests: 125/125 mvnmle pass.
|
|
69
|
-
|
|
70
|
-
**No API breaks.** New defaults (`regularize=True`) are strictly more
|
|
71
|
-
permissive than the old raises — any caller that was crashing before
|
|
72
|
-
will now proceed with a small `UserWarning`. Callers needing strict
|
|
73
|
-
behaviour pass `regularize=False`.
|
|
62
|
+
Four classes of numerical failure on realistic tabular data — Cholesky
|
|
63
|
+
fast-path crash on GPU FP32 roundoff, bare-`RuntimeError` wrapping
|
|
64
|
+
breaking `PyStatisticsError` catch patterns, M-step sigma PD-check
|
|
65
|
+
false negatives from FP64 roundoff, and per-pattern Cholesky on
|
|
66
|
+
indefinite sub-blocks — all fixed in this release with a unified
|
|
67
|
+
`regularize=True` opt-out-to-strict convention across `mlest`,
|
|
68
|
+
`mom_mcar_test`, `little_mcar_test`, and the batched E-step. The
|
|
69
|
+
Project Lacuna cache build on 3,080 (dataset × generator) pairs went
|
|
70
|
+
from crashing on the first batch to completing in a single pass at
|
|
71
|
+
0.9% MoM / 16.4% MLE sentinel rates. No API breaks.
|
|
74
72
|
|
|
75
73
|
### 2.1.0 — Real-data EM speedup + monotone closed-form MLE
|
|
76
74
|
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "pystatistics"
|
|
7
|
-
version = "2.
|
|
7
|
+
version = "2.3.0"
|
|
8
8
|
description = "GPU-accelerated statistical computing for Python"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
license = "MIT"
|
|
@@ -48,6 +48,12 @@ dependencies = [
|
|
|
48
48
|
gpu = [
|
|
49
49
|
"torch>=2.0",
|
|
50
50
|
]
|
|
51
|
+
nonparametric_mcar = [
|
|
52
|
+
# scikit-learn for propensity_mcar_test (RandomForestClassifier /
|
|
53
|
+
# GradientBoostingClassifier). HSIC and MissMech in the same subpackage
|
|
54
|
+
# are pure numpy/scipy and do not need sklearn.
|
|
55
|
+
"scikit-learn>=1.3",
|
|
56
|
+
]
|
|
51
57
|
dev = [
|
|
52
58
|
"pytest>=7.0",
|
|
53
59
|
"pytest-cov>=4.0",
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"""Compatibility shim for the batched EM/MCAR building blocks.
|
|
2
|
+
|
|
3
|
+
The implementation was split into three modules on 2026-04-20 to stay
|
|
4
|
+
under the 500-SLOC file limit (Coding Bible rule 4):
|
|
5
|
+
|
|
6
|
+
* ``_em_batched_patterns`` — pattern-index dataclass + ``build_pattern_index``
|
|
7
|
+
* ``_em_batched_np`` — NumPy backend (CPU)
|
|
8
|
+
* ``_em_batched_torch`` — Torch backend (GPU + CPU torch)
|
|
9
|
+
|
|
10
|
+
This module continues to expose every name that callers imported
|
|
11
|
+
pre-split, so no call-site changes were required. New code may import
|
|
12
|
+
from the specific backend module directly.
|
|
13
|
+
"""
|
|
14
|
+
from pystatistics.mvnmle.backends._em_batched_patterns import (
|
|
15
|
+
_BatchedPatternIndex,
|
|
16
|
+
_pattern_n,
|
|
17
|
+
build_pattern_index,
|
|
18
|
+
)
|
|
19
|
+
from pystatistics.mvnmle.backends._em_batched_np import (
|
|
20
|
+
chi_square_mcar_batched_np,
|
|
21
|
+
compute_conditional_parameters_np,
|
|
22
|
+
compute_loglik_batched_np,
|
|
23
|
+
e_step_full_batched_np,
|
|
24
|
+
)
|
|
25
|
+
from pystatistics.mvnmle.backends._em_batched_torch import (
|
|
26
|
+
_e_step_full_torch,
|
|
27
|
+
_loglik_full_torch,
|
|
28
|
+
chi_square_mcar_batched_torch,
|
|
29
|
+
compute_conditional_parameters_torch,
|
|
30
|
+
)
|
|
31
|
+
|
|
32
|
+
__all__ = [
|
|
33
|
+
"_BatchedPatternIndex",
|
|
34
|
+
"_pattern_n",
|
|
35
|
+
"build_pattern_index",
|
|
36
|
+
"chi_square_mcar_batched_np",
|
|
37
|
+
"compute_conditional_parameters_np",
|
|
38
|
+
"compute_loglik_batched_np",
|
|
39
|
+
"e_step_full_batched_np",
|
|
40
|
+
"_e_step_full_torch",
|
|
41
|
+
"_loglik_full_torch",
|
|
42
|
+
"chi_square_mcar_batched_torch",
|
|
43
|
+
"compute_conditional_parameters_torch",
|
|
44
|
+
]
|