bossanova 0.1.0.dev26__tar.gz → 0.1.0.dev27__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 (241) hide show
  1. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/PKG-INFO +1 -1
  2. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/marginal/compute.py +29 -9
  3. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/model/core.py +6 -4
  4. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/pyproject.toml +1 -1
  5. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/.gitignore +0 -0
  6. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/LICENSE +0 -0
  7. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/README.md +0 -0
  8. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/__init__.py +0 -0
  9. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/data/README.md +0 -0
  10. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/data/__init__.py +0 -0
  11. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/data/advertising.csv +0 -0
  12. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/data/cake.csv +0 -0
  13. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/data/chickweight.csv +0 -0
  14. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/data/credit.csv +0 -0
  15. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/data/gammas.csv +0 -0
  16. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/data/mtcars.csv +0 -0
  17. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/data/penguins.csv +0 -0
  18. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/data/poker.csv +0 -0
  19. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/data/sleep.csv +0 -0
  20. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/data/titanic.csv +0 -0
  21. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/data/titanic_test.csv +0 -0
  22. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/data/titanic_train.csv +0 -0
  23. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/distributions/__init__.py +0 -0
  24. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/distributions/continuous.py +0 -0
  25. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/distributions/discrete.py +0 -0
  26. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/distributions/varying.py +0 -0
  27. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/expressions.py +0 -0
  28. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/__init__.py +0 -0
  29. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/compare/__init__.py +0 -0
  30. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/compare/compare.py +0 -0
  31. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/compare/cv.py +0 -0
  32. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/compare/deviance.py +0 -0
  33. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/compare/f_test.py +0 -0
  34. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/compare/helpers.py +0 -0
  35. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/compare/ic.py +0 -0
  36. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/compare/lrt.py +0 -0
  37. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/compare/lrt_compare.py +0 -0
  38. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/compare/refit.py +0 -0
  39. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/containers/__init__.py +0 -0
  40. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/containers/builders/__init__.py +0 -0
  41. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/containers/builders/dataframes.py +0 -0
  42. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/containers/builders/resamples.py +0 -0
  43. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/containers/builders/results.py +0 -0
  44. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/containers/builders/specs.py +0 -0
  45. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/containers/builders/state.py +0 -0
  46. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/containers/schemas.py +0 -0
  47. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/containers/structs/__init__.py +0 -0
  48. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/containers/structs/data.py +0 -0
  49. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/containers/structs/display.py +0 -0
  50. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/containers/structs/explore.py +0 -0
  51. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/containers/structs/fit.py +0 -0
  52. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/containers/structs/formula.py +0 -0
  53. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/containers/structs/inference.py +0 -0
  54. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/containers/structs/marginal.py +0 -0
  55. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/containers/structs/mixed.py +0 -0
  56. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/containers/structs/prediction.py +0 -0
  57. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/containers/structs/simulation.py +0 -0
  58. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/containers/structs/specs.py +0 -0
  59. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/containers/validators.py +0 -0
  60. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/design/__init__.py +0 -0
  61. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/design/coding.py +0 -0
  62. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/design/names.py +0 -0
  63. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/design/reference.py +0 -0
  64. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/design/z_matrix.py +0 -0
  65. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/fit/__init__.py +0 -0
  66. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/fit/convergence.py +0 -0
  67. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/fit/diagnostics.py +0 -0
  68. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/fit/dispatch.py +0 -0
  69. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/fit/glm.py +0 -0
  70. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/fit/glmer.py +0 -0
  71. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/fit/grid.py +0 -0
  72. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/fit/lifecycle.py +0 -0
  73. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/fit/lmer.py +0 -0
  74. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/fit/ols.py +0 -0
  75. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/fit/predict.py +0 -0
  76. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/fit/varying.py +0 -0
  77. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/formula/__init__.py +0 -0
  78. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/formula/bundle.py +0 -0
  79. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/formula/contrast_registry.py +0 -0
  80. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/formula/contrast_specs.py +0 -0
  81. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/formula/design.py +0 -0
  82. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/formula/encoding.py +0 -0
  83. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/formula/evaluate.py +0 -0
  84. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/formula/evaluate_contrast.py +0 -0
  85. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/formula/evaluate_newdata.py +0 -0
  86. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/formula/evaluate_transforms.py +0 -0
  87. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/formula/helpers.py +0 -0
  88. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/formula/parse.py +0 -0
  89. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/formula/parser/__init__.py +0 -0
  90. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/formula/parser/expr.py +0 -0
  91. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/formula/parser/parser.py +0 -0
  92. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/formula/parser/scanner.py +0 -0
  93. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/formula/parser/token.py +0 -0
  94. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/formula/random_effects.py +0 -0
  95. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/infer/__init__.py +0 -0
  96. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/infer/asymptotic.py +0 -0
  97. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/infer/bootstrap.py +0 -0
  98. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/infer/cv.py +0 -0
  99. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/infer/dispatch.py +0 -0
  100. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/infer/formula_utils.py +0 -0
  101. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/infer/mee.py +0 -0
  102. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/infer/params.py +0 -0
  103. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/infer/permutation.py +0 -0
  104. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/infer/prediction.py +0 -0
  105. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/infer/profile.py +0 -0
  106. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/infer/resample/__init__.py +0 -0
  107. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/infer/resample/common.py +0 -0
  108. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/infer/resample/core.py +0 -0
  109. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/infer/resample/glm_operators.py +0 -0
  110. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/infer/resample/glmer.py +0 -0
  111. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/infer/resample/lm_operators.py +0 -0
  112. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/infer/resample/lmer.py +0 -0
  113. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/infer/resample/results.py +0 -0
  114. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/infer/resample/simulate.py +0 -0
  115. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/infer/resample_bundle.py +0 -0
  116. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/infer/satterthwaite_emm.py +0 -0
  117. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/infer/simulation.py +0 -0
  118. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/marginal/__init__.py +0 -0
  119. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/marginal/bracket_contrasts.py +0 -0
  120. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/marginal/conditions.py +0 -0
  121. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/marginal/contrasts.py +0 -0
  122. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/marginal/emm.py +0 -0
  123. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/marginal/explore.py +0 -0
  124. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/marginal/explore_parser.py +0 -0
  125. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/marginal/explore_scanner.py +0 -0
  126. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/marginal/factors.py +0 -0
  127. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/marginal/grid.py +0 -0
  128. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/marginal/inference.py +0 -0
  129. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/marginal/joint_tests.py +0 -0
  130. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/marginal/matrices.py +0 -0
  131. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/marginal/resolve.py +0 -0
  132. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/marginal/slopes.py +0 -0
  133. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/marginal/transforms.py +0 -0
  134. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/marginal/validation.py +0 -0
  135. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/maths/__init__.py +0 -0
  136. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/maths/backend/__init__.py +0 -0
  137. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/maths/backend/dispatch.py +0 -0
  138. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/maths/backend/jax.py +0 -0
  139. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/maths/backend/numpy.py +0 -0
  140. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/maths/backend/protocol.py +0 -0
  141. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/maths/batching.py +0 -0
  142. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/maths/config.py +0 -0
  143. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/maths/convergence.py +0 -0
  144. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/maths/differentiation.py +0 -0
  145. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/maths/distributions/__init__.py +0 -0
  146. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/maths/distributions/algebra.py +0 -0
  147. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/maths/distributions/base.py +0 -0
  148. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/maths/distributions/core.py +0 -0
  149. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/maths/distributions/derived.py +0 -0
  150. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/maths/distributions/factories.py +0 -0
  151. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/maths/distributions/plotting.py +0 -0
  152. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/maths/distributions/probability.py +0 -0
  153. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/maths/family/__init__.py +0 -0
  154. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/maths/family/binomial.py +0 -0
  155. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/maths/family/create.py +0 -0
  156. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/maths/family/gamma.py +0 -0
  157. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/maths/family/gaussian.py +0 -0
  158. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/maths/family/links.py +0 -0
  159. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/maths/family/poisson.py +0 -0
  160. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/maths/family/response.py +0 -0
  161. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/maths/family/schema.py +0 -0
  162. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/maths/family/tdist.py +0 -0
  163. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/maths/inference/__init__.py +0 -0
  164. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/maths/inference/diagnostics.py +0 -0
  165. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/maths/inference/estimation.py +0 -0
  166. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/maths/inference/hypothesis.py +0 -0
  167. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/maths/inference/information_criteria.py +0 -0
  168. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/maths/inference/multiplicity.py +0 -0
  169. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/maths/inference/profile.py +0 -0
  170. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/maths/inference/sandwich.py +0 -0
  171. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/maths/inference/satterthwaite.py +0 -0
  172. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/maths/inference/wald_variance.py +0 -0
  173. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/maths/inference/welch.py +0 -0
  174. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/maths/linalg/__init__.py +0 -0
  175. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/maths/linalg/qr.py +0 -0
  176. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/maths/linalg/rank.py +0 -0
  177. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/maths/linalg/schur.py +0 -0
  178. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/maths/linalg/sparse.py +0 -0
  179. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/maths/linalg/svd.py +0 -0
  180. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/maths/predict.py +0 -0
  181. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/maths/rng.py +0 -0
  182. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/maths/rounding.py +0 -0
  183. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/maths/solvers/__init__.py +0 -0
  184. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/maths/solvers/glm.py +0 -0
  185. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/maths/solvers/glmer.py +0 -0
  186. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/maths/solvers/heuristics.py +0 -0
  187. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/maths/solvers/initialization.py +0 -0
  188. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/maths/solvers/lambda_builder.py +0 -0
  189. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/maths/solvers/lambda_sparse.py +0 -0
  190. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/maths/solvers/lambda_template.py +0 -0
  191. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/maths/solvers/lmer.py +0 -0
  192. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/maths/solvers/optimize.py +0 -0
  193. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/maths/solvers/pirls_sparse.py +0 -0
  194. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/maths/solvers/quadrature.py +0 -0
  195. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/maths/tolerances.py +0 -0
  196. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/maths/transforms.py +0 -0
  197. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/maths/variance.py +0 -0
  198. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/maths/weights.py +0 -0
  199. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/rendering/__init__.py +0 -0
  200. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/rendering/latex.py +0 -0
  201. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/rendering/markdown.py +0 -0
  202. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/simulation/__init__.py +0 -0
  203. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/simulation/dgp/__init__.py +0 -0
  204. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/simulation/dgp/generate.py +0 -0
  205. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/simulation/dgp/glm.py +0 -0
  206. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/simulation/dgp/glmer.py +0 -0
  207. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/simulation/dgp/lm.py +0 -0
  208. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/simulation/dgp/lmer.py +0 -0
  209. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/simulation/harness.py +0 -0
  210. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/simulation/lifecycle.py +0 -0
  211. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/simulation/metrics.py +0 -0
  212. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/simulation/model_sim.py +0 -0
  213. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/simulation/power.py +0 -0
  214. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/viz/README.md +0 -0
  215. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/viz/__init__.py +0 -0
  216. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/viz/compare.py +0 -0
  217. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/viz/core.py +0 -0
  218. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/viz/core_data.py +0 -0
  219. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/viz/core_protocols.py +0 -0
  220. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/viz/core_sizing.py +0 -0
  221. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/viz/core_viz.py +0 -0
  222. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/viz/design.py +0 -0
  223. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/viz/helpers.py +0 -0
  224. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/viz/mem.py +0 -0
  225. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/viz/mem_forest.py +0 -0
  226. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/viz/params.py +0 -0
  227. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/viz/predict.py +0 -0
  228. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/viz/profile.py +0 -0
  229. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/viz/ranef.py +0 -0
  230. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/viz/relationships.py +0 -0
  231. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/viz/resamples.py +0 -0
  232. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/viz/resid.py +0 -0
  233. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/internal/viz/vif.py +0 -0
  234. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/model/__init__.py +0 -0
  235. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/model/guards.py +0 -0
  236. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/model/result.py +0 -0
  237. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/model/summary.py +0 -0
  238. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/bossanova/py.typed +0 -0
  239. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/tests/bossanova_benchmarks/bootstrap/data/README.md +0 -0
  240. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/tests/bossanova_benchmarks/insteval/data/README.md +0 -0
  241. {bossanova-0.1.0.dev26 → bossanova-0.1.0.dev27}/tests/bossanova_tests/hypothesis/README.md +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: bossanova
3
- Version: 0.1.0.dev26
3
+ Version: 0.1.0.dev27
4
4
  Summary: Bridging statistical cultures with some jazz
5
5
  Author: Eshin Jolly
6
6
  License-Expression: MIT
@@ -179,6 +179,16 @@ def _dispatch_marginal_core(
179
179
  """
180
180
  focal_var = parsed.focal_var
181
181
 
182
+ # Resolve effect_scale="auto" early so all branches see a concrete value.
183
+ if effect_scale == "auto":
184
+ _is_ame = how == "ame" or (
185
+ how == "auto" and spec is not None and spec.link != "identity"
186
+ )
187
+ if _is_ame and spec is not None and spec.link != "identity":
188
+ effect_scale = "response"
189
+ else:
190
+ effect_scale = "link"
191
+
182
192
  # Compound focal variable: Drug:Dose[Active:High - Placebo:Low]
183
193
  if ":" in focal_var and parsed.has_contrast_expr:
184
194
  from bossanova.internal.marginal.bracket_contrasts import (
@@ -197,8 +207,8 @@ def _dispatch_marginal_core(
197
207
  resolved=resolved,
198
208
  )
199
209
 
200
- # Validate inputs and resolve how=auto
201
- how = _validate_dispatch_inputs(
210
+ # Validate inputs and resolve how=auto, effect_scale=auto
211
+ how, effect_scale = _validate_dispatch_inputs(
202
212
  focal_var, data, bundle, formula_spec, effect_scale, varying, how, spec, by
203
213
  )
204
214
 
@@ -331,22 +341,22 @@ def _validate_dispatch_inputs(
331
341
  how: str,
332
342
  spec: ModelSpec | None,
333
343
  by: str | None,
334
- ) -> str:
335
- """Validate dispatch inputs and resolve ``how='auto'``.
344
+ ) -> tuple[str, str]:
345
+ """Validate dispatch inputs and resolve ``how='auto'`` and ``effect_scale='auto'``.
336
346
 
337
347
  Args:
338
348
  focal_var: Name of the focal variable.
339
349
  data: The model's data DataFrame.
340
350
  bundle: DataBundle with model data and metadata.
341
351
  formula_spec: FormulaSpec with learned encoding.
342
- effect_scale: ``"link"`` or ``"response"``.
352
+ effect_scale: ``"auto"``, ``"link"``, or ``"response"``.
343
353
  varying: ``"exclude"`` or ``"include"``.
344
354
  how: ``"auto"``, ``"mem"``, or ``"ame"``.
345
355
  spec: ModelSpec with link/family info.
346
356
  by: Grouping variable for faceted effects.
347
357
 
348
358
  Returns:
349
- Resolved ``how`` value (``"mem"`` or ``"ame"``).
359
+ Tuple of (resolved_how, resolved_effect_scale).
350
360
 
351
361
  Raises:
352
362
  ValueError: If any input is invalid.
@@ -373,9 +383,9 @@ def _validate_dispatch_inputs(
373
383
  )
374
384
  raise ValueError(msg)
375
385
 
376
- if effect_scale not in ("link", "response"):
386
+ if effect_scale not in ("auto", "link", "response"):
377
387
  raise ValueError(
378
- f"effect_scale must be 'link' or 'response', got {effect_scale!r}"
388
+ f"effect_scale must be 'auto', 'link', or 'response', got {effect_scale!r}"
379
389
  )
380
390
 
381
391
  if varying not in ("exclude", "include"):
@@ -386,6 +396,16 @@ def _validate_dispatch_inputs(
386
396
  if how == "auto":
387
397
  how = "ame" if spec is not None and spec.link != "identity" else "mem"
388
398
 
399
+ # Resolve effect_scale="auto": response for AME on non-identity link,
400
+ # link otherwise. AME only meaningfully differs from MEM on the response
401
+ # scale (Jensen's inequality), so auto-upgrading avoids the confusing case
402
+ # where how="ame" silently gives identical results to how="mem".
403
+ if effect_scale == "auto":
404
+ if how == "ame" and spec is not None and spec.link != "identity":
405
+ effect_scale = "response"
406
+ else:
407
+ effect_scale = "link"
408
+
389
409
  if by is not None:
390
410
  by_vars: list[str] = (
391
411
  [by] if isinstance(by, str) else list(by) # type: ignore[arg-type]
@@ -398,7 +418,7 @@ def _validate_dispatch_inputs(
398
418
  f"Available columns: {sorted(data_cols)}"
399
419
  )
400
420
 
401
- return how
421
+ return how, effect_scale
402
422
 
403
423
 
404
424
  def _dispatch_categorical(
@@ -1096,7 +1096,7 @@ class model:
1096
1096
  formula: str,
1097
1097
  *,
1098
1098
  inverse_transforms: bool = True,
1099
- effect_scale: Literal["link", "response"] = "link",
1099
+ effect_scale: Literal["auto", "link", "response"] = "auto",
1100
1100
  varying: Literal["exclude", "include"] = "exclude",
1101
1101
  how: Literal["auto", "mem", "ame"] = "auto",
1102
1102
  by: str | None = None,
@@ -1129,8 +1129,10 @@ class model:
1129
1129
  learned formula transforms (e.g. ``center``, ``zscore``,
1130
1130
  ``scale``). Set to False to use transformed-scale
1131
1131
  names/values directly.
1132
- effect_scale: ``"link"`` (default) or ``"response"``
1133
- (inverse-link / data scale).
1132
+ effect_scale: ``"auto"`` (default), ``"link"``, or
1133
+ ``"response"`` (inverse-link / data scale). ``"auto"``
1134
+ resolves to ``"response"`` when ``how="ame"`` with a
1135
+ non-identity link (GLMs), ``"link"`` otherwise.
1134
1136
  varying: ``"exclude"`` (default) or ``"include"`` random effects.
1135
1137
  how: ``"auto"`` (default), ``"mem"`` for emmeans-style balanced
1136
1138
  reference grid (Marginal Estimated Mean), or ``"ame"`` for
@@ -1208,7 +1210,7 @@ class model:
1208
1210
 
1209
1211
  | Kwarg | Values | Effect |
1210
1212
  |-------|--------|--------|
1211
- | ``effect_scale`` | ``"link"`` (default), ``"response"`` | Linear predictor vs response scale (GLMs) |
1213
+ | ``effect_scale`` | ``"auto"`` (default), ``"link"``, ``"response"`` | ``"auto"`` = response for AME/GLM, else link |
1212
1214
  | ``varying`` | ``"exclude"`` (default), ``"include"`` | Population vs group-specific (mixed models) |
1213
1215
  | ``inverse_transforms`` | ``True`` (default), ``False`` | Auto-resolve ``center(x)`` / ``zscore(x)`` |
1214
1216
  """
@@ -1,7 +1,7 @@
1
1
  [project]
2
2
  name = "bossanova"
3
3
  requires-python = ">=3.11"
4
- version = "0.1.0.dev26"
4
+ version = "0.1.0.dev27"
5
5
  authors = [
6
6
  {name = "Eshin Jolly"},
7
7
  ]
File without changes