pystatistics 4.6.1__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 (699) hide show
  1. {pystatistics-4.6.1 → pystatistics-4.6.2}/CHANGELOG.md +88 -0
  2. {pystatistics-4.6.1 → pystatistics-4.6.2}/PKG-INFO +21 -1
  3. {pystatistics-4.6.1 → pystatistics-4.6.2}/README.md +20 -0
  4. {pystatistics-4.6.1 → pystatistics-4.6.2}/pyproject.toml +1 -1
  5. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/__init__.py +1 -1
  6. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/timeseries/__init__.py +15 -4
  7. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/timeseries/_decomposition.py +4 -278
  8. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/timeseries/_differencing.py +8 -5
  9. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/timeseries/_ets_fit.py +268 -330
  10. pystatistics-4.6.2/pystatistics/timeseries/_ets_result.py +275 -0
  11. pystatistics-4.6.2/pystatistics/timeseries/_ets_select.py +406 -0
  12. pystatistics-4.6.2/pystatistics/timeseries/_loess.py +323 -0
  13. pystatistics-4.6.2/pystatistics/timeseries/_stl.py +354 -0
  14. pystatistics-4.6.2/pystatistics/timeseries/_stl_core.py +158 -0
  15. pystatistics-4.6.2/pystatistics/timeseries/_stl_robust.py +226 -0
  16. pystatistics-4.6.2/tests/fixtures/ets_r_reference.json +1 -0
  17. pystatistics-4.6.2/tests/fixtures/generate_ets_r_reference.R +72 -0
  18. pystatistics-4.6.2/tests/fixtures/generate_stl_r_reference.R +66 -0
  19. pystatistics-4.6.2/tests/fixtures/stl_r_reference.json +1 -0
  20. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/timeseries/test_acf_stationarity.py +24 -0
  21. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/timeseries/test_decomposition.py +61 -5
  22. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/timeseries/test_ets.py +341 -10
  23. pystatistics-4.6.2/tests/timeseries/test_loess.py +167 -0
  24. pystatistics-4.6.2/tests/timeseries/test_stl_r_parity.py +151 -0
  25. pystatistics-4.6.2/tests/timeseries/test_stl_robust.py +113 -0
  26. {pystatistics-4.6.1 → pystatistics-4.6.2}/.github/workflows/publish.yml +0 -0
  27. {pystatistics-4.6.1 → pystatistics-4.6.2}/.github/workflows/trigger-docs-rebuild.yml +0 -0
  28. {pystatistics-4.6.1 → pystatistics-4.6.2}/.gitignore +0 -0
  29. {pystatistics-4.6.1 → pystatistics-4.6.2}/.release/CHECKLIST.md +0 -0
  30. {pystatistics-4.6.1 → pystatistics-4.6.2}/.release/UNRELEASED.md +0 -0
  31. {pystatistics-4.6.1 → pystatistics-4.6.2}/.release/release.py +0 -0
  32. {pystatistics-4.6.1 → pystatistics-4.6.2}/LICENSE +0 -0
  33. {pystatistics-4.6.1 → pystatistics-4.6.2}/benchmarks/mvnmle_bench.py +0 -0
  34. {pystatistics-4.6.1 → pystatistics-4.6.2}/benchmarks/mvnmle_gpu_per_eval.py +0 -0
  35. {pystatistics-4.6.1 → pystatistics-4.6.2}/docs/DESIGN.md +0 -0
  36. {pystatistics-4.6.1 → pystatistics-4.6.2}/docs/GPU_NOTES.md +0 -0
  37. {pystatistics-4.6.1 → pystatistics-4.6.2}/docs/Makefile +0 -0
  38. {pystatistics-4.6.1 → pystatistics-4.6.2}/docs/ROADMAP.md +0 -0
  39. {pystatistics-4.6.1 → pystatistics-4.6.2}/docs/_static/custom.css +0 -0
  40. {pystatistics-4.6.1 → pystatistics-4.6.2}/docs/anova.rst +0 -0
  41. {pystatistics-4.6.1 → pystatistics-4.6.2}/docs/conf.py +0 -0
  42. {pystatistics-4.6.1 → pystatistics-4.6.2}/docs/core.rst +0 -0
  43. {pystatistics-4.6.1 → pystatistics-4.6.2}/docs/descriptive.rst +0 -0
  44. {pystatistics-4.6.1 → pystatistics-4.6.2}/docs/gam.rst +0 -0
  45. {pystatistics-4.6.1 → pystatistics-4.6.2}/docs/hypothesis.rst +0 -0
  46. {pystatistics-4.6.1 → pystatistics-4.6.2}/docs/index.rst +0 -0
  47. {pystatistics-4.6.1 → pystatistics-4.6.2}/docs/mixed.rst +0 -0
  48. {pystatistics-4.6.1 → pystatistics-4.6.2}/docs/montecarlo.rst +0 -0
  49. {pystatistics-4.6.1 → pystatistics-4.6.2}/docs/multinomial.rst +0 -0
  50. {pystatistics-4.6.1 → pystatistics-4.6.2}/docs/multivariate.rst +0 -0
  51. {pystatistics-4.6.1 → pystatistics-4.6.2}/docs/mvnmle.rst +0 -0
  52. {pystatistics-4.6.1 → pystatistics-4.6.2}/docs/ordinal.rst +0 -0
  53. {pystatistics-4.6.1 → pystatistics-4.6.2}/docs/regression.rst +0 -0
  54. {pystatistics-4.6.1 → pystatistics-4.6.2}/docs/survival.rst +0 -0
  55. {pystatistics-4.6.1 → pystatistics-4.6.2}/docs/timeseries.rst +0 -0
  56. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/CONVENTIONS.md +0 -0
  57. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/anova/__init__.py +0 -0
  58. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/anova/_common.py +0 -0
  59. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/anova/_contrasts.py +0 -0
  60. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/anova/_levene.py +0 -0
  61. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/anova/_posthoc.py +0 -0
  62. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/anova/_repeated.py +0 -0
  63. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/anova/_ss.py +0 -0
  64. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/anova/design.py +0 -0
  65. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/anova/solution.py +0 -0
  66. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/anova/solvers.py +0 -0
  67. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/core/__init__.py +0 -0
  68. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/core/capabilities.py +0 -0
  69. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/core/compute/__init__.py +0 -0
  70. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/core/compute/backend.py +0 -0
  71. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/core/compute/device.py +0 -0
  72. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/core/compute/linalg/__init__.py +0 -0
  73. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/core/compute/linalg/batched.py +0 -0
  74. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/core/compute/linalg/cholesky.py +0 -0
  75. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/core/compute/linalg/determinant.py +0 -0
  76. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/core/compute/linalg/qr.py +0 -0
  77. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/core/compute/linalg/solve.py +0 -0
  78. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/core/compute/linalg/svd.py +0 -0
  79. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/core/compute/linalg/triangular.py +0 -0
  80. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/core/compute/optimization/__init__.py +0 -0
  81. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/core/compute/optimization/convergence.py +0 -0
  82. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/core/compute/precision.py +0 -0
  83. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/core/compute/timing.py +0 -0
  84. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/core/compute/tolerances.py +0 -0
  85. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/core/compute/torch_interop.py +0 -0
  86. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/core/datasource.py +0 -0
  87. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/core/encoding.py +0 -0
  88. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/core/exceptions.py +0 -0
  89. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/core/protocols.py +0 -0
  90. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/core/result.py +0 -0
  91. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/core/validation.py +0 -0
  92. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/descriptive/__init__.py +0 -0
  93. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/descriptive/_missing.py +0 -0
  94. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/descriptive/_quantile_types.py +0 -0
  95. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/descriptive/backends/__init__.py +0 -0
  96. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/descriptive/backends/cpu.py +0 -0
  97. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/descriptive/backends/gpu.py +0 -0
  98. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/descriptive/design.py +0 -0
  99. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/descriptive/solution.py +0 -0
  100. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/descriptive/solvers.py +0 -0
  101. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/gam/__init__.py +0 -0
  102. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/gam/_basis.py +0 -0
  103. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/gam/_basis_common.py +0 -0
  104. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/gam/_basis_cr.py +0 -0
  105. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/gam/_basis_tp.py +0 -0
  106. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/gam/_common.py +0 -0
  107. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/gam/_constraints.py +0 -0
  108. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/gam/_criteria.py +0 -0
  109. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/gam/_edf.py +0 -0
  110. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/gam/_gam.py +0 -0
  111. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/gam/_gradient.py +0 -0
  112. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/gam/_pirls.py +0 -0
  113. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/gam/_smooth.py +0 -0
  114. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/gam/_smooth_test.py +0 -0
  115. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/gam/solution.py +0 -0
  116. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/hypothesis/__init__.py +0 -0
  117. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/hypothesis/_common.py +0 -0
  118. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/hypothesis/_design_factories.py +0 -0
  119. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/hypothesis/_p_adjust.py +0 -0
  120. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/hypothesis/backends/__init__.py +0 -0
  121. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/hypothesis/backends/_chisq_test.py +0 -0
  122. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/hypothesis/backends/_fisher_test.py +0 -0
  123. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/hypothesis/backends/_ks_test.py +0 -0
  124. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/hypothesis/backends/_prop_test.py +0 -0
  125. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/hypothesis/backends/_t_test.py +0 -0
  126. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/hypothesis/backends/_var_test.py +0 -0
  127. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/hypothesis/backends/_wilcox_test.py +0 -0
  128. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/hypothesis/backends/cpu.py +0 -0
  129. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/hypothesis/backends/gpu.py +0 -0
  130. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/hypothesis/design.py +0 -0
  131. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/hypothesis/solution.py +0 -0
  132. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/hypothesis/solvers.py +0 -0
  133. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/mice/__init__.py +0 -0
  134. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/mice/_chain.py +0 -0
  135. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/mice/_encode.py +0 -0
  136. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/mice/_rng.py +0 -0
  137. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/mice/_visit.py +0 -0
  138. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/mice/backends/__init__.py +0 -0
  139. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/mice/backends/_gpu_encode.py +0 -0
  140. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/mice/backends/_gpu_linreg.py +0 -0
  141. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/mice/backends/_gpu_logreg.py +0 -0
  142. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/mice/backends/_gpu_methods.py +0 -0
  143. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/mice/backends/_gpu_polr.py +0 -0
  144. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/mice/backends/_gpu_polyreg.py +0 -0
  145. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/mice/backends/_gpu_spd.py +0 -0
  146. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/mice/backends/cpu.py +0 -0
  147. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/mice/backends/gpu.py +0 -0
  148. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/mice/datasets.py +0 -0
  149. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/mice/design.py +0 -0
  150. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/mice/methods/__init__.py +0 -0
  151. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/mice/methods/_draw.py +0 -0
  152. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/mice/methods/_linreg.py +0 -0
  153. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/mice/methods/base.py +0 -0
  154. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/mice/methods/logreg.py +0 -0
  155. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/mice/methods/norm.py +0 -0
  156. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/mice/methods/pmm.py +0 -0
  157. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/mice/methods/polr.py +0 -0
  158. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/mice/methods/polyreg.py +0 -0
  159. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/mice/methods/registry.py +0 -0
  160. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/mice/pooling.py +0 -0
  161. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/mice/solution.py +0 -0
  162. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/mice/solvers.py +0 -0
  163. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/mixed/__init__.py +0 -0
  164. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/mixed/_common.py +0 -0
  165. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/mixed/_deviance.py +0 -0
  166. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/mixed/_glmm_optimizer.py +0 -0
  167. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/mixed/_glmm_pirls.py +0 -0
  168. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/mixed/_grm_cpu.py +0 -0
  169. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/mixed/_optimizer.py +0 -0
  170. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/mixed/_pls.py +0 -0
  171. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/mixed/_pls_structured.py +0 -0
  172. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/mixed/_random_effects.py +0 -0
  173. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/mixed/_satterthwaite.py +0 -0
  174. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/mixed/_struct_batched.py +0 -0
  175. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/mixed/_struct_sparse.py +0 -0
  176. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/mixed/backends/__init__.py +0 -0
  177. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/mixed/backends/grm_gpu.py +0 -0
  178. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/mixed/design.py +0 -0
  179. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/mixed/grm.py +0 -0
  180. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/mixed/grm_solution.py +0 -0
  181. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/mixed/solution.py +0 -0
  182. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/mixed/solvers.py +0 -0
  183. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/montecarlo/__init__.py +0 -0
  184. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/montecarlo/_ci.py +0 -0
  185. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/montecarlo/_common.py +0 -0
  186. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/montecarlo/_influence.py +0 -0
  187. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/montecarlo/backends/__init__.py +0 -0
  188. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/montecarlo/backends/cpu.py +0 -0
  189. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/montecarlo/backends/gpu.py +0 -0
  190. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/montecarlo/design.py +0 -0
  191. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/montecarlo/solution.py +0 -0
  192. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/montecarlo/solvers.py +0 -0
  193. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/multinomial/__init__.py +0 -0
  194. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/multinomial/_common.py +0 -0
  195. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/multinomial/_likelihood.py +0 -0
  196. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/multinomial/_solver.py +0 -0
  197. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/multinomial/backends/__init__.py +0 -0
  198. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/multinomial/backends/gpu_likelihood.py +0 -0
  199. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/multinomial/solution.py +0 -0
  200. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/multivariate/__init__.py +0 -0
  201. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/multivariate/_common.py +0 -0
  202. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/multivariate/_factor.py +0 -0
  203. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/multivariate/_pca.py +0 -0
  204. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/multivariate/_rotation.py +0 -0
  205. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/multivariate/backends/__init__.py +0 -0
  206. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/multivariate/backends/gpu_pca.py +0 -0
  207. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/multivariate/backends/gpu_pca_randomized.py +0 -0
  208. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/mvnmle/__init__.py +0 -0
  209. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/mvnmle/_degeneracy.py +0 -0
  210. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/mvnmle/_monotone.py +0 -0
  211. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/mvnmle/_objectives/__init__.py +0 -0
  212. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/mvnmle/_objectives/_batched_cholesky.py +0 -0
  213. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/mvnmle/_objectives/base.py +0 -0
  214. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/mvnmle/_objectives/cpu.py +0 -0
  215. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/mvnmle/_objectives/gpu_fp32.py +0 -0
  216. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/mvnmle/_objectives/gpu_fp64.py +0 -0
  217. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/mvnmle/_objectives/parameterizations.py +0 -0
  218. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/mvnmle/_utils.py +0 -0
  219. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/mvnmle/backends/__init__.py +0 -0
  220. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/mvnmle/backends/_direct.py +0 -0
  221. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/mvnmle/backends/_em_batched.py +0 -0
  222. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/mvnmle/backends/_em_batched_np.py +0 -0
  223. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/mvnmle/backends/_em_batched_patterns.py +0 -0
  224. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/mvnmle/backends/_em_batched_torch.py +0 -0
  225. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/mvnmle/backends/_optimize.py +0 -0
  226. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/mvnmle/backends/_squarem.py +0 -0
  227. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/mvnmle/backends/cpu.py +0 -0
  228. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/mvnmle/backends/em.py +0 -0
  229. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/mvnmle/backends/gpu.py +0 -0
  230. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/mvnmle/datasets.py +0 -0
  231. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/mvnmle/design.py +0 -0
  232. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/mvnmle/mcar_test.py +0 -0
  233. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/mvnmle/patterns.py +0 -0
  234. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/mvnmle/solution.py +0 -0
  235. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/mvnmle/solvers.py +0 -0
  236. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/ordinal/__init__.py +0 -0
  237. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/ordinal/_common.py +0 -0
  238. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/ordinal/_information.py +0 -0
  239. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/ordinal/_likelihood.py +0 -0
  240. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/ordinal/_solver.py +0 -0
  241. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/ordinal/backends/__init__.py +0 -0
  242. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/ordinal/backends/gpu_likelihood.py +0 -0
  243. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/ordinal/solution.py +0 -0
  244. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/py.typed +0 -0
  245. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/regression/__init__.py +0 -0
  246. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/regression/_formatting.py +0 -0
  247. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/regression/_glm.py +0 -0
  248. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/regression/_inputs.py +0 -0
  249. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/regression/_linear.py +0 -0
  250. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/regression/_nb_theta.py +0 -0
  251. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/regression/_penalty.py +0 -0
  252. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/regression/backends/__init__.py +0 -0
  253. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/regression/backends/_irls_step.py +0 -0
  254. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/regression/backends/cpu.py +0 -0
  255. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/regression/backends/cpu_glm.py +0 -0
  256. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/regression/backends/gpu.py +0 -0
  257. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/regression/backends/gpu_glm.py +0 -0
  258. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/regression/design.py +0 -0
  259. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/regression/families.py +0 -0
  260. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/regression/solution.py +0 -0
  261. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/regression/solvers.py +0 -0
  262. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/regression/terms.py +0 -0
  263. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/survival/__init__.py +0 -0
  264. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/survival/_common.py +0 -0
  265. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/survival/_cox.py +0 -0
  266. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/survival/_discrete.py +0 -0
  267. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/survival/_km.py +0 -0
  268. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/survival/_logrank.py +0 -0
  269. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/survival/backends/__init__.py +0 -0
  270. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/survival/backends/cpu.py +0 -0
  271. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/survival/backends/gpu.py +0 -0
  272. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/survival/design.py +0 -0
  273. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/survival/solution.py +0 -0
  274. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/survival/solvers.py +0 -0
  275. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/timeseries/_acf.py +0 -0
  276. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/timeseries/_arima_batch.py +0 -0
  277. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/timeseries/_arima_factored.py +0 -0
  278. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/timeseries/_arima_fit.py +0 -0
  279. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/timeseries/_arima_forecast.py +0 -0
  280. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/timeseries/_arima_kalman.py +0 -0
  281. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/timeseries/_arima_likelihood.py +0 -0
  282. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/timeseries/_arima_order.py +0 -0
  283. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/timeseries/_arima_solution.py +0 -0
  284. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/timeseries/_common.py +0 -0
  285. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/timeseries/_ets_forecast.py +0 -0
  286. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/timeseries/_ets_models.py +0 -0
  287. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/timeseries/_stationarity.py +0 -0
  288. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/timeseries/_whittle.py +0 -0
  289. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/timeseries/backends/__init__.py +0 -0
  290. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/timeseries/backends/whittle_batch_gpu.py +0 -0
  291. {pystatistics-4.6.1 → pystatistics-4.6.2}/pystatistics/timeseries/backends/whittle_gpu.py +0 -0
  292. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/anova/__init__.py +0 -0
  293. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/anova/conftest.py +0 -0
  294. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/anova/test_contrasts.py +0 -0
  295. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/anova/test_design.py +0 -0
  296. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/anova/test_factorial.py +0 -0
  297. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/anova/test_levene.py +0 -0
  298. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/anova/test_oneway.py +0 -0
  299. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/anova/test_posthoc.py +0 -0
  300. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/anova/test_r_validation.py +0 -0
  301. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/anova/test_repeated_measures.py +0 -0
  302. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/benchmark_gpu.py +0 -0
  303. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/conftest.py +0 -0
  304. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/core/test_backend.py +0 -0
  305. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/core/test_datasource.py +0 -0
  306. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/core/test_exceptions.py +0 -0
  307. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/core/test_qr_solve.py +0 -0
  308. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/core/test_repr_html.py +0 -0
  309. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/core/test_result.py +0 -0
  310. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/core/test_torch_interop.py +0 -0
  311. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/core/test_validation.py +0 -0
  312. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/descriptive/__init__.py +0 -0
  313. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/descriptive/conftest.py +0 -0
  314. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/descriptive/test_backend_convention.py +0 -0
  315. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/descriptive/test_cor.py +0 -0
  316. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/descriptive/test_cov.py +0 -0
  317. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/descriptive/test_describe.py +0 -0
  318. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/descriptive/test_gpu.py +0 -0
  319. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/descriptive/test_missing.py +0 -0
  320. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/descriptive/test_moments.py +0 -0
  321. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/descriptive/test_quantile.py +0 -0
  322. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/descriptive/test_r_validation.py +0 -0
  323. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/anova_ancova_meta.json +0 -0
  324. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/anova_ancova_r_results.json +0 -0
  325. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/anova_bonferroni_meta.json +0 -0
  326. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/anova_bonferroni_r_results.json +0 -0
  327. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/anova_eta_meta.json +0 -0
  328. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/anova_eta_r_results.json +0 -0
  329. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/anova_levene_meta.json +0 -0
  330. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/anova_levene_r_results.json +0 -0
  331. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/anova_oneway_balanced_meta.json +0 -0
  332. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/anova_oneway_balanced_r_results.json +0 -0
  333. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/anova_oneway_unbalanced_meta.json +0 -0
  334. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/anova_oneway_unbalanced_r_results.json +0 -0
  335. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/anova_rm_mixed_meta.json +0 -0
  336. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/anova_rm_mixed_r_results.json +0 -0
  337. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/anova_rm_within_meta.json +0 -0
  338. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/anova_rm_within_r_results.json +0 -0
  339. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/anova_tukey_meta.json +0 -0
  340. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/anova_tukey_r_results.json +0 -0
  341. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/anova_twoway_balanced_meta.json +0 -0
  342. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/anova_twoway_balanced_r_results.json +0 -0
  343. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/anova_twoway_unbalanced_meta.json +0 -0
  344. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/anova_twoway_unbalanced_r_results.json +0 -0
  345. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/basic_100x3.csv +0 -0
  346. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/basic_100x3_meta.json +0 -0
  347. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/basic_100x3_r_results.json +0 -0
  348. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/collinear_almost.csv +0 -0
  349. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/collinear_almost_meta.json +0 -0
  350. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/collinear_almost_r_results.json +0 -0
  351. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/desc_basic_100x5.csv +0 -0
  352. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/desc_basic_100x5_meta.json +0 -0
  353. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/desc_basic_100x5_r_results.json +0 -0
  354. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/desc_constant_column.csv +0 -0
  355. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/desc_constant_column_meta.json +0 -0
  356. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/desc_constant_column_r_results.json +0 -0
  357. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/desc_extreme_values.csv +0 -0
  358. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/desc_extreme_values_meta.json +0 -0
  359. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/desc_extreme_values_r_results.json +0 -0
  360. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/desc_large_1000x10.csv +0 -0
  361. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/desc_large_1000x10_meta.json +0 -0
  362. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/desc_large_1000x10_r_results.json +0 -0
  363. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/desc_nan_columnwise.csv +0 -0
  364. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/desc_nan_columnwise_meta.json +0 -0
  365. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/desc_nan_columnwise_r_results.json +0 -0
  366. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/desc_nan_scattered.csv +0 -0
  367. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/desc_nan_scattered_meta.json +0 -0
  368. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/desc_nan_scattered_r_results.json +0 -0
  369. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/desc_negative_correlation.csv +0 -0
  370. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/desc_negative_correlation_meta.json +0 -0
  371. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/desc_negative_correlation_r_results.json +0 -0
  372. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/desc_perfect_correlation.csv +0 -0
  373. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/desc_perfect_correlation_meta.json +0 -0
  374. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/desc_perfect_correlation_r_results.json +0 -0
  375. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/desc_single_column.csv +0 -0
  376. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/desc_single_column_meta.json +0 -0
  377. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/desc_single_column_r_results.json +0 -0
  378. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/desc_ties.csv +0 -0
  379. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/desc_ties_meta.json +0 -0
  380. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/desc_ties_r_results.json +0 -0
  381. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/different_scales.csv +0 -0
  382. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/different_scales_meta.json +0 -0
  383. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/different_scales_r_results.json +0 -0
  384. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/generate_anova_fixtures.py +0 -0
  385. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/generate_descriptive_fixtures.py +0 -0
  386. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/generate_fixtures.py +0 -0
  387. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/generate_glm_fixtures.py +0 -0
  388. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/generate_hypothesis_fixtures.py +0 -0
  389. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/generate_mixed_fixtures.py +0 -0
  390. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/generate_montecarlo_fixtures.py +0 -0
  391. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/generate_nb_autotheta_fixtures.py +0 -0
  392. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/generate_survival_fixtures.py +0 -0
  393. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/generate_weights_offset_fixtures.py +0 -0
  394. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/glm_binomial_balanced.csv +0 -0
  395. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/glm_binomial_balanced_meta.json +0 -0
  396. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/glm_binomial_balanced_r_results.json +0 -0
  397. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/glm_binomial_basic.csv +0 -0
  398. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/glm_binomial_basic_meta.json +0 -0
  399. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/glm_binomial_basic_r_results.json +0 -0
  400. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/glm_binomial_large.csv +0 -0
  401. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/glm_binomial_large_meta.json +0 -0
  402. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/glm_binomial_large_r_results.json +0 -0
  403. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/glm_binomial_separated.csv +0 -0
  404. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/glm_binomial_separated_meta.json +0 -0
  405. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/glm_binomial_separated_r_results.json +0 -0
  406. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/glm_gaussian_basic.csv +0 -0
  407. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/glm_gaussian_basic_meta.json +0 -0
  408. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/glm_gaussian_basic_r_results.json +0 -0
  409. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/glm_gaussian_large.csv +0 -0
  410. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/glm_gaussian_large_meta.json +0 -0
  411. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/glm_gaussian_large_r_results.json +0 -0
  412. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/glm_poisson_basic.csv +0 -0
  413. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/glm_poisson_basic_meta.json +0 -0
  414. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/glm_poisson_basic_r_results.json +0 -0
  415. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/glm_poisson_large_counts.csv +0 -0
  416. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/glm_poisson_large_counts_meta.json +0 -0
  417. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/glm_poisson_large_counts_r_results.json +0 -0
  418. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/glm_poisson_zeros.csv +0 -0
  419. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/glm_poisson_zeros_meta.json +0 -0
  420. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/glm_poisson_zeros_r_results.json +0 -0
  421. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/high_noise.csv +0 -0
  422. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/high_noise_meta.json +0 -0
  423. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/high_noise_r_results.json +0 -0
  424. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/htest_chisq_2x2_yates_meta.json +0 -0
  425. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/htest_chisq_2x2_yates_r_results.json +0 -0
  426. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/htest_chisq_3x3_meta.json +0 -0
  427. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/htest_chisq_3x3_r_results.json +0 -0
  428. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/htest_chisq_gof_meta.json +0 -0
  429. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/htest_chisq_gof_r_results.json +0 -0
  430. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/htest_chisq_gof_unequal_meta.json +0 -0
  431. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/htest_chisq_gof_unequal_r_results.json +0 -0
  432. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/htest_fisher_2x2_less_meta.json +0 -0
  433. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/htest_fisher_2x2_less_r_results.json +0 -0
  434. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/htest_fisher_2x2_meta.json +0 -0
  435. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/htest_fisher_2x2_r_results.json +0 -0
  436. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/htest_fisher_3x3_meta.json +0 -0
  437. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/htest_fisher_3x3_r_results.json +0 -0
  438. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/htest_ks_onesample_norm_meta.json +0 -0
  439. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/htest_ks_onesample_norm_r_results.json +0 -0
  440. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/htest_ks_twosample_meta.json +0 -0
  441. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/htest_ks_twosample_r_results.json +0 -0
  442. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/htest_prop_onesample_meta.json +0 -0
  443. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/htest_prop_onesample_r_results.json +0 -0
  444. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/htest_prop_twosample_meta.json +0 -0
  445. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/htest_prop_twosample_r_results.json +0 -0
  446. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/htest_t_onesample_meta.json +0 -0
  447. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/htest_t_onesample_r_results.json +0 -0
  448. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/htest_t_paired_meta.json +0 -0
  449. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/htest_t_paired_r_results.json +0 -0
  450. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/htest_t_pooled_meta.json +0 -0
  451. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/htest_t_pooled_r_results.json +0 -0
  452. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/htest_t_welch_meta.json +0 -0
  453. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/htest_t_welch_r_results.json +0 -0
  454. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/htest_var_basic_meta.json +0 -0
  455. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/htest_var_basic_r_results.json +0 -0
  456. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/htest_wilcox_ranksum_meta.json +0 -0
  457. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/htest_wilcox_ranksum_r_results.json +0 -0
  458. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/htest_wilcox_signed_meta.json +0 -0
  459. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/htest_wilcox_signed_r_results.json +0 -0
  460. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/ill_conditioned.csv +0 -0
  461. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/ill_conditioned_meta.json +0 -0
  462. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/ill_conditioned_r_results.json +0 -0
  463. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/large_coeffs.csv +0 -0
  464. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/large_coeffs_meta.json +0 -0
  465. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/large_coeffs_r_results.json +0 -0
  466. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/mc_boot_ci_90_meta.json +0 -0
  467. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/mc_boot_ci_90_r_results.json +0 -0
  468. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/mc_boot_ci_normal_meta.json +0 -0
  469. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/mc_boot_ci_normal_r_results.json +0 -0
  470. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/mc_boot_ci_skewed_meta.json +0 -0
  471. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/mc_boot_ci_skewed_r_results.json +0 -0
  472. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/mc_boot_mean_balanced_meta.json +0 -0
  473. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/mc_boot_mean_balanced_r_results.json +0 -0
  474. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/mc_boot_mean_ordinary_meta.json +0 -0
  475. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/mc_boot_mean_ordinary_r_results.json +0 -0
  476. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/mc_boot_median_meta.json +0 -0
  477. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/mc_boot_median_r_results.json +0 -0
  478. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/mc_boot_variance_meta.json +0 -0
  479. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/mc_boot_variance_r_results.json +0 -0
  480. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/mc_perm_greater_meta.json +0 -0
  481. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/mc_perm_greater_r_results.json +0 -0
  482. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/mc_perm_not_significant_meta.json +0 -0
  483. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/mc_perm_not_significant_r_results.json +0 -0
  484. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/mc_perm_significant_meta.json +0 -0
  485. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/mc_perm_significant_r_results.json +0 -0
  486. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/mixed/glmm_binomial.csv +0 -0
  487. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/mixed/glmm_poisson.csv +0 -0
  488. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/mixed/lmm_crossed.csv +0 -0
  489. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/mixed/lmm_intercept.csv +0 -0
  490. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/mixed/lmm_ml.csv +0 -0
  491. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/mixed/lmm_no_effect.csv +0 -0
  492. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/mixed/lmm_slope.csv +0 -0
  493. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/mixed/mixed_meta.json +0 -0
  494. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/mixed/mixed_r_results.json +0 -0
  495. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/nb_autotheta_cases.json +0 -0
  496. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/nb_autotheta_r_results.json +0 -0
  497. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/near_square.csv +0 -0
  498. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/near_square_meta.json +0 -0
  499. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/near_square_r_results.json +0 -0
  500. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/no_intercept.csv +0 -0
  501. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/no_intercept_meta.json +0 -0
  502. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/no_intercept_r_results.json +0 -0
  503. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/run_r_anova_validation.R +0 -0
  504. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/run_r_descriptive_validation.R +0 -0
  505. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/run_r_glm_validation.R +0 -0
  506. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/run_r_hypothesis_validation.R +0 -0
  507. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/run_r_mixed_validation.R +0 -0
  508. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/run_r_montecarlo_validation.R +0 -0
  509. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/run_r_nb_autotheta_validation.R +0 -0
  510. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/run_r_survival_validation.R +0 -0
  511. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/run_r_validation.R +0 -0
  512. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/run_r_weights_offset_validation.R +0 -0
  513. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/run_validation.sh +0 -0
  514. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/small_noise.csv +0 -0
  515. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/small_noise_meta.json +0 -0
  516. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/small_noise_r_results.json +0 -0
  517. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/surv_cox_breslow_meta.json +0 -0
  518. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/surv_cox_breslow_r_results.json +0 -0
  519. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/surv_cox_single_meta.json +0 -0
  520. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/surv_cox_single_r_results.json +0 -0
  521. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/surv_cox_ties_meta.json +0 -0
  522. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/surv_cox_ties_r_results.json +0 -0
  523. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/surv_cox_two_cov_meta.json +0 -0
  524. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/surv_cox_two_cov_r_results.json +0 -0
  525. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/surv_km_basic_meta.json +0 -0
  526. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/surv_km_basic_r_results.json +0 -0
  527. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/surv_km_heavy_cens_meta.json +0 -0
  528. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/surv_km_heavy_cens_r_results.json +0 -0
  529. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/surv_km_loglog_ci_meta.json +0 -0
  530. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/surv_km_loglog_ci_r_results.json +0 -0
  531. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/surv_km_no_cens_meta.json +0 -0
  532. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/surv_km_no_cens_r_results.json +0 -0
  533. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/surv_km_plain_ci_meta.json +0 -0
  534. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/surv_km_plain_ci_r_results.json +0 -0
  535. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/surv_km_ties_meta.json +0 -0
  536. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/surv_km_ties_r_results.json +0 -0
  537. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/surv_lr_peto_meta.json +0 -0
  538. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/surv_lr_peto_r_results.json +0 -0
  539. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/surv_lr_three_group_meta.json +0 -0
  540. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/surv_lr_three_group_r_results.json +0 -0
  541. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/surv_lr_two_group_meta.json +0 -0
  542. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/surv_lr_two_group_r_results.json +0 -0
  543. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/tall_skinny.csv +0 -0
  544. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/tall_skinny_meta.json +0 -0
  545. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/tall_skinny_r_results.json +0 -0
  546. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/validate_against_r.py +0 -0
  547. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/weights_offset_cases.json +0 -0
  548. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/fixtures/weights_offset_r_results.json +0 -0
  549. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/gam/__init__.py +0 -0
  550. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/gam/test_gam.py +0 -0
  551. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/hypothesis/__init__.py +0 -0
  552. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/hypothesis/conftest.py +0 -0
  553. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/hypothesis/test_backend_convention.py +0 -0
  554. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/hypothesis/test_chisq_test.py +0 -0
  555. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/hypothesis/test_design_split.py +0 -0
  556. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/hypothesis/test_fisher_test.py +0 -0
  557. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/hypothesis/test_gpu.py +0 -0
  558. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/hypothesis/test_ks_test.py +0 -0
  559. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/hypothesis/test_p_adjust.py +0 -0
  560. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/hypothesis/test_prop_test.py +0 -0
  561. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/hypothesis/test_r_validation.py +0 -0
  562. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/hypothesis/test_t_test.py +0 -0
  563. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/hypothesis/test_var_test.py +0 -0
  564. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/hypothesis/test_wilcox_test.py +0 -0
  565. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/mice/__init__.py +0 -0
  566. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/mice/references/generate_categorical_fixtures.R +0 -0
  567. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/mice/references/generate_mice_fixtures.R +0 -0
  568. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/mice/references/mice_categorical_data.csv +0 -0
  569. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/mice/references/mice_categorical_reference.json +0 -0
  570. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/mice/references/mice_reference.json +0 -0
  571. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/mice/references/mice_validation_complete.csv +0 -0
  572. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/mice/references/mice_validation_data.csv +0 -0
  573. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/mice/test_categorical.py +0 -0
  574. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/mice/test_datasets.py +0 -0
  575. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/mice/test_design.py +0 -0
  576. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/mice/test_gpu.py +0 -0
  577. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/mice/test_gpu_glm_separation.py +0 -0
  578. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/mice/test_gpu_mps.py +0 -0
  579. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/mice/test_gpu_polr_draw.py +0 -0
  580. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/mice/test_gpu_polr_separation.py +0 -0
  581. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/mice/test_methods.py +0 -0
  582. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/mice/test_mice.py +0 -0
  583. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/mice/test_polr_ridge_characterization.py +0 -0
  584. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/mice/test_pooling.py +0 -0
  585. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/mice/test_r_validation.py +0 -0
  586. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/mice/test_r_validation_categorical.py +0 -0
  587. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/mice/test_rng.py +0 -0
  588. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/mice/test_visit.py +0 -0
  589. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/mixed/__init__.py +0 -0
  590. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/mixed/conftest.py +0 -0
  591. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/mixed/test_compute_se.py +0 -0
  592. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/mixed/test_conf_int.py +0 -0
  593. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/mixed/test_glmm.py +0 -0
  594. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/mixed/test_grm.py +0 -0
  595. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/mixed/test_lmm_crossed.py +0 -0
  596. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/mixed/test_lmm_extreme_ratio.py +0 -0
  597. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/mixed/test_lmm_intercept.py +0 -0
  598. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/mixed/test_lmm_nested.py +0 -0
  599. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/mixed/test_lmm_slope.py +0 -0
  600. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/mixed/test_pls.py +0 -0
  601. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/mixed/test_r_validation.py +0 -0
  602. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/mixed/test_random_effects.py +0 -0
  603. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/mixed/test_satterthwaite.py +0 -0
  604. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/mixed/test_singular.py +0 -0
  605. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/mixed/test_structured.py +0 -0
  606. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/montecarlo/__init__.py +0 -0
  607. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/montecarlo/conftest.py +0 -0
  608. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/montecarlo/test_backend_convention.py +0 -0
  609. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/montecarlo/test_batched_solver.py +0 -0
  610. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/montecarlo/test_boot_ci.py +0 -0
  611. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/montecarlo/test_bootstrap.py +0 -0
  612. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/montecarlo/test_gpu.py +0 -0
  613. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/montecarlo/test_influence.py +0 -0
  614. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/montecarlo/test_permutation.py +0 -0
  615. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/montecarlo/test_r_validation.py +0 -0
  616. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/multinomial/__init__.py +0 -0
  617. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/multinomial/test_conf_int.py +0 -0
  618. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/multinomial/test_multinom.py +0 -0
  619. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/multivariate/__init__.py +0 -0
  620. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/multivariate/test_multivariate.py +0 -0
  621. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/mvnmle/references/apple_em_reference.json +0 -0
  622. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/mvnmle/references/apple_reference.json +0 -0
  623. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/mvnmle/references/generate_em_fixtures.R +0 -0
  624. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/mvnmle/references/little_mcar_apple.json +0 -0
  625. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/mvnmle/references/little_mcar_complete.json +0 -0
  626. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/mvnmle/references/little_mcar_extreme.json +0 -0
  627. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/mvnmle/references/little_mcar_missvals.json +0 -0
  628. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/mvnmle/references/little_mcar_simple_mcar.json +0 -0
  629. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/mvnmle/references/little_mcar_summary.json +0 -0
  630. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/mvnmle/references/missvals_em_reference.json +0 -0
  631. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/mvnmle/references/missvals_reference.json +0 -0
  632. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/mvnmle/references/small_test_reference.json +0 -0
  633. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/mvnmle/test_backend_routing.py +0 -0
  634. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/mvnmle/test_degeneracy.py +0 -0
  635. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/mvnmle/test_em.py +0 -0
  636. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/mvnmle/test_gpu.py +0 -0
  637. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/mvnmle/test_gpu_batched_equiv.py +0 -0
  638. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/mvnmle/test_gpu_unpack_equiv.py +0 -0
  639. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/mvnmle/test_mcar.py +0 -0
  640. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/mvnmle/test_mlest.py +0 -0
  641. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/mvnmle/test_monotone.py +0 -0
  642. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/mvnmle/test_no_silent_fallback.py +0 -0
  643. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/mvnmle/test_optimize.py +0 -0
  644. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/mvnmle/test_pattern_codes_large_p.py +0 -0
  645. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/mvnmle/test_squarem.py +0 -0
  646. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/ordinal/__init__.py +0 -0
  647. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/ordinal/test_conf_int.py +0 -0
  648. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/ordinal/test_information.py +0 -0
  649. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/ordinal/test_ordinal.py +0 -0
  650. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/regression/benchmark.py +0 -0
  651. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/regression/benchmark.r +0 -0
  652. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/regression/conftest.py +0 -0
  653. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/regression/test_conf_int.py +0 -0
  654. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/regression/test_fit.py +0 -0
  655. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/regression/test_gamma_nb.py +0 -0
  656. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/regression/test_glm.py +0 -0
  657. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/regression/test_glm_gpu.py +0 -0
  658. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/regression/test_glm_r_validation.py +0 -0
  659. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/regression/test_gpu_fp32_acceptance.py +0 -0
  660. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/regression/test_gpu_mps_cg.py +0 -0
  661. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/regression/test_gpu_se_ill_conditioned.py +0 -0
  662. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/regression/test_ic_dispersion_r_match.py +0 -0
  663. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/regression/test_irls_step.py +0 -0
  664. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/regression/test_module_split.py +0 -0
  665. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/regression/test_nb_autotheta_r_validation.py +0 -0
  666. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/regression/test_r_validation.py +0 -0
  667. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/regression/test_ridge.py +0 -0
  668. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/regression/test_stress_gpu.py +0 -0
  669. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/regression/test_terms.py +0 -0
  670. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/regression/test_terms_gpu.py +0 -0
  671. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/regression/test_weights_offset.py +0 -0
  672. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/regression/test_weights_offset_gpu.py +0 -0
  673. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/regression/test_weights_offset_r_validation.py +0 -0
  674. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/survival/__init__.py +0 -0
  675. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/survival/conftest.py +0 -0
  676. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/survival/test_conf_int.py +0 -0
  677. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/survival/test_coxph.py +0 -0
  678. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/survival/test_discrete_conf_int.py +0 -0
  679. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/survival/test_discrete_time.py +0 -0
  680. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/survival/test_gpu.py +0 -0
  681. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/survival/test_kaplan_meier.py +0 -0
  682. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/survival/test_logrank.py +0 -0
  683. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/survival/test_r_validation.py +0 -0
  684. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/survival/test_uniform_accessors_and_errors.py +0 -0
  685. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/survival/test_warnings.py +0 -0
  686. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/test_code_quality.py +0 -0
  687. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/timeseries/__init__.py +0 -0
  688. {pystatistics-4.6.1 → pystatistics-4.6.2}/tests/timeseries/test_arima.py +0 -0
  689. {pystatistics-4.6.1 → pystatistics-4.6.2}/validation/README.md +0 -0
  690. {pystatistics-4.6.1 → pystatistics-4.6.2}/validation/pyproject.toml +0 -0
  691. {pystatistics-4.6.1 → pystatistics-4.6.2}/validation/pystatsval/__init__.py +0 -0
  692. {pystatistics-4.6.1 → pystatistics-4.6.2}/validation/pystatsval/device.py +0 -0
  693. {pystatistics-4.6.1 → pystatistics-4.6.2}/validation/pystatsval/estimates.py +0 -0
  694. {pystatistics-4.6.1 → pystatistics-4.6.2}/validation/pystatsval/measure.py +0 -0
  695. {pystatistics-4.6.1 → pystatistics-4.6.2}/validation/pystatsval/record.py +0 -0
  696. {pystatistics-4.6.1 → pystatistics-4.6.2}/validation/pystatsval/rrunner.py +0 -0
  697. {pystatistics-4.6.1 → pystatistics-4.6.2}/validation/pystatsval/serialize.py +0 -0
  698. {pystatistics-4.6.1 → pystatistics-4.6.2}/validation/pystatsval/timing.py +0 -0
  699. {pystatistics-4.6.1 → pystatistics-4.6.2}/validation/tests/test_harness.py +0 -0
@@ -1,5 +1,93 @@
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
+
3
91
  ## 4.6.1
4
92
 
5
93
  Performance: faster automatic smoothing-parameter selection for Gaussian
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pystatistics
3
- Version: 4.6.1
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,26 @@ 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
+
421
441
  ### 4.6.1 — faster multi-smooth Gaussian GAMs
422
442
 
423
443
  `gam()` with the default Gaussian family now selects its smoothing parameters
@@ -371,6 +371,26 @@ 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
+
374
394
  ### 4.6.1 — faster multi-smooth Gaussian GAMs
375
395
 
376
396
  `gam()` with the default Gaussian family now selects its smoothing parameters
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "pystatistics"
7
- version = "4.6.1"
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.1"
19
+ __version__ = "4.6.2"
20
20
  __author__ = "Hai-Shuo"
21
21
  __email__ = "contact@sgcx.org"
22
22
 
@@ -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",
@@ -1,14 +1,13 @@
1
1
  """
2
- Time series decomposition: classical and STL.
2
+ Classical time series decomposition and shared decomposition results.
3
3
 
4
- Provides decompose() matching R's stats::decompose() and stl() matching
5
- R's stats::stl(). Classical decomposition uses centered moving averages;
6
- STL uses iterative LOESS-based smoothing (Cleveland et al., 1990).
4
+ Provides decompose() matching R's stats::decompose() (centered moving
5
+ averages) plus the DecompositionParams/DecompositionSolution result
6
+ types shared with the STL implementation in ``_stl.py``.
7
7
  """
8
8
 
9
9
  from __future__ import annotations
10
10
 
11
- import math
12
11
  from dataclasses import dataclass
13
12
 
14
13
  import numpy as np
@@ -362,276 +361,3 @@ def decompose(
362
361
  warnings=(),
363
362
  )
364
363
  )
365
-
366
-
367
- # ---------------------------------------------------------------------------
368
- # LOESS helper (simplified local regression)
369
- # ---------------------------------------------------------------------------
370
-
371
- def _tricube(d: NDArray) -> NDArray:
372
- """Tricube weight function: (1 - |d|^3)^3 for |d| < 1, else 0."""
373
- w = np.zeros_like(d)
374
- mask = np.abs(d) < 1.0
375
- w[mask] = (1.0 - np.abs(d[mask]) ** 3) ** 3
376
- return w
377
-
378
-
379
- def _loess_smooth(
380
- x_pos: NDArray,
381
- y_vals: NDArray,
382
- span: int,
383
- degree: int = 1,
384
- weights: NDArray | None = None,
385
- ) -> NDArray:
386
- """
387
- Simplified LOESS smoothing for STL.
388
-
389
- For each point, fits a weighted local polynomial of the given degree
390
- using a tricube kernel with *span* nearest neighbours.
391
-
392
- Parameters
393
- ----------
394
- x_pos : NDArray
395
- Positions (typically ``np.arange(len(y_vals))``).
396
- y_vals : NDArray
397
- Values to smooth.
398
- span : int
399
- Number of nearest neighbours (window width).
400
- degree : int
401
- Polynomial degree (0 or 1).
402
- weights : NDArray or None
403
- External robustness weights (multiplied with tricube weights).
404
-
405
- Returns
406
- -------
407
- NDArray
408
- Smoothed values at each position in *x_pos*.
409
- """
410
- n = len(y_vals)
411
- span = min(span, n)
412
- smoothed = np.empty(n)
413
-
414
- for i in range(n):
415
- # Find span nearest neighbours
416
- dists = np.abs(x_pos - x_pos[i])
417
- idx = np.argsort(dists)[:span]
418
- d_max = dists[idx[-1]]
419
- if d_max == 0:
420
- d_max = 1.0
421
-
422
- w = _tricube(dists[idx] / d_max)
423
- if weights is not None:
424
- w = w * weights[idx]
425
-
426
- xi = x_pos[idx]
427
- yi = y_vals[idx]
428
-
429
- if degree == 0 or np.sum(w) == 0:
430
- total_w = np.sum(w)
431
- smoothed[i] = np.sum(w * yi) / total_w if total_w > 0 else yi[0]
432
- else:
433
- # Weighted least squares: degree-1 polynomial
434
- W = np.diag(w)
435
- X = np.column_stack([np.ones(len(xi)), xi - x_pos[i]])
436
- try:
437
- XtW = X.T @ W
438
- beta = np.linalg.solve(XtW @ X, XtW @ yi)
439
- smoothed[i] = beta[0]
440
- except np.linalg.LinAlgError:
441
- smoothed[i] = np.average(yi, weights=w) if np.sum(w) > 0 else yi[0]
442
-
443
- return smoothed
444
-
445
-
446
- # ---------------------------------------------------------------------------
447
- # Low-pass filter for STL
448
- # ---------------------------------------------------------------------------
449
-
450
- def _low_pass_filter(x: NDArray, period: int) -> NDArray:
451
- """
452
- Low-pass filter used in STL inner loop.
453
-
454
- Applies three successive moving averages of lengths *period*, *period*,
455
- and 3, matching the original STL specification.
456
-
457
- Parameters
458
- ----------
459
- x : NDArray
460
- Input series.
461
- period : int
462
- Seasonal period.
463
-
464
- Returns
465
- -------
466
- NDArray
467
- Filtered series (same length, NaN-padded edges trimmed via LOESS).
468
- """
469
- # MA of length period
470
- k1 = np.ones(period) / period
471
- s1 = np.convolve(x, k1, mode="same")
472
- # MA of length period again
473
- s2 = np.convolve(s1, k1, mode="same")
474
- # MA of length 3
475
- k3 = np.ones(3) / 3.0
476
- s3 = np.convolve(s2, k3, mode="same")
477
- return s3
478
-
479
-
480
- # ---------------------------------------------------------------------------
481
- # STL decomposition
482
- # ---------------------------------------------------------------------------
483
-
484
- def _next_odd(v: int) -> int:
485
- """Return *v* if odd, else *v* + 1."""
486
- return v if v % 2 == 1 else v + 1
487
-
488
-
489
- def stl(
490
- x: ArrayLike,
491
- period: int,
492
- *,
493
- seasonal_window: int | None = None,
494
- trend_window: int | None = None,
495
- robust: bool = False,
496
- n_outer: int = 0,
497
- n_inner: int = 2,
498
- ) -> DecompositionSolution:
499
- """
500
- Seasonal and Trend decomposition using LOESS (STL).
501
-
502
- Simplified implementation of Cleveland et al. (1990), matching
503
- R's ``stats::stl()`` in spirit.
504
-
505
- Parameters
506
- ----------
507
- x : ArrayLike
508
- Time series (1-D). Length must be >= 2 * *period*.
509
- period : int
510
- Seasonal period (>= 2).
511
- seasonal_window : int or None
512
- LOESS window width for seasonal extraction. Must be odd and >= 7.
513
- Default: next odd >= ``period + 1``, but at least 7.
514
- trend_window : int or None
515
- LOESS window width for trend extraction. Must be odd.
516
- Default: next odd >= ``ceil(1.5 * period / (1 - 1.5 / s_window)) + 1``.
517
- robust : bool
518
- If True, sets *n_outer* = 1 if it is 0, enabling robustness weights.
519
- n_outer : int
520
- Number of outer (robustness) iterations (>= 0).
521
- n_inner : int
522
- Number of inner iterations (>= 1).
523
-
524
- Returns
525
- -------
526
- DecompositionSolution
527
-
528
- Raises
529
- ------
530
- ValidationError
531
- On invalid inputs.
532
- """
533
- arr = _validate_series(x)
534
- _validate_decompose_inputs(arr, period, "additive")
535
-
536
- n = len(arr)
537
-
538
- # Default seasonal window
539
- if seasonal_window is None:
540
- seasonal_window = _next_odd(max(7, period + 1))
541
- else:
542
- if seasonal_window < 7:
543
- raise ValidationError(
544
- f"seasonal_window: must be >= 7, got {seasonal_window}"
545
- )
546
- if seasonal_window % 2 == 0:
547
- raise ValidationError(
548
- f"seasonal_window: must be odd, got {seasonal_window}"
549
- )
550
-
551
- # Default trend window
552
- if trend_window is None:
553
- denom = 1.0 - 1.5 / seasonal_window
554
- trend_window = _next_odd(
555
- max(3, int(math.ceil(1.5 * period / denom)) + 1)
556
- )
557
- else:
558
- if trend_window % 2 == 0:
559
- raise ValidationError(
560
- f"trend_window: must be odd, got {trend_window}"
561
- )
562
-
563
- if n_inner < 1:
564
- raise ValidationError(f"n_inner: must be >= 1, got {n_inner}")
565
-
566
- if robust and n_outer == 0:
567
- n_outer = 1
568
-
569
- # Initialise components
570
- trend = np.zeros(n)
571
- seasonal = np.zeros(n)
572
- rob_weights = np.ones(n)
573
- x_pos_full = np.arange(n, dtype=float)
574
-
575
- total_outer = max(1, n_outer + 1)
576
-
577
- for _outer in range(total_outer):
578
- for _inner in range(n_inner):
579
- # Step 1: Detrending
580
- detrended = arr - trend
581
-
582
- # Step 2: Cycle-subseries smoothing
583
- smoothed_seasonal = np.empty(n)
584
- for pos in range(period):
585
- indices = np.arange(pos, n, period)
586
- sub_y = detrended[indices]
587
- sub_x = np.arange(len(sub_y), dtype=float)
588
- sub_w = rob_weights[indices]
589
- sub_smooth = _loess_smooth(
590
- sub_x, sub_y, span=seasonal_window, degree=1, weights=sub_w,
591
- )
592
- smoothed_seasonal[indices] = sub_smooth
593
-
594
- # Step 3: Low-pass filter on smoothed seasonal
595
- lp = _low_pass_filter(smoothed_seasonal, period)
596
-
597
- # Step 4: Seasonal = smoothed - low-pass
598
- seasonal = smoothed_seasonal - lp
599
-
600
- # Step 5: De-seasonalise
601
- deseasoned = arr - seasonal
602
-
603
- # Step 6: Trend via LOESS on deseasoned series
604
- trend = _loess_smooth(
605
- x_pos_full, deseasoned, span=trend_window,
606
- degree=1, weights=rob_weights,
607
- )
608
-
609
- # Outer loop: compute robustness weights
610
- if _outer < total_outer - 1 and n_outer > 0:
611
- residual = arr - trend - seasonal
612
- h = 6.0 * np.median(np.abs(residual))
613
- if h > 0:
614
- u = np.abs(residual) / h
615
- rob_weights = _tricube(u)
616
- else:
617
- rob_weights = np.ones(n)
618
-
619
- residual = arr - trend - seasonal
620
-
621
- return DecompositionSolution(
622
- _result=Result(
623
- params=DecompositionParams(
624
- observed=arr,
625
- trend=trend,
626
- seasonal=seasonal,
627
- residual=residual,
628
- period=period,
629
- type="additive",
630
- method="stl",
631
- ),
632
- info={"method": "stl", "type": "additive", "robust": robust},
633
- timing=None,
634
- backend_name="cpu",
635
- warnings=(),
636
- )
637
- )
@@ -81,23 +81,26 @@ def diff(
81
81
  def ndiffs(
82
82
  x: ArrayLike,
83
83
  *,
84
- test: str = "adf",
84
+ test: str = "kpss",
85
85
  alpha: float = 0.05,
86
86
  max_d: int = 2,
87
87
  ) -> int:
88
88
  """
89
89
  Estimate the number of differences needed for stationarity.
90
90
 
91
- Matches R's forecast::ndiffs(). Repeatedly differences and tests for
92
- stationarity until either the test indicates stationarity or max_d
93
- is reached.
91
+ Matches R's forecast::ndiffs(), including its default test. Repeatedly
92
+ differences and tests for stationarity until either the test indicates
93
+ stationarity or max_d is reached.
94
94
 
95
95
  Parameters
96
96
  ----------
97
97
  x : ArrayLike
98
98
  Time series.
99
99
  test : str
100
- Stationarity test to use: 'adf' or 'kpss'.
100
+ Stationarity test to use: 'kpss' (default, matching R
101
+ forecast::ndiffs) or 'adf'. The two tests have opposite null
102
+ hypotheses (KPSS: stationary; ADF: unit root) and can recommend
103
+ different d on borderline series.
101
104
  alpha : float
102
105
  Significance level for the test.
103
106
  max_d : int