bossanova 0.1.0.dev9__tar.gz → 0.1.0.dev11__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 (234) hide show
  1. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/.gitignore +1 -0
  2. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/PKG-INFO +27 -18
  3. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/README.md +24 -17
  4. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/containers/builders/dataframes.py +46 -35
  5. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/containers/builders/results.py +8 -6
  6. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/containers/builders/state.py +24 -17
  7. bossanova-0.1.0.dev11/bossanova/internal/containers/schemas.py +587 -0
  8. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/containers/structs/data.py +4 -4
  9. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/containers/structs/display.py +9 -9
  10. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/containers/structs/explore.py +3 -3
  11. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/containers/structs/formula.py +2 -2
  12. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/containers/structs/specs.py +2 -2
  13. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/containers/structs/state.py +32 -21
  14. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/maths/design/reference.py +40 -8
  15. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/maths/solvers/__init__.py +2 -0
  16. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/maths/solvers/glmer.py +102 -55
  17. bossanova-0.1.0.dev11/bossanova/internal/maths/solvers/quadrature.py +272 -0
  18. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/operations/common/factors.py +0 -59
  19. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/operations/compare/compare.py +10 -1
  20. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/operations/compare/cv.py +11 -9
  21. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/operations/compare/deviance.py +27 -14
  22. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/operations/compare/f_test.py +11 -9
  23. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/operations/compare/helpers.py +14 -6
  24. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/operations/compare/lrt_compare.py +37 -12
  25. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/operations/convergence.py +1 -1
  26. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/operations/diagnostics.py +43 -43
  27. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/operations/fit/__init__.py +1 -1
  28. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/operations/fit/glmer.py +14 -0
  29. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/operations/fit/lmer.py +1 -67
  30. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/operations/infer/asymptotic.py +15 -3
  31. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/operations/infer/bootstrap.py +62 -1
  32. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/operations/infer/mee.py +5 -3
  33. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/operations/infer/profile.py +5 -3
  34. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/operations/marginal/__init__.py +12 -0
  35. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/operations/marginal/compute.py +227 -33
  36. bossanova-0.1.0.dev11/bossanova/internal/operations/marginal/conditions.py +225 -0
  37. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/operations/marginal/contrasts.py +148 -0
  38. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/operations/marginal/emm.py +18 -1
  39. bossanova-0.1.0.dev11/bossanova/internal/operations/profile.py +8 -0
  40. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/operations/resample/glmer.py +0 -11
  41. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/operations/resample/lmer.py +0 -10
  42. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/operations/simulation/dgp/glm.py +2 -17
  43. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/operations/varying.py +12 -11
  44. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/viz/cognition.py +132 -105
  45. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/viz/compare.py +2 -2
  46. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/viz/core.py +8 -0
  47. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/viz/core_sizing.py +16 -4
  48. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/viz/core_viz.py +170 -0
  49. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/viz/dag.py +110 -37
  50. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/viz/design.py +32 -24
  51. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/viz/fit.py +3 -3
  52. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/viz/fit_layers.py +6 -6
  53. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/viz/lattice.py +112 -28
  54. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/viz/mem.py +4 -4
  55. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/viz/params.py +2 -2
  56. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/viz/predict.py +32 -12
  57. bossanova-0.1.0.dev11/bossanova/internal/viz/profile.py +112 -0
  58. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/viz/ranef.py +4 -2
  59. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/viz/resamples.py +4 -2
  60. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/viz/vif.py +84 -45
  61. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/model/core.py +2 -6
  62. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/pyproject.toml +3 -1
  63. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/tests/bossanova_tests/hypothesis/README.md +3 -2
  64. bossanova-0.1.0.dev9/201b-ghct-05-models/README.md +0 -11
  65. bossanova-0.1.0.dev9/bossanova/internal/containers/schemas.py +0 -372
  66. bossanova-0.1.0.dev9/bossanova/internal/operations/profile.py +0 -61
  67. bossanova-0.1.0.dev9/bossanova/internal/viz/profile.py +0 -97
  68. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/LICENSE +0 -0
  69. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/__init__.py +0 -0
  70. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/data/README.md +0 -0
  71. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/data/__init__.py +0 -0
  72. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/data/advertising.csv +0 -0
  73. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/data/cake.csv +0 -0
  74. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/data/chickweight.csv +0 -0
  75. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/data/credit.csv +0 -0
  76. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/data/gammas.csv +0 -0
  77. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/data/mtcars.csv +0 -0
  78. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/data/penguins.csv +0 -0
  79. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/data/poker.csv +0 -0
  80. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/data/sleep.csv +0 -0
  81. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/data/titanic.csv +0 -0
  82. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/data/titanic_test.csv +0 -0
  83. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/data/titanic_train.csv +0 -0
  84. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/distributions/__init__.py +0 -0
  85. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/distributions/continuous.py +0 -0
  86. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/distributions/discrete.py +0 -0
  87. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/distributions/varying.py +0 -0
  88. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/expressions.py +0 -0
  89. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/__init__.py +0 -0
  90. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/containers/__init__.py +0 -0
  91. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/containers/builders/__init__.py +0 -0
  92. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/containers/builders/data.py +0 -0
  93. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/containers/builders/specs.py +0 -0
  94. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/containers/structs/__init__.py +0 -0
  95. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/containers/validators.py +0 -0
  96. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/maths/__init__.py +0 -0
  97. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/maths/backend/__init__.py +0 -0
  98. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/maths/backend/dispatch.py +0 -0
  99. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/maths/backend/jax.py +0 -0
  100. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/maths/backend/numpy.py +0 -0
  101. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/maths/backend/protocol.py +0 -0
  102. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/maths/batching.py +0 -0
  103. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/maths/config.py +0 -0
  104. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/maths/convergence.py +0 -0
  105. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/maths/design/__init__.py +0 -0
  106. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/maths/design/coding.py +0 -0
  107. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/maths/design/names.py +0 -0
  108. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/maths/design/z_matrix.py +0 -0
  109. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/maths/differentiation.py +0 -0
  110. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/maths/distributions/__init__.py +0 -0
  111. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/maths/distributions/algebra.py +0 -0
  112. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/maths/distributions/base.py +0 -0
  113. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/maths/distributions/core.py +0 -0
  114. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/maths/distributions/derived.py +0 -0
  115. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/maths/distributions/factories.py +0 -0
  116. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/maths/distributions/plotting.py +0 -0
  117. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/maths/distributions/probability.py +0 -0
  118. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/maths/family/__init__.py +0 -0
  119. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/maths/family/binomial.py +0 -0
  120. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/maths/family/create.py +0 -0
  121. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/maths/family/gamma.py +0 -0
  122. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/maths/family/gaussian.py +0 -0
  123. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/maths/family/links.py +0 -0
  124. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/maths/family/poisson.py +0 -0
  125. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/maths/family/response.py +0 -0
  126. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/maths/family/schema.py +0 -0
  127. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/maths/family/tdist.py +0 -0
  128. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/maths/inference/__init__.py +0 -0
  129. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/maths/inference/contrasts.py +0 -0
  130. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/maths/inference/diagnostics.py +0 -0
  131. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/maths/inference/estimation.py +0 -0
  132. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/maths/inference/hypothesis.py +0 -0
  133. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/maths/inference/information_criteria.py +0 -0
  134. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/maths/inference/profile.py +0 -0
  135. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/maths/inference/sandwich.py +0 -0
  136. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/maths/inference/satterthwaite.py +0 -0
  137. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/maths/inference/wald_variance.py +0 -0
  138. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/maths/inference/welch.py +0 -0
  139. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/maths/linalg/__init__.py +0 -0
  140. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/maths/linalg/qr.py +0 -0
  141. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/maths/linalg/sparse.py +0 -0
  142. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/maths/linalg/svd.py +0 -0
  143. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/maths/predict.py +0 -0
  144. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/maths/rng.py +0 -0
  145. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/maths/solvers/glm.py +0 -0
  146. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/maths/solvers/heuristics.py +0 -0
  147. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/maths/solvers/initialization.py +0 -0
  148. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/maths/solvers/lambda_builder.py +0 -0
  149. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/maths/solvers/lambda_sparse.py +0 -0
  150. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/maths/solvers/lambda_template.py +0 -0
  151. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/maths/solvers/lmer.py +0 -0
  152. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/maths/solvers/optimize.py +0 -0
  153. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/maths/solvers/pirls_sparse.py +0 -0
  154. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/maths/tolerances.py +0 -0
  155. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/maths/transforms.py +0 -0
  156. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/maths/variance.py +0 -0
  157. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/maths/weights.py +0 -0
  158. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/operations/__init__.py +0 -0
  159. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/operations/bundle.py +0 -0
  160. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/operations/common/__init__.py +0 -0
  161. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/operations/common/classify.py +0 -0
  162. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/operations/common/formula_utils.py +0 -0
  163. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/operations/compare/__init__.py +0 -0
  164. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/operations/compare/lrt.py +0 -0
  165. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/operations/compare/refit.py +0 -0
  166. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/operations/contrasts.py +0 -0
  167. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/operations/fit/dispatch.py +0 -0
  168. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/operations/fit/glm.py +0 -0
  169. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/operations/fit/ols.py +0 -0
  170. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/operations/fit/rank.py +0 -0
  171. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/operations/formula/__init__.py +0 -0
  172. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/operations/formula/design.py +0 -0
  173. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/operations/formula/encoding.py +0 -0
  174. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/operations/formula/evaluate.py +0 -0
  175. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/operations/formula/evaluate_newdata.py +0 -0
  176. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/operations/formula/evaluate_transforms.py +0 -0
  177. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/operations/formula/helpers.py +0 -0
  178. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/operations/formula/parse.py +0 -0
  179. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/operations/formula/parser/__init__.py +0 -0
  180. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/operations/formula/parser/expr.py +0 -0
  181. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/operations/formula/parser/parser.py +0 -0
  182. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/operations/formula/parser/scanner.py +0 -0
  183. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/operations/formula/parser/token.py +0 -0
  184. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/operations/formula/random_effects.py +0 -0
  185. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/operations/infer/__init__.py +0 -0
  186. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/operations/infer/cv.py +0 -0
  187. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/operations/infer/permutation.py +0 -0
  188. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/operations/infer/prediction.py +0 -0
  189. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/operations/infer/resample_bundle.py +0 -0
  190. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/operations/infer/satterthwaite_emm.py +0 -0
  191. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/operations/infer/simulation.py +0 -0
  192. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/operations/marginal/explore.py +0 -0
  193. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/operations/marginal/grid.py +0 -0
  194. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/operations/marginal/inference.py +0 -0
  195. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/operations/marginal/joint_tests.py +0 -0
  196. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/operations/marginal/slopes.py +0 -0
  197. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/operations/marginal/validation.py +0 -0
  198. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/operations/predict.py +0 -0
  199. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/operations/rendering/__init__.py +0 -0
  200. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/operations/rendering/latex.py +0 -0
  201. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/operations/resample/__init__.py +0 -0
  202. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/operations/resample/common.py +0 -0
  203. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/operations/resample/core.py +0 -0
  204. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/operations/resample/glm.py +0 -0
  205. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/operations/resample/lm.py +0 -0
  206. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/operations/resample/lm_bca.py +0 -0
  207. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/operations/resample/lm_operators.py +0 -0
  208. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/operations/resample/mixed.py +0 -0
  209. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/operations/resample/results.py +0 -0
  210. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/operations/resample/utils.py +0 -0
  211. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/operations/simulation/__init__.py +0 -0
  212. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/operations/simulation/dgp/__init__.py +0 -0
  213. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/operations/simulation/dgp/generate.py +0 -0
  214. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/operations/simulation/dgp/glmer.py +0 -0
  215. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/operations/simulation/dgp/lm.py +0 -0
  216. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/operations/simulation/dgp/lmer.py +0 -0
  217. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/operations/simulation/harness.py +0 -0
  218. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/operations/simulation/metrics.py +0 -0
  219. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/operations/simulation/model_sim.py +0 -0
  220. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/operations/transforms.py +0 -0
  221. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/viz/README.md +0 -0
  222. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/viz/__init__.py +0 -0
  223. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/viz/core_data.py +0 -0
  224. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/viz/core_protocols.py +0 -0
  225. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/viz/fit_builders.py +0 -0
  226. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/viz/helpers.py +0 -0
  227. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/viz/layout.py +0 -0
  228. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/viz/relationships.py +0 -0
  229. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/internal/viz/resid.py +0 -0
  230. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/model/__init__.py +0 -0
  231. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/model/summary.py +0 -0
  232. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/bossanova/py.typed +0 -0
  233. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/tests/bossanova_benchmarks/bootstrap/data/README.md +0 -0
  234. {bossanova-0.1.0.dev9 → bossanova-0.1.0.dev11}/tests/bossanova_benchmarks/insteval/data/README.md +0 -0
@@ -81,3 +81,4 @@ bossanova-docs/help/
81
81
  bossanova-docs/wip/
82
82
  .hypothesis/
83
83
  research.md
84
+ 201b-ghct-05-models/
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: bossanova
3
- Version: 0.1.0.dev9
3
+ Version: 0.1.0.dev11
4
4
  Summary: Bridging statistical cultures with some jazz
5
5
  Author: Eshin Jolly
6
6
  License-Expression: MIT
@@ -9,6 +9,8 @@ Keywords: analysis,multi-level-modeling,regression,statistics
9
9
  Classifier: Intended Audience :: Science/Research
10
10
  Classifier: Operating System :: OS Independent
11
11
  Classifier: Programming Language :: Python :: 3.11
12
+ Classifier: Programming Language :: Python :: 3.12
13
+ Classifier: Programming Language :: Python :: 3.13
12
14
  Requires-Python: >=3.11
13
15
  Requires-Dist: attrs>=24.2.0
14
16
  Requires-Dist: jax>=0.8.0
@@ -28,20 +30,16 @@ Description-Content-Type: text/markdown
28
30
 
29
31
  Unified mixed-effects modeling in Python. JAX + NumPy backends. R/lme4 parity.
30
32
 
31
- ## Quick Example
33
+ ## Installation
32
34
 
33
- ```python
34
- from bossanova import model, load_dataset
35
+ ```bash
36
+ uv add bossanova
37
+ ```
35
38
 
36
- df = load_dataset("sleepstudy")
39
+ or
37
40
 
38
- # Fit a mixed model
39
- m = model("Reaction ~ Days + (1 + Days | Subject)", data=df).fit().infer()
40
- m.params
41
-
42
- # Explore marginal effects
43
- m.explore("Days").infer()
44
- m.effects
41
+ ```bash
42
+ pip install bossanova
45
43
  ```
46
44
 
47
45
  ## Features
@@ -50,15 +48,26 @@ m.effects
50
48
  - **R-style formulas** — `y ~ x + (1|group)`, `factor()`, `center()`, `scale()`
51
49
  - **Multiple inference strategies** — asymptotic, bootstrap, permutation, cross-validation
52
50
  - **Marginal effects** — `.explore()` for estimated marginal means, slopes, and contrasts
53
- - **JAX acceleration** — automatic GPU/TPU acceleration when JAX is available, NumPy fallback
51
+ - **JAX acceleration** — automatic acceleration when JAX is available, NumPy fallback
54
52
  - **R parity** — matches lme4/emmeans within f64 tolerance
55
53
 
56
- ## Installation
54
+ ## Quick Example
57
55
 
58
- ```bash
59
- pip install bossanova
56
+ ```python
57
+ from bossanova import model, load_dataset
58
+
59
+ df = load_dataset("sleepstudy")
60
+
61
+ # Fit a mixed model
62
+ m = model("Reaction ~ Days + (1 + Days | Subject)", data=df).fit()
63
+ m.params
64
+
65
+ # Perform bootstrapped parameter inference
66
+ m.infer(how='boot')
67
+
68
+ # Explore marginal effects
69
+ m.explore("Days")
70
+ m.effects
60
71
  ```
61
72
 
62
- ## Documentation
63
73
 
64
- See the [full documentation](https://bossanova.readthedocs.io/) for tutorials, API reference, and examples.
@@ -2,20 +2,16 @@
2
2
 
3
3
  Unified mixed-effects modeling in Python. JAX + NumPy backends. R/lme4 parity.
4
4
 
5
- ## Quick Example
5
+ ## Installation
6
6
 
7
- ```python
8
- from bossanova import model, load_dataset
7
+ ```bash
8
+ uv add bossanova
9
+ ```
9
10
 
10
- df = load_dataset("sleepstudy")
11
+ or
11
12
 
12
- # Fit a mixed model
13
- m = model("Reaction ~ Days + (1 + Days | Subject)", data=df).fit().infer()
14
- m.params
15
-
16
- # Explore marginal effects
17
- m.explore("Days").infer()
18
- m.effects
13
+ ```bash
14
+ pip install bossanova
19
15
  ```
20
16
 
21
17
  ## Features
@@ -24,15 +20,26 @@ m.effects
24
20
  - **R-style formulas** — `y ~ x + (1|group)`, `factor()`, `center()`, `scale()`
25
21
  - **Multiple inference strategies** — asymptotic, bootstrap, permutation, cross-validation
26
22
  - **Marginal effects** — `.explore()` for estimated marginal means, slopes, and contrasts
27
- - **JAX acceleration** — automatic GPU/TPU acceleration when JAX is available, NumPy fallback
23
+ - **JAX acceleration** — automatic acceleration when JAX is available, NumPy fallback
28
24
  - **R parity** — matches lme4/emmeans within f64 tolerance
29
25
 
30
- ## Installation
26
+ ## Quick Example
31
27
 
32
- ```bash
33
- pip install bossanova
28
+ ```python
29
+ from bossanova import model, load_dataset
30
+
31
+ df = load_dataset("sleepstudy")
32
+
33
+ # Fit a mixed model
34
+ m = model("Reaction ~ Days + (1 + Days | Subject)", data=df).fit()
35
+ m.params
36
+
37
+ # Perform bootstrapped parameter inference
38
+ m.infer(how='boot')
39
+
40
+ # Explore marginal effects
41
+ m.explore("Days")
42
+ m.effects
34
43
  ```
35
44
 
36
- ## Documentation
37
45
 
38
- See the [full documentation](https://bossanova.readthedocs.io/) for tutorials, API reference, and examples.
@@ -15,6 +15,13 @@ import polars as pl
15
15
  from bossanova.internal.containers.builders.results import (
16
16
  append_inference_columns,
17
17
  )
18
+ from bossanova.internal.containers.schemas import (
19
+ Col,
20
+ ParamsAsymp,
21
+ ParamsBase,
22
+ ParamsCv,
23
+ VaryingCorrSchema,
24
+ )
18
25
 
19
26
  if TYPE_CHECKING:
20
27
  from bossanova.internal.containers.structs import (
@@ -60,21 +67,22 @@ def build_params_dataframe(
60
67
  terms = list(bundle.X_names)
61
68
  estimates = fit.coef.tolist()
62
69
 
63
- data: dict[str, list] = {"term": terms, "estimate": estimates}
70
+ data: dict[str, list] = {Col.TERM: terms, Col.ESTIMATE: estimates}
64
71
 
65
72
  if params_inference is not None:
66
73
  if params_inference.method == "cv":
67
- data["pre"] = params_inference.pre.tolist()
68
- data["pre_sd"] = params_inference.pre_sd.tolist()
69
- else:
70
- data["se"] = params_inference.se.tolist()
71
- data["statistic"] = params_inference.statistic.tolist()
72
- data["df"] = params_inference.df.tolist()
73
- data["p_value"] = params_inference.p_value.tolist()
74
- data["ci_lower"] = params_inference.ci_lower.tolist()
75
- data["ci_upper"] = params_inference.ci_upper.tolist()
74
+ data[Col.PRE] = params_inference.pre.tolist()
75
+ data[Col.PRE_SD] = params_inference.pre_sd.tolist()
76
+ return pl.DataFrame(data, schema=ParamsCv)
77
+ data[Col.SE] = params_inference.se.tolist()
78
+ data[Col.STATISTIC] = params_inference.statistic.tolist()
79
+ data[Col.DF] = params_inference.df.tolist()
80
+ data[Col.P_VALUE] = params_inference.p_value.tolist()
81
+ data[Col.CI_LOWER] = params_inference.ci_lower.tolist()
82
+ data[Col.CI_UPPER] = params_inference.ci_upper.tolist()
83
+ return pl.DataFrame(data, schema=ParamsAsymp)
76
84
 
77
- return pl.DataFrame(data)
85
+ return pl.DataFrame(data, schema=ParamsBase)
78
86
 
79
87
 
80
88
  def build_varying_offsets_dataframe(
@@ -99,11 +107,11 @@ def build_varying_offsets_dataframe(
99
107
  if effect_name in varying_offsets.pi_lower:
100
108
  result = result.with_columns(
101
109
  pl.Series(
102
- f"pi_lower_{effect_name}",
110
+ f"{Col.PI_LOWER_PREFIX}{effect_name}",
103
111
  varying_offsets.pi_lower[effect_name],
104
112
  ),
105
113
  pl.Series(
106
- f"pi_upper_{effect_name}",
114
+ f"{Col.PI_UPPER_PREFIX}{effect_name}",
107
115
  varying_offsets.pi_upper[effect_name],
108
116
  ),
109
117
  )
@@ -159,15 +167,15 @@ def build_varying_spread_dataframe(
159
167
  ci_upper_vals = []
160
168
  ci_method_vals = []
161
169
 
162
- for comp_name in result["component"].to_list():
170
+ for comp_name in result[Col.COMPONENT].to_list():
163
171
  ci_lower_vals.append(varying_spread.ci_lower.get(comp_name, float("nan")))
164
172
  ci_upper_vals.append(varying_spread.ci_upper.get(comp_name, float("nan")))
165
173
  ci_method_vals.append(varying_spread.ci_method or "")
166
174
 
167
175
  result = result.with_columns(
168
- pl.Series("ci_lower", ci_lower_vals),
169
- pl.Series("ci_upper", ci_upper_vals),
170
- pl.Series("ci_method", ci_method_vals),
176
+ pl.Series(Col.CI_LOWER, ci_lower_vals),
177
+ pl.Series(Col.CI_UPPER, ci_upper_vals),
178
+ pl.Series(Col.CI_METHOD, ci_method_vals),
171
179
  )
172
180
 
173
181
  return result
@@ -214,11 +222,12 @@ def build_varying_corr_dataframe(
214
222
 
215
223
  return pl.DataFrame(
216
224
  {
217
- "group": groups,
218
- "effect1": effect1s,
219
- "effect2": effect2s,
220
- "corr": corrs,
221
- }
225
+ Col.GROUP: groups,
226
+ Col.EFFECT1: effect1s,
227
+ Col.EFFECT2: effect2s,
228
+ Col.CORR: corrs,
229
+ },
230
+ schema=VaryingCorrSchema,
222
231
  )
223
232
 
224
233
 
@@ -248,7 +257,7 @@ def build_effects_dataframe(mee: MeeState) -> pl.DataFrame:
248
257
  columns.
249
258
  """
250
259
  result = mee.grid.clone()
251
- result = result.with_columns(pl.Series("estimate", mee.estimate))
260
+ result = result.with_columns(pl.Series(Col.ESTIMATE, mee.estimate))
252
261
  return append_inference_columns(result, mee)
253
262
 
254
263
 
@@ -262,15 +271,15 @@ def build_joint_test_dataframe(state: JointTestState) -> pl.DataFrame:
262
271
  DataFrame with ``term``, ``df1``, optional ``df2``,
263
272
  ``f_ratio`` or ``Chisq``, and ``p_value`` columns.
264
273
  """
265
- result = pl.DataFrame({"term": list(state.terms)})
266
- result = result.with_columns(pl.Series("df1", state.df1))
274
+ result = pl.DataFrame({Col.TERM: list(state.terms)})
275
+ result = result.with_columns(pl.Series(Col.DF1, state.df1))
267
276
 
268
277
  if state.df2 is not None:
269
- result = result.with_columns(pl.Series("df2", state.df2))
278
+ result = result.with_columns(pl.Series(Col.DF2, state.df2))
270
279
 
271
- stat_name = "f_ratio" if state.test_type == "F" else "Chisq"
280
+ stat_name = Col.F_RATIO if state.test_type == "F" else Col.CHISQ
272
281
  result = result.with_columns(pl.Series(stat_name, state.statistic))
273
- result = result.with_columns(pl.Series("p_value", state.p_value))
282
+ result = result.with_columns(pl.Series(Col.P_VALUE, state.p_value))
274
283
 
275
284
  return result
276
285
 
@@ -286,18 +295,18 @@ def build_predictions_dataframe(pred: PredictionState) -> pl.DataFrame:
286
295
  DataFrame with ``fitted``, optional ``link``, inference columns,
287
296
  and optional CV columns.
288
297
  """
289
- data: dict[str, list] = {"fitted": pred.fitted.tolist()}
298
+ data: dict[str, list] = {Col.FITTED: pred.fitted.tolist()}
290
299
  if pred.link is not None:
291
- data["link"] = pred.link.tolist()
300
+ data[Col.LINK] = pred.link.tolist()
292
301
  result = pl.DataFrame(data)
293
302
 
294
303
  result = append_inference_columns(result, pred)
295
304
 
296
305
  if pred.has_cv:
297
306
  result = result.with_columns(
298
- pl.Series("cv_fitted", pred.cv_fitted),
299
- pl.Series("cv_residual", pred.cv_residual),
300
- pl.Series("cv_fold", pred.cv_fold),
307
+ pl.Series(Col.CV_FITTED, pred.cv_fitted),
308
+ pl.Series(Col.CV_RESIDUAL, pred.cv_residual),
309
+ pl.Series(Col.CV_FOLD, pred.cv_fold),
301
310
  )
302
311
 
303
312
  return result
@@ -321,9 +330,11 @@ def build_simulations_dataframe(
321
330
 
322
331
  if sim_inference is not None:
323
332
  if sim_inference.sim_mean is not None:
324
- result = result.with_columns(pl.Series("sim_mean", sim_inference.sim_mean))
333
+ result = result.with_columns(
334
+ pl.Series(Col.SIM_MEAN, sim_inference.sim_mean)
335
+ )
325
336
  if sim_inference.sim_sd is not None:
326
- result = result.with_columns(pl.Series("sim_sd", sim_inference.sim_sd))
337
+ result = result.with_columns(pl.Series(Col.SIM_SD, sim_inference.sim_sd))
327
338
  for q_name, q_values in sim_inference.sim_quantiles.items():
328
339
  result = result.with_columns(pl.Series(q_name, q_values))
329
340
 
@@ -10,18 +10,20 @@ from __future__ import annotations
10
10
 
11
11
  import polars as pl
12
12
 
13
+ from bossanova.internal.containers.schemas import Col
14
+
13
15
  __all__ = [
14
16
  "append_inference_columns",
15
17
  ]
16
18
 
17
19
  # Standard inference column names, in canonical display order.
18
20
  _INFERENCE_COLS: tuple[str, ...] = (
19
- "se",
20
- "statistic",
21
- "df",
22
- "p_value",
23
- "ci_lower",
24
- "ci_upper",
21
+ Col.SE,
22
+ Col.STATISTIC,
23
+ Col.DF,
24
+ Col.P_VALUE,
25
+ Col.CI_LOWER,
26
+ Col.CI_UPPER,
25
27
  )
26
28
 
27
29
 
@@ -6,6 +6,11 @@ from typing import TYPE_CHECKING
6
6
 
7
7
  import numpy as np
8
8
 
9
+ from bossanova.internal.containers.schemas import (
10
+ Col,
11
+ ResamplesBootSchema,
12
+ ResamplesPermSchema,
13
+ )
9
14
  from bossanova.internal.containers.structs.state import (
10
15
  CVState,
11
16
  FitState,
@@ -708,16 +713,17 @@ def build_resamples_dataframe(rs: ResamplesState) -> pl.DataFrame:
708
713
 
709
714
  return pl.DataFrame(
710
715
  {
711
- "term": names,
712
- "observed": observed.tolist(),
713
- "mean": means.tolist(),
714
- "se": ses.tolist(),
715
- "ci_lower": ci_lower.tolist(),
716
- "ci_upper": ci_upper.tolist(),
717
- "n_resamples": [rs.n_resamples] * len(names),
718
- "method": [rs.method] * len(names),
719
- "context": [rs.context] * len(names),
720
- }
716
+ Col.TERM: names,
717
+ Col.OBSERVED: observed.tolist(),
718
+ Col.MEAN: means.tolist(),
719
+ Col.SE: ses.tolist(),
720
+ Col.CI_LOWER: ci_lower.tolist(),
721
+ Col.CI_UPPER: ci_upper.tolist(),
722
+ Col.N_RESAMPLES: [rs.n_resamples] * len(names),
723
+ Col.METHOD: [rs.method] * len(names),
724
+ Col.CONTEXT: [rs.context] * len(names),
725
+ },
726
+ schema=ResamplesBootSchema,
721
727
  )
722
728
 
723
729
  # Permutation: compute two-sided p-values
@@ -725,11 +731,12 @@ def build_resamples_dataframe(rs: ResamplesState) -> pl.DataFrame:
725
731
 
726
732
  return pl.DataFrame(
727
733
  {
728
- "term": names,
729
- "observed": observed.tolist(),
730
- "p_value": p_values.tolist(),
731
- "n_resamples": [rs.n_resamples] * len(names),
732
- "method": [rs.method] * len(names),
733
- "context": [rs.context] * len(names),
734
- }
734
+ Col.TERM: names,
735
+ Col.OBSERVED: observed.tolist(),
736
+ Col.P_VALUE: p_values.tolist(),
737
+ Col.N_RESAMPLES: [rs.n_resamples] * len(names),
738
+ Col.METHOD: [rs.method] * len(names),
739
+ Col.CONTEXT: [rs.context] * len(names),
740
+ },
741
+ schema=ResamplesPermSchema,
735
742
  )