pystatistics 2.1.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.1.0 → pystatistics-2.3.0}/CHANGELOG.md +140 -0
  2. {pystatistics-2.1.0 → pystatistics-2.3.0}/PKG-INFO +69 -1
  3. {pystatistics-2.1.0 → pystatistics-2.3.0}/README.md +66 -0
  4. {pystatistics-2.1.0 → pystatistics-2.3.0}/pyproject.toml +7 -1
  5. {pystatistics-2.1.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.1.0 → pystatistics-2.3.0}/pystatistics/mvnmle/backends/em.py +54 -6
  11. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/mvnmle/mcar_test.py +12 -2
  12. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/mvnmle/solvers.py +9 -3
  13. pystatistics-2.3.0/pystatistics/nonparametric_mcar/__init__.py +45 -0
  14. pystatistics-2.3.0/pystatistics/nonparametric_mcar/hsic.py +237 -0
  15. pystatistics-2.3.0/pystatistics/nonparametric_mcar/missmech.py +254 -0
  16. pystatistics-2.3.0/pystatistics/nonparametric_mcar/propensity.py +285 -0
  17. pystatistics-2.3.0/pystatistics/nonparametric_mcar/result.py +67 -0
  18. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/mvnmle/test_mcar.py +6 -1
  19. pystatistics-2.3.0/tests/nonparametric_mcar/test_hsic.py +112 -0
  20. pystatistics-2.3.0/tests/nonparametric_mcar/test_missmech.py +110 -0
  21. pystatistics-2.3.0/tests/nonparametric_mcar/test_propensity.py +145 -0
  22. pystatistics-2.3.0/tests/timeseries/__init__.py +0 -0
  23. pystatistics-2.1.0/pystatistics/mvnmle/backends/_em_batched.py +0 -795
  24. {pystatistics-2.1.0 → pystatistics-2.3.0}/.github/workflows/publish.yml +0 -0
  25. {pystatistics-2.1.0 → pystatistics-2.3.0}/.github/workflows/trigger-docs-rebuild.yml +0 -0
  26. {pystatistics-2.1.0 → pystatistics-2.3.0}/.gitignore +0 -0
  27. {pystatistics-2.1.0 → pystatistics-2.3.0}/.release/CHECKLIST.md +0 -0
  28. {pystatistics-2.1.0 → pystatistics-2.3.0}/.release/UNRELEASED.md +0 -0
  29. {pystatistics-2.1.0 → pystatistics-2.3.0}/.release/release.py +0 -0
  30. {pystatistics-2.1.0 → pystatistics-2.3.0}/CLAUDE.md +0 -0
  31. {pystatistics-2.1.0 → pystatistics-2.3.0}/LICENSE +0 -0
  32. {pystatistics-2.1.0 → pystatistics-2.3.0}/benchmarks/mvnmle_bench.py +0 -0
  33. {pystatistics-2.1.0 → pystatistics-2.3.0}/docs/DESIGN.md +0 -0
  34. {pystatistics-2.1.0 → pystatistics-2.3.0}/docs/Forge.md +0 -0
  35. {pystatistics-2.1.0 → pystatistics-2.3.0}/docs/GPU_BACKEND_NOTES.md +0 -0
  36. {pystatistics-2.1.0 → pystatistics-2.3.0}/docs/Makefile +0 -0
  37. {pystatistics-2.1.0 → pystatistics-2.3.0}/docs/PYSTATSBIO_CONTEXT.md +0 -0
  38. {pystatistics-2.1.0 → pystatistics-2.3.0}/docs/ROADMAP.md +0 -0
  39. {pystatistics-2.1.0 → pystatistics-2.3.0}/docs/_static/custom.css +0 -0
  40. {pystatistics-2.1.0 → pystatistics-2.3.0}/docs/anova.rst +0 -0
  41. {pystatistics-2.1.0 → pystatistics-2.3.0}/docs/conf.py +0 -0
  42. {pystatistics-2.1.0 → pystatistics-2.3.0}/docs/core.rst +0 -0
  43. {pystatistics-2.1.0 → pystatistics-2.3.0}/docs/descriptive.rst +0 -0
  44. {pystatistics-2.1.0 → pystatistics-2.3.0}/docs/hypothesis.rst +0 -0
  45. {pystatistics-2.1.0 → pystatistics-2.3.0}/docs/index.rst +0 -0
  46. {pystatistics-2.1.0 → pystatistics-2.3.0}/docs/mixed.rst +0 -0
  47. {pystatistics-2.1.0 → pystatistics-2.3.0}/docs/montecarlo.rst +0 -0
  48. {pystatistics-2.1.0 → pystatistics-2.3.0}/docs/mvnmle.rst +0 -0
  49. {pystatistics-2.1.0 → pystatistics-2.3.0}/docs/regression.rst +0 -0
  50. {pystatistics-2.1.0 → pystatistics-2.3.0}/docs/survival.rst +0 -0
  51. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/GPU_BACKEND_CONVENTION.md +0 -0
  52. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/anova/__init__.py +0 -0
  53. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/anova/_common.py +0 -0
  54. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/anova/_contrasts.py +0 -0
  55. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/anova/_levene.py +0 -0
  56. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/anova/_posthoc.py +0 -0
  57. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/anova/_repeated.py +0 -0
  58. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/anova/_ss.py +0 -0
  59. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/anova/design.py +0 -0
  60. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/anova/solution.py +0 -0
  61. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/anova/solvers.py +0 -0
  62. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/core/__init__.py +0 -0
  63. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/core/capabilities.py +0 -0
  64. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/core/compute/__init__.py +0 -0
  65. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/core/compute/device.py +0 -0
  66. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/core/compute/linalg/__init__.py +0 -0
  67. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/core/compute/linalg/batched.py +0 -0
  68. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/core/compute/linalg/cholesky.py +0 -0
  69. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/core/compute/linalg/determinant.py +0 -0
  70. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/core/compute/linalg/qr.py +0 -0
  71. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/core/compute/linalg/solve.py +0 -0
  72. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/core/compute/linalg/svd.py +0 -0
  73. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/core/compute/optimization/__init__.py +0 -0
  74. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/core/compute/optimization/convergence.py +0 -0
  75. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/core/compute/precision.py +0 -0
  76. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/core/compute/timing.py +0 -0
  77. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/core/compute/tolerances.py +0 -0
  78. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/core/datasource.py +0 -0
  79. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/core/exceptions.py +0 -0
  80. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/core/protocols.py +0 -0
  81. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/core/result.py +0 -0
  82. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/core/validation.py +0 -0
  83. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/descriptive/__init__.py +0 -0
  84. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/descriptive/_missing.py +0 -0
  85. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/descriptive/_quantile_types.py +0 -0
  86. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/descriptive/backends/__init__.py +0 -0
  87. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/descriptive/backends/cpu.py +0 -0
  88. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/descriptive/backends/gpu.py +0 -0
  89. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/descriptive/design.py +0 -0
  90. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/descriptive/solution.py +0 -0
  91. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/descriptive/solvers.py +0 -0
  92. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/gam/__init__.py +0 -0
  93. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/gam/_basis.py +0 -0
  94. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/gam/_common.py +0 -0
  95. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/gam/_fit.py +0 -0
  96. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/gam/_gam.py +0 -0
  97. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/gam/_gcv.py +0 -0
  98. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/gam/_smooth.py +0 -0
  99. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/gam/backends/__init__.py +0 -0
  100. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/gam/backends/_gpu_family.py +0 -0
  101. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/gam/backends/gpu_pirls.py +0 -0
  102. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/gam/solution.py +0 -0
  103. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/hypothesis/__init__.py +0 -0
  104. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/hypothesis/_common.py +0 -0
  105. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/hypothesis/_design_factories.py +0 -0
  106. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/hypothesis/_p_adjust.py +0 -0
  107. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/hypothesis/backends/__init__.py +0 -0
  108. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/hypothesis/backends/_chisq_test.py +0 -0
  109. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/hypothesis/backends/_fisher_test.py +0 -0
  110. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/hypothesis/backends/_ks_test.py +0 -0
  111. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/hypothesis/backends/_prop_test.py +0 -0
  112. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/hypothesis/backends/_t_test.py +0 -0
  113. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/hypothesis/backends/_var_test.py +0 -0
  114. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/hypothesis/backends/_wilcox_test.py +0 -0
  115. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/hypothesis/backends/cpu.py +0 -0
  116. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/hypothesis/backends/gpu.py +0 -0
  117. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/hypothesis/design.py +0 -0
  118. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/hypothesis/solution.py +0 -0
  119. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/hypothesis/solvers.py +0 -0
  120. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/mixed/__init__.py +0 -0
  121. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/mixed/_common.py +0 -0
  122. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/mixed/_deviance.py +0 -0
  123. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/mixed/_pirls.py +0 -0
  124. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/mixed/_pls.py +0 -0
  125. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/mixed/_random_effects.py +0 -0
  126. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/mixed/_satterthwaite.py +0 -0
  127. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/mixed/design.py +0 -0
  128. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/mixed/solution.py +0 -0
  129. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/mixed/solvers.py +0 -0
  130. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/montecarlo/__init__.py +0 -0
  131. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/montecarlo/_ci.py +0 -0
  132. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/montecarlo/_common.py +0 -0
  133. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/montecarlo/_influence.py +0 -0
  134. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/montecarlo/backends/__init__.py +0 -0
  135. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/montecarlo/backends/cpu.py +0 -0
  136. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/montecarlo/backends/gpu.py +0 -0
  137. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/montecarlo/design.py +0 -0
  138. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/montecarlo/solution.py +0 -0
  139. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/montecarlo/solvers.py +0 -0
  140. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/multinomial/__init__.py +0 -0
  141. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/multinomial/_common.py +0 -0
  142. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/multinomial/_likelihood.py +0 -0
  143. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/multinomial/_solver.py +0 -0
  144. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/multinomial/backends/__init__.py +0 -0
  145. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/multinomial/backends/gpu_likelihood.py +0 -0
  146. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/multinomial/solution.py +0 -0
  147. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/multivariate/__init__.py +0 -0
  148. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/multivariate/_common.py +0 -0
  149. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/multivariate/_factor.py +0 -0
  150. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/multivariate/_pca.py +0 -0
  151. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/multivariate/_rotation.py +0 -0
  152. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/multivariate/backends/__init__.py +0 -0
  153. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/multivariate/backends/gpu_pca.py +0 -0
  154. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/mvnmle/__init__.py +0 -0
  155. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/mvnmle/_monotone.py +0 -0
  156. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/mvnmle/_objectives/__init__.py +0 -0
  157. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/mvnmle/_objectives/base.py +0 -0
  158. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/mvnmle/_objectives/cpu.py +0 -0
  159. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/mvnmle/_objectives/gpu_fp32.py +0 -0
  160. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/mvnmle/_objectives/gpu_fp64.py +0 -0
  161. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/mvnmle/_objectives/parameterizations.py +0 -0
  162. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/mvnmle/_utils.py +0 -0
  163. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/mvnmle/backends/__init__.py +0 -0
  164. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/mvnmle/backends/_squarem.py +0 -0
  165. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/mvnmle/backends/cpu.py +0 -0
  166. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/mvnmle/backends/gpu.py +0 -0
  167. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/mvnmle/datasets.py +0 -0
  168. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/mvnmle/design.py +0 -0
  169. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/mvnmle/patterns.py +0 -0
  170. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/mvnmle/solution.py +0 -0
  171. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/ordinal/__init__.py +0 -0
  172. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/ordinal/_common.py +0 -0
  173. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/ordinal/_likelihood.py +0 -0
  174. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/ordinal/_solver.py +0 -0
  175. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/ordinal/backends/__init__.py +0 -0
  176. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/ordinal/backends/gpu_likelihood.py +0 -0
  177. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/ordinal/solution.py +0 -0
  178. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/py.typed +0 -0
  179. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/regression/__init__.py +0 -0
  180. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/regression/_formatting.py +0 -0
  181. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/regression/_glm.py +0 -0
  182. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/regression/_linear.py +0 -0
  183. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/regression/_nb_theta.py +0 -0
  184. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/regression/backends/__init__.py +0 -0
  185. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/regression/backends/cpu.py +0 -0
  186. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/regression/backends/cpu_glm.py +0 -0
  187. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/regression/backends/gpu.py +0 -0
  188. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/regression/backends/gpu_glm.py +0 -0
  189. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/regression/design.py +0 -0
  190. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/regression/families.py +0 -0
  191. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/regression/solution.py +0 -0
  192. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/regression/solvers.py +0 -0
  193. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/survival/__init__.py +0 -0
  194. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/survival/_common.py +0 -0
  195. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/survival/_cox.py +0 -0
  196. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/survival/_discrete.py +0 -0
  197. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/survival/_km.py +0 -0
  198. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/survival/_logrank.py +0 -0
  199. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/survival/backends/__init__.py +0 -0
  200. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/survival/backends/cpu.py +0 -0
  201. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/survival/backends/gpu.py +0 -0
  202. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/survival/design.py +0 -0
  203. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/survival/solution.py +0 -0
  204. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/survival/solvers.py +0 -0
  205. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/timeseries/__init__.py +0 -0
  206. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/timeseries/_acf.py +0 -0
  207. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/timeseries/_arima_batch.py +0 -0
  208. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/timeseries/_arima_factored.py +0 -0
  209. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/timeseries/_arima_fit.py +0 -0
  210. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/timeseries/_arima_forecast.py +0 -0
  211. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/timeseries/_arima_kalman.py +0 -0
  212. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/timeseries/_arima_likelihood.py +0 -0
  213. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/timeseries/_arima_order.py +0 -0
  214. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/timeseries/_common.py +0 -0
  215. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/timeseries/_decomposition.py +0 -0
  216. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/timeseries/_differencing.py +0 -0
  217. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/timeseries/_ets_fit.py +0 -0
  218. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/timeseries/_ets_forecast.py +0 -0
  219. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/timeseries/_ets_models.py +0 -0
  220. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/timeseries/_stationarity.py +0 -0
  221. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/timeseries/_whittle.py +0 -0
  222. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/timeseries/backends/__init__.py +0 -0
  223. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/timeseries/backends/whittle_batch_gpu.py +0 -0
  224. {pystatistics-2.1.0 → pystatistics-2.3.0}/pystatistics/timeseries/backends/whittle_gpu.py +0 -0
  225. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/anova/__init__.py +0 -0
  226. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/anova/conftest.py +0 -0
  227. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/anova/test_contrasts.py +0 -0
  228. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/anova/test_design.py +0 -0
  229. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/anova/test_factorial.py +0 -0
  230. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/anova/test_levene.py +0 -0
  231. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/anova/test_oneway.py +0 -0
  232. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/anova/test_posthoc.py +0 -0
  233. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/anova/test_r_validation.py +0 -0
  234. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/anova/test_repeated_measures.py +0 -0
  235. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/benchmark_gpu.py +0 -0
  236. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/conftest.py +0 -0
  237. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/core/test_datasource.py +0 -0
  238. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/core/test_exceptions.py +0 -0
  239. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/core/test_result.py +0 -0
  240. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/core/test_validation.py +0 -0
  241. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/descriptive/__init__.py +0 -0
  242. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/descriptive/conftest.py +0 -0
  243. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/descriptive/test_cor.py +0 -0
  244. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/descriptive/test_cov.py +0 -0
  245. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/descriptive/test_describe.py +0 -0
  246. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/descriptive/test_gpu.py +0 -0
  247. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/descriptive/test_missing.py +0 -0
  248. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/descriptive/test_moments.py +0 -0
  249. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/descriptive/test_quantile.py +0 -0
  250. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/descriptive/test_r_validation.py +0 -0
  251. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/anova_ancova_meta.json +0 -0
  252. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/anova_ancova_r_results.json +0 -0
  253. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/anova_bonferroni_meta.json +0 -0
  254. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/anova_bonferroni_r_results.json +0 -0
  255. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/anova_eta_meta.json +0 -0
  256. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/anova_eta_r_results.json +0 -0
  257. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/anova_levene_meta.json +0 -0
  258. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/anova_levene_r_results.json +0 -0
  259. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/anova_oneway_balanced_meta.json +0 -0
  260. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/anova_oneway_balanced_r_results.json +0 -0
  261. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/anova_oneway_unbalanced_meta.json +0 -0
  262. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/anova_oneway_unbalanced_r_results.json +0 -0
  263. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/anova_rm_mixed_meta.json +0 -0
  264. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/anova_rm_mixed_r_results.json +0 -0
  265. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/anova_rm_within_meta.json +0 -0
  266. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/anova_rm_within_r_results.json +0 -0
  267. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/anova_tukey_meta.json +0 -0
  268. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/anova_tukey_r_results.json +0 -0
  269. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/anova_twoway_balanced_meta.json +0 -0
  270. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/anova_twoway_balanced_r_results.json +0 -0
  271. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/anova_twoway_unbalanced_meta.json +0 -0
  272. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/anova_twoway_unbalanced_r_results.json +0 -0
  273. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/basic_100x3.csv +0 -0
  274. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/basic_100x3_meta.json +0 -0
  275. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/basic_100x3_r_results.json +0 -0
  276. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/collinear_almost.csv +0 -0
  277. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/collinear_almost_meta.json +0 -0
  278. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/collinear_almost_r_results.json +0 -0
  279. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/desc_basic_100x5.csv +0 -0
  280. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/desc_basic_100x5_meta.json +0 -0
  281. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/desc_basic_100x5_r_results.json +0 -0
  282. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/desc_constant_column.csv +0 -0
  283. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/desc_constant_column_meta.json +0 -0
  284. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/desc_constant_column_r_results.json +0 -0
  285. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/desc_extreme_values.csv +0 -0
  286. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/desc_extreme_values_meta.json +0 -0
  287. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/desc_extreme_values_r_results.json +0 -0
  288. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/desc_large_1000x10.csv +0 -0
  289. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/desc_large_1000x10_meta.json +0 -0
  290. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/desc_large_1000x10_r_results.json +0 -0
  291. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/desc_nan_columnwise.csv +0 -0
  292. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/desc_nan_columnwise_meta.json +0 -0
  293. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/desc_nan_columnwise_r_results.json +0 -0
  294. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/desc_nan_scattered.csv +0 -0
  295. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/desc_nan_scattered_meta.json +0 -0
  296. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/desc_nan_scattered_r_results.json +0 -0
  297. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/desc_negative_correlation.csv +0 -0
  298. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/desc_negative_correlation_meta.json +0 -0
  299. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/desc_negative_correlation_r_results.json +0 -0
  300. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/desc_perfect_correlation.csv +0 -0
  301. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/desc_perfect_correlation_meta.json +0 -0
  302. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/desc_perfect_correlation_r_results.json +0 -0
  303. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/desc_single_column.csv +0 -0
  304. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/desc_single_column_meta.json +0 -0
  305. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/desc_single_column_r_results.json +0 -0
  306. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/desc_ties.csv +0 -0
  307. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/desc_ties_meta.json +0 -0
  308. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/desc_ties_r_results.json +0 -0
  309. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/different_scales.csv +0 -0
  310. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/different_scales_meta.json +0 -0
  311. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/different_scales_r_results.json +0 -0
  312. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/generate_anova_fixtures.py +0 -0
  313. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/generate_descriptive_fixtures.py +0 -0
  314. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/generate_fixtures.py +0 -0
  315. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/generate_glm_fixtures.py +0 -0
  316. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/generate_hypothesis_fixtures.py +0 -0
  317. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/generate_mixed_fixtures.py +0 -0
  318. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/generate_montecarlo_fixtures.py +0 -0
  319. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/generate_survival_fixtures.py +0 -0
  320. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/glm_binomial_balanced.csv +0 -0
  321. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/glm_binomial_balanced_meta.json +0 -0
  322. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/glm_binomial_balanced_r_results.json +0 -0
  323. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/glm_binomial_basic.csv +0 -0
  324. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/glm_binomial_basic_meta.json +0 -0
  325. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/glm_binomial_basic_r_results.json +0 -0
  326. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/glm_binomial_large.csv +0 -0
  327. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/glm_binomial_large_meta.json +0 -0
  328. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/glm_binomial_large_r_results.json +0 -0
  329. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/glm_binomial_separated.csv +0 -0
  330. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/glm_binomial_separated_meta.json +0 -0
  331. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/glm_binomial_separated_r_results.json +0 -0
  332. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/glm_gaussian_basic.csv +0 -0
  333. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/glm_gaussian_basic_meta.json +0 -0
  334. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/glm_gaussian_basic_r_results.json +0 -0
  335. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/glm_gaussian_large.csv +0 -0
  336. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/glm_gaussian_large_meta.json +0 -0
  337. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/glm_gaussian_large_r_results.json +0 -0
  338. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/glm_poisson_basic.csv +0 -0
  339. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/glm_poisson_basic_meta.json +0 -0
  340. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/glm_poisson_basic_r_results.json +0 -0
  341. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/glm_poisson_large_counts.csv +0 -0
  342. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/glm_poisson_large_counts_meta.json +0 -0
  343. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/glm_poisson_large_counts_r_results.json +0 -0
  344. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/glm_poisson_zeros.csv +0 -0
  345. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/glm_poisson_zeros_meta.json +0 -0
  346. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/glm_poisson_zeros_r_results.json +0 -0
  347. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/high_noise.csv +0 -0
  348. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/high_noise_meta.json +0 -0
  349. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/high_noise_r_results.json +0 -0
  350. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/htest_chisq_2x2_yates_meta.json +0 -0
  351. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/htest_chisq_2x2_yates_r_results.json +0 -0
  352. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/htest_chisq_3x3_meta.json +0 -0
  353. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/htest_chisq_3x3_r_results.json +0 -0
  354. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/htest_chisq_gof_meta.json +0 -0
  355. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/htest_chisq_gof_r_results.json +0 -0
  356. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/htest_chisq_gof_unequal_meta.json +0 -0
  357. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/htest_chisq_gof_unequal_r_results.json +0 -0
  358. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/htest_fisher_2x2_less_meta.json +0 -0
  359. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/htest_fisher_2x2_less_r_results.json +0 -0
  360. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/htest_fisher_2x2_meta.json +0 -0
  361. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/htest_fisher_2x2_r_results.json +0 -0
  362. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/htest_fisher_3x3_meta.json +0 -0
  363. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/htest_fisher_3x3_r_results.json +0 -0
  364. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/htest_ks_onesample_norm_meta.json +0 -0
  365. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/htest_ks_onesample_norm_r_results.json +0 -0
  366. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/htest_ks_twosample_meta.json +0 -0
  367. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/htest_ks_twosample_r_results.json +0 -0
  368. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/htest_prop_onesample_meta.json +0 -0
  369. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/htest_prop_onesample_r_results.json +0 -0
  370. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/htest_prop_twosample_meta.json +0 -0
  371. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/htest_prop_twosample_r_results.json +0 -0
  372. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/htest_t_onesample_meta.json +0 -0
  373. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/htest_t_onesample_r_results.json +0 -0
  374. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/htest_t_paired_meta.json +0 -0
  375. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/htest_t_paired_r_results.json +0 -0
  376. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/htest_t_pooled_meta.json +0 -0
  377. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/htest_t_pooled_r_results.json +0 -0
  378. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/htest_t_welch_meta.json +0 -0
  379. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/htest_t_welch_r_results.json +0 -0
  380. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/htest_var_basic_meta.json +0 -0
  381. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/htest_var_basic_r_results.json +0 -0
  382. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/htest_wilcox_ranksum_meta.json +0 -0
  383. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/htest_wilcox_ranksum_r_results.json +0 -0
  384. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/htest_wilcox_signed_meta.json +0 -0
  385. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/htest_wilcox_signed_r_results.json +0 -0
  386. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/ill_conditioned.csv +0 -0
  387. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/ill_conditioned_meta.json +0 -0
  388. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/ill_conditioned_r_results.json +0 -0
  389. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/large_coeffs.csv +0 -0
  390. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/large_coeffs_meta.json +0 -0
  391. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/large_coeffs_r_results.json +0 -0
  392. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/mc_boot_ci_90_meta.json +0 -0
  393. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/mc_boot_ci_90_r_results.json +0 -0
  394. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/mc_boot_ci_normal_meta.json +0 -0
  395. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/mc_boot_ci_normal_r_results.json +0 -0
  396. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/mc_boot_ci_skewed_meta.json +0 -0
  397. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/mc_boot_ci_skewed_r_results.json +0 -0
  398. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/mc_boot_mean_balanced_meta.json +0 -0
  399. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/mc_boot_mean_balanced_r_results.json +0 -0
  400. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/mc_boot_mean_ordinary_meta.json +0 -0
  401. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/mc_boot_mean_ordinary_r_results.json +0 -0
  402. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/mc_boot_median_meta.json +0 -0
  403. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/mc_boot_median_r_results.json +0 -0
  404. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/mc_boot_variance_meta.json +0 -0
  405. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/mc_boot_variance_r_results.json +0 -0
  406. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/mc_perm_greater_meta.json +0 -0
  407. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/mc_perm_greater_r_results.json +0 -0
  408. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/mc_perm_not_significant_meta.json +0 -0
  409. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/mc_perm_not_significant_r_results.json +0 -0
  410. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/mc_perm_significant_meta.json +0 -0
  411. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/mc_perm_significant_r_results.json +0 -0
  412. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/mixed/glmm_binomial.csv +0 -0
  413. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/mixed/glmm_poisson.csv +0 -0
  414. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/mixed/lmm_crossed.csv +0 -0
  415. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/mixed/lmm_intercept.csv +0 -0
  416. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/mixed/lmm_ml.csv +0 -0
  417. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/mixed/lmm_no_effect.csv +0 -0
  418. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/mixed/lmm_slope.csv +0 -0
  419. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/mixed/mixed_meta.json +0 -0
  420. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/mixed/mixed_r_results.json +0 -0
  421. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/near_square.csv +0 -0
  422. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/near_square_meta.json +0 -0
  423. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/near_square_r_results.json +0 -0
  424. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/no_intercept.csv +0 -0
  425. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/no_intercept_meta.json +0 -0
  426. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/no_intercept_r_results.json +0 -0
  427. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/run_r_anova_validation.R +0 -0
  428. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/run_r_descriptive_validation.R +0 -0
  429. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/run_r_glm_validation.R +0 -0
  430. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/run_r_hypothesis_validation.R +0 -0
  431. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/run_r_mixed_validation.R +0 -0
  432. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/run_r_montecarlo_validation.R +0 -0
  433. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/run_r_survival_validation.R +0 -0
  434. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/run_r_validation.R +0 -0
  435. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/run_validation.sh +0 -0
  436. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/small_noise.csv +0 -0
  437. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/small_noise_meta.json +0 -0
  438. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/small_noise_r_results.json +0 -0
  439. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/surv_cox_breslow_meta.json +0 -0
  440. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/surv_cox_breslow_r_results.json +0 -0
  441. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/surv_cox_single_meta.json +0 -0
  442. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/surv_cox_single_r_results.json +0 -0
  443. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/surv_cox_ties_meta.json +0 -0
  444. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/surv_cox_ties_r_results.json +0 -0
  445. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/surv_cox_two_cov_meta.json +0 -0
  446. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/surv_cox_two_cov_r_results.json +0 -0
  447. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/surv_km_basic_meta.json +0 -0
  448. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/surv_km_basic_r_results.json +0 -0
  449. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/surv_km_heavy_cens_meta.json +0 -0
  450. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/surv_km_heavy_cens_r_results.json +0 -0
  451. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/surv_km_loglog_ci_meta.json +0 -0
  452. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/surv_km_loglog_ci_r_results.json +0 -0
  453. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/surv_km_no_cens_meta.json +0 -0
  454. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/surv_km_no_cens_r_results.json +0 -0
  455. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/surv_km_plain_ci_meta.json +0 -0
  456. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/surv_km_plain_ci_r_results.json +0 -0
  457. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/surv_km_ties_meta.json +0 -0
  458. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/surv_km_ties_r_results.json +0 -0
  459. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/surv_lr_peto_meta.json +0 -0
  460. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/surv_lr_peto_r_results.json +0 -0
  461. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/surv_lr_three_group_meta.json +0 -0
  462. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/surv_lr_three_group_r_results.json +0 -0
  463. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/surv_lr_two_group_meta.json +0 -0
  464. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/surv_lr_two_group_r_results.json +0 -0
  465. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/tall_skinny.csv +0 -0
  466. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/tall_skinny_meta.json +0 -0
  467. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/tall_skinny_r_results.json +0 -0
  468. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/fixtures/validate_against_r.py +0 -0
  469. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/gam/__init__.py +0 -0
  470. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/gam/test_gam.py +0 -0
  471. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/hypothesis/__init__.py +0 -0
  472. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/hypothesis/conftest.py +0 -0
  473. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/hypothesis/test_chisq_test.py +0 -0
  474. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/hypothesis/test_design_split.py +0 -0
  475. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/hypothesis/test_fisher_test.py +0 -0
  476. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/hypothesis/test_gpu.py +0 -0
  477. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/hypothesis/test_ks_test.py +0 -0
  478. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/hypothesis/test_p_adjust.py +0 -0
  479. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/hypothesis/test_prop_test.py +0 -0
  480. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/hypothesis/test_r_validation.py +0 -0
  481. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/hypothesis/test_t_test.py +0 -0
  482. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/hypothesis/test_var_test.py +0 -0
  483. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/hypothesis/test_wilcox_test.py +0 -0
  484. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/mixed/__init__.py +0 -0
  485. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/mixed/conftest.py +0 -0
  486. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/mixed/test_glmm.py +0 -0
  487. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/mixed/test_lmm_crossed.py +0 -0
  488. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/mixed/test_lmm_intercept.py +0 -0
  489. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/mixed/test_lmm_nested.py +0 -0
  490. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/mixed/test_lmm_slope.py +0 -0
  491. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/mixed/test_pls.py +0 -0
  492. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/mixed/test_r_validation.py +0 -0
  493. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/mixed/test_random_effects.py +0 -0
  494. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/mixed/test_satterthwaite.py +0 -0
  495. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/montecarlo/__init__.py +0 -0
  496. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/montecarlo/conftest.py +0 -0
  497. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/montecarlo/test_batched_solver.py +0 -0
  498. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/montecarlo/test_boot_ci.py +0 -0
  499. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/montecarlo/test_bootstrap.py +0 -0
  500. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/montecarlo/test_gpu.py +0 -0
  501. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/montecarlo/test_influence.py +0 -0
  502. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/montecarlo/test_permutation.py +0 -0
  503. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/montecarlo/test_r_validation.py +0 -0
  504. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/multinomial/__init__.py +0 -0
  505. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/multinomial/test_multinom.py +0 -0
  506. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/multivariate/__init__.py +0 -0
  507. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/multivariate/test_multivariate.py +0 -0
  508. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/mvnmle/references/apple_em_reference.json +0 -0
  509. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/mvnmle/references/apple_reference.json +0 -0
  510. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/mvnmle/references/generate_em_fixtures.R +0 -0
  511. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/mvnmle/references/little_mcar_apple.json +0 -0
  512. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/mvnmle/references/little_mcar_complete.json +0 -0
  513. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/mvnmle/references/little_mcar_extreme.json +0 -0
  514. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/mvnmle/references/little_mcar_missvals.json +0 -0
  515. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/mvnmle/references/little_mcar_simple_mcar.json +0 -0
  516. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/mvnmle/references/little_mcar_summary.json +0 -0
  517. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/mvnmle/references/missvals_em_reference.json +0 -0
  518. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/mvnmle/references/missvals_reference.json +0 -0
  519. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/mvnmle/references/small_test_reference.json +0 -0
  520. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/mvnmle/test_em.py +0 -0
  521. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/mvnmle/test_gpu.py +0 -0
  522. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/mvnmle/test_mlest.py +0 -0
  523. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/mvnmle/test_mom_mcar.py +0 -0
  524. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/mvnmle/test_monotone.py +0 -0
  525. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/mvnmle/test_no_silent_fallback.py +0 -0
  526. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/mvnmle/test_squarem.py +0 -0
  527. {pystatistics-2.1.0/tests/ordinal → pystatistics-2.3.0/tests/nonparametric_mcar}/__init__.py +0 -0
  528. {pystatistics-2.1.0/tests/survival → pystatistics-2.3.0/tests/ordinal}/__init__.py +0 -0
  529. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/ordinal/test_ordinal.py +0 -0
  530. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/regression/benchmark.py +0 -0
  531. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/regression/benchmark.r +0 -0
  532. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/regression/conftest.py +0 -0
  533. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/regression/test_fit.py +0 -0
  534. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/regression/test_gamma_nb.py +0 -0
  535. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/regression/test_glm.py +0 -0
  536. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/regression/test_glm_gpu.py +0 -0
  537. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/regression/test_glm_r_validation.py +0 -0
  538. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/regression/test_module_split.py +0 -0
  539. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/regression/test_r_validation.py +0 -0
  540. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/regression/test_stress_gpu.py +0 -0
  541. {pystatistics-2.1.0/tests/timeseries → pystatistics-2.3.0/tests/survival}/__init__.py +0 -0
  542. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/survival/conftest.py +0 -0
  543. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/survival/test_coxph.py +0 -0
  544. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/survival/test_discrete_time.py +0 -0
  545. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/survival/test_gpu.py +0 -0
  546. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/survival/test_kaplan_meier.py +0 -0
  547. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/survival/test_logrank.py +0 -0
  548. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/survival/test_r_validation.py +0 -0
  549. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/test_code_quality.py +0 -0
  550. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/timeseries/test_acf_stationarity.py +0 -0
  551. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/timeseries/test_arima.py +0 -0
  552. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/timeseries/test_decomposition.py +0 -0
  553. {pystatistics-2.1.0 → pystatistics-2.3.0}/tests/timeseries/test_ets.py +0 -0
@@ -1,5 +1,145 @@
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
+
79
+ ## 2.2.0
80
+
81
+ - Fixed a `torch._C._LinAlgError` crash in `chi_square_mcar_batched_torch`
82
+ (`pystatistics/mvnmle/backends/_em_batched.py`) on GPU FP32. The batched
83
+ MoM fast path selected `cholesky_solve` when the SVD-based condition
84
+ number was below threshold, but Cholesky requires positive-definiteness,
85
+ which is strictly stronger than good conditioning. On GPU FP32, real
86
+ tabular data (e.g. `lacuna_tabular_110` applied to UCI/OpenML datasets)
87
+ can produce `sigma_oo` with good cond number but tiny negative eigenvalues
88
+ from roundoff, making Cholesky fail. Fix: wrap the fast path in
89
+ `try/except torch._C._LinAlgError`; on failure, fall back to
90
+ `torch.linalg.pinv` for the batch (honouring the `regularize` flag —
91
+ `regularize=False` still raises). Surfaced by dogfooding via Project
92
+ Lacuna on 3,080 (dataset × generator) pairs across the 110-generator
93
+ tabular registry; previously `mom_mcar_test` crashed on the first batch
94
+ containing breast_cancer / wine / credit_card_default.
95
+
96
+ - Fixed an exception-type leak in `little_mcar_test`
97
+ (`pystatistics/mvnmle/mcar_test.py:~250`). The ML-estimation try/except
98
+ wrapped *every* exception — including `PyStatisticsError` subclasses
99
+ like `NumericalError` — as a bare `RuntimeError`, breaking the
100
+ documented `except PyStatisticsError:` pattern downstream and losing
101
+ the original exception chain. Fix: explicitly re-raise
102
+ `PyStatisticsError`, and use `raise ... from e` for anything else so
103
+ the chain is preserved. Surfaced by Project Lacuna's cache builder,
104
+ which catches `PyStatisticsError` to fall back to a sentinel entry
105
+ when Little's test is numerically unfit for a particular
106
+ (dataset, generator) pair; MLE failures were leaking past the catch
107
+ and killing the whole build.
108
+
109
+ - Added ridge-fallback to the batched Cholesky sites inside the EM
110
+ E-step / log-likelihood
111
+ (`pystatistics/mvnmle/backends/_em_batched.py`):
112
+ `e_step_full_batched_np` (line ~361), `_e_step_full_torch` (~680), and
113
+ `_loglik_full_batched_torch` (~797). These compute per-pattern
114
+ Cholesky of sigma_oo sub-blocks; real tabular data can produce
115
+ individual sub-blocks that are numerically indefinite even when the
116
+ global sigma is PD (integer-encoded categoricals with heavy
117
+ collinearity in the intersection of a given missingness pattern's
118
+ observed variables). Fix: wrap each site in `try/except LinAlgError`
119
+ with a `ridge·I` retry (ridge = 1e-10 at pattern scale; statistically
120
+ invisible). Also removed a dead Cholesky call in `e_step_batched_np`
121
+ whose result was never used — it was only a crash liability.
122
+ `np.linalg.solve` at that same site now has a pinv fallback for
123
+ singular sub-blocks.
124
+
125
+ - Added `regularize: bool = True` to `mlest`, `_solve_em`, and
126
+ `EMBackend.solve`, mirroring the existing convention on
127
+ `mom_mcar_test` / `little_mcar_test`. When True (new default),
128
+ `EMBackend._ensure_pd` applies a small diagonal ridge
129
+ (`max(0, 1e-10 - min_eig) + 1e-12`) to the M-step sigma whenever its
130
+ smallest eigenvalue falls below the PD threshold, rather than raising
131
+ `NumericalError` outright. The ridge is vanishingly small relative to
132
+ any real data scale — the typical case the old path rejected had
133
+ min_eig ≈ 1e-13 from pure FP64 roundoff — and a UserWarning makes the
134
+ event visible in logs. Call sites that need strict bit-for-bit
135
+ behaviour pass `regularize=False`. Motivated by Project Lacuna
136
+ dogfooding: applying real missingness generators to real UCI datasets
137
+ (credit_card_default × MNAR-NonLinSocial produced min_eig ≈ -0.66) was
138
+ hard-raising and killing the full cache build; the ridge fallback
139
+ keeps the test numerically well-defined with negligible statistical
140
+ impact, and the build proceeds.
141
+
142
+
3
143
  ## 2.1.0
4
144
 
5
145
  - **`mom_mcar_test`: new method-of-moments MCAR test**
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pystatistics
3
- Version: 2.1.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,6 +53,72 @@ 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
+
109
+ ### 2.2.0 — Real-data robustness from Project Lacuna dogfooding
110
+
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
+
54
122
  ### 2.1.0 — Real-data EM speedup + monotone closed-form MLE
55
123
 
56
124
  Dogfooding via Project Lacuna surfaced that ``little_mcar_test`` on
@@ -4,6 +4,72 @@ 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
+
60
+ ### 2.2.0 — Real-data robustness from Project Lacuna dogfooding
61
+
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.
72
+
7
73
  ### 2.1.0 — Real-data EM speedup + monotone closed-form MLE
8
74
 
9
75
  Dogfooding via Project Lacuna surfaced that ``little_mcar_test`` on
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "pystatistics"
7
- version = "2.1.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.1.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
+ ]