pystatistics 4.6.2__tar.gz → 4.6.3__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 (705) hide show
  1. pystatistics-4.6.3/.release/UNRELEASED.md +69 -0
  2. {pystatistics-4.6.2 → pystatistics-4.6.3}/CHANGELOG.md +31 -0
  3. {pystatistics-4.6.2 → pystatistics-4.6.3}/PKG-INFO +16 -1
  4. {pystatistics-4.6.2 → pystatistics-4.6.3}/README.md +15 -0
  5. {pystatistics-4.6.2 → pystatistics-4.6.3}/pyproject.toml +1 -1
  6. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/__init__.py +1 -1
  7. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/timeseries/_ets_fit.py +54 -8
  8. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/timeseries/_ets_select.py +23 -9
  9. pystatistics-4.6.3/tests/fixtures/ets_py_params.json +237 -0
  10. pystatistics-4.6.3/tests/fixtures/ets_r_reference.json +1 -0
  11. pystatistics-4.6.3/tests/fixtures/generate_ets_py_params.py +74 -0
  12. pystatistics-4.6.3/tests/fixtures/generate_ets_r_reference.R +155 -0
  13. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/timeseries/test_ets.py +0 -305
  14. pystatistics-4.6.3/tests/timeseries/test_ets_selection.py +402 -0
  15. pystatistics-4.6.2/.release/UNRELEASED.md +0 -12
  16. pystatistics-4.6.2/tests/fixtures/ets_r_reference.json +0 -1
  17. pystatistics-4.6.2/tests/fixtures/generate_ets_r_reference.R +0 -72
  18. {pystatistics-4.6.2 → pystatistics-4.6.3}/.github/workflows/publish.yml +0 -0
  19. {pystatistics-4.6.2 → pystatistics-4.6.3}/.github/workflows/trigger-docs-rebuild.yml +0 -0
  20. {pystatistics-4.6.2 → pystatistics-4.6.3}/.gitignore +0 -0
  21. {pystatistics-4.6.2 → pystatistics-4.6.3}/.release/CHECKLIST.md +0 -0
  22. {pystatistics-4.6.2 → pystatistics-4.6.3}/.release/release.py +0 -0
  23. {pystatistics-4.6.2 → pystatistics-4.6.3}/LICENSE +0 -0
  24. {pystatistics-4.6.2 → pystatistics-4.6.3}/benchmarks/mvnmle_bench.py +0 -0
  25. {pystatistics-4.6.2 → pystatistics-4.6.3}/benchmarks/mvnmle_gpu_per_eval.py +0 -0
  26. {pystatistics-4.6.2 → pystatistics-4.6.3}/docs/DESIGN.md +0 -0
  27. {pystatistics-4.6.2 → pystatistics-4.6.3}/docs/GPU_NOTES.md +0 -0
  28. {pystatistics-4.6.2 → pystatistics-4.6.3}/docs/Makefile +0 -0
  29. {pystatistics-4.6.2 → pystatistics-4.6.3}/docs/ROADMAP.md +0 -0
  30. {pystatistics-4.6.2 → pystatistics-4.6.3}/docs/_static/custom.css +0 -0
  31. {pystatistics-4.6.2 → pystatistics-4.6.3}/docs/anova.rst +0 -0
  32. {pystatistics-4.6.2 → pystatistics-4.6.3}/docs/conf.py +0 -0
  33. {pystatistics-4.6.2 → pystatistics-4.6.3}/docs/core.rst +0 -0
  34. {pystatistics-4.6.2 → pystatistics-4.6.3}/docs/descriptive.rst +0 -0
  35. {pystatistics-4.6.2 → pystatistics-4.6.3}/docs/gam.rst +0 -0
  36. {pystatistics-4.6.2 → pystatistics-4.6.3}/docs/hypothesis.rst +0 -0
  37. {pystatistics-4.6.2 → pystatistics-4.6.3}/docs/index.rst +0 -0
  38. {pystatistics-4.6.2 → pystatistics-4.6.3}/docs/mixed.rst +0 -0
  39. {pystatistics-4.6.2 → pystatistics-4.6.3}/docs/montecarlo.rst +0 -0
  40. {pystatistics-4.6.2 → pystatistics-4.6.3}/docs/multinomial.rst +0 -0
  41. {pystatistics-4.6.2 → pystatistics-4.6.3}/docs/multivariate.rst +0 -0
  42. {pystatistics-4.6.2 → pystatistics-4.6.3}/docs/mvnmle.rst +0 -0
  43. {pystatistics-4.6.2 → pystatistics-4.6.3}/docs/ordinal.rst +0 -0
  44. {pystatistics-4.6.2 → pystatistics-4.6.3}/docs/regression.rst +0 -0
  45. {pystatistics-4.6.2 → pystatistics-4.6.3}/docs/survival.rst +0 -0
  46. {pystatistics-4.6.2 → pystatistics-4.6.3}/docs/timeseries.rst +0 -0
  47. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/CONVENTIONS.md +0 -0
  48. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/anova/__init__.py +0 -0
  49. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/anova/_common.py +0 -0
  50. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/anova/_contrasts.py +0 -0
  51. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/anova/_levene.py +0 -0
  52. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/anova/_posthoc.py +0 -0
  53. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/anova/_repeated.py +0 -0
  54. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/anova/_ss.py +0 -0
  55. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/anova/design.py +0 -0
  56. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/anova/solution.py +0 -0
  57. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/anova/solvers.py +0 -0
  58. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/core/__init__.py +0 -0
  59. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/core/capabilities.py +0 -0
  60. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/core/compute/__init__.py +0 -0
  61. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/core/compute/backend.py +0 -0
  62. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/core/compute/device.py +0 -0
  63. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/core/compute/linalg/__init__.py +0 -0
  64. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/core/compute/linalg/batched.py +0 -0
  65. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/core/compute/linalg/cholesky.py +0 -0
  66. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/core/compute/linalg/determinant.py +0 -0
  67. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/core/compute/linalg/qr.py +0 -0
  68. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/core/compute/linalg/solve.py +0 -0
  69. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/core/compute/linalg/svd.py +0 -0
  70. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/core/compute/linalg/triangular.py +0 -0
  71. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/core/compute/optimization/__init__.py +0 -0
  72. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/core/compute/optimization/convergence.py +0 -0
  73. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/core/compute/precision.py +0 -0
  74. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/core/compute/timing.py +0 -0
  75. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/core/compute/tolerances.py +0 -0
  76. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/core/compute/torch_interop.py +0 -0
  77. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/core/datasource.py +0 -0
  78. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/core/encoding.py +0 -0
  79. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/core/exceptions.py +0 -0
  80. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/core/protocols.py +0 -0
  81. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/core/result.py +0 -0
  82. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/core/validation.py +0 -0
  83. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/descriptive/__init__.py +0 -0
  84. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/descriptive/_missing.py +0 -0
  85. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/descriptive/_quantile_types.py +0 -0
  86. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/descriptive/backends/__init__.py +0 -0
  87. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/descriptive/backends/cpu.py +0 -0
  88. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/descriptive/backends/gpu.py +0 -0
  89. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/descriptive/design.py +0 -0
  90. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/descriptive/solution.py +0 -0
  91. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/descriptive/solvers.py +0 -0
  92. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/gam/__init__.py +0 -0
  93. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/gam/_basis.py +0 -0
  94. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/gam/_basis_common.py +0 -0
  95. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/gam/_basis_cr.py +0 -0
  96. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/gam/_basis_tp.py +0 -0
  97. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/gam/_common.py +0 -0
  98. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/gam/_constraints.py +0 -0
  99. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/gam/_criteria.py +0 -0
  100. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/gam/_edf.py +0 -0
  101. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/gam/_gam.py +0 -0
  102. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/gam/_gradient.py +0 -0
  103. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/gam/_pirls.py +0 -0
  104. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/gam/_smooth.py +0 -0
  105. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/gam/_smooth_test.py +0 -0
  106. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/gam/solution.py +0 -0
  107. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/hypothesis/__init__.py +0 -0
  108. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/hypothesis/_common.py +0 -0
  109. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/hypothesis/_design_factories.py +0 -0
  110. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/hypothesis/_p_adjust.py +0 -0
  111. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/hypothesis/backends/__init__.py +0 -0
  112. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/hypothesis/backends/_chisq_test.py +0 -0
  113. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/hypothesis/backends/_fisher_test.py +0 -0
  114. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/hypothesis/backends/_ks_test.py +0 -0
  115. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/hypothesis/backends/_prop_test.py +0 -0
  116. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/hypothesis/backends/_t_test.py +0 -0
  117. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/hypothesis/backends/_var_test.py +0 -0
  118. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/hypothesis/backends/_wilcox_test.py +0 -0
  119. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/hypothesis/backends/cpu.py +0 -0
  120. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/hypothesis/backends/gpu.py +0 -0
  121. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/hypothesis/design.py +0 -0
  122. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/hypothesis/solution.py +0 -0
  123. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/hypothesis/solvers.py +0 -0
  124. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mice/__init__.py +0 -0
  125. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mice/_chain.py +0 -0
  126. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mice/_encode.py +0 -0
  127. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mice/_rng.py +0 -0
  128. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mice/_visit.py +0 -0
  129. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mice/backends/__init__.py +0 -0
  130. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mice/backends/_gpu_encode.py +0 -0
  131. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mice/backends/_gpu_linreg.py +0 -0
  132. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mice/backends/_gpu_logreg.py +0 -0
  133. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mice/backends/_gpu_methods.py +0 -0
  134. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mice/backends/_gpu_polr.py +0 -0
  135. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mice/backends/_gpu_polyreg.py +0 -0
  136. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mice/backends/_gpu_spd.py +0 -0
  137. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mice/backends/cpu.py +0 -0
  138. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mice/backends/gpu.py +0 -0
  139. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mice/datasets.py +0 -0
  140. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mice/design.py +0 -0
  141. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mice/methods/__init__.py +0 -0
  142. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mice/methods/_draw.py +0 -0
  143. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mice/methods/_linreg.py +0 -0
  144. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mice/methods/base.py +0 -0
  145. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mice/methods/logreg.py +0 -0
  146. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mice/methods/norm.py +0 -0
  147. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mice/methods/pmm.py +0 -0
  148. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mice/methods/polr.py +0 -0
  149. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mice/methods/polyreg.py +0 -0
  150. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mice/methods/registry.py +0 -0
  151. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mice/pooling.py +0 -0
  152. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mice/solution.py +0 -0
  153. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mice/solvers.py +0 -0
  154. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mixed/__init__.py +0 -0
  155. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mixed/_common.py +0 -0
  156. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mixed/_deviance.py +0 -0
  157. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mixed/_glmm_optimizer.py +0 -0
  158. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mixed/_glmm_pirls.py +0 -0
  159. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mixed/_grm_cpu.py +0 -0
  160. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mixed/_optimizer.py +0 -0
  161. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mixed/_pls.py +0 -0
  162. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mixed/_pls_structured.py +0 -0
  163. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mixed/_random_effects.py +0 -0
  164. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mixed/_satterthwaite.py +0 -0
  165. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mixed/_struct_batched.py +0 -0
  166. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mixed/_struct_sparse.py +0 -0
  167. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mixed/backends/__init__.py +0 -0
  168. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mixed/backends/grm_gpu.py +0 -0
  169. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mixed/design.py +0 -0
  170. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mixed/grm.py +0 -0
  171. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mixed/grm_solution.py +0 -0
  172. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mixed/solution.py +0 -0
  173. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mixed/solvers.py +0 -0
  174. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/montecarlo/__init__.py +0 -0
  175. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/montecarlo/_ci.py +0 -0
  176. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/montecarlo/_common.py +0 -0
  177. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/montecarlo/_influence.py +0 -0
  178. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/montecarlo/backends/__init__.py +0 -0
  179. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/montecarlo/backends/cpu.py +0 -0
  180. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/montecarlo/backends/gpu.py +0 -0
  181. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/montecarlo/design.py +0 -0
  182. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/montecarlo/solution.py +0 -0
  183. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/montecarlo/solvers.py +0 -0
  184. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/multinomial/__init__.py +0 -0
  185. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/multinomial/_common.py +0 -0
  186. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/multinomial/_likelihood.py +0 -0
  187. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/multinomial/_solver.py +0 -0
  188. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/multinomial/backends/__init__.py +0 -0
  189. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/multinomial/backends/gpu_likelihood.py +0 -0
  190. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/multinomial/solution.py +0 -0
  191. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/multivariate/__init__.py +0 -0
  192. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/multivariate/_common.py +0 -0
  193. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/multivariate/_factor.py +0 -0
  194. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/multivariate/_pca.py +0 -0
  195. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/multivariate/_rotation.py +0 -0
  196. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/multivariate/backends/__init__.py +0 -0
  197. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/multivariate/backends/gpu_pca.py +0 -0
  198. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/multivariate/backends/gpu_pca_randomized.py +0 -0
  199. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mvnmle/__init__.py +0 -0
  200. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mvnmle/_degeneracy.py +0 -0
  201. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mvnmle/_monotone.py +0 -0
  202. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mvnmle/_objectives/__init__.py +0 -0
  203. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mvnmle/_objectives/_batched_cholesky.py +0 -0
  204. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mvnmle/_objectives/base.py +0 -0
  205. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mvnmle/_objectives/cpu.py +0 -0
  206. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mvnmle/_objectives/gpu_fp32.py +0 -0
  207. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mvnmle/_objectives/gpu_fp64.py +0 -0
  208. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mvnmle/_objectives/parameterizations.py +0 -0
  209. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mvnmle/_utils.py +0 -0
  210. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mvnmle/backends/__init__.py +0 -0
  211. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mvnmle/backends/_direct.py +0 -0
  212. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mvnmle/backends/_em_batched.py +0 -0
  213. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mvnmle/backends/_em_batched_np.py +0 -0
  214. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mvnmle/backends/_em_batched_patterns.py +0 -0
  215. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mvnmle/backends/_em_batched_torch.py +0 -0
  216. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mvnmle/backends/_optimize.py +0 -0
  217. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mvnmle/backends/_squarem.py +0 -0
  218. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mvnmle/backends/cpu.py +0 -0
  219. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mvnmle/backends/em.py +0 -0
  220. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mvnmle/backends/gpu.py +0 -0
  221. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mvnmle/datasets.py +0 -0
  222. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mvnmle/design.py +0 -0
  223. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mvnmle/mcar_test.py +0 -0
  224. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mvnmle/patterns.py +0 -0
  225. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mvnmle/solution.py +0 -0
  226. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/mvnmle/solvers.py +0 -0
  227. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/ordinal/__init__.py +0 -0
  228. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/ordinal/_common.py +0 -0
  229. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/ordinal/_information.py +0 -0
  230. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/ordinal/_likelihood.py +0 -0
  231. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/ordinal/_solver.py +0 -0
  232. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/ordinal/backends/__init__.py +0 -0
  233. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/ordinal/backends/gpu_likelihood.py +0 -0
  234. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/ordinal/solution.py +0 -0
  235. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/py.typed +0 -0
  236. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/regression/__init__.py +0 -0
  237. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/regression/_formatting.py +0 -0
  238. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/regression/_glm.py +0 -0
  239. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/regression/_inputs.py +0 -0
  240. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/regression/_linear.py +0 -0
  241. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/regression/_nb_theta.py +0 -0
  242. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/regression/_penalty.py +0 -0
  243. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/regression/backends/__init__.py +0 -0
  244. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/regression/backends/_irls_step.py +0 -0
  245. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/regression/backends/cpu.py +0 -0
  246. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/regression/backends/cpu_glm.py +0 -0
  247. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/regression/backends/gpu.py +0 -0
  248. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/regression/backends/gpu_glm.py +0 -0
  249. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/regression/design.py +0 -0
  250. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/regression/families.py +0 -0
  251. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/regression/solution.py +0 -0
  252. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/regression/solvers.py +0 -0
  253. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/regression/terms.py +0 -0
  254. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/survival/__init__.py +0 -0
  255. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/survival/_common.py +0 -0
  256. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/survival/_cox.py +0 -0
  257. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/survival/_discrete.py +0 -0
  258. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/survival/_km.py +0 -0
  259. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/survival/_logrank.py +0 -0
  260. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/survival/backends/__init__.py +0 -0
  261. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/survival/backends/cpu.py +0 -0
  262. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/survival/backends/gpu.py +0 -0
  263. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/survival/design.py +0 -0
  264. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/survival/solution.py +0 -0
  265. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/survival/solvers.py +0 -0
  266. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/timeseries/__init__.py +0 -0
  267. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/timeseries/_acf.py +0 -0
  268. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/timeseries/_arima_batch.py +0 -0
  269. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/timeseries/_arima_factored.py +0 -0
  270. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/timeseries/_arima_fit.py +0 -0
  271. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/timeseries/_arima_forecast.py +0 -0
  272. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/timeseries/_arima_kalman.py +0 -0
  273. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/timeseries/_arima_likelihood.py +0 -0
  274. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/timeseries/_arima_order.py +0 -0
  275. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/timeseries/_arima_solution.py +0 -0
  276. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/timeseries/_common.py +0 -0
  277. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/timeseries/_decomposition.py +0 -0
  278. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/timeseries/_differencing.py +0 -0
  279. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/timeseries/_ets_forecast.py +0 -0
  280. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/timeseries/_ets_models.py +0 -0
  281. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/timeseries/_ets_result.py +0 -0
  282. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/timeseries/_loess.py +0 -0
  283. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/timeseries/_stationarity.py +0 -0
  284. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/timeseries/_stl.py +0 -0
  285. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/timeseries/_stl_core.py +0 -0
  286. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/timeseries/_stl_robust.py +0 -0
  287. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/timeseries/_whittle.py +0 -0
  288. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/timeseries/backends/__init__.py +0 -0
  289. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/timeseries/backends/whittle_batch_gpu.py +0 -0
  290. {pystatistics-4.6.2 → pystatistics-4.6.3}/pystatistics/timeseries/backends/whittle_gpu.py +0 -0
  291. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/anova/__init__.py +0 -0
  292. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/anova/conftest.py +0 -0
  293. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/anova/test_contrasts.py +0 -0
  294. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/anova/test_design.py +0 -0
  295. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/anova/test_factorial.py +0 -0
  296. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/anova/test_levene.py +0 -0
  297. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/anova/test_oneway.py +0 -0
  298. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/anova/test_posthoc.py +0 -0
  299. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/anova/test_r_validation.py +0 -0
  300. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/anova/test_repeated_measures.py +0 -0
  301. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/benchmark_gpu.py +0 -0
  302. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/conftest.py +0 -0
  303. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/core/test_backend.py +0 -0
  304. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/core/test_datasource.py +0 -0
  305. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/core/test_exceptions.py +0 -0
  306. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/core/test_qr_solve.py +0 -0
  307. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/core/test_repr_html.py +0 -0
  308. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/core/test_result.py +0 -0
  309. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/core/test_torch_interop.py +0 -0
  310. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/core/test_validation.py +0 -0
  311. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/descriptive/__init__.py +0 -0
  312. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/descriptive/conftest.py +0 -0
  313. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/descriptive/test_backend_convention.py +0 -0
  314. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/descriptive/test_cor.py +0 -0
  315. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/descriptive/test_cov.py +0 -0
  316. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/descriptive/test_describe.py +0 -0
  317. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/descriptive/test_gpu.py +0 -0
  318. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/descriptive/test_missing.py +0 -0
  319. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/descriptive/test_moments.py +0 -0
  320. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/descriptive/test_quantile.py +0 -0
  321. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/descriptive/test_r_validation.py +0 -0
  322. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/anova_ancova_meta.json +0 -0
  323. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/anova_ancova_r_results.json +0 -0
  324. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/anova_bonferroni_meta.json +0 -0
  325. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/anova_bonferroni_r_results.json +0 -0
  326. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/anova_eta_meta.json +0 -0
  327. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/anova_eta_r_results.json +0 -0
  328. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/anova_levene_meta.json +0 -0
  329. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/anova_levene_r_results.json +0 -0
  330. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/anova_oneway_balanced_meta.json +0 -0
  331. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/anova_oneway_balanced_r_results.json +0 -0
  332. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/anova_oneway_unbalanced_meta.json +0 -0
  333. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/anova_oneway_unbalanced_r_results.json +0 -0
  334. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/anova_rm_mixed_meta.json +0 -0
  335. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/anova_rm_mixed_r_results.json +0 -0
  336. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/anova_rm_within_meta.json +0 -0
  337. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/anova_rm_within_r_results.json +0 -0
  338. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/anova_tukey_meta.json +0 -0
  339. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/anova_tukey_r_results.json +0 -0
  340. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/anova_twoway_balanced_meta.json +0 -0
  341. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/anova_twoway_balanced_r_results.json +0 -0
  342. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/anova_twoway_unbalanced_meta.json +0 -0
  343. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/anova_twoway_unbalanced_r_results.json +0 -0
  344. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/basic_100x3.csv +0 -0
  345. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/basic_100x3_meta.json +0 -0
  346. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/basic_100x3_r_results.json +0 -0
  347. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/collinear_almost.csv +0 -0
  348. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/collinear_almost_meta.json +0 -0
  349. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/collinear_almost_r_results.json +0 -0
  350. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/desc_basic_100x5.csv +0 -0
  351. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/desc_basic_100x5_meta.json +0 -0
  352. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/desc_basic_100x5_r_results.json +0 -0
  353. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/desc_constant_column.csv +0 -0
  354. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/desc_constant_column_meta.json +0 -0
  355. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/desc_constant_column_r_results.json +0 -0
  356. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/desc_extreme_values.csv +0 -0
  357. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/desc_extreme_values_meta.json +0 -0
  358. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/desc_extreme_values_r_results.json +0 -0
  359. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/desc_large_1000x10.csv +0 -0
  360. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/desc_large_1000x10_meta.json +0 -0
  361. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/desc_large_1000x10_r_results.json +0 -0
  362. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/desc_nan_columnwise.csv +0 -0
  363. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/desc_nan_columnwise_meta.json +0 -0
  364. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/desc_nan_columnwise_r_results.json +0 -0
  365. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/desc_nan_scattered.csv +0 -0
  366. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/desc_nan_scattered_meta.json +0 -0
  367. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/desc_nan_scattered_r_results.json +0 -0
  368. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/desc_negative_correlation.csv +0 -0
  369. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/desc_negative_correlation_meta.json +0 -0
  370. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/desc_negative_correlation_r_results.json +0 -0
  371. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/desc_perfect_correlation.csv +0 -0
  372. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/desc_perfect_correlation_meta.json +0 -0
  373. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/desc_perfect_correlation_r_results.json +0 -0
  374. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/desc_single_column.csv +0 -0
  375. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/desc_single_column_meta.json +0 -0
  376. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/desc_single_column_r_results.json +0 -0
  377. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/desc_ties.csv +0 -0
  378. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/desc_ties_meta.json +0 -0
  379. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/desc_ties_r_results.json +0 -0
  380. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/different_scales.csv +0 -0
  381. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/different_scales_meta.json +0 -0
  382. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/different_scales_r_results.json +0 -0
  383. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/generate_anova_fixtures.py +0 -0
  384. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/generate_descriptive_fixtures.py +0 -0
  385. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/generate_fixtures.py +0 -0
  386. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/generate_glm_fixtures.py +0 -0
  387. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/generate_hypothesis_fixtures.py +0 -0
  388. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/generate_mixed_fixtures.py +0 -0
  389. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/generate_montecarlo_fixtures.py +0 -0
  390. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/generate_nb_autotheta_fixtures.py +0 -0
  391. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/generate_stl_r_reference.R +0 -0
  392. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/generate_survival_fixtures.py +0 -0
  393. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/generate_weights_offset_fixtures.py +0 -0
  394. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/glm_binomial_balanced.csv +0 -0
  395. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/glm_binomial_balanced_meta.json +0 -0
  396. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/glm_binomial_balanced_r_results.json +0 -0
  397. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/glm_binomial_basic.csv +0 -0
  398. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/glm_binomial_basic_meta.json +0 -0
  399. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/glm_binomial_basic_r_results.json +0 -0
  400. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/glm_binomial_large.csv +0 -0
  401. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/glm_binomial_large_meta.json +0 -0
  402. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/glm_binomial_large_r_results.json +0 -0
  403. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/glm_binomial_separated.csv +0 -0
  404. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/glm_binomial_separated_meta.json +0 -0
  405. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/glm_binomial_separated_r_results.json +0 -0
  406. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/glm_gaussian_basic.csv +0 -0
  407. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/glm_gaussian_basic_meta.json +0 -0
  408. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/glm_gaussian_basic_r_results.json +0 -0
  409. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/glm_gaussian_large.csv +0 -0
  410. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/glm_gaussian_large_meta.json +0 -0
  411. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/glm_gaussian_large_r_results.json +0 -0
  412. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/glm_poisson_basic.csv +0 -0
  413. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/glm_poisson_basic_meta.json +0 -0
  414. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/glm_poisson_basic_r_results.json +0 -0
  415. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/glm_poisson_large_counts.csv +0 -0
  416. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/glm_poisson_large_counts_meta.json +0 -0
  417. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/glm_poisson_large_counts_r_results.json +0 -0
  418. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/glm_poisson_zeros.csv +0 -0
  419. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/glm_poisson_zeros_meta.json +0 -0
  420. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/glm_poisson_zeros_r_results.json +0 -0
  421. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/high_noise.csv +0 -0
  422. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/high_noise_meta.json +0 -0
  423. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/high_noise_r_results.json +0 -0
  424. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/htest_chisq_2x2_yates_meta.json +0 -0
  425. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/htest_chisq_2x2_yates_r_results.json +0 -0
  426. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/htest_chisq_3x3_meta.json +0 -0
  427. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/htest_chisq_3x3_r_results.json +0 -0
  428. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/htest_chisq_gof_meta.json +0 -0
  429. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/htest_chisq_gof_r_results.json +0 -0
  430. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/htest_chisq_gof_unequal_meta.json +0 -0
  431. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/htest_chisq_gof_unequal_r_results.json +0 -0
  432. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/htest_fisher_2x2_less_meta.json +0 -0
  433. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/htest_fisher_2x2_less_r_results.json +0 -0
  434. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/htest_fisher_2x2_meta.json +0 -0
  435. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/htest_fisher_2x2_r_results.json +0 -0
  436. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/htest_fisher_3x3_meta.json +0 -0
  437. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/htest_fisher_3x3_r_results.json +0 -0
  438. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/htest_ks_onesample_norm_meta.json +0 -0
  439. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/htest_ks_onesample_norm_r_results.json +0 -0
  440. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/htest_ks_twosample_meta.json +0 -0
  441. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/htest_ks_twosample_r_results.json +0 -0
  442. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/htest_prop_onesample_meta.json +0 -0
  443. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/htest_prop_onesample_r_results.json +0 -0
  444. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/htest_prop_twosample_meta.json +0 -0
  445. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/htest_prop_twosample_r_results.json +0 -0
  446. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/htest_t_onesample_meta.json +0 -0
  447. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/htest_t_onesample_r_results.json +0 -0
  448. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/htest_t_paired_meta.json +0 -0
  449. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/htest_t_paired_r_results.json +0 -0
  450. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/htest_t_pooled_meta.json +0 -0
  451. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/htest_t_pooled_r_results.json +0 -0
  452. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/htest_t_welch_meta.json +0 -0
  453. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/htest_t_welch_r_results.json +0 -0
  454. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/htest_var_basic_meta.json +0 -0
  455. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/htest_var_basic_r_results.json +0 -0
  456. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/htest_wilcox_ranksum_meta.json +0 -0
  457. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/htest_wilcox_ranksum_r_results.json +0 -0
  458. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/htest_wilcox_signed_meta.json +0 -0
  459. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/htest_wilcox_signed_r_results.json +0 -0
  460. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/ill_conditioned.csv +0 -0
  461. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/ill_conditioned_meta.json +0 -0
  462. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/ill_conditioned_r_results.json +0 -0
  463. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/large_coeffs.csv +0 -0
  464. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/large_coeffs_meta.json +0 -0
  465. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/large_coeffs_r_results.json +0 -0
  466. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/mc_boot_ci_90_meta.json +0 -0
  467. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/mc_boot_ci_90_r_results.json +0 -0
  468. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/mc_boot_ci_normal_meta.json +0 -0
  469. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/mc_boot_ci_normal_r_results.json +0 -0
  470. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/mc_boot_ci_skewed_meta.json +0 -0
  471. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/mc_boot_ci_skewed_r_results.json +0 -0
  472. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/mc_boot_mean_balanced_meta.json +0 -0
  473. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/mc_boot_mean_balanced_r_results.json +0 -0
  474. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/mc_boot_mean_ordinary_meta.json +0 -0
  475. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/mc_boot_mean_ordinary_r_results.json +0 -0
  476. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/mc_boot_median_meta.json +0 -0
  477. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/mc_boot_median_r_results.json +0 -0
  478. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/mc_boot_variance_meta.json +0 -0
  479. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/mc_boot_variance_r_results.json +0 -0
  480. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/mc_perm_greater_meta.json +0 -0
  481. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/mc_perm_greater_r_results.json +0 -0
  482. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/mc_perm_not_significant_meta.json +0 -0
  483. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/mc_perm_not_significant_r_results.json +0 -0
  484. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/mc_perm_significant_meta.json +0 -0
  485. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/mc_perm_significant_r_results.json +0 -0
  486. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/mixed/glmm_binomial.csv +0 -0
  487. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/mixed/glmm_poisson.csv +0 -0
  488. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/mixed/lmm_crossed.csv +0 -0
  489. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/mixed/lmm_intercept.csv +0 -0
  490. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/mixed/lmm_ml.csv +0 -0
  491. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/mixed/lmm_no_effect.csv +0 -0
  492. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/mixed/lmm_slope.csv +0 -0
  493. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/mixed/mixed_meta.json +0 -0
  494. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/mixed/mixed_r_results.json +0 -0
  495. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/nb_autotheta_cases.json +0 -0
  496. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/nb_autotheta_r_results.json +0 -0
  497. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/near_square.csv +0 -0
  498. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/near_square_meta.json +0 -0
  499. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/near_square_r_results.json +0 -0
  500. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/no_intercept.csv +0 -0
  501. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/no_intercept_meta.json +0 -0
  502. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/no_intercept_r_results.json +0 -0
  503. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/run_r_anova_validation.R +0 -0
  504. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/run_r_descriptive_validation.R +0 -0
  505. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/run_r_glm_validation.R +0 -0
  506. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/run_r_hypothesis_validation.R +0 -0
  507. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/run_r_mixed_validation.R +0 -0
  508. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/run_r_montecarlo_validation.R +0 -0
  509. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/run_r_nb_autotheta_validation.R +0 -0
  510. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/run_r_survival_validation.R +0 -0
  511. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/run_r_validation.R +0 -0
  512. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/run_r_weights_offset_validation.R +0 -0
  513. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/run_validation.sh +0 -0
  514. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/small_noise.csv +0 -0
  515. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/small_noise_meta.json +0 -0
  516. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/small_noise_r_results.json +0 -0
  517. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/stl_r_reference.json +0 -0
  518. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/surv_cox_breslow_meta.json +0 -0
  519. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/surv_cox_breslow_r_results.json +0 -0
  520. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/surv_cox_single_meta.json +0 -0
  521. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/surv_cox_single_r_results.json +0 -0
  522. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/surv_cox_ties_meta.json +0 -0
  523. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/surv_cox_ties_r_results.json +0 -0
  524. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/surv_cox_two_cov_meta.json +0 -0
  525. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/surv_cox_two_cov_r_results.json +0 -0
  526. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/surv_km_basic_meta.json +0 -0
  527. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/surv_km_basic_r_results.json +0 -0
  528. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/surv_km_heavy_cens_meta.json +0 -0
  529. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/surv_km_heavy_cens_r_results.json +0 -0
  530. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/surv_km_loglog_ci_meta.json +0 -0
  531. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/surv_km_loglog_ci_r_results.json +0 -0
  532. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/surv_km_no_cens_meta.json +0 -0
  533. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/surv_km_no_cens_r_results.json +0 -0
  534. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/surv_km_plain_ci_meta.json +0 -0
  535. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/surv_km_plain_ci_r_results.json +0 -0
  536. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/surv_km_ties_meta.json +0 -0
  537. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/surv_km_ties_r_results.json +0 -0
  538. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/surv_lr_peto_meta.json +0 -0
  539. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/surv_lr_peto_r_results.json +0 -0
  540. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/surv_lr_three_group_meta.json +0 -0
  541. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/surv_lr_three_group_r_results.json +0 -0
  542. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/surv_lr_two_group_meta.json +0 -0
  543. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/surv_lr_two_group_r_results.json +0 -0
  544. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/tall_skinny.csv +0 -0
  545. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/tall_skinny_meta.json +0 -0
  546. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/tall_skinny_r_results.json +0 -0
  547. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/validate_against_r.py +0 -0
  548. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/weights_offset_cases.json +0 -0
  549. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/fixtures/weights_offset_r_results.json +0 -0
  550. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/gam/__init__.py +0 -0
  551. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/gam/test_gam.py +0 -0
  552. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/hypothesis/__init__.py +0 -0
  553. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/hypothesis/conftest.py +0 -0
  554. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/hypothesis/test_backend_convention.py +0 -0
  555. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/hypothesis/test_chisq_test.py +0 -0
  556. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/hypothesis/test_design_split.py +0 -0
  557. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/hypothesis/test_fisher_test.py +0 -0
  558. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/hypothesis/test_gpu.py +0 -0
  559. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/hypothesis/test_ks_test.py +0 -0
  560. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/hypothesis/test_p_adjust.py +0 -0
  561. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/hypothesis/test_prop_test.py +0 -0
  562. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/hypothesis/test_r_validation.py +0 -0
  563. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/hypothesis/test_t_test.py +0 -0
  564. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/hypothesis/test_var_test.py +0 -0
  565. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/hypothesis/test_wilcox_test.py +0 -0
  566. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/mice/__init__.py +0 -0
  567. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/mice/references/generate_categorical_fixtures.R +0 -0
  568. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/mice/references/generate_mice_fixtures.R +0 -0
  569. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/mice/references/mice_categorical_data.csv +0 -0
  570. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/mice/references/mice_categorical_reference.json +0 -0
  571. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/mice/references/mice_reference.json +0 -0
  572. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/mice/references/mice_validation_complete.csv +0 -0
  573. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/mice/references/mice_validation_data.csv +0 -0
  574. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/mice/test_categorical.py +0 -0
  575. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/mice/test_datasets.py +0 -0
  576. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/mice/test_design.py +0 -0
  577. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/mice/test_gpu.py +0 -0
  578. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/mice/test_gpu_glm_separation.py +0 -0
  579. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/mice/test_gpu_mps.py +0 -0
  580. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/mice/test_gpu_polr_draw.py +0 -0
  581. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/mice/test_gpu_polr_separation.py +0 -0
  582. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/mice/test_methods.py +0 -0
  583. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/mice/test_mice.py +0 -0
  584. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/mice/test_polr_ridge_characterization.py +0 -0
  585. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/mice/test_pooling.py +0 -0
  586. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/mice/test_r_validation.py +0 -0
  587. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/mice/test_r_validation_categorical.py +0 -0
  588. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/mice/test_rng.py +0 -0
  589. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/mice/test_visit.py +0 -0
  590. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/mixed/__init__.py +0 -0
  591. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/mixed/conftest.py +0 -0
  592. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/mixed/test_compute_se.py +0 -0
  593. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/mixed/test_conf_int.py +0 -0
  594. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/mixed/test_glmm.py +0 -0
  595. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/mixed/test_grm.py +0 -0
  596. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/mixed/test_lmm_crossed.py +0 -0
  597. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/mixed/test_lmm_extreme_ratio.py +0 -0
  598. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/mixed/test_lmm_intercept.py +0 -0
  599. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/mixed/test_lmm_nested.py +0 -0
  600. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/mixed/test_lmm_slope.py +0 -0
  601. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/mixed/test_pls.py +0 -0
  602. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/mixed/test_r_validation.py +0 -0
  603. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/mixed/test_random_effects.py +0 -0
  604. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/mixed/test_satterthwaite.py +0 -0
  605. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/mixed/test_singular.py +0 -0
  606. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/mixed/test_structured.py +0 -0
  607. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/montecarlo/__init__.py +0 -0
  608. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/montecarlo/conftest.py +0 -0
  609. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/montecarlo/test_backend_convention.py +0 -0
  610. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/montecarlo/test_batched_solver.py +0 -0
  611. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/montecarlo/test_boot_ci.py +0 -0
  612. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/montecarlo/test_bootstrap.py +0 -0
  613. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/montecarlo/test_gpu.py +0 -0
  614. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/montecarlo/test_influence.py +0 -0
  615. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/montecarlo/test_permutation.py +0 -0
  616. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/montecarlo/test_r_validation.py +0 -0
  617. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/multinomial/__init__.py +0 -0
  618. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/multinomial/test_conf_int.py +0 -0
  619. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/multinomial/test_multinom.py +0 -0
  620. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/multivariate/__init__.py +0 -0
  621. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/multivariate/test_multivariate.py +0 -0
  622. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/mvnmle/references/apple_em_reference.json +0 -0
  623. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/mvnmle/references/apple_reference.json +0 -0
  624. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/mvnmle/references/generate_em_fixtures.R +0 -0
  625. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/mvnmle/references/little_mcar_apple.json +0 -0
  626. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/mvnmle/references/little_mcar_complete.json +0 -0
  627. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/mvnmle/references/little_mcar_extreme.json +0 -0
  628. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/mvnmle/references/little_mcar_missvals.json +0 -0
  629. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/mvnmle/references/little_mcar_simple_mcar.json +0 -0
  630. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/mvnmle/references/little_mcar_summary.json +0 -0
  631. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/mvnmle/references/missvals_em_reference.json +0 -0
  632. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/mvnmle/references/missvals_reference.json +0 -0
  633. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/mvnmle/references/small_test_reference.json +0 -0
  634. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/mvnmle/test_backend_routing.py +0 -0
  635. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/mvnmle/test_degeneracy.py +0 -0
  636. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/mvnmle/test_em.py +0 -0
  637. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/mvnmle/test_gpu.py +0 -0
  638. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/mvnmle/test_gpu_batched_equiv.py +0 -0
  639. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/mvnmle/test_gpu_unpack_equiv.py +0 -0
  640. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/mvnmle/test_mcar.py +0 -0
  641. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/mvnmle/test_mlest.py +0 -0
  642. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/mvnmle/test_monotone.py +0 -0
  643. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/mvnmle/test_no_silent_fallback.py +0 -0
  644. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/mvnmle/test_optimize.py +0 -0
  645. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/mvnmle/test_pattern_codes_large_p.py +0 -0
  646. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/mvnmle/test_squarem.py +0 -0
  647. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/ordinal/__init__.py +0 -0
  648. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/ordinal/test_conf_int.py +0 -0
  649. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/ordinal/test_information.py +0 -0
  650. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/ordinal/test_ordinal.py +0 -0
  651. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/regression/benchmark.py +0 -0
  652. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/regression/benchmark.r +0 -0
  653. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/regression/conftest.py +0 -0
  654. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/regression/test_conf_int.py +0 -0
  655. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/regression/test_fit.py +0 -0
  656. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/regression/test_gamma_nb.py +0 -0
  657. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/regression/test_glm.py +0 -0
  658. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/regression/test_glm_gpu.py +0 -0
  659. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/regression/test_glm_r_validation.py +0 -0
  660. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/regression/test_gpu_fp32_acceptance.py +0 -0
  661. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/regression/test_gpu_mps_cg.py +0 -0
  662. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/regression/test_gpu_se_ill_conditioned.py +0 -0
  663. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/regression/test_ic_dispersion_r_match.py +0 -0
  664. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/regression/test_irls_step.py +0 -0
  665. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/regression/test_module_split.py +0 -0
  666. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/regression/test_nb_autotheta_r_validation.py +0 -0
  667. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/regression/test_r_validation.py +0 -0
  668. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/regression/test_ridge.py +0 -0
  669. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/regression/test_stress_gpu.py +0 -0
  670. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/regression/test_terms.py +0 -0
  671. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/regression/test_terms_gpu.py +0 -0
  672. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/regression/test_weights_offset.py +0 -0
  673. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/regression/test_weights_offset_gpu.py +0 -0
  674. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/regression/test_weights_offset_r_validation.py +0 -0
  675. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/survival/__init__.py +0 -0
  676. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/survival/conftest.py +0 -0
  677. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/survival/test_conf_int.py +0 -0
  678. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/survival/test_coxph.py +0 -0
  679. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/survival/test_discrete_conf_int.py +0 -0
  680. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/survival/test_discrete_time.py +0 -0
  681. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/survival/test_gpu.py +0 -0
  682. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/survival/test_kaplan_meier.py +0 -0
  683. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/survival/test_logrank.py +0 -0
  684. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/survival/test_r_validation.py +0 -0
  685. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/survival/test_uniform_accessors_and_errors.py +0 -0
  686. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/survival/test_warnings.py +0 -0
  687. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/test_code_quality.py +0 -0
  688. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/timeseries/__init__.py +0 -0
  689. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/timeseries/test_acf_stationarity.py +0 -0
  690. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/timeseries/test_arima.py +0 -0
  691. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/timeseries/test_decomposition.py +0 -0
  692. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/timeseries/test_loess.py +0 -0
  693. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/timeseries/test_stl_r_parity.py +0 -0
  694. {pystatistics-4.6.2 → pystatistics-4.6.3}/tests/timeseries/test_stl_robust.py +0 -0
  695. {pystatistics-4.6.2 → pystatistics-4.6.3}/validation/README.md +0 -0
  696. {pystatistics-4.6.2 → pystatistics-4.6.3}/validation/pyproject.toml +0 -0
  697. {pystatistics-4.6.2 → pystatistics-4.6.3}/validation/pystatsval/__init__.py +0 -0
  698. {pystatistics-4.6.2 → pystatistics-4.6.3}/validation/pystatsval/device.py +0 -0
  699. {pystatistics-4.6.2 → pystatistics-4.6.3}/validation/pystatsval/estimates.py +0 -0
  700. {pystatistics-4.6.2 → pystatistics-4.6.3}/validation/pystatsval/measure.py +0 -0
  701. {pystatistics-4.6.2 → pystatistics-4.6.3}/validation/pystatsval/record.py +0 -0
  702. {pystatistics-4.6.2 → pystatistics-4.6.3}/validation/pystatsval/rrunner.py +0 -0
  703. {pystatistics-4.6.2 → pystatistics-4.6.3}/validation/pystatsval/serialize.py +0 -0
  704. {pystatistics-4.6.2 → pystatistics-4.6.3}/validation/pystatsval/timing.py +0 -0
  705. {pystatistics-4.6.2 → pystatistics-4.6.3}/validation/tests/test_harness.py +0 -0
@@ -0,0 +1,69 @@
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
+ - **timeseries: damped-trend ETS fits no longer stall (damped fits improve
13
+ or stay identical; every other fit changes only if it previously ran out
14
+ of optimiser budget).** Two compounding defects in
15
+ `timeseries/_ets_fit.py`: (1) R's `initparam` starts `phi` at 0.9782 —
16
+ 99% of the way to the 0.98 usual-region bound — which is fine for R's
17
+ derivative-free Nelder-Mead but saturates our logit transform, so the
18
+ numerical gradient in the phi direction was ~4% of mid-range (sigmoid
19
+ derivative 0.0099 vs 0.25) and L-BFGS-B crawled; (2) scipy's default
20
+ `maxfun=15000` allows only ~830 iterations for a 17-parameter seasonal
21
+ model (numerical gradient = n+1 evals/iteration), so the requested
22
+ `maxiter=1000` was unreachable and co2 `MAdM` died with "EVALUATIONS
23
+ EXCEEDS LIMIT" at `converged=False`, ~1.7 AICc worse than its true
24
+ optimum. Fix: damped models now optimise from BOTH a mid-range phi start
25
+ (0.9) and R's initparam start (0.9782), keeping the better optimum, and
26
+ `maxfun = max(15000, max_iter*(n_free+1)*2)` — floored at scipy's old
27
+ default so no fit ever gets a smaller budget than 4.6.2 gave it. That
28
+ floor makes the guarantee provable: the R-start leg reproduces the 4.6.2
29
+ trajectory (deterministic, with at least the old budget), so damped
30
+ results are never worse, and any fit that terminated within the old
31
+ budget (every reference fit does) is bit-identical unless damped. The
32
+ phi bounds stay R's (0.8, 0.98). Verified at full precision on 15 damped
33
+ reference fits: 7 improved (co2 MAdM aicc 172.592→170.898 and now
34
+ converged, beating R's own damped optimum; usaccdeaths MAdA −0.25), 8
35
+ bit-identical, zero worse, all `converged=True`; all non-damped
36
+ reference fits bit-identical; all 10 reference ZZZ selections unchanged
37
+ (on non-reference series a damped candidate whose fit improved can now
38
+ legitimately win a selection it previously lost — that is the point of
39
+ the fix).
40
+ - **timeseries: `converged=False` false-negative on damped ETS fits fixed**
41
+ — it was the evaluation-budget exhaustion above, not a flag-logic bug; a
42
+ damped fit that reaches its optimum now reports `converged=True` (new
43
+ regression tests pin this for co2/airpassengers/usaccdeaths/lynx/nile/
44
+ wwwusage damped fits).
45
+ - **timeseries/tests: honest cross-engine ETS verification encoded as a
46
+ regression gate.** A prior review claimed our ZZZ selections were worse
47
+ than R's because refitting our picked model string in R gave a higher
48
+ AICc — but that only re-runs R's own Nelder-Mead (the optimiser being
49
+ compared) and reproduces its stall. The fair test — evaluating OUR fitted
50
+ parameters with R's own likelihood code `forecast:::pegelsresid.C`
51
+ (seasonal states reversed into R's ordering) — shows our pick has strictly
52
+ lower AICc under R's own criterion on all 6 divergent reference datasets
53
+ (e.g. co2: our M,A,M scores 1697.2 in R vs 1722.6 for R's chosen M,Ad,M)
54
+ and equal-or-better on the 4 agreeing ones, with every pick admissible
55
+ under R's `admissible()`. The fixture regeneration is now two-stage
56
+ (`tests/fixtures/generate_ets_py_params.py` dumps our fitted parameters,
57
+ `generate_ets_r_reference.R` cross-scores them; the transplant harness
58
+ self-validates by reproducing R's own fits' log-likelihoods before
59
+ scoring foreign parameters, and stores `py_pick`/`py_pick_aicc_in_r`/
60
+ `py_pick_admissible` per dataset). New tests
61
+ (`test_selection_dominates_r_under_r_own_likelihood`, drift-guarded on
62
+ the stored pick) fail if any future change degrades a selection to
63
+ something R's own numbers call worse. `_ets_select.py`'s parity
64
+ documentation now states this verification method explicitly instead of
65
+ a vague "better than R". The selection/parity/damped-convergence tests
66
+ moved to a new `tests/timeseries/test_ets_selection.py` (`test_ets.py`
67
+ had exceeded the 500-LoC limit; now 382 + 262). The R generator now
68
+ refuses to run without the stage-1 params dump instead of silently
69
+ writing a fixture missing the fields ten tests require.
@@ -1,5 +1,36 @@
1
1
  # Changelog
2
2
 
3
+ ## 4.6.3
4
+
5
+ Damped-trend ETS fits no longer stall; ETS-vs-R verification strengthened.
6
+
7
+ - **Damped-trend ETS models (`Ad`) could stall short of their optimum and
8
+ report `converged=False` — fixed.** The damping parameter started so close
9
+ to its upper bound that the optimiser could barely move it, and larger
10
+ seasonal models could also exhaust their evaluation budget mid-fit (e.g.
11
+ `ets(co2, model="MAdM", period=12)` returned `converged=False` about 1.7
12
+ AICc above its true optimum). Damped models are now optimised from two
13
+ starting points with the better result kept — one of them reproduces the
14
+ previous behaviour with at least the previous evaluation budget, so
15
+ damped fits improve or stay identical, never worse — and the evaluation
16
+ budget now scales with model size (never below its old value). Converged
17
+ damped fits now say so. Any fit that finished within the old budget is
18
+ bit-identical unless damped; on every reference dataset all non-damped
19
+ fits are bit-identical and automatic `"ZZZ"` selection picks the same
20
+ model as before. On other series a damped candidate whose fit improved
21
+ can now win a selection it previously lost — the intended effect.
22
+ - **The claim that `ets()` model selection beats `forecast::ets` on
23
+ divergent picks is now verified the fair way and enforced by tests.**
24
+ Where automatic selection differs from R (6 of 10 reference datasets),
25
+ our selected model's fitted parameters are evaluated by *R's own
26
+ likelihood code* and score a strictly lower AICc there than the model R
27
+ selects (e.g. monthly CO2: 1697.2 vs 1722.6), while remaining in R's
28
+ admissible (forecast-stable) parameter region. Refitting the same model
29
+ string in R understates our fit because it re-runs R's optimiser, which
30
+ is what stalls in the first place. The cross-scored values ship in the
31
+ test fixtures and regression tests fail if a future change makes any
32
+ selection worse under R's own numbers.
33
+
3
34
  ## 4.6.2
4
35
 
5
36
  STL decomposition rewritten to match R exactly and now as fast as R's
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pystatistics
3
- Version: 4.6.2
3
+ Version: 4.6.3
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,21 @@ pip install pystatistics[dev]
418
418
 
419
419
  ## What's New
420
420
 
421
+ ### 4.6.3 — damped-trend ETS fits no longer stall
422
+
423
+ Damped-trend ETS models (`Ad`) could stop short of their optimum and report
424
+ `converged=False` (the damping parameter started nearly pinned to its upper
425
+ bound, and large seasonal fits could exhaust their evaluation budget).
426
+ Damped models are now optimised from two starting points with the better
427
+ result kept; damped fits improve or stay identical, non-damped fits are
428
+ unchanged, and automatic `"ZZZ"` selection picks the same models on every
429
+ reference dataset (elsewhere an improved damped fit can now win a selection
430
+ it previously lost — the intended effect). Where that
431
+ selection differs from R's `forecast::ets`, the choice is now verified by
432
+ evaluating the fitted parameters under R's own likelihood code — our pick
433
+ scores a strictly lower AICc there on every divergent reference dataset —
434
+ and regression tests enforce that this stays true.
435
+
421
436
  ### 4.6.2 — STL matches R exactly and runs as fast; ETS automatic model selection
422
437
 
423
438
  `stl()` was rewritten after validation showed it leaking trend into the
@@ -371,6 +371,21 @@ pip install pystatistics[dev]
371
371
 
372
372
  ## What's New
373
373
 
374
+ ### 4.6.3 — damped-trend ETS fits no longer stall
375
+
376
+ Damped-trend ETS models (`Ad`) could stop short of their optimum and report
377
+ `converged=False` (the damping parameter started nearly pinned to its upper
378
+ bound, and large seasonal fits could exhaust their evaluation budget).
379
+ Damped models are now optimised from two starting points with the better
380
+ result kept; damped fits improve or stay identical, non-damped fits are
381
+ unchanged, and automatic `"ZZZ"` selection picks the same models on every
382
+ reference dataset (elsewhere an improved damped fit can now win a selection
383
+ it previously lost — the intended effect). Where that
384
+ selection differs from R's `forecast::ets`, the choice is now verified by
385
+ evaluating the fitted parameters under R's own likelihood code — our pick
386
+ scores a strictly lower AICc there on every divergent reference dataset —
387
+ and regression tests enforce that this stays true.
388
+
374
389
  ### 4.6.2 — STL matches R exactly and runs as fast; ETS automatic model selection
375
390
 
376
391
  `stl()` was rewritten after validation showed it leaking trend into the
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "pystatistics"
7
- version = "4.6.2"
7
+ version = "4.6.3"
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.2"
19
+ __version__ = "4.6.3"
20
20
  __author__ = "Hai-Shuo"
21
21
  __email__ = "contact@sgcx.org"
22
22
 
@@ -542,8 +542,21 @@ def fit_ets_model(
542
542
  g0 = _EPS + 0.05 * (min(1.0 - _EPS, 1.0 - a0) - _EPS)
543
543
  theta_smooth0[i] = _logit(g0, _EPS, 1.0 - a0)
544
544
  i += 1
545
- if spec.damped and phi is None:
546
- p0 = _PHI_BOUNDS[0] + 0.99 * (_PHI_BOUNDS[1] - _PHI_BOUNDS[0])
545
+ phi_free = spec.damped and phi is None
546
+ if phi_free:
547
+ # R's initparam starts phi at 0.9782 — 99% of the way to the 0.98
548
+ # bound. That is fine for R's derivative-free Nelder-Mead but
549
+ # saturates the logit transform for L-BFGS-B: the sigmoid
550
+ # derivative there is ~4% of mid-range (0.0099 vs 0.25), so the
551
+ # numerical gradient in the phi direction all but vanishes and
552
+ # damped fits crawl (co2 MAdM exhausted its evaluation budget
553
+ # unconverged). A
554
+ # mid-range start keeps the phi gradient alive but can land in the
555
+ # other phi basin on some series, so damped fits are run from BOTH
556
+ # starts and the better optimum kept (see the optimiser call) —
557
+ # provably never worse than the single R start. The bounds
558
+ # themselves stay R's (0.8, 0.98) usual region.
559
+ p0 = 0.9
547
560
  theta_smooth0[i] = _logit(p0, _PHI_BOUNDS[0], _PHI_BOUNDS[1])
548
561
 
549
562
  # Free initial states (unbounded). Seasonal models optimise m - 1
@@ -570,12 +583,45 @@ def fit_ets_model(
570
583
  theta_full, y_arr, spec, fixed_smooth, alpha_box, n_smooth
571
584
  )
572
585
 
573
- result = minimize(
574
- _objective,
575
- theta0[free_idx],
576
- method="L-BFGS-B",
577
- options={"maxiter": max_iter, "ftol": tol, "gtol": tol},
578
- )
586
+ # Damped models are optimised from two phi starts (mid-range 0.9 and
587
+ # R's initparam 0.9782 — see the phi_free comment above) and the
588
+ # better optimum kept; other models run once.
589
+ starts = [theta0]
590
+ if phi_free:
591
+ alt = theta0.copy()
592
+ alt[n_smooth - 1] = _logit(
593
+ _PHI_BOUNDS[0] + 0.99 * (_PHI_BOUNDS[1] - _PHI_BOUNDS[0]),
594
+ _PHI_BOUNDS[0],
595
+ _PHI_BOUNDS[1],
596
+ )
597
+ starts.append(alt)
598
+
599
+ # maxfun must scale with dimension or it, not maxiter, becomes the
600
+ # binding limit: scipy's default (15000) allows only ~830 iterations
601
+ # for a 17-parameter seasonal model (numerical gradient = n+1 evals
602
+ # per iteration), so requesting maxiter=1000 was unreachable and large
603
+ # damped fits died with "EVALUATIONS EXCEEDS LIMIT" (converged=False).
604
+ # (n+1) evals per gradient, x2 headroom for line searches; floored at
605
+ # scipy's old default so no fit ever gets a SMALLER budget than
606
+ # before — that floor is what makes the two-start damped strategy
607
+ # provably never worse (the R-start leg reproduces the old
608
+ # trajectory) and keeps every other fit bit-identical.
609
+ maxfun = max(15000, max_iter * (len(free_idx) + 1) * 2)
610
+ result = None
611
+ for start in starts:
612
+ res = minimize(
613
+ _objective,
614
+ start[free_idx],
615
+ method="L-BFGS-B",
616
+ options={
617
+ "maxiter": max_iter,
618
+ "maxfun": maxfun,
619
+ "ftol": tol,
620
+ "gtol": tol,
621
+ },
622
+ )
623
+ if result is None or res.fun < result.fun:
624
+ result = res
579
625
  converged = result.success
580
626
 
581
627
  # Reconstruct full theta and map back to bounded values
@@ -57,15 +57,29 @@ with the remaining one fixed by normalisation — see ``_ets_fit.py``),
57
57
  so per-candidate parameter counts and log-likelihoods are directly
58
58
  comparable to R's. The *selected model* usually matches but can still
59
59
  differ, because the engines optimise differently: PyStatistics uses
60
- L-BFGS-B on logit-transformed parameters, R uses Nelder-Mead, and on
61
- seasonal candidates R's optimiser frequently stalls well short of the
62
- optimum (tens of log-likelihood units on the classic benchmark
63
- series). In every observed divergence (AirPassengers, co2, lynx in
64
- ``tests/fixtures/ets_r_reference.json``) the PyStatistics selection has
65
- a *better* value of R's own criterion than R's selection — the tables
66
- disagree about the optima, not the criterion. Each returned solution
67
- discloses its full candidate IC table in ``info["selection"]``, so any
68
- selection can be audited.
60
+ L-BFGS-B on logit-transformed parameters (damped models from two phi
61
+ starts), R uses Nelder-Mead, and on seasonal candidates R's optimiser
62
+ frequently stalls well short of the optimum (tens of log-likelihood
63
+ units on the classic benchmark series).
64
+
65
+ Every divergence is verified by the only fair cross-engine test:
66
+ PyStatistics' *fitted parameters* are evaluated by **R's own likelihood
67
+ code** (``forecast:::pegelsresid.C``, with the seasonal states reversed
68
+ into R's ordering; the transplant harness is self-validated by first
69
+ reproducing R's own fits' log-likelihoods to 1e-8 relative tolerance).
70
+ Refitting the same
71
+ model string in R would merely re-run R's Nelder-Mead — the very
72
+ optimiser being compared — and reproduce its stall. Under that test,
73
+ on all six divergent reference selections (AirPassengers, co2, lynx and
74
+ variants in ``tests/fixtures/ets_r_reference.json``) the PyStatistics
75
+ pick has a strictly lower AICc under R's own likelihood than the model
76
+ ``forecast::ets`` selects, and its parameters are admissible
77
+ (forecast-stable) under R's own ``admissible()`` check. The scored
78
+ values are stored in the fixture (``py_pick_aicc_in_r``) and pinned by
79
+ regression tests; regenerate with ``generate_ets_py_params.py`` then
80
+ ``generate_ets_r_reference.R``. The tables disagree about the optima,
81
+ not the criterion. Each returned solution discloses its full candidate
82
+ IC table in ``info["selection"]``, so any selection can be audited.
69
83
  """
70
84
 
71
85
  from __future__ import annotations
@@ -0,0 +1,237 @@
1
+ {
2
+ "airpassengers": {
3
+ "picked": "ETS(M,A,M)",
4
+ "error": "M",
5
+ "trend": "A",
6
+ "season": "M",
7
+ "damped": false,
8
+ "period": 12,
9
+ "alpha": 0.7409340242098023,
10
+ "beta": 0.00010000076169295685,
11
+ "gamma": 0.00010005920080370926,
12
+ "phi": null,
13
+ "init_level": 122.79644644403064,
14
+ "init_trend": 2.129237987080646,
15
+ "init_season": [
16
+ 0.9065254936956091,
17
+ 0.8885773704991264,
18
+ 1.012442088634839,
19
+ 0.9820704726765775,
20
+ 0.9810735260927437,
21
+ 1.1101215440958783,
22
+ 1.2318886786272436,
23
+ 1.2201103859365203,
24
+ 1.056876738889878,
25
+ 0.9199475432085753,
26
+ 0.7968985140153373,
27
+ 0.8934676436276712
28
+ ],
29
+ "aicc_py_convention": 1083.85273722301,
30
+ "converged": true
31
+ },
32
+ "usaccdeaths": {
33
+ "picked": "ETS(A,N,A)",
34
+ "error": "A",
35
+ "trend": "N",
36
+ "season": "A",
37
+ "damped": false,
38
+ "period": 12,
39
+ "alpha": 0.5786178234192573,
40
+ "beta": null,
41
+ "gamma": 0.0001,
42
+ "phi": null,
43
+ "init_level": 9741.666419160323,
44
+ "init_trend": null,
45
+ "init_season": [
46
+ -792.958856989011,
47
+ -1544.866345494225,
48
+ -758.2273234609411,
49
+ -536.1023594337732,
50
+ 322.07088058544423,
51
+ 802.4044677641663,
52
+ 1668.926889520922,
53
+ 974.1591215399224,
54
+ -66.02205748708626,
55
+ 232.711277283187,
56
+ -282.0077245809384,
57
+ -20.087969247666628
58
+ ],
59
+ "aicc_py_convention": 1039.4141176863654,
60
+ "converged": true
61
+ },
62
+ "co2": {
63
+ "picked": "ETS(M,A,M)",
64
+ "error": "M",
65
+ "trend": "A",
66
+ "season": "M",
67
+ "damped": false,
68
+ "period": 12,
69
+ "alpha": 0.6621853124252347,
70
+ "beta": 0.010608746654465878,
71
+ "gamma": 0.0007307829692142658,
72
+ "phi": null,
73
+ "init_level": 315.3608726579102,
74
+ "init_trend": 0.08480820178629678,
75
+ "init_season": [
76
+ 0.9998757011060313,
77
+ 1.0018551346557558,
78
+ 1.0040645319341568,
79
+ 1.0074253427806026,
80
+ 1.008857198520008,
81
+ 1.006905738849209,
82
+ 1.0024116732983697,
83
+ 0.9962849951627571,
84
+ 0.9908973218114535,
85
+ 0.9903511862513498,
86
+ 0.9938810738299224,
87
+ 0.997190101800384
88
+ ],
89
+ "aicc_py_convention": 147.8320733184404,
90
+ "converged": true
91
+ },
92
+ "nile": {
93
+ "picked": "ETS(M,N,N)",
94
+ "error": "M",
95
+ "trend": "N",
96
+ "season": "N",
97
+ "damped": false,
98
+ "period": 1,
99
+ "alpha": 0.15120889034467438,
100
+ "beta": null,
101
+ "gamma": null,
102
+ "phi": null,
103
+ "init_level": 1087.754615467445,
104
+ "init_trend": null,
105
+ "init_season": null,
106
+ "aicc_py_convention": 1281.822594111822,
107
+ "converged": true
108
+ },
109
+ "wwwusage": {
110
+ "picked": "ETS(A,Ad,N)",
111
+ "error": "A",
112
+ "trend": "Ad",
113
+ "season": "N",
114
+ "damped": true,
115
+ "period": 1,
116
+ "alpha": 0.9998999990820521,
117
+ "beta": 0.9998998503151512,
118
+ "gamma": null,
119
+ "phi": 0.8066680914946358,
120
+ "init_level": 92.9583864776785,
121
+ "init_trend": -6.14670285926298,
122
+ "init_season": null,
123
+ "aicc_py_convention": 540.9123279450281,
124
+ "converged": true
125
+ },
126
+ "lynx": {
127
+ "picked": "ETS(M,A,N)",
128
+ "error": "M",
129
+ "trend": "A",
130
+ "season": "N",
131
+ "damped": false,
132
+ "period": 1,
133
+ "alpha": 0.9999,
134
+ "beta": 0.0001,
135
+ "gamma": null,
136
+ "phi": null,
137
+ "init_level": 104.80092766288334,
138
+ "init_trend": 89.34198077164446,
139
+ "init_season": null,
140
+ "aicc_py_convention": 1825.536853187305,
141
+ "converged": true
142
+ },
143
+ "diff_nile": {
144
+ "picked": "ETS(A,N,N)",
145
+ "error": "A",
146
+ "trend": "N",
147
+ "season": "N",
148
+ "damped": false,
149
+ "period": 1,
150
+ "alpha": 0.00010008018498308305,
151
+ "beta": null,
152
+ "gamma": null,
153
+ "phi": null,
154
+ "init_level": -3.837001886361001,
155
+ "init_trend": null,
156
+ "init_season": null,
157
+ "aicc_py_convention": 1300.907562564694,
158
+ "converged": true
159
+ },
160
+ "airpassengers_zzn": {
161
+ "picked": "ETS(M,A,N)",
162
+ "error": "M",
163
+ "trend": "A",
164
+ "season": "N",
165
+ "damped": false,
166
+ "period": 1,
167
+ "alpha": 0.9998997260462488,
168
+ "beta": 0.00010000511832230999,
169
+ "gamma": null,
170
+ "phi": null,
171
+ "init_level": 106.6432773543166,
172
+ "init_trend": 4.165946497198817,
173
+ "init_season": null,
174
+ "aicc_py_convention": 1366.4125174351261,
175
+ "converged": true
176
+ },
177
+ "airpassengers_azz": {
178
+ "picked": "ETS(A,A,A)",
179
+ "error": "A",
180
+ "trend": "A",
181
+ "season": "A",
182
+ "damped": false,
183
+ "period": 12,
184
+ "alpha": 0.25276704707869657,
185
+ "beta": 0.00010000741679970583,
186
+ "gamma": 0.7472328134083621,
187
+ "phi": null,
188
+ "init_level": 117.90776886286908,
189
+ "init_trend": 2.5946657964894193,
190
+ "init_season": [
191
+ -8.500669715398159,
192
+ -2.928236169263969,
193
+ 9.55479917171517,
194
+ 4.317353244662001,
195
+ -4.423572632956558,
196
+ 9.679454457800507,
197
+ 21.866719726803083,
198
+ 19.38694357550404,
199
+ 5.159781796259593,
200
+ -13.774991234367437,
201
+ -28.379683743002367,
202
+ -11.957898477755913
203
+ ],
204
+ "aicc_py_convention": 1168.8597581594572,
205
+ "converged": true
206
+ },
207
+ "airpassengers_mzz": {
208
+ "picked": "ETS(M,A,M)",
209
+ "error": "M",
210
+ "trend": "A",
211
+ "season": "M",
212
+ "damped": false,
213
+ "period": 12,
214
+ "alpha": 0.7409340242098023,
215
+ "beta": 0.00010000076169295685,
216
+ "gamma": 0.00010005920080370926,
217
+ "phi": null,
218
+ "init_level": 122.79644644403064,
219
+ "init_trend": 2.129237987080646,
220
+ "init_season": [
221
+ 0.9065254936956091,
222
+ 0.8885773704991264,
223
+ 1.012442088634839,
224
+ 0.9820704726765775,
225
+ 0.9810735260927437,
226
+ 1.1101215440958783,
227
+ 1.2318886786272436,
228
+ 1.2201103859365203,
229
+ 1.056876738889878,
230
+ 0.9199475432085753,
231
+ 0.7968985140153373,
232
+ 0.8934676436276712
233
+ ],
234
+ "aicc_py_convention": 1083.85273722301,
235
+ "converged": true
236
+ }
237
+ }
@@ -0,0 +1 @@
1
+ {"selection":{"airpassengers":{"name":"airpassengers","x":[112,118,132,129,121,135,148,148,136,119,104,118,115,126,141,135,125,149,170,170,158,133,114,140,145,150,178,163,172,178,199,199,184,162,146,166,171,180,193,181,183,218,230,242,209,191,172,194,196,196,236,235,229,243,264,272,237,211,180,201,204,188,235,227,234,264,302,293,259,229,203,229,242,233,267,269,270,315,364,347,312,274,237,278,284,277,317,313,318,374,413,405,355,306,271,306,315,301,356,348,355,422,465,467,404,347,305,336,340,318,362,348,363,435,491,505,404,359,310,337,360,342,406,396,420,472,548,559,463,407,362,405,417,391,419,461,472,535,622,606,508,461,390,432],"period":12,"model_arg":"ZZZ","method":"ETS(M,Ad,M)","components":["M","A","M","TRUE"],"loglik":-679.583216236962,"aic":1395.16643247392,"aicc":1400.63843247392,"bic":1448.62307186629,"n":144,"py_pick":"ETS(M,A,M)","py_pick_aicc_in_r":1390.85155479901,"py_pick_admissible":1},"usaccdeaths":{"name":"usaccdeaths","x":[9007,8106,8928,9137,10017,10826,11317,10744,9713,9938,9161,8927,7750,6981,8038,8422,8714,9512,10120,9823,8743,9129,8710,8680,8162,7306,8124,7870,9387,9556,10093,9620,8285,8466,8160,8034,7717,7461,7767,7925,8623,8945,10078,9179,8037,8488,7874,8647,7792,6957,7726,8106,8890,9299,10625,9302,8314,8850,8265,8796,7836,6892,7791,8192,9115,9434,10484,9827,9110,9070,8633,9240],"period":12,"model_arg":"ZZZ","method":"ETS(A,N,A)","components":["A","N","A","FALSE"],"loglik":-555.072335012621,"aic":1140.14467002524,"aicc":1148.71609859667,"bic":1174.29466181048,"n":72,"py_pick":"ETS(A,N,A)","py_pick_aicc_in_r":1143.00692947405,"py_pick_admissible":1},"co2":{"name":"co2","x":[315.42,316.31,316.5,317.56,318.13,318,316.39,314.65,313.68,313.18,314.66,315.43,316.27,316.81,317.42,318.87,319.87,319.43,318.01,315.74,314,313.68,314.84,316.03,316.73,317.54,318.38,319.31,320.42,319.61,318.42,316.63,314.83,315.16,315.94,316.85,317.78,318.4,319.53,320.42,320.85,320.45,319.45,317.25,316.11,315.27,316.53,317.53,318.58,318.92,319.7,321.22,322.08,321.31,319.58,317.61,316.05,315.83,316.91,318.2,319.41,320.07,320.74,321.4,322.06,321.73,320.27,318.54,316.54,316.71,317.53,318.55,319.27,320.28,320.73,321.97,322,321.71,321.05,318.71,317.66,317.14,318.7,319.25,320.46,321.43,322.23,323.54,323.91,323.59,322.24,320.2,318.48,317.94,319.63,320.87,322.17,322.34,322.88,324.25,324.83,323.93,322.38,320.76,319.1,319.24,320.56,321.8,322.4,322.99,323.73,324.86,325.4,325.2,323.98,321.95,320.18,320.09,321.16,322.74,323.83,324.26,325.47,326.5,327.21,326.54,325.72,323.5,322.22,321.62,322.69,323.95,324.89,325.82,326.77,327.97,327.91,327.5,326.18,324.53,322.93,322.9,323.85,324.96,326.01,326.51,327.01,327.62,328.76,328.4,327.2,325.27,323.2,323.4,324.63,325.85,326.6,327.47,327.58,329.56,329.9,328.92,327.88,326.16,324.68,325.04,326.34,327.39,328.37,329.4,330.14,331.33,332.31,331.9,330.7,329.15,327.35,327.02,327.99,328.48,329.18,330.55,331.32,332.48,332.92,332.08,331.01,329.23,327.27,327.21,328.29,329.41,330.23,331.25,331.87,333.14,333.8,333.43,331.73,329.9,328.4,328.17,329.32,330.59,331.58,332.39,333.33,334.41,334.71,334.17,332.89,330.77,329.14,328.78,330.14,331.52,332.75,333.24,334.53,335.9,336.57,336.1,334.76,332.59,331.42,330.98,332.24,333.68,334.8,335.22,336.47,337.59,337.84,337.72,336.37,334.51,332.6,332.38,333.75,334.78,336.05,336.59,337.79,338.71,339.3,339.12,337.56,335.92,333.75,333.7,335.12,336.56,337.84,338.19,339.91,340.6,341.29,341,339.39,337.43,335.72,335.84,336.93,338.04,339.06,340.3,341.21,342.33,342.74,342.08,340.32,338.26,336.52,336.68,338.19,339.44,340.57,341.44,342.53,343.39,343.96,343.18,341.88,339.65,337.81,337.69,339.09,340.32,341.2,342.35,342.93,344.77,345.58,345.14,343.81,342.21,339.69,339.82,340.98,342.82,343.52,344.33,345.11,346.88,347.25,346.62,345.22,343.11,340.9,341.18,342.8,344.04,344.79,345.82,347.25,348.17,348.74,348.07,346.38,344.51,342.92,342.62,344.06,345.38,346.11,346.78,347.68,349.37,350.03,349.37,347.76,345.73,344.68,343.99,345.48,346.72,347.84,348.29,349.23,350.8,351.66,351.07,349.33,347.92,346.27,346.18,347.64,348.78,350.25,351.54,352.05,353.41,354.04,353.62,352.22,350.27,348.55,348.72,349.91,351.18,352.6,352.92,353.53,355.26,355.52,354.97,353.75,351.52,349.64,349.83,351.14,352.37,353.5,354.55,355.23,356.04,357,356.07,354.67,352.76,350.82,351.04,352.69,354.07,354.59,355.63,357.03,358.48,359.22,358.12,356.06,353.92,352.05,352.11,353.64,354.89,355.88,356.63,357.72,359.07,359.58,359.17,356.94,354.92,352.94,353.23,354.09,355.33,356.63,357.1,358.32,359.41,360.23,359.55,357.53,355.48,353.67,353.95,355.3,356.78,358.34,358.89,359.95,361.25,361.67,360.94,359.55,357.49,355.84,356,357.59,359.05,359.98,361.03,361.66,363.48,363.82,363.3,361.94,359.5,358.11,357.8,359.61,360.74,362.09,363.29,364.06,364.76,365.45,365.01,363.7,361.54,359.51,359.65,360.8,362.38,363.23,364.06,364.61,366.4,366.84,365.68,364.52,362.57,360.24,360.83,362.49,364.34],"period":12,"model_arg":"ZZZ","method":"ETS(M,Ad,M)","components":["M","A","M","TRUE"],"loglik":-842.552382383843,"aic":1721.10476476769,"aicc":1722.62815006835,"bic":1795.7771940942,"n":468,"py_pick":"ETS(M,A,M)","py_pick_aicc_in_r":1697.18876872835,"py_pick_admissible":1},"nile":{"name":"nile","x":[1120,1160,963,1210,1160,1160,813,1230,1370,1140,995,935,1110,994,1020,960,1180,799,958,1140,1100,1210,1150,1250,1260,1220,1030,1100,774,840,874,694,940,833,701,916,692,1020,1050,969,831,726,456,824,702,1120,1100,832,764,821,768,845,864,862,698,845,744,796,1040,759,781,865,845,944,984,897,822,1010,771,676,649,846,812,742,801,1040,860,874,848,890,744,749,838,1050,918,986,797,923,975,815,1020,906,901,1170,912,746,919,718,714,740],"period":1,"model_arg":"ZZZ","method":"ETS(M,N,N)","components":["M","N","N","FALSE"],"loglik":-726.150957803148,"aic":1458.3019156063,"aicc":1458.5519156063,"bic":1466.11742616426,"n":100,"py_pick":"ETS(M,N,N)","py_pick_aicc_in_r":1458.5519060697,"py_pick_admissible":1},"wwwusage":{"name":"wwwusage","x":[88,84,85,85,84,85,83,85,88,89,91,99,104,112,126,138,146,151,150,148,147,149,143,132,131,139,147,150,148,145,140,134,131,131,129,126,126,132,137,140,142,150,159,167,170,171,172,172,174,175,172,172,174,174,169,165,156,142,131,121,112,104,102,99,99,95,88,84,84,87,89,88,85,86,89,91,91,94,101,110,121,135,145,149,156,165,171,175,177,182,193,204,208,210,215,222,228,226,222,220],"period":1,"model_arg":"ZZZ","method":"ETS(A,Ad,N)","components":["A","A","N","TRUE"],"loglik":-352.865490198892,"aic":717.730980397785,"aicc":718.634206204236,"bic":733.362001513713,"n":100,"py_pick":"ETS(A,Ad,N)","py_pick_aicc_in_r":717.641639902903,"py_pick_admissible":1},"lynx":{"name":"lynx","x":[269,321,585,871,1475,2821,3928,5943,4950,2577,523,98,184,279,409,2285,2685,3409,1824,409,151,45,68,213,546,1033,2129,2536,957,361,377,225,360,731,1638,2725,2871,2119,684,299,236,245,552,1623,3311,6721,4254,687,255,473,358,784,1594,1676,2251,1426,756,299,201,229,469,736,2042,2811,4431,2511,389,73,39,49,59,188,377,1292,4031,3495,587,105,153,387,758,1307,3465,6991,6313,3794,1836,345,382,808,1388,2713,3800,3091,2985,3790,674,81,80,108,229,399,1132,2432,3574,2935,1537,529,485,662,1000,1590,2657,3396],"period":1,"model_arg":"ZZZ","method":"ETS(M,N,N)","components":["M","N","N","FALSE"],"loglik":-1026.06877340561,"aic":2058.13754681123,"aicc":2058.35572862941,"bic":2066.34614215641,"n":114,"py_pick":"ETS(M,A,N)","py_pick_aicc_in_r":2041.94549073361,"py_pick_admissible":1},"diff_nile":{"name":"diff_nile","x":[40,-197,247,-50,0,-347,417,140,-230,-145,-60,175,-116,26,-60,220,-381,159,182,-40,110,-60,100,10,-40,-190,70,-326,66,34,-180,246,-107,-132,215,-224,328,30,-81,-138,-105,-270,368,-122,418,-20,-268,-68,57,-53,77,19,-2,-164,147,-101,52,244,-281,22,84,-20,99,40,-87,-75,188,-239,-95,-27,197,-34,-70,59,239,-180,14,-26,42,-146,5,89,212,-132,68,-189,126,52,-160,205,-114,-5,269,-258,-166,173,-201,-4,26],"period":1,"model_arg":"ZZZ","method":"ETS(A,N,N)","components":["A","N","N","FALSE"],"loglik":-734.310989958834,"aic":1474.62197991767,"aicc":1474.87461149662,"bic":1482.40733946807,"n":99,"py_pick":"ETS(A,N,N)","py_pick_aicc_in_r":1474.87459815349,"py_pick_admissible":1},"airpassengers_zzn":{"name":"airpassengers_zzn","x":[112,118,132,129,121,135,148,148,136,119,104,118,115,126,141,135,125,149,170,170,158,133,114,140,145,150,178,163,172,178,199,199,184,162,146,166,171,180,193,181,183,218,230,242,209,191,172,194,196,196,236,235,229,243,264,272,237,211,180,201,204,188,235,227,234,264,302,293,259,229,203,229,242,233,267,269,270,315,364,347,312,274,237,278,284,277,317,313,318,374,413,405,355,306,271,306,315,301,356,348,355,422,465,467,404,347,305,336,340,318,362,348,363,435,491,505,404,359,310,337,360,342,406,396,420,472,548,559,463,407,362,405,417,391,419,461,472,535,622,606,508,461,390,432],"period":12,"model_arg":"ZZN","method":"ETS(M,N,N)","components":["M","N","N","FALSE"],"loglik":-833.950130596089,"aic":1673.90026119218,"aicc":1674.07168976361,"bic":1682.80970109091,"n":144,"py_pick":"ETS(M,A,N)","py_pick_aicc_in_r":1673.41133501112,"py_pick_admissible":1},"airpassengers_azz":{"name":"airpassengers_azz","x":[112,118,132,129,121,135,148,148,136,119,104,118,115,126,141,135,125,149,170,170,158,133,114,140,145,150,178,163,172,178,199,199,184,162,146,166,171,180,193,181,183,218,230,242,209,191,172,194,196,196,236,235,229,243,264,272,237,211,180,201,204,188,235,227,234,264,302,293,259,229,203,229,242,233,267,269,270,315,364,347,312,274,237,278,284,277,317,313,318,374,413,405,355,306,271,306,315,301,356,348,355,422,465,467,404,347,305,336,340,318,362,348,363,435,491,505,404,359,310,337,360,342,406,396,420,472,548,559,463,407,362,405,417,391,419,461,472,535,622,606,508,461,390,432],"period":12,"model_arg":"AZZ","method":"ETS(A,N,A)","components":["A","N","A","FALSE"],"loglik":-767.429538964832,"aic":1564.85907792966,"aicc":1568.60907792966,"bic":1609.4062774233,"n":144,"py_pick":"ETS(A,A,A)","py_pick_aicc_in_r":1475.85857573546,"py_pick_admissible":1},"airpassengers_mzz":{"name":"airpassengers_mzz","x":[112,118,132,129,121,135,148,148,136,119,104,118,115,126,141,135,125,149,170,170,158,133,114,140,145,150,178,163,172,178,199,199,184,162,146,166,171,180,193,181,183,218,230,242,209,191,172,194,196,196,236,235,229,243,264,272,237,211,180,201,204,188,235,227,234,264,302,293,259,229,203,229,242,233,267,269,270,315,364,347,312,274,237,278,284,277,317,313,318,374,413,405,355,306,271,306,315,301,356,348,355,422,465,467,404,347,305,336,340,318,362,348,363,435,491,505,404,359,310,337,360,342,406,396,420,472,548,559,463,407,362,405,417,391,419,461,472,535,622,606,508,461,390,432],"period":12,"model_arg":"MZZ","method":"ETS(M,Ad,M)","components":["M","A","M","TRUE"],"loglik":-679.583216236962,"aic":1395.16643247392,"aicc":1400.63843247392,"bic":1448.62307186629,"n":144,"py_pick":"ETS(M,A,M)","py_pick_aicc_in_r":1390.85155479901,"py_pick_admissible":1}},"fixed":{"nile_ann":{"name":"nile_ann","x":[1120,1160,963,1210,1160,1160,813,1230,1370,1140,995,935,1110,994,1020,960,1180,799,958,1140,1100,1210,1150,1250,1260,1220,1030,1100,774,840,874,694,940,833,701,916,692,1020,1050,969,831,726,456,824,702,1120,1100,832,764,821,768,845,864,862,698,845,744,796,1040,759,781,865,845,944,984,897,822,1010,771,676,649,846,812,742,801,1040,860,874,848,890,744,749,838,1050,918,986,797,923,975,815,1020,906,901,1170,912,746,919,718,714,740],"period":1,"model_arg":"ANN","damped":false,"method":"ETS(A,N,N)","loglik":-726.390519999206,"aic":1458.78103999841,"aicc":1459.03103999841,"bic":1466.59655055638,"alpha":0.245533862697156,"n":100},"nile_aan":{"name":"nile_aan","x":[1120,1160,963,1210,1160,1160,813,1230,1370,1140,995,935,1110,994,1020,960,1180,799,958,1140,1100,1210,1150,1250,1260,1220,1030,1100,774,840,874,694,940,833,701,916,692,1020,1050,969,831,726,456,824,702,1120,1100,832,764,821,768,845,864,862,698,845,744,796,1040,759,781,865,845,944,984,897,822,1010,771,676,649,846,812,742,801,1040,860,874,848,890,744,749,838,1050,918,986,797,923,975,815,1020,906,901,1170,912,746,919,718,714,740],"period":1,"model_arg":"AAN","damped":false,"method":"ETS(A,A,N)","loglik":-725.956062244941,"aic":1461.91212448988,"aicc":1462.55042236222,"bic":1474.93797541982,"alpha":0.209488918876854,"n":100},"airpassengers_aaa":{"name":"airpassengers_aaa","x":[112,118,132,129,121,135,148,148,136,119,104,118,115,126,141,135,125,149,170,170,158,133,114,140,145,150,178,163,172,178,199,199,184,162,146,166,171,180,193,181,183,218,230,242,209,191,172,194,196,196,236,235,229,243,264,272,237,211,180,201,204,188,235,227,234,264,302,293,259,229,203,229,242,233,267,269,270,315,364,347,312,274,237,278,284,277,317,313,318,374,413,405,355,306,271,306,315,301,356,348,355,422,465,467,404,347,305,336,340,318,362,348,363,435,491,505,404,359,310,337,360,342,406,396,420,472,548,559,463,407,362,405,417,391,419,461,472,535,622,606,508,461,390,432],"period":12,"model_arg":"AAA","damped":false,"method":"ETS(A,A,A)","loglik":-765.935847511721,"aic":1565.87169502344,"aicc":1570.72883788059,"bic":1616.35852111623,"alpha":0.993480362872374,"n":144},"airpassengers_mam":{"name":"airpassengers_mam","x":[112,118,132,129,121,135,148,148,136,119,104,118,115,126,141,135,125,149,170,170,158,133,114,140,145,150,178,163,172,178,199,199,184,162,146,166,171,180,193,181,183,218,230,242,209,191,172,194,196,196,236,235,229,243,264,272,237,211,180,201,204,188,235,227,234,264,302,293,259,229,203,229,242,233,267,269,270,315,364,347,312,274,237,278,284,277,317,313,318,374,413,405,355,306,271,306,315,301,356,348,355,422,465,467,404,347,305,336,340,318,362,348,363,435,491,505,404,359,310,337,360,342,406,396,420,472,548,559,463,407,362,405,417,391,419,461,472,535,622,606,508,461,390,432],"period":12,"model_arg":"MAM","damped":false,"method":"ETS(M,A,M)","loglik":-682.403619057803,"aic":1398.80723811561,"aicc":1403.66438097275,"bic":1449.2940642084,"alpha":0.394996850495005,"n":144},"usaccdeaths_ana":{"name":"usaccdeaths_ana","x":[9007,8106,8928,9137,10017,10826,11317,10744,9713,9938,9161,8927,7750,6981,8038,8422,8714,9512,10120,9823,8743,9129,8710,8680,8162,7306,8124,7870,9387,9556,10093,9620,8285,8466,8160,8034,7717,7461,7767,7925,8623,8945,10078,9179,8037,8488,7874,8647,7792,6957,7726,8106,8890,9299,10625,9302,8314,8850,8265,8796,7836,6892,7791,8192,9115,9434,10484,9827,9110,9070,8633,9240],"period":12,"model_arg":"ANA","damped":false,"method":"ETS(A,N,A)","loglik":-555.072335012621,"aic":1140.14467002524,"aicc":1148.71609859667,"bic":1174.29466181048,"alpha":0.594589890836137,"n":72}}}
@@ -0,0 +1,74 @@
1
+ """Dump PyStatistics' ZZZ-selected ETS fits for R cross-scoring.
2
+
3
+ Stage 1 of regenerating ``ets_r_reference.json``. Runs the package's own
4
+ ``ets()`` auto-selection on every reference series already stored in the
5
+ fixture and writes the selected model plus its fitted parameters and
6
+ initial states to ``ets_py_params.json``. Stage 2
7
+ (``generate_ets_r_reference.R``) feeds these parameters through R
8
+ ``forecast:::pegelsresid.C`` to score *our* fits under *R's own*
9
+ likelihood — the honest cross-engine comparison (refitting the same model
10
+ spec in R only re-runs R's optimiser, which is the thing being compared).
11
+
12
+ Run from the repo root (after the fixture exists, since it supplies the
13
+ input series)::
14
+
15
+ KMP_DUPLICATE_LIB_OK=TRUE PYTHONPATH=$PWD \
16
+ python tests/fixtures/generate_ets_py_params.py
17
+
18
+ then::
19
+
20
+ Rscript tests/fixtures/generate_ets_r_reference.R
21
+ """
22
+
23
+ from __future__ import annotations
24
+
25
+ import json
26
+ from pathlib import Path
27
+
28
+ import numpy as np
29
+
30
+ from pystatistics.timeseries import ets
31
+
32
+ FIXTURE_DIR = Path(__file__).parent
33
+ REFERENCE = FIXTURE_DIR / "ets_r_reference.json"
34
+ OUT = FIXTURE_DIR / "ets_py_params.json"
35
+
36
+
37
+ def main() -> None:
38
+ reference = json.loads(REFERENCE.read_text())
39
+ out: dict[str, dict] = {}
40
+ for name, case in reference["selection"].items():
41
+ sol = ets(
42
+ np.asarray(case["x"], dtype=np.float64),
43
+ model=case["model_arg"],
44
+ period=case["period"],
45
+ )
46
+ spec = sol.spec
47
+ out[name] = {
48
+ "picked": spec.name,
49
+ "error": spec.error,
50
+ "trend": spec.trend,
51
+ "season": spec.season,
52
+ "damped": spec.damped,
53
+ "period": spec.period,
54
+ "alpha": sol.alpha,
55
+ "beta": sol.beta,
56
+ "gamma": sol.gamma,
57
+ "phi": sol.phi,
58
+ "init_level": sol.init_level,
59
+ "init_trend": sol.init_trend,
60
+ # Engine order: oldest first (s_{1-m} .. s_0). R's state
61
+ # vector wants most-recent first — the R script reverses.
62
+ "init_season": (
63
+ list(sol.init_season) if sol.init_season is not None else None
64
+ ),
65
+ "aicc_py_convention": sol.aicc,
66
+ "converged": bool(sol.converged),
67
+ }
68
+ print(f" {name:24s} -> {spec.name}")
69
+ OUT.write_text(json.dumps(out, indent=1) + "\n")
70
+ print(f"wrote {OUT.relative_to(FIXTURE_DIR.parent.parent)}")
71
+
72
+
73
+ if __name__ == "__main__":
74
+ main()