binned-cdf 0.2.3__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 (43) hide show
  1. binned_cdf-0.2.3/.github/ISSUE_TEMPLATE/bug.yml +61 -0
  2. binned_cdf-0.2.3/.github/ISSUE_TEMPLATE/config.yml +1 -0
  3. binned_cdf-0.2.3/.github/ISSUE_TEMPLATE/generic.yml +46 -0
  4. binned_cdf-0.2.3/.github/actions/configure-git/action.yaml +10 -0
  5. binned_cdf-0.2.3/.github/actions/lint-test/action.yaml +14 -0
  6. binned_cdf-0.2.3/.github/actions/publish-docs/action.yaml +32 -0
  7. binned_cdf-0.2.3/.github/codeowners +1 -0
  8. binned_cdf-0.2.3/.github/dependabot.yml +6 -0
  9. binned_cdf-0.2.3/.github/labeler.yml +27 -0
  10. binned_cdf-0.2.3/.github/labels.yml +47 -0
  11. binned_cdf-0.2.3/.github/pull_request_template.md +8 -0
  12. binned_cdf-0.2.3/.github/workflows/cd.yaml +104 -0
  13. binned_cdf-0.2.3/.github/workflows/check-issue.yaml +69 -0
  14. binned_cdf-0.2.3/.github/workflows/check-pr.yaml +44 -0
  15. binned_cdf-0.2.3/.github/workflows/ci.yaml +80 -0
  16. binned_cdf-0.2.3/.github/workflows/remove-temporary-docs.yaml +36 -0
  17. binned_cdf-0.2.3/.github/workflows/sync-labels.yaml +28 -0
  18. binned_cdf-0.2.3/.gitignore +43 -0
  19. binned_cdf-0.2.3/.pre-commit-config.yaml +37 -0
  20. binned_cdf-0.2.3/.python-version +1 -0
  21. binned_cdf-0.2.3/PKG-INFO +96 -0
  22. binned_cdf-0.2.3/binned_cdf/__init__.py +3 -0
  23. binned_cdf-0.2.3/binned_cdf/binned_logit_cdf.py +397 -0
  24. binned_cdf-0.2.3/docs/.gitignore +1 -0
  25. binned_cdf-0.2.3/docs/changelog.md +3 -0
  26. binned_cdf-0.2.3/docs/development/getting_started.md +132 -0
  27. binned_cdf-0.2.3/docs/development/installation.md +81 -0
  28. binned_cdf-0.2.3/docs/glossary.md +9 -0
  29. binned_cdf-0.2.3/docs/index.md +3 -0
  30. binned_cdf-0.2.3/docs/installation.md +22 -0
  31. binned_cdf-0.2.3/docs/js/mathjax.js +16 -0
  32. binned_cdf-0.2.3/docs/js/tablesort.js +6 -0
  33. binned_cdf-0.2.3/docs/licenses.md +18 -0
  34. binned_cdf-0.2.3/docs/macros.py +119 -0
  35. binned_cdf-0.2.3/docs/reference.md +4 -0
  36. binned_cdf-0.2.3/docs/stylesheets/extra.css +32 -0
  37. binned_cdf-0.2.3/examples/2D_density_estmation.py +112 -0
  38. binned_cdf-0.2.3/license.md +3 -0
  39. binned_cdf-0.2.3/mkdocs.yml +136 -0
  40. binned_cdf-0.2.3/pyproject.toml +164 -0
  41. binned_cdf-0.2.3/readme.md +74 -0
  42. binned_cdf-0.2.3/tests/conftest.py +10 -0
  43. binned_cdf-0.2.3/tests/test_binned_logit_cdf.py +757 -0
@@ -0,0 +1,61 @@
1
+ description: Submit a bug report.
2
+ labels: ["type: bug"]
3
+ name: Bug Report
4
+
5
+ body:
6
+ - attributes:
7
+ value: |
8
+ ## Bug Report
9
+
10
+ Thank zou for taking the time to prepare and submit this bug report!
11
+ type: markdown
12
+
13
+ - attributes:
14
+ label: Basics
15
+ description: Please check all boxes below.
16
+ options:
17
+ - label: I could not find any existing issues for my bug
18
+ required: true
19
+ - label: >
20
+ I have selected at least one `area:` label
21
+ required: true
22
+ type: checkboxes
23
+
24
+ - attributes:
25
+ label: Command?
26
+ description: What's the command you tried to run? It will be automatically rendered as code.
27
+ render: shell
28
+ type: textarea
29
+ validations:
30
+ required: true
31
+
32
+ - attributes:
33
+ label: Expected Behavior?
34
+ description: What's the expected behavior of that command?
35
+ type: textarea
36
+ validations:
37
+ required: true
38
+
39
+ - attributes:
40
+ label: Actual Behavior?
41
+ description: What's the actual behavior of that command?
42
+ type: textarea
43
+ validations:
44
+ required: true
45
+
46
+ - attributes:
47
+ label: Logs?
48
+ description: Paste the logs here. Those will be automatically rendered as code.
49
+ render: shell
50
+ id: logs
51
+ type: textarea
52
+ validations:
53
+ required: true
54
+
55
+ - attributes:
56
+ label: Additional Information?
57
+ description: Is there any additional information that did not fit the points above?
58
+ placeholder: |
59
+ - Related issues or PRs
60
+ - Screenshots
61
+ type: textarea
@@ -0,0 +1 @@
1
+ blank_issues_enabled: false
@@ -0,0 +1,46 @@
1
+ description: Submit a generic issue.
2
+ name: Generic Issue
3
+
4
+ body:
5
+ - attributes:
6
+ value: |
7
+ ## Issue
8
+
9
+ Thank you for taking the time to prepare and submit this issue!
10
+ type: markdown
11
+
12
+ - attributes:
13
+ label: Basics
14
+ description: Please check all boxes below.
15
+ options:
16
+ - label: I could not find any existing issues for what I'm reporting
17
+ required: true
18
+ - label: >
19
+ I have selected at least one `area:` label
20
+ required: true
21
+ - label: >
22
+ I have selected at least one `type:` label
23
+ required: true
24
+ type: checkboxes
25
+
26
+ - attributes:
27
+ label: Description?
28
+ description: Provide a high-level description of your issue.
29
+ type: textarea
30
+ validations:
31
+ required: true
32
+
33
+ - attributes:
34
+ label: Solution?
35
+ description: Describe on a high-level how you would solve this issue.
36
+ type: textarea
37
+ validations:
38
+ required: true
39
+
40
+ - attributes:
41
+ label: Additional Information?
42
+ description: Is there any additional information that did not fit the points above?
43
+ placeholder: |
44
+ - Related issues or PRs
45
+ - Screenshots
46
+ type: textarea
@@ -0,0 +1,10 @@
1
+ name: "Configure Git"
2
+ description: "Configure Git user name and email for GitHub Actions."
3
+ runs:
4
+ using: "composite"
5
+ steps:
6
+ - name: Configure Git
7
+ run: |
8
+ git config user.name "github-actions[bot]"
9
+ git config user.email "github-actions[bot]@users.noreply.github.com"
10
+ shell: bash
@@ -0,0 +1,14 @@
1
+ name: "Lint and Test"
2
+ description: "Run the pre-commit checks and pytest."
3
+ runs:
4
+ using: "composite"
5
+ steps:
6
+ - name: Install & run pre-commit hooks
7
+ env:
8
+ SKIP: no-commit-to-branch
9
+ run: uv run --only-dev pre-commit run --all-files --show-diff-on-failure --verbose
10
+ shell: sh
11
+
12
+ - name: Run tests
13
+ run: uv run --dev pytest -m "not visual and not needs_cuda" --cov
14
+ shell: sh
@@ -0,0 +1,32 @@
1
+ name: "Publish Docs"
2
+ description: "Build and publish the documentation."
3
+ inputs:
4
+ version:
5
+ description: "docs version"
6
+ required: true
7
+ default: ""
8
+ alias:
9
+ description: "version alias"
10
+ required: true
11
+ default: "latest"
12
+ runs:
13
+ using: "composite"
14
+ steps:
15
+ - name: Determine version
16
+ run: |
17
+ if [ "${{ inputs.version }}" != "" ]; then
18
+ VERSION=${{ inputs.version }}
19
+ else
20
+ VERSION=$(uv run --no-dev python -c "from importlib.metadata import version; print(version('binned-cdf'))")
21
+ fi
22
+ echo "DOCS_VERSION=$(echo ${VERSION} | cut --delimiter="." --fields=1,2)" >> $GITHUB_ENV
23
+ shell: bash
24
+
25
+ - name: Configure Git
26
+ uses: ./.github/actions/configure-git
27
+
28
+ - name: Build & publish docs
29
+ run: |
30
+ git fetch origin gh-pages:gh-pages
31
+ uv run --only-dev mike deploy --push --update-aliases ${{ env.DOCS_VERSION }} ${{ inputs.alias }}
32
+ shell: sh
@@ -0,0 +1 @@
1
+ * @famura
@@ -0,0 +1,6 @@
1
+ version: 2
2
+ updates:
3
+ - package-ecosystem: "github-actions"
4
+ directory: "/"
5
+ schedule:
6
+ interval: "weekly"
@@ -0,0 +1,27 @@
1
+ "area: docs":
2
+ - changed-files:
3
+ - any-glob-to-any-file:
4
+ - docs/**
5
+ - mkdocs.yml
6
+ - readme.md
7
+
8
+ "area: project":
9
+ - changed-files:
10
+ - any-glob-to-any-file:
11
+ - .github/**
12
+ - .pre-commit-config.yaml
13
+ - .python-version
14
+ - .vscode/**
15
+ - license.md
16
+ - pyproject.toml
17
+ - uv.lock
18
+
19
+ "area: source":
20
+ - changed-files:
21
+ - any-glob-to-any-file:
22
+ - "binned_cdf/**"
23
+
24
+ "area: cli":
25
+ - changed-files:
26
+ - any-glob-to-any-file:
27
+ - binned_cdf/cli/**
@@ -0,0 +1,47 @@
1
+ - name: "area: cli"
2
+ color: "#c4ff4d"
3
+ description: "Command line interface (CLI)"
4
+ - name: "area: docs"
5
+ color: "#88ff4d"
6
+ description: "Documentation"
7
+ - name: "area: examples"
8
+ color: "#1a3d5c"
9
+ description: "Example code and notebooks"
10
+ - name: "area: repo"
11
+ color: "#4dff4d"
12
+ description: "Tooling or the repository"
13
+ - name: "area: source"
14
+ color: "#a64dff"
15
+ description: "Core source code"
16
+
17
+ - name: "priority: critical"
18
+ color: "#ff4d4d"
19
+ description: "Issue needs immediate attention"
20
+ - name: "priority: medium"
21
+ color: "#ff884d"
22
+ description: "Issue should be addressed soon"
23
+ - name: "priority: low"
24
+ color: "#ffc34d"
25
+ description: "Issue can be addressed later"
26
+
27
+ - name: "type: bug"
28
+ color: "#ff4dc4"
29
+ description: "Something isn't working"
30
+ - name: "type: discussion"
31
+ color: "#ff4dff"
32
+ description: "General discussion or question"
33
+ - name: "type: documentation"
34
+ color: "#c44dff"
35
+ description: "Improvements or additions to documentation"
36
+ - name: "type: feature"
37
+ color: "#884dff"
38
+ description: "New feature or feature request"
39
+ - name: "type: fix"
40
+ color: "#00ff00"
41
+ description: "Something is being fixed"
42
+ - name: "type: misc"
43
+ color: "#4d4dff"
44
+ description: "Everything else"
45
+ - name: "type: refactor"
46
+ color: "#4d88ff"
47
+ description: "Refactoring code without functional changes"
@@ -0,0 +1,8 @@
1
+ <!-- Mention any issues here which the PR aims to resolve, e.g. `Closes #123` -->
2
+ :white_check_mark: Closes #
3
+
4
+ <!-- Add a short and precise description of what changes this PR introduces -->
5
+ ## :wrench: Changes
6
+
7
+ - A
8
+ - B
@@ -0,0 +1,104 @@
1
+ name: Continuous Deployment
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ workflow_dispatch:
7
+ inputs:
8
+ bumped-version-part:
9
+ description: "The version part to bump."
10
+ type: choice
11
+ options:
12
+ - major
13
+ - minor
14
+ - patch
15
+ default: patch
16
+ required: true
17
+
18
+ concurrency:
19
+ group: ${{ github.workflow }}/${{ github.head_ref || github.ref }}
20
+ cancel-in-progress: true
21
+
22
+ jobs:
23
+ bump-version:
24
+ name: Bump Version
25
+ runs-on: ubuntu-latest
26
+ container: docker:git
27
+ permissions:
28
+ contents: write
29
+ timeout-minutes: 10
30
+ steps:
31
+ - name: Install prerequisites
32
+ run: apk add nodejs
33
+
34
+ - name: Check out repository
35
+ uses: actions/checkout@v6
36
+
37
+ - name: Bump version and push tag
38
+ id: version
39
+ uses: mathieudutour/github-tag-action@v6.2
40
+ with:
41
+ default_bump: ${{ github.event.inputs.bumped-version-part || 'patch' }}
42
+ github_token: ${{ secrets.GITHUB_TOKEN }}
43
+
44
+ - name: Add version info
45
+ run: echo "Bumped ${VERSION_PART} version part from ${OLD_TAG} to ${NEW_TAG}." >> $GITHUB_STEP_SUMMARY
46
+ env:
47
+ VERSION_PART: ${{ steps.version.outputs.release_type }}
48
+ OLD_TAG: ${{ steps.version.outputs.previous_tag }}
49
+ NEW_TAG: ${{ steps.version.outputs.new_tag }}
50
+
51
+ ci:
52
+ name: CI
53
+ needs: bump-version
54
+ uses: ./.github/workflows/ci.yaml
55
+ secrets: inherit
56
+ permissions:
57
+ contents: write
58
+ pull-requests: write
59
+
60
+ deploy:
61
+ name: Deploy Docs
62
+ needs: ci
63
+ if: github.repository == 'famura/binned-cdf'
64
+ runs-on: ubuntu-latest
65
+ timeout-minutes: 30
66
+ permissions:
67
+ contents: write
68
+ steps:
69
+ - name: Check out repository
70
+ uses: actions/checkout@v6
71
+ with:
72
+ fetch-depth: 0
73
+
74
+ - name: Set up uv
75
+ uses: astral-sh/setup-uv@v7
76
+
77
+ - name: Lint & test
78
+ uses: ./.github/actions/lint-test
79
+
80
+ - name: Build & publish docs
81
+ uses: ./.github/actions/publish-docs
82
+
83
+ publish-pypi:
84
+ name: Publish to PyPI
85
+ needs: deploy
86
+ runs-on: ubuntu-latest
87
+ environment: release
88
+ timeout-minutes: 15
89
+ permissions:
90
+ id-token: write
91
+ steps:
92
+ - name: Check out repository
93
+ uses: actions/checkout@v6
94
+ with:
95
+ fetch-depth: 0 # it is necessary for versioningit to get full git history
96
+
97
+ - name: Set up uv
98
+ uses: astral-sh/setup-uv@v7
99
+
100
+ - name: Build package
101
+ run: uv build
102
+
103
+ - name: Publish to PyPI
104
+ uses: pypa/gh-action-pypi-publish@release/v1
@@ -0,0 +1,69 @@
1
+ name: Check issue
2
+
3
+ on:
4
+ issues:
5
+ types: [labeled, opened, unlabeled]
6
+
7
+ concurrency:
8
+ group: ${{ github.job }}/${{ github.workflow }}/${{ github.head_ref || github.ref }}
9
+ cancel-in-progress: true
10
+
11
+ jobs:
12
+ labels:
13
+ name: Labels
14
+ container: ubuntu:latest
15
+ runs-on: ubuntu-latest
16
+ env:
17
+ comment_header: |
18
+ ## :card_index_dividers: Missing Labels
19
+
20
+ We categorize issues using specific label groups to help us prioritize and assign them.
21
+ steps:
22
+ - name: Check if required label prefixes are missing
23
+ id: check-labels
24
+ uses: actions/github-script@v8
25
+ with:
26
+ script: |
27
+ const requiredPrefixes = ['area:', 'type:'];
28
+ const names = (context.payload.issue && context.payload.issue.labels)
29
+ ? context.payload.issue.labels.map(label => label.name)
30
+ : [];
31
+ const missingPrefixes = requiredPrefixes.filter(prefix => !names.some(name => name.startsWith(prefix)));
32
+ core.setOutput('missing-prefixes', missingPrefixes)
33
+ core.setOutput('missing-prefixes-md', missingPrefixes.map(prefix => `- \`${prefix}\``).join('\n'))
34
+
35
+ - name: Find comment
36
+ id: find-comment
37
+ uses: peter-evans/find-comment@v4
38
+ with:
39
+ body-includes: "${{ env.comment_header }}"
40
+ comment-author: "github-actions[bot]"
41
+ issue-number: ${{ github.event.issue.number }}
42
+
43
+ - name: Create or update comment
44
+ uses: peter-evans/create-or-update-comment@v5
45
+ if: ${{ steps.check-labels.outputs.missing-prefixes != '[]' }}
46
+ with:
47
+ comment-id: ${{ steps.find-comment.outputs.comment-id }}
48
+ issue-number: ${{ github.event.issue.number }}
49
+ body: |
50
+ ${{ env.comment_header }}
51
+
52
+ Please add label(s) with the required prefix(es):
53
+
54
+ ${{ steps.check-labels.outputs.missing-prefixes-md }}
55
+ edit-mode: replace
56
+ reactions-edit-mode: replace
57
+
58
+ - name: Resolve comment
59
+ uses: peter-evans/create-or-update-comment@v5
60
+ if: ${{ steps.check-labels.outputs.missing-prefixes == '[]' && steps.find-comment.outputs.comment-id != 0 }}
61
+ with:
62
+ comment-id: ${{ steps.find-comment.outputs.comment-id }}
63
+ issue-number: ${{ github.event.issue.number }}
64
+ body: |
65
+
66
+ ---
67
+
68
+ :white_check_mark: All set! Thanks for updating the labels.
69
+ reactions: rocket
@@ -0,0 +1,44 @@
1
+ name: Check PR
2
+
3
+ on:
4
+ pull_request:
5
+ types: [edited, opened, ready_for_review, reopened, synchronize]
6
+
7
+ concurrency:
8
+ group: ${{ github.job }}/${{ github.workflow }}/${{ github.head_ref || github.ref }}
9
+ cancel-in-progress: true
10
+
11
+ permissions:
12
+ contents: read
13
+ pull-requests: write
14
+
15
+ jobs:
16
+ labels:
17
+ name: Labels
18
+ runs-on: ubuntu-latest
19
+ container: ubuntu:latest
20
+ steps:
21
+ - name: Label areas
22
+ uses: actions/labeler@v6
23
+ with:
24
+ repo-token: ${{ secrets.GITHUB_TOKEN }}
25
+
26
+ - name: Label size
27
+ uses: BedrockStreaming/pr-size-labeler@v2.0.0
28
+ with:
29
+ token: ${{ secrets.GITHUB_TOKEN }}
30
+ xs_diff: 20
31
+ xs_files: 2
32
+ xs_label: "size: xs"
33
+ s_diff: 100
34
+ s_files: 5
35
+ s_label: "size: s"
36
+ m_diff: 250
37
+ m_files: 10
38
+ m_label: "size: m"
39
+ l_diff: 500
40
+ l_files: 20
41
+ l_label: "size: l"
42
+ xl_diff: 750
43
+ xl_files: 30
44
+ xl_label: "size: xl"
@@ -0,0 +1,80 @@
1
+ name: Continuous Integration
2
+
3
+ on:
4
+ pull_request:
5
+ types: [opened, ready_for_review, reopened, synchronize]
6
+ workflow_call:
7
+ workflow_dispatch:
8
+
9
+ concurrency:
10
+ group: ${{ github.job }}/${{ github.workflow }}/${{ github.head_ref || github.ref }}
11
+ cancel-in-progress: true
12
+
13
+ jobs:
14
+ ci-default-python-version:
15
+ name: Default Python Version
16
+ runs-on: ubuntu-latest
17
+ permissions:
18
+ contents: write
19
+ pull-requests: write
20
+ timeout-minutes: 120
21
+
22
+ steps:
23
+ - name: Check out repository
24
+ uses: actions/checkout@v6
25
+
26
+ - name: Set up uv
27
+ uses: astral-sh/setup-uv@v7
28
+
29
+ - name: Lint & test
30
+ uses: ./.github/actions/lint-test
31
+
32
+ - name: Add coverage comment
33
+ if: github.event_name == 'pull_request'
34
+ uses: MishaKav/pytest-coverage-comment@v1
35
+ with:
36
+ coverage-path-prefix: "binned_cdf/"
37
+ junitxml-path: pytest.xml
38
+ pytest-xml-coverage-path: coverage.xml
39
+
40
+ - name: Build & deploy temporary docs
41
+ if: github.event_name == 'pull_request' && github.event.pull_request.draft == false
42
+ uses: ./.github/actions/publish-docs
43
+ with:
44
+ alias: pr-${{ github.event.number }}
45
+ version: next-pr-${{ github.event.number }}
46
+
47
+ - name: Add docs comment
48
+ if: github.event_name == 'pull_request' && github.event.pull_request.draft == false
49
+ uses: marocchino/sticky-pull-request-comment@v2.9.4
50
+ with:
51
+ header: docs-comment
52
+ message: |
53
+ :books: Created [temporary docs](https://famura.github.io/binned-cdf/pr-${{ github.event.number }}).
54
+
55
+ Useful URLs:
56
+
57
+ - [Coverage](https://famura.github.io/binned-cdf/pr-${{ github.event.number }}/exported/coverage)
58
+ - [Tests](https://famura.github.io/binned-cdf/pr-${{ github.event.number }}/exported/tests)
59
+
60
+ ci-other-python-versions:
61
+ if: github.event.pull_request.draft == false
62
+ name: Other Python Versions
63
+ runs-on: ubuntu-latest
64
+ strategy:
65
+ matrix:
66
+ python-version: [3.13]
67
+ timeout-minutes: 120
68
+
69
+ steps:
70
+ - name: Check out repository
71
+ uses: actions/checkout@v6
72
+
73
+ - name: Set up uv
74
+ uses: astral-sh/setup-uv@v7
75
+
76
+ - name: Set Python version to ${{ matrix.python-version }}
77
+ run: uv python pin ${{ matrix.python-version }}
78
+
79
+ - name: Lint & test
80
+ uses: ./.github/actions/lint-test
@@ -0,0 +1,36 @@
1
+ name: Remove Temporary Docs
2
+
3
+ on:
4
+ pull_request:
5
+ types: [closed]
6
+
7
+ jobs:
8
+ remove-temporary-docs:
9
+ name: Remove Temporary Docs
10
+ runs-on: ubuntu-latest
11
+ permissions:
12
+ contents: write
13
+ pull-requests: write
14
+ timeout-minutes: 30
15
+
16
+ steps:
17
+ - name: Check out repository
18
+ uses: actions/checkout@v6
19
+
20
+ - name: Set up uv
21
+ uses: astral-sh/setup-uv@v7
22
+
23
+ - name: Configure Git
24
+ uses: ./.github/actions/configure-git
25
+
26
+ - name: Remove temporary docs
27
+ run: |
28
+ VERSION=next-pr-${{ github.event.number }}
29
+ git fetch origin gh-pages:gh-pages
30
+ uv run --only-dev mike delete --push ${VERSION}
31
+
32
+ - name: Remove docs comment
33
+ uses: marocchino/sticky-pull-request-comment@v2.9.4
34
+ with:
35
+ delete: true
36
+ header: docs-comment
@@ -0,0 +1,28 @@
1
+ name: Sync Labels
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - main
7
+ paths:
8
+ - .github/labels.yml
9
+ workflow_dispatch:
10
+
11
+ permissions:
12
+ issues: write
13
+ contents: read
14
+
15
+ jobs:
16
+ sync:
17
+ name: Sync labels
18
+ runs-on: ubuntu-latest
19
+ steps:
20
+ - name: Check out repository
21
+ uses: actions/checkout@v6
22
+ with:
23
+ sparse-checkout: .github/labels.yml
24
+
25
+ - uses: EndBug/label-sync@v2
26
+ with:
27
+ config-file: .github/labels.yml
28
+ delete-other-labels: true
@@ -0,0 +1,43 @@
1
+ # byte-compiled / optimized / DLL files
2
+ __pycache__/
3
+ *.py[cod]
4
+ *$py.class
5
+
6
+ # distribution / packaging
7
+ .Python
8
+ env/
9
+ build/
10
+ develop-eggs/
11
+ dist/
12
+ eggs/
13
+ .eggs/
14
+ sdist/
15
+ *.egg-info/
16
+ *.egg
17
+
18
+ # pytest / coverage reports
19
+ .coverage
20
+ coverage.xml
21
+ pytest.xml
22
+ tests/results/
23
+
24
+ # environment
25
+ /.venv/
26
+
27
+ # PyCharm
28
+ .idea/
29
+
30
+ # vscode
31
+ /.vscode/
32
+
33
+ # mkdocs
34
+ /.site/
35
+
36
+ # macOS
37
+ .DS_store
38
+
39
+ # uv
40
+ uv.lock
41
+
42
+ # results from examples
43
+ examples/*.png