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.
- gpjax-0.12.2/.github/commitlint.config.js +70 -0
- gpjax-0.12.2/.github/dependabot.yml +71 -0
- gpjax-0.12.2/.github/labeler.yml +221 -0
- {gpjax-0.11.2 → gpjax-0.12.2}/.github/labels.yml +5 -2
- {gpjax-0.11.2 → gpjax-0.12.2}/.github/pull_request_template.md +1 -1
- gpjax-0.12.2/.github/workflows/auto-label.yml +206 -0
- {gpjax-0.11.2 → gpjax-0.12.2}/.github/workflows/build_docs.yml +13 -9
- gpjax-0.12.2/.github/workflows/commit-lint.yml +54 -0
- {gpjax-0.11.2 → gpjax-0.12.2}/.github/workflows/integration.yml +11 -7
- {gpjax-0.11.2 → gpjax-0.12.2}/.github/workflows/pr_greeting.yml +1 -1
- gpjax-0.12.2/.github/workflows/release.yml +305 -0
- {gpjax-0.11.2 → gpjax-0.12.2}/.github/workflows/ruff.yml +1 -1
- gpjax-0.12.2/.github/workflows/security-analysis.yml +73 -0
- {gpjax-0.11.2 → gpjax-0.12.2}/.github/workflows/test_docs.yml +14 -13
- {gpjax-0.11.2 → gpjax-0.12.2}/.github/workflows/tests.yml +14 -11
- {gpjax-0.11.2 → gpjax-0.12.2}/PKG-INFO +50 -18
- {gpjax-0.11.2 → gpjax-0.12.2}/README.md +6 -15
- {gpjax-0.11.2 → gpjax-0.12.2}/docs/contributing.md +4 -4
- {gpjax-0.11.2 → gpjax-0.12.2}/docs/installation.md +2 -2
- {gpjax-0.11.2 → gpjax-0.12.2}/docs/scripts/gen_examples.py +40 -10
- {gpjax-0.11.2 → gpjax-0.12.2}/examples/backend.py +18 -3
- {gpjax-0.11.2 → gpjax-0.12.2}/examples/barycentres.py +3 -1
- {gpjax-0.11.2 → gpjax-0.12.2}/examples/classification.py +13 -11
- {gpjax-0.11.2 → gpjax-0.12.2}/examples/collapsed_vi.py +5 -2
- {gpjax-0.11.2 → gpjax-0.12.2}/examples/constructing_new_kernels.py +8 -7
- {gpjax-0.11.2 → gpjax-0.12.2}/examples/deep_kernels.py +9 -1
- {gpjax-0.11.2 → gpjax-0.12.2}/examples/graph_kernels.py +3 -1
- {gpjax-0.11.2 → gpjax-0.12.2}/examples/intro_to_gps.py +1 -1
- {gpjax-0.11.2 → gpjax-0.12.2}/examples/intro_to_kernels.py +8 -3
- {gpjax-0.11.2 → gpjax-0.12.2}/examples/likelihoods_guide.py +1 -1
- {gpjax-0.11.2 → gpjax-0.12.2}/examples/oceanmodelling.py +3 -1
- {gpjax-0.11.2 → gpjax-0.12.2}/examples/poisson.py +16 -9
- {gpjax-0.11.2 → gpjax-0.12.2}/examples/regression.py +3 -3
- {gpjax-0.11.2 → gpjax-0.12.2}/examples/uncollapsed_vi.py +4 -2
- {gpjax-0.11.2 → gpjax-0.12.2}/examples/yacht.py +3 -2
- {gpjax-0.11.2 → gpjax-0.12.2}/gpjax/__init__.py +1 -4
- {gpjax-0.11.2 → gpjax-0.12.2}/gpjax/distributions.py +16 -56
- {gpjax-0.11.2 → gpjax-0.12.2}/gpjax/fit.py +11 -6
- {gpjax-0.11.2 → gpjax-0.12.2}/gpjax/gps.py +61 -73
- {gpjax-0.11.2 → gpjax-0.12.2}/gpjax/kernels/approximations/rff.py +2 -5
- {gpjax-0.11.2 → gpjax-0.12.2}/gpjax/kernels/base.py +2 -5
- {gpjax-0.11.2 → gpjax-0.12.2}/gpjax/kernels/computations/base.py +7 -7
- {gpjax-0.11.2 → gpjax-0.12.2}/gpjax/kernels/computations/basis_functions.py +7 -6
- {gpjax-0.11.2 → gpjax-0.12.2}/gpjax/kernels/computations/constant_diagonal.py +10 -12
- {gpjax-0.11.2 → gpjax-0.12.2}/gpjax/kernels/computations/diagonal.py +6 -6
- {gpjax-0.11.2 → gpjax-0.12.2}/gpjax/kernels/computations/eigen.py +1 -1
- {gpjax-0.11.2 → gpjax-0.12.2}/gpjax/kernels/non_euclidean/graph.py +10 -11
- {gpjax-0.11.2 → gpjax-0.12.2}/gpjax/kernels/nonstationary/arccosine.py +13 -21
- {gpjax-0.11.2 → gpjax-0.12.2}/gpjax/kernels/nonstationary/polynomial.py +7 -8
- {gpjax-0.11.2 → gpjax-0.12.2}/gpjax/kernels/stationary/periodic.py +3 -6
- {gpjax-0.11.2 → gpjax-0.12.2}/gpjax/kernels/stationary/powered_exponential.py +3 -8
- {gpjax-0.11.2 → gpjax-0.12.2}/gpjax/kernels/stationary/rational_quadratic.py +5 -8
- {gpjax-0.11.2 → gpjax-0.12.2}/gpjax/likelihoods.py +11 -14
- gpjax-0.12.2/gpjax/linalg/__init__.py +37 -0
- gpjax-0.12.2/gpjax/linalg/operations.py +237 -0
- gpjax-0.12.2/gpjax/linalg/operators.py +411 -0
- gpjax-0.12.2/gpjax/linalg/utils.py +65 -0
- {gpjax-0.11.2 → gpjax-0.12.2}/gpjax/mean_functions.py +8 -7
- {gpjax-0.11.2 → gpjax-0.12.2}/gpjax/objectives.py +22 -21
- {gpjax-0.11.2 → gpjax-0.12.2}/gpjax/parameters.py +11 -23
- {gpjax-0.11.2 → gpjax-0.12.2}/gpjax/variational_families.py +93 -67
- {gpjax-0.11.2 → gpjax-0.12.2}/pyproject.toml +94 -38
- {gpjax-0.11.2 → gpjax-0.12.2}/static/CONTRIBUTING.md +4 -4
- {gpjax-0.11.2 → gpjax-0.12.2}/tests/test_fit.py +193 -12
- {gpjax-0.11.2 → gpjax-0.12.2}/tests/test_gaussian_distribution.py +9 -10
- {gpjax-0.11.2 → gpjax-0.12.2}/tests/test_gps.py +7 -15
- gpjax-0.12.2/tests/test_imports.py +25 -0
- {gpjax-0.11.2 → gpjax-0.12.2}/tests/test_kernels/test_approximations.py +3 -3
- {gpjax-0.11.2 → gpjax-0.12.2}/tests/test_kernels/test_computation.py +8 -8
- {gpjax-0.11.2 → gpjax-0.12.2}/tests/test_kernels/test_non_euclidean.py +4 -4
- {gpjax-0.11.2 → gpjax-0.12.2}/tests/test_kernels/test_nonstationary.py +5 -4
- {gpjax-0.11.2 → gpjax-0.12.2}/tests/test_kernels/test_stationary.py +5 -4
- gpjax-0.12.2/tests/test_linalg.py +558 -0
- {gpjax-0.11.2 → gpjax-0.12.2}/tests/test_mean_functions.py +84 -8
- {gpjax-0.11.2 → gpjax-0.12.2}/tests/test_parameters.py +2 -4
- gpjax-0.12.2/uv.lock +3946 -0
- gpjax-0.11.2/.github/workflows/stale_prs.yml +0 -45
- gpjax-0.11.2/gpjax/lower_cholesky.py +0 -69
- gpjax-0.11.2/tests/test_lower_cholesky.py +0 -110
- gpjax-0.11.2/uv.lock +0 -832
- {gpjax-0.11.2 → gpjax-0.12.2}/.github/CODE_OF_CONDUCT.md +0 -0
- {gpjax-0.11.2 → gpjax-0.12.2}/.github/ISSUE_TEMPLATE/01_BUG_REPORT.md +0 -0
- {gpjax-0.11.2 → gpjax-0.12.2}/.github/ISSUE_TEMPLATE/02_FEATURE_REQUEST.md +0 -0
- {gpjax-0.11.2 → gpjax-0.12.2}/.github/ISSUE_TEMPLATE/03_CODEBASE_IMPROVEMENT.md +0 -0
- {gpjax-0.11.2 → gpjax-0.12.2}/.github/ISSUE_TEMPLATE/04_DOCS_IMPROVEMENT.md +0 -0
- {gpjax-0.11.2 → gpjax-0.12.2}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {gpjax-0.11.2 → gpjax-0.12.2}/.github/codecov.yml +0 -0
- {gpjax-0.11.2 → gpjax-0.12.2}/.github/release-drafter.yml +0 -0
- {gpjax-0.11.2 → gpjax-0.12.2}/.gitignore +0 -0
- {gpjax-0.11.2 → gpjax-0.12.2}/CITATION.bib +0 -0
- {gpjax-0.11.2 → gpjax-0.12.2}/LICENSE.txt +0 -0
- {gpjax-0.11.2 → gpjax-0.12.2}/Makefile +0 -0
- {gpjax-0.11.2 → gpjax-0.12.2}/docs/CODE_OF_CONDUCT.md +0 -0
- {gpjax-0.11.2 → gpjax-0.12.2}/docs/GOVERNANCE.md +0 -0
- {gpjax-0.11.2 → gpjax-0.12.2}/docs/design.md +0 -0
- {gpjax-0.11.2 → gpjax-0.12.2}/docs/index.md +0 -0
- {gpjax-0.11.2 → gpjax-0.12.2}/docs/index.rst +0 -0
- {gpjax-0.11.2 → gpjax-0.12.2}/docs/javascripts/katex.js +0 -0
- {gpjax-0.11.2 → gpjax-0.12.2}/docs/refs.bib +0 -0
- {gpjax-0.11.2 → gpjax-0.12.2}/docs/scripts/gen_pages.py +0 -0
- {gpjax-0.11.2 → gpjax-0.12.2}/docs/scripts/notebook_converter.py +0 -0
- {gpjax-0.11.2 → gpjax-0.12.2}/docs/scripts/sharp_bits_figure.py +0 -0
- {gpjax-0.11.2 → gpjax-0.12.2}/docs/sharp_bits.md +0 -0
- {gpjax-0.11.2 → gpjax-0.12.2}/docs/static/GP.pdf +0 -0
- {gpjax-0.11.2 → gpjax-0.12.2}/docs/static/GP.svg +0 -0
- {gpjax-0.11.2 → gpjax-0.12.2}/docs/static/bijector_figure.svg +0 -0
- {gpjax-0.11.2 → gpjax-0.12.2}/docs/static/css/gpjax_theme.css +0 -0
- {gpjax-0.11.2 → gpjax-0.12.2}/docs/static/favicon.ico +0 -0
- {gpjax-0.11.2 → gpjax-0.12.2}/docs/static/gpjax.mplstyle +0 -0
- {gpjax-0.11.2 → gpjax-0.12.2}/docs/static/gpjax_logo.pdf +0 -0
- {gpjax-0.11.2 → gpjax-0.12.2}/docs/static/gpjax_logo.svg +0 -0
- {gpjax-0.11.2 → gpjax-0.12.2}/docs/static/jaxkern/lato.ttf +0 -0
- {gpjax-0.11.2 → gpjax-0.12.2}/docs/static/jaxkern/logo.png +0 -0
- {gpjax-0.11.2 → gpjax-0.12.2}/docs/static/jaxkern/logo.svg +0 -0
- {gpjax-0.11.2 → gpjax-0.12.2}/docs/static/jaxkern/main.py +0 -0
- {gpjax-0.11.2 → gpjax-0.12.2}/docs/static/step_size_figure.png +0 -0
- {gpjax-0.11.2 → gpjax-0.12.2}/docs/static/step_size_figure.svg +0 -0
- {gpjax-0.11.2 → gpjax-0.12.2}/docs/stylesheets/extra.css +0 -0
- {gpjax-0.11.2 → gpjax-0.12.2}/docs/stylesheets/permalinks.css +0 -0
- {gpjax-0.11.2 → gpjax-0.12.2}/examples/barycentres/barycentre_gp.gif +0 -0
- {gpjax-0.11.2 → gpjax-0.12.2}/examples/data/max_tempeature_switzerland.csv +0 -0
- {gpjax-0.11.2 → gpjax-0.12.2}/examples/data/yacht_hydrodynamics.data +0 -0
- {gpjax-0.11.2 → gpjax-0.12.2}/examples/gpjax.mplstyle +0 -0
- {gpjax-0.11.2 → gpjax-0.12.2}/examples/intro_to_gps/decomposed_mll.png +0 -0
- {gpjax-0.11.2 → gpjax-0.12.2}/examples/intro_to_gps/generating_process.png +0 -0
- {gpjax-0.11.2 → gpjax-0.12.2}/examples/utils.py +0 -0
- {gpjax-0.11.2 → gpjax-0.12.2}/gpjax/citation.py +0 -0
- {gpjax-0.11.2 → gpjax-0.12.2}/gpjax/dataset.py +0 -0
- {gpjax-0.11.2 → gpjax-0.12.2}/gpjax/integrators.py +0 -0
- {gpjax-0.11.2 → gpjax-0.12.2}/gpjax/kernels/__init__.py +0 -0
- {gpjax-0.11.2 → gpjax-0.12.2}/gpjax/kernels/approximations/__init__.py +0 -0
- {gpjax-0.11.2 → gpjax-0.12.2}/gpjax/kernels/computations/__init__.py +0 -0
- {gpjax-0.11.2 → gpjax-0.12.2}/gpjax/kernels/computations/dense.py +0 -0
- {gpjax-0.11.2 → gpjax-0.12.2}/gpjax/kernels/non_euclidean/__init__.py +0 -0
- {gpjax-0.11.2 → gpjax-0.12.2}/gpjax/kernels/non_euclidean/utils.py +0 -0
- {gpjax-0.11.2 → gpjax-0.12.2}/gpjax/kernels/nonstationary/__init__.py +0 -0
- {gpjax-0.11.2 → gpjax-0.12.2}/gpjax/kernels/nonstationary/linear.py +0 -0
- {gpjax-0.11.2 → gpjax-0.12.2}/gpjax/kernels/stationary/__init__.py +0 -0
- {gpjax-0.11.2 → gpjax-0.12.2}/gpjax/kernels/stationary/base.py +0 -0
- {gpjax-0.11.2 → gpjax-0.12.2}/gpjax/kernels/stationary/matern12.py +0 -0
- {gpjax-0.11.2 → gpjax-0.12.2}/gpjax/kernels/stationary/matern32.py +0 -0
- {gpjax-0.11.2 → gpjax-0.12.2}/gpjax/kernels/stationary/matern52.py +0 -0
- {gpjax-0.11.2 → gpjax-0.12.2}/gpjax/kernels/stationary/rbf.py +0 -0
- {gpjax-0.11.2 → gpjax-0.12.2}/gpjax/kernels/stationary/utils.py +0 -0
- {gpjax-0.11.2 → gpjax-0.12.2}/gpjax/kernels/stationary/white.py +0 -0
- {gpjax-0.11.2 → gpjax-0.12.2}/gpjax/numpyro_extras.py +0 -0
- {gpjax-0.11.2 → gpjax-0.12.2}/gpjax/scan.py +0 -0
- {gpjax-0.11.2 → gpjax-0.12.2}/gpjax/typing.py +0 -0
- {gpjax-0.11.2 → gpjax-0.12.2}/mkdocs.yml +0 -0
- {gpjax-0.11.2 → gpjax-0.12.2}/static/paper.bib +0 -0
- {gpjax-0.11.2 → gpjax-0.12.2}/static/paper.md +0 -0
- {gpjax-0.11.2 → gpjax-0.12.2}/static/paper.pdf +0 -0
- {gpjax-0.11.2 → gpjax-0.12.2}/tests/__init__.py +0 -0
- {gpjax-0.11.2 → gpjax-0.12.2}/tests/conftest.py +0 -0
- {gpjax-0.11.2 → gpjax-0.12.2}/tests/integration_tests.py +0 -0
- {gpjax-0.11.2 → gpjax-0.12.2}/tests/test_citations.py +0 -0
- {gpjax-0.11.2 → gpjax-0.12.2}/tests/test_dataset.py +0 -0
- {gpjax-0.11.2 → gpjax-0.12.2}/tests/test_integrators.py +0 -0
- {gpjax-0.11.2 → gpjax-0.12.2}/tests/test_kernels/__init__.py +0 -0
- {gpjax-0.11.2 → gpjax-0.12.2}/tests/test_kernels/test_base.py +0 -0
- {gpjax-0.11.2 → gpjax-0.12.2}/tests/test_kernels/test_utils.py +0 -0
- {gpjax-0.11.2 → gpjax-0.12.2}/tests/test_likelihoods.py +0 -0
- {gpjax-0.11.2 → gpjax-0.12.2}/tests/test_markdown.py +0 -0
- {gpjax-0.11.2 → gpjax-0.12.2}/tests/test_numpyro_extras.py +0 -0
- {gpjax-0.11.2 → gpjax-0.12.2}/tests/test_objectives.py +0 -0
- {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:
|
|
32
|
-
description: Pull requests that update
|
|
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 `
|
|
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.
|
|
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@
|
|
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@
|
|
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@
|
|
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
|
|
51
|
-
- name: Install
|
|
52
|
-
uses:
|
|
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
|
-
|
|
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.
|
|
64
|
+
uses: JamesIves/github-pages-deploy-action@v4.7.3
|
|
61
65
|
with:
|
|
62
66
|
branch: gh-pages
|
|
63
67
|
folder: site
|