gpjax 0.12.2__tar.gz → 0.13.1__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 (162) hide show
  1. {gpjax-0.12.2 → gpjax-0.13.1}/.github/workflows/auto-label.yml +34 -34
  2. {gpjax-0.12.2 → gpjax-0.13.1}/.github/workflows/build_docs.yml +3 -3
  3. {gpjax-0.12.2 → gpjax-0.13.1}/.github/workflows/commit-lint.yml +1 -1
  4. {gpjax-0.12.2 → gpjax-0.13.1}/.github/workflows/integration.yml +3 -3
  5. {gpjax-0.12.2 → gpjax-0.13.1}/.github/workflows/pr_greeting.yml +3 -3
  6. {gpjax-0.12.2 → gpjax-0.13.1}/.github/workflows/release.yml +15 -15
  7. {gpjax-0.12.2 → gpjax-0.13.1}/.github/workflows/ruff.yml +1 -1
  8. {gpjax-0.12.2 → gpjax-0.13.1}/.github/workflows/security-analysis.yml +4 -4
  9. {gpjax-0.12.2 → gpjax-0.13.1}/.github/workflows/test_docs.yml +2 -2
  10. {gpjax-0.12.2 → gpjax-0.13.1}/.github/workflows/tests.yml +4 -4
  11. {gpjax-0.12.2 → gpjax-0.13.1}/PKG-INFO +18 -10
  12. {gpjax-0.12.2 → gpjax-0.13.1}/README.md +15 -6
  13. {gpjax-0.12.2 → gpjax-0.13.1}/docs/installation.md +14 -2
  14. {gpjax-0.12.2 → gpjax-0.13.1}/docs/stylesheets/extra.css +17 -4
  15. {gpjax-0.12.2 → gpjax-0.13.1}/gpjax/__init__.py +1 -1
  16. {gpjax-0.12.2 → gpjax-0.13.1}/gpjax/kernels/approximations/rff.py +2 -1
  17. {gpjax-0.12.2 → gpjax-0.13.1}/gpjax/kernels/base.py +1 -1
  18. {gpjax-0.12.2 → gpjax-0.13.1}/gpjax/kernels/computations/eigen.py +1 -15
  19. {gpjax-0.12.2 → gpjax-0.13.1}/gpjax/kernels/non_euclidean/graph.py +7 -6
  20. {gpjax-0.12.2 → gpjax-0.13.1}/gpjax/kernels/non_euclidean/utils.py +30 -0
  21. {gpjax-0.12.2 → gpjax-0.13.1}/gpjax/kernels/stationary/base.py +1 -30
  22. {gpjax-0.12.2 → gpjax-0.13.1}/gpjax/kernels/stationary/matern12.py +1 -1
  23. {gpjax-0.12.2 → gpjax-0.13.1}/gpjax/kernels/stationary/matern32.py +1 -1
  24. {gpjax-0.12.2 → gpjax-0.13.1}/gpjax/kernels/stationary/matern52.py +1 -1
  25. {gpjax-0.12.2 → gpjax-0.13.1}/gpjax/mean_functions.py +1 -1
  26. {gpjax-0.12.2 → gpjax-0.13.1}/gpjax/variational_families.py +69 -5
  27. {gpjax-0.12.2 → gpjax-0.13.1}/mkdocs.yml +15 -0
  28. {gpjax-0.12.2 → gpjax-0.13.1}/pyproject.toml +4 -5
  29. {gpjax-0.12.2 → gpjax-0.13.1}/tests/test_kernels/test_base.py +3 -2
  30. {gpjax-0.12.2 → gpjax-0.13.1}/tests/test_variational_families.py +59 -0
  31. {gpjax-0.12.2 → gpjax-0.13.1}/uv.lock +312 -723
  32. {gpjax-0.12.2 → gpjax-0.13.1}/.github/CODE_OF_CONDUCT.md +0 -0
  33. {gpjax-0.12.2 → gpjax-0.13.1}/.github/ISSUE_TEMPLATE/01_BUG_REPORT.md +0 -0
  34. {gpjax-0.12.2 → gpjax-0.13.1}/.github/ISSUE_TEMPLATE/02_FEATURE_REQUEST.md +0 -0
  35. {gpjax-0.12.2 → gpjax-0.13.1}/.github/ISSUE_TEMPLATE/03_CODEBASE_IMPROVEMENT.md +0 -0
  36. {gpjax-0.12.2 → gpjax-0.13.1}/.github/ISSUE_TEMPLATE/04_DOCS_IMPROVEMENT.md +0 -0
  37. {gpjax-0.12.2 → gpjax-0.13.1}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  38. {gpjax-0.12.2 → gpjax-0.13.1}/.github/codecov.yml +0 -0
  39. {gpjax-0.12.2 → gpjax-0.13.1}/.github/commitlint.config.js +0 -0
  40. {gpjax-0.12.2 → gpjax-0.13.1}/.github/dependabot.yml +0 -0
  41. {gpjax-0.12.2 → gpjax-0.13.1}/.github/labeler.yml +0 -0
  42. {gpjax-0.12.2 → gpjax-0.13.1}/.github/labels.yml +0 -0
  43. {gpjax-0.12.2 → gpjax-0.13.1}/.github/pull_request_template.md +0 -0
  44. {gpjax-0.12.2 → gpjax-0.13.1}/.github/release-drafter.yml +0 -0
  45. {gpjax-0.12.2 → gpjax-0.13.1}/.gitignore +0 -0
  46. {gpjax-0.12.2 → gpjax-0.13.1}/CITATION.bib +0 -0
  47. {gpjax-0.12.2 → gpjax-0.13.1}/LICENSE.txt +0 -0
  48. {gpjax-0.12.2 → gpjax-0.13.1}/Makefile +0 -0
  49. {gpjax-0.12.2 → gpjax-0.13.1}/docs/CODE_OF_CONDUCT.md +0 -0
  50. {gpjax-0.12.2 → gpjax-0.13.1}/docs/GOVERNANCE.md +0 -0
  51. {gpjax-0.12.2 → gpjax-0.13.1}/docs/contributing.md +0 -0
  52. {gpjax-0.12.2 → gpjax-0.13.1}/docs/design.md +0 -0
  53. {gpjax-0.12.2 → gpjax-0.13.1}/docs/index.md +0 -0
  54. {gpjax-0.12.2 → gpjax-0.13.1}/docs/index.rst +0 -0
  55. {gpjax-0.12.2 → gpjax-0.13.1}/docs/javascripts/katex.js +0 -0
  56. {gpjax-0.12.2 → gpjax-0.13.1}/docs/refs.bib +0 -0
  57. {gpjax-0.12.2 → gpjax-0.13.1}/docs/scripts/gen_examples.py +0 -0
  58. {gpjax-0.12.2 → gpjax-0.13.1}/docs/scripts/gen_pages.py +0 -0
  59. {gpjax-0.12.2 → gpjax-0.13.1}/docs/scripts/notebook_converter.py +0 -0
  60. {gpjax-0.12.2 → gpjax-0.13.1}/docs/scripts/sharp_bits_figure.py +0 -0
  61. {gpjax-0.12.2 → gpjax-0.13.1}/docs/sharp_bits.md +0 -0
  62. {gpjax-0.12.2 → gpjax-0.13.1}/docs/static/GP.pdf +0 -0
  63. {gpjax-0.12.2 → gpjax-0.13.1}/docs/static/GP.svg +0 -0
  64. {gpjax-0.12.2 → gpjax-0.13.1}/docs/static/bijector_figure.svg +0 -0
  65. {gpjax-0.12.2 → gpjax-0.13.1}/docs/static/css/gpjax_theme.css +0 -0
  66. {gpjax-0.12.2 → gpjax-0.13.1}/docs/static/favicon.ico +0 -0
  67. {gpjax-0.12.2 → gpjax-0.13.1}/docs/static/gpjax.mplstyle +0 -0
  68. {gpjax-0.12.2 → gpjax-0.13.1}/docs/static/gpjax_logo.pdf +0 -0
  69. {gpjax-0.12.2 → gpjax-0.13.1}/docs/static/gpjax_logo.svg +0 -0
  70. {gpjax-0.12.2 → gpjax-0.13.1}/docs/static/jaxkern/lato.ttf +0 -0
  71. {gpjax-0.12.2 → gpjax-0.13.1}/docs/static/jaxkern/logo.png +0 -0
  72. {gpjax-0.12.2 → gpjax-0.13.1}/docs/static/jaxkern/logo.svg +0 -0
  73. {gpjax-0.12.2 → gpjax-0.13.1}/docs/static/jaxkern/main.py +0 -0
  74. {gpjax-0.12.2 → gpjax-0.13.1}/docs/static/step_size_figure.png +0 -0
  75. {gpjax-0.12.2 → gpjax-0.13.1}/docs/static/step_size_figure.svg +0 -0
  76. {gpjax-0.12.2 → gpjax-0.13.1}/docs/stylesheets/permalinks.css +0 -0
  77. {gpjax-0.12.2 → gpjax-0.13.1}/examples/backend.py +0 -0
  78. {gpjax-0.12.2 → gpjax-0.13.1}/examples/barycentres/barycentre_gp.gif +0 -0
  79. {gpjax-0.12.2 → gpjax-0.13.1}/examples/barycentres.py +0 -0
  80. {gpjax-0.12.2 → gpjax-0.13.1}/examples/classification.py +0 -0
  81. {gpjax-0.12.2 → gpjax-0.13.1}/examples/collapsed_vi.py +0 -0
  82. {gpjax-0.12.2 → gpjax-0.13.1}/examples/constructing_new_kernels.py +0 -0
  83. {gpjax-0.12.2 → gpjax-0.13.1}/examples/data/max_tempeature_switzerland.csv +0 -0
  84. {gpjax-0.12.2 → gpjax-0.13.1}/examples/data/yacht_hydrodynamics.data +0 -0
  85. {gpjax-0.12.2 → gpjax-0.13.1}/examples/deep_kernels.py +0 -0
  86. {gpjax-0.12.2 → gpjax-0.13.1}/examples/gpjax.mplstyle +0 -0
  87. {gpjax-0.12.2 → gpjax-0.13.1}/examples/graph_kernels.py +0 -0
  88. {gpjax-0.12.2 → gpjax-0.13.1}/examples/intro_to_gps/decomposed_mll.png +0 -0
  89. {gpjax-0.12.2 → gpjax-0.13.1}/examples/intro_to_gps/generating_process.png +0 -0
  90. {gpjax-0.12.2 → gpjax-0.13.1}/examples/intro_to_gps.py +0 -0
  91. {gpjax-0.12.2 → gpjax-0.13.1}/examples/intro_to_kernels.py +0 -0
  92. {gpjax-0.12.2 → gpjax-0.13.1}/examples/likelihoods_guide.py +0 -0
  93. {gpjax-0.12.2 → gpjax-0.13.1}/examples/oceanmodelling.py +0 -0
  94. {gpjax-0.12.2 → gpjax-0.13.1}/examples/poisson.py +0 -0
  95. {gpjax-0.12.2 → gpjax-0.13.1}/examples/regression.py +0 -0
  96. {gpjax-0.12.2 → gpjax-0.13.1}/examples/uncollapsed_vi.py +0 -0
  97. {gpjax-0.12.2 → gpjax-0.13.1}/examples/utils.py +0 -0
  98. {gpjax-0.12.2 → gpjax-0.13.1}/examples/yacht.py +0 -0
  99. {gpjax-0.12.2 → gpjax-0.13.1}/gpjax/citation.py +0 -0
  100. {gpjax-0.12.2 → gpjax-0.13.1}/gpjax/dataset.py +0 -0
  101. {gpjax-0.12.2 → gpjax-0.13.1}/gpjax/distributions.py +0 -0
  102. {gpjax-0.12.2 → gpjax-0.13.1}/gpjax/fit.py +0 -0
  103. {gpjax-0.12.2 → gpjax-0.13.1}/gpjax/gps.py +1 -1
  104. {gpjax-0.12.2 → gpjax-0.13.1}/gpjax/integrators.py +0 -0
  105. {gpjax-0.12.2 → gpjax-0.13.1}/gpjax/kernels/__init__.py +0 -0
  106. {gpjax-0.12.2 → gpjax-0.13.1}/gpjax/kernels/approximations/__init__.py +0 -0
  107. {gpjax-0.12.2 → gpjax-0.13.1}/gpjax/kernels/computations/__init__.py +0 -0
  108. {gpjax-0.12.2 → gpjax-0.13.1}/gpjax/kernels/computations/base.py +0 -0
  109. {gpjax-0.12.2 → gpjax-0.13.1}/gpjax/kernels/computations/basis_functions.py +0 -0
  110. {gpjax-0.12.2 → gpjax-0.13.1}/gpjax/kernels/computations/constant_diagonal.py +0 -0
  111. {gpjax-0.12.2 → gpjax-0.13.1}/gpjax/kernels/computations/dense.py +0 -0
  112. {gpjax-0.12.2 → gpjax-0.13.1}/gpjax/kernels/computations/diagonal.py +0 -0
  113. {gpjax-0.12.2 → gpjax-0.13.1}/gpjax/kernels/non_euclidean/__init__.py +0 -0
  114. {gpjax-0.12.2 → gpjax-0.13.1}/gpjax/kernels/nonstationary/__init__.py +0 -0
  115. {gpjax-0.12.2 → gpjax-0.13.1}/gpjax/kernels/nonstationary/arccosine.py +0 -0
  116. {gpjax-0.12.2 → gpjax-0.13.1}/gpjax/kernels/nonstationary/linear.py +0 -0
  117. {gpjax-0.12.2 → gpjax-0.13.1}/gpjax/kernels/nonstationary/polynomial.py +0 -0
  118. {gpjax-0.12.2 → gpjax-0.13.1}/gpjax/kernels/stationary/__init__.py +0 -0
  119. {gpjax-0.12.2 → gpjax-0.13.1}/gpjax/kernels/stationary/periodic.py +0 -0
  120. {gpjax-0.12.2 → gpjax-0.13.1}/gpjax/kernels/stationary/powered_exponential.py +0 -0
  121. {gpjax-0.12.2 → gpjax-0.13.1}/gpjax/kernels/stationary/rational_quadratic.py +0 -0
  122. {gpjax-0.12.2 → gpjax-0.13.1}/gpjax/kernels/stationary/rbf.py +0 -0
  123. {gpjax-0.12.2 → gpjax-0.13.1}/gpjax/kernels/stationary/utils.py +0 -0
  124. {gpjax-0.12.2 → gpjax-0.13.1}/gpjax/kernels/stationary/white.py +0 -0
  125. {gpjax-0.12.2 → gpjax-0.13.1}/gpjax/likelihoods.py +0 -0
  126. {gpjax-0.12.2 → gpjax-0.13.1}/gpjax/linalg/__init__.py +0 -0
  127. {gpjax-0.12.2 → gpjax-0.13.1}/gpjax/linalg/operations.py +0 -0
  128. {gpjax-0.12.2 → gpjax-0.13.1}/gpjax/linalg/operators.py +0 -0
  129. {gpjax-0.12.2 → gpjax-0.13.1}/gpjax/linalg/utils.py +0 -0
  130. {gpjax-0.12.2 → gpjax-0.13.1}/gpjax/numpyro_extras.py +0 -0
  131. {gpjax-0.12.2 → gpjax-0.13.1}/gpjax/objectives.py +0 -0
  132. {gpjax-0.12.2 → gpjax-0.13.1}/gpjax/parameters.py +0 -0
  133. {gpjax-0.12.2 → gpjax-0.13.1}/gpjax/scan.py +0 -0
  134. {gpjax-0.12.2 → gpjax-0.13.1}/gpjax/typing.py +0 -0
  135. {gpjax-0.12.2 → gpjax-0.13.1}/static/CONTRIBUTING.md +0 -0
  136. {gpjax-0.12.2 → gpjax-0.13.1}/static/paper.bib +0 -0
  137. {gpjax-0.12.2 → gpjax-0.13.1}/static/paper.md +0 -0
  138. {gpjax-0.12.2 → gpjax-0.13.1}/static/paper.pdf +0 -0
  139. {gpjax-0.12.2 → gpjax-0.13.1}/tests/__init__.py +0 -0
  140. {gpjax-0.12.2 → gpjax-0.13.1}/tests/conftest.py +0 -0
  141. {gpjax-0.12.2 → gpjax-0.13.1}/tests/integration_tests.py +0 -0
  142. {gpjax-0.12.2 → gpjax-0.13.1}/tests/test_citations.py +0 -0
  143. {gpjax-0.12.2 → gpjax-0.13.1}/tests/test_dataset.py +0 -0
  144. {gpjax-0.12.2 → gpjax-0.13.1}/tests/test_fit.py +0 -0
  145. {gpjax-0.12.2 → gpjax-0.13.1}/tests/test_gaussian_distribution.py +0 -0
  146. {gpjax-0.12.2 → gpjax-0.13.1}/tests/test_gps.py +0 -0
  147. {gpjax-0.12.2 → gpjax-0.13.1}/tests/test_imports.py +0 -0
  148. {gpjax-0.12.2 → gpjax-0.13.1}/tests/test_integrators.py +0 -0
  149. {gpjax-0.12.2 → gpjax-0.13.1}/tests/test_kernels/__init__.py +0 -0
  150. {gpjax-0.12.2 → gpjax-0.13.1}/tests/test_kernels/test_approximations.py +0 -0
  151. {gpjax-0.12.2 → gpjax-0.13.1}/tests/test_kernels/test_computation.py +0 -0
  152. {gpjax-0.12.2 → gpjax-0.13.1}/tests/test_kernels/test_non_euclidean.py +0 -0
  153. {gpjax-0.12.2 → gpjax-0.13.1}/tests/test_kernels/test_nonstationary.py +0 -0
  154. {gpjax-0.12.2 → gpjax-0.13.1}/tests/test_kernels/test_stationary.py +0 -0
  155. {gpjax-0.12.2 → gpjax-0.13.1}/tests/test_kernels/test_utils.py +0 -0
  156. {gpjax-0.12.2 → gpjax-0.13.1}/tests/test_likelihoods.py +0 -0
  157. {gpjax-0.12.2 → gpjax-0.13.1}/tests/test_linalg.py +0 -0
  158. {gpjax-0.12.2 → gpjax-0.13.1}/tests/test_markdown.py +0 -0
  159. {gpjax-0.12.2 → gpjax-0.13.1}/tests/test_mean_functions.py +0 -0
  160. {gpjax-0.12.2 → gpjax-0.13.1}/tests/test_numpyro_extras.py +0 -0
  161. {gpjax-0.12.2 → gpjax-0.13.1}/tests/test_objectives.py +0 -0
  162. {gpjax-0.12.2 → gpjax-0.13.1}/tests/test_parameters.py +0 -0
@@ -1,7 +1,7 @@
1
1
  name: "Automatic Labeling"
2
2
 
3
3
  on:
4
- pull_request:
4
+ pull_request_target:
5
5
  types: [opened, synchronize, reopened]
6
6
  issues:
7
7
  types: [opened, reopened]
@@ -13,14 +13,14 @@ jobs:
13
13
  permissions:
14
14
  issues: write
15
15
  pull-requests: write
16
-
16
+
17
17
  steps:
18
18
  - name: Checkout repository
19
- uses: actions/checkout@v4
19
+ uses: actions/checkout@v5
20
20
 
21
21
  - name: Auto-label based on files changed
22
22
  if: github.event_name == 'pull_request'
23
- uses: actions/labeler@v5
23
+ uses: actions/labeler@v6
24
24
  with:
25
25
  repo-token: ${{ secrets.GITHUB_TOKEN }}
26
26
  configuration-path: .github/labeler.yml
@@ -32,7 +32,7 @@ jobs:
32
32
  GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
33
33
  xs_label: 'size/xs'
34
34
  xs_max_size: '10'
35
- s_label: 'size/s'
35
+ s_label: 'size/s'
36
36
  s_max_size: '100'
37
37
  m_label: 'size/m'
38
38
  m_max_size: '500'
@@ -45,68 +45,68 @@ jobs:
45
45
 
46
46
  - name: Label ML-specific issues
47
47
  if: github.event_name == 'issues'
48
- uses: actions/github-script@v7
48
+ uses: actions/github-script@v8
49
49
  with:
50
50
  script: |
51
51
  const title = context.payload.issue.title.toLowerCase();
52
52
  const body = context.payload.issue.body?.toLowerCase() || '';
53
53
  const text = title + ' ' + body;
54
-
54
+
55
55
  const labels = [];
56
-
56
+
57
57
  // GPU/Hardware related
58
- if (text.includes('gpu') || text.includes('cuda') || text.includes('device') ||
58
+ if (text.includes('gpu') || text.includes('cuda') || text.includes('device') ||
59
59
  text.includes('memory') || text.includes('jax.device')) {
60
60
  labels.push('gpu-support');
61
61
  }
62
-
62
+
63
63
  // Performance related
64
64
  if (text.includes('slow') || text.includes('performance') || text.includes('speed') ||
65
65
  text.includes('memory usage') || text.includes('regression') || text.includes('benchmark')) {
66
66
  labels.push('performance');
67
67
  }
68
-
68
+
69
69
  // Numerical stability
70
70
  if (text.includes('numerical') || text.includes('instability') || text.includes('nan') ||
71
71
  text.includes('inf') || text.includes('convergence') || text.includes('precision')) {
72
72
  labels.push('numerical-stability');
73
73
  }
74
-
74
+
75
75
  // JAX compatibility
76
- if (text.includes('jax') || text.includes('jit') || text.includes('vmap') ||
76
+ if (text.includes('jax') || text.includes('jit') || text.includes('vmap') ||
77
77
  text.includes('pmap') || text.includes('xla')) {
78
78
  labels.push('jax-compatibility');
79
79
  }
80
-
80
+
81
81
  // Component detection
82
82
  if (text.includes('kernel') || text.includes('rbf') || text.includes('matern')) {
83
83
  labels.push('kernels');
84
84
  }
85
-
85
+
86
86
  if (text.includes('gaussian process') || text.includes(' gp ') || text.includes('posterior') ||
87
87
  text.includes('prior') || text.includes('inference')) {
88
88
  labels.push('gps');
89
89
  }
90
-
90
+
91
91
  if (text.includes('variational') || text.includes('elbo') || text.includes('svgp')) {
92
92
  labels.push('variational');
93
93
  }
94
-
94
+
95
95
  if (text.includes('likelihood') || text.includes('bernoulli') || text.includes('poisson')) {
96
96
  labels.push('likelihoods');
97
97
  }
98
-
98
+
99
99
  if (text.includes('optimization') || text.includes('optimizer') || text.includes('fit') ||
100
100
  text.includes('scipy') || text.includes('optax')) {
101
101
  labels.push('optimization');
102
102
  }
103
-
103
+
104
104
  // Documentation related
105
105
  if (text.includes('documentation') || text.includes('docs') || text.includes('example') ||
106
106
  text.includes('tutorial') || text.includes('docstring')) {
107
107
  labels.push('documentation');
108
108
  }
109
-
109
+
110
110
  // Bug vs Feature detection
111
111
  if (text.includes('bug') || text.includes('error') || text.includes('fail') ||
112
112
  text.includes('broken') || text.includes('issue') || text.includes('problem')) {
@@ -115,7 +115,7 @@ jobs:
115
115
  text.includes('implement') || text.includes('support') || text.includes('new')) {
116
116
  labels.push('enhancement');
117
117
  }
118
-
118
+
119
119
  // Difficulty assessment
120
120
  if (text.includes('good first issue') || text.includes('beginner') || text.includes('easy')) {
121
121
  labels.push('good first issue');
@@ -124,14 +124,14 @@ jobs:
124
124
  } else if (text.includes('complex') || text.includes('advanced') || text.includes('expert')) {
125
125
  labels.push('expert-level');
126
126
  }
127
-
127
+
128
128
  // Priority detection
129
129
  if (text.includes('urgent') || text.includes('critical') || text.includes('blocking')) {
130
130
  labels.push('priority/high');
131
131
  } else if (text.includes('nice to have') || text.includes('low priority')) {
132
132
  labels.push('priority/low');
133
133
  }
134
-
134
+
135
135
  // Apply labels
136
136
  if (labels.length > 0) {
137
137
  await github.rest.issues.addLabels({
@@ -144,57 +144,57 @@ jobs:
144
144
 
145
145
  - name: Label PRs based on content
146
146
  if: github.event_name == 'pull_request'
147
- uses: actions/github-script@v7
147
+ uses: actions/github-script@v8
148
148
  with:
149
149
  script: |
150
150
  const title = context.payload.pull_request.title.toLowerCase();
151
151
  const body = context.payload.pull_request.body?.toLowerCase() || '';
152
152
  const text = title + ' ' + body;
153
-
153
+
154
154
  const labels = [];
155
-
155
+
156
156
  // Breaking changes
157
157
  if (text.includes('breaking') || text.includes('breaking change') ||
158
158
  title.includes('!:') || body.includes('breaking change')) {
159
159
  labels.push('breaking-change');
160
160
  }
161
-
161
+
162
162
  // Dependencies
163
163
  if (title.includes('deps') || title.includes('dependenc') || title.includes('bump') ||
164
164
  text.includes('requirements') || text.includes('pyproject.toml')) {
165
165
  labels.push('dependencies');
166
166
  }
167
-
168
- // CI/Infrastructure
167
+
168
+ // CI/Infrastructure
169
169
  if (text.includes('github actions') || text.includes('workflow') || text.includes('.yml') ||
170
170
  text.includes('ci') || text.includes('pipeline')) {
171
171
  labels.push('ci');
172
172
  }
173
-
173
+
174
174
  // Performance improvements
175
175
  if (text.includes('performance') || text.includes('optimization') || text.includes('faster') ||
176
176
  text.includes('efficient') || text.includes('benchmark')) {
177
177
  labels.push('performance');
178
178
  }
179
-
179
+
180
180
  // Documentation
181
181
  if (text.includes('docs') || text.includes('readme') || text.includes('docstring') ||
182
182
  text.includes('example') || text.includes('.md') || text.includes('tutorial')) {
183
183
  labels.push('documentation');
184
184
  }
185
-
185
+
186
186
  // Tests
187
187
  if (text.includes('test') || text.includes('pytest') || text.includes('coverage') ||
188
188
  title.startsWith('test:') || text.includes('testing')) {
189
189
  labels.push('tests');
190
190
  }
191
-
191
+
192
192
  // Security
193
193
  if (text.includes('security') || text.includes('vulnerability') || text.includes('cve') ||
194
194
  text.includes('safety') || text.includes('bandit')) {
195
195
  labels.push('security');
196
196
  }
197
-
197
+
198
198
  // Apply labels
199
199
  if (labels.length > 0) {
200
200
  await github.rest.issues.addLabels({
@@ -27,7 +27,7 @@ jobs:
27
27
  steps:
28
28
  # Grap the latest commit from the branch
29
29
  - name: Checkout the branch
30
- uses: actions/checkout@v4
30
+ uses: actions/checkout@v5
31
31
  with:
32
32
  persist-credentials: false
33
33
 
@@ -40,7 +40,7 @@ jobs:
40
40
 
41
41
  # Install katex for math support
42
42
  - name: Install NPM
43
- uses: actions/setup-node@v5
43
+ uses: actions/setup-node@v6
44
44
  with:
45
45
  node-version: 16
46
46
  - name: Install KaTeX
@@ -49,7 +49,7 @@ jobs:
49
49
 
50
50
  # Install uv
51
51
  - name: Install uv
52
- uses: astral-sh/setup-uv@v6
52
+ uses: astral-sh/setup-uv@v7
53
53
  with:
54
54
  version: "latest"
55
55
 
@@ -13,7 +13,7 @@ jobs:
13
13
 
14
14
  steps:
15
15
  - name: Checkout repository
16
- uses: actions/checkout@v4
16
+ uses: actions/checkout@v5
17
17
  with:
18
18
  fetch-depth: 0
19
19
 
@@ -13,11 +13,11 @@ jobs:
13
13
  matrix:
14
14
  # Select the Python versions to test against
15
15
  os: ["ubuntu-latest", "macos-latest"]
16
- python-version: ["3.10", "3.11", "3.12", "3.13"]
16
+ python-version: ["3.11", "3.12", "3.13"]
17
17
  fail-fast: true
18
18
  steps:
19
19
  - name: Check out the code
20
- uses: actions/checkout@v4
20
+ uses: actions/checkout@v5
21
21
  with:
22
22
  fetch-depth: 1
23
23
  - name: Set up Python ${{ matrix.python-version }}
@@ -27,7 +27,7 @@ jobs:
27
27
 
28
28
  # Install uv
29
29
  - name: Install uv
30
- uses: astral-sh/setup-uv@v6
30
+ uses: astral-sh/setup-uv@v7
31
31
  with:
32
32
  version: "latest"
33
33
 
@@ -11,10 +11,10 @@ jobs:
11
11
  runs-on: ubuntu-latest
12
12
 
13
13
  steps:
14
- - uses: actions/first-interaction@v1.3.0
14
+ - uses: actions/first-interaction@v3.1.0
15
15
  with:
16
- repo-token: ${{ secrets.GITHUB_TOKEN }}
17
- pr-message: >+
16
+ repo_token: ${{ secrets.GITHUB_TOKEN }}
17
+ pr_message: >+
18
18
  Thank you for opening your first PR into GPJax!
19
19
 
20
20
 
@@ -29,7 +29,7 @@ jobs:
29
29
 
30
30
  steps:
31
31
  - name: Checkout repository
32
- uses: actions/checkout@v4
32
+ uses: actions/checkout@v5
33
33
  with:
34
34
  fetch-depth: 0
35
35
 
@@ -60,11 +60,11 @@ jobs:
60
60
  fail-fast: false
61
61
  matrix:
62
62
  os: [ubuntu-latest, macos-latest]
63
- python-version: ['3.10', '3.11', '3.12', '3.13']
63
+ python-version: ['3.11', '3.12', '3.13']
64
64
  exclude:
65
65
  # Reduce matrix size - test all Python versions on Ubuntu, subset on others
66
66
  - os: macos-latest
67
- python-version: '3.10'
67
+ python-version: '3.11'
68
68
  - os: macos-latest
69
69
  python-version: '3.12'
70
70
 
@@ -72,7 +72,7 @@ jobs:
72
72
 
73
73
  steps:
74
74
  - name: Checkout repository
75
- uses: actions/checkout@v4
75
+ uses: actions/checkout@v5
76
76
 
77
77
  - name: Set up Python ${{ matrix.python-version }}
78
78
  uses: actions/setup-python@v6
@@ -80,7 +80,7 @@ jobs:
80
80
  python-version: ${{ matrix.python-version }}
81
81
 
82
82
  - name: Install uv
83
- uses: astral-sh/setup-uv@v6
83
+ uses: astral-sh/setup-uv@v7
84
84
 
85
85
  - name: Install dependencies
86
86
  run: |
@@ -108,7 +108,7 @@ jobs:
108
108
 
109
109
  steps:
110
110
  - name: Checkout repository
111
- uses: actions/checkout@v4
111
+ uses: actions/checkout@v5
112
112
 
113
113
  - name: Set up Python
114
114
  uses: actions/setup-python@v6
@@ -116,7 +116,7 @@ jobs:
116
116
  python-version: '3.11'
117
117
 
118
118
  - name: Install uv
119
- uses: astral-sh/setup-uv@v6
119
+ uses: astral-sh/setup-uv@v7
120
120
 
121
121
  - name: Install dependencies
122
122
  run: |
@@ -132,7 +132,7 @@ jobs:
132
132
  uv run bandit -r gpjax/ -f json -o bandit-report.json || echo "Bandit scan completed with warnings"
133
133
 
134
134
  - name: Upload security reports
135
- uses: actions/upload-artifact@v4
135
+ uses: actions/upload-artifact@v5
136
136
  with:
137
137
  name: security-reports
138
138
  path: |
@@ -146,7 +146,7 @@ jobs:
146
146
 
147
147
  steps:
148
148
  - name: Checkout repository
149
- uses: actions/checkout@v4
149
+ uses: actions/checkout@v5
150
150
 
151
151
  - name: Set up Python
152
152
  uses: actions/setup-python@v6
@@ -154,7 +154,7 @@ jobs:
154
154
  python-version: '3.11'
155
155
 
156
156
  - name: Install uv
157
- uses: astral-sh/setup-uv@v6
157
+ uses: astral-sh/setup-uv@v7
158
158
 
159
159
  - name: Build package
160
160
  run: |
@@ -166,7 +166,7 @@ jobs:
166
166
  uv run twine check dist/*
167
167
 
168
168
  - name: Upload build artifacts
169
- uses: actions/upload-artifact@v4
169
+ uses: actions/upload-artifact@v5
170
170
  with:
171
171
  name: dist-packages
172
172
  path: dist/
@@ -181,7 +181,7 @@ jobs:
181
181
 
182
182
  steps:
183
183
  - name: Checkout repository
184
- uses: actions/checkout@v4
184
+ uses: actions/checkout@v5
185
185
  with:
186
186
  fetch-depth: 0
187
187
 
@@ -261,10 +261,10 @@ jobs:
261
261
 
262
262
  steps:
263
263
  - name: Checkout repository
264
- uses: actions/checkout@v4
264
+ uses: actions/checkout@v5
265
265
 
266
266
  - name: Download build artifacts
267
- uses: actions/download-artifact@v4
267
+ uses: actions/download-artifact@v6
268
268
  with:
269
269
  name: dist-packages
270
270
  path: dist/
@@ -294,7 +294,7 @@ jobs:
294
294
 
295
295
  steps:
296
296
  - name: Download build artifacts
297
- uses: actions/download-artifact@v4
297
+ uses: actions/download-artifact@v6
298
298
  with:
299
299
  name: dist-packages
300
300
  path: dist/
@@ -8,5 +8,5 @@ jobs:
8
8
  ruff:
9
9
  runs-on: ubuntu-latest
10
10
  steps:
11
- - uses: actions/checkout@v4
11
+ - uses: actions/checkout@v5
12
12
  - uses: chartboost/ruff-action@v1
@@ -20,7 +20,7 @@ jobs:
20
20
 
21
21
  steps:
22
22
  - name: Checkout repository
23
- uses: actions/checkout@v4
23
+ uses: actions/checkout@v5
24
24
 
25
25
  - name: Set up Python
26
26
  uses: actions/setup-python@v6
@@ -28,7 +28,7 @@ jobs:
28
28
  python-version: '3.11'
29
29
 
30
30
  - name: Install uv
31
- uses: astral-sh/setup-uv@v6
31
+ uses: astral-sh/setup-uv@v7
32
32
  with:
33
33
  version: "latest"
34
34
 
@@ -47,7 +47,7 @@ jobs:
47
47
  uv run bandit -r gpjax/ -f json -o bandit-report.json || true
48
48
 
49
49
  - name: Upload dependency scan results
50
- uses: actions/upload-artifact@v4
50
+ uses: actions/upload-artifact@v5
51
51
  if: always()
52
52
  with:
53
53
  name: security-scan-results
@@ -62,7 +62,7 @@ jobs:
62
62
 
63
63
  steps:
64
64
  - name: Checkout repository
65
- uses: actions/checkout@v4
65
+ uses: actions/checkout@v5
66
66
  with:
67
67
  fetch-depth: 0 # Fetch full history for comprehensive scanning
68
68
 
@@ -18,7 +18,7 @@ jobs:
18
18
  steps:
19
19
  # Grap the latest commit from the branch
20
20
  - name: Checkout the branch
21
- uses: actions/checkout@v4
21
+ uses: actions/checkout@v5
22
22
  with:
23
23
  persist-credentials: false
24
24
 
@@ -32,7 +32,7 @@ jobs:
32
32
 
33
33
  # Install uv
34
34
  - name: Install uv
35
- uses: astral-sh/setup-uv@v6
35
+ uses: astral-sh/setup-uv@v7
36
36
  with:
37
37
  version: "latest"
38
38
 
@@ -11,12 +11,12 @@ jobs:
11
11
  strategy:
12
12
  matrix:
13
13
  os: ["ubuntu-latest", "macos-latest"]
14
- python-version: ["3.10", "3.11", "3.12", "3.13"]
14
+ python-version: ["3.11", "3.12", "3.13"]
15
15
  fail-fast: true
16
16
  runs-on: ${{ matrix.os }}
17
17
  steps:
18
18
  - name: Check out the code
19
- uses: actions/checkout@v4
19
+ uses: actions/checkout@v5
20
20
  with:
21
21
  fetch-depth: 1
22
22
  - name: Set up Python ${{ matrix.python-version }}
@@ -26,7 +26,7 @@ jobs:
26
26
 
27
27
  # Install uv
28
28
  - name: Install uv
29
- uses: astral-sh/setup-uv@v6
29
+ uses: astral-sh/setup-uv@v7
30
30
  with:
31
31
  version: "latest"
32
32
 
@@ -42,7 +42,7 @@ jobs:
42
42
 
43
43
 
44
44
  - name: Upload code coverage
45
- uses: codecov/codecov-action@v4
45
+ uses: codecov/codecov-action@v5
46
46
  with:
47
47
  token: ${{ secrets.CODECOV_TOKEN }}
48
48
  file: ./coverage.xml
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: gpjax
3
- Version: 0.12.2
3
+ Version: 0.13.1
4
4
  Summary: Gaussian processes in JAX.
5
5
  Project-URL: Documentation, https://docs.jaxgaussianprocesses.com/
6
6
  Project-URL: Issues, https://github.com/JaxGaussianProcesses/GPJax/issues
@@ -11,15 +11,14 @@ License-File: LICENSE.txt
11
11
  Keywords: gaussian-processes jax machine-learning bayesian
12
12
  Classifier: Development Status :: 4 - Beta
13
13
  Classifier: Programming Language :: Python
14
- Classifier: Programming Language :: Python :: 3.10
15
14
  Classifier: Programming Language :: Python :: 3.11
16
15
  Classifier: Programming Language :: Python :: 3.12
17
16
  Classifier: Programming Language :: Python :: 3.13
18
17
  Classifier: Programming Language :: Python :: Implementation :: CPython
19
18
  Classifier: Programming Language :: Python :: Implementation :: PyPy
20
- Requires-Python: >=3.10
19
+ Requires-Python: >=3.11
21
20
  Requires-Dist: beartype>0.16.1
22
- Requires-Dist: flax>=0.10.0
21
+ Requires-Dist: flax>=0.12.0
23
22
  Requires-Dist: jax>=0.5.0
24
23
  Requires-Dist: jaxlib>=0.5.0
25
24
  Requires-Dist: jaxtyping>0.2.10
@@ -80,6 +79,7 @@ Description-Content-Type: text/markdown
80
79
  [![CodeFactor](https://www.codefactor.io/repository/github/jaxgaussianprocesses/gpjax/badge)](https://www.codefactor.io/repository/github/jaxgaussianprocesses/gpjax)
81
80
  [![Netlify Status](https://api.netlify.com/api/v1/badges/d3950e6f-321f-4508-9e52-426b5dae2715/deploy-status)](https://app.netlify.com/sites/endearing-crepe-c2d5fe/deploys)
82
81
  [![PyPI version](https://badge.fury.io/py/GPJax.svg)](https://badge.fury.io/py/GPJax)
82
+ [![Conda Version](https://img.shields.io/conda/vn/conda-forge/gpjax.svg)](https://anaconda.org/conda-forge/gpjax)
83
83
  [![DOI](https://joss.theoj.org/papers/10.21105/joss.04455/status.svg)](https://doi.org/10.21105/joss.04455)
84
84
  [![Downloads](https://pepy.tech/badge/gpjax)](https://pepy.tech/project/gpjax)
85
85
  [![Slack Invite](https://img.shields.io/badge/Slack_Invite--blue?style=social&logo=slack)](https://join.slack.com/t/gpjax/shared_invite/zt-3cesiykcx-nzajjRdnV3ohw7~~eMlCYA)
@@ -174,13 +174,21 @@ jupytext --to py:percent example.ipynb
174
174
 
175
175
  ## Stable version
176
176
 
177
- The latest stable version of GPJax can be installed via
178
- pip:
177
+ The latest stable version of GPJax can be installed from [PyPI](https://pypi.org/project/gpjax/):
179
178
 
180
179
  ```bash
181
180
  pip install gpjax
182
181
  ```
183
182
 
183
+ or from [conda-forge](https://github.com/conda-forge/gpjax-feedstock):
184
+
185
+ ```bash
186
+ # with Pixi
187
+ pixi add gpjax
188
+ # or with conda
189
+ conda install --channel conda-forge gpjax
190
+ ```
191
+
184
192
  > **Note**
185
193
  >
186
194
  > We recommend you check your installation version:
@@ -199,7 +207,7 @@ pip install gpjax
199
207
  >
200
208
  > We advise you create virtual environment before installing:
201
209
  > ```
202
- > conda create -n gpjax_experimental python=3.10.0
210
+ > conda create -n gpjax_experimental python=3.11.0
203
211
  > conda activate gpjax_experimental
204
212
  > ```
205
213
 
@@ -209,14 +217,14 @@ configuration in development mode.
209
217
  ```bash
210
218
  git clone https://github.com/JaxGaussianProcesses/GPJax.git
211
219
  cd GPJax
212
- hatch env create
213
- hatch shell
220
+ uv venv
221
+ uv sync --extra dev
214
222
  ```
215
223
 
216
224
  > We recommend you check your installation passes the supplied unit tests:
217
225
  >
218
226
  > ```python
219
- > hatch run dev:test
227
+ > uv run poe all-tests
220
228
  > ```
221
229
 
222
230
  # Citing GPJax
@@ -8,6 +8,7 @@
8
8
  [![CodeFactor](https://www.codefactor.io/repository/github/jaxgaussianprocesses/gpjax/badge)](https://www.codefactor.io/repository/github/jaxgaussianprocesses/gpjax)
9
9
  [![Netlify Status](https://api.netlify.com/api/v1/badges/d3950e6f-321f-4508-9e52-426b5dae2715/deploy-status)](https://app.netlify.com/sites/endearing-crepe-c2d5fe/deploys)
10
10
  [![PyPI version](https://badge.fury.io/py/GPJax.svg)](https://badge.fury.io/py/GPJax)
11
+ [![Conda Version](https://img.shields.io/conda/vn/conda-forge/gpjax.svg)](https://anaconda.org/conda-forge/gpjax)
11
12
  [![DOI](https://joss.theoj.org/papers/10.21105/joss.04455/status.svg)](https://doi.org/10.21105/joss.04455)
12
13
  [![Downloads](https://pepy.tech/badge/gpjax)](https://pepy.tech/project/gpjax)
13
14
  [![Slack Invite](https://img.shields.io/badge/Slack_Invite--blue?style=social&logo=slack)](https://join.slack.com/t/gpjax/shared_invite/zt-3cesiykcx-nzajjRdnV3ohw7~~eMlCYA)
@@ -102,13 +103,21 @@ jupytext --to py:percent example.ipynb
102
103
 
103
104
  ## Stable version
104
105
 
105
- The latest stable version of GPJax can be installed via
106
- pip:
106
+ The latest stable version of GPJax can be installed from [PyPI](https://pypi.org/project/gpjax/):
107
107
 
108
108
  ```bash
109
109
  pip install gpjax
110
110
  ```
111
111
 
112
+ or from [conda-forge](https://github.com/conda-forge/gpjax-feedstock):
113
+
114
+ ```bash
115
+ # with Pixi
116
+ pixi add gpjax
117
+ # or with conda
118
+ conda install --channel conda-forge gpjax
119
+ ```
120
+
112
121
  > **Note**
113
122
  >
114
123
  > We recommend you check your installation version:
@@ -127,7 +136,7 @@ pip install gpjax
127
136
  >
128
137
  > We advise you create virtual environment before installing:
129
138
  > ```
130
- > conda create -n gpjax_experimental python=3.10.0
139
+ > conda create -n gpjax_experimental python=3.11.0
131
140
  > conda activate gpjax_experimental
132
141
  > ```
133
142
 
@@ -137,14 +146,14 @@ configuration in development mode.
137
146
  ```bash
138
147
  git clone https://github.com/JaxGaussianProcesses/GPJax.git
139
148
  cd GPJax
140
- hatch env create
141
- hatch shell
149
+ uv venv
150
+ uv sync --extra dev
142
151
  ```
143
152
 
144
153
  > We recommend you check your installation passes the supplied unit tests:
145
154
  >
146
155
  > ```python
147
- > hatch run dev:test
156
+ > uv run poe all-tests
148
157
  > ```
149
158
 
150
159
  # Citing GPJax