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.
Files changed (553) hide show
  1. {pystatistics-2.2.0 → pystatistics-2.3.0}/CHANGELOG.md +76 -0
  2. {pystatistics-2.2.0 → pystatistics-2.3.0}/PKG-INFO +66 -66
  3. {pystatistics-2.2.0 → pystatistics-2.3.0}/README.md +63 -65
  4. {pystatistics-2.2.0 → pystatistics-2.3.0}/pyproject.toml +7 -1
  5. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/__init__.py +1 -1
  6. pystatistics-2.3.0/pystatistics/mvnmle/backends/_em_batched.py +44 -0
  7. pystatistics-2.3.0/pystatistics/mvnmle/backends/_em_batched_np.py +416 -0
  8. pystatistics-2.3.0/pystatistics/mvnmle/backends/_em_batched_patterns.py +112 -0
  9. pystatistics-2.3.0/pystatistics/mvnmle/backends/_em_batched_torch.py +381 -0
  10. pystatistics-2.3.0/pystatistics/nonparametric_mcar/__init__.py +45 -0
  11. pystatistics-2.3.0/pystatistics/nonparametric_mcar/hsic.py +237 -0
  12. pystatistics-2.3.0/pystatistics/nonparametric_mcar/missmech.py +254 -0
  13. pystatistics-2.3.0/pystatistics/nonparametric_mcar/propensity.py +285 -0
  14. pystatistics-2.3.0/pystatistics/nonparametric_mcar/result.py +67 -0
  15. pystatistics-2.3.0/tests/nonparametric_mcar/test_hsic.py +112 -0
  16. pystatistics-2.3.0/tests/nonparametric_mcar/test_missmech.py +110 -0
  17. pystatistics-2.3.0/tests/nonparametric_mcar/test_propensity.py +145 -0
  18. pystatistics-2.3.0/tests/timeseries/__init__.py +0 -0
  19. pystatistics-2.2.0/pystatistics/mvnmle/backends/_em_batched.py +0 -897
  20. {pystatistics-2.2.0 → pystatistics-2.3.0}/.github/workflows/publish.yml +0 -0
  21. {pystatistics-2.2.0 → pystatistics-2.3.0}/.github/workflows/trigger-docs-rebuild.yml +0 -0
  22. {pystatistics-2.2.0 → pystatistics-2.3.0}/.gitignore +0 -0
  23. {pystatistics-2.2.0 → pystatistics-2.3.0}/.release/CHECKLIST.md +0 -0
  24. {pystatistics-2.2.0 → pystatistics-2.3.0}/.release/UNRELEASED.md +0 -0
  25. {pystatistics-2.2.0 → pystatistics-2.3.0}/.release/release.py +0 -0
  26. {pystatistics-2.2.0 → pystatistics-2.3.0}/CLAUDE.md +0 -0
  27. {pystatistics-2.2.0 → pystatistics-2.3.0}/LICENSE +0 -0
  28. {pystatistics-2.2.0 → pystatistics-2.3.0}/benchmarks/mvnmle_bench.py +0 -0
  29. {pystatistics-2.2.0 → pystatistics-2.3.0}/docs/DESIGN.md +0 -0
  30. {pystatistics-2.2.0 → pystatistics-2.3.0}/docs/Forge.md +0 -0
  31. {pystatistics-2.2.0 → pystatistics-2.3.0}/docs/GPU_BACKEND_NOTES.md +0 -0
  32. {pystatistics-2.2.0 → pystatistics-2.3.0}/docs/Makefile +0 -0
  33. {pystatistics-2.2.0 → pystatistics-2.3.0}/docs/PYSTATSBIO_CONTEXT.md +0 -0
  34. {pystatistics-2.2.0 → pystatistics-2.3.0}/docs/ROADMAP.md +0 -0
  35. {pystatistics-2.2.0 → pystatistics-2.3.0}/docs/_static/custom.css +0 -0
  36. {pystatistics-2.2.0 → pystatistics-2.3.0}/docs/anova.rst +0 -0
  37. {pystatistics-2.2.0 → pystatistics-2.3.0}/docs/conf.py +0 -0
  38. {pystatistics-2.2.0 → pystatistics-2.3.0}/docs/core.rst +0 -0
  39. {pystatistics-2.2.0 → pystatistics-2.3.0}/docs/descriptive.rst +0 -0
  40. {pystatistics-2.2.0 → pystatistics-2.3.0}/docs/hypothesis.rst +0 -0
  41. {pystatistics-2.2.0 → pystatistics-2.3.0}/docs/index.rst +0 -0
  42. {pystatistics-2.2.0 → pystatistics-2.3.0}/docs/mixed.rst +0 -0
  43. {pystatistics-2.2.0 → pystatistics-2.3.0}/docs/montecarlo.rst +0 -0
  44. {pystatistics-2.2.0 → pystatistics-2.3.0}/docs/mvnmle.rst +0 -0
  45. {pystatistics-2.2.0 → pystatistics-2.3.0}/docs/regression.rst +0 -0
  46. {pystatistics-2.2.0 → pystatistics-2.3.0}/docs/survival.rst +0 -0
  47. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/GPU_BACKEND_CONVENTION.md +0 -0
  48. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/anova/__init__.py +0 -0
  49. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/anova/_common.py +0 -0
  50. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/anova/_contrasts.py +0 -0
  51. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/anova/_levene.py +0 -0
  52. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/anova/_posthoc.py +0 -0
  53. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/anova/_repeated.py +0 -0
  54. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/anova/_ss.py +0 -0
  55. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/anova/design.py +0 -0
  56. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/anova/solution.py +0 -0
  57. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/anova/solvers.py +0 -0
  58. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/core/__init__.py +0 -0
  59. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/core/capabilities.py +0 -0
  60. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/core/compute/__init__.py +0 -0
  61. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/core/compute/device.py +0 -0
  62. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/core/compute/linalg/__init__.py +0 -0
  63. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/core/compute/linalg/batched.py +0 -0
  64. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/core/compute/linalg/cholesky.py +0 -0
  65. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/core/compute/linalg/determinant.py +0 -0
  66. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/core/compute/linalg/qr.py +0 -0
  67. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/core/compute/linalg/solve.py +0 -0
  68. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/core/compute/linalg/svd.py +0 -0
  69. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/core/compute/optimization/__init__.py +0 -0
  70. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/core/compute/optimization/convergence.py +0 -0
  71. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/core/compute/precision.py +0 -0
  72. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/core/compute/timing.py +0 -0
  73. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/core/compute/tolerances.py +0 -0
  74. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/core/datasource.py +0 -0
  75. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/core/exceptions.py +0 -0
  76. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/core/protocols.py +0 -0
  77. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/core/result.py +0 -0
  78. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/core/validation.py +0 -0
  79. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/descriptive/__init__.py +0 -0
  80. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/descriptive/_missing.py +0 -0
  81. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/descriptive/_quantile_types.py +0 -0
  82. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/descriptive/backends/__init__.py +0 -0
  83. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/descriptive/backends/cpu.py +0 -0
  84. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/descriptive/backends/gpu.py +0 -0
  85. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/descriptive/design.py +0 -0
  86. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/descriptive/solution.py +0 -0
  87. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/descriptive/solvers.py +0 -0
  88. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/gam/__init__.py +0 -0
  89. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/gam/_basis.py +0 -0
  90. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/gam/_common.py +0 -0
  91. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/gam/_fit.py +0 -0
  92. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/gam/_gam.py +0 -0
  93. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/gam/_gcv.py +0 -0
  94. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/gam/_smooth.py +0 -0
  95. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/gam/backends/__init__.py +0 -0
  96. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/gam/backends/_gpu_family.py +0 -0
  97. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/gam/backends/gpu_pirls.py +0 -0
  98. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/gam/solution.py +0 -0
  99. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/hypothesis/__init__.py +0 -0
  100. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/hypothesis/_common.py +0 -0
  101. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/hypothesis/_design_factories.py +0 -0
  102. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/hypothesis/_p_adjust.py +0 -0
  103. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/hypothesis/backends/__init__.py +0 -0
  104. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/hypothesis/backends/_chisq_test.py +0 -0
  105. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/hypothesis/backends/_fisher_test.py +0 -0
  106. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/hypothesis/backends/_ks_test.py +0 -0
  107. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/hypothesis/backends/_prop_test.py +0 -0
  108. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/hypothesis/backends/_t_test.py +0 -0
  109. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/hypothesis/backends/_var_test.py +0 -0
  110. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/hypothesis/backends/_wilcox_test.py +0 -0
  111. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/hypothesis/backends/cpu.py +0 -0
  112. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/hypothesis/backends/gpu.py +0 -0
  113. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/hypothesis/design.py +0 -0
  114. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/hypothesis/solution.py +0 -0
  115. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/hypothesis/solvers.py +0 -0
  116. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/mixed/__init__.py +0 -0
  117. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/mixed/_common.py +0 -0
  118. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/mixed/_deviance.py +0 -0
  119. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/mixed/_pirls.py +0 -0
  120. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/mixed/_pls.py +0 -0
  121. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/mixed/_random_effects.py +0 -0
  122. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/mixed/_satterthwaite.py +0 -0
  123. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/mixed/design.py +0 -0
  124. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/mixed/solution.py +0 -0
  125. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/mixed/solvers.py +0 -0
  126. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/montecarlo/__init__.py +0 -0
  127. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/montecarlo/_ci.py +0 -0
  128. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/montecarlo/_common.py +0 -0
  129. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/montecarlo/_influence.py +0 -0
  130. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/montecarlo/backends/__init__.py +0 -0
  131. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/montecarlo/backends/cpu.py +0 -0
  132. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/montecarlo/backends/gpu.py +0 -0
  133. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/montecarlo/design.py +0 -0
  134. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/montecarlo/solution.py +0 -0
  135. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/montecarlo/solvers.py +0 -0
  136. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/multinomial/__init__.py +0 -0
  137. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/multinomial/_common.py +0 -0
  138. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/multinomial/_likelihood.py +0 -0
  139. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/multinomial/_solver.py +0 -0
  140. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/multinomial/backends/__init__.py +0 -0
  141. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/multinomial/backends/gpu_likelihood.py +0 -0
  142. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/multinomial/solution.py +0 -0
  143. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/multivariate/__init__.py +0 -0
  144. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/multivariate/_common.py +0 -0
  145. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/multivariate/_factor.py +0 -0
  146. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/multivariate/_pca.py +0 -0
  147. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/multivariate/_rotation.py +0 -0
  148. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/multivariate/backends/__init__.py +0 -0
  149. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/multivariate/backends/gpu_pca.py +0 -0
  150. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/mvnmle/__init__.py +0 -0
  151. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/mvnmle/_monotone.py +0 -0
  152. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/mvnmle/_objectives/__init__.py +0 -0
  153. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/mvnmle/_objectives/base.py +0 -0
  154. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/mvnmle/_objectives/cpu.py +0 -0
  155. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/mvnmle/_objectives/gpu_fp32.py +0 -0
  156. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/mvnmle/_objectives/gpu_fp64.py +0 -0
  157. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/mvnmle/_objectives/parameterizations.py +0 -0
  158. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/mvnmle/_utils.py +0 -0
  159. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/mvnmle/backends/__init__.py +0 -0
  160. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/mvnmle/backends/_squarem.py +0 -0
  161. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/mvnmle/backends/cpu.py +0 -0
  162. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/mvnmle/backends/em.py +0 -0
  163. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/mvnmle/backends/gpu.py +0 -0
  164. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/mvnmle/datasets.py +0 -0
  165. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/mvnmle/design.py +0 -0
  166. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/mvnmle/mcar_test.py +0 -0
  167. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/mvnmle/patterns.py +0 -0
  168. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/mvnmle/solution.py +0 -0
  169. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/mvnmle/solvers.py +0 -0
  170. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/ordinal/__init__.py +0 -0
  171. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/ordinal/_common.py +0 -0
  172. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/ordinal/_likelihood.py +0 -0
  173. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/ordinal/_solver.py +0 -0
  174. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/ordinal/backends/__init__.py +0 -0
  175. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/ordinal/backends/gpu_likelihood.py +0 -0
  176. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/ordinal/solution.py +0 -0
  177. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/py.typed +0 -0
  178. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/regression/__init__.py +0 -0
  179. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/regression/_formatting.py +0 -0
  180. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/regression/_glm.py +0 -0
  181. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/regression/_linear.py +0 -0
  182. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/regression/_nb_theta.py +0 -0
  183. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/regression/backends/__init__.py +0 -0
  184. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/regression/backends/cpu.py +0 -0
  185. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/regression/backends/cpu_glm.py +0 -0
  186. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/regression/backends/gpu.py +0 -0
  187. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/regression/backends/gpu_glm.py +0 -0
  188. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/regression/design.py +0 -0
  189. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/regression/families.py +0 -0
  190. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/regression/solution.py +0 -0
  191. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/regression/solvers.py +0 -0
  192. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/survival/__init__.py +0 -0
  193. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/survival/_common.py +0 -0
  194. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/survival/_cox.py +0 -0
  195. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/survival/_discrete.py +0 -0
  196. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/survival/_km.py +0 -0
  197. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/survival/_logrank.py +0 -0
  198. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/survival/backends/__init__.py +0 -0
  199. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/survival/backends/cpu.py +0 -0
  200. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/survival/backends/gpu.py +0 -0
  201. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/survival/design.py +0 -0
  202. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/survival/solution.py +0 -0
  203. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/survival/solvers.py +0 -0
  204. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/timeseries/__init__.py +0 -0
  205. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/timeseries/_acf.py +0 -0
  206. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/timeseries/_arima_batch.py +0 -0
  207. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/timeseries/_arima_factored.py +0 -0
  208. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/timeseries/_arima_fit.py +0 -0
  209. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/timeseries/_arima_forecast.py +0 -0
  210. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/timeseries/_arima_kalman.py +0 -0
  211. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/timeseries/_arima_likelihood.py +0 -0
  212. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/timeseries/_arima_order.py +0 -0
  213. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/timeseries/_common.py +0 -0
  214. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/timeseries/_decomposition.py +0 -0
  215. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/timeseries/_differencing.py +0 -0
  216. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/timeseries/_ets_fit.py +0 -0
  217. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/timeseries/_ets_forecast.py +0 -0
  218. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/timeseries/_ets_models.py +0 -0
  219. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/timeseries/_stationarity.py +0 -0
  220. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/timeseries/_whittle.py +0 -0
  221. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/timeseries/backends/__init__.py +0 -0
  222. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/timeseries/backends/whittle_batch_gpu.py +0 -0
  223. {pystatistics-2.2.0 → pystatistics-2.3.0}/pystatistics/timeseries/backends/whittle_gpu.py +0 -0
  224. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/anova/__init__.py +0 -0
  225. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/anova/conftest.py +0 -0
  226. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/anova/test_contrasts.py +0 -0
  227. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/anova/test_design.py +0 -0
  228. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/anova/test_factorial.py +0 -0
  229. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/anova/test_levene.py +0 -0
  230. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/anova/test_oneway.py +0 -0
  231. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/anova/test_posthoc.py +0 -0
  232. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/anova/test_r_validation.py +0 -0
  233. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/anova/test_repeated_measures.py +0 -0
  234. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/benchmark_gpu.py +0 -0
  235. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/conftest.py +0 -0
  236. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/core/test_datasource.py +0 -0
  237. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/core/test_exceptions.py +0 -0
  238. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/core/test_result.py +0 -0
  239. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/core/test_validation.py +0 -0
  240. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/descriptive/__init__.py +0 -0
  241. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/descriptive/conftest.py +0 -0
  242. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/descriptive/test_cor.py +0 -0
  243. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/descriptive/test_cov.py +0 -0
  244. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/descriptive/test_describe.py +0 -0
  245. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/descriptive/test_gpu.py +0 -0
  246. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/descriptive/test_missing.py +0 -0
  247. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/descriptive/test_moments.py +0 -0
  248. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/descriptive/test_quantile.py +0 -0
  249. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/descriptive/test_r_validation.py +0 -0
  250. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/anova_ancova_meta.json +0 -0
  251. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/anova_ancova_r_results.json +0 -0
  252. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/anova_bonferroni_meta.json +0 -0
  253. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/anova_bonferroni_r_results.json +0 -0
  254. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/anova_eta_meta.json +0 -0
  255. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/anova_eta_r_results.json +0 -0
  256. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/anova_levene_meta.json +0 -0
  257. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/anova_levene_r_results.json +0 -0
  258. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/anova_oneway_balanced_meta.json +0 -0
  259. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/anova_oneway_balanced_r_results.json +0 -0
  260. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/anova_oneway_unbalanced_meta.json +0 -0
  261. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/anova_oneway_unbalanced_r_results.json +0 -0
  262. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/anova_rm_mixed_meta.json +0 -0
  263. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/anova_rm_mixed_r_results.json +0 -0
  264. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/anova_rm_within_meta.json +0 -0
  265. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/anova_rm_within_r_results.json +0 -0
  266. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/anova_tukey_meta.json +0 -0
  267. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/anova_tukey_r_results.json +0 -0
  268. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/anova_twoway_balanced_meta.json +0 -0
  269. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/anova_twoway_balanced_r_results.json +0 -0
  270. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/anova_twoway_unbalanced_meta.json +0 -0
  271. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/anova_twoway_unbalanced_r_results.json +0 -0
  272. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/basic_100x3.csv +0 -0
  273. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/basic_100x3_meta.json +0 -0
  274. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/basic_100x3_r_results.json +0 -0
  275. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/collinear_almost.csv +0 -0
  276. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/collinear_almost_meta.json +0 -0
  277. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/collinear_almost_r_results.json +0 -0
  278. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/desc_basic_100x5.csv +0 -0
  279. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/desc_basic_100x5_meta.json +0 -0
  280. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/desc_basic_100x5_r_results.json +0 -0
  281. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/desc_constant_column.csv +0 -0
  282. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/desc_constant_column_meta.json +0 -0
  283. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/desc_constant_column_r_results.json +0 -0
  284. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/desc_extreme_values.csv +0 -0
  285. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/desc_extreme_values_meta.json +0 -0
  286. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/desc_extreme_values_r_results.json +0 -0
  287. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/desc_large_1000x10.csv +0 -0
  288. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/desc_large_1000x10_meta.json +0 -0
  289. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/desc_large_1000x10_r_results.json +0 -0
  290. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/desc_nan_columnwise.csv +0 -0
  291. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/desc_nan_columnwise_meta.json +0 -0
  292. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/desc_nan_columnwise_r_results.json +0 -0
  293. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/desc_nan_scattered.csv +0 -0
  294. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/desc_nan_scattered_meta.json +0 -0
  295. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/desc_nan_scattered_r_results.json +0 -0
  296. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/desc_negative_correlation.csv +0 -0
  297. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/desc_negative_correlation_meta.json +0 -0
  298. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/desc_negative_correlation_r_results.json +0 -0
  299. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/desc_perfect_correlation.csv +0 -0
  300. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/desc_perfect_correlation_meta.json +0 -0
  301. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/desc_perfect_correlation_r_results.json +0 -0
  302. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/desc_single_column.csv +0 -0
  303. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/desc_single_column_meta.json +0 -0
  304. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/desc_single_column_r_results.json +0 -0
  305. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/desc_ties.csv +0 -0
  306. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/desc_ties_meta.json +0 -0
  307. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/desc_ties_r_results.json +0 -0
  308. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/different_scales.csv +0 -0
  309. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/different_scales_meta.json +0 -0
  310. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/different_scales_r_results.json +0 -0
  311. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/generate_anova_fixtures.py +0 -0
  312. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/generate_descriptive_fixtures.py +0 -0
  313. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/generate_fixtures.py +0 -0
  314. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/generate_glm_fixtures.py +0 -0
  315. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/generate_hypothesis_fixtures.py +0 -0
  316. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/generate_mixed_fixtures.py +0 -0
  317. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/generate_montecarlo_fixtures.py +0 -0
  318. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/generate_survival_fixtures.py +0 -0
  319. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/glm_binomial_balanced.csv +0 -0
  320. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/glm_binomial_balanced_meta.json +0 -0
  321. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/glm_binomial_balanced_r_results.json +0 -0
  322. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/glm_binomial_basic.csv +0 -0
  323. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/glm_binomial_basic_meta.json +0 -0
  324. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/glm_binomial_basic_r_results.json +0 -0
  325. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/glm_binomial_large.csv +0 -0
  326. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/glm_binomial_large_meta.json +0 -0
  327. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/glm_binomial_large_r_results.json +0 -0
  328. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/glm_binomial_separated.csv +0 -0
  329. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/glm_binomial_separated_meta.json +0 -0
  330. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/glm_binomial_separated_r_results.json +0 -0
  331. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/glm_gaussian_basic.csv +0 -0
  332. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/glm_gaussian_basic_meta.json +0 -0
  333. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/glm_gaussian_basic_r_results.json +0 -0
  334. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/glm_gaussian_large.csv +0 -0
  335. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/glm_gaussian_large_meta.json +0 -0
  336. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/glm_gaussian_large_r_results.json +0 -0
  337. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/glm_poisson_basic.csv +0 -0
  338. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/glm_poisson_basic_meta.json +0 -0
  339. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/glm_poisson_basic_r_results.json +0 -0
  340. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/glm_poisson_large_counts.csv +0 -0
  341. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/glm_poisson_large_counts_meta.json +0 -0
  342. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/glm_poisson_large_counts_r_results.json +0 -0
  343. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/glm_poisson_zeros.csv +0 -0
  344. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/glm_poisson_zeros_meta.json +0 -0
  345. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/glm_poisson_zeros_r_results.json +0 -0
  346. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/high_noise.csv +0 -0
  347. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/high_noise_meta.json +0 -0
  348. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/high_noise_r_results.json +0 -0
  349. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/htest_chisq_2x2_yates_meta.json +0 -0
  350. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/htest_chisq_2x2_yates_r_results.json +0 -0
  351. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/htest_chisq_3x3_meta.json +0 -0
  352. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/htest_chisq_3x3_r_results.json +0 -0
  353. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/htest_chisq_gof_meta.json +0 -0
  354. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/htest_chisq_gof_r_results.json +0 -0
  355. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/htest_chisq_gof_unequal_meta.json +0 -0
  356. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/htest_chisq_gof_unequal_r_results.json +0 -0
  357. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/htest_fisher_2x2_less_meta.json +0 -0
  358. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/htest_fisher_2x2_less_r_results.json +0 -0
  359. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/htest_fisher_2x2_meta.json +0 -0
  360. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/htest_fisher_2x2_r_results.json +0 -0
  361. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/htest_fisher_3x3_meta.json +0 -0
  362. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/htest_fisher_3x3_r_results.json +0 -0
  363. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/htest_ks_onesample_norm_meta.json +0 -0
  364. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/htest_ks_onesample_norm_r_results.json +0 -0
  365. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/htest_ks_twosample_meta.json +0 -0
  366. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/htest_ks_twosample_r_results.json +0 -0
  367. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/htest_prop_onesample_meta.json +0 -0
  368. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/htest_prop_onesample_r_results.json +0 -0
  369. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/htest_prop_twosample_meta.json +0 -0
  370. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/htest_prop_twosample_r_results.json +0 -0
  371. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/htest_t_onesample_meta.json +0 -0
  372. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/htest_t_onesample_r_results.json +0 -0
  373. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/htest_t_paired_meta.json +0 -0
  374. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/htest_t_paired_r_results.json +0 -0
  375. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/htest_t_pooled_meta.json +0 -0
  376. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/htest_t_pooled_r_results.json +0 -0
  377. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/htest_t_welch_meta.json +0 -0
  378. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/htest_t_welch_r_results.json +0 -0
  379. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/htest_var_basic_meta.json +0 -0
  380. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/htest_var_basic_r_results.json +0 -0
  381. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/htest_wilcox_ranksum_meta.json +0 -0
  382. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/htest_wilcox_ranksum_r_results.json +0 -0
  383. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/htest_wilcox_signed_meta.json +0 -0
  384. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/htest_wilcox_signed_r_results.json +0 -0
  385. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/ill_conditioned.csv +0 -0
  386. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/ill_conditioned_meta.json +0 -0
  387. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/ill_conditioned_r_results.json +0 -0
  388. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/large_coeffs.csv +0 -0
  389. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/large_coeffs_meta.json +0 -0
  390. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/large_coeffs_r_results.json +0 -0
  391. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/mc_boot_ci_90_meta.json +0 -0
  392. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/mc_boot_ci_90_r_results.json +0 -0
  393. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/mc_boot_ci_normal_meta.json +0 -0
  394. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/mc_boot_ci_normal_r_results.json +0 -0
  395. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/mc_boot_ci_skewed_meta.json +0 -0
  396. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/mc_boot_ci_skewed_r_results.json +0 -0
  397. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/mc_boot_mean_balanced_meta.json +0 -0
  398. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/mc_boot_mean_balanced_r_results.json +0 -0
  399. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/mc_boot_mean_ordinary_meta.json +0 -0
  400. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/mc_boot_mean_ordinary_r_results.json +0 -0
  401. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/mc_boot_median_meta.json +0 -0
  402. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/mc_boot_median_r_results.json +0 -0
  403. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/mc_boot_variance_meta.json +0 -0
  404. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/mc_boot_variance_r_results.json +0 -0
  405. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/mc_perm_greater_meta.json +0 -0
  406. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/mc_perm_greater_r_results.json +0 -0
  407. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/mc_perm_not_significant_meta.json +0 -0
  408. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/mc_perm_not_significant_r_results.json +0 -0
  409. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/mc_perm_significant_meta.json +0 -0
  410. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/mc_perm_significant_r_results.json +0 -0
  411. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/mixed/glmm_binomial.csv +0 -0
  412. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/mixed/glmm_poisson.csv +0 -0
  413. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/mixed/lmm_crossed.csv +0 -0
  414. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/mixed/lmm_intercept.csv +0 -0
  415. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/mixed/lmm_ml.csv +0 -0
  416. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/mixed/lmm_no_effect.csv +0 -0
  417. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/mixed/lmm_slope.csv +0 -0
  418. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/mixed/mixed_meta.json +0 -0
  419. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/mixed/mixed_r_results.json +0 -0
  420. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/near_square.csv +0 -0
  421. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/near_square_meta.json +0 -0
  422. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/near_square_r_results.json +0 -0
  423. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/no_intercept.csv +0 -0
  424. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/no_intercept_meta.json +0 -0
  425. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/no_intercept_r_results.json +0 -0
  426. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/run_r_anova_validation.R +0 -0
  427. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/run_r_descriptive_validation.R +0 -0
  428. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/run_r_glm_validation.R +0 -0
  429. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/run_r_hypothesis_validation.R +0 -0
  430. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/run_r_mixed_validation.R +0 -0
  431. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/run_r_montecarlo_validation.R +0 -0
  432. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/run_r_survival_validation.R +0 -0
  433. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/run_r_validation.R +0 -0
  434. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/run_validation.sh +0 -0
  435. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/small_noise.csv +0 -0
  436. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/small_noise_meta.json +0 -0
  437. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/small_noise_r_results.json +0 -0
  438. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/surv_cox_breslow_meta.json +0 -0
  439. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/surv_cox_breslow_r_results.json +0 -0
  440. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/surv_cox_single_meta.json +0 -0
  441. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/surv_cox_single_r_results.json +0 -0
  442. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/surv_cox_ties_meta.json +0 -0
  443. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/surv_cox_ties_r_results.json +0 -0
  444. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/surv_cox_two_cov_meta.json +0 -0
  445. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/surv_cox_two_cov_r_results.json +0 -0
  446. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/surv_km_basic_meta.json +0 -0
  447. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/surv_km_basic_r_results.json +0 -0
  448. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/surv_km_heavy_cens_meta.json +0 -0
  449. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/surv_km_heavy_cens_r_results.json +0 -0
  450. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/surv_km_loglog_ci_meta.json +0 -0
  451. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/surv_km_loglog_ci_r_results.json +0 -0
  452. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/surv_km_no_cens_meta.json +0 -0
  453. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/surv_km_no_cens_r_results.json +0 -0
  454. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/surv_km_plain_ci_meta.json +0 -0
  455. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/surv_km_plain_ci_r_results.json +0 -0
  456. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/surv_km_ties_meta.json +0 -0
  457. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/surv_km_ties_r_results.json +0 -0
  458. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/surv_lr_peto_meta.json +0 -0
  459. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/surv_lr_peto_r_results.json +0 -0
  460. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/surv_lr_three_group_meta.json +0 -0
  461. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/surv_lr_three_group_r_results.json +0 -0
  462. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/surv_lr_two_group_meta.json +0 -0
  463. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/surv_lr_two_group_r_results.json +0 -0
  464. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/tall_skinny.csv +0 -0
  465. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/tall_skinny_meta.json +0 -0
  466. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/tall_skinny_r_results.json +0 -0
  467. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/fixtures/validate_against_r.py +0 -0
  468. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/gam/__init__.py +0 -0
  469. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/gam/test_gam.py +0 -0
  470. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/hypothesis/__init__.py +0 -0
  471. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/hypothesis/conftest.py +0 -0
  472. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/hypothesis/test_chisq_test.py +0 -0
  473. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/hypothesis/test_design_split.py +0 -0
  474. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/hypothesis/test_fisher_test.py +0 -0
  475. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/hypothesis/test_gpu.py +0 -0
  476. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/hypothesis/test_ks_test.py +0 -0
  477. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/hypothesis/test_p_adjust.py +0 -0
  478. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/hypothesis/test_prop_test.py +0 -0
  479. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/hypothesis/test_r_validation.py +0 -0
  480. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/hypothesis/test_t_test.py +0 -0
  481. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/hypothesis/test_var_test.py +0 -0
  482. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/hypothesis/test_wilcox_test.py +0 -0
  483. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/mixed/__init__.py +0 -0
  484. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/mixed/conftest.py +0 -0
  485. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/mixed/test_glmm.py +0 -0
  486. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/mixed/test_lmm_crossed.py +0 -0
  487. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/mixed/test_lmm_intercept.py +0 -0
  488. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/mixed/test_lmm_nested.py +0 -0
  489. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/mixed/test_lmm_slope.py +0 -0
  490. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/mixed/test_pls.py +0 -0
  491. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/mixed/test_r_validation.py +0 -0
  492. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/mixed/test_random_effects.py +0 -0
  493. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/mixed/test_satterthwaite.py +0 -0
  494. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/montecarlo/__init__.py +0 -0
  495. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/montecarlo/conftest.py +0 -0
  496. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/montecarlo/test_batched_solver.py +0 -0
  497. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/montecarlo/test_boot_ci.py +0 -0
  498. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/montecarlo/test_bootstrap.py +0 -0
  499. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/montecarlo/test_gpu.py +0 -0
  500. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/montecarlo/test_influence.py +0 -0
  501. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/montecarlo/test_permutation.py +0 -0
  502. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/montecarlo/test_r_validation.py +0 -0
  503. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/multinomial/__init__.py +0 -0
  504. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/multinomial/test_multinom.py +0 -0
  505. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/multivariate/__init__.py +0 -0
  506. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/multivariate/test_multivariate.py +0 -0
  507. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/mvnmle/references/apple_em_reference.json +0 -0
  508. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/mvnmle/references/apple_reference.json +0 -0
  509. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/mvnmle/references/generate_em_fixtures.R +0 -0
  510. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/mvnmle/references/little_mcar_apple.json +0 -0
  511. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/mvnmle/references/little_mcar_complete.json +0 -0
  512. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/mvnmle/references/little_mcar_extreme.json +0 -0
  513. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/mvnmle/references/little_mcar_missvals.json +0 -0
  514. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/mvnmle/references/little_mcar_simple_mcar.json +0 -0
  515. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/mvnmle/references/little_mcar_summary.json +0 -0
  516. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/mvnmle/references/missvals_em_reference.json +0 -0
  517. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/mvnmle/references/missvals_reference.json +0 -0
  518. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/mvnmle/references/small_test_reference.json +0 -0
  519. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/mvnmle/test_em.py +0 -0
  520. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/mvnmle/test_gpu.py +0 -0
  521. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/mvnmle/test_mcar.py +0 -0
  522. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/mvnmle/test_mlest.py +0 -0
  523. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/mvnmle/test_mom_mcar.py +0 -0
  524. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/mvnmle/test_monotone.py +0 -0
  525. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/mvnmle/test_no_silent_fallback.py +0 -0
  526. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/mvnmle/test_squarem.py +0 -0
  527. {pystatistics-2.2.0/tests/ordinal → pystatistics-2.3.0/tests/nonparametric_mcar}/__init__.py +0 -0
  528. {pystatistics-2.2.0/tests/survival → pystatistics-2.3.0/tests/ordinal}/__init__.py +0 -0
  529. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/ordinal/test_ordinal.py +0 -0
  530. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/regression/benchmark.py +0 -0
  531. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/regression/benchmark.r +0 -0
  532. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/regression/conftest.py +0 -0
  533. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/regression/test_fit.py +0 -0
  534. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/regression/test_gamma_nb.py +0 -0
  535. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/regression/test_glm.py +0 -0
  536. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/regression/test_glm_gpu.py +0 -0
  537. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/regression/test_glm_r_validation.py +0 -0
  538. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/regression/test_module_split.py +0 -0
  539. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/regression/test_r_validation.py +0 -0
  540. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/regression/test_stress_gpu.py +0 -0
  541. {pystatistics-2.2.0/tests/timeseries → pystatistics-2.3.0/tests/survival}/__init__.py +0 -0
  542. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/survival/conftest.py +0 -0
  543. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/survival/test_coxph.py +0 -0
  544. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/survival/test_discrete_time.py +0 -0
  545. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/survival/test_gpu.py +0 -0
  546. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/survival/test_kaplan_meier.py +0 -0
  547. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/survival/test_logrank.py +0 -0
  548. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/survival/test_r_validation.py +0 -0
  549. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/test_code_quality.py +0 -0
  550. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/timeseries/test_acf_stationarity.py +0 -0
  551. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/timeseries/test_arima.py +0 -0
  552. {pystatistics-2.2.0 → pystatistics-2.3.0}/tests/timeseries/test_decomposition.py +0 -0
  553. {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.2.0
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
- Continuation of the 2.1.0 dogfooding track. Running `little_mcar_test`
57
- and `mom_mcar_test` on 3,080 (dataset × generator) pairs drawn from 28
58
- real UCI / OpenML / sklearn tabular datasets under
59
- `lacuna_tabular_110` missingness generators surfaced four classes of
60
- numerical failure that synthetic unit tests did not exhibit. All fixed
61
- in this release; no API breaks.
62
-
63
- **Batched MoM GPU Cholesky crash.** `chi_square_mcar_batched_torch`'s
64
- fast path selected `cholesky_solve` whenever the SVD-based condition
65
- number check passed, on the assumption that good conditioning implies
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
- Continuation of the 2.1.0 dogfooding track. Running `little_mcar_test`
10
- and `mom_mcar_test` on 3,080 (dataset × generator) pairs drawn from 28
11
- real UCI / OpenML / sklearn tabular datasets under
12
- `lacuna_tabular_110` missingness generators surfaced four classes of
13
- numerical failure that synthetic unit tests did not exhibit. All fixed
14
- in this release; no API breaks.
15
-
16
- **Batched MoM GPU Cholesky crash.** `chi_square_mcar_batched_torch`'s
17
- fast path selected `cholesky_solve` whenever the SVD-based condition
18
- number check passed, on the assumption that good conditioning implies
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.2.0"
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",
@@ -16,7 +16,7 @@ Usage:
16
16
  result = fit(design)
17
17
  """
18
18
 
19
- __version__ = "2.2.0"
19
+ __version__ = "2.3.0"
20
20
  __author__ = "Hai-Shuo"
21
21
  __email__ = "contact@sgcx.org"
22
22
 
@@ -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
+ ]