pystatistics 1.0.2__tar.gz → 1.2.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 (460) hide show
  1. pystatistics-1.2.0/CHANGELOG.md +92 -0
  2. pystatistics-1.2.0/CLAUDE.md +190 -0
  3. {pystatistics-1.0.2 → pystatistics-1.2.0}/PKG-INFO +22 -3
  4. {pystatistics-1.0.2 → pystatistics-1.2.0}/README.md +21 -2
  5. {pystatistics-1.0.2 → pystatistics-1.2.0}/pyproject.toml +1 -1
  6. {pystatistics-1.0.2 → pystatistics-1.2.0}/pystatistics/__init__.py +1 -1
  7. pystatistics-1.2.0/pystatistics/hypothesis/_design_factories.py +466 -0
  8. {pystatistics-1.0.2 → pystatistics-1.2.0}/pystatistics/hypothesis/_p_adjust.py +2 -0
  9. {pystatistics-1.0.2 → pystatistics-1.2.0}/pystatistics/hypothesis/backends/_chisq_test.py +11 -6
  10. {pystatistics-1.0.2 → pystatistics-1.2.0}/pystatistics/hypothesis/backends/_fisher_test.py +11 -4
  11. {pystatistics-1.0.2 → pystatistics-1.2.0}/pystatistics/hypothesis/backends/_wilcox_test.py +0 -13
  12. {pystatistics-1.0.2 → pystatistics-1.2.0}/pystatistics/hypothesis/backends/gpu.py +7 -12
  13. pystatistics-1.2.0/pystatistics/hypothesis/design.py +226 -0
  14. {pystatistics-1.0.2 → pystatistics-1.2.0}/pystatistics/hypothesis/solvers.py +12 -3
  15. {pystatistics-1.0.2 → pystatistics-1.2.0}/pystatistics/mixed/_deviance.py +3 -0
  16. {pystatistics-1.0.2 → pystatistics-1.2.0}/pystatistics/mixed/_pls.py +16 -9
  17. {pystatistics-1.0.2 → pystatistics-1.2.0}/pystatistics/mixed/_satterthwaite.py +2 -0
  18. {pystatistics-1.0.2 → pystatistics-1.2.0}/pystatistics/mixed/solvers.py +5 -0
  19. {pystatistics-1.0.2 → pystatistics-1.2.0}/pystatistics/montecarlo/backends/gpu.py +14 -34
  20. {pystatistics-1.0.2 → pystatistics-1.2.0}/pystatistics/montecarlo/solvers.py +11 -12
  21. {pystatistics-1.0.2 → pystatistics-1.2.0}/pystatistics/mvnmle/_objectives/base.py +17 -26
  22. {pystatistics-1.0.2 → pystatistics-1.2.0}/pystatistics/mvnmle/_objectives/cpu.py +7 -24
  23. {pystatistics-1.0.2 → pystatistics-1.2.0}/pystatistics/mvnmle/_objectives/gpu_fp32.py +25 -13
  24. {pystatistics-1.0.2 → pystatistics-1.2.0}/pystatistics/mvnmle/_objectives/gpu_fp64.py +11 -2
  25. {pystatistics-1.0.2 → pystatistics-1.2.0}/pystatistics/mvnmle/_utils.py +7 -6
  26. {pystatistics-1.0.2 → pystatistics-1.2.0}/pystatistics/mvnmle/backends/em.py +14 -5
  27. {pystatistics-1.0.2 → pystatistics-1.2.0}/pystatistics/mvnmle/mcar_test.py +19 -26
  28. pystatistics-1.2.0/pystatistics/regression/_formatting.py +18 -0
  29. pystatistics-1.2.0/pystatistics/regression/_glm.py +322 -0
  30. pystatistics-1.2.0/pystatistics/regression/_linear.py +309 -0
  31. {pystatistics-1.0.2 → pystatistics-1.2.0}/pystatistics/regression/backends/cpu_glm.py +1 -1
  32. {pystatistics-1.0.2 → pystatistics-1.2.0}/pystatistics/regression/backends/gpu.py +8 -0
  33. {pystatistics-1.0.2 → pystatistics-1.2.0}/pystatistics/regression/backends/gpu_glm.py +5 -4
  34. {pystatistics-1.0.2 → pystatistics-1.2.0}/pystatistics/regression/families.py +14 -0
  35. pystatistics-1.2.0/pystatistics/regression/solution.py +17 -0
  36. {pystatistics-1.0.2 → pystatistics-1.2.0}/pystatistics/regression/solvers.py +40 -10
  37. {pystatistics-1.0.2 → pystatistics-1.2.0}/pystatistics/survival/_km.py +1 -1
  38. {pystatistics-1.0.2 → pystatistics-1.2.0}/pystatistics/survival/solution.py +64 -15
  39. {pystatistics-1.0.2 → pystatistics-1.2.0}/pystatistics/survival/solvers.py +26 -2
  40. pystatistics-1.2.0/tests/hypothesis/test_design_split.py +126 -0
  41. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/montecarlo/test_gpu.py +11 -18
  42. pystatistics-1.2.0/tests/mvnmle/test_no_silent_fallback.py +55 -0
  43. pystatistics-1.2.0/tests/regression/test_module_split.py +85 -0
  44. pystatistics-1.2.0/tests/test_code_quality.py +39 -0
  45. pystatistics-1.0.2/pystatistics/hypothesis/design.py +0 -727
  46. pystatistics-1.0.2/pystatistics/regression/solution.py +0 -597
  47. {pystatistics-1.0.2 → pystatistics-1.2.0}/.github/workflows/publish.yml +0 -0
  48. {pystatistics-1.0.2 → pystatistics-1.2.0}/.gitignore +0 -0
  49. {pystatistics-1.0.2 → pystatistics-1.2.0}/LICENSE +0 -0
  50. {pystatistics-1.0.2 → pystatistics-1.2.0}/docs/DESIGN.md +0 -0
  51. {pystatistics-1.0.2 → pystatistics-1.2.0}/docs/Forge.md +0 -0
  52. {pystatistics-1.0.2 → pystatistics-1.2.0}/docs/Makefile +0 -0
  53. {pystatistics-1.0.2 → pystatistics-1.2.0}/docs/PYSTATSBIO_CONTEXT.md +0 -0
  54. {pystatistics-1.0.2 → pystatistics-1.2.0}/docs/ROADMAP.md +0 -0
  55. {pystatistics-1.0.2 → pystatistics-1.2.0}/docs/_static/custom.css +0 -0
  56. {pystatistics-1.0.2 → pystatistics-1.2.0}/docs/anova.rst +0 -0
  57. {pystatistics-1.0.2 → pystatistics-1.2.0}/docs/conf.py +0 -0
  58. {pystatistics-1.0.2 → pystatistics-1.2.0}/docs/core.rst +0 -0
  59. {pystatistics-1.0.2 → pystatistics-1.2.0}/docs/descriptive.rst +0 -0
  60. {pystatistics-1.0.2 → pystatistics-1.2.0}/docs/hypothesis.rst +0 -0
  61. {pystatistics-1.0.2 → pystatistics-1.2.0}/docs/index.rst +0 -0
  62. {pystatistics-1.0.2 → pystatistics-1.2.0}/docs/mixed.rst +0 -0
  63. {pystatistics-1.0.2 → pystatistics-1.2.0}/docs/montecarlo.rst +0 -0
  64. {pystatistics-1.0.2 → pystatistics-1.2.0}/docs/mvnmle.rst +0 -0
  65. {pystatistics-1.0.2 → pystatistics-1.2.0}/docs/regression.rst +0 -0
  66. {pystatistics-1.0.2 → pystatistics-1.2.0}/docs/survival.rst +0 -0
  67. {pystatistics-1.0.2 → pystatistics-1.2.0}/pystatistics/anova/__init__.py +0 -0
  68. {pystatistics-1.0.2 → pystatistics-1.2.0}/pystatistics/anova/_common.py +0 -0
  69. {pystatistics-1.0.2 → pystatistics-1.2.0}/pystatistics/anova/_contrasts.py +0 -0
  70. {pystatistics-1.0.2 → pystatistics-1.2.0}/pystatistics/anova/_levene.py +0 -0
  71. {pystatistics-1.0.2 → pystatistics-1.2.0}/pystatistics/anova/_posthoc.py +0 -0
  72. {pystatistics-1.0.2 → pystatistics-1.2.0}/pystatistics/anova/_repeated.py +0 -0
  73. {pystatistics-1.0.2 → pystatistics-1.2.0}/pystatistics/anova/_ss.py +0 -0
  74. {pystatistics-1.0.2 → pystatistics-1.2.0}/pystatistics/anova/design.py +0 -0
  75. {pystatistics-1.0.2 → pystatistics-1.2.0}/pystatistics/anova/solution.py +0 -0
  76. {pystatistics-1.0.2 → pystatistics-1.2.0}/pystatistics/anova/solvers.py +0 -0
  77. {pystatistics-1.0.2 → pystatistics-1.2.0}/pystatistics/core/__init__.py +0 -0
  78. {pystatistics-1.0.2 → pystatistics-1.2.0}/pystatistics/core/capabilities.py +0 -0
  79. {pystatistics-1.0.2 → pystatistics-1.2.0}/pystatistics/core/compute/__init__.py +0 -0
  80. {pystatistics-1.0.2 → pystatistics-1.2.0}/pystatistics/core/compute/device.py +0 -0
  81. {pystatistics-1.0.2 → pystatistics-1.2.0}/pystatistics/core/compute/linalg/__init__.py +0 -0
  82. {pystatistics-1.0.2 → pystatistics-1.2.0}/pystatistics/core/compute/linalg/batched.py +0 -0
  83. {pystatistics-1.0.2 → pystatistics-1.2.0}/pystatistics/core/compute/linalg/cholesky.py +0 -0
  84. {pystatistics-1.0.2 → pystatistics-1.2.0}/pystatistics/core/compute/linalg/determinant.py +0 -0
  85. {pystatistics-1.0.2 → pystatistics-1.2.0}/pystatistics/core/compute/linalg/qr.py +0 -0
  86. {pystatistics-1.0.2 → pystatistics-1.2.0}/pystatistics/core/compute/linalg/solve.py +0 -0
  87. {pystatistics-1.0.2 → pystatistics-1.2.0}/pystatistics/core/compute/linalg/svd.py +0 -0
  88. {pystatistics-1.0.2 → pystatistics-1.2.0}/pystatistics/core/compute/optimization/__init__.py +0 -0
  89. {pystatistics-1.0.2 → pystatistics-1.2.0}/pystatistics/core/compute/optimization/convergence.py +0 -0
  90. {pystatistics-1.0.2 → pystatistics-1.2.0}/pystatistics/core/compute/precision.py +0 -0
  91. {pystatistics-1.0.2 → pystatistics-1.2.0}/pystatistics/core/compute/timing.py +0 -0
  92. {pystatistics-1.0.2 → pystatistics-1.2.0}/pystatistics/core/compute/tolerances.py +0 -0
  93. {pystatistics-1.0.2 → pystatistics-1.2.0}/pystatistics/core/datasource.py +0 -0
  94. {pystatistics-1.0.2 → pystatistics-1.2.0}/pystatistics/core/exceptions.py +0 -0
  95. {pystatistics-1.0.2 → pystatistics-1.2.0}/pystatistics/core/protocols.py +0 -0
  96. {pystatistics-1.0.2 → pystatistics-1.2.0}/pystatistics/core/result.py +0 -0
  97. {pystatistics-1.0.2 → pystatistics-1.2.0}/pystatistics/core/validation.py +0 -0
  98. {pystatistics-1.0.2 → pystatistics-1.2.0}/pystatistics/descriptive/__init__.py +0 -0
  99. {pystatistics-1.0.2 → pystatistics-1.2.0}/pystatistics/descriptive/_missing.py +0 -0
  100. {pystatistics-1.0.2 → pystatistics-1.2.0}/pystatistics/descriptive/_quantile_types.py +0 -0
  101. {pystatistics-1.0.2 → pystatistics-1.2.0}/pystatistics/descriptive/backends/__init__.py +0 -0
  102. {pystatistics-1.0.2 → pystatistics-1.2.0}/pystatistics/descriptive/backends/cpu.py +0 -0
  103. {pystatistics-1.0.2 → pystatistics-1.2.0}/pystatistics/descriptive/backends/gpu.py +0 -0
  104. {pystatistics-1.0.2 → pystatistics-1.2.0}/pystatistics/descriptive/design.py +0 -0
  105. {pystatistics-1.0.2 → pystatistics-1.2.0}/pystatistics/descriptive/solution.py +0 -0
  106. {pystatistics-1.0.2 → pystatistics-1.2.0}/pystatistics/descriptive/solvers.py +0 -0
  107. {pystatistics-1.0.2 → pystatistics-1.2.0}/pystatistics/hypothesis/__init__.py +0 -0
  108. {pystatistics-1.0.2 → pystatistics-1.2.0}/pystatistics/hypothesis/_common.py +0 -0
  109. {pystatistics-1.0.2 → pystatistics-1.2.0}/pystatistics/hypothesis/backends/__init__.py +0 -0
  110. {pystatistics-1.0.2 → pystatistics-1.2.0}/pystatistics/hypothesis/backends/_ks_test.py +0 -0
  111. {pystatistics-1.0.2 → pystatistics-1.2.0}/pystatistics/hypothesis/backends/_prop_test.py +0 -0
  112. {pystatistics-1.0.2 → pystatistics-1.2.0}/pystatistics/hypothesis/backends/_t_test.py +0 -0
  113. {pystatistics-1.0.2 → pystatistics-1.2.0}/pystatistics/hypothesis/backends/_var_test.py +0 -0
  114. {pystatistics-1.0.2 → pystatistics-1.2.0}/pystatistics/hypothesis/backends/cpu.py +0 -0
  115. {pystatistics-1.0.2 → pystatistics-1.2.0}/pystatistics/hypothesis/solution.py +0 -0
  116. {pystatistics-1.0.2 → pystatistics-1.2.0}/pystatistics/mixed/__init__.py +0 -0
  117. {pystatistics-1.0.2 → pystatistics-1.2.0}/pystatistics/mixed/_common.py +0 -0
  118. {pystatistics-1.0.2 → pystatistics-1.2.0}/pystatistics/mixed/_pirls.py +0 -0
  119. {pystatistics-1.0.2 → pystatistics-1.2.0}/pystatistics/mixed/_random_effects.py +0 -0
  120. {pystatistics-1.0.2 → pystatistics-1.2.0}/pystatistics/mixed/design.py +0 -0
  121. {pystatistics-1.0.2 → pystatistics-1.2.0}/pystatistics/mixed/solution.py +0 -0
  122. {pystatistics-1.0.2 → pystatistics-1.2.0}/pystatistics/montecarlo/__init__.py +0 -0
  123. {pystatistics-1.0.2 → pystatistics-1.2.0}/pystatistics/montecarlo/_ci.py +0 -0
  124. {pystatistics-1.0.2 → pystatistics-1.2.0}/pystatistics/montecarlo/_common.py +0 -0
  125. {pystatistics-1.0.2 → pystatistics-1.2.0}/pystatistics/montecarlo/_influence.py +0 -0
  126. {pystatistics-1.0.2 → pystatistics-1.2.0}/pystatistics/montecarlo/backends/__init__.py +0 -0
  127. {pystatistics-1.0.2 → pystatistics-1.2.0}/pystatistics/montecarlo/backends/cpu.py +0 -0
  128. {pystatistics-1.0.2 → pystatistics-1.2.0}/pystatistics/montecarlo/design.py +0 -0
  129. {pystatistics-1.0.2 → pystatistics-1.2.0}/pystatistics/montecarlo/solution.py +0 -0
  130. {pystatistics-1.0.2 → pystatistics-1.2.0}/pystatistics/mvnmle/__init__.py +0 -0
  131. {pystatistics-1.0.2 → pystatistics-1.2.0}/pystatistics/mvnmle/_objectives/__init__.py +0 -0
  132. {pystatistics-1.0.2 → pystatistics-1.2.0}/pystatistics/mvnmle/_objectives/parameterizations.py +0 -0
  133. {pystatistics-1.0.2 → pystatistics-1.2.0}/pystatistics/mvnmle/backends/__init__.py +0 -0
  134. {pystatistics-1.0.2 → pystatistics-1.2.0}/pystatistics/mvnmle/backends/cpu.py +0 -0
  135. {pystatistics-1.0.2 → pystatistics-1.2.0}/pystatistics/mvnmle/backends/gpu.py +0 -0
  136. {pystatistics-1.0.2 → pystatistics-1.2.0}/pystatistics/mvnmle/datasets.py +0 -0
  137. {pystatistics-1.0.2 → pystatistics-1.2.0}/pystatistics/mvnmle/design.py +0 -0
  138. {pystatistics-1.0.2 → pystatistics-1.2.0}/pystatistics/mvnmle/patterns.py +0 -0
  139. {pystatistics-1.0.2 → pystatistics-1.2.0}/pystatistics/mvnmle/solution.py +0 -0
  140. {pystatistics-1.0.2 → pystatistics-1.2.0}/pystatistics/mvnmle/solvers.py +0 -0
  141. {pystatistics-1.0.2 → pystatistics-1.2.0}/pystatistics/py.typed +0 -0
  142. {pystatistics-1.0.2 → pystatistics-1.2.0}/pystatistics/regression/__init__.py +0 -0
  143. {pystatistics-1.0.2 → pystatistics-1.2.0}/pystatistics/regression/backends/__init__.py +0 -0
  144. {pystatistics-1.0.2 → pystatistics-1.2.0}/pystatistics/regression/backends/cpu.py +0 -0
  145. {pystatistics-1.0.2 → pystatistics-1.2.0}/pystatistics/regression/design.py +0 -0
  146. {pystatistics-1.0.2 → pystatistics-1.2.0}/pystatistics/survival/__init__.py +0 -0
  147. {pystatistics-1.0.2 → pystatistics-1.2.0}/pystatistics/survival/_common.py +0 -0
  148. {pystatistics-1.0.2 → pystatistics-1.2.0}/pystatistics/survival/_cox.py +0 -0
  149. {pystatistics-1.0.2 → pystatistics-1.2.0}/pystatistics/survival/_discrete.py +0 -0
  150. {pystatistics-1.0.2 → pystatistics-1.2.0}/pystatistics/survival/_logrank.py +0 -0
  151. {pystatistics-1.0.2 → pystatistics-1.2.0}/pystatistics/survival/backends/__init__.py +0 -0
  152. {pystatistics-1.0.2 → pystatistics-1.2.0}/pystatistics/survival/backends/cpu.py +0 -0
  153. {pystatistics-1.0.2 → pystatistics-1.2.0}/pystatistics/survival/backends/gpu.py +0 -0
  154. {pystatistics-1.0.2 → pystatistics-1.2.0}/pystatistics/survival/design.py +0 -0
  155. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/anova/__init__.py +0 -0
  156. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/anova/conftest.py +0 -0
  157. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/anova/test_contrasts.py +0 -0
  158. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/anova/test_design.py +0 -0
  159. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/anova/test_factorial.py +0 -0
  160. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/anova/test_levene.py +0 -0
  161. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/anova/test_oneway.py +0 -0
  162. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/anova/test_posthoc.py +0 -0
  163. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/anova/test_r_validation.py +0 -0
  164. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/anova/test_repeated_measures.py +0 -0
  165. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/benchmark_gpu.py +0 -0
  166. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/conftest.py +0 -0
  167. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/core/test_exceptions.py +0 -0
  168. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/core/test_result.py +0 -0
  169. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/core/test_validation.py +0 -0
  170. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/descriptive/__init__.py +0 -0
  171. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/descriptive/conftest.py +0 -0
  172. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/descriptive/test_cor.py +0 -0
  173. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/descriptive/test_cov.py +0 -0
  174. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/descriptive/test_describe.py +0 -0
  175. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/descriptive/test_gpu.py +0 -0
  176. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/descriptive/test_missing.py +0 -0
  177. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/descriptive/test_moments.py +0 -0
  178. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/descriptive/test_quantile.py +0 -0
  179. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/descriptive/test_r_validation.py +0 -0
  180. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/anova_ancova_meta.json +0 -0
  181. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/anova_ancova_r_results.json +0 -0
  182. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/anova_bonferroni_meta.json +0 -0
  183. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/anova_bonferroni_r_results.json +0 -0
  184. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/anova_eta_meta.json +0 -0
  185. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/anova_eta_r_results.json +0 -0
  186. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/anova_levene_meta.json +0 -0
  187. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/anova_levene_r_results.json +0 -0
  188. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/anova_oneway_balanced_meta.json +0 -0
  189. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/anova_oneway_balanced_r_results.json +0 -0
  190. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/anova_oneway_unbalanced_meta.json +0 -0
  191. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/anova_oneway_unbalanced_r_results.json +0 -0
  192. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/anova_rm_mixed_meta.json +0 -0
  193. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/anova_rm_mixed_r_results.json +0 -0
  194. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/anova_rm_within_meta.json +0 -0
  195. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/anova_rm_within_r_results.json +0 -0
  196. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/anova_tukey_meta.json +0 -0
  197. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/anova_tukey_r_results.json +0 -0
  198. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/anova_twoway_balanced_meta.json +0 -0
  199. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/anova_twoway_balanced_r_results.json +0 -0
  200. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/anova_twoway_unbalanced_meta.json +0 -0
  201. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/anova_twoway_unbalanced_r_results.json +0 -0
  202. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/basic_100x3.csv +0 -0
  203. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/basic_100x3_meta.json +0 -0
  204. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/basic_100x3_r_results.json +0 -0
  205. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/collinear_almost.csv +0 -0
  206. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/collinear_almost_meta.json +0 -0
  207. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/collinear_almost_r_results.json +0 -0
  208. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/desc_basic_100x5.csv +0 -0
  209. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/desc_basic_100x5_meta.json +0 -0
  210. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/desc_basic_100x5_r_results.json +0 -0
  211. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/desc_constant_column.csv +0 -0
  212. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/desc_constant_column_meta.json +0 -0
  213. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/desc_constant_column_r_results.json +0 -0
  214. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/desc_extreme_values.csv +0 -0
  215. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/desc_extreme_values_meta.json +0 -0
  216. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/desc_extreme_values_r_results.json +0 -0
  217. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/desc_large_1000x10.csv +0 -0
  218. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/desc_large_1000x10_meta.json +0 -0
  219. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/desc_large_1000x10_r_results.json +0 -0
  220. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/desc_nan_columnwise.csv +0 -0
  221. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/desc_nan_columnwise_meta.json +0 -0
  222. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/desc_nan_columnwise_r_results.json +0 -0
  223. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/desc_nan_scattered.csv +0 -0
  224. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/desc_nan_scattered_meta.json +0 -0
  225. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/desc_nan_scattered_r_results.json +0 -0
  226. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/desc_negative_correlation.csv +0 -0
  227. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/desc_negative_correlation_meta.json +0 -0
  228. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/desc_negative_correlation_r_results.json +0 -0
  229. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/desc_perfect_correlation.csv +0 -0
  230. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/desc_perfect_correlation_meta.json +0 -0
  231. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/desc_perfect_correlation_r_results.json +0 -0
  232. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/desc_single_column.csv +0 -0
  233. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/desc_single_column_meta.json +0 -0
  234. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/desc_single_column_r_results.json +0 -0
  235. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/desc_ties.csv +0 -0
  236. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/desc_ties_meta.json +0 -0
  237. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/desc_ties_r_results.json +0 -0
  238. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/different_scales.csv +0 -0
  239. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/different_scales_meta.json +0 -0
  240. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/different_scales_r_results.json +0 -0
  241. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/generate_anova_fixtures.py +0 -0
  242. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/generate_descriptive_fixtures.py +0 -0
  243. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/generate_fixtures.py +0 -0
  244. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/generate_glm_fixtures.py +0 -0
  245. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/generate_hypothesis_fixtures.py +0 -0
  246. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/generate_mixed_fixtures.py +0 -0
  247. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/generate_montecarlo_fixtures.py +0 -0
  248. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/generate_survival_fixtures.py +0 -0
  249. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/glm_binomial_balanced.csv +0 -0
  250. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/glm_binomial_balanced_meta.json +0 -0
  251. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/glm_binomial_balanced_r_results.json +0 -0
  252. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/glm_binomial_basic.csv +0 -0
  253. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/glm_binomial_basic_meta.json +0 -0
  254. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/glm_binomial_basic_r_results.json +0 -0
  255. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/glm_binomial_large.csv +0 -0
  256. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/glm_binomial_large_meta.json +0 -0
  257. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/glm_binomial_large_r_results.json +0 -0
  258. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/glm_binomial_separated.csv +0 -0
  259. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/glm_binomial_separated_meta.json +0 -0
  260. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/glm_binomial_separated_r_results.json +0 -0
  261. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/glm_gaussian_basic.csv +0 -0
  262. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/glm_gaussian_basic_meta.json +0 -0
  263. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/glm_gaussian_basic_r_results.json +0 -0
  264. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/glm_gaussian_large.csv +0 -0
  265. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/glm_gaussian_large_meta.json +0 -0
  266. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/glm_gaussian_large_r_results.json +0 -0
  267. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/glm_poisson_basic.csv +0 -0
  268. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/glm_poisson_basic_meta.json +0 -0
  269. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/glm_poisson_basic_r_results.json +0 -0
  270. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/glm_poisson_large_counts.csv +0 -0
  271. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/glm_poisson_large_counts_meta.json +0 -0
  272. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/glm_poisson_large_counts_r_results.json +0 -0
  273. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/glm_poisson_zeros.csv +0 -0
  274. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/glm_poisson_zeros_meta.json +0 -0
  275. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/glm_poisson_zeros_r_results.json +0 -0
  276. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/high_noise.csv +0 -0
  277. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/high_noise_meta.json +0 -0
  278. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/high_noise_r_results.json +0 -0
  279. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/htest_chisq_2x2_yates_meta.json +0 -0
  280. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/htest_chisq_2x2_yates_r_results.json +0 -0
  281. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/htest_chisq_3x3_meta.json +0 -0
  282. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/htest_chisq_3x3_r_results.json +0 -0
  283. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/htest_chisq_gof_meta.json +0 -0
  284. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/htest_chisq_gof_r_results.json +0 -0
  285. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/htest_chisq_gof_unequal_meta.json +0 -0
  286. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/htest_chisq_gof_unequal_r_results.json +0 -0
  287. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/htest_fisher_2x2_less_meta.json +0 -0
  288. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/htest_fisher_2x2_less_r_results.json +0 -0
  289. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/htest_fisher_2x2_meta.json +0 -0
  290. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/htest_fisher_2x2_r_results.json +0 -0
  291. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/htest_fisher_3x3_meta.json +0 -0
  292. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/htest_fisher_3x3_r_results.json +0 -0
  293. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/htest_ks_onesample_norm_meta.json +0 -0
  294. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/htest_ks_onesample_norm_r_results.json +0 -0
  295. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/htest_ks_twosample_meta.json +0 -0
  296. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/htest_ks_twosample_r_results.json +0 -0
  297. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/htest_prop_onesample_meta.json +0 -0
  298. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/htest_prop_onesample_r_results.json +0 -0
  299. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/htest_prop_twosample_meta.json +0 -0
  300. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/htest_prop_twosample_r_results.json +0 -0
  301. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/htest_t_onesample_meta.json +0 -0
  302. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/htest_t_onesample_r_results.json +0 -0
  303. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/htest_t_paired_meta.json +0 -0
  304. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/htest_t_paired_r_results.json +0 -0
  305. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/htest_t_pooled_meta.json +0 -0
  306. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/htest_t_pooled_r_results.json +0 -0
  307. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/htest_t_welch_meta.json +0 -0
  308. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/htest_t_welch_r_results.json +0 -0
  309. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/htest_var_basic_meta.json +0 -0
  310. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/htest_var_basic_r_results.json +0 -0
  311. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/htest_wilcox_ranksum_meta.json +0 -0
  312. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/htest_wilcox_ranksum_r_results.json +0 -0
  313. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/htest_wilcox_signed_meta.json +0 -0
  314. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/htest_wilcox_signed_r_results.json +0 -0
  315. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/ill_conditioned.csv +0 -0
  316. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/ill_conditioned_meta.json +0 -0
  317. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/ill_conditioned_r_results.json +0 -0
  318. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/large_coeffs.csv +0 -0
  319. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/large_coeffs_meta.json +0 -0
  320. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/large_coeffs_r_results.json +0 -0
  321. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/mc_boot_ci_90_meta.json +0 -0
  322. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/mc_boot_ci_90_r_results.json +0 -0
  323. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/mc_boot_ci_normal_meta.json +0 -0
  324. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/mc_boot_ci_normal_r_results.json +0 -0
  325. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/mc_boot_ci_skewed_meta.json +0 -0
  326. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/mc_boot_ci_skewed_r_results.json +0 -0
  327. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/mc_boot_mean_balanced_meta.json +0 -0
  328. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/mc_boot_mean_balanced_r_results.json +0 -0
  329. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/mc_boot_mean_ordinary_meta.json +0 -0
  330. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/mc_boot_mean_ordinary_r_results.json +0 -0
  331. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/mc_boot_median_meta.json +0 -0
  332. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/mc_boot_median_r_results.json +0 -0
  333. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/mc_boot_variance_meta.json +0 -0
  334. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/mc_boot_variance_r_results.json +0 -0
  335. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/mc_perm_greater_meta.json +0 -0
  336. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/mc_perm_greater_r_results.json +0 -0
  337. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/mc_perm_not_significant_meta.json +0 -0
  338. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/mc_perm_not_significant_r_results.json +0 -0
  339. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/mc_perm_significant_meta.json +0 -0
  340. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/mc_perm_significant_r_results.json +0 -0
  341. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/mixed/glmm_binomial.csv +0 -0
  342. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/mixed/glmm_poisson.csv +0 -0
  343. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/mixed/lmm_crossed.csv +0 -0
  344. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/mixed/lmm_intercept.csv +0 -0
  345. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/mixed/lmm_ml.csv +0 -0
  346. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/mixed/lmm_no_effect.csv +0 -0
  347. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/mixed/lmm_slope.csv +0 -0
  348. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/mixed/mixed_meta.json +0 -0
  349. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/mixed/mixed_r_results.json +0 -0
  350. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/near_square.csv +0 -0
  351. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/near_square_meta.json +0 -0
  352. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/near_square_r_results.json +0 -0
  353. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/no_intercept.csv +0 -0
  354. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/no_intercept_meta.json +0 -0
  355. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/no_intercept_r_results.json +0 -0
  356. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/run_r_anova_validation.R +0 -0
  357. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/run_r_descriptive_validation.R +0 -0
  358. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/run_r_glm_validation.R +0 -0
  359. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/run_r_hypothesis_validation.R +0 -0
  360. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/run_r_mixed_validation.R +0 -0
  361. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/run_r_montecarlo_validation.R +0 -0
  362. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/run_r_survival_validation.R +0 -0
  363. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/run_r_validation.R +0 -0
  364. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/run_validation.sh +0 -0
  365. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/small_noise.csv +0 -0
  366. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/small_noise_meta.json +0 -0
  367. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/small_noise_r_results.json +0 -0
  368. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/surv_cox_breslow_meta.json +0 -0
  369. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/surv_cox_breslow_r_results.json +0 -0
  370. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/surv_cox_single_meta.json +0 -0
  371. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/surv_cox_single_r_results.json +0 -0
  372. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/surv_cox_ties_meta.json +0 -0
  373. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/surv_cox_ties_r_results.json +0 -0
  374. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/surv_cox_two_cov_meta.json +0 -0
  375. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/surv_cox_two_cov_r_results.json +0 -0
  376. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/surv_km_basic_meta.json +0 -0
  377. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/surv_km_basic_r_results.json +0 -0
  378. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/surv_km_heavy_cens_meta.json +0 -0
  379. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/surv_km_heavy_cens_r_results.json +0 -0
  380. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/surv_km_loglog_ci_meta.json +0 -0
  381. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/surv_km_loglog_ci_r_results.json +0 -0
  382. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/surv_km_no_cens_meta.json +0 -0
  383. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/surv_km_no_cens_r_results.json +0 -0
  384. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/surv_km_plain_ci_meta.json +0 -0
  385. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/surv_km_plain_ci_r_results.json +0 -0
  386. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/surv_km_ties_meta.json +0 -0
  387. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/surv_km_ties_r_results.json +0 -0
  388. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/surv_lr_peto_meta.json +0 -0
  389. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/surv_lr_peto_r_results.json +0 -0
  390. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/surv_lr_three_group_meta.json +0 -0
  391. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/surv_lr_three_group_r_results.json +0 -0
  392. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/surv_lr_two_group_meta.json +0 -0
  393. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/surv_lr_two_group_r_results.json +0 -0
  394. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/tall_skinny.csv +0 -0
  395. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/tall_skinny_meta.json +0 -0
  396. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/tall_skinny_r_results.json +0 -0
  397. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/fixtures/validate_against_r.py +0 -0
  398. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/hypothesis/__init__.py +0 -0
  399. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/hypothesis/conftest.py +0 -0
  400. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/hypothesis/test_chisq_test.py +0 -0
  401. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/hypothesis/test_fisher_test.py +0 -0
  402. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/hypothesis/test_gpu.py +0 -0
  403. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/hypothesis/test_ks_test.py +0 -0
  404. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/hypothesis/test_p_adjust.py +0 -0
  405. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/hypothesis/test_prop_test.py +0 -0
  406. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/hypothesis/test_r_validation.py +0 -0
  407. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/hypothesis/test_t_test.py +0 -0
  408. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/hypothesis/test_var_test.py +0 -0
  409. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/hypothesis/test_wilcox_test.py +0 -0
  410. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/mixed/__init__.py +0 -0
  411. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/mixed/conftest.py +0 -0
  412. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/mixed/test_glmm.py +0 -0
  413. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/mixed/test_lmm_crossed.py +0 -0
  414. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/mixed/test_lmm_intercept.py +0 -0
  415. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/mixed/test_lmm_nested.py +0 -0
  416. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/mixed/test_lmm_slope.py +0 -0
  417. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/mixed/test_pls.py +0 -0
  418. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/mixed/test_r_validation.py +0 -0
  419. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/mixed/test_random_effects.py +0 -0
  420. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/mixed/test_satterthwaite.py +0 -0
  421. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/montecarlo/__init__.py +0 -0
  422. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/montecarlo/conftest.py +0 -0
  423. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/montecarlo/test_batched_solver.py +0 -0
  424. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/montecarlo/test_boot_ci.py +0 -0
  425. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/montecarlo/test_bootstrap.py +0 -0
  426. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/montecarlo/test_influence.py +0 -0
  427. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/montecarlo/test_permutation.py +0 -0
  428. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/montecarlo/test_r_validation.py +0 -0
  429. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/mvnmle/references/apple_em_reference.json +0 -0
  430. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/mvnmle/references/apple_reference.json +0 -0
  431. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/mvnmle/references/generate_em_fixtures.R +0 -0
  432. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/mvnmle/references/little_mcar_apple.json +0 -0
  433. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/mvnmle/references/little_mcar_complete.json +0 -0
  434. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/mvnmle/references/little_mcar_extreme.json +0 -0
  435. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/mvnmle/references/little_mcar_missvals.json +0 -0
  436. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/mvnmle/references/little_mcar_simple_mcar.json +0 -0
  437. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/mvnmle/references/little_mcar_summary.json +0 -0
  438. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/mvnmle/references/missvals_em_reference.json +0 -0
  439. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/mvnmle/references/missvals_reference.json +0 -0
  440. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/mvnmle/references/small_test_reference.json +0 -0
  441. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/mvnmle/test_em.py +0 -0
  442. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/mvnmle/test_gpu.py +0 -0
  443. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/mvnmle/test_mlest.py +0 -0
  444. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/regression/benchmark.py +0 -0
  445. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/regression/benchmark.r +0 -0
  446. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/regression/conftest.py +0 -0
  447. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/regression/test_fit.py +0 -0
  448. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/regression/test_glm.py +0 -0
  449. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/regression/test_glm_gpu.py +0 -0
  450. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/regression/test_glm_r_validation.py +0 -0
  451. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/regression/test_r_validation.py +0 -0
  452. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/regression/test_stress_gpu.py +0 -0
  453. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/survival/__init__.py +0 -0
  454. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/survival/conftest.py +0 -0
  455. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/survival/test_coxph.py +0 -0
  456. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/survival/test_discrete_time.py +0 -0
  457. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/survival/test_gpu.py +0 -0
  458. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/survival/test_kaplan_meier.py +0 -0
  459. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/survival/test_logrank.py +0 -0
  460. {pystatistics-1.0.2 → pystatistics-1.2.0}/tests/survival/test_r_validation.py +0 -0
@@ -0,0 +1,92 @@
1
+ # Changelog
2
+
3
+ ## 1.2.0
4
+
5
+ ### CLAUDE.md Compliance
6
+
7
+ Full codebase audit and refactor to comply with all 7 rules in CLAUDE.md.
8
+
9
+ ### Breaking Changes (by design)
10
+
11
+ - **Silent model switches are now errors.** Functions that previously fell back
12
+ silently to ridge regularization, LSTSQ, or CPU backends now raise
13
+ `NumericalError` or `RuntimeError` with descriptive messages suggesting
14
+ alternatives. This affects:
15
+ - `mvnmle.mcar_test.regularized_inverse()` — raises on ill-conditioned matrices
16
+ - `mvnmle.mlest()` — raises if EM encounters non-PD covariance
17
+ - `mvnmle` parameter extraction — raises instead of returning identity covariance
18
+ - `regression.fit(backend='gpu')` — raises on Cholesky failure (use `force=True`
19
+ to proceed with LSTSQ, or `backend='cpu'` for QR)
20
+ - `mixed.lmm()` / `mixed.glmm()` — raises on singular random effects covariance
21
+ - **`backend='gpu'` now errors when GPU is unavailable.** Previously fell back
22
+ to CPU silently. `backend='auto'` still falls back silently (it means
23
+ "best available").
24
+ - **GPU bootstrap/permutation raises `NotImplementedError`.** These were silently
25
+ running on CPU while reporting a GPU backend name. Now they honestly report
26
+ that GPU acceleration is not yet implemented for these operations.
27
+
28
+ ### New Features
29
+
30
+ - **Reproducible Monte Carlo hypothesis tests**: `chisq_test()` and
31
+ `fisher_test()` now accept `seed` parameter for deterministic results
32
+ when `simulate_p_value=True`
33
+
34
+ ### Module Structure (Rule 3/4)
35
+
36
+ - Split `regression/solution.py` into `_linear.py`, `_glm.py`, and
37
+ `_formatting.py` (backward-compatible re-export shim maintained)
38
+ - Split `hypothesis/design.py` factory methods into `_design_factories.py`
39
+ (classmethods still work via thin wrappers)
40
+ - All files now under 500 code lines (Rule 4 hard limit)
41
+
42
+ ### Code Quality
43
+
44
+ - Added `# NUMERICAL GUARD:` comments to ~30 numerical stability operations
45
+ (clipping, clamping, floors) documenting why each exists
46
+ - Removed dead code (`signaltonoise` try/except in Wilcoxon test)
47
+ - Added per-module compliance tests:
48
+ - `tests/test_code_quality.py` — LOC limit enforcement
49
+ - `tests/regression/test_module_split.py` — split integrity + named coefficients
50
+ - `tests/hypothesis/test_design_split.py` — factory split + seed reproducibility
51
+ - `tests/mvnmle/test_no_silent_fallback.py` — hard stop verification
52
+
53
+ ## 1.1.0
54
+
55
+ ### New Features
56
+
57
+ - **Named coefficients**: `fit()`, `coxph()`, and `discrete_time()` accept a
58
+ `names=` parameter for labeled output matching R's style
59
+ - **`result.coef` dict property**: Access coefficients by variable name
60
+ (`result.coef["albumin"]`) on `LinearSolution`, `GLMSolution`,
61
+ `CoxSolution`, and `DiscreteTimeSolution`
62
+ - **`result.hr` dict property**: Access hazard ratios by name on `CoxSolution`
63
+ and `DiscreteTimeSolution`
64
+ - **Intercept auto-detection**: When `names` has one fewer element than columns
65
+ in X, `"(Intercept)"` is prepended automatically
66
+
67
+ ### Summary Output Improvements
68
+
69
+ - **OLS**: Added residual quantiles (Min, 1Q, Median, 3Q, Max) and overall
70
+ F-statistic with p-value, matching R's `summary(lm())`
71
+ - **Cox PH**: Added hazard ratio confidence intervals table (`exp(coef)`,
72
+ `exp(-coef)`, `lower .95`, `upper .95`), matching R's `summary(coxph())`
73
+
74
+ ### Bug Fixes
75
+
76
+ - Fixed Kaplan-Meier `summary()` printing literal `{ci_pct}` instead of the
77
+ actual confidence level percentage (e.g., `95`)
78
+
79
+ ### Real-Data Validation
80
+
81
+ - Added PBC clinical trial integration test suite (`tests/test_pbc_analysis.py`)
82
+ with 22 end-to-end analyses on the Mayo Clinic PBC dataset
83
+ - Added R cross-validation test (`tests/test_pbc_vs_r.py`) confirming all 15
84
+ comparable analyses match R to `rtol=1e-10`
85
+
86
+ ## 1.0.2
87
+
88
+ - Initial stable release
89
+ - All 8 modules complete: regression, descriptive, hypothesis, montecarlo,
90
+ survival, anova, mixed, mvnmle
91
+ - CPU backends validated against R to rtol=1e-10
92
+ - GPU backends validated against CPU per documented tolerance tiers
@@ -0,0 +1,190 @@
1
+ # Coding Bible
2
+
3
+ ## Preamble
4
+
5
+ This document is not a style guide. It is not a set of preferences. It is not a list of
6
+ suggestions that can be weighed against convenience or time pressure.
7
+
8
+ Every rule in this document exists because its absence has caused real, costly, documented
9
+ failures in real systems — bugs that took days to trace, security holes that went undetected
10
+ for months, codebases that became unmaintainable within a year of being written. The rules
11
+ are the scar tissue. They are what you get when you ask experienced engineers what they wish
12
+ someone had forced them to do the first time.
13
+
14
+ When you are implementing something and a rule feels inconvenient, that feeling is a signal,
15
+ not a reason to deviate. Inconvenience usually means the rule is doing its job — preventing
16
+ the path of least resistance from becoming a future liability.
17
+
18
+ **These rules are non-negotiable and not subject to contextual override.** The following
19
+ exceptions are not acceptable justifications for deviation:
20
+
21
+ - "This is a prototype / MVP / quick fix." Prototypes become production. Quick fixes become
22
+ permanent. Code written without discipline under time pressure is the most dangerous code
23
+ that exists.
24
+ - "This is a small module that doesn't need it." Small modules grow. The time to enforce
25
+ structure is before the module is large enough to make restructuring painful.
26
+ - "The architecture requires it." If the architecture requires violating these rules, the
27
+ architecture is wrong. Fix the architecture.
28
+ - "It would take too long to do it correctly." It will take longer to fix it later. It always
29
+ does.
30
+
31
+ If a genuine, documented edge case exists where a rule cannot be followed, that exception
32
+ must be explicitly marked in a comment at the relevant location, stating which rule is being
33
+ waived, why, and what mitigating measures are in place. Undocumented deviations are bugs.
34
+
35
+ ---
36
+
37
+ ## The Underlying Principle
38
+
39
+ All seven rules are expressions of one idea:
40
+
41
+ **Make the wrong thing hard to do accidentally.**
42
+
43
+ Good architecture is not about making correct behavior possible. Correct behavior is always
44
+ possible. Good architecture is about making incorrect behavior require deliberate, visible,
45
+ documented effort — so that mistakes are loud, localized, and recoverable rather than silent,
46
+ diffuse, and permanent.
47
+
48
+ When in doubt, ask: *am I making the wrong thing easy to do accidentally?* If yes, stop and
49
+ apply the relevant rule before continuing.
50
+
51
+ ---
52
+
53
+ These rules are non-negotiable. They exist because every one of them corresponds to a
54
+ real failure mode with real consequences. If you think a rule doesn't apply to a specific
55
+ case, you are probably wrong. If you are certain it doesn't apply, document why explicitly
56
+ in a comment before proceeding.
57
+
58
+ ---
59
+
60
+ ## 1. Fail Fast, Fail Loud, No Defaults
61
+
62
+ Do not insert default behavior that fails silently. If something breaks, the system must
63
+ break immediately, obviously, and traceably.
64
+
65
+ **Rules:**
66
+ - Raise explicit, descriptive errors. Never swallow exceptions.
67
+ - Never return a default value to mask a missing or invalid state.
68
+ - Log the failure with enough context to reproduce it.
69
+
70
+ **Corollary — No Optimistic Assumptions:**
71
+ Do not assume inputs are valid, dependencies are available, or external calls succeed.
72
+ Assert and verify. If an assumption is required, document it and enforce it with a guard.
73
+
74
+ ---
75
+
76
+ ## 2. Trust Your Neighbors — Validate Input, Not Output
77
+
78
+ You own your output contract. You do not trust anyone else's input contract.
79
+
80
+ **Rules:**
81
+ - All external inputs (API calls, user input, file reads, environment variables) must be
82
+ validated at the boundary before use.
83
+ - Internal module output does not need re-validation by the caller — the module is
84
+ responsible for the correctness of what it emits.
85
+
86
+ **Corollary — Define Your Contracts:**
87
+ Every module must have an explicit, documented input/output contract. If a caller violates
88
+ the input contract, the module must fail loudly (see Rule 1), not silently compensate.
89
+
90
+ ---
91
+
92
+ ## 3. UNIX Philosophy — One Module, One Job
93
+
94
+ Each module does one thing only, and does that one thing well. If a module needs to do
95
+ multiple things, it must be split into multiple files.
96
+
97
+ **Rules:**
98
+ - No file should be the sole owner of more than one domain concept.
99
+ - If you find yourself writing "and" when describing what a file does, split it.
100
+ - Tight coupling between modules is a design failure, not an implementation detail.
101
+
102
+ **Corollary — No God Files:**
103
+ A module that knows everything, owns everything, or touches everything is a liability.
104
+ If removing a module would require changes across more than two other modules, it is
105
+ probably doing too much.
106
+
107
+ ---
108
+
109
+ ## 4. LOC Limits — No Bloated Monoliths
110
+
111
+ Files must not become monoliths. Complexity must be managed through decomposition,
112
+ not consolidation.
113
+
114
+ **Rules:**
115
+ - **Hard limit: 500 lines of code** (comments and docstrings excluded). Do not exceed this
116
+ under any circumstances.
117
+ - **Soft limit: 400 lines of code.** Above 400 lines, actively look for split opportunities.
118
+ - If a file "requires" more than 500 lines, that is a signal the abstraction is wrong —
119
+ split it into multiple focused files.
120
+
121
+ **Corollary — Splitting Is Not Optional:**
122
+ Exceeding the hard limit is never acceptable, even temporarily. Split first, implement after.
123
+
124
+ ---
125
+
126
+ ## 5. No Hidden State — Explicit Data Flow
127
+
128
+ All state must be explicitly passed or managed through clearly defined interfaces.
129
+ Hidden state is a bug waiting to be discovered at the worst possible time.
130
+
131
+ **Rules:**
132
+ - No global variables. No module-level mutable state unless explicitly documented and
133
+ architecturally justified.
134
+ - No implicit state — if a function's behavior depends on something, that something must
135
+ appear in its signature or be explicitly injected.
136
+ - No hidden coupling between modules. If two modules share state, that relationship must
137
+ be visible and intentional.
138
+
139
+ **Corollary — Spooky Action at a Distance Is a Bug:**
140
+ If changing module A causes unexpected behavior in module B, and there is no explicit
141
+ interface between them, the architecture is broken. Fix the architecture, not the symptom.
142
+
143
+ ---
144
+
145
+ ## 6. Deterministic Behavior by Default
146
+
147
+ All functions must be deterministic unless explicitly documented otherwise.
148
+
149
+ **Rules:**
150
+ - No randomness, time-dependent logic, or non-deterministic behavior without explicit
151
+ documentation and an injectable seed or clock interface for testing.
152
+ - Functions that depend on system time, random state, or external non-deterministic
153
+ sources must be flagged with a `# NON-DETERMINISTIC:` comment explaining why.
154
+ - Non-deterministic behavior must be isolatable — wrap it so the rest of the system
155
+ can be tested deterministically.
156
+
157
+ **Corollary — Reproducibility Is Not Optional:**
158
+ If a bug cannot be reliably reproduced, it cannot be reliably fixed. Non-determinism
159
+ is the enemy of reproducibility. Treat it like a dependency that must be explicitly
160
+ managed, not a feature.
161
+
162
+ ---
163
+
164
+ ## 7. Tests Are First-Class Citizens
165
+
166
+ Every module must have corresponding tests. Tests are not optional, not afterthoughts,
167
+ and not someone else's job.
168
+
169
+ **Rules:**
170
+ - Every module must have a corresponding test file covering:
171
+ - **Normal cases** — expected inputs produce expected outputs.
172
+ - **Edge cases** — boundary conditions, empty inputs, maximum values, type boundaries.
173
+ - **Failure cases** — invalid inputs produce the correct explicit errors (see Rule 1).
174
+ - No module ships without tests. No exceptions.
175
+ - Tests must be runnable in isolation — no test should depend on the state left by
176
+ another test.
177
+
178
+ **Corollary — Untested Code Is Unverified Assumptions:**
179
+ If there is no test for a behavior, that behavior is assumed, not verified. Assumptions
180
+ accumulate into system failures. If you cannot write a test for something, that is a signal
181
+ the design is wrong.
182
+
183
+ ---
184
+
185
+ ## Meta-Rule
186
+
187
+ If any of these rules feel inconvenient, that feeling is the point. These rules exist
188
+ precisely because the convenient path leads to the failure modes each rule was written
189
+ to prevent. When in doubt, ask: *am I making the wrong thing easy to do accidentally?*
190
+ If yes, apply the relevant rule.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pystatistics
3
- Version: 1.0.2
3
+ Version: 1.2.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/
@@ -48,6 +48,23 @@ Description-Content-Type: text/markdown
48
48
 
49
49
  GPU-accelerated statistical computing for Python.
50
50
 
51
+ ## What's New in 1.2
52
+
53
+ - **No silent model switches.** PyStatistics now raises explicit errors instead of silently falling back to ridge regularization, different solvers, or CPU backends. You always know exactly what model you're running.
54
+ - **`backend='gpu'` is honest.** Explicitly requesting GPU now errors if GPU is unavailable or the operation has no GPU implementation. `backend='auto'` still falls back silently.
55
+ - **Reproducible Monte Carlo.** `chisq_test()` and `fisher_test()` accept `seed=` for deterministic Monte Carlo p-values.
56
+ - **Module structure.** Large files split per CLAUDE.md Rule 4 (500 code-line limit). All backward-compatible.
57
+
58
+ ### What's New in 1.1
59
+
60
+ - **Named coefficients**: Pass `names=` to `fit()`, `coxph()`, and `discrete_time()` to get labeled output matching R
61
+ - **`result.coef` dict**: Access coefficients by name — `result.coef["albumin"]` instead of `result.coefficients[1]`
62
+ - **`result.hr` dict** (Cox/discrete-time): Access hazard ratios by name
63
+ - **Intercept auto-detection**: Pass p-1 names and `"(Intercept)"` is prepended automatically
64
+ - **OLS summary improvements**: Now prints residual quantiles and F-statistic, matching R's `summary(lm())`
65
+ - **Cox summary improvements**: Now prints hazard ratio confidence intervals, matching R's `summary(coxph())`
66
+ - **Bug fix**: Kaplan-Meier summary now correctly displays confidence level percentage
67
+
51
68
  ---
52
69
 
53
70
  ## Design Philosophy
@@ -160,8 +177,10 @@ from pystatistics.regression import fit
160
177
 
161
178
  X = np.random.randn(1000, 5)
162
179
  y = X @ [1, 2, 3, -1, 0.5] + np.random.randn(1000) * 0.1
163
- result = fit(X, y)
164
- print(result.summary())
180
+ result = fit(X, y, names=['x1', 'x2', 'x3', 'x4', 'x5'])
181
+ print(result.summary()) # R-style output with variable names
182
+ print(result.coef) # {'x1': 1.00, 'x2': 2.00, ...}
183
+ print(result.coef['x3']) # 3.00
165
184
 
166
185
  # Logistic regression
167
186
  y_binary = (X @ [1, -1, 0.5, 0, 0] + np.random.randn(1000) > 0).astype(float)
@@ -2,6 +2,23 @@
2
2
 
3
3
  GPU-accelerated statistical computing for Python.
4
4
 
5
+ ## What's New in 1.2
6
+
7
+ - **No silent model switches.** PyStatistics now raises explicit errors instead of silently falling back to ridge regularization, different solvers, or CPU backends. You always know exactly what model you're running.
8
+ - **`backend='gpu'` is honest.** Explicitly requesting GPU now errors if GPU is unavailable or the operation has no GPU implementation. `backend='auto'` still falls back silently.
9
+ - **Reproducible Monte Carlo.** `chisq_test()` and `fisher_test()` accept `seed=` for deterministic Monte Carlo p-values.
10
+ - **Module structure.** Large files split per CLAUDE.md Rule 4 (500 code-line limit). All backward-compatible.
11
+
12
+ ### What's New in 1.1
13
+
14
+ - **Named coefficients**: Pass `names=` to `fit()`, `coxph()`, and `discrete_time()` to get labeled output matching R
15
+ - **`result.coef` dict**: Access coefficients by name — `result.coef["albumin"]` instead of `result.coefficients[1]`
16
+ - **`result.hr` dict** (Cox/discrete-time): Access hazard ratios by name
17
+ - **Intercept auto-detection**: Pass p-1 names and `"(Intercept)"` is prepended automatically
18
+ - **OLS summary improvements**: Now prints residual quantiles and F-statistic, matching R's `summary(lm())`
19
+ - **Cox summary improvements**: Now prints hazard ratio confidence intervals, matching R's `summary(coxph())`
20
+ - **Bug fix**: Kaplan-Meier summary now correctly displays confidence level percentage
21
+
5
22
  ---
6
23
 
7
24
  ## Design Philosophy
@@ -114,8 +131,10 @@ from pystatistics.regression import fit
114
131
 
115
132
  X = np.random.randn(1000, 5)
116
133
  y = X @ [1, 2, 3, -1, 0.5] + np.random.randn(1000) * 0.1
117
- result = fit(X, y)
118
- print(result.summary())
134
+ result = fit(X, y, names=['x1', 'x2', 'x3', 'x4', 'x5'])
135
+ print(result.summary()) # R-style output with variable names
136
+ print(result.coef) # {'x1': 1.00, 'x2': 2.00, ...}
137
+ print(result.coef['x3']) # 3.00
119
138
 
120
139
  # Logistic regression
121
140
  y_binary = (X @ [1, -1, 0.5, 0, 0] + np.random.randn(1000) > 0).astype(float)
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "pystatistics"
7
- version = "1.0.2"
7
+ version = "1.2.0"
8
8
  description = "GPU-accelerated statistical computing for Python"
9
9
  readme = "README.md"
10
10
  license = "MIT"
@@ -16,7 +16,7 @@ Usage:
16
16
  result = fit(design)
17
17
  """
18
18
 
19
- __version__ = "0.1.0"
19
+ __version__ = "1.2.0"
20
20
  __author__ = "Hai-Shuo"
21
21
  __email__ = "contact@sgcx.org"
22
22