pystatistics 4.6.3__tar.gz → 4.6.4__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 (717) hide show
  1. pystatistics-4.6.4/.release/UNRELEASED.md +379 -0
  2. {pystatistics-4.6.3 → pystatistics-4.6.4}/CHANGELOG.md +176 -0
  3. {pystatistics-4.6.3 → pystatistics-4.6.4}/PKG-INFO +38 -1
  4. {pystatistics-4.6.3 → pystatistics-4.6.4}/README.md +37 -0
  5. {pystatistics-4.6.3 → pystatistics-4.6.4}/pyproject.toml +1 -1
  6. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/__init__.py +1 -1
  7. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/timeseries/__init__.py +1 -1
  8. pystatistics-4.6.4/pystatistics/timeseries/_adf_mackinnon.py +171 -0
  9. pystatistics-4.6.4/pystatistics/timeseries/_arima_factored.py +484 -0
  10. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/timeseries/_arima_fit.py +226 -132
  11. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/timeseries/_arima_forecast.py +80 -120
  12. pystatistics-4.6.4/pystatistics/timeseries/_arima_init.py +110 -0
  13. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/timeseries/_arima_kalman.py +250 -148
  14. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/timeseries/_arima_likelihood.py +27 -225
  15. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/timeseries/_arima_order.py +239 -84
  16. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/timeseries/_arima_solution.py +15 -4
  17. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/timeseries/_differencing.py +13 -2
  18. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/timeseries/_stationarity.py +73 -154
  19. pystatistics-4.6.4/tests/fixtures/adf_statsmodels_reference.json +320 -0
  20. pystatistics-4.6.4/tests/fixtures/arima_ic_r_reference.json +98 -0
  21. pystatistics-4.6.4/tests/fixtures/arima_kalman_r_reference.json +291 -0
  22. pystatistics-4.6.4/tests/fixtures/generate_adf_statsmodels_reference.py +51 -0
  23. pystatistics-4.6.4/tests/fixtures/generate_arima_ic_r_reference.R +75 -0
  24. pystatistics-4.6.4/tests/fixtures/generate_arima_kalman_r_reference.R +115 -0
  25. pystatistics-4.6.4/tests/fixtures/generate_stationarity_r_reference.R +69 -0
  26. pystatistics-4.6.4/tests/fixtures/stationarity_r_reference.json +76 -0
  27. pystatistics-4.6.4/tests/timeseries/test_arima_ic.py +267 -0
  28. pystatistics-4.6.4/tests/timeseries/test_arima_kalman_r_parity.py +602 -0
  29. pystatistics-4.6.4/tests/timeseries/test_stationarity_mackinnon.py +245 -0
  30. pystatistics-4.6.3/.release/UNRELEASED.md +0 -69
  31. pystatistics-4.6.3/pystatistics/timeseries/_arima_factored.py +0 -181
  32. {pystatistics-4.6.3 → pystatistics-4.6.4}/.github/workflows/publish.yml +0 -0
  33. {pystatistics-4.6.3 → pystatistics-4.6.4}/.github/workflows/trigger-docs-rebuild.yml +0 -0
  34. {pystatistics-4.6.3 → pystatistics-4.6.4}/.gitignore +0 -0
  35. {pystatistics-4.6.3 → pystatistics-4.6.4}/.release/CHECKLIST.md +0 -0
  36. {pystatistics-4.6.3 → pystatistics-4.6.4}/.release/release.py +0 -0
  37. {pystatistics-4.6.3 → pystatistics-4.6.4}/LICENSE +0 -0
  38. {pystatistics-4.6.3 → pystatistics-4.6.4}/benchmarks/mvnmle_bench.py +0 -0
  39. {pystatistics-4.6.3 → pystatistics-4.6.4}/benchmarks/mvnmle_gpu_per_eval.py +0 -0
  40. {pystatistics-4.6.3 → pystatistics-4.6.4}/docs/DESIGN.md +0 -0
  41. {pystatistics-4.6.3 → pystatistics-4.6.4}/docs/GPU_NOTES.md +0 -0
  42. {pystatistics-4.6.3 → pystatistics-4.6.4}/docs/Makefile +0 -0
  43. {pystatistics-4.6.3 → pystatistics-4.6.4}/docs/ROADMAP.md +0 -0
  44. {pystatistics-4.6.3 → pystatistics-4.6.4}/docs/_static/custom.css +0 -0
  45. {pystatistics-4.6.3 → pystatistics-4.6.4}/docs/anova.rst +0 -0
  46. {pystatistics-4.6.3 → pystatistics-4.6.4}/docs/conf.py +0 -0
  47. {pystatistics-4.6.3 → pystatistics-4.6.4}/docs/core.rst +0 -0
  48. {pystatistics-4.6.3 → pystatistics-4.6.4}/docs/descriptive.rst +0 -0
  49. {pystatistics-4.6.3 → pystatistics-4.6.4}/docs/gam.rst +0 -0
  50. {pystatistics-4.6.3 → pystatistics-4.6.4}/docs/hypothesis.rst +0 -0
  51. {pystatistics-4.6.3 → pystatistics-4.6.4}/docs/index.rst +0 -0
  52. {pystatistics-4.6.3 → pystatistics-4.6.4}/docs/mixed.rst +0 -0
  53. {pystatistics-4.6.3 → pystatistics-4.6.4}/docs/montecarlo.rst +0 -0
  54. {pystatistics-4.6.3 → pystatistics-4.6.4}/docs/multinomial.rst +0 -0
  55. {pystatistics-4.6.3 → pystatistics-4.6.4}/docs/multivariate.rst +0 -0
  56. {pystatistics-4.6.3 → pystatistics-4.6.4}/docs/mvnmle.rst +0 -0
  57. {pystatistics-4.6.3 → pystatistics-4.6.4}/docs/ordinal.rst +0 -0
  58. {pystatistics-4.6.3 → pystatistics-4.6.4}/docs/regression.rst +0 -0
  59. {pystatistics-4.6.3 → pystatistics-4.6.4}/docs/survival.rst +0 -0
  60. {pystatistics-4.6.3 → pystatistics-4.6.4}/docs/timeseries.rst +0 -0
  61. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/CONVENTIONS.md +0 -0
  62. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/anova/__init__.py +0 -0
  63. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/anova/_common.py +0 -0
  64. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/anova/_contrasts.py +0 -0
  65. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/anova/_levene.py +0 -0
  66. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/anova/_posthoc.py +0 -0
  67. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/anova/_repeated.py +0 -0
  68. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/anova/_ss.py +0 -0
  69. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/anova/design.py +0 -0
  70. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/anova/solution.py +0 -0
  71. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/anova/solvers.py +0 -0
  72. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/core/__init__.py +0 -0
  73. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/core/capabilities.py +0 -0
  74. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/core/compute/__init__.py +0 -0
  75. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/core/compute/backend.py +0 -0
  76. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/core/compute/device.py +0 -0
  77. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/core/compute/linalg/__init__.py +0 -0
  78. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/core/compute/linalg/batched.py +0 -0
  79. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/core/compute/linalg/cholesky.py +0 -0
  80. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/core/compute/linalg/determinant.py +0 -0
  81. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/core/compute/linalg/qr.py +0 -0
  82. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/core/compute/linalg/solve.py +0 -0
  83. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/core/compute/linalg/svd.py +0 -0
  84. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/core/compute/linalg/triangular.py +0 -0
  85. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/core/compute/optimization/__init__.py +0 -0
  86. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/core/compute/optimization/convergence.py +0 -0
  87. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/core/compute/precision.py +0 -0
  88. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/core/compute/timing.py +0 -0
  89. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/core/compute/tolerances.py +0 -0
  90. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/core/compute/torch_interop.py +0 -0
  91. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/core/datasource.py +0 -0
  92. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/core/encoding.py +0 -0
  93. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/core/exceptions.py +0 -0
  94. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/core/protocols.py +0 -0
  95. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/core/result.py +0 -0
  96. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/core/validation.py +0 -0
  97. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/descriptive/__init__.py +0 -0
  98. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/descriptive/_missing.py +0 -0
  99. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/descriptive/_quantile_types.py +0 -0
  100. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/descriptive/backends/__init__.py +0 -0
  101. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/descriptive/backends/cpu.py +0 -0
  102. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/descriptive/backends/gpu.py +0 -0
  103. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/descriptive/design.py +0 -0
  104. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/descriptive/solution.py +0 -0
  105. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/descriptive/solvers.py +0 -0
  106. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/gam/__init__.py +0 -0
  107. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/gam/_basis.py +0 -0
  108. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/gam/_basis_common.py +0 -0
  109. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/gam/_basis_cr.py +0 -0
  110. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/gam/_basis_tp.py +0 -0
  111. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/gam/_common.py +0 -0
  112. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/gam/_constraints.py +0 -0
  113. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/gam/_criteria.py +0 -0
  114. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/gam/_edf.py +0 -0
  115. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/gam/_gam.py +0 -0
  116. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/gam/_gradient.py +0 -0
  117. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/gam/_pirls.py +0 -0
  118. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/gam/_smooth.py +0 -0
  119. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/gam/_smooth_test.py +0 -0
  120. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/gam/solution.py +0 -0
  121. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/hypothesis/__init__.py +0 -0
  122. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/hypothesis/_common.py +0 -0
  123. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/hypothesis/_design_factories.py +0 -0
  124. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/hypothesis/_p_adjust.py +0 -0
  125. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/hypothesis/backends/__init__.py +0 -0
  126. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/hypothesis/backends/_chisq_test.py +0 -0
  127. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/hypothesis/backends/_fisher_test.py +0 -0
  128. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/hypothesis/backends/_ks_test.py +0 -0
  129. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/hypothesis/backends/_prop_test.py +0 -0
  130. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/hypothesis/backends/_t_test.py +0 -0
  131. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/hypothesis/backends/_var_test.py +0 -0
  132. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/hypothesis/backends/_wilcox_test.py +0 -0
  133. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/hypothesis/backends/cpu.py +0 -0
  134. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/hypothesis/backends/gpu.py +0 -0
  135. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/hypothesis/design.py +0 -0
  136. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/hypothesis/solution.py +0 -0
  137. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/hypothesis/solvers.py +0 -0
  138. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mice/__init__.py +0 -0
  139. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mice/_chain.py +0 -0
  140. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mice/_encode.py +0 -0
  141. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mice/_rng.py +0 -0
  142. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mice/_visit.py +0 -0
  143. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mice/backends/__init__.py +0 -0
  144. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mice/backends/_gpu_encode.py +0 -0
  145. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mice/backends/_gpu_linreg.py +0 -0
  146. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mice/backends/_gpu_logreg.py +0 -0
  147. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mice/backends/_gpu_methods.py +0 -0
  148. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mice/backends/_gpu_polr.py +0 -0
  149. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mice/backends/_gpu_polyreg.py +0 -0
  150. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mice/backends/_gpu_spd.py +0 -0
  151. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mice/backends/cpu.py +0 -0
  152. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mice/backends/gpu.py +0 -0
  153. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mice/datasets.py +0 -0
  154. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mice/design.py +0 -0
  155. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mice/methods/__init__.py +0 -0
  156. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mice/methods/_draw.py +0 -0
  157. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mice/methods/_linreg.py +0 -0
  158. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mice/methods/base.py +0 -0
  159. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mice/methods/logreg.py +0 -0
  160. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mice/methods/norm.py +0 -0
  161. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mice/methods/pmm.py +0 -0
  162. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mice/methods/polr.py +0 -0
  163. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mice/methods/polyreg.py +0 -0
  164. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mice/methods/registry.py +0 -0
  165. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mice/pooling.py +0 -0
  166. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mice/solution.py +0 -0
  167. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mice/solvers.py +0 -0
  168. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mixed/__init__.py +0 -0
  169. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mixed/_common.py +0 -0
  170. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mixed/_deviance.py +0 -0
  171. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mixed/_glmm_optimizer.py +0 -0
  172. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mixed/_glmm_pirls.py +0 -0
  173. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mixed/_grm_cpu.py +0 -0
  174. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mixed/_optimizer.py +0 -0
  175. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mixed/_pls.py +0 -0
  176. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mixed/_pls_structured.py +0 -0
  177. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mixed/_random_effects.py +0 -0
  178. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mixed/_satterthwaite.py +0 -0
  179. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mixed/_struct_batched.py +0 -0
  180. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mixed/_struct_sparse.py +0 -0
  181. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mixed/backends/__init__.py +0 -0
  182. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mixed/backends/grm_gpu.py +0 -0
  183. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mixed/design.py +0 -0
  184. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mixed/grm.py +0 -0
  185. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mixed/grm_solution.py +0 -0
  186. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mixed/solution.py +0 -0
  187. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mixed/solvers.py +0 -0
  188. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/montecarlo/__init__.py +0 -0
  189. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/montecarlo/_ci.py +0 -0
  190. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/montecarlo/_common.py +0 -0
  191. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/montecarlo/_influence.py +0 -0
  192. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/montecarlo/backends/__init__.py +0 -0
  193. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/montecarlo/backends/cpu.py +0 -0
  194. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/montecarlo/backends/gpu.py +0 -0
  195. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/montecarlo/design.py +0 -0
  196. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/montecarlo/solution.py +0 -0
  197. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/montecarlo/solvers.py +0 -0
  198. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/multinomial/__init__.py +0 -0
  199. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/multinomial/_common.py +0 -0
  200. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/multinomial/_likelihood.py +0 -0
  201. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/multinomial/_solver.py +0 -0
  202. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/multinomial/backends/__init__.py +0 -0
  203. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/multinomial/backends/gpu_likelihood.py +0 -0
  204. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/multinomial/solution.py +0 -0
  205. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/multivariate/__init__.py +0 -0
  206. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/multivariate/_common.py +0 -0
  207. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/multivariate/_factor.py +0 -0
  208. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/multivariate/_pca.py +0 -0
  209. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/multivariate/_rotation.py +0 -0
  210. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/multivariate/backends/__init__.py +0 -0
  211. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/multivariate/backends/gpu_pca.py +0 -0
  212. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/multivariate/backends/gpu_pca_randomized.py +0 -0
  213. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mvnmle/__init__.py +0 -0
  214. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mvnmle/_degeneracy.py +0 -0
  215. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mvnmle/_monotone.py +0 -0
  216. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mvnmle/_objectives/__init__.py +0 -0
  217. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mvnmle/_objectives/_batched_cholesky.py +0 -0
  218. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mvnmle/_objectives/base.py +0 -0
  219. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mvnmle/_objectives/cpu.py +0 -0
  220. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mvnmle/_objectives/gpu_fp32.py +0 -0
  221. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mvnmle/_objectives/gpu_fp64.py +0 -0
  222. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mvnmle/_objectives/parameterizations.py +0 -0
  223. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mvnmle/_utils.py +0 -0
  224. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mvnmle/backends/__init__.py +0 -0
  225. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mvnmle/backends/_direct.py +0 -0
  226. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mvnmle/backends/_em_batched.py +0 -0
  227. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mvnmle/backends/_em_batched_np.py +0 -0
  228. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mvnmle/backends/_em_batched_patterns.py +0 -0
  229. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mvnmle/backends/_em_batched_torch.py +0 -0
  230. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mvnmle/backends/_optimize.py +0 -0
  231. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mvnmle/backends/_squarem.py +0 -0
  232. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mvnmle/backends/cpu.py +0 -0
  233. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mvnmle/backends/em.py +0 -0
  234. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mvnmle/backends/gpu.py +0 -0
  235. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mvnmle/datasets.py +0 -0
  236. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mvnmle/design.py +0 -0
  237. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mvnmle/mcar_test.py +0 -0
  238. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mvnmle/patterns.py +0 -0
  239. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mvnmle/solution.py +0 -0
  240. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/mvnmle/solvers.py +0 -0
  241. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/ordinal/__init__.py +0 -0
  242. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/ordinal/_common.py +0 -0
  243. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/ordinal/_information.py +0 -0
  244. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/ordinal/_likelihood.py +0 -0
  245. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/ordinal/_solver.py +0 -0
  246. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/ordinal/backends/__init__.py +0 -0
  247. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/ordinal/backends/gpu_likelihood.py +0 -0
  248. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/ordinal/solution.py +0 -0
  249. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/py.typed +0 -0
  250. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/regression/__init__.py +0 -0
  251. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/regression/_formatting.py +0 -0
  252. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/regression/_glm.py +0 -0
  253. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/regression/_inputs.py +0 -0
  254. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/regression/_linear.py +0 -0
  255. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/regression/_nb_theta.py +0 -0
  256. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/regression/_penalty.py +0 -0
  257. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/regression/backends/__init__.py +0 -0
  258. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/regression/backends/_irls_step.py +0 -0
  259. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/regression/backends/cpu.py +0 -0
  260. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/regression/backends/cpu_glm.py +0 -0
  261. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/regression/backends/gpu.py +0 -0
  262. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/regression/backends/gpu_glm.py +0 -0
  263. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/regression/design.py +0 -0
  264. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/regression/families.py +0 -0
  265. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/regression/solution.py +0 -0
  266. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/regression/solvers.py +0 -0
  267. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/regression/terms.py +0 -0
  268. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/survival/__init__.py +0 -0
  269. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/survival/_common.py +0 -0
  270. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/survival/_cox.py +0 -0
  271. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/survival/_discrete.py +0 -0
  272. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/survival/_km.py +0 -0
  273. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/survival/_logrank.py +0 -0
  274. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/survival/backends/__init__.py +0 -0
  275. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/survival/backends/cpu.py +0 -0
  276. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/survival/backends/gpu.py +0 -0
  277. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/survival/design.py +0 -0
  278. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/survival/solution.py +0 -0
  279. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/survival/solvers.py +0 -0
  280. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/timeseries/_acf.py +0 -0
  281. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/timeseries/_arima_batch.py +0 -0
  282. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/timeseries/_common.py +0 -0
  283. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/timeseries/_decomposition.py +0 -0
  284. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/timeseries/_ets_fit.py +0 -0
  285. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/timeseries/_ets_forecast.py +0 -0
  286. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/timeseries/_ets_models.py +0 -0
  287. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/timeseries/_ets_result.py +0 -0
  288. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/timeseries/_ets_select.py +0 -0
  289. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/timeseries/_loess.py +0 -0
  290. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/timeseries/_stl.py +0 -0
  291. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/timeseries/_stl_core.py +0 -0
  292. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/timeseries/_stl_robust.py +0 -0
  293. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/timeseries/_whittle.py +0 -0
  294. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/timeseries/backends/__init__.py +0 -0
  295. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/timeseries/backends/whittle_batch_gpu.py +0 -0
  296. {pystatistics-4.6.3 → pystatistics-4.6.4}/pystatistics/timeseries/backends/whittle_gpu.py +0 -0
  297. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/anova/__init__.py +0 -0
  298. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/anova/conftest.py +0 -0
  299. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/anova/test_contrasts.py +0 -0
  300. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/anova/test_design.py +0 -0
  301. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/anova/test_factorial.py +0 -0
  302. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/anova/test_levene.py +0 -0
  303. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/anova/test_oneway.py +0 -0
  304. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/anova/test_posthoc.py +0 -0
  305. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/anova/test_r_validation.py +0 -0
  306. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/anova/test_repeated_measures.py +0 -0
  307. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/benchmark_gpu.py +0 -0
  308. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/conftest.py +0 -0
  309. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/core/test_backend.py +0 -0
  310. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/core/test_datasource.py +0 -0
  311. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/core/test_exceptions.py +0 -0
  312. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/core/test_qr_solve.py +0 -0
  313. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/core/test_repr_html.py +0 -0
  314. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/core/test_result.py +0 -0
  315. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/core/test_torch_interop.py +0 -0
  316. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/core/test_validation.py +0 -0
  317. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/descriptive/__init__.py +0 -0
  318. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/descriptive/conftest.py +0 -0
  319. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/descriptive/test_backend_convention.py +0 -0
  320. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/descriptive/test_cor.py +0 -0
  321. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/descriptive/test_cov.py +0 -0
  322. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/descriptive/test_describe.py +0 -0
  323. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/descriptive/test_gpu.py +0 -0
  324. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/descriptive/test_missing.py +0 -0
  325. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/descriptive/test_moments.py +0 -0
  326. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/descriptive/test_quantile.py +0 -0
  327. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/descriptive/test_r_validation.py +0 -0
  328. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/anova_ancova_meta.json +0 -0
  329. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/anova_ancova_r_results.json +0 -0
  330. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/anova_bonferroni_meta.json +0 -0
  331. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/anova_bonferroni_r_results.json +0 -0
  332. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/anova_eta_meta.json +0 -0
  333. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/anova_eta_r_results.json +0 -0
  334. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/anova_levene_meta.json +0 -0
  335. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/anova_levene_r_results.json +0 -0
  336. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/anova_oneway_balanced_meta.json +0 -0
  337. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/anova_oneway_balanced_r_results.json +0 -0
  338. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/anova_oneway_unbalanced_meta.json +0 -0
  339. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/anova_oneway_unbalanced_r_results.json +0 -0
  340. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/anova_rm_mixed_meta.json +0 -0
  341. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/anova_rm_mixed_r_results.json +0 -0
  342. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/anova_rm_within_meta.json +0 -0
  343. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/anova_rm_within_r_results.json +0 -0
  344. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/anova_tukey_meta.json +0 -0
  345. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/anova_tukey_r_results.json +0 -0
  346. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/anova_twoway_balanced_meta.json +0 -0
  347. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/anova_twoway_balanced_r_results.json +0 -0
  348. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/anova_twoway_unbalanced_meta.json +0 -0
  349. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/anova_twoway_unbalanced_r_results.json +0 -0
  350. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/basic_100x3.csv +0 -0
  351. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/basic_100x3_meta.json +0 -0
  352. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/basic_100x3_r_results.json +0 -0
  353. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/collinear_almost.csv +0 -0
  354. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/collinear_almost_meta.json +0 -0
  355. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/collinear_almost_r_results.json +0 -0
  356. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/desc_basic_100x5.csv +0 -0
  357. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/desc_basic_100x5_meta.json +0 -0
  358. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/desc_basic_100x5_r_results.json +0 -0
  359. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/desc_constant_column.csv +0 -0
  360. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/desc_constant_column_meta.json +0 -0
  361. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/desc_constant_column_r_results.json +0 -0
  362. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/desc_extreme_values.csv +0 -0
  363. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/desc_extreme_values_meta.json +0 -0
  364. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/desc_extreme_values_r_results.json +0 -0
  365. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/desc_large_1000x10.csv +0 -0
  366. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/desc_large_1000x10_meta.json +0 -0
  367. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/desc_large_1000x10_r_results.json +0 -0
  368. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/desc_nan_columnwise.csv +0 -0
  369. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/desc_nan_columnwise_meta.json +0 -0
  370. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/desc_nan_columnwise_r_results.json +0 -0
  371. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/desc_nan_scattered.csv +0 -0
  372. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/desc_nan_scattered_meta.json +0 -0
  373. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/desc_nan_scattered_r_results.json +0 -0
  374. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/desc_negative_correlation.csv +0 -0
  375. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/desc_negative_correlation_meta.json +0 -0
  376. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/desc_negative_correlation_r_results.json +0 -0
  377. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/desc_perfect_correlation.csv +0 -0
  378. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/desc_perfect_correlation_meta.json +0 -0
  379. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/desc_perfect_correlation_r_results.json +0 -0
  380. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/desc_single_column.csv +0 -0
  381. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/desc_single_column_meta.json +0 -0
  382. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/desc_single_column_r_results.json +0 -0
  383. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/desc_ties.csv +0 -0
  384. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/desc_ties_meta.json +0 -0
  385. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/desc_ties_r_results.json +0 -0
  386. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/different_scales.csv +0 -0
  387. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/different_scales_meta.json +0 -0
  388. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/different_scales_r_results.json +0 -0
  389. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/ets_py_params.json +0 -0
  390. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/ets_r_reference.json +0 -0
  391. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/generate_anova_fixtures.py +0 -0
  392. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/generate_descriptive_fixtures.py +0 -0
  393. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/generate_ets_py_params.py +0 -0
  394. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/generate_ets_r_reference.R +0 -0
  395. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/generate_fixtures.py +0 -0
  396. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/generate_glm_fixtures.py +0 -0
  397. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/generate_hypothesis_fixtures.py +0 -0
  398. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/generate_mixed_fixtures.py +0 -0
  399. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/generate_montecarlo_fixtures.py +0 -0
  400. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/generate_nb_autotheta_fixtures.py +0 -0
  401. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/generate_stl_r_reference.R +0 -0
  402. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/generate_survival_fixtures.py +0 -0
  403. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/generate_weights_offset_fixtures.py +0 -0
  404. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/glm_binomial_balanced.csv +0 -0
  405. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/glm_binomial_balanced_meta.json +0 -0
  406. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/glm_binomial_balanced_r_results.json +0 -0
  407. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/glm_binomial_basic.csv +0 -0
  408. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/glm_binomial_basic_meta.json +0 -0
  409. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/glm_binomial_basic_r_results.json +0 -0
  410. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/glm_binomial_large.csv +0 -0
  411. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/glm_binomial_large_meta.json +0 -0
  412. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/glm_binomial_large_r_results.json +0 -0
  413. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/glm_binomial_separated.csv +0 -0
  414. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/glm_binomial_separated_meta.json +0 -0
  415. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/glm_binomial_separated_r_results.json +0 -0
  416. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/glm_gaussian_basic.csv +0 -0
  417. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/glm_gaussian_basic_meta.json +0 -0
  418. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/glm_gaussian_basic_r_results.json +0 -0
  419. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/glm_gaussian_large.csv +0 -0
  420. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/glm_gaussian_large_meta.json +0 -0
  421. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/glm_gaussian_large_r_results.json +0 -0
  422. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/glm_poisson_basic.csv +0 -0
  423. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/glm_poisson_basic_meta.json +0 -0
  424. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/glm_poisson_basic_r_results.json +0 -0
  425. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/glm_poisson_large_counts.csv +0 -0
  426. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/glm_poisson_large_counts_meta.json +0 -0
  427. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/glm_poisson_large_counts_r_results.json +0 -0
  428. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/glm_poisson_zeros.csv +0 -0
  429. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/glm_poisson_zeros_meta.json +0 -0
  430. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/glm_poisson_zeros_r_results.json +0 -0
  431. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/high_noise.csv +0 -0
  432. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/high_noise_meta.json +0 -0
  433. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/high_noise_r_results.json +0 -0
  434. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/htest_chisq_2x2_yates_meta.json +0 -0
  435. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/htest_chisq_2x2_yates_r_results.json +0 -0
  436. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/htest_chisq_3x3_meta.json +0 -0
  437. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/htest_chisq_3x3_r_results.json +0 -0
  438. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/htest_chisq_gof_meta.json +0 -0
  439. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/htest_chisq_gof_r_results.json +0 -0
  440. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/htest_chisq_gof_unequal_meta.json +0 -0
  441. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/htest_chisq_gof_unequal_r_results.json +0 -0
  442. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/htest_fisher_2x2_less_meta.json +0 -0
  443. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/htest_fisher_2x2_less_r_results.json +0 -0
  444. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/htest_fisher_2x2_meta.json +0 -0
  445. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/htest_fisher_2x2_r_results.json +0 -0
  446. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/htest_fisher_3x3_meta.json +0 -0
  447. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/htest_fisher_3x3_r_results.json +0 -0
  448. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/htest_ks_onesample_norm_meta.json +0 -0
  449. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/htest_ks_onesample_norm_r_results.json +0 -0
  450. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/htest_ks_twosample_meta.json +0 -0
  451. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/htest_ks_twosample_r_results.json +0 -0
  452. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/htest_prop_onesample_meta.json +0 -0
  453. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/htest_prop_onesample_r_results.json +0 -0
  454. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/htest_prop_twosample_meta.json +0 -0
  455. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/htest_prop_twosample_r_results.json +0 -0
  456. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/htest_t_onesample_meta.json +0 -0
  457. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/htest_t_onesample_r_results.json +0 -0
  458. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/htest_t_paired_meta.json +0 -0
  459. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/htest_t_paired_r_results.json +0 -0
  460. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/htest_t_pooled_meta.json +0 -0
  461. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/htest_t_pooled_r_results.json +0 -0
  462. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/htest_t_welch_meta.json +0 -0
  463. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/htest_t_welch_r_results.json +0 -0
  464. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/htest_var_basic_meta.json +0 -0
  465. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/htest_var_basic_r_results.json +0 -0
  466. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/htest_wilcox_ranksum_meta.json +0 -0
  467. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/htest_wilcox_ranksum_r_results.json +0 -0
  468. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/htest_wilcox_signed_meta.json +0 -0
  469. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/htest_wilcox_signed_r_results.json +0 -0
  470. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/ill_conditioned.csv +0 -0
  471. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/ill_conditioned_meta.json +0 -0
  472. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/ill_conditioned_r_results.json +0 -0
  473. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/large_coeffs.csv +0 -0
  474. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/large_coeffs_meta.json +0 -0
  475. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/large_coeffs_r_results.json +0 -0
  476. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/mc_boot_ci_90_meta.json +0 -0
  477. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/mc_boot_ci_90_r_results.json +0 -0
  478. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/mc_boot_ci_normal_meta.json +0 -0
  479. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/mc_boot_ci_normal_r_results.json +0 -0
  480. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/mc_boot_ci_skewed_meta.json +0 -0
  481. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/mc_boot_ci_skewed_r_results.json +0 -0
  482. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/mc_boot_mean_balanced_meta.json +0 -0
  483. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/mc_boot_mean_balanced_r_results.json +0 -0
  484. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/mc_boot_mean_ordinary_meta.json +0 -0
  485. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/mc_boot_mean_ordinary_r_results.json +0 -0
  486. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/mc_boot_median_meta.json +0 -0
  487. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/mc_boot_median_r_results.json +0 -0
  488. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/mc_boot_variance_meta.json +0 -0
  489. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/mc_boot_variance_r_results.json +0 -0
  490. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/mc_perm_greater_meta.json +0 -0
  491. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/mc_perm_greater_r_results.json +0 -0
  492. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/mc_perm_not_significant_meta.json +0 -0
  493. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/mc_perm_not_significant_r_results.json +0 -0
  494. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/mc_perm_significant_meta.json +0 -0
  495. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/mc_perm_significant_r_results.json +0 -0
  496. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/mixed/glmm_binomial.csv +0 -0
  497. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/mixed/glmm_poisson.csv +0 -0
  498. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/mixed/lmm_crossed.csv +0 -0
  499. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/mixed/lmm_intercept.csv +0 -0
  500. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/mixed/lmm_ml.csv +0 -0
  501. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/mixed/lmm_no_effect.csv +0 -0
  502. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/mixed/lmm_slope.csv +0 -0
  503. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/mixed/mixed_meta.json +0 -0
  504. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/mixed/mixed_r_results.json +0 -0
  505. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/nb_autotheta_cases.json +0 -0
  506. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/nb_autotheta_r_results.json +0 -0
  507. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/near_square.csv +0 -0
  508. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/near_square_meta.json +0 -0
  509. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/near_square_r_results.json +0 -0
  510. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/no_intercept.csv +0 -0
  511. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/no_intercept_meta.json +0 -0
  512. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/no_intercept_r_results.json +0 -0
  513. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/run_r_anova_validation.R +0 -0
  514. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/run_r_descriptive_validation.R +0 -0
  515. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/run_r_glm_validation.R +0 -0
  516. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/run_r_hypothesis_validation.R +0 -0
  517. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/run_r_mixed_validation.R +0 -0
  518. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/run_r_montecarlo_validation.R +0 -0
  519. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/run_r_nb_autotheta_validation.R +0 -0
  520. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/run_r_survival_validation.R +0 -0
  521. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/run_r_validation.R +0 -0
  522. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/run_r_weights_offset_validation.R +0 -0
  523. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/run_validation.sh +0 -0
  524. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/small_noise.csv +0 -0
  525. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/small_noise_meta.json +0 -0
  526. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/small_noise_r_results.json +0 -0
  527. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/stl_r_reference.json +0 -0
  528. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/surv_cox_breslow_meta.json +0 -0
  529. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/surv_cox_breslow_r_results.json +0 -0
  530. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/surv_cox_single_meta.json +0 -0
  531. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/surv_cox_single_r_results.json +0 -0
  532. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/surv_cox_ties_meta.json +0 -0
  533. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/surv_cox_ties_r_results.json +0 -0
  534. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/surv_cox_two_cov_meta.json +0 -0
  535. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/surv_cox_two_cov_r_results.json +0 -0
  536. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/surv_km_basic_meta.json +0 -0
  537. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/surv_km_basic_r_results.json +0 -0
  538. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/surv_km_heavy_cens_meta.json +0 -0
  539. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/surv_km_heavy_cens_r_results.json +0 -0
  540. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/surv_km_loglog_ci_meta.json +0 -0
  541. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/surv_km_loglog_ci_r_results.json +0 -0
  542. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/surv_km_no_cens_meta.json +0 -0
  543. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/surv_km_no_cens_r_results.json +0 -0
  544. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/surv_km_plain_ci_meta.json +0 -0
  545. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/surv_km_plain_ci_r_results.json +0 -0
  546. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/surv_km_ties_meta.json +0 -0
  547. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/surv_km_ties_r_results.json +0 -0
  548. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/surv_lr_peto_meta.json +0 -0
  549. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/surv_lr_peto_r_results.json +0 -0
  550. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/surv_lr_three_group_meta.json +0 -0
  551. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/surv_lr_three_group_r_results.json +0 -0
  552. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/surv_lr_two_group_meta.json +0 -0
  553. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/surv_lr_two_group_r_results.json +0 -0
  554. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/tall_skinny.csv +0 -0
  555. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/tall_skinny_meta.json +0 -0
  556. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/tall_skinny_r_results.json +0 -0
  557. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/validate_against_r.py +0 -0
  558. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/weights_offset_cases.json +0 -0
  559. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/fixtures/weights_offset_r_results.json +0 -0
  560. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/gam/__init__.py +0 -0
  561. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/gam/test_gam.py +0 -0
  562. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/hypothesis/__init__.py +0 -0
  563. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/hypothesis/conftest.py +0 -0
  564. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/hypothesis/test_backend_convention.py +0 -0
  565. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/hypothesis/test_chisq_test.py +0 -0
  566. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/hypothesis/test_design_split.py +0 -0
  567. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/hypothesis/test_fisher_test.py +0 -0
  568. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/hypothesis/test_gpu.py +0 -0
  569. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/hypothesis/test_ks_test.py +0 -0
  570. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/hypothesis/test_p_adjust.py +0 -0
  571. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/hypothesis/test_prop_test.py +0 -0
  572. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/hypothesis/test_r_validation.py +0 -0
  573. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/hypothesis/test_t_test.py +0 -0
  574. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/hypothesis/test_var_test.py +0 -0
  575. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/hypothesis/test_wilcox_test.py +0 -0
  576. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/mice/__init__.py +0 -0
  577. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/mice/references/generate_categorical_fixtures.R +0 -0
  578. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/mice/references/generate_mice_fixtures.R +0 -0
  579. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/mice/references/mice_categorical_data.csv +0 -0
  580. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/mice/references/mice_categorical_reference.json +0 -0
  581. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/mice/references/mice_reference.json +0 -0
  582. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/mice/references/mice_validation_complete.csv +0 -0
  583. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/mice/references/mice_validation_data.csv +0 -0
  584. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/mice/test_categorical.py +0 -0
  585. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/mice/test_datasets.py +0 -0
  586. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/mice/test_design.py +0 -0
  587. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/mice/test_gpu.py +0 -0
  588. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/mice/test_gpu_glm_separation.py +0 -0
  589. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/mice/test_gpu_mps.py +0 -0
  590. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/mice/test_gpu_polr_draw.py +0 -0
  591. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/mice/test_gpu_polr_separation.py +0 -0
  592. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/mice/test_methods.py +0 -0
  593. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/mice/test_mice.py +0 -0
  594. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/mice/test_polr_ridge_characterization.py +0 -0
  595. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/mice/test_pooling.py +0 -0
  596. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/mice/test_r_validation.py +0 -0
  597. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/mice/test_r_validation_categorical.py +0 -0
  598. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/mice/test_rng.py +0 -0
  599. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/mice/test_visit.py +0 -0
  600. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/mixed/__init__.py +0 -0
  601. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/mixed/conftest.py +0 -0
  602. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/mixed/test_compute_se.py +0 -0
  603. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/mixed/test_conf_int.py +0 -0
  604. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/mixed/test_glmm.py +0 -0
  605. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/mixed/test_grm.py +0 -0
  606. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/mixed/test_lmm_crossed.py +0 -0
  607. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/mixed/test_lmm_extreme_ratio.py +0 -0
  608. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/mixed/test_lmm_intercept.py +0 -0
  609. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/mixed/test_lmm_nested.py +0 -0
  610. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/mixed/test_lmm_slope.py +0 -0
  611. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/mixed/test_pls.py +0 -0
  612. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/mixed/test_r_validation.py +0 -0
  613. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/mixed/test_random_effects.py +0 -0
  614. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/mixed/test_satterthwaite.py +0 -0
  615. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/mixed/test_singular.py +0 -0
  616. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/mixed/test_structured.py +0 -0
  617. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/montecarlo/__init__.py +0 -0
  618. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/montecarlo/conftest.py +0 -0
  619. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/montecarlo/test_backend_convention.py +0 -0
  620. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/montecarlo/test_batched_solver.py +0 -0
  621. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/montecarlo/test_boot_ci.py +0 -0
  622. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/montecarlo/test_bootstrap.py +0 -0
  623. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/montecarlo/test_gpu.py +0 -0
  624. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/montecarlo/test_influence.py +0 -0
  625. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/montecarlo/test_permutation.py +0 -0
  626. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/montecarlo/test_r_validation.py +0 -0
  627. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/multinomial/__init__.py +0 -0
  628. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/multinomial/test_conf_int.py +0 -0
  629. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/multinomial/test_multinom.py +0 -0
  630. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/multivariate/__init__.py +0 -0
  631. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/multivariate/test_multivariate.py +0 -0
  632. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/mvnmle/references/apple_em_reference.json +0 -0
  633. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/mvnmle/references/apple_reference.json +0 -0
  634. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/mvnmle/references/generate_em_fixtures.R +0 -0
  635. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/mvnmle/references/little_mcar_apple.json +0 -0
  636. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/mvnmle/references/little_mcar_complete.json +0 -0
  637. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/mvnmle/references/little_mcar_extreme.json +0 -0
  638. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/mvnmle/references/little_mcar_missvals.json +0 -0
  639. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/mvnmle/references/little_mcar_simple_mcar.json +0 -0
  640. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/mvnmle/references/little_mcar_summary.json +0 -0
  641. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/mvnmle/references/missvals_em_reference.json +0 -0
  642. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/mvnmle/references/missvals_reference.json +0 -0
  643. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/mvnmle/references/small_test_reference.json +0 -0
  644. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/mvnmle/test_backend_routing.py +0 -0
  645. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/mvnmle/test_degeneracy.py +0 -0
  646. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/mvnmle/test_em.py +0 -0
  647. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/mvnmle/test_gpu.py +0 -0
  648. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/mvnmle/test_gpu_batched_equiv.py +0 -0
  649. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/mvnmle/test_gpu_unpack_equiv.py +0 -0
  650. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/mvnmle/test_mcar.py +0 -0
  651. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/mvnmle/test_mlest.py +0 -0
  652. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/mvnmle/test_monotone.py +0 -0
  653. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/mvnmle/test_no_silent_fallback.py +0 -0
  654. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/mvnmle/test_optimize.py +0 -0
  655. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/mvnmle/test_pattern_codes_large_p.py +0 -0
  656. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/mvnmle/test_squarem.py +0 -0
  657. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/ordinal/__init__.py +0 -0
  658. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/ordinal/test_conf_int.py +0 -0
  659. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/ordinal/test_information.py +0 -0
  660. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/ordinal/test_ordinal.py +0 -0
  661. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/regression/benchmark.py +0 -0
  662. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/regression/benchmark.r +0 -0
  663. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/regression/conftest.py +0 -0
  664. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/regression/test_conf_int.py +0 -0
  665. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/regression/test_fit.py +0 -0
  666. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/regression/test_gamma_nb.py +0 -0
  667. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/regression/test_glm.py +0 -0
  668. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/regression/test_glm_gpu.py +0 -0
  669. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/regression/test_glm_r_validation.py +0 -0
  670. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/regression/test_gpu_fp32_acceptance.py +0 -0
  671. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/regression/test_gpu_mps_cg.py +0 -0
  672. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/regression/test_gpu_se_ill_conditioned.py +0 -0
  673. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/regression/test_ic_dispersion_r_match.py +0 -0
  674. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/regression/test_irls_step.py +0 -0
  675. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/regression/test_module_split.py +0 -0
  676. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/regression/test_nb_autotheta_r_validation.py +0 -0
  677. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/regression/test_r_validation.py +0 -0
  678. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/regression/test_ridge.py +0 -0
  679. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/regression/test_stress_gpu.py +0 -0
  680. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/regression/test_terms.py +0 -0
  681. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/regression/test_terms_gpu.py +0 -0
  682. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/regression/test_weights_offset.py +0 -0
  683. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/regression/test_weights_offset_gpu.py +0 -0
  684. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/regression/test_weights_offset_r_validation.py +0 -0
  685. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/survival/__init__.py +0 -0
  686. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/survival/conftest.py +0 -0
  687. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/survival/test_conf_int.py +0 -0
  688. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/survival/test_coxph.py +0 -0
  689. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/survival/test_discrete_conf_int.py +0 -0
  690. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/survival/test_discrete_time.py +0 -0
  691. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/survival/test_gpu.py +0 -0
  692. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/survival/test_kaplan_meier.py +0 -0
  693. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/survival/test_logrank.py +0 -0
  694. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/survival/test_r_validation.py +0 -0
  695. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/survival/test_uniform_accessors_and_errors.py +0 -0
  696. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/survival/test_warnings.py +0 -0
  697. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/test_code_quality.py +0 -0
  698. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/timeseries/__init__.py +0 -0
  699. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/timeseries/test_acf_stationarity.py +0 -0
  700. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/timeseries/test_arima.py +0 -0
  701. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/timeseries/test_decomposition.py +0 -0
  702. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/timeseries/test_ets.py +0 -0
  703. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/timeseries/test_ets_selection.py +0 -0
  704. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/timeseries/test_loess.py +0 -0
  705. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/timeseries/test_stl_r_parity.py +0 -0
  706. {pystatistics-4.6.3 → pystatistics-4.6.4}/tests/timeseries/test_stl_robust.py +0 -0
  707. {pystatistics-4.6.3 → pystatistics-4.6.4}/validation/README.md +0 -0
  708. {pystatistics-4.6.3 → pystatistics-4.6.4}/validation/pyproject.toml +0 -0
  709. {pystatistics-4.6.3 → pystatistics-4.6.4}/validation/pystatsval/__init__.py +0 -0
  710. {pystatistics-4.6.3 → pystatistics-4.6.4}/validation/pystatsval/device.py +0 -0
  711. {pystatistics-4.6.3 → pystatistics-4.6.4}/validation/pystatsval/estimates.py +0 -0
  712. {pystatistics-4.6.3 → pystatistics-4.6.4}/validation/pystatsval/measure.py +0 -0
  713. {pystatistics-4.6.3 → pystatistics-4.6.4}/validation/pystatsval/record.py +0 -0
  714. {pystatistics-4.6.3 → pystatistics-4.6.4}/validation/pystatsval/rrunner.py +0 -0
  715. {pystatistics-4.6.3 → pystatistics-4.6.4}/validation/pystatsval/serialize.py +0 -0
  716. {pystatistics-4.6.3 → pystatistics-4.6.4}/validation/pystatsval/timing.py +0 -0
  717. {pystatistics-4.6.3 → pystatistics-4.6.4}/validation/tests/test_harness.py +0 -0
@@ -0,0 +1,379 @@
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: silenced a benign numpy `RuntimeWarning` during ARIMA
13
+ optimization (no result change).** L-BFGS-B's finite-difference gradient
14
+ probes non-stationary/non-invertible parameters during its line search,
15
+ where the exact-ML objective intentionally returns a non-finite value to
16
+ steer the optimizer back; scipy's `numdiff` then computes `inf - inf` and
17
+ numpy prints `invalid value encountered in subtract`. Wrapped the ARIMA
18
+ optimizer's `minimize()` calls (`_optimize_arima` and
19
+ `optimize_arima_factored`) in `np.errstate(invalid="ignore",
20
+ over="ignore")` via a shared `minimize_quiet` helper in
21
+ `_arima_likelihood.py`. The objective and every fail-loud convergence
22
+ guard are untouched (they rely on the non-finite return), so no fitted
23
+ result changes — verified: airline `(0,1,1)(0,1,1)[12]` loglik 244.6965
24
+ and `(2,1,1)` −685.169 identical to before, full timeseries suite 540
25
+ passed, and the two seasonal `auto_arima` tests pass with `RuntimeWarning`
26
+ promoted to error.
27
+
28
+ - **timeseries: seasonal ARIMA information criteria counted the wrong
29
+ parameters (RIGOR R18 showstopper).** `arima(..., seasonal=...)` in
30
+ `_arima_fit.py` computed `aic`/`aicc`/`bic` with `k = len(opt_params) + 1`,
31
+ where `opt_params` is the EXPANDED multiplicative polynomial — the airline
32
+ model `(0,1,1)(0,1,1)[12]` was counted as k=15 (expanded MA order 13 + mean
33
+ + sigma2) instead of the free-parameter k=3 (ma1, sma1, sigma2), inflating
34
+ its AIC from 1021.00 to 1044.90; `(1,0,1)(1,0,1)[12]` was counted k=28
35
+ instead of 6. `ARIMASolution` was internally inconsistent: `.n_params`
36
+ (already the free count) disagreed with the k inside `.aic`. Now
37
+ `k = p + q + P + Q + (1 if mean estimated) + 1`, matching R `stats::arima`'s
38
+ `length(coef) + 1` convention, and `.aic == -2*loglik + 2*n_params` holds
39
+ for every model (seasonal, non-seasonal, differenced, degenerate).
40
+ Verified on AirPassengers vs R 4.5.2: airline AIC 1021.0030 vs R 1021.0029,
41
+ AICc 1021.1919 (exact), `(2,1,1)(0,1,0)[12]` AICc 1018.1655 vs R 1018.1652.
42
+
43
+ - **timeseries: `arima()` estimated a mean for differenced models; R drops
44
+ it.** `stats::arima` ignores `include.mean` when d + D > 0; we estimated
45
+ one anyway (e.g. `(2,1,1)` on AirPassengers got mean=2.669, acting as an
46
+ implicit drift term), which both mis-counted k and changed the fit
47
+ (loglik −675.85 with spurious mean vs R's −685.17 without). `arima()` now
48
+ forces `include_mean=False` when d + D > 0. After the change the differenced
49
+ fits match R exactly: `(2,1,1)` loglik −685.1690 (R −685.1690), airline
50
+ −507.5015 (R −507.5014). Consequence for forecasts: differenced models no
51
+ longer carry an implicit drift (matches R `stats::arima`; explicit drift à
52
+ la `forecast::Arima(include.drift=)` remains unsupported).
53
+
54
+ - **timeseries: degenerate `(0,d,0)` AICc correction fixed** in
55
+ `_arima_fit.py`: was `AIC + 2/(n-2)`, correct k=1 formula is
56
+ `AIC + 2k(k+1)/(n-k-1) = AIC + 4/(n-2)`. Matters now that `(0,1,0)`-type
57
+ candidates (mean-free) hit this path during `auto_arima` search.
58
+
59
+ - **timeseries: `auto_arima` seasonal search never varied (P, Q)** —
60
+ `_stepwise_search`/`_grid_search` in `_arima_order.py` pinned the seasonal
61
+ order at `(1, D, 1)`, so R's AirPassengers pick `(2,1,1)(0,1,0)[12]` was
62
+ unreachable. Stepwise now follows Hyndman–Khandakar: initial candidates
63
+ `(2,d,2)(1,D,1)/(0,d,0)(0,D,0)/(1,d,0)(1,D,0)/(0,d,1)(0,D,1)` and ±1 moves
64
+ on P/Q (alone and jointly) next to the existing p/q moves; grid search
65
+ iterates the full P/Q grid. `AutoARIMAParams.best_seasonal` now reports the
66
+ SEARCHED seasonal order; seasonal `search_results` entries are
67
+ `((p,d,q), (P,D,Q,m))` pairs. Combined effect of the three ARIMA fixes:
68
+ `auto_arima(AirPassengers, period=12, ic='aicc')` selects
69
+ `(2,1,1)(0,1,0)[12]` AICc 1018.17 — identical to
70
+ `forecast::auto.arima` — where it previously selected
71
+ `(2,1,2)(1,1,1)[12]` (reported AICc 1088.4; R-correct AICc 1025.7, i.e.
72
+ 7.5 worse than R's pick). Non-seasonal AirPassengers now selects `(2,1,3)`
73
+ AICc 1350.22 (R's own `arima()` reproduces our fit and AICc to 4 decimals);
74
+ R's greedy no-drift stepwise stops at `(4,1,2)` AICc 1374.39, so we beat it
75
+ by R's own criterion — we do NOT add a drift feature to chase R's
76
+ with-drift pick `(4,1,2)+drift` (AICc 1357.22).
77
+
78
+ - **timeseries: ADF p-value was materially wrong in the fail-to-reject
79
+ region.** `_adf_pvalue` in `_stationarity.py` linearly interpolated between
80
+ the 1%/5%/10% critical values and extrapolated above the 10% point: a
81
+ near-unit-root series (stat −1.1426, ct) got p=0.4433 where MacKinnon says
82
+ 0.9216 (tseries: 0.9144). Replaced with the MacKinnon (1994) response
83
+ surface in new module `_adf_mackinnon.py` (same surface statsmodels
84
+ `adfuller` uses), valid across the whole range — no 0.01 floor. Verified vs
85
+ statsmodels 0.14.6: max |p diff| 3e-16 on a dense τ grid across nc/c/ct;
86
+ 36 series/lag/regression configs max diff 4e-13. Statistic untouched
87
+ (already exact vs tseries AND statsmodels). Reported critical values
88
+ upgraded from the MacKinnon 1996 two-term adjustment to the 2010
89
+ finite-sample response surface (matches statsmodels `mackinnoncrit`).
90
+
91
+ - **timeseries: `adf_test` default `regression` changed 'c' → 'ct'.** The
92
+ docstring claimed "'c' matches R" — false: `tseries::adf.test` always uses
93
+ constant + trend. With the 'ct' default the statistic reproduces tseries
94
+ exactly (verified 4 series, d < 1e-6). 'nc'/'c'/'ct' all remain available.
95
+ `ndiffs` in `_differencing.py` pins its internal call to `regression='c'`
96
+ (the drift variant forecast::ndiffs uses), so the new default does not
97
+ leak into ndiffs; the MacKinnon p-value surface itself flips no
98
+ ndiffs(test='adf') decision on an 18-series battery (see the ndiffs
99
+ bullet below).
100
+
101
+ - **timeseries: `kpss_test` default bandwidth aligned to
102
+ `tseries::kpss.test`.** Was `floor(3*sqrt(n)/13)` (lag 3 at n=200, 2 at
103
+ n=100); tseries uses `trunc(4*(n/100)^(1/4))` (`lshort=TRUE`; 4 at both).
104
+ New `lshort: bool = True` parameter mirrors tseries (`lshort=False` →
105
+ `trunc(12*(n/100)^(1/4))`); explicit `n_lags` overrides it. At matched
106
+ bandwidth statistic and interpolated p-value reproduce tseries exactly
107
+ (adversarially verified: 36/36 cases across 9 series × Level/Trend ×
108
+ lshort TRUE/FALSE, lag equal to tseries' in every case, stat diff
109
+ ≤ 2e-13, p diff ≤ 4e-15). Removed a dead duplicate `critical_values`
110
+ construction in `kpss_test`.
111
+
112
+ - **timeseries: `ndiffs` KPSS bandwidth pinned to forecast's rule.**
113
+ `forecast::ndiffs` does NOT use the tseries/urca `lags="short"`
114
+ bandwidth — it passes `use.lag = trunc(3*sqrt(n)/13)` (the OLD
115
+ pystatistics default). Cross-verification caught `ndiffs(WWWusage)`
116
+ flipping 1 → 0 (away from forecast) when kpss_test's new default
117
+ leaked in; `ndiffs` now passes `n_lags=trunc(3*sqrt(n)/13)`
118
+ explicitly. Verified against `forecast::ndiffs` on 18 series
119
+ (including the WWWusage borderline case, now pinned in the fixture).
120
+ Note the ADF-path p-value change flips NO ndiffs decision on that
121
+ battery (old vs new identical on all 18).
122
+
123
+ - **timeseries: `kpss_test` fails loud on degenerate input.** An exactly
124
+ constant series (or exactly linear series with `regression='ct'`)
125
+ produced a 0/0 statistic reported as confident rounding noise
126
+ (stat 4.4, p=0.01 — "rejects stationarity" for a constant); now raises
127
+ `ValidationError`. The unreachable `return 0.05` interpolation
128
+ fallback in `_kpss_pvalue` now raises instead of silently reporting
129
+ p=0.05.
130
+
131
+ - **timeseries: seasonal-AR exact-ML log-likelihood was ~80 units below R
132
+ (silent diffuse-init fallback).** `_stationary_init` in `_arima_kalman.py`
133
+ solved the Lyapunov equation `P = TPT' + RR'` by linear fixed-point
134
+ iteration with max_iter=200 and ABSOLUTE tol 1e-12; a moderately
135
+ persistent seasonal AR (sar1=-0.47 at lag 12 → spectral radius 0.94,
136
+ rate 0.88/iter) converged to within 1.4e-11 of the exact solution but
137
+ missed the tolerance, so the near-perfect P was DISCARDED for the
138
+ diffuse kappa=1e6 init — shifting loglik by ~80 units on
139
+ `(1,1,1)(1,1,0)[12]` models (log-AirPassengers: py 160.5 vs R 241.7;
140
+ nottem: −614.5 vs −536.9) and corrupting IC ranking of seasonal-AR
141
+ candidates. Replaced with a doubling iteration (S_{j+1} = S_j + A_j S_j
142
+ A_j', A_{j+1} = A_j²; quadratic in horizon) with RELATIVE tolerance;
143
+ diffuse fallback now only for genuinely non-stationary points, matching
144
+ R (which solves Q0 exactly and never falls back for stationary models).
145
+ Both models now match R: loglik 241.7298 vs 241.7332 / −536.8834 vs
146
+ −536.8839, coefficients to ~5 decimals. Removed the now-dead
147
+ `_sparse_T_times_M_times_TT` helper and scipy `solve_discrete_lyapunov`
148
+ import/fallback (`_initial_covariance`).
149
+
150
+ - **timeseries: seasonal ARIMA forecasts dropped the seasonal
151
+ coefficients; SEs ignored differencing and state uncertainty.**
152
+ `forecast_arima` in `_arima_forecast.py` fed `fitted.ar/.ma` — the
153
+ factored NON-seasonal coefficients — into the point-forecast recursion
154
+ and psi weights (airline forecasts up to ~5.4 off R `predict()`), and
155
+ computed SEs as `sigma*sqrt(cumsum(psi²))` of the differenced-scale ARMA
156
+ only (a random walk reported flat se=sigma at every horizon instead of
157
+ sigma*sqrt(h)). Rewritten: point forecasts come from the exact Kalman
158
+ filtered state via new `kalman_arma_forecast` in `_arima_kalman.py`
159
+ (R's `KalmanForecast` approach; the CSS-residual recursion carries
160
+ conditioning error at the sample end when an MA root is near the unit
161
+ circle — (2,1,1)(0,1,0)[12] with ma1=-0.98 was ~1.4 off R even with
162
+ the right polynomials), using the multiplied-out effective polynomials;
163
+ SEs aggregate the full h×h Kalman forecast-error covariance through the
164
+ integration operator `1/((1-B)^d (1-B^m)^D)`. Verified vs R
165
+ `predict.Arima` on airline, (2,1,1)(0,1,0)[12], (2,1,1), (0,1,0), and
166
+ both (1,1,1)(1,1,0)[12] fits: max |mean diff| 0.0014, max se rel diff
167
+ 0.002%. The dead `_forecast_differenced` recursion was removed.
168
+
169
+ - **timeseries: `sigma2` now reports the Kalman profile estimate for
170
+ ML-family fits** in `_arima_fit.py` (was CSS-residual SSE/n for all
171
+ methods, 2.9% high on the near-unit-MA model: 133.09 vs R's 129.31 —
172
+ the residual source of forecast-SE error). Matches R `stats::arima`
173
+ to 4 decimals on the reference fits; pure-CSS fits keep SSE/n (R's CSS
174
+ convention).
175
+
176
+ - **timeseries: seasonal `vcov`/`summary()` standard errors were read
177
+ from the wrong matrix.** The Hessian was computed over the EXPANDED
178
+ polynomial parameters, so `summary()` printed seasonal s.e. from
179
+ structurally-zero expanded lags (airline sma1: 0.38 printed vs R's
180
+ 0.0828). `_compute_hessian` now takes a callable and seasonal fits
181
+ differentiate in the FACTORED parameterization (ar, ma, sar, sma,
182
+ mean) using the exact-ML objective; airline and (1,1,1)(1,1,0)[12]
183
+ s.e. now match R to 4 decimals. Non-seasonal fits keep the existing
184
+ CSS-Hessian convention. `vcov` docstring ordering is now actually true.
185
+
186
+ - **timeseries: ML stage of CSS-ML is now better-of-two-starts for
187
+ mean-carrying fits.** The exact stationary init exposed a flat canyon
188
+ in the (ar, mean) surface toward the AR unit root: the CSS stage can
189
+ hand ML a drifted-mean basin L-BFGS-B cannot leave (AirPassengers
190
+ (1,0,1): mean 115.7, loglik 1.84 below R). `_optimize_arima` and
191
+ `optimize_arima_factored` now also run the ML stage from the original
192
+ Yule-Walker/sample-mean start and keep the better optimum — same
193
+ pattern as the 4.6.3 damped-ETS fix; fits improve or stay identical.
194
+ (1,0,1) now matches R: loglik −700.8744 vs −700.8741 at the same
195
+ coefficients. Only `include_mean` fits pay the extra ML run.
196
+
197
+ - **timeseries: `auto_arima` now applies forecast::auto.arima's
198
+ near-unit-root candidate veto and replicates its stepwise walk.** With
199
+ the corrected seasonal-AR likelihood, boundary models (AR/MA root
200
+ pile-up at the unit circle chasing the differencing operator) started
201
+ winning raw AICc — AirPassengers briefly selected (3,1,3)(1,1,2)[12]
202
+ at 1004.8. forecast deliberately excludes candidates whose expanded
203
+ AR or MA polynomial has a root with modulus < 1.01 (`myarima` sets
204
+ ic=Inf); `_try_fit` now does the same (`_has_near_unit_roots`), and
205
+ the stepwise search now replicates forecast's exact move priority
206
+ (seasonal P/Q moves first, singles before joint moves) with
207
+ first-improvement restart — the walk's PATH determines which local
208
+ optimum a greedy search reaches, and an all-neighbours sweep stopped
209
+ at (0,1,1)(2,1,0)[12] AICc 1019.5 where R's walk reaches
210
+ (2,1,1)(0,1,0)[12] at 1018.2. AirPassengers seasonal selection again
211
+ matches R exactly. `arima()` itself still fits whatever is requested
212
+ (veto applies to automatic selection only, exactly like R).
213
+
214
+ - **timeseries: point forecasts for d ≥ 2 (or seasonal D ≥ 2) were
215
+ catastrophically wrong.** `_undifference` in `_arima_forecast.py`
216
+ walked the integration ladder in reverse (first cumsum seeded with the
217
+ tail of the RAW series instead of the most-differenced one) — invisible
218
+ for d + D ≤ 1, but an ARIMA(1,2,1) 12-step mean was off by ~13,600
219
+ while its (fixed) SEs matched R to 7.7e-5. Pre-existing, caught by the
220
+ adversarial review of the forecast rewrite. Integration now proceeds
221
+ from the most-differenced scale outward; verified vs R `predict()`:
222
+ (1,2,1) mean diff 0.0006, (0,2,0) exact, (0,1,1)(0,2,1)[12] 0.006.
223
+
224
+ - **timeseries: `auto_arima` now determines d with the KPSS test,
225
+ matching `forecast::auto.arima`'s default.** `_determine_d` hardcoded
226
+ `ndiffs(test='adf')`; on series where ADF and KPSS disagree the search
227
+ ran at the wrong d and could not reach R's model class (wineind: adf
228
+ d=0 vs R/KPSS d=1 → pick 41 AICc worse by R's own accounting;
229
+ WWWusage: adf d=2 → over-differenced (2,2,0) vs R's (1,1,1)). Cross-
230
+ verification proved forcing R's d reproduces R's exact picks on both.
231
+ With KPSS-based d, both now match; the other six benchmark series
232
+ (already KPSS-consistent) are unchanged.
233
+
234
+ - **timeseries: spurious `ConvergenceError` when the CSS warm-start
235
+ aborts but ML refinement converges.** In `_optimize_arima` the
236
+ `converged` flag kept the CSS stage's failure even after a successful
237
+ ML stage (co2 (2,1,1): ML at −466.830 = R's −466.830, yet arima()
238
+ raised). Pre-existing bookkeeping, newly exposed by the mean-drop
239
+ change; `converged` now reflects the accepted ML result, and the
240
+ factored two-start prefers a converged second optimum over a failed
241
+ first one.
242
+
243
+ - **timeseries: `sigma2` failure sentinel no longer silent.**
244
+ `kalman_arma_loglik` signals failure with a placeholder sigma2 of 1.0;
245
+ `arima()` would have reported it as a real variance. Now raises
246
+ `ConvergenceError` (unreachable in practice — the ML stage just
247
+ evaluated those parameters — but the silent default violated the
248
+ fail-loud rule).
249
+
250
+ - **timeseries: removed the dead innovations-algorithm ML path**
251
+ (`_exact_loglik_innovations`, `_innovations_algorithm`,
252
+ `_arma_autocovariance` in `_arima_likelihood.py`; the scipy
253
+ `solve_discrete_lyapunov` fallback in `_arima_kalman.py`). No callers
254
+ since the Kalman path landed, and review found `_arma_autocovariance`
255
+ computes a wrong gamma(0) for mixed ARMA (2.1915 vs true 2.1353 for
256
+ ar=(0.6,−0.3), ma=0.4) — its docstring claimed it was a 1e-6-accurate
257
+ second-source reference. Dead AND wrong code removed rather than
258
+ fixed. `_stationary_init` also symmetrizes its result (float matmul
259
+ drift ~1e-12 on near-unit systems), and stale "innovations algorithm"
260
+ docstrings now say Kalman filter.
261
+
262
+ - **timeseries: exact-ML fits now report the invertible (canonical) MA
263
+ representation.** The exact-ML likelihood is invariant under
264
+ reflecting MA roots across the unit circle (theta → 1/theta with a
265
+ matching sigma2 rescale), so the optimizer landed on the
266
+ non-invertible mirror on ~10% of boundary-ish fits (AirPassengers
267
+ (1,1,1)(1,1,1)[12]: sma1=1.19, sigma2 30% below R; co2 (1,0,1)+mean:
268
+ ma1=1.46, sigma2 53% below). Statistically the invertible
269
+ representative is the identified/fundamental (Wold) one: only its
270
+ sigma2 is the one-step prediction-error variance, and the
271
+ non-invertible representation made the CSS residual recursion
272
+ diverge. R does exactly this: `stats::arima`'s internal `maInvert`
273
+ normalizes the fitted MA blocks of ML-family fits post-fit and
274
+ recomputes the Hessian/sigma2 at the inverted coefficients — so this
275
+ is required R parity, not an extra nicety (verified by seeding R's
276
+ optimizer in the mirror basin via `init=`: R still reports the
277
+ invertible fit). New `normalize_ma_coefficients` in `_arima_factored.py`
278
+ reflects inside-circle roots per MA FACTOR (preserving the
279
+ multiplicative seasonal structure); roots on the circle are left
280
+ alone (the MA unit-root pile-up under over-differencing is a genuine
281
+ boundary optimum where both representatives coincide); a
282
+ likelihood-invariance guard reverts loudly if the flip is not
283
+ numerically neutral. NOT applied to pure-CSS fits — the CSS criterion
284
+ is not reflection-invariant, so the flipped parameters would not be
285
+ the optimum of the fitted criterion (R's split too). All downstream
286
+ artifacts (sigma2, residuals, vcov, the auto_arima root veto) are
287
+ computed at the normalized point; sigma2 on the previously-mirror
288
+ fits now matches R (0.09% worst), and mirror candidates now survive
289
+ the selection veto exactly when R keeps them. Likelihood, AICc, and
290
+ forecasts are unchanged (equivalence class).
291
+
292
+ - **timeseries: ML-family `residuals` are now the standardized Kalman
293
+ innovations `v_t/sqrt(F_t)`,** matching R `stats::arima`'s
294
+ `residuals()` (arima.c scales by `sqrt(gain)`). These are the
295
+ model's actual innovations with CONSTANT variance sigma2 at every t —
296
+ the homoscedastic white noise Ljung-Box/ACF/normality diagnostics
297
+ assume — and satisfy `mean(residuals**2) == sigma2` identically
298
+ (verified to machine precision on every reference fit). CSS
299
+ residuals approximate them only up to a conditioning transient
300
+ decaying like the largest MA root modulus^t (~7% still alive at
301
+ t=131 for ma1=−0.98), and diverged outright on the mirror fits.
302
+ Verified against R `residuals()` on the reference battery (aligned
303
+ after the d+D·m observations differencing consumes): max diff ≤6e-4
304
+ at matched fits. `sigma2` for ML fits is now computed as
305
+ `mean(residuals**2)` directly (algebraically identical to the Kalman
306
+ profile estimator; removes a redundant filter pass and the silent
307
+ failure sentinel — `kalman_arma_innovations` raises loudly instead).
308
+ Pure-CSS fits keep the CSS recursion and sigma2 = SSE/n (R's CSS
309
+ convention). New `kalman_arma_innovations` in `_arima_kalman.py`;
310
+ the normalization orchestration lives in
311
+ `_arima_factored.normalize_to_invertible` (keeps `_arima_fit.py`
312
+ under the LOC limit and dedupes the seasonal/non-seasonal guard).
313
+ `kalman_arma_forecast`/`kalman_arma_innovations` raise
314
+ `ConvergenceError` (not `ValidationError`) on internal numerical
315
+ failure — these are not user-input errors.
316
+
317
+ - **timeseries: `arima()` gains R's `init=` parameter** (new module
318
+ `_arima_init.py`). Layout follows R `coef()` order
319
+ `[ar, ma, sar, sma, mean?]` (mean slot only when a mean is actually
320
+ estimated, i.e. d + D = 0 and include_mean); `numpy.nan` entries are
321
+ filled with defaults (zeros for coefficients, sample mean of the
322
+ differenced series for the mean); non-stationary AR/seasonal-AR
323
+ inits raise ValidationError (R errors "non-stationary AR part");
324
+ non-invertible MA inits are normalized to the invertible
325
+ representative before optimization — R's documented maInvert-on-init
326
+ intent; empirically R's own implementation ERRORS on such inits
327
+ (its CSS/optim stage diverges first), so accepting them is a strict
328
+ improvement over the reference. Rejected loudly for
329
+ method='Whittle'. R-parity pinned in the fixture: the airline warm
330
+ start lands at R's optimum (ma1/sma1 to 1e-5, loglik to 1e-4).
331
+
332
+ - **timeseries: `arima()` docstring no longer overclaims interface
333
+ parity.** The old text said "Matches the interface and numerical
334
+ approach of R's stats::arima()" while the interface lacked xreg,
335
+ transform.pars, fixed, init, n.cond, SSinit, optim.method/control,
336
+ kappa, with no disclosed reason — a violation of the "do it or give
337
+ a principled reason" promise. The docstring now states the claim
338
+ precisely: numerical-behaviour parity (verified), a documented
339
+ supported subset (order/seasonal/include_mean/method/init),
340
+ not-yet-implemented parameters (fixed, xreg incl. drift), and the
341
+ by-design exclusions with reasons (transform.pars/SSinit/kappa/
342
+ n.cond/optim.* are knobs over R's optimizer and state-space
343
+ internals; we guarantee results parity, not knob parity). The
344
+ timeseries module index claim was likewise corrected. Also
345
+ documents the pure-CSS conditioning difference vs R (we
346
+ zero-initialize over all observations; R conditions on and excludes
347
+ the first n.cond — measured: airline seasonal CSS identical to R,
348
+ (2,1,1) coefficients ~1e-3 apart with sigma2 ~1.3%, weakly
349
+ identified fits may reach different CSS optima; CSS-ML/ML results
350
+ are unaffected and remain covered by the parity guarantee).
351
+
352
+ - **timeseries: remaining convention notes:** `arima_batch` (Whittle)
353
+ still reports a documented per-series sample mean under d > 0;
354
+ drift/intercept terms for d + D = 1 models remain unsupported
355
+ (`fixed=` and `xreg=` are the tracked interface gaps, disclosed in
356
+ the `arima()` docstring).
357
+
358
+ - **tests:** new `tests/timeseries/test_arima_kalman_r_parity.py`
359
+ (SAR loglik/coef/IC parity on both failing models, stationary-init
360
+ doubling normal/edge/failure incl. Lyapunov residual and scipy
361
+ agreement, forecast mean+se parity on NINE models vs R
362
+ `predict.Arima` incl. d=2 and seasonal D=2, analytic random-walk se,
363
+ loud forecast failure on non-finite params, sigma2 profile parity,
364
+ factored-vcov s.e. parity and dimensions, near-unit-root veto
365
+ normal/boundary/empty cases, converged-flag guard on the co2 (2,1,1)
366
+ CSS-abort case) with fixture `arima_kalman_r_reference.json` +
367
+ generator (R 4.5.2); `test_arima_ic.py` gains the WWWusage
368
+ KPSS-d-selection regression test. Full timeseries suite incl.
369
+ slow-marked: 521 passed, 0 failures.
370
+
371
+ - **tests:** new `tests/timeseries/test_arima_ic.py` (IC self-consistency,
372
+ R free-k parity, mean-under-differencing, degenerate AICc, auto_arima
373
+ seasonal selection = R, validation failures) and
374
+ `tests/timeseries/test_stationarity_mackinnon.py` (ADF default/statistic/
375
+ p-value vs statsmodels fixtures incl. near-unit-root ≈0.92, saturation,
376
+ monotonicity, CV failure cases; KPSS bandwidth rules, tseries parity,
377
+ lshort validation). Reference fixtures + generator scripts under
378
+ `tests/fixtures/` (R 4.5.2, tseries 0.10-58, statsmodels 0.14.6). Full
379
+ timeseries suite: 459 passed, 0 failures.
@@ -1,5 +1,181 @@
1
1
  # Changelog
2
2
 
3
+ ## 4.6.4
4
+
5
+ Seasonal ARIMA information criteria, likelihoods, forecasts, and standard
6
+ errors fixed — `auto_arima` now selects the same models as R's
7
+ `forecast::auto.arima`, and forecasts reproduce R's `predict()`; ADF
8
+ p-values corrected across their full range; stationarity-test defaults
9
+ aligned with R's `tseries`.
10
+
11
+ - **Seasonal ARIMA models reported inflated AIC/AICc/BIC — fixed.**
12
+ `arima(..., seasonal=...)` counted the coefficients of the expanded
13
+ multiplicative AR/MA polynomials instead of the free estimated parameters:
14
+ the airline model `(0,1,1)(0,1,1)[12]` on AirPassengers was penalised for
15
+ 15 parameters instead of 3, reporting AIC 1044.9 where R's `stats::arima`
16
+ gives 1021.0. The fitted coefficients and log-likelihood were always
17
+ correct — only the information criteria (and the `n_params`-vs-`aic`
18
+ consistency of the result object) were wrong. All criteria now use the
19
+ free-parameter count (`p + q + P + Q`, plus the mean if one is estimated,
20
+ plus one for the innovation variance), matching R exactly, and
21
+ `aic == -2*log_likelihood + 2*n_params` holds on every model. The AICc
22
+ correction of the trivial `(0,d,0)` model was also off (used `2/(n-2)`
23
+ instead of `4/(n-2)`) and is fixed.
24
+ - **Differenced ARIMA models no longer estimate a mean.** R's `stats::arima`
25
+ ignores `include.mean` whenever the model has any differencing
26
+ (`d + D > 0`); pystatistics estimated one anyway, which acted as an
27
+ implicit drift term and shifted both the fit and the parameter count.
28
+ Differenced fits now reproduce R's log-likelihoods exactly (e.g.
29
+ `(2,1,1)` on AirPassengers: −685.169 both). Forecasts from differenced
30
+ models consequently no longer carry an implicit drift.
31
+ - **`auto_arima` now searches the seasonal orders and matches R.** The
32
+ seasonal search previously kept `(P, Q)` pinned at `(1, 1)`, so many of R's
33
+ selections were unreachable; combined with the inflated criteria it could
34
+ silently return a materially worse model — on AirPassengers it selected
35
+ `(2,1,2)(1,1,1)[12]`, which is 7.5 AICc worse than R's pick by R's own
36
+ accounting. The stepwise search now varies P and Q (alone and jointly,
37
+ Hyndman–Khandakar moves) and the exhaustive search iterates the full
38
+ P/Q grid: `auto_arima(AirPassengers, period=12)` now selects
39
+ `(2,1,1)(0,1,0)[12]` with AICc 1018.17 — identical to
40
+ `forecast::auto.arima`. On the non-seasonal AirPassengers benchmark the
41
+ search finds `(2,1,3)` (AICc 1350.2, confirmed by R's own `arima()`),
42
+ a better model under the shared criterion than the `(4,1,2)` R's greedy
43
+ no-drift search stops at (1374.4). Drift terms remain unsupported.
44
+ `best_seasonal` on the result now reports the seasonal order the search
45
+ actually selected, and seasonal `search_results` entries are
46
+ `((p,d,q), (P,D,Q,m))` pairs.
47
+ - **Seasonal models with a persistent seasonal AR term reported
48
+ log-likelihoods ~80 units below R — fixed.** The Kalman filter's
49
+ stationary initial covariance was solved by an iteration whose budget a
50
+ moderately persistent seasonal AR term exceeded; the near-converged
51
+ solution was silently discarded for a diffuse initialization, shifting
52
+ the reported log-likelihood (and all information criteria) far from R's
53
+ on models such as `(1,1,1)(1,1,0)[12]` even though the fitted
54
+ coefficients were essentially correct. The initialization now uses a
55
+ doubling iteration that converges for any stationary model;
56
+ `(1,1,1)(1,1,0)[12]` on log(AirPassengers) and nottem now reproduces
57
+ R's log-likelihood to three decimals.
58
+ - **Seasonal ARIMA forecasts ignored the seasonal coefficients — fixed.**
59
+ Point forecasts used only the non-seasonal AR/MA coefficients (airline-
60
+ model forecasts were up to ~5.4 off R's `predict()`), and forecast
61
+ standard errors ignored both the differencing operators (a random walk
62
+ reported the same standard error at every horizon instead of growing
63
+ with sqrt(h)) and end-of-sample state uncertainty. Forecasts now come
64
+ from the exact Kalman filtered state with the full multiplied-out
65
+ polynomials, and standard errors aggregate the exact forecast-error
66
+ covariance through the un-differencing — matching R's `predict.Arima`
67
+ to 0.002% on the reference battery. `sigma2` on ML-family fits now
68
+ reports the profile maximum-likelihood estimate (R's convention; the
69
+ previous residual-based value was 2.9% high on a near-unit-MA model).
70
+ - **Maximum-likelihood fits now always report the invertible MA
71
+ representation.** The exact likelihood cannot distinguish an MA
72
+ polynomial from its reflection across the unit circle (with a
73
+ matching innovation-variance rescale), and the optimizer sometimes
74
+ returned the non-invertible mirror — same fit, but with `sigma2` up
75
+ to 53% below the one-step prediction-error variance (which is what
76
+ R reports and what prediction intervals need) and coefficients that
77
+ could not be compared with R or the literature. Fits are now
78
+ normalized to the invertible representative — the standard,
79
+ identified parameterization, and exactly what R's `arima` does
80
+ internally — per seasonal factor; genuine unit-root boundary fits
81
+ (e.g. from over-differencing) are left untouched, and the
82
+ likelihood, information criteria, and forecasts are unchanged.
83
+ CSS-only fits are not normalized (the CSS criterion is not
84
+ reflection-invariant; R skips them too).
85
+ - **Residuals from maximum-likelihood fits are now the standardized
86
+ Kalman innovations,** matching R's `residuals()` for `arima`. These
87
+ have constant variance `sigma2` at every time point — the
88
+ homoscedastic white noise that Ljung-Box/ACF/normality diagnostics
89
+ assume — and satisfy `mean(residuals**2) == sigma2` exactly. The
90
+ previous CSS-based residuals differed from the true innovations by a
91
+ conditioning transient that matters precisely near an MA unit root
92
+ (a very common fit region after differencing) and diverged on
93
+ non-invertible fits. CSS-only fits keep CSS residuals, as in R.
94
+ - **Point forecasts from twice-differenced models diverged — fixed.**
95
+ Undoing the differencing integrated in the wrong order, which was
96
+ invisible for `d + D <= 1` but produced wildly wrong point forecasts
97
+ for `d >= 2` or seasonal `D >= 2` (an ARIMA(1,2,1) 12-step forecast
98
+ was off by four orders of magnitude). Verified against R for d=2 and
99
+ seasonal D=2 models. A related bookkeeping bug that raised a spurious
100
+ convergence error when the CSS warm-start aborted but the maximum-
101
+ likelihood refinement converged is also fixed.
102
+ - **`auto_arima` chooses the differencing order with the KPSS test,**
103
+ matching `forecast::auto.arima`'s default (it previously used the ADF
104
+ test, which disagrees with KPSS on some series and sent the search to
105
+ the wrong model class — on one benchmark the selected model was 41
106
+ AICc worse than R's by R's own accounting; both such benchmark series
107
+ now reproduce R's selection exactly).
108
+ - **Seasonal coefficient standard errors were wrong — fixed.** The
109
+ variance-covariance matrix was computed over the expanded product
110
+ polynomial, so `summary()` printed seasonal standard errors from the
111
+ wrong entries (airline `sma1`: 0.38 printed vs R's 0.083). The Hessian
112
+ is now taken in the factored parameterization; standard errors match R
113
+ to four decimals on the reference models. `vcov` rows/columns now
114
+ correspond to the reported coefficients (ar, ma, sar, sma, mean).
115
+ - **`auto_arima` applies R's near-unit-root candidate veto and follows
116
+ its exact stepwise walk.** Like `forecast::auto.arima`, candidates
117
+ whose fitted AR or MA polynomial has a root within 1.01 of the unit
118
+ circle are excluded from automatic selection (they win raw AICc by
119
+ degenerating toward the differencing operator but are numerically
120
+ unstable and forecast poorly), and the stepwise search now uses
121
+ forecast's move priority and first-improvement policy. Fits requested
122
+ explicitly via `arima()` are unaffected. Mean-carrying fits also gain a
123
+ second maximum-likelihood start (kept only when better), fixing a stall
124
+ where `(1,0,1)` on AirPassengers converged 1.8 log-likelihood units
125
+ short of R.
126
+ - **`arima()` gains R's `init=` parameter** for user-supplied starting
127
+ values (warm starts for rolling re-estimation, basin control on hard
128
+ likelihoods). Semantics follow R: values in `coef()` order, `nan`
129
+ entries filled with defaults, non-stationary AR inits rejected, and
130
+ non-invertible MA inits normalized to the invertible representation
131
+ before optimization. Not available for `method='Whittle'`.
132
+ - **Documentation now states R-interface coverage precisely.** The
133
+ `arima()` docstring previously claimed to match R's interface while
134
+ several R parameters were absent with no stated reason. It now
135
+ enumerates what is supported (`order`, `seasonal`, `include_mean`,
136
+ `method`, `init`), what is not yet implemented (`fixed`, `xreg` —
137
+ including drift terms), and what is deliberately not exposed with
138
+ the reason (R's optimizer and state-space internals; pystatistics
139
+ guarantees parity of results, not of internal knobs). The
140
+ documentation also discloses that `method='CSS'` uses a different
141
+ conditioning convention than R's CSS (results typically agree to
142
+ ~1e-3 but are not covered by the parity guarantee; CSS-ML and ML
143
+ results are).
144
+ - **`adf_test` p-values were wrong in the fail-to-reject region — fixed.**
145
+ The p-value interpolated between the 1%/5%/10% critical values and
146
+ extrapolated beyond them: a near-unit-root series with statistic −1.14
147
+ (constant + trend) reported p ≈ 0.44 where the correct value is ≈ 0.92 —
148
+ understating the evidence *for* a unit root exactly where the test is
149
+ used to decide differencing. P-values now come from the MacKinnon (1994)
150
+ response surface (the same used by statsmodels' `adfuller` and, for its
151
+ critical values, R's `urca`), valid across the whole range with no 0.01
152
+ floor; they match statsmodels to machine precision across all regression
153
+ types. The test statistic was already exact and is unchanged. Reported
154
+ critical values now use MacKinnon's 2010 finite-sample surface.
155
+ - **`adf_test` defaults to `regression="ct"` (constant + trend), matching
156
+ `tseries::adf.test`,** which always includes a trend. The previous default
157
+ `"c"` was documented as matching R — it does not. All three regression
158
+ variants (`"nc"`, `"c"`, `"ct"`) remain available. `ndiffs` is unaffected:
159
+ it pins the constant-only variant that `forecast::ndiffs` uses.
160
+ - **`kpss_test` default bandwidth now matches `tseries::kpss.test`.** The
161
+ Bartlett-kernel lag truncation was `floor(3*sqrt(n)/13)`; tseries uses
162
+ `trunc(4*(n/100)^(1/4))`. A new `lshort` parameter mirrors tseries
163
+ (`lshort=False` gives the long rule `trunc(12*(n/100)^(1/4))`; an explicit
164
+ `n_lags` overrides both). At matched bandwidth the statistic and
165
+ interpolated p-value reproduce tseries exactly for both the level and
166
+ trend nulls; p-values remain clamped to the published table's
167
+ [0.01, 0.10] range, as in tseries. `ndiffs` keeps `forecast::ndiffs`'s
168
+ own bandwidth (`trunc(3*sqrt(n)/13)`) and its answers are unchanged —
169
+ verified against `forecast::ndiffs` on an 18-series battery.
170
+ `kpss_test` now raises on degenerate input (an exactly constant series,
171
+ or an exactly linear one with `regression="ct"`) instead of returning a
172
+ rounding-noise statistic.
173
+ - **A spurious `RuntimeWarning: invalid value encountered in subtract` no
174
+ longer prints during `arima()` / `auto_arima()` fitting.** It came from
175
+ the optimizer's internal finite-difference gradient probing infeasible
176
+ (non-stationary / non-invertible) parameters; it never affected results.
177
+ Fitted coefficients, likelihoods, and model selections are unchanged.
178
+
3
179
  ## 4.6.3
4
180
 
5
181
  Damped-trend ETS fits no longer stall; ETS-vs-R verification strengthened.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pystatistics
3
- Version: 4.6.3
3
+ Version: 4.6.4
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,43 @@ pip install pystatistics[dev]
418
418
 
419
419
  ## What's New
420
420
 
421
+ ### 4.6.4 — seasonal ARIMA criteria, likelihoods and forecasts fixed; ADF p-values corrected
422
+
423
+ Seasonal ARIMA fits reported inflated AIC/AICc/BIC: the criteria counted
424
+ the expanded multiplicative polynomial coefficients instead of the free
425
+ estimated parameters (the airline model was penalised for 15 parameters
426
+ instead of 3). The criteria now use the free-parameter count and match R's
427
+ `stats::arima` exactly, with `aic == -2*log_likelihood + 2*n_params`
428
+ holding on every result. Differenced models no longer estimate a mean
429
+ (R ignores `include.mean` when `d + D > 0`). Models with a persistent
430
+ seasonal AR term also reported log-likelihoods ~80 units below R's (a
431
+ silently-degraded Kalman initialization) — fixed; such fits now reproduce
432
+ R to three decimals. Seasonal forecasts previously dropped the seasonal
433
+ coefficients and their standard errors ignored differencing; forecasts now
434
+ come from the exact Kalman state and match R's `predict()` (means and
435
+ standard errors) to well under a percent, seasonal coefficient standard
436
+ errors match R to four decimals, and `sigma2` reports the profile ML
437
+ estimate. ML fits are normalized to the invertible MA representation
438
+ (the identified parameterization whose `sigma2` is the prediction-error
439
+ variance), and their residuals are now the standardized Kalman
440
+ innovations — constant variance, `mean(residuals**2) == sigma2` exactly,
441
+ matching R's `residuals()`. `arima()` gains R's `init=` parameter
442
+ (warm starts / user starting values, with R's fill and validation
443
+ semantics), and its documentation now states precisely which R
444
+ parameters are supported, which are not yet implemented (`fixed`,
445
+ `xreg`/drift), and which are deliberately not exposed and why. `auto_arima` searches the seasonal orders (P, Q), chooses the
446
+ differencing order with the KPSS test, applies the same near-unit-root
447
+ candidate veto as `forecast::auto.arima`, and follows its stepwise
448
+ walk — on AirPassengers it selects `(2,1,1)(0,1,0)[12]`,
449
+ identical to R, where it previously returned a model 7.5 AICc worse by
450
+ R's own accounting. `adf_test` p-values now come from the MacKinnon
451
+ response surface and match statsmodels' `adfuller` to machine precision
452
+ across the whole range — previously a near-unit-root series could report
453
+ p ≈ 0.44 where the correct value is ≈ 0.92 — and the default regression is
454
+ now `"ct"` (constant + trend), matching `tseries::adf.test`. `kpss_test`'s
455
+ default bandwidth now matches `tseries::kpss.test` (with a new `lshort`
456
+ parameter); at matched bandwidth it reproduces tseries exactly.
457
+
421
458
  ### 4.6.3 — damped-trend ETS fits no longer stall
422
459
 
423
460
  Damped-trend ETS models (`Ad`) could stop short of their optimum and report
@@ -371,6 +371,43 @@ pip install pystatistics[dev]
371
371
 
372
372
  ## What's New
373
373
 
374
+ ### 4.6.4 — seasonal ARIMA criteria, likelihoods and forecasts fixed; ADF p-values corrected
375
+
376
+ Seasonal ARIMA fits reported inflated AIC/AICc/BIC: the criteria counted
377
+ the expanded multiplicative polynomial coefficients instead of the free
378
+ estimated parameters (the airline model was penalised for 15 parameters
379
+ instead of 3). The criteria now use the free-parameter count and match R's
380
+ `stats::arima` exactly, with `aic == -2*log_likelihood + 2*n_params`
381
+ holding on every result. Differenced models no longer estimate a mean
382
+ (R ignores `include.mean` when `d + D > 0`). Models with a persistent
383
+ seasonal AR term also reported log-likelihoods ~80 units below R's (a
384
+ silently-degraded Kalman initialization) — fixed; such fits now reproduce
385
+ R to three decimals. Seasonal forecasts previously dropped the seasonal
386
+ coefficients and their standard errors ignored differencing; forecasts now
387
+ come from the exact Kalman state and match R's `predict()` (means and
388
+ standard errors) to well under a percent, seasonal coefficient standard
389
+ errors match R to four decimals, and `sigma2` reports the profile ML
390
+ estimate. ML fits are normalized to the invertible MA representation
391
+ (the identified parameterization whose `sigma2` is the prediction-error
392
+ variance), and their residuals are now the standardized Kalman
393
+ innovations — constant variance, `mean(residuals**2) == sigma2` exactly,
394
+ matching R's `residuals()`. `arima()` gains R's `init=` parameter
395
+ (warm starts / user starting values, with R's fill and validation
396
+ semantics), and its documentation now states precisely which R
397
+ parameters are supported, which are not yet implemented (`fixed`,
398
+ `xreg`/drift), and which are deliberately not exposed and why. `auto_arima` searches the seasonal orders (P, Q), chooses the
399
+ differencing order with the KPSS test, applies the same near-unit-root
400
+ candidate veto as `forecast::auto.arima`, and follows its stepwise
401
+ walk — on AirPassengers it selects `(2,1,1)(0,1,0)[12]`,
402
+ identical to R, where it previously returned a model 7.5 AICc worse by
403
+ R's own accounting. `adf_test` p-values now come from the MacKinnon
404
+ response surface and match statsmodels' `adfuller` to machine precision
405
+ across the whole range — previously a near-unit-root series could report
406
+ p ≈ 0.44 where the correct value is ≈ 0.92 — and the default regression is
407
+ now `"ct"` (constant + trend), matching `tseries::adf.test`. `kpss_test`'s
408
+ default bandwidth now matches `tseries::kpss.test` (with a new `lshort`
409
+ parameter); at matched bandwidth it reproduces tseries exactly.
410
+
374
411
  ### 4.6.3 — damped-trend ETS fits no longer stall
375
412
 
376
413
  Damped-trend ETS models (`Ad`) could stop short of their optimum and report