pystatistics 4.6.0__tar.gz → 4.6.2__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 (700) hide show
  1. pystatistics-4.6.2/.release/UNRELEASED.md +12 -0
  2. {pystatistics-4.6.0 → pystatistics-4.6.2}/CHANGELOG.md +103 -0
  3. {pystatistics-4.6.0 → pystatistics-4.6.2}/PKG-INFO +30 -1
  4. {pystatistics-4.6.0 → pystatistics-4.6.2}/README.md +29 -0
  5. {pystatistics-4.6.0 → pystatistics-4.6.2}/pyproject.toml +1 -1
  6. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/__init__.py +1 -1
  7. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/gam/_criteria.py +64 -20
  8. pystatistics-4.6.2/pystatistics/gam/_gradient.py +139 -0
  9. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/timeseries/__init__.py +15 -4
  10. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/timeseries/_decomposition.py +4 -278
  11. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/timeseries/_differencing.py +8 -5
  12. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/timeseries/_ets_fit.py +268 -330
  13. pystatistics-4.6.2/pystatistics/timeseries/_ets_result.py +275 -0
  14. pystatistics-4.6.2/pystatistics/timeseries/_ets_select.py +406 -0
  15. pystatistics-4.6.2/pystatistics/timeseries/_loess.py +323 -0
  16. pystatistics-4.6.2/pystatistics/timeseries/_stl.py +354 -0
  17. pystatistics-4.6.2/pystatistics/timeseries/_stl_core.py +158 -0
  18. pystatistics-4.6.2/pystatistics/timeseries/_stl_robust.py +226 -0
  19. pystatistics-4.6.2/tests/fixtures/ets_r_reference.json +1 -0
  20. pystatistics-4.6.2/tests/fixtures/generate_ets_r_reference.R +72 -0
  21. pystatistics-4.6.2/tests/fixtures/generate_stl_r_reference.R +66 -0
  22. pystatistics-4.6.2/tests/fixtures/stl_r_reference.json +1 -0
  23. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/gam/test_gam.py +116 -0
  24. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/timeseries/test_acf_stationarity.py +24 -0
  25. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/timeseries/test_decomposition.py +61 -5
  26. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/timeseries/test_ets.py +341 -10
  27. pystatistics-4.6.2/tests/timeseries/test_loess.py +167 -0
  28. pystatistics-4.6.2/tests/timeseries/test_stl_r_parity.py +151 -0
  29. pystatistics-4.6.2/tests/timeseries/test_stl_robust.py +113 -0
  30. pystatistics-4.6.0/.release/UNRELEASED.md +0 -139
  31. {pystatistics-4.6.0 → pystatistics-4.6.2}/.github/workflows/publish.yml +0 -0
  32. {pystatistics-4.6.0 → pystatistics-4.6.2}/.github/workflows/trigger-docs-rebuild.yml +0 -0
  33. {pystatistics-4.6.0 → pystatistics-4.6.2}/.gitignore +0 -0
  34. {pystatistics-4.6.0 → pystatistics-4.6.2}/.release/CHECKLIST.md +0 -0
  35. {pystatistics-4.6.0 → pystatistics-4.6.2}/.release/release.py +0 -0
  36. {pystatistics-4.6.0 → pystatistics-4.6.2}/LICENSE +0 -0
  37. {pystatistics-4.6.0 → pystatistics-4.6.2}/benchmarks/mvnmle_bench.py +0 -0
  38. {pystatistics-4.6.0 → pystatistics-4.6.2}/benchmarks/mvnmle_gpu_per_eval.py +0 -0
  39. {pystatistics-4.6.0 → pystatistics-4.6.2}/docs/DESIGN.md +0 -0
  40. {pystatistics-4.6.0 → pystatistics-4.6.2}/docs/GPU_NOTES.md +0 -0
  41. {pystatistics-4.6.0 → pystatistics-4.6.2}/docs/Makefile +0 -0
  42. {pystatistics-4.6.0 → pystatistics-4.6.2}/docs/ROADMAP.md +0 -0
  43. {pystatistics-4.6.0 → pystatistics-4.6.2}/docs/_static/custom.css +0 -0
  44. {pystatistics-4.6.0 → pystatistics-4.6.2}/docs/anova.rst +0 -0
  45. {pystatistics-4.6.0 → pystatistics-4.6.2}/docs/conf.py +0 -0
  46. {pystatistics-4.6.0 → pystatistics-4.6.2}/docs/core.rst +0 -0
  47. {pystatistics-4.6.0 → pystatistics-4.6.2}/docs/descriptive.rst +0 -0
  48. {pystatistics-4.6.0 → pystatistics-4.6.2}/docs/gam.rst +0 -0
  49. {pystatistics-4.6.0 → pystatistics-4.6.2}/docs/hypothesis.rst +0 -0
  50. {pystatistics-4.6.0 → pystatistics-4.6.2}/docs/index.rst +0 -0
  51. {pystatistics-4.6.0 → pystatistics-4.6.2}/docs/mixed.rst +0 -0
  52. {pystatistics-4.6.0 → pystatistics-4.6.2}/docs/montecarlo.rst +0 -0
  53. {pystatistics-4.6.0 → pystatistics-4.6.2}/docs/multinomial.rst +0 -0
  54. {pystatistics-4.6.0 → pystatistics-4.6.2}/docs/multivariate.rst +0 -0
  55. {pystatistics-4.6.0 → pystatistics-4.6.2}/docs/mvnmle.rst +0 -0
  56. {pystatistics-4.6.0 → pystatistics-4.6.2}/docs/ordinal.rst +0 -0
  57. {pystatistics-4.6.0 → pystatistics-4.6.2}/docs/regression.rst +0 -0
  58. {pystatistics-4.6.0 → pystatistics-4.6.2}/docs/survival.rst +0 -0
  59. {pystatistics-4.6.0 → pystatistics-4.6.2}/docs/timeseries.rst +0 -0
  60. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/CONVENTIONS.md +0 -0
  61. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/anova/__init__.py +0 -0
  62. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/anova/_common.py +0 -0
  63. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/anova/_contrasts.py +0 -0
  64. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/anova/_levene.py +0 -0
  65. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/anova/_posthoc.py +0 -0
  66. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/anova/_repeated.py +0 -0
  67. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/anova/_ss.py +0 -0
  68. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/anova/design.py +0 -0
  69. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/anova/solution.py +0 -0
  70. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/anova/solvers.py +0 -0
  71. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/core/__init__.py +0 -0
  72. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/core/capabilities.py +0 -0
  73. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/core/compute/__init__.py +0 -0
  74. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/core/compute/backend.py +0 -0
  75. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/core/compute/device.py +0 -0
  76. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/core/compute/linalg/__init__.py +0 -0
  77. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/core/compute/linalg/batched.py +0 -0
  78. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/core/compute/linalg/cholesky.py +0 -0
  79. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/core/compute/linalg/determinant.py +0 -0
  80. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/core/compute/linalg/qr.py +0 -0
  81. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/core/compute/linalg/solve.py +0 -0
  82. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/core/compute/linalg/svd.py +0 -0
  83. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/core/compute/linalg/triangular.py +0 -0
  84. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/core/compute/optimization/__init__.py +0 -0
  85. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/core/compute/optimization/convergence.py +0 -0
  86. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/core/compute/precision.py +0 -0
  87. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/core/compute/timing.py +0 -0
  88. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/core/compute/tolerances.py +0 -0
  89. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/core/compute/torch_interop.py +0 -0
  90. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/core/datasource.py +0 -0
  91. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/core/encoding.py +0 -0
  92. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/core/exceptions.py +0 -0
  93. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/core/protocols.py +0 -0
  94. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/core/result.py +0 -0
  95. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/core/validation.py +0 -0
  96. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/descriptive/__init__.py +0 -0
  97. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/descriptive/_missing.py +0 -0
  98. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/descriptive/_quantile_types.py +0 -0
  99. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/descriptive/backends/__init__.py +0 -0
  100. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/descriptive/backends/cpu.py +0 -0
  101. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/descriptive/backends/gpu.py +0 -0
  102. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/descriptive/design.py +0 -0
  103. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/descriptive/solution.py +0 -0
  104. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/descriptive/solvers.py +0 -0
  105. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/gam/__init__.py +0 -0
  106. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/gam/_basis.py +0 -0
  107. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/gam/_basis_common.py +0 -0
  108. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/gam/_basis_cr.py +0 -0
  109. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/gam/_basis_tp.py +0 -0
  110. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/gam/_common.py +0 -0
  111. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/gam/_constraints.py +0 -0
  112. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/gam/_edf.py +0 -0
  113. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/gam/_gam.py +0 -0
  114. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/gam/_pirls.py +0 -0
  115. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/gam/_smooth.py +0 -0
  116. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/gam/_smooth_test.py +0 -0
  117. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/gam/solution.py +0 -0
  118. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/hypothesis/__init__.py +0 -0
  119. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/hypothesis/_common.py +0 -0
  120. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/hypothesis/_design_factories.py +0 -0
  121. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/hypothesis/_p_adjust.py +0 -0
  122. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/hypothesis/backends/__init__.py +0 -0
  123. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/hypothesis/backends/_chisq_test.py +0 -0
  124. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/hypothesis/backends/_fisher_test.py +0 -0
  125. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/hypothesis/backends/_ks_test.py +0 -0
  126. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/hypothesis/backends/_prop_test.py +0 -0
  127. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/hypothesis/backends/_t_test.py +0 -0
  128. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/hypothesis/backends/_var_test.py +0 -0
  129. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/hypothesis/backends/_wilcox_test.py +0 -0
  130. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/hypothesis/backends/cpu.py +0 -0
  131. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/hypothesis/backends/gpu.py +0 -0
  132. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/hypothesis/design.py +0 -0
  133. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/hypothesis/solution.py +0 -0
  134. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/hypothesis/solvers.py +0 -0
  135. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mice/__init__.py +0 -0
  136. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mice/_chain.py +0 -0
  137. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mice/_encode.py +0 -0
  138. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mice/_rng.py +0 -0
  139. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mice/_visit.py +0 -0
  140. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mice/backends/__init__.py +0 -0
  141. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mice/backends/_gpu_encode.py +0 -0
  142. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mice/backends/_gpu_linreg.py +0 -0
  143. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mice/backends/_gpu_logreg.py +0 -0
  144. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mice/backends/_gpu_methods.py +0 -0
  145. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mice/backends/_gpu_polr.py +0 -0
  146. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mice/backends/_gpu_polyreg.py +0 -0
  147. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mice/backends/_gpu_spd.py +0 -0
  148. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mice/backends/cpu.py +0 -0
  149. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mice/backends/gpu.py +0 -0
  150. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mice/datasets.py +0 -0
  151. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mice/design.py +0 -0
  152. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mice/methods/__init__.py +0 -0
  153. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mice/methods/_draw.py +0 -0
  154. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mice/methods/_linreg.py +0 -0
  155. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mice/methods/base.py +0 -0
  156. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mice/methods/logreg.py +0 -0
  157. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mice/methods/norm.py +0 -0
  158. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mice/methods/pmm.py +0 -0
  159. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mice/methods/polr.py +0 -0
  160. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mice/methods/polyreg.py +0 -0
  161. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mice/methods/registry.py +0 -0
  162. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mice/pooling.py +0 -0
  163. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mice/solution.py +0 -0
  164. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mice/solvers.py +0 -0
  165. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mixed/__init__.py +0 -0
  166. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mixed/_common.py +0 -0
  167. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mixed/_deviance.py +0 -0
  168. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mixed/_glmm_optimizer.py +0 -0
  169. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mixed/_glmm_pirls.py +0 -0
  170. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mixed/_grm_cpu.py +0 -0
  171. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mixed/_optimizer.py +0 -0
  172. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mixed/_pls.py +0 -0
  173. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mixed/_pls_structured.py +0 -0
  174. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mixed/_random_effects.py +0 -0
  175. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mixed/_satterthwaite.py +0 -0
  176. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mixed/_struct_batched.py +0 -0
  177. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mixed/_struct_sparse.py +0 -0
  178. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mixed/backends/__init__.py +0 -0
  179. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mixed/backends/grm_gpu.py +0 -0
  180. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mixed/design.py +0 -0
  181. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mixed/grm.py +0 -0
  182. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mixed/grm_solution.py +0 -0
  183. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mixed/solution.py +0 -0
  184. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mixed/solvers.py +0 -0
  185. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/montecarlo/__init__.py +0 -0
  186. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/montecarlo/_ci.py +0 -0
  187. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/montecarlo/_common.py +0 -0
  188. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/montecarlo/_influence.py +0 -0
  189. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/montecarlo/backends/__init__.py +0 -0
  190. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/montecarlo/backends/cpu.py +0 -0
  191. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/montecarlo/backends/gpu.py +0 -0
  192. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/montecarlo/design.py +0 -0
  193. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/montecarlo/solution.py +0 -0
  194. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/montecarlo/solvers.py +0 -0
  195. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/multinomial/__init__.py +0 -0
  196. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/multinomial/_common.py +0 -0
  197. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/multinomial/_likelihood.py +0 -0
  198. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/multinomial/_solver.py +0 -0
  199. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/multinomial/backends/__init__.py +0 -0
  200. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/multinomial/backends/gpu_likelihood.py +0 -0
  201. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/multinomial/solution.py +0 -0
  202. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/multivariate/__init__.py +0 -0
  203. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/multivariate/_common.py +0 -0
  204. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/multivariate/_factor.py +0 -0
  205. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/multivariate/_pca.py +0 -0
  206. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/multivariate/_rotation.py +0 -0
  207. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/multivariate/backends/__init__.py +0 -0
  208. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/multivariate/backends/gpu_pca.py +0 -0
  209. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/multivariate/backends/gpu_pca_randomized.py +0 -0
  210. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mvnmle/__init__.py +0 -0
  211. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mvnmle/_degeneracy.py +0 -0
  212. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mvnmle/_monotone.py +0 -0
  213. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mvnmle/_objectives/__init__.py +0 -0
  214. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mvnmle/_objectives/_batched_cholesky.py +0 -0
  215. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mvnmle/_objectives/base.py +0 -0
  216. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mvnmle/_objectives/cpu.py +0 -0
  217. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mvnmle/_objectives/gpu_fp32.py +0 -0
  218. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mvnmle/_objectives/gpu_fp64.py +0 -0
  219. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mvnmle/_objectives/parameterizations.py +0 -0
  220. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mvnmle/_utils.py +0 -0
  221. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mvnmle/backends/__init__.py +0 -0
  222. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mvnmle/backends/_direct.py +0 -0
  223. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mvnmle/backends/_em_batched.py +0 -0
  224. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mvnmle/backends/_em_batched_np.py +0 -0
  225. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mvnmle/backends/_em_batched_patterns.py +0 -0
  226. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mvnmle/backends/_em_batched_torch.py +0 -0
  227. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mvnmle/backends/_optimize.py +0 -0
  228. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mvnmle/backends/_squarem.py +0 -0
  229. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mvnmle/backends/cpu.py +0 -0
  230. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mvnmle/backends/em.py +0 -0
  231. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mvnmle/backends/gpu.py +0 -0
  232. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mvnmle/datasets.py +0 -0
  233. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mvnmle/design.py +0 -0
  234. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mvnmle/mcar_test.py +0 -0
  235. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mvnmle/patterns.py +0 -0
  236. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mvnmle/solution.py +0 -0
  237. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/mvnmle/solvers.py +0 -0
  238. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/ordinal/__init__.py +0 -0
  239. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/ordinal/_common.py +0 -0
  240. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/ordinal/_information.py +0 -0
  241. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/ordinal/_likelihood.py +0 -0
  242. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/ordinal/_solver.py +0 -0
  243. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/ordinal/backends/__init__.py +0 -0
  244. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/ordinal/backends/gpu_likelihood.py +0 -0
  245. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/ordinal/solution.py +0 -0
  246. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/py.typed +0 -0
  247. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/regression/__init__.py +0 -0
  248. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/regression/_formatting.py +0 -0
  249. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/regression/_glm.py +0 -0
  250. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/regression/_inputs.py +0 -0
  251. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/regression/_linear.py +0 -0
  252. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/regression/_nb_theta.py +0 -0
  253. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/regression/_penalty.py +0 -0
  254. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/regression/backends/__init__.py +0 -0
  255. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/regression/backends/_irls_step.py +0 -0
  256. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/regression/backends/cpu.py +0 -0
  257. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/regression/backends/cpu_glm.py +0 -0
  258. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/regression/backends/gpu.py +0 -0
  259. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/regression/backends/gpu_glm.py +0 -0
  260. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/regression/design.py +0 -0
  261. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/regression/families.py +0 -0
  262. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/regression/solution.py +0 -0
  263. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/regression/solvers.py +0 -0
  264. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/regression/terms.py +0 -0
  265. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/survival/__init__.py +0 -0
  266. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/survival/_common.py +0 -0
  267. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/survival/_cox.py +0 -0
  268. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/survival/_discrete.py +0 -0
  269. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/survival/_km.py +0 -0
  270. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/survival/_logrank.py +0 -0
  271. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/survival/backends/__init__.py +0 -0
  272. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/survival/backends/cpu.py +0 -0
  273. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/survival/backends/gpu.py +0 -0
  274. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/survival/design.py +0 -0
  275. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/survival/solution.py +0 -0
  276. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/survival/solvers.py +0 -0
  277. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/timeseries/_acf.py +0 -0
  278. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/timeseries/_arima_batch.py +0 -0
  279. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/timeseries/_arima_factored.py +0 -0
  280. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/timeseries/_arima_fit.py +0 -0
  281. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/timeseries/_arima_forecast.py +0 -0
  282. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/timeseries/_arima_kalman.py +0 -0
  283. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/timeseries/_arima_likelihood.py +0 -0
  284. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/timeseries/_arima_order.py +0 -0
  285. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/timeseries/_arima_solution.py +0 -0
  286. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/timeseries/_common.py +0 -0
  287. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/timeseries/_ets_forecast.py +0 -0
  288. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/timeseries/_ets_models.py +0 -0
  289. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/timeseries/_stationarity.py +0 -0
  290. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/timeseries/_whittle.py +0 -0
  291. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/timeseries/backends/__init__.py +0 -0
  292. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/timeseries/backends/whittle_batch_gpu.py +0 -0
  293. {pystatistics-4.6.0 → pystatistics-4.6.2}/pystatistics/timeseries/backends/whittle_gpu.py +0 -0
  294. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/anova/__init__.py +0 -0
  295. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/anova/conftest.py +0 -0
  296. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/anova/test_contrasts.py +0 -0
  297. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/anova/test_design.py +0 -0
  298. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/anova/test_factorial.py +0 -0
  299. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/anova/test_levene.py +0 -0
  300. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/anova/test_oneway.py +0 -0
  301. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/anova/test_posthoc.py +0 -0
  302. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/anova/test_r_validation.py +0 -0
  303. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/anova/test_repeated_measures.py +0 -0
  304. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/benchmark_gpu.py +0 -0
  305. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/conftest.py +0 -0
  306. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/core/test_backend.py +0 -0
  307. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/core/test_datasource.py +0 -0
  308. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/core/test_exceptions.py +0 -0
  309. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/core/test_qr_solve.py +0 -0
  310. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/core/test_repr_html.py +0 -0
  311. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/core/test_result.py +0 -0
  312. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/core/test_torch_interop.py +0 -0
  313. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/core/test_validation.py +0 -0
  314. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/descriptive/__init__.py +0 -0
  315. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/descriptive/conftest.py +0 -0
  316. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/descriptive/test_backend_convention.py +0 -0
  317. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/descriptive/test_cor.py +0 -0
  318. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/descriptive/test_cov.py +0 -0
  319. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/descriptive/test_describe.py +0 -0
  320. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/descriptive/test_gpu.py +0 -0
  321. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/descriptive/test_missing.py +0 -0
  322. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/descriptive/test_moments.py +0 -0
  323. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/descriptive/test_quantile.py +0 -0
  324. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/descriptive/test_r_validation.py +0 -0
  325. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/anova_ancova_meta.json +0 -0
  326. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/anova_ancova_r_results.json +0 -0
  327. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/anova_bonferroni_meta.json +0 -0
  328. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/anova_bonferroni_r_results.json +0 -0
  329. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/anova_eta_meta.json +0 -0
  330. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/anova_eta_r_results.json +0 -0
  331. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/anova_levene_meta.json +0 -0
  332. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/anova_levene_r_results.json +0 -0
  333. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/anova_oneway_balanced_meta.json +0 -0
  334. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/anova_oneway_balanced_r_results.json +0 -0
  335. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/anova_oneway_unbalanced_meta.json +0 -0
  336. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/anova_oneway_unbalanced_r_results.json +0 -0
  337. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/anova_rm_mixed_meta.json +0 -0
  338. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/anova_rm_mixed_r_results.json +0 -0
  339. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/anova_rm_within_meta.json +0 -0
  340. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/anova_rm_within_r_results.json +0 -0
  341. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/anova_tukey_meta.json +0 -0
  342. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/anova_tukey_r_results.json +0 -0
  343. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/anova_twoway_balanced_meta.json +0 -0
  344. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/anova_twoway_balanced_r_results.json +0 -0
  345. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/anova_twoway_unbalanced_meta.json +0 -0
  346. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/anova_twoway_unbalanced_r_results.json +0 -0
  347. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/basic_100x3.csv +0 -0
  348. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/basic_100x3_meta.json +0 -0
  349. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/basic_100x3_r_results.json +0 -0
  350. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/collinear_almost.csv +0 -0
  351. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/collinear_almost_meta.json +0 -0
  352. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/collinear_almost_r_results.json +0 -0
  353. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/desc_basic_100x5.csv +0 -0
  354. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/desc_basic_100x5_meta.json +0 -0
  355. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/desc_basic_100x5_r_results.json +0 -0
  356. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/desc_constant_column.csv +0 -0
  357. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/desc_constant_column_meta.json +0 -0
  358. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/desc_constant_column_r_results.json +0 -0
  359. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/desc_extreme_values.csv +0 -0
  360. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/desc_extreme_values_meta.json +0 -0
  361. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/desc_extreme_values_r_results.json +0 -0
  362. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/desc_large_1000x10.csv +0 -0
  363. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/desc_large_1000x10_meta.json +0 -0
  364. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/desc_large_1000x10_r_results.json +0 -0
  365. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/desc_nan_columnwise.csv +0 -0
  366. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/desc_nan_columnwise_meta.json +0 -0
  367. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/desc_nan_columnwise_r_results.json +0 -0
  368. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/desc_nan_scattered.csv +0 -0
  369. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/desc_nan_scattered_meta.json +0 -0
  370. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/desc_nan_scattered_r_results.json +0 -0
  371. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/desc_negative_correlation.csv +0 -0
  372. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/desc_negative_correlation_meta.json +0 -0
  373. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/desc_negative_correlation_r_results.json +0 -0
  374. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/desc_perfect_correlation.csv +0 -0
  375. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/desc_perfect_correlation_meta.json +0 -0
  376. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/desc_perfect_correlation_r_results.json +0 -0
  377. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/desc_single_column.csv +0 -0
  378. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/desc_single_column_meta.json +0 -0
  379. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/desc_single_column_r_results.json +0 -0
  380. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/desc_ties.csv +0 -0
  381. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/desc_ties_meta.json +0 -0
  382. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/desc_ties_r_results.json +0 -0
  383. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/different_scales.csv +0 -0
  384. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/different_scales_meta.json +0 -0
  385. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/different_scales_r_results.json +0 -0
  386. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/generate_anova_fixtures.py +0 -0
  387. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/generate_descriptive_fixtures.py +0 -0
  388. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/generate_fixtures.py +0 -0
  389. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/generate_glm_fixtures.py +0 -0
  390. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/generate_hypothesis_fixtures.py +0 -0
  391. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/generate_mixed_fixtures.py +0 -0
  392. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/generate_montecarlo_fixtures.py +0 -0
  393. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/generate_nb_autotheta_fixtures.py +0 -0
  394. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/generate_survival_fixtures.py +0 -0
  395. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/generate_weights_offset_fixtures.py +0 -0
  396. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/glm_binomial_balanced.csv +0 -0
  397. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/glm_binomial_balanced_meta.json +0 -0
  398. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/glm_binomial_balanced_r_results.json +0 -0
  399. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/glm_binomial_basic.csv +0 -0
  400. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/glm_binomial_basic_meta.json +0 -0
  401. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/glm_binomial_basic_r_results.json +0 -0
  402. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/glm_binomial_large.csv +0 -0
  403. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/glm_binomial_large_meta.json +0 -0
  404. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/glm_binomial_large_r_results.json +0 -0
  405. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/glm_binomial_separated.csv +0 -0
  406. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/glm_binomial_separated_meta.json +0 -0
  407. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/glm_binomial_separated_r_results.json +0 -0
  408. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/glm_gaussian_basic.csv +0 -0
  409. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/glm_gaussian_basic_meta.json +0 -0
  410. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/glm_gaussian_basic_r_results.json +0 -0
  411. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/glm_gaussian_large.csv +0 -0
  412. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/glm_gaussian_large_meta.json +0 -0
  413. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/glm_gaussian_large_r_results.json +0 -0
  414. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/glm_poisson_basic.csv +0 -0
  415. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/glm_poisson_basic_meta.json +0 -0
  416. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/glm_poisson_basic_r_results.json +0 -0
  417. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/glm_poisson_large_counts.csv +0 -0
  418. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/glm_poisson_large_counts_meta.json +0 -0
  419. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/glm_poisson_large_counts_r_results.json +0 -0
  420. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/glm_poisson_zeros.csv +0 -0
  421. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/glm_poisson_zeros_meta.json +0 -0
  422. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/glm_poisson_zeros_r_results.json +0 -0
  423. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/high_noise.csv +0 -0
  424. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/high_noise_meta.json +0 -0
  425. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/high_noise_r_results.json +0 -0
  426. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/htest_chisq_2x2_yates_meta.json +0 -0
  427. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/htest_chisq_2x2_yates_r_results.json +0 -0
  428. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/htest_chisq_3x3_meta.json +0 -0
  429. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/htest_chisq_3x3_r_results.json +0 -0
  430. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/htest_chisq_gof_meta.json +0 -0
  431. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/htest_chisq_gof_r_results.json +0 -0
  432. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/htest_chisq_gof_unequal_meta.json +0 -0
  433. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/htest_chisq_gof_unequal_r_results.json +0 -0
  434. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/htest_fisher_2x2_less_meta.json +0 -0
  435. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/htest_fisher_2x2_less_r_results.json +0 -0
  436. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/htest_fisher_2x2_meta.json +0 -0
  437. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/htest_fisher_2x2_r_results.json +0 -0
  438. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/htest_fisher_3x3_meta.json +0 -0
  439. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/htest_fisher_3x3_r_results.json +0 -0
  440. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/htest_ks_onesample_norm_meta.json +0 -0
  441. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/htest_ks_onesample_norm_r_results.json +0 -0
  442. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/htest_ks_twosample_meta.json +0 -0
  443. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/htest_ks_twosample_r_results.json +0 -0
  444. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/htest_prop_onesample_meta.json +0 -0
  445. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/htest_prop_onesample_r_results.json +0 -0
  446. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/htest_prop_twosample_meta.json +0 -0
  447. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/htest_prop_twosample_r_results.json +0 -0
  448. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/htest_t_onesample_meta.json +0 -0
  449. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/htest_t_onesample_r_results.json +0 -0
  450. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/htest_t_paired_meta.json +0 -0
  451. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/htest_t_paired_r_results.json +0 -0
  452. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/htest_t_pooled_meta.json +0 -0
  453. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/htest_t_pooled_r_results.json +0 -0
  454. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/htest_t_welch_meta.json +0 -0
  455. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/htest_t_welch_r_results.json +0 -0
  456. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/htest_var_basic_meta.json +0 -0
  457. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/htest_var_basic_r_results.json +0 -0
  458. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/htest_wilcox_ranksum_meta.json +0 -0
  459. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/htest_wilcox_ranksum_r_results.json +0 -0
  460. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/htest_wilcox_signed_meta.json +0 -0
  461. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/htest_wilcox_signed_r_results.json +0 -0
  462. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/ill_conditioned.csv +0 -0
  463. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/ill_conditioned_meta.json +0 -0
  464. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/ill_conditioned_r_results.json +0 -0
  465. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/large_coeffs.csv +0 -0
  466. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/large_coeffs_meta.json +0 -0
  467. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/large_coeffs_r_results.json +0 -0
  468. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/mc_boot_ci_90_meta.json +0 -0
  469. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/mc_boot_ci_90_r_results.json +0 -0
  470. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/mc_boot_ci_normal_meta.json +0 -0
  471. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/mc_boot_ci_normal_r_results.json +0 -0
  472. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/mc_boot_ci_skewed_meta.json +0 -0
  473. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/mc_boot_ci_skewed_r_results.json +0 -0
  474. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/mc_boot_mean_balanced_meta.json +0 -0
  475. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/mc_boot_mean_balanced_r_results.json +0 -0
  476. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/mc_boot_mean_ordinary_meta.json +0 -0
  477. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/mc_boot_mean_ordinary_r_results.json +0 -0
  478. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/mc_boot_median_meta.json +0 -0
  479. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/mc_boot_median_r_results.json +0 -0
  480. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/mc_boot_variance_meta.json +0 -0
  481. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/mc_boot_variance_r_results.json +0 -0
  482. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/mc_perm_greater_meta.json +0 -0
  483. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/mc_perm_greater_r_results.json +0 -0
  484. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/mc_perm_not_significant_meta.json +0 -0
  485. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/mc_perm_not_significant_r_results.json +0 -0
  486. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/mc_perm_significant_meta.json +0 -0
  487. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/mc_perm_significant_r_results.json +0 -0
  488. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/mixed/glmm_binomial.csv +0 -0
  489. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/mixed/glmm_poisson.csv +0 -0
  490. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/mixed/lmm_crossed.csv +0 -0
  491. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/mixed/lmm_intercept.csv +0 -0
  492. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/mixed/lmm_ml.csv +0 -0
  493. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/mixed/lmm_no_effect.csv +0 -0
  494. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/mixed/lmm_slope.csv +0 -0
  495. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/mixed/mixed_meta.json +0 -0
  496. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/mixed/mixed_r_results.json +0 -0
  497. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/nb_autotheta_cases.json +0 -0
  498. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/nb_autotheta_r_results.json +0 -0
  499. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/near_square.csv +0 -0
  500. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/near_square_meta.json +0 -0
  501. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/near_square_r_results.json +0 -0
  502. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/no_intercept.csv +0 -0
  503. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/no_intercept_meta.json +0 -0
  504. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/no_intercept_r_results.json +0 -0
  505. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/run_r_anova_validation.R +0 -0
  506. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/run_r_descriptive_validation.R +0 -0
  507. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/run_r_glm_validation.R +0 -0
  508. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/run_r_hypothesis_validation.R +0 -0
  509. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/run_r_mixed_validation.R +0 -0
  510. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/run_r_montecarlo_validation.R +0 -0
  511. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/run_r_nb_autotheta_validation.R +0 -0
  512. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/run_r_survival_validation.R +0 -0
  513. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/run_r_validation.R +0 -0
  514. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/run_r_weights_offset_validation.R +0 -0
  515. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/run_validation.sh +0 -0
  516. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/small_noise.csv +0 -0
  517. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/small_noise_meta.json +0 -0
  518. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/small_noise_r_results.json +0 -0
  519. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/surv_cox_breslow_meta.json +0 -0
  520. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/surv_cox_breslow_r_results.json +0 -0
  521. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/surv_cox_single_meta.json +0 -0
  522. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/surv_cox_single_r_results.json +0 -0
  523. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/surv_cox_ties_meta.json +0 -0
  524. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/surv_cox_ties_r_results.json +0 -0
  525. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/surv_cox_two_cov_meta.json +0 -0
  526. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/surv_cox_two_cov_r_results.json +0 -0
  527. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/surv_km_basic_meta.json +0 -0
  528. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/surv_km_basic_r_results.json +0 -0
  529. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/surv_km_heavy_cens_meta.json +0 -0
  530. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/surv_km_heavy_cens_r_results.json +0 -0
  531. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/surv_km_loglog_ci_meta.json +0 -0
  532. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/surv_km_loglog_ci_r_results.json +0 -0
  533. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/surv_km_no_cens_meta.json +0 -0
  534. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/surv_km_no_cens_r_results.json +0 -0
  535. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/surv_km_plain_ci_meta.json +0 -0
  536. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/surv_km_plain_ci_r_results.json +0 -0
  537. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/surv_km_ties_meta.json +0 -0
  538. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/surv_km_ties_r_results.json +0 -0
  539. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/surv_lr_peto_meta.json +0 -0
  540. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/surv_lr_peto_r_results.json +0 -0
  541. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/surv_lr_three_group_meta.json +0 -0
  542. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/surv_lr_three_group_r_results.json +0 -0
  543. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/surv_lr_two_group_meta.json +0 -0
  544. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/surv_lr_two_group_r_results.json +0 -0
  545. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/tall_skinny.csv +0 -0
  546. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/tall_skinny_meta.json +0 -0
  547. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/tall_skinny_r_results.json +0 -0
  548. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/validate_against_r.py +0 -0
  549. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/weights_offset_cases.json +0 -0
  550. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/fixtures/weights_offset_r_results.json +0 -0
  551. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/gam/__init__.py +0 -0
  552. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/hypothesis/__init__.py +0 -0
  553. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/hypothesis/conftest.py +0 -0
  554. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/hypothesis/test_backend_convention.py +0 -0
  555. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/hypothesis/test_chisq_test.py +0 -0
  556. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/hypothesis/test_design_split.py +0 -0
  557. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/hypothesis/test_fisher_test.py +0 -0
  558. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/hypothesis/test_gpu.py +0 -0
  559. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/hypothesis/test_ks_test.py +0 -0
  560. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/hypothesis/test_p_adjust.py +0 -0
  561. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/hypothesis/test_prop_test.py +0 -0
  562. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/hypothesis/test_r_validation.py +0 -0
  563. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/hypothesis/test_t_test.py +0 -0
  564. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/hypothesis/test_var_test.py +0 -0
  565. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/hypothesis/test_wilcox_test.py +0 -0
  566. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/mice/__init__.py +0 -0
  567. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/mice/references/generate_categorical_fixtures.R +0 -0
  568. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/mice/references/generate_mice_fixtures.R +0 -0
  569. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/mice/references/mice_categorical_data.csv +0 -0
  570. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/mice/references/mice_categorical_reference.json +0 -0
  571. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/mice/references/mice_reference.json +0 -0
  572. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/mice/references/mice_validation_complete.csv +0 -0
  573. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/mice/references/mice_validation_data.csv +0 -0
  574. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/mice/test_categorical.py +0 -0
  575. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/mice/test_datasets.py +0 -0
  576. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/mice/test_design.py +0 -0
  577. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/mice/test_gpu.py +0 -0
  578. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/mice/test_gpu_glm_separation.py +0 -0
  579. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/mice/test_gpu_mps.py +0 -0
  580. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/mice/test_gpu_polr_draw.py +0 -0
  581. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/mice/test_gpu_polr_separation.py +0 -0
  582. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/mice/test_methods.py +0 -0
  583. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/mice/test_mice.py +0 -0
  584. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/mice/test_polr_ridge_characterization.py +0 -0
  585. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/mice/test_pooling.py +0 -0
  586. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/mice/test_r_validation.py +0 -0
  587. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/mice/test_r_validation_categorical.py +0 -0
  588. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/mice/test_rng.py +0 -0
  589. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/mice/test_visit.py +0 -0
  590. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/mixed/__init__.py +0 -0
  591. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/mixed/conftest.py +0 -0
  592. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/mixed/test_compute_se.py +0 -0
  593. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/mixed/test_conf_int.py +0 -0
  594. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/mixed/test_glmm.py +0 -0
  595. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/mixed/test_grm.py +0 -0
  596. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/mixed/test_lmm_crossed.py +0 -0
  597. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/mixed/test_lmm_extreme_ratio.py +0 -0
  598. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/mixed/test_lmm_intercept.py +0 -0
  599. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/mixed/test_lmm_nested.py +0 -0
  600. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/mixed/test_lmm_slope.py +0 -0
  601. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/mixed/test_pls.py +0 -0
  602. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/mixed/test_r_validation.py +0 -0
  603. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/mixed/test_random_effects.py +0 -0
  604. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/mixed/test_satterthwaite.py +0 -0
  605. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/mixed/test_singular.py +0 -0
  606. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/mixed/test_structured.py +0 -0
  607. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/montecarlo/__init__.py +0 -0
  608. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/montecarlo/conftest.py +0 -0
  609. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/montecarlo/test_backend_convention.py +0 -0
  610. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/montecarlo/test_batched_solver.py +0 -0
  611. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/montecarlo/test_boot_ci.py +0 -0
  612. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/montecarlo/test_bootstrap.py +0 -0
  613. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/montecarlo/test_gpu.py +0 -0
  614. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/montecarlo/test_influence.py +0 -0
  615. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/montecarlo/test_permutation.py +0 -0
  616. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/montecarlo/test_r_validation.py +0 -0
  617. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/multinomial/__init__.py +0 -0
  618. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/multinomial/test_conf_int.py +0 -0
  619. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/multinomial/test_multinom.py +0 -0
  620. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/multivariate/__init__.py +0 -0
  621. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/multivariate/test_multivariate.py +0 -0
  622. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/mvnmle/references/apple_em_reference.json +0 -0
  623. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/mvnmle/references/apple_reference.json +0 -0
  624. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/mvnmle/references/generate_em_fixtures.R +0 -0
  625. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/mvnmle/references/little_mcar_apple.json +0 -0
  626. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/mvnmle/references/little_mcar_complete.json +0 -0
  627. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/mvnmle/references/little_mcar_extreme.json +0 -0
  628. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/mvnmle/references/little_mcar_missvals.json +0 -0
  629. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/mvnmle/references/little_mcar_simple_mcar.json +0 -0
  630. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/mvnmle/references/little_mcar_summary.json +0 -0
  631. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/mvnmle/references/missvals_em_reference.json +0 -0
  632. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/mvnmle/references/missvals_reference.json +0 -0
  633. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/mvnmle/references/small_test_reference.json +0 -0
  634. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/mvnmle/test_backend_routing.py +0 -0
  635. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/mvnmle/test_degeneracy.py +0 -0
  636. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/mvnmle/test_em.py +0 -0
  637. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/mvnmle/test_gpu.py +0 -0
  638. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/mvnmle/test_gpu_batched_equiv.py +0 -0
  639. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/mvnmle/test_gpu_unpack_equiv.py +0 -0
  640. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/mvnmle/test_mcar.py +0 -0
  641. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/mvnmle/test_mlest.py +0 -0
  642. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/mvnmle/test_monotone.py +0 -0
  643. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/mvnmle/test_no_silent_fallback.py +0 -0
  644. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/mvnmle/test_optimize.py +0 -0
  645. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/mvnmle/test_pattern_codes_large_p.py +0 -0
  646. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/mvnmle/test_squarem.py +0 -0
  647. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/ordinal/__init__.py +0 -0
  648. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/ordinal/test_conf_int.py +0 -0
  649. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/ordinal/test_information.py +0 -0
  650. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/ordinal/test_ordinal.py +0 -0
  651. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/regression/benchmark.py +0 -0
  652. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/regression/benchmark.r +0 -0
  653. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/regression/conftest.py +0 -0
  654. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/regression/test_conf_int.py +0 -0
  655. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/regression/test_fit.py +0 -0
  656. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/regression/test_gamma_nb.py +0 -0
  657. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/regression/test_glm.py +0 -0
  658. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/regression/test_glm_gpu.py +0 -0
  659. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/regression/test_glm_r_validation.py +0 -0
  660. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/regression/test_gpu_fp32_acceptance.py +0 -0
  661. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/regression/test_gpu_mps_cg.py +0 -0
  662. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/regression/test_gpu_se_ill_conditioned.py +0 -0
  663. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/regression/test_ic_dispersion_r_match.py +0 -0
  664. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/regression/test_irls_step.py +0 -0
  665. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/regression/test_module_split.py +0 -0
  666. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/regression/test_nb_autotheta_r_validation.py +0 -0
  667. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/regression/test_r_validation.py +0 -0
  668. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/regression/test_ridge.py +0 -0
  669. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/regression/test_stress_gpu.py +0 -0
  670. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/regression/test_terms.py +0 -0
  671. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/regression/test_terms_gpu.py +0 -0
  672. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/regression/test_weights_offset.py +0 -0
  673. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/regression/test_weights_offset_gpu.py +0 -0
  674. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/regression/test_weights_offset_r_validation.py +0 -0
  675. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/survival/__init__.py +0 -0
  676. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/survival/conftest.py +0 -0
  677. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/survival/test_conf_int.py +0 -0
  678. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/survival/test_coxph.py +0 -0
  679. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/survival/test_discrete_conf_int.py +0 -0
  680. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/survival/test_discrete_time.py +0 -0
  681. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/survival/test_gpu.py +0 -0
  682. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/survival/test_kaplan_meier.py +0 -0
  683. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/survival/test_logrank.py +0 -0
  684. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/survival/test_r_validation.py +0 -0
  685. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/survival/test_uniform_accessors_and_errors.py +0 -0
  686. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/survival/test_warnings.py +0 -0
  687. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/test_code_quality.py +0 -0
  688. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/timeseries/__init__.py +0 -0
  689. {pystatistics-4.6.0 → pystatistics-4.6.2}/tests/timeseries/test_arima.py +0 -0
  690. {pystatistics-4.6.0 → pystatistics-4.6.2}/validation/README.md +0 -0
  691. {pystatistics-4.6.0 → pystatistics-4.6.2}/validation/pyproject.toml +0 -0
  692. {pystatistics-4.6.0 → pystatistics-4.6.2}/validation/pystatsval/__init__.py +0 -0
  693. {pystatistics-4.6.0 → pystatistics-4.6.2}/validation/pystatsval/device.py +0 -0
  694. {pystatistics-4.6.0 → pystatistics-4.6.2}/validation/pystatsval/estimates.py +0 -0
  695. {pystatistics-4.6.0 → pystatistics-4.6.2}/validation/pystatsval/measure.py +0 -0
  696. {pystatistics-4.6.0 → pystatistics-4.6.2}/validation/pystatsval/record.py +0 -0
  697. {pystatistics-4.6.0 → pystatistics-4.6.2}/validation/pystatsval/rrunner.py +0 -0
  698. {pystatistics-4.6.0 → pystatistics-4.6.2}/validation/pystatsval/serialize.py +0 -0
  699. {pystatistics-4.6.0 → pystatistics-4.6.2}/validation/pystatsval/timing.py +0 -0
  700. {pystatistics-4.6.0 → pystatistics-4.6.2}/validation/tests/test_harness.py +0 -0
@@ -0,0 +1,12 @@
1
+ # Unreleased Changes
2
+
3
+ > This file tracks all changes since the last stable release.
4
+ > Updated by whoever makes a change, on whatever machine.
5
+ > Synced via git so all sessions (Mac, Linux, etc.) see the same state.
6
+ >
7
+ > When ready to release, run: `python .release/release.py --status`
8
+ > and follow the manual release flow in the script docstring.
9
+
10
+ ## Changes
11
+
12
+ *(empty — no unreleased changes yet)*
@@ -1,5 +1,108 @@
1
1
  # Changelog
2
2
 
3
+ ## 4.6.2
4
+
5
+ STL decomposition rewritten to match R exactly and now as fast as R's
6
+ compiled implementation; ETS gains automatic model selection and R-matched
7
+ parameter estimation; `ndiffs` default aligned with R.
8
+
9
+ - **`stl()` returned a materially wrong decomposition on trending series —
10
+ fixed by a full rewrite.** On strongly trending data (e.g. the monthly CO2
11
+ benchmark) the previous implementation leaked much of the trend into the
12
+ seasonal component: the extracted "seasonal" had a range of ~83 where the
13
+ true seasonal amplitude is ~6, and the reported trend could *decrease* while
14
+ the data rose — the components always summed back to the data, so the error
15
+ was invisible without an external reference. `stl()` is now an exact
16
+ implementation of the STL procedure (Cleveland, Cleveland, McRae &
17
+ Terpenning, 1990) and reproduces R's `stats::stl` component-for-component:
18
+ across a reference suite (CO2, AirPassengers, monthly sunspots, lynx, Nile;
19
+ periodic, robust, custom-window, and partial-period variants) the largest
20
+ seasonal/trend/remainder difference vs R is below 1e-10.
21
+ - **`stl()` now exposes the full STL parameter set and uses R's defaults.**
22
+ New parameters: `seasonal_degree` (default 0, as in R — previously the
23
+ seasonal smoother was effectively degree 1), `trend_degree`,
24
+ `lowpass_window`, `lowpass_degree`, and the evaluation strides
25
+ `seasonal_jump` / `trend_jump` / `lowpass_jump` (R's `ceiling(window/10)`
26
+ defaults; set to 1 to evaluate the loess at every point instead of
27
+ interpolating). Behaviour changes: `seasonal_window` defaults to
28
+ `"periodic"` (R has no default and `"periodic"` is the standard published
29
+ choice); `robust=True` now runs R's iteration counts (1 inner, 15 outer
30
+ passes); the series must be longer than `2 * period` (R's rule); and window
31
+ spans must be odd integers >= 3 — even spans raise a `ValidationError`
32
+ where R silently rounds them up. The result's `info` now reports the
33
+ resolved windows/degrees/jumps and the final robustness weights.
34
+ - **`stl()` now matches R's speed.** The smoother is compiled with `numba`,
35
+ so it is as fast as R's Fortran `stats::stl` — non-robust decompositions
36
+ run faster than R and robust decompositions match it (previously it was
37
+ 3-15x slower). Results are unchanged (still within 1e-10 of R). The
38
+ compiled kernel builds on first use in a session (a few seconds, once) and
39
+ is cached on disk for subsequent runs, the same one-time cost the ARIMA
40
+ routines already carry.
41
+ - **`ets()` now performs automatic model selection, matching
42
+ `forecast::ets`.** The model string accepts a `"Z"` wildcard per component
43
+ and defaults to `model="ZZZ"` (select everything), as in R. Candidates
44
+ consistent with the fixed letters are enumerated under R's rules (additive
45
+ error with multiplicative season excluded; multiplicative components
46
+ require strictly positive data; seasonal candidates need `2 <= period <=
47
+ 24` and enough data), each is fitted, and the model minimising the new `ic`
48
+ parameter (`"aicc"` default, `"aic"`, `"bic"`) is returned. The full
49
+ candidate table, the criterion values, and any skipped candidates with
50
+ reasons are disclosed in `solution.info["selection"]`. Explicit requests
51
+ that cannot be honoured (e.g. `model="MZZ"` on data with zeros or
52
+ negatives, a seasonal letter with `period=1`) raise instead of being
53
+ silently adjusted. A fully specified model string (no `"Z"`) is always
54
+ fitted exactly as written. Note two consequences of the new default:
55
+ automatic AICc selection needs at least 5 observations (shorter series
56
+ raise with a suggested remedy — pick a concrete model or `ic="aic"`), and
57
+ `period` must now be a true integer (float periods raise a clear error
58
+ instead of crashing).
59
+ - **ETS parameter estimation aligned with `forecast::ets` (changes fitted
60
+ results).** The optimiser now searches R's parameter region exactly — the
61
+ smoothing parameters obey `beta <= alpha` and `gamma <= 1 - alpha`, the
62
+ damping `phi` is bounded to `[0.8, 0.98]`, and a seasonal model estimates
63
+ one fewer initial state (the last is fixed by the seasonal normalisation,
64
+ as in R). As a result the reported parameter count `k` for seasonal models
65
+ now matches R's, so AIC/AICc/BIC values line up with `forecast::ets`, and
66
+ fitted parameters/log-likelihoods for a given model can differ slightly
67
+ from earlier versions. Smoothing parameters fixed outside R's region now
68
+ raise a clear error instead of being quietly clamped. On automatic
69
+ selection the chosen model still occasionally differs from `forecast::ets`
70
+ on near-tied candidate tables, but now only because the two optimisers land
71
+ on different optima — in every such case the model this package selects
72
+ scores at least as well under R's own criterion; the disclosed candidate
73
+ table makes any selection auditable.
74
+ - **`ets()` no longer emits a spurious `RuntimeWarning` about overflow.** A
75
+ benign internal overflow warning could surface during fitting on some
76
+ series; the computation was always correct, and the warning is now gone.
77
+ Fitted results are unchanged.
78
+ - **`ndiffs()` now defaults to the KPSS test, matching `forecast::ndiffs`.**
79
+ KPSS and ADF have opposite null hypotheses and can recommend a different
80
+ number of differences on borderline series; pass `test="adf"` for the
81
+ previous behaviour. Both tests are numerically unchanged.
82
+ - **ETS log-likelihood reporting convention documented (no numeric
83
+ change).** `ets()` reports the full Gaussian log-likelihood; R's
84
+ `forecast::ets` prints Hyndman's concentrated form. The two differ by the
85
+ exact constant `0.5*n*[log(n/(2*pi)) - 1]` (e.g. 88.36 at n=100) with the
86
+ same parameter count, so AIC/AICc/BIC differences, model rankings, and
87
+ automatic selection are identical — only the printed numbers differ. The
88
+ convention is now stated on the result's `log_likelihood`/`aic`/`aicc`/
89
+ `bic` accessors.
90
+
91
+ ## 4.6.1
92
+
93
+ Performance: faster automatic smoothing-parameter selection for Gaussian
94
+ additive models with more than one smooth term.
95
+
96
+ - `gam()` with the default Gaussian family now selects its smoothing parameters
97
+ using an exact analytic gradient of the GCV/REML criterion instead of a
98
+ finite-difference approximation. The old search cost grew with the number of
99
+ smooth terms; the new one does not. On a 2000-point cubic-regression-spline
100
+ benchmark the fit is roughly 2× faster with four smooths and 3× faster with
101
+ six. The selected model is unchanged — same smoothing parameters, effective
102
+ degrees of freedom, coefficients and fitted values as before. Single-smooth
103
+ fits and generalized (Poisson, binomial, Gamma) additive models are
104
+ unaffected.
105
+
3
106
  ## 4.6.0
4
107
 
5
108
  Generalized additive models (`gam()`) received a full numerical rewrite. The
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pystatistics
3
- Version: 4.6.0
3
+ Version: 4.6.2
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/
@@ -418,6 +418,35 @@ pip install pystatistics[dev]
418
418
 
419
419
  ## What's New
420
420
 
421
+ ### 4.6.2 — STL matches R exactly and runs as fast; ETS automatic model selection
422
+
423
+ `stl()` was rewritten after validation showed it leaking trend into the
424
+ seasonal component on trending series (on the monthly CO2 benchmark the old
425
+ "seasonal" had a range of ~83 where the truth is ~6). It is now an exact
426
+ implementation of the STL procedure and reproduces R's `stats::stl`
427
+ component-for-component (differences below 1e-10 across a reference suite
428
+ including robust fits), with the full STL parameter set exposed
429
+ (`seasonal_degree`, `trend_degree`, `lowpass_window`, jumps, and a
430
+ `"periodic"` default seasonal window). The smoother is compiled, so it now
431
+ runs as fast as R's Fortran implementation — faster for non-robust
432
+ decompositions, on par for robust ones. `ets()` now auto-selects its model
433
+ like `forecast::ets`: the new default `model="ZZZ"` tries every admissible
434
+ error/trend/season combination and returns the best by AICc, with the full
435
+ candidate table disclosed on the result; explicit component requests that
436
+ cannot be honoured raise instead of being silently adjusted. ETS parameter
437
+ estimation now matches R's parameter region as well, so fitted parameters
438
+ and information criteria (AIC/AICc/BIC) line up with `forecast::ets`.
439
+ `ndiffs()` now defaults to the KPSS test, matching `forecast::ndiffs`.
440
+
441
+ ### 4.6.1 — faster multi-smooth Gaussian GAMs
442
+
443
+ `gam()` with the default Gaussian family now selects its smoothing parameters
444
+ with an exact analytic gradient of the GCV/REML criterion instead of finite
445
+ differences, so fits with several smooth terms no longer slow down as terms are
446
+ added — about 2× faster with four smooths and 3× with six on a typical fit.
447
+ Estimates are unchanged, and single-smooth and generalized (Poisson, binomial,
448
+ Gamma) additive models are unaffected.
449
+
421
450
  ### 4.6.0 — generalized additive models rewritten to match `mgcv`
422
451
 
423
452
  `gam()` received a full numerical rewrite. Automatic smoothing-parameter
@@ -371,6 +371,35 @@ pip install pystatistics[dev]
371
371
 
372
372
  ## What's New
373
373
 
374
+ ### 4.6.2 — STL matches R exactly and runs as fast; ETS automatic model selection
375
+
376
+ `stl()` was rewritten after validation showed it leaking trend into the
377
+ seasonal component on trending series (on the monthly CO2 benchmark the old
378
+ "seasonal" had a range of ~83 where the truth is ~6). It is now an exact
379
+ implementation of the STL procedure and reproduces R's `stats::stl`
380
+ component-for-component (differences below 1e-10 across a reference suite
381
+ including robust fits), with the full STL parameter set exposed
382
+ (`seasonal_degree`, `trend_degree`, `lowpass_window`, jumps, and a
383
+ `"periodic"` default seasonal window). The smoother is compiled, so it now
384
+ runs as fast as R's Fortran implementation — faster for non-robust
385
+ decompositions, on par for robust ones. `ets()` now auto-selects its model
386
+ like `forecast::ets`: the new default `model="ZZZ"` tries every admissible
387
+ error/trend/season combination and returns the best by AICc, with the full
388
+ candidate table disclosed on the result; explicit component requests that
389
+ cannot be honoured raise instead of being silently adjusted. ETS parameter
390
+ estimation now matches R's parameter region as well, so fitted parameters
391
+ and information criteria (AIC/AICc/BIC) line up with `forecast::ets`.
392
+ `ndiffs()` now defaults to the KPSS test, matching `forecast::ndiffs`.
393
+
394
+ ### 4.6.1 — faster multi-smooth Gaussian GAMs
395
+
396
+ `gam()` with the default Gaussian family now selects its smoothing parameters
397
+ with an exact analytic gradient of the GCV/REML criterion instead of finite
398
+ differences, so fits with several smooth terms no longer slow down as terms are
399
+ added — about 2× faster with four smooths and 3× with six on a typical fit.
400
+ Estimates are unchanged, and single-smooth and generalized (Poisson, binomial,
401
+ Gamma) additive models are unaffected.
402
+
374
403
  ### 4.6.0 — generalized additive models rewritten to match `mgcv`
375
404
 
376
405
  `gam()` received a full numerical rewrite. Automatic smoothing-parameter
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "pystatistics"
7
- version = "4.6.0"
7
+ version = "4.6.2"
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__ = "4.6.0"
19
+ __version__ = "4.6.2"
20
20
  __author__ = "Hai-Shuo"
21
21
  __email__ = "contact@sgcx.org"
22
22
 
@@ -33,6 +33,7 @@ from scipy.optimize import minimize
33
33
 
34
34
  from pystatistics.core.exceptions import ValidationError
35
35
  from pystatistics.gam._edf import influence_matrix, logdet_penalized, total_edf
36
+ from pystatistics.gam._gradient import gcv_gradient, reml_gradient_gauss
36
37
  from pystatistics.gam._pirls import (
37
38
  PenaltyRoot,
38
39
  PirlsFit,
@@ -235,6 +236,33 @@ def select_lambdas(
235
236
  return ubre_score(fit.deviance, n, edf, scale=1.0)
236
237
  return gcv_score(fit.deviance, n, edf)
237
238
 
239
+ # Analytic-gradient path (Gaussian-identity only): the constant IRLS
240
+ # weights make the criterion an exact closed form of log(lambda), so the
241
+ # outer L-BFGS-B is driven by the analytic gradient (one inner fit per
242
+ # step) instead of scipy's finite differences (2m+1 fits per step). GLM
243
+ # families keep the finite-difference `objective` above (their weights
244
+ # depend on beta -> an implicit d beta/d rho term not implemented here).
245
+ use_analytic = _is_gauss_identity(family)
246
+
247
+ def value_and_grad(
248
+ log_lam: NDArray[np.floating[Any]],
249
+ ) -> tuple[float, NDArray[np.floating[Any]]]:
250
+ lam = np.exp(np.asarray(log_lam, dtype=np.float64))
251
+ fit = fit_fixed_lambda(
252
+ y, X, roots, lam, family, tol_inner, max_iter,
253
+ smooth_names=smooth_names, gaussian_cache=gauss_cache,
254
+ )
255
+ edf = total_edf(influence_matrix(fit.R, fit.R_x, fit.piv, fit.rank))
256
+ if method_u == "REML":
257
+ return (
258
+ reml_score(fit, y, family, roots, lam),
259
+ reml_gradient_gauss(fit, roots, lam, n),
260
+ )
261
+ return (
262
+ gcv_score(fit.deviance, n, edf),
263
+ gcv_gradient(fit, roots, lam, n, edf),
264
+ )
265
+
238
266
  # REML support check up front (fail before burning optimizer time).
239
267
  if method_u == "REML" and not (
240
268
  family.dispersion_is_fixed or _is_gauss_identity(family)
@@ -257,28 +285,44 @@ def select_lambdas(
257
285
  # the same data in different units (panel-verified). Normalize by the
258
286
  # objective at the starting point so the same fit is selected at every
259
287
  # response scale.
260
- f0 = objective(log_lam0)
288
+ f0 = value_and_grad(log_lam0)[0] if use_analytic else objective(log_lam0)
261
289
  ref = max(abs(f0), 1e-300)
262
290
 
263
- def objective_scaled(log_lam: NDArray[np.floating[Any]]) -> float:
264
- return objective(log_lam) / ref
265
-
266
- # eps: the FD step must sit WELL above the inner P-IRLS convergence
267
- # noise floor or the quasi-Newton curvature estimate is built from
268
- # noise and the line search collapses short of the optimum (observed
269
- # on the flat Gamma-log GCV surface: effective evaluation noise
270
- # ~1e-9 relative even at tol_inner=1e-12, so eps=1e-6 gave gradient
271
- # noise the SAME size as the true gradient). eps=1e-4 keeps gradient
272
- # noise ~1e-5 while the induced position error (~eps/2 in log-lambda)
273
- # is a ~0.005% sp perturbation — far inside the optimizer tolerance
274
- # tier of the validation contract.
275
- result = minimize(
276
- objective_scaled,
277
- log_lam0,
278
- method="L-BFGS-B",
279
- bounds=bounds,
280
- options={"maxiter": 200, "ftol": 1e-12, "gtol": 1e-9, "eps": 1e-4},
281
- )
291
+ if use_analytic:
292
+ def fun_scaled(
293
+ log_lam: NDArray[np.floating[Any]],
294
+ ) -> tuple[float, NDArray[np.floating[Any]]]:
295
+ val, grad = value_and_grad(log_lam)
296
+ return val / ref, grad / ref
297
+
298
+ result = minimize(
299
+ fun_scaled,
300
+ log_lam0,
301
+ method="L-BFGS-B",
302
+ jac=True,
303
+ bounds=bounds,
304
+ options={"maxiter": 200, "ftol": 1e-12, "gtol": 1e-9},
305
+ )
306
+ else:
307
+ def objective_scaled(log_lam: NDArray[np.floating[Any]]) -> float:
308
+ return objective(log_lam) / ref
309
+
310
+ # eps: the FD step must sit WELL above the inner P-IRLS convergence
311
+ # noise floor or the quasi-Newton curvature estimate is built from
312
+ # noise and the line search collapses short of the optimum (observed
313
+ # on the flat Gamma-log GCV surface: effective evaluation noise
314
+ # ~1e-9 relative even at tol_inner=1e-12, so eps=1e-6 gave gradient
315
+ # noise the SAME size as the true gradient). eps=1e-4 keeps gradient
316
+ # noise ~1e-5 while the induced position error (~eps/2 in log-lambda)
317
+ # is a ~0.005% sp perturbation — far inside the optimizer tolerance
318
+ # tier of the validation contract.
319
+ result = minimize(
320
+ objective_scaled,
321
+ log_lam0,
322
+ method="L-BFGS-B",
323
+ bounds=bounds,
324
+ options={"maxiter": 200, "ftol": 1e-12, "gtol": 1e-9, "eps": 1e-4},
325
+ )
282
326
 
283
327
  # A coordinate sitting ON a search bound is fine when the criterion has
284
328
  # asymptoted there (|gradient| small): lambda -> inf is the CORRECT
@@ -0,0 +1,139 @@
1
+ """Analytic gradient of the GAM smoothing-parameter criterion (Gaussian).
2
+
3
+ For the Gaussian-identity model the outer smoothing-parameter search can be
4
+ driven by the EXACT gradient of the GCV / Laplace-REML score with respect to
5
+ ``rho = log(lambda)`` instead of finite differences, cutting the per-outer-step
6
+ cost from ``2m+1`` inner fits to a single fit for ``m`` smooths (mgcv's
7
+ ``gam.fit3``/``newton`` does the same; this is the A.3 pattern of the mixed
8
+ module — Wood 2011 — specialised to constant IRLS weights).
9
+
10
+ Because the weights are constant (``W = I``), the criterion depends on ``rho``
11
+ only through the closed-form penalized solve, with no implicit
12
+ ``d beta / d rho`` weight term. Writing ``A = X'X + S_lambda`` (``A = R'R`` for
13
+ the augmented triangle ``R``), ``H = A^{-1} X'X`` the influence matrix and
14
+ ``beta`` the penalized coefficients:
15
+
16
+ d edf / d rho_j = -lambda_j * tr(A^{-1} S_j H)
17
+ d D / d rho_j = 2 * lambda_j * (A^{-1} S_lambda beta)' (S_j beta)
18
+ d(D + penalty)/d rho_j = lambda_j * beta' S_j beta (envelope theorem)
19
+
20
+ from which GCV = n D / (n - edf)^2 and the profiled Laplace-REML score follow
21
+ by the chain rule (see each function). Every term is an O(p^3) operation on the
22
+ p-by-p factors the fit already produced — ``A^{-1}`` is the posterior
23
+ covariance evaluated at unit scale. Pure numpy.
24
+
25
+ Scope: Gaussian-identity ONLY. For GLM families the IRLS weights depend on
26
+ ``beta``, so the score gains an implicit ``d beta / d rho`` term (the full Wood
27
+ 2011 form) that this module deliberately does not implement; those families
28
+ keep the finite-difference path in ``_criteria.select_lambdas``.
29
+ """
30
+
31
+ from __future__ import annotations
32
+
33
+ from typing import Any
34
+
35
+ import numpy as np
36
+ from numpy.typing import NDArray
37
+
38
+ from pystatistics.gam._edf import influence_matrix, posterior_covariance
39
+ from pystatistics.gam._pirls import PenaltyRoot, PirlsFit
40
+
41
+
42
+ def _penalty_terms(
43
+ roots: list[PenaltyRoot],
44
+ lambdas: NDArray[np.floating[Any]],
45
+ p: int,
46
+ ) -> tuple[list[tuple[float, NDArray[np.floating[Any]], int]],
47
+ NDArray[np.floating[Any]]]:
48
+ """Per-smooth ``(lambda_j, S_j, rank_j)`` and the assembled ``S_lambda``.
49
+
50
+ ``S_j`` is the full ``(p, p)`` penalty (zero outside the smooth's block),
51
+ reconstructed from the cached eigen square root (``rows' rows = S_j``);
52
+ ``S_lambda = sum_j lambda_j S_j`` matches the fit's ``B_lam' B_lam``.
53
+ """
54
+ terms: list[tuple[float, NDArray[np.floating[Any]], int]] = []
55
+ s_lam = np.zeros((p, p), dtype=np.float64)
56
+ for root, lam in zip(roots, lambdas):
57
+ s, e = root.block
58
+ sj = np.zeros((p, p), dtype=np.float64)
59
+ sj[s:e, s:e] = root.rows.T @ root.rows
60
+ s_lam += float(lam) * sj
61
+ terms.append((float(lam), sj, root.rank))
62
+ return terms, s_lam
63
+
64
+
65
+ def gcv_gradient(
66
+ fit: PirlsFit,
67
+ roots: list[PenaltyRoot],
68
+ lambdas: NDArray[np.floating[Any]],
69
+ n: int,
70
+ edf: float,
71
+ ) -> NDArray[np.floating[Any]]:
72
+ """``d GCV / d rho`` for the Gaussian-identity model, ``rho = log lambda``.
73
+
74
+ ``GCV = n D / (n - edf)^2`` so, with ``tau = n - edf``,
75
+
76
+ d GCV / d rho_j = n * D'_j / tau^2 + 2 n D * edf'_j / tau^3
77
+
78
+ using ``D'_j = 2 lambda_j (A^{-1} S_lambda beta)'(S_j beta)`` and
79
+ ``edf'_j = -lambda_j tr(A^{-1} S_j H)``.
80
+ """
81
+ p = fit.R.shape[0]
82
+ a_inv = posterior_covariance(fit.R, fit.piv, fit.rank, 1.0) # A^{-1}
83
+ h = influence_matrix(fit.R, fit.R_x, fit.piv, fit.rank)
84
+ terms, s_lam = _penalty_terms(roots, lambdas, p)
85
+ beta = fit.beta
86
+ d = fit.deviance
87
+ tau = n - edf
88
+ # p_vec = A^{-1} S_lambda beta (so D'_j = 2 lambda_j p_vec' S_j beta)
89
+ p_vec = a_inv @ (s_lam @ beta)
90
+
91
+ grad = np.empty(len(terms), dtype=np.float64)
92
+ for j, (lam, sj, _rank_j) in enumerate(terms):
93
+ sj_beta = sj @ beta
94
+ d_dev = 2.0 * lam * float(p_vec @ sj_beta)
95
+ # edf'_j = -lambda_j tr(A^{-1} S_j H)
96
+ d_edf = -lam * float(np.einsum("ab,ba->", a_inv @ sj, h))
97
+ grad[j] = n * d_dev / tau**2 + 2.0 * n * d * d_edf / tau**3
98
+ return grad
99
+
100
+
101
+ def reml_gradient_gauss(
102
+ fit: PirlsFit,
103
+ roots: list[PenaltyRoot],
104
+ lambdas: NDArray[np.floating[Any]],
105
+ n: int,
106
+ ) -> NDArray[np.floating[Any]]:
107
+ """``d V / d rho`` for the Gaussian-identity Laplace-REML score.
108
+
109
+ The score reduces (constants dropped) to
110
+
111
+ V = (n - M_p)/2 * log(D + penalty) + (log|A| - log|S_lambda|_+)/2
112
+
113
+ so, with ``phi = (D + penalty)/(n - M_p)``, ``d(D+penalty)/d rho_j``
114
+ collapsing to ``lambda_j beta' S_j beta`` (envelope),
115
+ ``d log|A|/d rho_j = lambda_j tr(A^{-1} S_j)`` and
116
+ ``d log|S_lambda|_+/d rho_j = rank_j``:
117
+
118
+ d V / d rho_j = lambda_j beta'S_j beta / (2 phi)
119
+ + lambda_j tr(A^{-1} S_j) / 2 - rank_j / 2
120
+ """
121
+ p = fit.R.shape[0]
122
+ a_inv = posterior_covariance(fit.R, fit.piv, fit.rank, 1.0) # A^{-1}
123
+ terms, _s_lam = _penalty_terms(roots, lambdas, p)
124
+ beta = fit.beta
125
+ rank_s = sum(r.rank for r in roots)
126
+ m_p = max(fit.rank - rank_s, 0)
127
+ d_p = fit.deviance + fit.penalty
128
+ phi = d_p / (n - m_p)
129
+
130
+ grad = np.empty(len(terms), dtype=np.float64)
131
+ for j, (lam, sj, rank_j) in enumerate(terms):
132
+ b_sj_b = float(beta @ (sj @ beta))
133
+ tr_ainv_sj = float(np.einsum("ab,ba->", a_inv, sj))
134
+ grad[j] = (
135
+ lam * b_sj_b / (2.0 * phi)
136
+ + 0.5 * lam * tr_ainv_sj
137
+ - 0.5 * rank_j
138
+ )
139
+ return grad
@@ -13,13 +13,22 @@ Public API:
13
13
  ndiffs(x) - Estimate differences for stationarity (matches R forecast::ndiffs)
14
14
  adf_test(x) - Augmented Dickey-Fuller unit root test (matches R tseries::adf.test)
15
15
  kpss_test(x) - KPSS stationarity test (matches R tseries::kpss.test)
16
- ets(y) - Fit an ETS state space model (matches R forecast::ets)
16
+ ets(y) - Fit an ETS state space model (matches R forecast::ets,
17
+ including "Z"-wildcard automatic selection; default
18
+ model="ZZZ". Reported log-likelihood/AIC use the full-
19
+ Gaussian convention — R's concentrated numbers differ by
20
+ a constant in n; model rankings/selection are identical.
21
+ See timeseries._ets_fit and ._ets_select docstrings.)
17
22
  forecast_ets(f) - Forecast from a fitted ETS model
18
23
  arima(y) - Fit an ARIMA model (matches R stats::arima)
19
24
  forecast_arima(f, y) - Forecast from a fitted ARIMA model
20
25
  auto_arima(y) - Automatic ARIMA order selection (matches R forecast::auto.arima)
21
26
  decompose(x) - Classical time series decomposition (matches R stats::decompose)
22
- stl(x) - STL decomposition (matches R stats::stl)
27
+ stl(x) - STL decomposition (matches R stats::stl; identical parameters
28
+ reproduce R's components to floating-point noise. Interface
29
+ divergences, both deliberate: seasonal_window defaults to
30
+ "periodic" where R requires it explicitly, and even/short
31
+ loess spans raise instead of being silently rounded up.)
23
32
  """
24
33
 
25
34
  from pystatistics.timeseries._acf import acf, pacf
@@ -28,7 +37,8 @@ from pystatistics.timeseries._stationarity import adf_test, kpss_test
28
37
  from pystatistics.timeseries._common import (
29
38
  ACFParams, ACFSolution, StationarityParams, StationaritySolution,
30
39
  )
31
- from pystatistics.timeseries._ets_fit import ets, ETSParams, ETSSolution
40
+ from pystatistics.timeseries._ets_fit import ETSParams, ETSSolution
41
+ from pystatistics.timeseries._ets_select import ets
32
42
  from pystatistics.timeseries._ets_forecast import forecast_ets, ETSForecast
33
43
  from pystatistics.timeseries._ets_models import ETSSpec
34
44
  from pystatistics.timeseries._arima_solution import ARIMAParams, ARIMASolution
@@ -41,8 +51,9 @@ from pystatistics.timeseries._arima_order import (
41
51
  auto_arima, AutoARIMAParams, AutoARIMASolution,
42
52
  )
43
53
  from pystatistics.timeseries._decomposition import (
44
- decompose, stl, DecompositionParams, DecompositionSolution,
54
+ decompose, DecompositionParams, DecompositionSolution,
45
55
  )
56
+ from pystatistics.timeseries._stl import stl
46
57
 
47
58
  __all__ = [
48
59
  "acf",