pystatistics 2.3.0__tar.gz → 3.0.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 (552) hide show
  1. {pystatistics-2.3.0 → pystatistics-3.0.0}/CHANGELOG.md +156 -0
  2. {pystatistics-2.3.0 → pystatistics-3.0.0}/CLAUDE.md +39 -0
  3. {pystatistics-2.3.0 → pystatistics-3.0.0}/PKG-INFO +114 -77
  4. {pystatistics-2.3.0 → pystatistics-3.0.0}/README.md +113 -76
  5. {pystatistics-2.3.0 → pystatistics-3.0.0}/pyproject.toml +1 -1
  6. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/__init__.py +1 -1
  7. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/gam/backends/gpu_pirls.py +86 -3
  8. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/mvnmle/__init__.py +0 -2
  9. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/mvnmle/backends/_em_batched.py +9 -8
  10. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/mvnmle/backends/_em_batched_np.py +5 -117
  11. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/mvnmle/backends/_em_batched_torch.py +5 -111
  12. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/mvnmle/backends/em.py +5 -5
  13. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/mvnmle/mcar_test.py +7 -310
  14. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/gam/test_gam.py +33 -1
  15. pystatistics-2.3.0/pystatistics/nonparametric_mcar/__init__.py +0 -45
  16. pystatistics-2.3.0/pystatistics/nonparametric_mcar/hsic.py +0 -237
  17. pystatistics-2.3.0/pystatistics/nonparametric_mcar/missmech.py +0 -254
  18. pystatistics-2.3.0/pystatistics/nonparametric_mcar/propensity.py +0 -285
  19. pystatistics-2.3.0/pystatistics/nonparametric_mcar/result.py +0 -67
  20. pystatistics-2.3.0/tests/mvnmle/test_mom_mcar.py +0 -169
  21. pystatistics-2.3.0/tests/nonparametric_mcar/test_hsic.py +0 -112
  22. pystatistics-2.3.0/tests/nonparametric_mcar/test_missmech.py +0 -110
  23. pystatistics-2.3.0/tests/nonparametric_mcar/test_propensity.py +0 -145
  24. pystatistics-2.3.0/tests/timeseries/__init__.py +0 -0
  25. {pystatistics-2.3.0 → pystatistics-3.0.0}/.github/workflows/publish.yml +0 -0
  26. {pystatistics-2.3.0 → pystatistics-3.0.0}/.github/workflows/trigger-docs-rebuild.yml +0 -0
  27. {pystatistics-2.3.0 → pystatistics-3.0.0}/.gitignore +0 -0
  28. {pystatistics-2.3.0 → pystatistics-3.0.0}/.release/CHECKLIST.md +0 -0
  29. {pystatistics-2.3.0 → pystatistics-3.0.0}/.release/UNRELEASED.md +0 -0
  30. {pystatistics-2.3.0 → pystatistics-3.0.0}/.release/release.py +0 -0
  31. {pystatistics-2.3.0 → pystatistics-3.0.0}/LICENSE +0 -0
  32. {pystatistics-2.3.0 → pystatistics-3.0.0}/benchmarks/mvnmle_bench.py +0 -0
  33. {pystatistics-2.3.0 → pystatistics-3.0.0}/docs/DESIGN.md +0 -0
  34. {pystatistics-2.3.0 → pystatistics-3.0.0}/docs/Forge.md +0 -0
  35. {pystatistics-2.3.0 → pystatistics-3.0.0}/docs/GPU_BACKEND_NOTES.md +0 -0
  36. {pystatistics-2.3.0 → pystatistics-3.0.0}/docs/Makefile +0 -0
  37. {pystatistics-2.3.0 → pystatistics-3.0.0}/docs/PYSTATSBIO_CONTEXT.md +0 -0
  38. {pystatistics-2.3.0 → pystatistics-3.0.0}/docs/ROADMAP.md +0 -0
  39. {pystatistics-2.3.0 → pystatistics-3.0.0}/docs/_static/custom.css +0 -0
  40. {pystatistics-2.3.0 → pystatistics-3.0.0}/docs/anova.rst +0 -0
  41. {pystatistics-2.3.0 → pystatistics-3.0.0}/docs/conf.py +0 -0
  42. {pystatistics-2.3.0 → pystatistics-3.0.0}/docs/core.rst +0 -0
  43. {pystatistics-2.3.0 → pystatistics-3.0.0}/docs/descriptive.rst +0 -0
  44. {pystatistics-2.3.0 → pystatistics-3.0.0}/docs/hypothesis.rst +0 -0
  45. {pystatistics-2.3.0 → pystatistics-3.0.0}/docs/index.rst +0 -0
  46. {pystatistics-2.3.0 → pystatistics-3.0.0}/docs/mixed.rst +0 -0
  47. {pystatistics-2.3.0 → pystatistics-3.0.0}/docs/montecarlo.rst +0 -0
  48. {pystatistics-2.3.0 → pystatistics-3.0.0}/docs/mvnmle.rst +0 -0
  49. {pystatistics-2.3.0 → pystatistics-3.0.0}/docs/regression.rst +0 -0
  50. {pystatistics-2.3.0 → pystatistics-3.0.0}/docs/survival.rst +0 -0
  51. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/GPU_BACKEND_CONVENTION.md +0 -0
  52. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/anova/__init__.py +0 -0
  53. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/anova/_common.py +0 -0
  54. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/anova/_contrasts.py +0 -0
  55. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/anova/_levene.py +0 -0
  56. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/anova/_posthoc.py +0 -0
  57. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/anova/_repeated.py +0 -0
  58. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/anova/_ss.py +0 -0
  59. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/anova/design.py +0 -0
  60. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/anova/solution.py +0 -0
  61. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/anova/solvers.py +0 -0
  62. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/core/__init__.py +0 -0
  63. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/core/capabilities.py +0 -0
  64. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/core/compute/__init__.py +0 -0
  65. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/core/compute/device.py +0 -0
  66. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/core/compute/linalg/__init__.py +0 -0
  67. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/core/compute/linalg/batched.py +0 -0
  68. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/core/compute/linalg/cholesky.py +0 -0
  69. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/core/compute/linalg/determinant.py +0 -0
  70. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/core/compute/linalg/qr.py +0 -0
  71. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/core/compute/linalg/solve.py +0 -0
  72. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/core/compute/linalg/svd.py +0 -0
  73. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/core/compute/optimization/__init__.py +0 -0
  74. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/core/compute/optimization/convergence.py +0 -0
  75. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/core/compute/precision.py +0 -0
  76. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/core/compute/timing.py +0 -0
  77. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/core/compute/tolerances.py +0 -0
  78. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/core/datasource.py +0 -0
  79. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/core/exceptions.py +0 -0
  80. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/core/protocols.py +0 -0
  81. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/core/result.py +0 -0
  82. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/core/validation.py +0 -0
  83. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/descriptive/__init__.py +0 -0
  84. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/descriptive/_missing.py +0 -0
  85. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/descriptive/_quantile_types.py +0 -0
  86. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/descriptive/backends/__init__.py +0 -0
  87. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/descriptive/backends/cpu.py +0 -0
  88. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/descriptive/backends/gpu.py +0 -0
  89. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/descriptive/design.py +0 -0
  90. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/descriptive/solution.py +0 -0
  91. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/descriptive/solvers.py +0 -0
  92. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/gam/__init__.py +0 -0
  93. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/gam/_basis.py +0 -0
  94. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/gam/_common.py +0 -0
  95. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/gam/_fit.py +0 -0
  96. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/gam/_gam.py +0 -0
  97. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/gam/_gcv.py +0 -0
  98. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/gam/_smooth.py +0 -0
  99. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/gam/backends/__init__.py +0 -0
  100. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/gam/backends/_gpu_family.py +0 -0
  101. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/gam/solution.py +0 -0
  102. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/hypothesis/__init__.py +0 -0
  103. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/hypothesis/_common.py +0 -0
  104. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/hypothesis/_design_factories.py +0 -0
  105. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/hypothesis/_p_adjust.py +0 -0
  106. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/hypothesis/backends/__init__.py +0 -0
  107. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/hypothesis/backends/_chisq_test.py +0 -0
  108. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/hypothesis/backends/_fisher_test.py +0 -0
  109. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/hypothesis/backends/_ks_test.py +0 -0
  110. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/hypothesis/backends/_prop_test.py +0 -0
  111. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/hypothesis/backends/_t_test.py +0 -0
  112. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/hypothesis/backends/_var_test.py +0 -0
  113. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/hypothesis/backends/_wilcox_test.py +0 -0
  114. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/hypothesis/backends/cpu.py +0 -0
  115. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/hypothesis/backends/gpu.py +0 -0
  116. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/hypothesis/design.py +0 -0
  117. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/hypothesis/solution.py +0 -0
  118. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/hypothesis/solvers.py +0 -0
  119. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/mixed/__init__.py +0 -0
  120. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/mixed/_common.py +0 -0
  121. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/mixed/_deviance.py +0 -0
  122. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/mixed/_pirls.py +0 -0
  123. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/mixed/_pls.py +0 -0
  124. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/mixed/_random_effects.py +0 -0
  125. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/mixed/_satterthwaite.py +0 -0
  126. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/mixed/design.py +0 -0
  127. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/mixed/solution.py +0 -0
  128. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/mixed/solvers.py +0 -0
  129. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/montecarlo/__init__.py +0 -0
  130. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/montecarlo/_ci.py +0 -0
  131. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/montecarlo/_common.py +0 -0
  132. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/montecarlo/_influence.py +0 -0
  133. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/montecarlo/backends/__init__.py +0 -0
  134. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/montecarlo/backends/cpu.py +0 -0
  135. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/montecarlo/backends/gpu.py +0 -0
  136. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/montecarlo/design.py +0 -0
  137. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/montecarlo/solution.py +0 -0
  138. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/montecarlo/solvers.py +0 -0
  139. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/multinomial/__init__.py +0 -0
  140. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/multinomial/_common.py +0 -0
  141. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/multinomial/_likelihood.py +0 -0
  142. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/multinomial/_solver.py +0 -0
  143. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/multinomial/backends/__init__.py +0 -0
  144. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/multinomial/backends/gpu_likelihood.py +0 -0
  145. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/multinomial/solution.py +0 -0
  146. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/multivariate/__init__.py +0 -0
  147. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/multivariate/_common.py +0 -0
  148. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/multivariate/_factor.py +0 -0
  149. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/multivariate/_pca.py +0 -0
  150. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/multivariate/_rotation.py +0 -0
  151. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/multivariate/backends/__init__.py +0 -0
  152. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/multivariate/backends/gpu_pca.py +0 -0
  153. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/mvnmle/_monotone.py +0 -0
  154. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/mvnmle/_objectives/__init__.py +0 -0
  155. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/mvnmle/_objectives/base.py +0 -0
  156. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/mvnmle/_objectives/cpu.py +0 -0
  157. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/mvnmle/_objectives/gpu_fp32.py +0 -0
  158. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/mvnmle/_objectives/gpu_fp64.py +0 -0
  159. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/mvnmle/_objectives/parameterizations.py +0 -0
  160. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/mvnmle/_utils.py +0 -0
  161. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/mvnmle/backends/__init__.py +0 -0
  162. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/mvnmle/backends/_em_batched_patterns.py +0 -0
  163. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/mvnmle/backends/_squarem.py +0 -0
  164. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/mvnmle/backends/cpu.py +0 -0
  165. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/mvnmle/backends/gpu.py +0 -0
  166. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/mvnmle/datasets.py +0 -0
  167. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/mvnmle/design.py +0 -0
  168. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/mvnmle/patterns.py +0 -0
  169. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/mvnmle/solution.py +0 -0
  170. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/mvnmle/solvers.py +0 -0
  171. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/ordinal/__init__.py +0 -0
  172. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/ordinal/_common.py +0 -0
  173. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/ordinal/_likelihood.py +0 -0
  174. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/ordinal/_solver.py +0 -0
  175. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/ordinal/backends/__init__.py +0 -0
  176. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/ordinal/backends/gpu_likelihood.py +0 -0
  177. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/ordinal/solution.py +0 -0
  178. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/py.typed +0 -0
  179. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/regression/__init__.py +0 -0
  180. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/regression/_formatting.py +0 -0
  181. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/regression/_glm.py +0 -0
  182. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/regression/_linear.py +0 -0
  183. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/regression/_nb_theta.py +0 -0
  184. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/regression/backends/__init__.py +0 -0
  185. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/regression/backends/cpu.py +0 -0
  186. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/regression/backends/cpu_glm.py +0 -0
  187. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/regression/backends/gpu.py +0 -0
  188. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/regression/backends/gpu_glm.py +0 -0
  189. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/regression/design.py +0 -0
  190. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/regression/families.py +0 -0
  191. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/regression/solution.py +0 -0
  192. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/regression/solvers.py +0 -0
  193. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/survival/__init__.py +0 -0
  194. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/survival/_common.py +0 -0
  195. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/survival/_cox.py +0 -0
  196. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/survival/_discrete.py +0 -0
  197. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/survival/_km.py +0 -0
  198. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/survival/_logrank.py +0 -0
  199. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/survival/backends/__init__.py +0 -0
  200. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/survival/backends/cpu.py +0 -0
  201. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/survival/backends/gpu.py +0 -0
  202. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/survival/design.py +0 -0
  203. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/survival/solution.py +0 -0
  204. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/survival/solvers.py +0 -0
  205. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/timeseries/__init__.py +0 -0
  206. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/timeseries/_acf.py +0 -0
  207. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/timeseries/_arima_batch.py +0 -0
  208. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/timeseries/_arima_factored.py +0 -0
  209. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/timeseries/_arima_fit.py +0 -0
  210. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/timeseries/_arima_forecast.py +0 -0
  211. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/timeseries/_arima_kalman.py +0 -0
  212. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/timeseries/_arima_likelihood.py +0 -0
  213. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/timeseries/_arima_order.py +0 -0
  214. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/timeseries/_common.py +0 -0
  215. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/timeseries/_decomposition.py +0 -0
  216. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/timeseries/_differencing.py +0 -0
  217. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/timeseries/_ets_fit.py +0 -0
  218. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/timeseries/_ets_forecast.py +0 -0
  219. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/timeseries/_ets_models.py +0 -0
  220. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/timeseries/_stationarity.py +0 -0
  221. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/timeseries/_whittle.py +0 -0
  222. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/timeseries/backends/__init__.py +0 -0
  223. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/timeseries/backends/whittle_batch_gpu.py +0 -0
  224. {pystatistics-2.3.0 → pystatistics-3.0.0}/pystatistics/timeseries/backends/whittle_gpu.py +0 -0
  225. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/anova/__init__.py +0 -0
  226. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/anova/conftest.py +0 -0
  227. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/anova/test_contrasts.py +0 -0
  228. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/anova/test_design.py +0 -0
  229. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/anova/test_factorial.py +0 -0
  230. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/anova/test_levene.py +0 -0
  231. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/anova/test_oneway.py +0 -0
  232. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/anova/test_posthoc.py +0 -0
  233. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/anova/test_r_validation.py +0 -0
  234. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/anova/test_repeated_measures.py +0 -0
  235. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/benchmark_gpu.py +0 -0
  236. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/conftest.py +0 -0
  237. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/core/test_datasource.py +0 -0
  238. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/core/test_exceptions.py +0 -0
  239. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/core/test_result.py +0 -0
  240. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/core/test_validation.py +0 -0
  241. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/descriptive/__init__.py +0 -0
  242. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/descriptive/conftest.py +0 -0
  243. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/descriptive/test_cor.py +0 -0
  244. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/descriptive/test_cov.py +0 -0
  245. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/descriptive/test_describe.py +0 -0
  246. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/descriptive/test_gpu.py +0 -0
  247. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/descriptive/test_missing.py +0 -0
  248. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/descriptive/test_moments.py +0 -0
  249. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/descriptive/test_quantile.py +0 -0
  250. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/descriptive/test_r_validation.py +0 -0
  251. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/anova_ancova_meta.json +0 -0
  252. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/anova_ancova_r_results.json +0 -0
  253. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/anova_bonferroni_meta.json +0 -0
  254. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/anova_bonferroni_r_results.json +0 -0
  255. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/anova_eta_meta.json +0 -0
  256. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/anova_eta_r_results.json +0 -0
  257. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/anova_levene_meta.json +0 -0
  258. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/anova_levene_r_results.json +0 -0
  259. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/anova_oneway_balanced_meta.json +0 -0
  260. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/anova_oneway_balanced_r_results.json +0 -0
  261. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/anova_oneway_unbalanced_meta.json +0 -0
  262. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/anova_oneway_unbalanced_r_results.json +0 -0
  263. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/anova_rm_mixed_meta.json +0 -0
  264. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/anova_rm_mixed_r_results.json +0 -0
  265. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/anova_rm_within_meta.json +0 -0
  266. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/anova_rm_within_r_results.json +0 -0
  267. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/anova_tukey_meta.json +0 -0
  268. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/anova_tukey_r_results.json +0 -0
  269. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/anova_twoway_balanced_meta.json +0 -0
  270. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/anova_twoway_balanced_r_results.json +0 -0
  271. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/anova_twoway_unbalanced_meta.json +0 -0
  272. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/anova_twoway_unbalanced_r_results.json +0 -0
  273. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/basic_100x3.csv +0 -0
  274. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/basic_100x3_meta.json +0 -0
  275. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/basic_100x3_r_results.json +0 -0
  276. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/collinear_almost.csv +0 -0
  277. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/collinear_almost_meta.json +0 -0
  278. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/collinear_almost_r_results.json +0 -0
  279. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/desc_basic_100x5.csv +0 -0
  280. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/desc_basic_100x5_meta.json +0 -0
  281. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/desc_basic_100x5_r_results.json +0 -0
  282. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/desc_constant_column.csv +0 -0
  283. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/desc_constant_column_meta.json +0 -0
  284. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/desc_constant_column_r_results.json +0 -0
  285. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/desc_extreme_values.csv +0 -0
  286. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/desc_extreme_values_meta.json +0 -0
  287. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/desc_extreme_values_r_results.json +0 -0
  288. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/desc_large_1000x10.csv +0 -0
  289. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/desc_large_1000x10_meta.json +0 -0
  290. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/desc_large_1000x10_r_results.json +0 -0
  291. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/desc_nan_columnwise.csv +0 -0
  292. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/desc_nan_columnwise_meta.json +0 -0
  293. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/desc_nan_columnwise_r_results.json +0 -0
  294. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/desc_nan_scattered.csv +0 -0
  295. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/desc_nan_scattered_meta.json +0 -0
  296. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/desc_nan_scattered_r_results.json +0 -0
  297. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/desc_negative_correlation.csv +0 -0
  298. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/desc_negative_correlation_meta.json +0 -0
  299. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/desc_negative_correlation_r_results.json +0 -0
  300. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/desc_perfect_correlation.csv +0 -0
  301. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/desc_perfect_correlation_meta.json +0 -0
  302. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/desc_perfect_correlation_r_results.json +0 -0
  303. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/desc_single_column.csv +0 -0
  304. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/desc_single_column_meta.json +0 -0
  305. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/desc_single_column_r_results.json +0 -0
  306. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/desc_ties.csv +0 -0
  307. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/desc_ties_meta.json +0 -0
  308. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/desc_ties_r_results.json +0 -0
  309. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/different_scales.csv +0 -0
  310. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/different_scales_meta.json +0 -0
  311. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/different_scales_r_results.json +0 -0
  312. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/generate_anova_fixtures.py +0 -0
  313. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/generate_descriptive_fixtures.py +0 -0
  314. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/generate_fixtures.py +0 -0
  315. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/generate_glm_fixtures.py +0 -0
  316. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/generate_hypothesis_fixtures.py +0 -0
  317. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/generate_mixed_fixtures.py +0 -0
  318. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/generate_montecarlo_fixtures.py +0 -0
  319. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/generate_survival_fixtures.py +0 -0
  320. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/glm_binomial_balanced.csv +0 -0
  321. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/glm_binomial_balanced_meta.json +0 -0
  322. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/glm_binomial_balanced_r_results.json +0 -0
  323. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/glm_binomial_basic.csv +0 -0
  324. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/glm_binomial_basic_meta.json +0 -0
  325. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/glm_binomial_basic_r_results.json +0 -0
  326. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/glm_binomial_large.csv +0 -0
  327. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/glm_binomial_large_meta.json +0 -0
  328. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/glm_binomial_large_r_results.json +0 -0
  329. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/glm_binomial_separated.csv +0 -0
  330. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/glm_binomial_separated_meta.json +0 -0
  331. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/glm_binomial_separated_r_results.json +0 -0
  332. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/glm_gaussian_basic.csv +0 -0
  333. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/glm_gaussian_basic_meta.json +0 -0
  334. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/glm_gaussian_basic_r_results.json +0 -0
  335. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/glm_gaussian_large.csv +0 -0
  336. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/glm_gaussian_large_meta.json +0 -0
  337. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/glm_gaussian_large_r_results.json +0 -0
  338. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/glm_poisson_basic.csv +0 -0
  339. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/glm_poisson_basic_meta.json +0 -0
  340. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/glm_poisson_basic_r_results.json +0 -0
  341. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/glm_poisson_large_counts.csv +0 -0
  342. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/glm_poisson_large_counts_meta.json +0 -0
  343. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/glm_poisson_large_counts_r_results.json +0 -0
  344. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/glm_poisson_zeros.csv +0 -0
  345. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/glm_poisson_zeros_meta.json +0 -0
  346. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/glm_poisson_zeros_r_results.json +0 -0
  347. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/high_noise.csv +0 -0
  348. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/high_noise_meta.json +0 -0
  349. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/high_noise_r_results.json +0 -0
  350. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/htest_chisq_2x2_yates_meta.json +0 -0
  351. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/htest_chisq_2x2_yates_r_results.json +0 -0
  352. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/htest_chisq_3x3_meta.json +0 -0
  353. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/htest_chisq_3x3_r_results.json +0 -0
  354. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/htest_chisq_gof_meta.json +0 -0
  355. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/htest_chisq_gof_r_results.json +0 -0
  356. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/htest_chisq_gof_unequal_meta.json +0 -0
  357. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/htest_chisq_gof_unequal_r_results.json +0 -0
  358. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/htest_fisher_2x2_less_meta.json +0 -0
  359. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/htest_fisher_2x2_less_r_results.json +0 -0
  360. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/htest_fisher_2x2_meta.json +0 -0
  361. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/htest_fisher_2x2_r_results.json +0 -0
  362. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/htest_fisher_3x3_meta.json +0 -0
  363. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/htest_fisher_3x3_r_results.json +0 -0
  364. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/htest_ks_onesample_norm_meta.json +0 -0
  365. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/htest_ks_onesample_norm_r_results.json +0 -0
  366. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/htest_ks_twosample_meta.json +0 -0
  367. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/htest_ks_twosample_r_results.json +0 -0
  368. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/htest_prop_onesample_meta.json +0 -0
  369. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/htest_prop_onesample_r_results.json +0 -0
  370. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/htest_prop_twosample_meta.json +0 -0
  371. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/htest_prop_twosample_r_results.json +0 -0
  372. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/htest_t_onesample_meta.json +0 -0
  373. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/htest_t_onesample_r_results.json +0 -0
  374. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/htest_t_paired_meta.json +0 -0
  375. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/htest_t_paired_r_results.json +0 -0
  376. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/htest_t_pooled_meta.json +0 -0
  377. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/htest_t_pooled_r_results.json +0 -0
  378. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/htest_t_welch_meta.json +0 -0
  379. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/htest_t_welch_r_results.json +0 -0
  380. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/htest_var_basic_meta.json +0 -0
  381. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/htest_var_basic_r_results.json +0 -0
  382. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/htest_wilcox_ranksum_meta.json +0 -0
  383. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/htest_wilcox_ranksum_r_results.json +0 -0
  384. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/htest_wilcox_signed_meta.json +0 -0
  385. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/htest_wilcox_signed_r_results.json +0 -0
  386. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/ill_conditioned.csv +0 -0
  387. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/ill_conditioned_meta.json +0 -0
  388. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/ill_conditioned_r_results.json +0 -0
  389. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/large_coeffs.csv +0 -0
  390. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/large_coeffs_meta.json +0 -0
  391. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/large_coeffs_r_results.json +0 -0
  392. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/mc_boot_ci_90_meta.json +0 -0
  393. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/mc_boot_ci_90_r_results.json +0 -0
  394. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/mc_boot_ci_normal_meta.json +0 -0
  395. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/mc_boot_ci_normal_r_results.json +0 -0
  396. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/mc_boot_ci_skewed_meta.json +0 -0
  397. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/mc_boot_ci_skewed_r_results.json +0 -0
  398. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/mc_boot_mean_balanced_meta.json +0 -0
  399. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/mc_boot_mean_balanced_r_results.json +0 -0
  400. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/mc_boot_mean_ordinary_meta.json +0 -0
  401. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/mc_boot_mean_ordinary_r_results.json +0 -0
  402. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/mc_boot_median_meta.json +0 -0
  403. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/mc_boot_median_r_results.json +0 -0
  404. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/mc_boot_variance_meta.json +0 -0
  405. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/mc_boot_variance_r_results.json +0 -0
  406. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/mc_perm_greater_meta.json +0 -0
  407. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/mc_perm_greater_r_results.json +0 -0
  408. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/mc_perm_not_significant_meta.json +0 -0
  409. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/mc_perm_not_significant_r_results.json +0 -0
  410. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/mc_perm_significant_meta.json +0 -0
  411. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/mc_perm_significant_r_results.json +0 -0
  412. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/mixed/glmm_binomial.csv +0 -0
  413. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/mixed/glmm_poisson.csv +0 -0
  414. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/mixed/lmm_crossed.csv +0 -0
  415. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/mixed/lmm_intercept.csv +0 -0
  416. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/mixed/lmm_ml.csv +0 -0
  417. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/mixed/lmm_no_effect.csv +0 -0
  418. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/mixed/lmm_slope.csv +0 -0
  419. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/mixed/mixed_meta.json +0 -0
  420. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/mixed/mixed_r_results.json +0 -0
  421. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/near_square.csv +0 -0
  422. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/near_square_meta.json +0 -0
  423. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/near_square_r_results.json +0 -0
  424. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/no_intercept.csv +0 -0
  425. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/no_intercept_meta.json +0 -0
  426. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/no_intercept_r_results.json +0 -0
  427. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/run_r_anova_validation.R +0 -0
  428. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/run_r_descriptive_validation.R +0 -0
  429. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/run_r_glm_validation.R +0 -0
  430. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/run_r_hypothesis_validation.R +0 -0
  431. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/run_r_mixed_validation.R +0 -0
  432. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/run_r_montecarlo_validation.R +0 -0
  433. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/run_r_survival_validation.R +0 -0
  434. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/run_r_validation.R +0 -0
  435. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/run_validation.sh +0 -0
  436. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/small_noise.csv +0 -0
  437. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/small_noise_meta.json +0 -0
  438. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/small_noise_r_results.json +0 -0
  439. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/surv_cox_breslow_meta.json +0 -0
  440. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/surv_cox_breslow_r_results.json +0 -0
  441. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/surv_cox_single_meta.json +0 -0
  442. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/surv_cox_single_r_results.json +0 -0
  443. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/surv_cox_ties_meta.json +0 -0
  444. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/surv_cox_ties_r_results.json +0 -0
  445. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/surv_cox_two_cov_meta.json +0 -0
  446. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/surv_cox_two_cov_r_results.json +0 -0
  447. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/surv_km_basic_meta.json +0 -0
  448. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/surv_km_basic_r_results.json +0 -0
  449. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/surv_km_heavy_cens_meta.json +0 -0
  450. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/surv_km_heavy_cens_r_results.json +0 -0
  451. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/surv_km_loglog_ci_meta.json +0 -0
  452. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/surv_km_loglog_ci_r_results.json +0 -0
  453. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/surv_km_no_cens_meta.json +0 -0
  454. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/surv_km_no_cens_r_results.json +0 -0
  455. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/surv_km_plain_ci_meta.json +0 -0
  456. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/surv_km_plain_ci_r_results.json +0 -0
  457. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/surv_km_ties_meta.json +0 -0
  458. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/surv_km_ties_r_results.json +0 -0
  459. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/surv_lr_peto_meta.json +0 -0
  460. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/surv_lr_peto_r_results.json +0 -0
  461. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/surv_lr_three_group_meta.json +0 -0
  462. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/surv_lr_three_group_r_results.json +0 -0
  463. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/surv_lr_two_group_meta.json +0 -0
  464. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/surv_lr_two_group_r_results.json +0 -0
  465. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/tall_skinny.csv +0 -0
  466. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/tall_skinny_meta.json +0 -0
  467. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/tall_skinny_r_results.json +0 -0
  468. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/fixtures/validate_against_r.py +0 -0
  469. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/gam/__init__.py +0 -0
  470. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/hypothesis/__init__.py +0 -0
  471. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/hypothesis/conftest.py +0 -0
  472. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/hypothesis/test_chisq_test.py +0 -0
  473. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/hypothesis/test_design_split.py +0 -0
  474. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/hypothesis/test_fisher_test.py +0 -0
  475. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/hypothesis/test_gpu.py +0 -0
  476. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/hypothesis/test_ks_test.py +0 -0
  477. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/hypothesis/test_p_adjust.py +0 -0
  478. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/hypothesis/test_prop_test.py +0 -0
  479. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/hypothesis/test_r_validation.py +0 -0
  480. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/hypothesis/test_t_test.py +0 -0
  481. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/hypothesis/test_var_test.py +0 -0
  482. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/hypothesis/test_wilcox_test.py +0 -0
  483. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/mixed/__init__.py +0 -0
  484. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/mixed/conftest.py +0 -0
  485. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/mixed/test_glmm.py +0 -0
  486. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/mixed/test_lmm_crossed.py +0 -0
  487. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/mixed/test_lmm_intercept.py +0 -0
  488. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/mixed/test_lmm_nested.py +0 -0
  489. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/mixed/test_lmm_slope.py +0 -0
  490. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/mixed/test_pls.py +0 -0
  491. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/mixed/test_r_validation.py +0 -0
  492. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/mixed/test_random_effects.py +0 -0
  493. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/mixed/test_satterthwaite.py +0 -0
  494. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/montecarlo/__init__.py +0 -0
  495. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/montecarlo/conftest.py +0 -0
  496. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/montecarlo/test_batched_solver.py +0 -0
  497. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/montecarlo/test_boot_ci.py +0 -0
  498. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/montecarlo/test_bootstrap.py +0 -0
  499. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/montecarlo/test_gpu.py +0 -0
  500. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/montecarlo/test_influence.py +0 -0
  501. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/montecarlo/test_permutation.py +0 -0
  502. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/montecarlo/test_r_validation.py +0 -0
  503. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/multinomial/__init__.py +0 -0
  504. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/multinomial/test_multinom.py +0 -0
  505. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/multivariate/__init__.py +0 -0
  506. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/multivariate/test_multivariate.py +0 -0
  507. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/mvnmle/references/apple_em_reference.json +0 -0
  508. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/mvnmle/references/apple_reference.json +0 -0
  509. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/mvnmle/references/generate_em_fixtures.R +0 -0
  510. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/mvnmle/references/little_mcar_apple.json +0 -0
  511. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/mvnmle/references/little_mcar_complete.json +0 -0
  512. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/mvnmle/references/little_mcar_extreme.json +0 -0
  513. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/mvnmle/references/little_mcar_missvals.json +0 -0
  514. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/mvnmle/references/little_mcar_simple_mcar.json +0 -0
  515. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/mvnmle/references/little_mcar_summary.json +0 -0
  516. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/mvnmle/references/missvals_em_reference.json +0 -0
  517. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/mvnmle/references/missvals_reference.json +0 -0
  518. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/mvnmle/references/small_test_reference.json +0 -0
  519. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/mvnmle/test_em.py +0 -0
  520. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/mvnmle/test_gpu.py +0 -0
  521. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/mvnmle/test_mcar.py +0 -0
  522. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/mvnmle/test_mlest.py +0 -0
  523. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/mvnmle/test_monotone.py +0 -0
  524. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/mvnmle/test_no_silent_fallback.py +0 -0
  525. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/mvnmle/test_squarem.py +0 -0
  526. {pystatistics-2.3.0/tests/nonparametric_mcar → pystatistics-3.0.0/tests/ordinal}/__init__.py +0 -0
  527. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/ordinal/test_ordinal.py +0 -0
  528. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/regression/benchmark.py +0 -0
  529. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/regression/benchmark.r +0 -0
  530. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/regression/conftest.py +0 -0
  531. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/regression/test_fit.py +0 -0
  532. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/regression/test_gamma_nb.py +0 -0
  533. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/regression/test_glm.py +0 -0
  534. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/regression/test_glm_gpu.py +0 -0
  535. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/regression/test_glm_r_validation.py +0 -0
  536. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/regression/test_module_split.py +0 -0
  537. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/regression/test_r_validation.py +0 -0
  538. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/regression/test_stress_gpu.py +0 -0
  539. {pystatistics-2.3.0/tests/ordinal → pystatistics-3.0.0/tests/survival}/__init__.py +0 -0
  540. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/survival/conftest.py +0 -0
  541. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/survival/test_coxph.py +0 -0
  542. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/survival/test_discrete_time.py +0 -0
  543. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/survival/test_gpu.py +0 -0
  544. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/survival/test_kaplan_meier.py +0 -0
  545. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/survival/test_logrank.py +0 -0
  546. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/survival/test_r_validation.py +0 -0
  547. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/test_code_quality.py +0 -0
  548. {pystatistics-2.3.0/tests/survival → pystatistics-3.0.0/tests/timeseries}/__init__.py +0 -0
  549. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/timeseries/test_acf_stationarity.py +0 -0
  550. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/timeseries/test_arima.py +0 -0
  551. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/timeseries/test_decomposition.py +0 -0
  552. {pystatistics-2.3.0 → pystatistics-3.0.0}/tests/timeseries/test_ets.py +0 -0
@@ -1,5 +1,161 @@
1
1
  # Changelog
2
2
 
3
+ ## 3.0.0
4
+
5
+ ### BREAKING: Removed MoM MCAR test and the entire `nonparametric_mcar` subpackage
6
+
7
+ `pystatistics.mvnmle.mom_mcar_test` and the full
8
+ `pystatistics.nonparametric_mcar` subpackage (propensity / HSIC /
9
+ MissMech + their shared `NonparametricMCARResult`) have been removed.
10
+ These were added in 2.2.0 and 2.3.0 respectively, specifically in
11
+ service of Lacuna's missingness-mechanism cache, NOT as general-
12
+ purpose statistical methods. That was a scope-boundary mistake on
13
+ pystatistics's part: we're a general-purpose statistics library, and
14
+ these tests are project-specific feature-extraction helpers.
15
+
16
+ **What remains in pystatistics:**
17
+ - `pystatistics.mvnmle.little_mcar_test` — the canonical Little (1988)
18
+ MLE-plug-in test. Textbook, general-purpose, stays.
19
+ - `MCARTestResult` dataclass — retained (downstream packages that
20
+ implement their own MCAR variants can and do reuse it).
21
+ - All of `mlest`, the EM / SQUAREM machinery, `analyze_patterns`,
22
+ `PatternInfo`, etc. — unchanged.
23
+
24
+ **Where the removed tests live now:** the cache-scale variants have
25
+ moved into Lacuna as `lacuna.analysis.mcar`:
26
+
27
+ - `lacuna.analysis.mcar.mom_mcar_test` (method-of-moments plug-in)
28
+ - `lacuna.analysis.mcar.propensity_mcar_test` (RF/GBM + analytical or
29
+ permutation null)
30
+ - `lacuna.analysis.mcar.hsic_mcar_test` (Gretton gamma or permutation null)
31
+ - `lacuna.analysis.mcar.missmech_mcar_test` (Jamshidian-Jalal-style)
32
+ - `lacuna.analysis.mcar.NonparametricMCARResult`
33
+
34
+ All the 2.3.0/2.4.0 performance work that was in-flight in this file
35
+ (analytical AUC p-value for propensity, HGB default, Gretton gamma
36
+ null for HSIC, vectorised MissMech permutation, etc.) moved with the
37
+ code. Downstream: Lacuna's cache build is unaffected — it now imports
38
+ from `lacuna.analysis.mcar` instead of `pystatistics.nonparametric_mcar`.
39
+
40
+ **Migration for external users (if any):**
41
+ - `from pystatistics.mvnmle import mom_mcar_test` →
42
+ `from lacuna.analysis.mcar import mom_mcar_test` (if using Lacuna).
43
+ Alternatively, the MoM algorithm is ~100 LOC of pairwise-deletion
44
+ moments + per-pattern chi-square and is straightforward to inline
45
+ if you don't want a Lacuna dependency.
46
+ - `from pystatistics.nonparametric_mcar import *` →
47
+ `from lacuna.analysis.mcar import *`.
48
+
49
+ **Why a major bump (3.0.0):** public API surface shrunk; imports that
50
+ worked in 2.x now fail. Even though our active user population is
51
+ small (internal), the convention matters — breaking removals are
52
+ semver-major.
53
+
54
+ **Dropped files:**
55
+ - `pystatistics/nonparametric_mcar/` (subpackage, 5 files)
56
+ - `pystatistics/mvnmle/mcar_test.py` lost `mom_mcar_test`,
57
+ `_resolve_mom_backend`, `_pairwise_deletion_moments`, and the
58
+ `_MOM_GPU_WORTH_IT_THRESHOLD` constant. `little_mcar_test` and
59
+ `MCARTestResult` remain.
60
+ - `pyproject.toml` lost the `nonparametric_mcar` optional extra.
61
+ - `tests/mvnmle/test_mom_mcar.py` and `tests/nonparametric_mcar/`.
62
+
63
+ (The dead batched MCAR chi-square machinery that this removal left
64
+ stranded has also been cleaned up — see the "Dead-code cleanup"
65
+ section below.)
66
+
67
+ ### Fixed flaky GAM GPU FP64 `total_edf` test
68
+
69
+ `tests/gam/test_gam.py::TestGAMGPU::test_gpu_fp64_matches_cpu_fitted_and_gcv`
70
+ had been flaking intermittently since 1.8.0. Measured CPU/GPU drift on
71
+ the `sine_data` fixture:
72
+
73
+ - `fitted_values` max abs diff: ~7e-8 (machine precision)
74
+ - `deviance` relative diff: ~1e-7
75
+ - `gcv` relative diff: ~3e-5
76
+ - `total_edf` relative diff: **~1.4e-3** (narrowly failing the 1e-3 bar)
77
+
78
+ Diagnosis: the primary fit statistics (fitted_values, deviance, GCV)
79
+ sit at the GCV-minimising λ, i.e. at a local minimum of `GCV(λ)`, so
80
+ they are insensitive to the tiny λ-drift the L-BFGS-B outer search
81
+ lands on across CPU/GPU. `total_edf`, however, passes through a trace
82
+ of `(X'WX + λ·S)⁻¹·X'WX`, which is LINEAR in λ near the optimum. With
83
+ the penalised normal-equation matrix at cond ≈ 1e16-17 the EDF trace
84
+ moves O(10⁻³) per O(10⁻⁶) λ shift — structurally more sensitive than
85
+ the fit statistics that a 1e-4 tolerance gated.
86
+
87
+ Fix: tolerance widened from `rel=1e-3` to `rel=5e-3` on `total_edf`
88
+ only. The other three assertions (fitted_values, deviance, GCV) keep
89
+ their 1e-4 margin. Test comment updated with the λ-sensitivity
90
+ analysis so future maintainers don't re-tighten it without
91
+ understanding why it's at 5e-3.
92
+
93
+ ### Fixed GAM GPU smooth-term chi-squared bug (null-space absorption)
94
+
95
+ Surfaced while tightening the `total_edf` tolerance above: the chi-
96
+ squared statistic reported in `smooth_terms` was diverging ~8×
97
+ between CPU and GPU backends — CPU ≈ 19, GPU ≈ 156 on the
98
+ `sine_data` fixture — despite fitted values agreeing to FP64
99
+ precision. This was a latent correctness bug in the GPU backend
100
+ going back to whenever the GAM GPU path was first written.
101
+
102
+ Root cause: the penalised normal matrix `A = X'WX + Σ λⱼ Sⱼ` has
103
+ condition number up to ~1e17 when λ is small — the penalty does not
104
+ fully eliminate the design matrix's null space (the constant / linear
105
+ directions in the spline basis's null space). On such `A`,
106
+ `torch.linalg.solve` (LU on device) and `np.linalg.cholesky`
107
+ (CPU reference path) converge to the same `X·β` (fitted values) but
108
+ pick DIFFERENT null-space-representative `β` (coefficients).
109
+ Concretely on `sine_data`: fitted values agreed to 7e-8 but
110
+ coefficients were shifted by a constant ±1.73 between the parametric
111
+ intercept and every smooth basis coefficient — exactly the null-space
112
+ direction the penalty fails to constrain. Since `smooth_terms.chi_sq`
113
+ is computed directly from `β` (via `β_j'·β_j / scale`), the null-
114
+ space shift broke it despite the rest of the fit being numerically
115
+ sound.
116
+
117
+ Fix: the GPU backend now canonicalises the final `β` by re-solving
118
+ `A·β = b` via numpy's Cholesky-with-LU-fallback — the same logic
119
+ the CPU path uses in `_pirls_step`. This lives in a new
120
+ `_canonicalise_beta` method; `fit_fixed` and `edf_per_term` both call
121
+ it after their P-IRLS loops converge. In-loop P-IRLS still uses
122
+ torch's fast LU on device (null-space ambiguity doesn't matter
123
+ there — only the resulting `μ` drives convergence). The D2H
124
+ round-trip for the final solve is ~100 µs on a p×p matrix with p
125
+ typically ≤ 80; the dominant GPU work (the n×p GEMM in each P-IRLS
126
+ step) stays on device.
127
+
128
+ Test: `TestGAMGPU::test_gpu_fp64_matches_cpu_fitted_and_gcv` gained
129
+ coefficient-level assertions (`rtol=1e-3, atol=1e-4`) and chi-squared
130
+ agreement (`rel=1e-3`) so this regression is caught if it returns.
131
+ Measured post-fix: coef max abs diff drops from 1.73 to 9e-5;
132
+ chi_sq rel diff drops from ~8× to 1.6e-5.
133
+
134
+ ### Dead-code cleanup
135
+
136
+ While removing ``mom_mcar_test``, noticed that the batched MCAR
137
+ chi-square machinery (``chi_square_mcar_batched_np`` and
138
+ ``chi_square_mcar_batched_torch`` in ``backends/_em_batched_{np,torch}.py``,
139
+ re-exported via the shim at ``backends/_em_batched.py``) was only ever
140
+ called from ``mom_mcar_test``. Those functions are now gone; shim
141
+ dropped their re-exports; backend file docstrings updated to record
142
+ the removal. Net: `_em_batched_np.py` went from 416 → 300 lines and
143
+ `_em_batched_torch.py` from 381 → 271 lines, and `backends/_em_batched.py`
144
+ lost two of its eleven shim exports.
145
+
146
+ ### Process change
147
+
148
+ Added **Rule 9 "Cross-Project Scope Boundary"** to
149
+ `CLAUDE.md`. Future Claude Code sessions working on pystatistics must
150
+ not modify sibling projects (Lacuna, pystatsbio, etc.) without
151
+ explicit per-session user authorisation. Functionality needed by
152
+ another project belongs in that project until demonstrably general.
153
+ This removal is the retroactive correction of previous boundary
154
+ crossings. The same rule was added to Lacuna's and pystatsbio's
155
+ CLAUDE.md files (§8 and §9 respectively, numbered by where the rule
156
+ fit in each file's existing structure).
157
+
158
+
3
159
  ## 2.3.0
4
160
 
5
161
  - **New subpackage `pystatistics.nonparametric_mcar`** for distribution-
@@ -218,6 +218,45 @@ file, that's a process failure.
218
218
 
219
219
  ---
220
220
 
221
+ ## 9. Cross-Project Scope Boundary — Stay in the Project You Were Invited Into
222
+
223
+ A Claude Code session is invoked on one project. It does not have a licence to edit
224
+ any other project visible on disk. Seeing sibling repos in `/mnt/projects/` does not
225
+ constitute an invitation to modify them.
226
+
227
+ **Rules:**
228
+ - Never modify source, tests, configs, or documentation in a sibling project (any
229
+ repo outside the current one) on your own initiative.
230
+ - When you believe a change belongs in a sibling project — "this belongs upstream",
231
+ "this helper is more general than the current project", "I should fix a bug in
232
+ their API" — stop and raise it with the user. Describe what you'd change, where,
233
+ and why. Wait for explicit authorisation before editing the sibling repo.
234
+ - "Explicit authorisation" means the user said, in the current session, something
235
+ like "yes, also modify project X". It is NOT a precedent from a prior session. It
236
+ is NOT "the user probably wouldn't mind". It is NOT inferred from the fact that
237
+ the user depends on project X.
238
+
239
+ **Corollary — Scope Creep Is a Design Decision, Not a Technical One:**
240
+ Pushing project-A-specific functionality into general-purpose project B because it's
241
+ technically convenient dilutes project B's identity, breaks the expectations of other
242
+ downstream consumers, and forces project B to carry maintenance burden for a use case
243
+ it was never meant to serve. "Project A needs X, and X involves statistics, therefore
244
+ X belongs in pystatistics" is not a valid reasoning chain. X belongs in project A
245
+ until (a) multiple sibling projects demonstrably need it AND (b) a decision has been
246
+ made to promote it — either into an existing general-purpose library or into a new
247
+ dedicated sibling.
248
+
249
+ **What to do when you think a sibling needs a change:**
250
+ 1. Implement the helper inside your OWN project first. It lives there until proven
251
+ general.
252
+ 2. Surface the "belongs upstream" thought to the user explicitly. Propose the
253
+ migration as a separate task. Do not pre-emptively modify the sibling repo.
254
+ 3. If the user authorises the migration, treat it as its own first-class task with
255
+ its own review, tests, and release cadence — not as a side-effect of the
256
+ originating feature.
257
+
258
+ ---
259
+
221
260
  ## Meta-Rule
222
261
 
223
262
  If any of these rules feel inconvenient, that feeling is the point. These rules exist
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pystatistics
3
- Version: 2.3.0
3
+ Version: 3.0.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/
@@ -53,58 +53,106 @@ GPU-accelerated statistical computing for Python.
53
53
 
54
54
  ## What's New
55
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.
56
+ ### 3.0.0Scope correction: Lacuna-specific MCAR helpers removed (breaking)
57
+
58
+ Two years of feature creep are being rolled back. In 2.2.0 and 2.3.0
59
+ pystatistics accumulated MCAR-test variants `mom_mcar_test` plus a
60
+ whole `nonparametric_mcar` subpackage (propensity / HSIC / MissMech)
61
+ added specifically to serve Project Lacuna's cache-scale screening
62
+ use case. On reflection that was a scope mistake: pystatistics is a
63
+ general-purpose statistical library, not a Lacuna helper. These tests
64
+ are project-specific feature-extraction utilities, not textbook
65
+ methods, and their presence in pystatistics diluted the library's
66
+ identity and forced us to carry maintenance burden for a use case
67
+ that had nothing to do with general statistical inference.
68
+
69
+ **Removed (breaking):**
70
+ - `pystatistics.mvnmle.mom_mcar_test` and its helpers
71
+ (`_pairwise_deletion_moments`, `_resolve_mom_backend`, and the
72
+ `_MOM_GPU_WORTH_IT_THRESHOLD` constant).
73
+ - `pystatistics.nonparametric_mcar` subpackage in its entirety
74
+ (`propensity_mcar_test`, `hsic_mcar_test`, `missmech_mcar_test`,
75
+ `NonparametricMCARResult`).
76
+ - The `[nonparametric_mcar]` optional-dependency extra.
77
+ - 109 tests across `tests/mvnmle/test_mom_mcar.py` and
78
+ `tests/nonparametric_mcar/`.
79
+
80
+ **Removed (dead code, not breaking):** the batched MCAR chi-square
81
+ machinery (`chi_square_mcar_batched_np` and
82
+ `chi_square_mcar_batched_torch` in `pystatistics/mvnmle/backends/`)
83
+ was only ever called from `mom_mcar_test`. Those two functions and
84
+ their shim re-exports in `backends/_em_batched.py` are gone. Net
85
+ effect: `_em_batched_np.py` shrank from 416 → 300 lines and
86
+ `_em_batched_torch.py` from 381 271 lines, with no functional
87
+ change to the EM or log-likelihood paths.
88
+
89
+ **Retained (unchanged):**
90
+ - `little_mcar_test` the canonical Little (1988) MLE-plug-in test.
91
+ Textbook, general-purpose, stays.
92
+ - `MCARTestResult` dataclass.
93
+ - `mlest`, `analyze_patterns`, `PatternInfo`, the full MVN MLE
94
+ machinery, and every EM / SQUAREM / monotone-closed-form path
95
+ unchanged.
96
+
97
+ **Where the removed code went:** all four removed tests are now
98
+ maintained by Project Lacuna at `lacuna.analysis.mcar.*`. If you were
99
+ using these from pystatistics and are also a Lacuna user, migration
100
+ is a one-line import change. If you were using them standalone, the
101
+ MoM test is ~100 LOC of pairwise-deletion moments + per-pattern
102
+ chi-square and is trivial to re-inline; the nonparametric variants
103
+ are self-contained single-file implementations you can vendor.
104
+
105
+ **Flaky GAM GPU FP64 test fixed.** The
106
+ `TestGAMGPU::test_gpu_fp64_matches_cpu_fitted_and_gcv` test had been
107
+ intermittently failing on `total_edf` since 1.8.0 with a ~1.4e-3
108
+ CPU/GPU drift against a 1e-3 tolerance. Diagnosis: the primary fit
109
+ statistics (fitted_values, deviance, GCV) sit at the GCV-minimising
110
+ λ — locally flat in λ, so cross-backend λ drift barely moves them
111
+ (measured ≤3e-5). `total_edf`, however, is LINEAR in λ near that
112
+ optimum and passes through tr((X'WX + λ·S)⁻¹·X'WX) on a
113
+ cond-1e16-17 penalised normal matrix — structurally more sensitive.
114
+ Tolerance widened to `rel=5e-3` on `total_edf` only, with a test
115
+ comment explaining the λ-sensitivity analysis so this doesn't get
116
+ tightened back by accident. Other three assertions keep their 1e-4
117
+ margin.
118
+
119
+ **GAM GPU smooth-term chi-squared fixed.** While investigating the
120
+ `total_edf` flake above, also found and fixed a latent bug: the
121
+ chi-squared statistic reported in `smooth_terms` was diverging ~8×
122
+ between CPU and GPU backends (CPU ≈ 19, GPU ≈ 156 on the `sine_data`
123
+ fixture) despite fitted values agreeing to FP64 precision. Root
124
+ cause: the penalised normal matrix `A = X'WX + Σ λⱼ Sⱼ` has condition
125
+ number up to ~1e17 when λ is small — the penalty does not fully
126
+ eliminate the design matrix's null space. On such `A`,
127
+ `torch.linalg.solve` (LU on device) and `np.linalg.cholesky`
128
+ (CPU path) converge to the same `X·β` but pick DIFFERENT null-space-
129
+ representative `β`. Fitted values were identical; coefficients were
130
+ shifted by a constant in the penalty null space, throwing off the
131
+ chi-squared statistic (which is computed directly from `β`). Fix:
132
+ the GPU backend now canonicalises the final `β` by re-solving
133
+ `A·β = b` via numpy's Cholesky-with-LU-fallback path — matching CPU
134
+ bit-for-bit. In-loop P-IRLS still uses torch's fast LU (where
135
+ null-space ambiguity doesn't matter — only the resulting `μ` drives
136
+ convergence). Test tightened to pin coefficient-level agreement
137
+ (`rtol=1e-3`) and chi-squared agreement (`rel=1e-3`) so this
138
+ regression is caught if it returns.
139
+
140
+ **Process change:** a new **"Cross-Project Scope Boundary"** rule
141
+ (Rule 9) has been added to `CLAUDE.md`, instructing future Claude
142
+ Code sessions working on pystatistics not to modify sibling projects
143
+ without explicit user authorisation, and to implement project-
144
+ specific helpers in those projects rather than in this one. This
145
+ release is the retroactive enforcement of that rule. The matching
146
+ rule has been added to the Lacuna and pystatsbio `CLAUDE.md` files.
147
+
148
+ **Suite status at release:** 2401 passed, 19 skipped, 0 failed.
149
+
150
+ ### 2.3.0 — Nonparametric MCAR tests (introduced, now removed in 3.0.0)
151
+
152
+ Originally shipped three distribution-free MCAR tests in a new
153
+ `nonparametric_mcar` subpackage. Removed in 3.0.0 as a scope
154
+ correction — see that section for the rationale. Code now lives in
155
+ Lacuna.
108
156
 
109
157
  ### 2.2.0 — Real-data robustness from Project Lacuna dogfooding
110
158
 
@@ -114,10 +162,12 @@ breaking `PyStatisticsError` catch patterns, M-step sigma PD-check
114
162
  false negatives from FP64 roundoff, and per-pattern Cholesky on
115
163
  indefinite sub-blocks — all fixed in this release with a unified
116
164
  `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.
165
+ `little_mcar_test`, and the batched E-step. (Note: `mom_mcar_test`
166
+ was also part of this release; it was removed in 3.0.0 along with the
167
+ rest of the Lacuna-specific MCAR helpers.) The Project Lacuna cache
168
+ build on 3,080 (dataset × generator) pairs went from crashing on the
169
+ first batch to completing in a single pass. No API breaks at the time
170
+ of 2.2.0 release.
121
171
 
122
172
  ### 2.1.0 — Real-data EM speedup + monotone closed-form MLE
123
173
 
@@ -159,26 +209,13 @@ mvnmle reference cases (apple, missvals):
159
209
  Cholesky over all patterns, one solve across all N
160
210
  observations, no per-pattern Python loop.
161
211
 
162
- **`mom_mcar_test`: fast method-of-moments MCAR test.** A new *separate
163
- function* (not a mode on ``little_mcar_test``, because the MoM variant
164
- is not Little's test) that uses pairwise-deletion sample moments
165
- instead of MLE plug-in. The test is consistent under MCAR but not
166
- asymptotically efficient, trading a small amount of statistical
167
- efficiency for dramatic speed. At 15 % MCAR on sklearn demos:
168
-
169
- | dataset | shape | little_mcar_test | mom_mcar_test |
170
- |----------------|-----------|------------------|---------------|
171
- | iris | 150 × 4 | 2.9 ms | 0.31 ms |
172
- | wine | 178 × 13 | 60.9 ms | 2.17 ms |
173
- | breast_cancer | 569 × 30 | 1491 ms | 28.7 ms |
174
-
175
- For a 3410-dataset MCAR sweep: **~50 minutes → ~1.6 minutes**. Use
176
- ``little_mcar_test`` when you need Little 1988's asymptotic
177
- distribution exactly (regulated submissions, citing R reference);
178
- use ``mom_mcar_test`` for high-throughput diagnostic screens. The
179
- ``MCARTestResult.method`` field records which test produced a given
180
- result so downstream code can disambiguate without tracking the
181
- calling function.
212
+ **`mom_mcar_test`: fast method-of-moments MCAR test** *(introduced in
213
+ 2.1.0, removed in 3.0.0 see the 3.0.0 section above).* Originally
214
+ shipped as a separate function using pairwise-deletion sample moments
215
+ instead of MLE plug-in. Consistent under MCAR but not asymptotically
216
+ efficient; the speedup numbers for this feature still hold, but the
217
+ function is no longer in pystatistics see `lacuna.analysis.mcar` if
218
+ you need it.
182
219
 
183
220
  **Fully-batched device-resident EM on GPU.** Pre-2.1.0 the
184
221
  ``device='cuda'`` EM path set up a torch device but never used it —