gpjax 0.11.2__tar.gz → 0.12.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (166) hide show
  1. gpjax-0.12.2/.github/commitlint.config.js +70 -0
  2. gpjax-0.12.2/.github/dependabot.yml +71 -0
  3. gpjax-0.12.2/.github/labeler.yml +221 -0
  4. {gpjax-0.11.2 → gpjax-0.12.2}/.github/labels.yml +5 -2
  5. {gpjax-0.11.2 → gpjax-0.12.2}/.github/pull_request_template.md +1 -1
  6. gpjax-0.12.2/.github/workflows/auto-label.yml +206 -0
  7. {gpjax-0.11.2 → gpjax-0.12.2}/.github/workflows/build_docs.yml +13 -9
  8. gpjax-0.12.2/.github/workflows/commit-lint.yml +54 -0
  9. {gpjax-0.11.2 → gpjax-0.12.2}/.github/workflows/integration.yml +11 -7
  10. {gpjax-0.11.2 → gpjax-0.12.2}/.github/workflows/pr_greeting.yml +1 -1
  11. gpjax-0.12.2/.github/workflows/release.yml +305 -0
  12. {gpjax-0.11.2 → gpjax-0.12.2}/.github/workflows/ruff.yml +1 -1
  13. gpjax-0.12.2/.github/workflows/security-analysis.yml +73 -0
  14. {gpjax-0.11.2 → gpjax-0.12.2}/.github/workflows/test_docs.yml +14 -13
  15. {gpjax-0.11.2 → gpjax-0.12.2}/.github/workflows/tests.yml +14 -11
  16. {gpjax-0.11.2 → gpjax-0.12.2}/PKG-INFO +50 -18
  17. {gpjax-0.11.2 → gpjax-0.12.2}/README.md +6 -15
  18. {gpjax-0.11.2 → gpjax-0.12.2}/docs/contributing.md +4 -4
  19. {gpjax-0.11.2 → gpjax-0.12.2}/docs/installation.md +2 -2
  20. {gpjax-0.11.2 → gpjax-0.12.2}/docs/scripts/gen_examples.py +40 -10
  21. {gpjax-0.11.2 → gpjax-0.12.2}/examples/backend.py +18 -3
  22. {gpjax-0.11.2 → gpjax-0.12.2}/examples/barycentres.py +3 -1
  23. {gpjax-0.11.2 → gpjax-0.12.2}/examples/classification.py +13 -11
  24. {gpjax-0.11.2 → gpjax-0.12.2}/examples/collapsed_vi.py +5 -2
  25. {gpjax-0.11.2 → gpjax-0.12.2}/examples/constructing_new_kernels.py +8 -7
  26. {gpjax-0.11.2 → gpjax-0.12.2}/examples/deep_kernels.py +9 -1
  27. {gpjax-0.11.2 → gpjax-0.12.2}/examples/graph_kernels.py +3 -1
  28. {gpjax-0.11.2 → gpjax-0.12.2}/examples/intro_to_gps.py +1 -1
  29. {gpjax-0.11.2 → gpjax-0.12.2}/examples/intro_to_kernels.py +8 -3
  30. {gpjax-0.11.2 → gpjax-0.12.2}/examples/likelihoods_guide.py +1 -1
  31. {gpjax-0.11.2 → gpjax-0.12.2}/examples/oceanmodelling.py +3 -1
  32. {gpjax-0.11.2 → gpjax-0.12.2}/examples/poisson.py +16 -9
  33. {gpjax-0.11.2 → gpjax-0.12.2}/examples/regression.py +3 -3
  34. {gpjax-0.11.2 → gpjax-0.12.2}/examples/uncollapsed_vi.py +4 -2
  35. {gpjax-0.11.2 → gpjax-0.12.2}/examples/yacht.py +3 -2
  36. {gpjax-0.11.2 → gpjax-0.12.2}/gpjax/__init__.py +1 -4
  37. {gpjax-0.11.2 → gpjax-0.12.2}/gpjax/distributions.py +16 -56
  38. {gpjax-0.11.2 → gpjax-0.12.2}/gpjax/fit.py +11 -6
  39. {gpjax-0.11.2 → gpjax-0.12.2}/gpjax/gps.py +61 -73
  40. {gpjax-0.11.2 → gpjax-0.12.2}/gpjax/kernels/approximations/rff.py +2 -5
  41. {gpjax-0.11.2 → gpjax-0.12.2}/gpjax/kernels/base.py +2 -5
  42. {gpjax-0.11.2 → gpjax-0.12.2}/gpjax/kernels/computations/base.py +7 -7
  43. {gpjax-0.11.2 → gpjax-0.12.2}/gpjax/kernels/computations/basis_functions.py +7 -6
  44. {gpjax-0.11.2 → gpjax-0.12.2}/gpjax/kernels/computations/constant_diagonal.py +10 -12
  45. {gpjax-0.11.2 → gpjax-0.12.2}/gpjax/kernels/computations/diagonal.py +6 -6
  46. {gpjax-0.11.2 → gpjax-0.12.2}/gpjax/kernels/computations/eigen.py +1 -1
  47. {gpjax-0.11.2 → gpjax-0.12.2}/gpjax/kernels/non_euclidean/graph.py +10 -11
  48. {gpjax-0.11.2 → gpjax-0.12.2}/gpjax/kernels/nonstationary/arccosine.py +13 -21
  49. {gpjax-0.11.2 → gpjax-0.12.2}/gpjax/kernels/nonstationary/polynomial.py +7 -8
  50. {gpjax-0.11.2 → gpjax-0.12.2}/gpjax/kernels/stationary/periodic.py +3 -6
  51. {gpjax-0.11.2 → gpjax-0.12.2}/gpjax/kernels/stationary/powered_exponential.py +3 -8
  52. {gpjax-0.11.2 → gpjax-0.12.2}/gpjax/kernels/stationary/rational_quadratic.py +5 -8
  53. {gpjax-0.11.2 → gpjax-0.12.2}/gpjax/likelihoods.py +11 -14
  54. gpjax-0.12.2/gpjax/linalg/__init__.py +37 -0
  55. gpjax-0.12.2/gpjax/linalg/operations.py +237 -0
  56. gpjax-0.12.2/gpjax/linalg/operators.py +411 -0
  57. gpjax-0.12.2/gpjax/linalg/utils.py +65 -0
  58. {gpjax-0.11.2 → gpjax-0.12.2}/gpjax/mean_functions.py +8 -7
  59. {gpjax-0.11.2 → gpjax-0.12.2}/gpjax/objectives.py +22 -21
  60. {gpjax-0.11.2 → gpjax-0.12.2}/gpjax/parameters.py +11 -23
  61. {gpjax-0.11.2 → gpjax-0.12.2}/gpjax/variational_families.py +93 -67
  62. {gpjax-0.11.2 → gpjax-0.12.2}/pyproject.toml +94 -38
  63. {gpjax-0.11.2 → gpjax-0.12.2}/static/CONTRIBUTING.md +4 -4
  64. {gpjax-0.11.2 → gpjax-0.12.2}/tests/test_fit.py +193 -12
  65. {gpjax-0.11.2 → gpjax-0.12.2}/tests/test_gaussian_distribution.py +9 -10
  66. {gpjax-0.11.2 → gpjax-0.12.2}/tests/test_gps.py +7 -15
  67. gpjax-0.12.2/tests/test_imports.py +25 -0
  68. {gpjax-0.11.2 → gpjax-0.12.2}/tests/test_kernels/test_approximations.py +3 -3
  69. {gpjax-0.11.2 → gpjax-0.12.2}/tests/test_kernels/test_computation.py +8 -8
  70. {gpjax-0.11.2 → gpjax-0.12.2}/tests/test_kernels/test_non_euclidean.py +4 -4
  71. {gpjax-0.11.2 → gpjax-0.12.2}/tests/test_kernels/test_nonstationary.py +5 -4
  72. {gpjax-0.11.2 → gpjax-0.12.2}/tests/test_kernels/test_stationary.py +5 -4
  73. gpjax-0.12.2/tests/test_linalg.py +558 -0
  74. {gpjax-0.11.2 → gpjax-0.12.2}/tests/test_mean_functions.py +84 -8
  75. {gpjax-0.11.2 → gpjax-0.12.2}/tests/test_parameters.py +2 -4
  76. gpjax-0.12.2/uv.lock +3946 -0
  77. gpjax-0.11.2/.github/workflows/stale_prs.yml +0 -45
  78. gpjax-0.11.2/gpjax/lower_cholesky.py +0 -69
  79. gpjax-0.11.2/tests/test_lower_cholesky.py +0 -110
  80. gpjax-0.11.2/uv.lock +0 -832
  81. {gpjax-0.11.2 → gpjax-0.12.2}/.github/CODE_OF_CONDUCT.md +0 -0
  82. {gpjax-0.11.2 → gpjax-0.12.2}/.github/ISSUE_TEMPLATE/01_BUG_REPORT.md +0 -0
  83. {gpjax-0.11.2 → gpjax-0.12.2}/.github/ISSUE_TEMPLATE/02_FEATURE_REQUEST.md +0 -0
  84. {gpjax-0.11.2 → gpjax-0.12.2}/.github/ISSUE_TEMPLATE/03_CODEBASE_IMPROVEMENT.md +0 -0
  85. {gpjax-0.11.2 → gpjax-0.12.2}/.github/ISSUE_TEMPLATE/04_DOCS_IMPROVEMENT.md +0 -0
  86. {gpjax-0.11.2 → gpjax-0.12.2}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  87. {gpjax-0.11.2 → gpjax-0.12.2}/.github/codecov.yml +0 -0
  88. {gpjax-0.11.2 → gpjax-0.12.2}/.github/release-drafter.yml +0 -0
  89. {gpjax-0.11.2 → gpjax-0.12.2}/.gitignore +0 -0
  90. {gpjax-0.11.2 → gpjax-0.12.2}/CITATION.bib +0 -0
  91. {gpjax-0.11.2 → gpjax-0.12.2}/LICENSE.txt +0 -0
  92. {gpjax-0.11.2 → gpjax-0.12.2}/Makefile +0 -0
  93. {gpjax-0.11.2 → gpjax-0.12.2}/docs/CODE_OF_CONDUCT.md +0 -0
  94. {gpjax-0.11.2 → gpjax-0.12.2}/docs/GOVERNANCE.md +0 -0
  95. {gpjax-0.11.2 → gpjax-0.12.2}/docs/design.md +0 -0
  96. {gpjax-0.11.2 → gpjax-0.12.2}/docs/index.md +0 -0
  97. {gpjax-0.11.2 → gpjax-0.12.2}/docs/index.rst +0 -0
  98. {gpjax-0.11.2 → gpjax-0.12.2}/docs/javascripts/katex.js +0 -0
  99. {gpjax-0.11.2 → gpjax-0.12.2}/docs/refs.bib +0 -0
  100. {gpjax-0.11.2 → gpjax-0.12.2}/docs/scripts/gen_pages.py +0 -0
  101. {gpjax-0.11.2 → gpjax-0.12.2}/docs/scripts/notebook_converter.py +0 -0
  102. {gpjax-0.11.2 → gpjax-0.12.2}/docs/scripts/sharp_bits_figure.py +0 -0
  103. {gpjax-0.11.2 → gpjax-0.12.2}/docs/sharp_bits.md +0 -0
  104. {gpjax-0.11.2 → gpjax-0.12.2}/docs/static/GP.pdf +0 -0
  105. {gpjax-0.11.2 → gpjax-0.12.2}/docs/static/GP.svg +0 -0
  106. {gpjax-0.11.2 → gpjax-0.12.2}/docs/static/bijector_figure.svg +0 -0
  107. {gpjax-0.11.2 → gpjax-0.12.2}/docs/static/css/gpjax_theme.css +0 -0
  108. {gpjax-0.11.2 → gpjax-0.12.2}/docs/static/favicon.ico +0 -0
  109. {gpjax-0.11.2 → gpjax-0.12.2}/docs/static/gpjax.mplstyle +0 -0
  110. {gpjax-0.11.2 → gpjax-0.12.2}/docs/static/gpjax_logo.pdf +0 -0
  111. {gpjax-0.11.2 → gpjax-0.12.2}/docs/static/gpjax_logo.svg +0 -0
  112. {gpjax-0.11.2 → gpjax-0.12.2}/docs/static/jaxkern/lato.ttf +0 -0
  113. {gpjax-0.11.2 → gpjax-0.12.2}/docs/static/jaxkern/logo.png +0 -0
  114. {gpjax-0.11.2 → gpjax-0.12.2}/docs/static/jaxkern/logo.svg +0 -0
  115. {gpjax-0.11.2 → gpjax-0.12.2}/docs/static/jaxkern/main.py +0 -0
  116. {gpjax-0.11.2 → gpjax-0.12.2}/docs/static/step_size_figure.png +0 -0
  117. {gpjax-0.11.2 → gpjax-0.12.2}/docs/static/step_size_figure.svg +0 -0
  118. {gpjax-0.11.2 → gpjax-0.12.2}/docs/stylesheets/extra.css +0 -0
  119. {gpjax-0.11.2 → gpjax-0.12.2}/docs/stylesheets/permalinks.css +0 -0
  120. {gpjax-0.11.2 → gpjax-0.12.2}/examples/barycentres/barycentre_gp.gif +0 -0
  121. {gpjax-0.11.2 → gpjax-0.12.2}/examples/data/max_tempeature_switzerland.csv +0 -0
  122. {gpjax-0.11.2 → gpjax-0.12.2}/examples/data/yacht_hydrodynamics.data +0 -0
  123. {gpjax-0.11.2 → gpjax-0.12.2}/examples/gpjax.mplstyle +0 -0
  124. {gpjax-0.11.2 → gpjax-0.12.2}/examples/intro_to_gps/decomposed_mll.png +0 -0
  125. {gpjax-0.11.2 → gpjax-0.12.2}/examples/intro_to_gps/generating_process.png +0 -0
  126. {gpjax-0.11.2 → gpjax-0.12.2}/examples/utils.py +0 -0
  127. {gpjax-0.11.2 → gpjax-0.12.2}/gpjax/citation.py +0 -0
  128. {gpjax-0.11.2 → gpjax-0.12.2}/gpjax/dataset.py +0 -0
  129. {gpjax-0.11.2 → gpjax-0.12.2}/gpjax/integrators.py +0 -0
  130. {gpjax-0.11.2 → gpjax-0.12.2}/gpjax/kernels/__init__.py +0 -0
  131. {gpjax-0.11.2 → gpjax-0.12.2}/gpjax/kernels/approximations/__init__.py +0 -0
  132. {gpjax-0.11.2 → gpjax-0.12.2}/gpjax/kernels/computations/__init__.py +0 -0
  133. {gpjax-0.11.2 → gpjax-0.12.2}/gpjax/kernels/computations/dense.py +0 -0
  134. {gpjax-0.11.2 → gpjax-0.12.2}/gpjax/kernels/non_euclidean/__init__.py +0 -0
  135. {gpjax-0.11.2 → gpjax-0.12.2}/gpjax/kernels/non_euclidean/utils.py +0 -0
  136. {gpjax-0.11.2 → gpjax-0.12.2}/gpjax/kernels/nonstationary/__init__.py +0 -0
  137. {gpjax-0.11.2 → gpjax-0.12.2}/gpjax/kernels/nonstationary/linear.py +0 -0
  138. {gpjax-0.11.2 → gpjax-0.12.2}/gpjax/kernels/stationary/__init__.py +0 -0
  139. {gpjax-0.11.2 → gpjax-0.12.2}/gpjax/kernels/stationary/base.py +0 -0
  140. {gpjax-0.11.2 → gpjax-0.12.2}/gpjax/kernels/stationary/matern12.py +0 -0
  141. {gpjax-0.11.2 → gpjax-0.12.2}/gpjax/kernels/stationary/matern32.py +0 -0
  142. {gpjax-0.11.2 → gpjax-0.12.2}/gpjax/kernels/stationary/matern52.py +0 -0
  143. {gpjax-0.11.2 → gpjax-0.12.2}/gpjax/kernels/stationary/rbf.py +0 -0
  144. {gpjax-0.11.2 → gpjax-0.12.2}/gpjax/kernels/stationary/utils.py +0 -0
  145. {gpjax-0.11.2 → gpjax-0.12.2}/gpjax/kernels/stationary/white.py +0 -0
  146. {gpjax-0.11.2 → gpjax-0.12.2}/gpjax/numpyro_extras.py +0 -0
  147. {gpjax-0.11.2 → gpjax-0.12.2}/gpjax/scan.py +0 -0
  148. {gpjax-0.11.2 → gpjax-0.12.2}/gpjax/typing.py +0 -0
  149. {gpjax-0.11.2 → gpjax-0.12.2}/mkdocs.yml +0 -0
  150. {gpjax-0.11.2 → gpjax-0.12.2}/static/paper.bib +0 -0
  151. {gpjax-0.11.2 → gpjax-0.12.2}/static/paper.md +0 -0
  152. {gpjax-0.11.2 → gpjax-0.12.2}/static/paper.pdf +0 -0
  153. {gpjax-0.11.2 → gpjax-0.12.2}/tests/__init__.py +0 -0
  154. {gpjax-0.11.2 → gpjax-0.12.2}/tests/conftest.py +0 -0
  155. {gpjax-0.11.2 → gpjax-0.12.2}/tests/integration_tests.py +0 -0
  156. {gpjax-0.11.2 → gpjax-0.12.2}/tests/test_citations.py +0 -0
  157. {gpjax-0.11.2 → gpjax-0.12.2}/tests/test_dataset.py +0 -0
  158. {gpjax-0.11.2 → gpjax-0.12.2}/tests/test_integrators.py +0 -0
  159. {gpjax-0.11.2 → gpjax-0.12.2}/tests/test_kernels/__init__.py +0 -0
  160. {gpjax-0.11.2 → gpjax-0.12.2}/tests/test_kernels/test_base.py +0 -0
  161. {gpjax-0.11.2 → gpjax-0.12.2}/tests/test_kernels/test_utils.py +0 -0
  162. {gpjax-0.11.2 → gpjax-0.12.2}/tests/test_likelihoods.py +0 -0
  163. {gpjax-0.11.2 → gpjax-0.12.2}/tests/test_markdown.py +0 -0
  164. {gpjax-0.11.2 → gpjax-0.12.2}/tests/test_numpyro_extras.py +0 -0
  165. {gpjax-0.11.2 → gpjax-0.12.2}/tests/test_objectives.py +0 -0
  166. {gpjax-0.11.2 → gpjax-0.12.2}/tests/test_variational_families.py +0 -0
@@ -0,0 +1,70 @@
1
+ module.exports = {
2
+ extends: ['@commitlint/config-conventional'],
3
+ rules: {
4
+ 'type-enum': [
5
+ 2,
6
+ 'always',
7
+ [
8
+ 'build', // Changes that affect the build system or external dependencies
9
+ 'chore', // Other changes that don't modify src or test files
10
+ 'ci', // Changes to CI configuration files and scripts
11
+ 'docs', // Documentation only changes
12
+ 'feat', // A new feature
13
+ 'fix', // A bug fix
14
+ 'perf', // A code change that improves performance
15
+ 'refactor', // A code change that neither fixes a bug nor adds a feature
16
+ 'revert', // Reverts a previous commit
17
+ 'style', // Changes that do not affect the meaning of the code
18
+ 'test', // Adding missing tests or correcting existing tests
19
+ ],
20
+ ],
21
+ 'type-case': [2, 'always', 'lower-case'],
22
+ 'type-empty': [2, 'never'],
23
+ 'scope-enum': [
24
+ 2,
25
+ 'always',
26
+ [
27
+ // Core components
28
+ 'kernels', // Kernel implementations and computations
29
+ 'gps', // Gaussian process models and inference
30
+ 'likelihoods', // Likelihood functions
31
+ 'mean-functions', // Mean function implementations
32
+ 'variational', // Variational inference methods
33
+ 'objectives', // Optimization objectives
34
+ 'parameters', // Parameter management and transformations
35
+ 'utils', // Utility functions
36
+ 'linalg', // Linear algebra utilities
37
+ 'scan', // Scan operations
38
+ 'dataset', // Dataset handling
39
+ 'fit', // Model fitting and optimization
40
+
41
+ // Testing and validation
42
+ 'tests', // Test improvements
43
+ 'examples', // Example notebooks and scripts
44
+ 'benchmarks', // Performance benchmarks
45
+ 'validation', // Model validation
46
+
47
+ // Infrastructure
48
+ 'ci', // Continuous integration
49
+ 'docs', // Documentation
50
+ 'deps', // Dependency updates
51
+ 'release', // Release related changes
52
+ 'security', // Security improvements
53
+ 'performance', // Performance improvements
54
+
55
+ // Development
56
+ 'dev', // Development tools
57
+ 'typing', // Type annotations
58
+ 'format', // Code formatting
59
+ 'lint', // Linting improvements
60
+ ],
61
+ ],
62
+ 'scope-case': [2, 'always', 'lower-case'],
63
+ 'subject-case': [2, 'always', 'lower-case'],
64
+ 'subject-empty': [2, 'never'],
65
+ 'subject-full-stop': [2, 'never', '.'],
66
+ 'header-max-length': [2, 'always', 72],
67
+ 'body-leading-blank': [2, 'always'],
68
+ 'footer-leading-blank': [2, 'always'],
69
+ },
70
+ };
@@ -0,0 +1,71 @@
1
+ version: 2
2
+ updates:
3
+ # Enable version updates for Python dependencies
4
+ - package-ecosystem: "pip"
5
+ directory: "/"
6
+ schedule:
7
+ interval: "weekly"
8
+ day: "monday"
9
+ time: "04:00"
10
+ timezone: "Europe/Amsterdam"
11
+ open-pull-requests-limit: 10
12
+ assignees:
13
+ - "thomaspinder"
14
+ commit-message:
15
+ prefix: "deps"
16
+ prefix-development: "dev-deps"
17
+ include: "scope"
18
+ labels:
19
+ - "dependencies"
20
+ - "automated"
21
+ # Group related updates together
22
+ groups:
23
+ jax-ecosystem:
24
+ patterns:
25
+ - "jax"
26
+ - "jaxlib"
27
+ - "flax"
28
+ - "optax"
29
+ - "jaxtyping"
30
+ - "equinox"
31
+ ml-tools:
32
+ patterns:
33
+ - "numpy"
34
+ - "scipy"
35
+ - "scikit-learn"
36
+ - "matplotlib"
37
+ - "pandas"
38
+ testing:
39
+ patterns:
40
+ - "pytest*"
41
+ - "coverage"
42
+ - "beartype"
43
+ dev-tools:
44
+ patterns:
45
+ - "black"
46
+ - "ruff"
47
+ - "isort"
48
+ - "pre-commit"
49
+ - "mypy"
50
+ # Ignore major version updates for stable dependencies
51
+ ignore:
52
+ - dependency-name: "numpy"
53
+ update-types: ["version-update:semver-major"]
54
+ - dependency-name: "scipy"
55
+ update-types: ["version-update:semver-major"]
56
+
57
+ # Enable version updates for GitHub Actions
58
+ - package-ecosystem: "github-actions"
59
+ directory: "/"
60
+ schedule:
61
+ interval: "weekly"
62
+ day: "monday"
63
+ time: "04:00"
64
+ timezone: "Europe/Amsterdam"
65
+ open-pull-requests-limit: 5
66
+ commit-message:
67
+ prefix: "ci"
68
+ include: "scope"
69
+ labels:
70
+ - "github-actions"
71
+ - "automated"
@@ -0,0 +1,221 @@
1
+ # Automatic labeling based on file paths - v5 format
2
+ # Format: label-name:
3
+ # - changed-files:
4
+ # - any-glob-to-any-file: pattern
5
+
6
+ # Core Components
7
+ kernels:
8
+ - changed-files:
9
+ - any-glob-to-any-file:
10
+ - 'gpjax/kernels/**'
11
+ - 'tests/test_kernels/**'
12
+
13
+ gps:
14
+ - changed-files:
15
+ - any-glob-to-any-file:
16
+ - 'gpjax/gps.py'
17
+ - 'gpjax/gps/**'
18
+ - 'tests/test_gps.py'
19
+ - 'tests/test_gps/**'
20
+
21
+ likelihoods:
22
+ - changed-files:
23
+ - any-glob-to-any-file:
24
+ - 'gpjax/likelihoods.py'
25
+ - 'gpjax/likelihoods/**'
26
+ - 'tests/test_likelihoods.py'
27
+ - 'tests/test_likelihoods/**'
28
+
29
+ mean-functions:
30
+ - changed-files:
31
+ - any-glob-to-any-file:
32
+ - 'gpjax/mean_functions.py'
33
+ - 'gpjax/mean_functions/**'
34
+ - 'tests/test_mean_functions.py'
35
+ - 'tests/test_mean_functions/**'
36
+
37
+ variational:
38
+ - changed-files:
39
+ - any-glob-to-any-file:
40
+ - 'gpjax/variational_families.py'
41
+ - 'gpjax/variational_families/**'
42
+ - 'tests/test_variational_families.py'
43
+ - 'tests/test_variational_families/**'
44
+
45
+ objectives:
46
+ - changed-files:
47
+ - any-glob-to-any-file:
48
+ - 'gpjax/objectives.py'
49
+ - 'gpjax/objectives/**'
50
+ - 'tests/test_objectives.py'
51
+ - 'tests/test_objectives/**'
52
+
53
+ parameters:
54
+ - changed-files:
55
+ - any-glob-to-any-file:
56
+ - 'gpjax/parameters.py'
57
+ - 'gpjax/parameters/**'
58
+ - 'tests/test_parameters.py'
59
+ - 'tests/test_parameters/**'
60
+
61
+ optimization:
62
+ - changed-files:
63
+ - any-glob-to-any-file:
64
+ - 'gpjax/fit.py'
65
+ - 'gpjax/fit/**'
66
+ - 'tests/test_fit.py'
67
+ - 'tests/test_fit/**'
68
+
69
+ linalg:
70
+ - changed-files:
71
+ - any-glob-to-any-file:
72
+ - 'gpjax/linalg/**'
73
+ - 'tests/test_linalg/**'
74
+
75
+ dataset:
76
+ - changed-files:
77
+ - any-glob-to-any-file:
78
+ - 'gpjax/dataset.py'
79
+ - 'tests/test_dataset.py'
80
+
81
+ utils:
82
+ - changed-files:
83
+ - any-glob-to-any-file:
84
+ - 'gpjax/utils/**'
85
+ - 'tests/test_utils/**'
86
+
87
+ scan:
88
+ - changed-files:
89
+ - any-glob-to-any-file:
90
+ - 'gpjax/scan.py'
91
+ - 'tests/test_scan.py'
92
+
93
+ # Testing and Validation
94
+ tests:
95
+ - changed-files:
96
+ - any-glob-to-any-file:
97
+ - 'tests/**'
98
+ - '**/test_*.py'
99
+ - '**/*_test.py'
100
+
101
+ integration-tests:
102
+ - changed-files:
103
+ - any-glob-to-any-file:
104
+ - 'tests/integration_tests.py'
105
+ - 'tests/integration/**'
106
+
107
+ benchmarks:
108
+ - changed-files:
109
+ - any-glob-to-any-file:
110
+ - 'benchmarks/**'
111
+ - '**/benchmark*.py'
112
+
113
+ validation:
114
+ - changed-files:
115
+ - any-glob-to-any-file:
116
+ - 'validation/**'
117
+ - '**/validation*.py'
118
+
119
+ # Examples and Documentation
120
+ examples:
121
+ - changed-files:
122
+ - any-glob-to-any-file:
123
+ - 'examples/**'
124
+ - 'docs/_examples/**'
125
+
126
+ documentation:
127
+ - changed-files:
128
+ - any-glob-to-any-file:
129
+ - 'docs/**'
130
+ - '**/*.md'
131
+ - '**/*.rst'
132
+ - '**/README*'
133
+ - 'CHANGELOG*'
134
+ - 'CONTRIBUTING*'
135
+ - 'CITATION*'
136
+
137
+ # Infrastructure
138
+ ci:
139
+ - changed-files:
140
+ - any-glob-to-any-file:
141
+ - '.github/**'
142
+ - '**/*.yml'
143
+ - '**/*.yaml'
144
+ - 'pyproject.toml'
145
+ - 'requirements*.txt'
146
+
147
+ dependencies:
148
+ - changed-files:
149
+ - any-glob-to-any-file:
150
+ - 'pyproject.toml'
151
+ - 'requirements*.txt'
152
+ - 'setup.py'
153
+ - 'setup.cfg'
154
+
155
+ security:
156
+ - changed-files:
157
+ - any-glob-to-any-file:
158
+ - '.github/workflows/*security*'
159
+ - '.github/workflows/*codeql*'
160
+ - '.github/dependabot.yml'
161
+ - 'SECURITY.md'
162
+
163
+ performance:
164
+ - changed-files:
165
+ - any-glob-to-any-file:
166
+ - '.github/workflows/*performance*'
167
+ - '.github/workflows/*benchmark*'
168
+ - 'benchmarks/**'
169
+ - '**/performance*.py'
170
+
171
+ # Development Tools
172
+ dev-tools:
173
+ - changed-files:
174
+ - any-glob-to-any-file:
175
+ - '.pre-commit-config.yaml'
176
+ - 'pyproject.toml'
177
+ - '.github/workflows/ruff.yml'
178
+ - '**/.gitignore'
179
+
180
+ formatting:
181
+ - changed-files:
182
+ - any-glob-to-any-file:
183
+ - '.github/workflows/ruff.yml'
184
+ - 'pyproject.toml'
185
+
186
+ typing:
187
+ - changed-files:
188
+ - any-glob-to-any-file:
189
+ - '**/*.pyi'
190
+ - '**/py.typed'
191
+
192
+ # Release and Packaging
193
+ release:
194
+ - changed-files:
195
+ - any-glob-to-any-file:
196
+ - '.github/workflows/release.yml'
197
+ - '.github/workflows/*release*'
198
+ - 'CHANGELOG*'
199
+ - '__init__.py'
200
+
201
+ # Model-specific labels for ML context
202
+ numerical-stability:
203
+ - changed-files:
204
+ - any-glob-to-any-file:
205
+ - 'gpjax/linalg/**'
206
+ - '**/numerical*.py'
207
+ - '**/stability*.py'
208
+
209
+ gpu-support:
210
+ - changed-files:
211
+ - any-glob-to-any-file:
212
+ - '**/*gpu*.py'
213
+ - '**/*device*.py'
214
+ - '**/*cuda*.py'
215
+
216
+ jax-compatibility:
217
+ - changed-files:
218
+ - any-glob-to-any-file:
219
+ - '**/*jax*.py'
220
+ - '**/*jit*.py'
221
+ - '**/*vmap*.py'
@@ -4,6 +4,9 @@
4
4
  #
5
5
  # The repository labels will be automatically configured using this file and
6
6
  # the GitHub Action https://github.com/marketplace/actions/github-labeler.
7
+ - name: automated
8
+ description: Automated PRs
9
+ color: 000000
7
10
  - name: breaking
8
11
  description: Breaking Changes
9
12
  color: bfd4f2
@@ -28,8 +31,8 @@
28
31
  - name: enhancement
29
32
  description: New feature or request
30
33
  color: a2eeef
31
- - name: github_actions
32
- description: Pull requests that update Github_actions code
34
+ - name: github-actions
35
+ description: Pull requests that update Github actions code
33
36
  color: "000000"
34
37
  - name: good first issue
35
38
  description: Good for newcomers
@@ -1,6 +1,6 @@
1
1
  ## Checklist
2
2
 
3
- - [ ] I've formatted the new code by running `hatch run dev:format` before committing.
3
+ - [ ] I've formatted the new code by running `uv run poe format` before committing.
4
4
  - [ ] I've added tests for new code.
5
5
  - [ ] I've added docstrings for the new code.
6
6
 
@@ -0,0 +1,206 @@
1
+ name: "Automatic Labeling"
2
+
3
+ on:
4
+ pull_request:
5
+ types: [opened, synchronize, reopened]
6
+ issues:
7
+ types: [opened, reopened]
8
+
9
+ jobs:
10
+ auto-label:
11
+ name: "Apply Automatic Labels"
12
+ runs-on: ubuntu-latest
13
+ permissions:
14
+ issues: write
15
+ pull-requests: write
16
+
17
+ steps:
18
+ - name: Checkout repository
19
+ uses: actions/checkout@v4
20
+
21
+ - name: Auto-label based on files changed
22
+ if: github.event_name == 'pull_request'
23
+ uses: actions/labeler@v5
24
+ with:
25
+ repo-token: ${{ secrets.GITHUB_TOKEN }}
26
+ configuration-path: .github/labeler.yml
27
+
28
+ - name: Size labeling for PRs
29
+ if: github.event_name == 'pull_request'
30
+ uses: codelytv/pr-size-labeler@v1
31
+ with:
32
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
33
+ xs_label: 'size/xs'
34
+ xs_max_size: '10'
35
+ s_label: 'size/s'
36
+ s_max_size: '100'
37
+ m_label: 'size/m'
38
+ m_max_size: '500'
39
+ l_label: 'size/l'
40
+ l_max_size: '1000'
41
+ xl_label: 'size/xl'
42
+ message_if_xl: >
43
+ This PR is very large. Consider breaking it down into smaller,
44
+ focused PRs for easier review and better maintainability.
45
+
46
+ - name: Label ML-specific issues
47
+ if: github.event_name == 'issues'
48
+ uses: actions/github-script@v7
49
+ with:
50
+ script: |
51
+ const title = context.payload.issue.title.toLowerCase();
52
+ const body = context.payload.issue.body?.toLowerCase() || '';
53
+ const text = title + ' ' + body;
54
+
55
+ const labels = [];
56
+
57
+ // GPU/Hardware related
58
+ if (text.includes('gpu') || text.includes('cuda') || text.includes('device') ||
59
+ text.includes('memory') || text.includes('jax.device')) {
60
+ labels.push('gpu-support');
61
+ }
62
+
63
+ // Performance related
64
+ if (text.includes('slow') || text.includes('performance') || text.includes('speed') ||
65
+ text.includes('memory usage') || text.includes('regression') || text.includes('benchmark')) {
66
+ labels.push('performance');
67
+ }
68
+
69
+ // Numerical stability
70
+ if (text.includes('numerical') || text.includes('instability') || text.includes('nan') ||
71
+ text.includes('inf') || text.includes('convergence') || text.includes('precision')) {
72
+ labels.push('numerical-stability');
73
+ }
74
+
75
+ // JAX compatibility
76
+ if (text.includes('jax') || text.includes('jit') || text.includes('vmap') ||
77
+ text.includes('pmap') || text.includes('xla')) {
78
+ labels.push('jax-compatibility');
79
+ }
80
+
81
+ // Component detection
82
+ if (text.includes('kernel') || text.includes('rbf') || text.includes('matern')) {
83
+ labels.push('kernels');
84
+ }
85
+
86
+ if (text.includes('gaussian process') || text.includes(' gp ') || text.includes('posterior') ||
87
+ text.includes('prior') || text.includes('inference')) {
88
+ labels.push('gps');
89
+ }
90
+
91
+ if (text.includes('variational') || text.includes('elbo') || text.includes('svgp')) {
92
+ labels.push('variational');
93
+ }
94
+
95
+ if (text.includes('likelihood') || text.includes('bernoulli') || text.includes('poisson')) {
96
+ labels.push('likelihoods');
97
+ }
98
+
99
+ if (text.includes('optimization') || text.includes('optimizer') || text.includes('fit') ||
100
+ text.includes('scipy') || text.includes('optax')) {
101
+ labels.push('optimization');
102
+ }
103
+
104
+ // Documentation related
105
+ if (text.includes('documentation') || text.includes('docs') || text.includes('example') ||
106
+ text.includes('tutorial') || text.includes('docstring')) {
107
+ labels.push('documentation');
108
+ }
109
+
110
+ // Bug vs Feature detection
111
+ if (text.includes('bug') || text.includes('error') || text.includes('fail') ||
112
+ text.includes('broken') || text.includes('issue') || text.includes('problem')) {
113
+ labels.push('bug');
114
+ } else if (text.includes('feature') || text.includes('enhancement') || text.includes('add') ||
115
+ text.includes('implement') || text.includes('support') || text.includes('new')) {
116
+ labels.push('enhancement');
117
+ }
118
+
119
+ // Difficulty assessment
120
+ if (text.includes('good first issue') || text.includes('beginner') || text.includes('easy')) {
121
+ labels.push('good first issue');
122
+ } else if (text.includes('help wanted') || text.includes('help needed')) {
123
+ labels.push('help wanted');
124
+ } else if (text.includes('complex') || text.includes('advanced') || text.includes('expert')) {
125
+ labels.push('expert-level');
126
+ }
127
+
128
+ // Priority detection
129
+ if (text.includes('urgent') || text.includes('critical') || text.includes('blocking')) {
130
+ labels.push('priority/high');
131
+ } else if (text.includes('nice to have') || text.includes('low priority')) {
132
+ labels.push('priority/low');
133
+ }
134
+
135
+ // Apply labels
136
+ if (labels.length > 0) {
137
+ await github.rest.issues.addLabels({
138
+ owner: context.repo.owner,
139
+ repo: context.repo.repo,
140
+ issue_number: context.payload.issue.number,
141
+ labels: labels
142
+ });
143
+ }
144
+
145
+ - name: Label PRs based on content
146
+ if: github.event_name == 'pull_request'
147
+ uses: actions/github-script@v7
148
+ with:
149
+ script: |
150
+ const title = context.payload.pull_request.title.toLowerCase();
151
+ const body = context.payload.pull_request.body?.toLowerCase() || '';
152
+ const text = title + ' ' + body;
153
+
154
+ const labels = [];
155
+
156
+ // Breaking changes
157
+ if (text.includes('breaking') || text.includes('breaking change') ||
158
+ title.includes('!:') || body.includes('breaking change')) {
159
+ labels.push('breaking-change');
160
+ }
161
+
162
+ // Dependencies
163
+ if (title.includes('deps') || title.includes('dependenc') || title.includes('bump') ||
164
+ text.includes('requirements') || text.includes('pyproject.toml')) {
165
+ labels.push('dependencies');
166
+ }
167
+
168
+ // CI/Infrastructure
169
+ if (text.includes('github actions') || text.includes('workflow') || text.includes('.yml') ||
170
+ text.includes('ci') || text.includes('pipeline')) {
171
+ labels.push('ci');
172
+ }
173
+
174
+ // Performance improvements
175
+ if (text.includes('performance') || text.includes('optimization') || text.includes('faster') ||
176
+ text.includes('efficient') || text.includes('benchmark')) {
177
+ labels.push('performance');
178
+ }
179
+
180
+ // Documentation
181
+ if (text.includes('docs') || text.includes('readme') || text.includes('docstring') ||
182
+ text.includes('example') || text.includes('.md') || text.includes('tutorial')) {
183
+ labels.push('documentation');
184
+ }
185
+
186
+ // Tests
187
+ if (text.includes('test') || text.includes('pytest') || text.includes('coverage') ||
188
+ title.startsWith('test:') || text.includes('testing')) {
189
+ labels.push('tests');
190
+ }
191
+
192
+ // Security
193
+ if (text.includes('security') || text.includes('vulnerability') || text.includes('cve') ||
194
+ text.includes('safety') || text.includes('bandit')) {
195
+ labels.push('security');
196
+ }
197
+
198
+ // Apply labels
199
+ if (labels.length > 0) {
200
+ await github.rest.issues.addLabels({
201
+ owner: context.repo.owner,
202
+ repo: context.repo.repo,
203
+ issue_number: context.payload.pull_request.number,
204
+ labels: labels
205
+ });
206
+ }
@@ -22,42 +22,46 @@ jobs:
22
22
  strategy:
23
23
  matrix:
24
24
  os: ["ubuntu-latest"]
25
- python-version: ["3.10"]
25
+ python-version: ["3.11"]
26
26
 
27
27
  steps:
28
28
  # Grap the latest commit from the branch
29
29
  - name: Checkout the branch
30
- uses: actions/checkout@v3.5.2
30
+ uses: actions/checkout@v4
31
31
  with:
32
32
  persist-credentials: false
33
33
 
34
34
  # Create a virtual environment
35
35
  - name: create Conda environment
36
- uses: conda-incubator/setup-miniconda@v2
36
+ uses: conda-incubator/setup-miniconda@v3
37
37
  with:
38
38
  auto-update-conda: true
39
39
  python-version: ${{ matrix.python-version }}
40
40
 
41
41
  # Install katex for math support
42
42
  - name: Install NPM
43
- uses: actions/setup-node@v3
43
+ uses: actions/setup-node@v5
44
44
  with:
45
45
  node-version: 16
46
46
  - name: Install KaTeX
47
47
  run: |
48
48
  npm install katex
49
49
 
50
- # Install Hatch
51
- - name: Install Hatch
52
- uses: pypa/hatch@install
50
+ # Install uv
51
+ - name: Install uv
52
+ uses: astral-sh/setup-uv@v6
53
+ with:
54
+ version: "latest"
53
55
 
54
56
  - name: Build the documentation with MKDocs
55
57
  run: |
56
58
  conda install pandoc
57
- hatch run docs:build
59
+ uv sync --extra docs
60
+ uv run python docs/scripts/gen_examples.py --execute
61
+ uv run mkdocs build
58
62
 
59
63
  - name: Deploy Page 🚀
60
- uses: JamesIves/github-pages-deploy-action@v4.4.1
64
+ uses: JamesIves/github-pages-deploy-action@v4.7.3
61
65
  with:
62
66
  branch: gh-pages
63
67
  folder: site