linkcell 0.3.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 (64) hide show
  1. linkcell-0.3.2/.github/workflows/ci.yml +163 -0
  2. linkcell-0.3.2/.github/workflows/wheels.yml +134 -0
  3. linkcell-0.3.2/.gitignore +335 -0
  4. linkcell-0.3.2/CHANGELOG.md +108 -0
  5. linkcell-0.3.2/CITATION.cff +17 -0
  6. linkcell-0.3.2/CMakeLists.txt +197 -0
  7. linkcell-0.3.2/Cargo.lock +299 -0
  8. linkcell-0.3.2/Cargo.toml +37 -0
  9. linkcell-0.3.2/LICENSE +19 -0
  10. linkcell-0.3.2/PKG-INFO +211 -0
  11. linkcell-0.3.2/README.md +189 -0
  12. linkcell-0.3.2/assets/branding/README.md +28 -0
  13. linkcell-0.3.2/assets/branding/linkcell-icon.svg +27 -0
  14. linkcell-0.3.2/assets/branding/linkcell-logo-dark.svg +21 -0
  15. linkcell-0.3.2/assets/branding/linkcell-logo-light.svg +21 -0
  16. linkcell-0.3.2/assets/branding/linkcell-mark.jpg +0 -0
  17. linkcell-0.3.2/cbindgen.toml +155 -0
  18. linkcell-0.3.2/cmake/linkcell.pc.in +12 -0
  19. linkcell-0.3.2/cmake/linkcellConfig.cmake.in +23 -0
  20. linkcell-0.3.2/docs/explanation/mic-and-cells.md +51 -0
  21. linkcell-0.3.2/docs/how-to/embed-c.md +75 -0
  22. linkcell-0.3.2/docs/how-to/embed-cpp.md +71 -0
  23. linkcell-0.3.2/docs/how-to/embed-python.md +44 -0
  24. linkcell-0.3.2/docs/how-to/pkg-config.md +39 -0
  25. linkcell-0.3.2/docs/index.md +25 -0
  26. linkcell-0.3.2/docs/reference/algorithm.md +88 -0
  27. linkcell-0.3.2/docs/reference/c-api.md +125 -0
  28. linkcell-0.3.2/docs/tutorials/two-points.md +83 -0
  29. linkcell-0.3.2/examples/knn_hot.rs +43 -0
  30. linkcell-0.3.2/examples/meson.build +33 -0
  31. linkcell-0.3.2/examples/two_points.c +55 -0
  32. linkcell-0.3.2/examples/two_points.cpp +45 -0
  33. linkcell-0.3.2/include/linkcell.h +230 -0
  34. linkcell-0.3.2/include/linkcell.hpp +244 -0
  35. linkcell-0.3.2/include/linkcell_gpu.h +62 -0
  36. linkcell-0.3.2/include/linkcell_gpu.hpp +89 -0
  37. linkcell-0.3.2/linkcell/__init__.py +11 -0
  38. linkcell-0.3.2/meson.build +185 -0
  39. linkcell-0.3.2/meson_options.txt +8 -0
  40. linkcell-0.3.2/pyproject.toml +42 -0
  41. linkcell-0.3.2/python/Cargo.toml +25 -0
  42. linkcell-0.3.2/python/build.rs +35 -0
  43. linkcell-0.3.2/python/src/gpu.rs +374 -0
  44. linkcell-0.3.2/python/src/lib.rs +427 -0
  45. linkcell-0.3.2/scripts/check-install.sh +191 -0
  46. linkcell-0.3.2/scripts/regen-capi-headers.sh +52 -0
  47. linkcell-0.3.2/src/capi.rs +259 -0
  48. linkcell-0.3.2/src/cell.rs +422 -0
  49. linkcell-0.3.2/src/error.rs +38 -0
  50. linkcell-0.3.2/src/gpu/capi.cpp +284 -0
  51. linkcell-0.3.2/src/gpu/knearest.cpp +1032 -0
  52. linkcell-0.3.2/src/knearest.rs +541 -0
  53. linkcell-0.3.2/src/lib.rs +120 -0
  54. linkcell-0.3.2/subprojects/gpulite.wrap +8 -0
  55. linkcell-0.3.2/subprojects/packagefiles/gpulite/meson.build +9 -0
  56. linkcell-0.3.2/tests/abi.rs +367 -0
  57. linkcell-0.3.2/tests/agree.rs +558 -0
  58. linkcell-0.3.2/tests/cmake-consumer/CMakeLists.txt +12 -0
  59. linkcell-0.3.2/tests/gpu_agree.cpp +104 -0
  60. linkcell-0.3.2/tests/python/test_knearest.py +70 -0
  61. linkcell-0.3.2/tests/python/test_knearest_cuda.py +73 -0
  62. linkcell-0.3.2/third_party/gpulite/LICENSE +21 -0
  63. linkcell-0.3.2/third_party/gpulite/README.md +6 -0
  64. linkcell-0.3.2/third_party/gpulite/gpulite/gpulite.hpp +1369 -0
@@ -0,0 +1,163 @@
1
+ name: ci
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ tags: ['v*']
7
+ pull_request:
8
+
9
+ # windows-latest omitted: meson/cmake wrap cargo via custom_target that
10
+ # copies cargo-target/release/<lib> with POSIX path joins, and the
11
+ # cdylib + cbindgen install layout is unix-shaped.
12
+
13
+ jobs:
14
+ fmt:
15
+ runs-on: ubuntu-latest
16
+ steps:
17
+ - uses: actions/checkout@v4
18
+ - uses: dtolnay/rust-toolchain@stable
19
+ with:
20
+ components: rustfmt
21
+ - run: cargo fmt --check
22
+
23
+ header-check:
24
+ runs-on: ubuntu-latest
25
+ steps:
26
+ - uses: actions/checkout@v4
27
+ - uses: dtolnay/rust-toolchain@stable
28
+ # Pin matches the version comment cbindgen writes into include/linkcell.h.
29
+ - run: cargo install cbindgen --version 0.29.4
30
+ - run: scripts/regen-capi-headers.sh --check
31
+
32
+ python:
33
+ runs-on: ubuntu-latest
34
+ steps:
35
+ - uses: actions/checkout@v4
36
+ - uses: dtolnay/rust-toolchain@stable
37
+ - uses: actions/setup-python@v5
38
+ with:
39
+ python-version: '3.12'
40
+ - uses: actions/cache@v4
41
+ with:
42
+ path: |
43
+ ~/.cargo/registry
44
+ ~/.cargo/git
45
+ key: ${{ runner.os }}-py-${{ hashFiles('Cargo.lock', 'python/Cargo.toml') }}
46
+ restore-keys: |
47
+ ${{ runner.os }}-py-
48
+ - name: Install Python test deps
49
+ run: |
50
+ python -m venv .venv
51
+ . .venv/bin/activate
52
+ python -m pip install --upgrade pip
53
+ pip install maturin pytest numpy
54
+ pip install torch --index-url https://download.pytorch.org/whl/cpu
55
+ - name: maturin develop
56
+ run: |
57
+ . .venv/bin/activate
58
+ maturin develop
59
+ - name: pytest
60
+ run: |
61
+ . .venv/bin/activate
62
+ pytest tests/python -q
63
+
64
+ cargo:
65
+ strategy:
66
+ fail-fast: false
67
+ matrix:
68
+ os: [ubuntu-latest, macos-latest]
69
+ crate:
70
+ - name: default
71
+ flags: ""
72
+ - name: serial
73
+ flags: --no-default-features --features capi
74
+ name: cargo (${{ matrix.os }}, ${{ matrix.crate.name }})
75
+ runs-on: ${{ matrix.os }}
76
+ steps:
77
+ - uses: actions/checkout@v4
78
+ - uses: dtolnay/rust-toolchain@stable
79
+ with:
80
+ components: clippy
81
+ - uses: actions/cache@v4
82
+ with:
83
+ path: |
84
+ ~/.cargo/registry
85
+ ~/.cargo/git
86
+ key: ${{ runner.os }}-cargo-${{ hashFiles('Cargo.lock') }}
87
+ restore-keys: |
88
+ ${{ runner.os }}-cargo-
89
+ - run: cargo test --locked ${{ matrix.crate.flags }}
90
+ - run: cargo clippy --locked --all-targets ${{ matrix.crate.flags }} -- -D warnings
91
+
92
+ meson:
93
+ runs-on: ubuntu-latest
94
+ steps:
95
+ - uses: actions/checkout@v4
96
+ - uses: dtolnay/rust-toolchain@stable
97
+ - uses: actions/cache@v4
98
+ with:
99
+ path: |
100
+ ~/.cargo/registry
101
+ ~/.cargo/git
102
+ key: ${{ runner.os }}-cargo-${{ hashFiles('Cargo.lock') }}
103
+ restore-keys: |
104
+ ${{ runner.os }}-cargo-
105
+ - uses: actions/setup-python@v5
106
+ with:
107
+ python-version: '3.12'
108
+ - run: pip install meson ninja
109
+ - run: meson setup build
110
+ - run: meson compile -C build
111
+ - run: meson test -C build --print-errorlogs
112
+ - run: meson install -C build --destdir "$PWD/destdir"
113
+ - name: pkg-config after meson install
114
+ run: |
115
+ prefix="$PWD/destdir/usr/local"
116
+ export PKG_CONFIG_PATH="$prefix/lib/x86_64-linux-gnu/pkgconfig:$prefix/lib/pkgconfig"
117
+ pkg-config --exists --print-errors linkcell
118
+ pkg-config --modversion linkcell
119
+ pkg-config --cflags --libs linkcell
120
+ test -f "$prefix/include/linkcell.h"
121
+ test -f "$prefix/include/linkcell.hpp"
122
+ test -f "$prefix/include/linkcell_gpu.h"
123
+ test -f "$prefix/include/linkcell_gpu.hpp"
124
+ test -f "$prefix/lib/x86_64-linux-gnu/liblinkcell.a" \
125
+ -o -f "$prefix/lib/liblinkcell.a"
126
+ test -f "$prefix/lib/x86_64-linux-gnu/liblinkcell.so" \
127
+ -o -f "$prefix/lib/liblinkcell.so" \
128
+ -o -f "$prefix/lib/liblinkcell.dylib"
129
+
130
+ cmake:
131
+ runs-on: ubuntu-latest
132
+ steps:
133
+ - uses: actions/checkout@v4
134
+ - uses: dtolnay/rust-toolchain@stable
135
+ - uses: actions/cache@v4
136
+ with:
137
+ path: |
138
+ ~/.cargo/registry
139
+ ~/.cargo/git
140
+ key: ${{ runner.os }}-cargo-${{ hashFiles('Cargo.lock') }}
141
+ restore-keys: |
142
+ ${{ runner.os }}-cargo-
143
+ - run: cmake -S . -B build -DCMAKE_INSTALL_PREFIX="$PWD/prefix"
144
+ - run: cmake --build build
145
+ - run: ctest --test-dir build --output-on-failure
146
+ - run: cmake --install build
147
+ - name: find_package and pkg-config after cmake install
148
+ run: |
149
+ test -f prefix/include/linkcell.h
150
+ test -f prefix/lib/liblinkcell.a
151
+ test -f prefix/lib/liblinkcell.so -o -f prefix/lib/liblinkcell.dylib
152
+ test -f prefix/lib/pkgconfig/linkcell.pc
153
+ test -f prefix/lib/cmake/linkcell/linkcellConfig.cmake
154
+ export PKG_CONFIG_PATH="$PWD/prefix/lib/pkgconfig"
155
+ pkg-config --exists --print-errors linkcell
156
+ pkg-config --modversion linkcell
157
+ cmake -S tests/cmake-consumer -B find-build \
158
+ -DCMAKE_PREFIX_PATH="$PWD/prefix" \
159
+ -DLINKCELL_EXAMPLE="$PWD/examples/two_points.cpp"
160
+ cmake --build find-build
161
+ export LD_LIBRARY_PATH="$PWD/prefix/lib${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}"
162
+ export DYLD_LIBRARY_PATH="$PWD/prefix/lib${DYLD_LIBRARY_PATH:+:$DYLD_LIBRARY_PATH}"
163
+ ./find-build/find_lc
@@ -0,0 +1,134 @@
1
+ name: wheels
2
+
3
+ on:
4
+ push:
5
+ tags: ["v*"]
6
+ pull_request:
7
+ paths:
8
+ - "python/**"
9
+ - "linkcell/**"
10
+ - "pyproject.toml"
11
+ - "Cargo.toml"
12
+ - "Cargo.lock"
13
+ - "src/**"
14
+ - "third_party/**"
15
+ - "include/**"
16
+ - ".github/workflows/wheels.yml"
17
+
18
+ concurrency:
19
+ group: wheels-${{ github.ref }}
20
+ cancel-in-progress: ${{ github.ref != 'refs/heads/main' }}
21
+
22
+ jobs:
23
+ # One abi3 wheel per platform (CPython 3.12+ GIL).
24
+ abi3:
25
+ name: abi3 ${{ matrix.name }}
26
+ runs-on: ${{ matrix.os }}
27
+ strategy:
28
+ fail-fast: false
29
+ matrix:
30
+ include:
31
+ - name: linux-x86_64
32
+ os: ubuntu-latest
33
+ arch: x86_64
34
+ - name: linux-aarch64
35
+ os: ubuntu-24.04-arm
36
+ arch: aarch64
37
+ - name: macos-arm64
38
+ os: macos-latest
39
+ arch: arm64
40
+ steps:
41
+ - uses: actions/checkout@v4
42
+ - uses: dtolnay/rust-toolchain@stable
43
+ - uses: astral-sh/setup-uv@v5
44
+ with:
45
+ python-version: "3.12"
46
+ - name: Build abi3 wheel
47
+ run: uvx --from 'cibuildwheel>=3.2,<4' cibuildwheel --output-dir wheelhouse
48
+ env:
49
+ CIBW_BUILD: "cp312-*"
50
+ CIBW_SKIP: "*musllinux* *i686* cp3??t-*"
51
+ CIBW_ARCHS: ${{ matrix.arch }}
52
+ CIBW_ENVIRONMENT: MATURIN_PEP517_ARGS="--features abi3"
53
+ CIBW_TEST_REQUIRES: pytest numpy
54
+ CIBW_TEST_COMMAND: pytest {project}/tests/python -q
55
+ - uses: actions/upload-artifact@v4
56
+ with:
57
+ name: wheels-abi3-${{ matrix.name }}
58
+ path: ./wheelhouse/*.whl
59
+
60
+ # Free-threaded set: one wheel per CPython t ABI (no limited API).
61
+ freethreaded:
62
+ name: freethreaded ${{ matrix.name }}
63
+ runs-on: ${{ matrix.os }}
64
+ strategy:
65
+ fail-fast: false
66
+ matrix:
67
+ include:
68
+ - name: linux-x86_64
69
+ os: ubuntu-latest
70
+ arch: x86_64
71
+ - name: linux-aarch64
72
+ os: ubuntu-24.04-arm
73
+ arch: aarch64
74
+ - name: macos-arm64
75
+ os: macos-latest
76
+ arch: arm64
77
+ steps:
78
+ - uses: actions/checkout@v4
79
+ - uses: dtolnay/rust-toolchain@stable
80
+ - uses: astral-sh/setup-uv@v5
81
+ with:
82
+ python-version: "3.13"
83
+ - name: Build free-threaded wheels
84
+ run: uvx --from 'cibuildwheel>=3.2,<4' cibuildwheel --output-dir wheelhouse
85
+ env:
86
+ CIBW_BUILD: "cp314t-*"
87
+ CIBW_SKIP: "*musllinux* *i686*"
88
+ CIBW_ARCHS: ${{ matrix.arch }}
89
+ CIBW_TEST_REQUIRES: pytest numpy
90
+ CIBW_TEST_COMMAND: pytest {project}/tests/python -q
91
+ - uses: actions/upload-artifact@v4
92
+ with:
93
+ name: wheels-freethreaded-${{ matrix.name }}
94
+ path: ./wheelhouse/*.whl
95
+
96
+ sdist:
97
+ name: Source distribution
98
+ runs-on: ubuntu-latest
99
+ steps:
100
+ - uses: actions/checkout@v4
101
+ - uses: dtolnay/rust-toolchain@stable
102
+ - uses: astral-sh/setup-uv@v5
103
+ with:
104
+ python-version: "3.12"
105
+ - name: Build sdist
106
+ run: uvx maturin sdist --out dist
107
+ - uses: actions/upload-artifact@v4
108
+ with:
109
+ name: sdist
110
+ path: dist/*.tar.gz
111
+
112
+ # Trusted publisher: PyPI project linkcell, repo d-SEAMS/linkcell,
113
+ # workflow wheels.yml, environment (Any). Do not set `environment:`
114
+ # on this job.
115
+ publish:
116
+ name: Publish to PyPI
117
+ needs: [abi3, freethreaded, sdist]
118
+ runs-on: ubuntu-latest
119
+ if: >-
120
+ github.repository == 'd-SEAMS/linkcell' &&
121
+ github.event_name == 'push' &&
122
+ startsWith(github.ref, 'refs/tags/v')
123
+ permissions:
124
+ id-token: write
125
+ contents: read
126
+ steps:
127
+ - uses: actions/download-artifact@v4
128
+ with:
129
+ path: dist
130
+ merge-multiple: true
131
+ - name: Publish to PyPI
132
+ uses: pypa/gh-action-pypi-publish@ed0c53931b1dc9bd32cbe73a98c7f6766f8a527e
133
+ with:
134
+ packages-dir: dist/
@@ -0,0 +1,335 @@
1
+ ### Generated by gibo (https://github.com/simonwhitaker/gibo)
2
+ ### https://raw.github.com/github/gitignore/dcc0fc7bc2b5ba480cf117ad1be31bafceeaff46/Rust.gitignore
3
+
4
+ # Generated by Cargo
5
+ # will have compiled files and executables
6
+ debug
7
+ target
8
+
9
+ # These are backup files generated by rustfmt
10
+ **/*.rs.bk
11
+
12
+ # MSVC Windows builds of rustc generate these, which store debugging information
13
+ *.pdb
14
+
15
+ # Generated by cargo mutants
16
+ # Contains mutation testing data
17
+ **/mutants.out*/
18
+
19
+ # rustc will dump stack traces when hitting an internal compiler error to PWD
20
+ rustc-ice-*.txt
21
+
22
+ # RustRover
23
+ # JetBrains specific template is maintained in a separate JetBrains.gitignore that can
24
+ # be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
25
+ # and can be added to the global gitignore or merged into this file. For a more nuclear
26
+ # option (not recommended) you can uncomment the following to ignore the entire idea folder.
27
+ #.idea/
28
+ ### Generated by gibo (https://github.com/simonwhitaker/gibo)
29
+ ### https://raw.github.com/github/gitignore/dcc0fc7bc2b5ba480cf117ad1be31bafceeaff46/C++.gitignore
30
+
31
+ # Prerequisites
32
+ *.d
33
+
34
+ # Compiled Object files
35
+ *.slo
36
+ *.lo
37
+ *.o
38
+ *.obj
39
+
40
+ # Precompiled Headers
41
+ *.gch
42
+ *.pch
43
+
44
+ # Linker files
45
+ *.ilk
46
+
47
+ # Debugger Files
48
+ *.pdb
49
+
50
+ # Compiled Dynamic libraries
51
+ *.so
52
+ *.dylib
53
+ *.dll
54
+ *.so.*
55
+
56
+ # Fortran module files
57
+ *.mod
58
+ *.smod
59
+
60
+ # Compiled Static libraries
61
+ *.lai
62
+ *.la
63
+ *.a
64
+ *.lib
65
+
66
+ # Executables
67
+ *.exe
68
+ *.out
69
+ *.app
70
+
71
+ # Build directories
72
+ build/
73
+ Build/
74
+ build-*/
75
+
76
+ # CMake generated files
77
+ CMakeFiles/
78
+ CMakeCache.txt
79
+ cmake_install.cmake
80
+ Makefile
81
+ install_manifest.txt
82
+ compile_commands.json
83
+
84
+ # Temporary files
85
+ *.tmp
86
+ *.log
87
+ *.bak
88
+ *.swp
89
+
90
+ # vcpkg
91
+ vcpkg_installed/
92
+
93
+ # debug information files
94
+ *.dwo
95
+
96
+ # test output & cache
97
+ Testing/
98
+ .cache/
99
+
100
+ /subprojects/*
101
+ !/subprojects/*.wrap
102
+ !/subprojects/packagefiles/
103
+
104
+ /target/
105
+ /build/
106
+ /build-meson/
107
+ /build-cmake/
108
+ /destdir-meson/
109
+ /prefix-cmake/
110
+ /.pixi/
111
+ *.a
112
+ *.so
113
+ ### Generated by gibo (https://github.com/simonwhitaker/gibo)
114
+ ### https://raw.github.com/github/gitignore/dcc0fc7bc2b5ba480cf117ad1be31bafceeaff46/Python.gitignore
115
+
116
+ # Byte-compiled / optimized / DLL files
117
+ __pycache__/
118
+ *.py[codz]
119
+ *$py.class
120
+
121
+ # C extensions
122
+ *.so
123
+
124
+ # Distribution / packaging
125
+ .Python
126
+ build/
127
+ develop-eggs/
128
+ dist/
129
+ downloads/
130
+ eggs/
131
+ .eggs/
132
+ lib/
133
+ lib64/
134
+ parts/
135
+ sdist/
136
+ var/
137
+ wheels/
138
+ share/python-wheels/
139
+ *.egg-info/
140
+ .installed.cfg
141
+ *.egg
142
+ MANIFEST
143
+
144
+ # PyInstaller
145
+ # Usually these files are written by a python script from a template
146
+ # before PyInstaller builds the exe, so as to inject date/other infos into it.
147
+ *.manifest
148
+ *.spec
149
+
150
+ # Installer logs
151
+ pip-log.txt
152
+ pip-delete-this-directory.txt
153
+
154
+ # Unit test / coverage reports
155
+ htmlcov/
156
+ .tox/
157
+ .nox/
158
+ .coverage
159
+ .coverage.*
160
+ .cache
161
+ nosetests.xml
162
+ coverage.xml
163
+ *.cover
164
+ *.py.cover
165
+ *.lcov
166
+ .hypothesis/
167
+ .pytest_cache/
168
+ cover/
169
+
170
+ # Translations
171
+ *.mo
172
+ *.pot
173
+
174
+ # Django stuff:
175
+ *.log
176
+ local_settings.py
177
+ db.sqlite3
178
+ db.sqlite3-journal
179
+
180
+ # Flask stuff:
181
+ instance/
182
+ .webassets-cache
183
+
184
+ # Scrapy stuff:
185
+ .scrapy
186
+
187
+ # Sphinx documentation
188
+ docs/_build/
189
+
190
+ # PyBuilder
191
+ .pybuilder/
192
+ target/
193
+
194
+ # Jupyter Notebook
195
+ .ipynb_checkpoints
196
+
197
+ # IPython
198
+ profile_default/
199
+ ipython_config.py
200
+
201
+ # pyenv
202
+ # For a library or package, you might want to ignore these files since the code is
203
+ # intended to run in multiple environments; otherwise, check them in:
204
+ # .python-version
205
+
206
+ # pipenv
207
+ # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
208
+ # However, in case of collaboration, if having platform-specific dependencies or dependencies
209
+ # having no cross-platform support, pipenv may install dependencies that don't work, or not
210
+ # install all needed dependencies.
211
+ # Pipfile.lock
212
+
213
+ # UV
214
+ # Similar to Pipfile.lock, it is generally recommended to include uv.lock in version control.
215
+ # This is especially recommended for binary packages to ensure reproducibility, and is more
216
+ # commonly ignored for libraries.
217
+ # uv.lock
218
+
219
+ # poetry
220
+ # Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
221
+ # This is especially recommended for binary packages to ensure reproducibility, and is more
222
+ # commonly ignored for libraries.
223
+ # https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
224
+ # poetry.lock
225
+ # poetry.toml
226
+
227
+ # pdm
228
+ # Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
229
+ # pdm recommends including project-wide configuration in pdm.toml, but excluding .pdm-python.
230
+ # https://pdm-project.org/en/latest/usage/project/#working-with-version-control
231
+ # pdm.lock
232
+ # pdm.toml
233
+ .pdm-python
234
+ .pdm-build/
235
+
236
+ # pixi
237
+ # Similar to Pipfile.lock, it is generally recommended to include pixi.lock in version control.
238
+ # pixi.lock
239
+ # Pixi creates a virtual environment in the .pixi directory, just like venv module creates one
240
+ # in the .venv directory. It is recommended not to include this directory in version control.
241
+ .pixi/*
242
+ !.pixi/config.toml
243
+
244
+ # PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
245
+ __pypackages__/
246
+
247
+ # Celery stuff
248
+ celerybeat-schedule*
249
+ celerybeat.pid
250
+
251
+ # Redis
252
+ *.rdb
253
+ *.aof
254
+ *.pid
255
+
256
+ # RabbitMQ
257
+ mnesia/
258
+ rabbitmq/
259
+ rabbitmq-data/
260
+
261
+ # ActiveMQ
262
+ activemq-data/
263
+
264
+ # SageMath parsed files
265
+ *.sage.py
266
+
267
+ # Environments
268
+ .env
269
+ .envrc
270
+ .venv
271
+ env/
272
+ venv/
273
+ ENV/
274
+ env.bak/
275
+ venv.bak/
276
+
277
+ # Spyder project settings
278
+ .spyderproject
279
+ .spyproject
280
+
281
+ # Rope project settings
282
+ .ropeproject
283
+
284
+ # mkdocs documentation
285
+ /site
286
+
287
+ # mypy
288
+ .mypy_cache/
289
+ .dmypy.json
290
+ dmypy.json
291
+
292
+ # Pyre type checker
293
+ .pyre/
294
+
295
+ # pytype static type analyzer
296
+ .pytype/
297
+
298
+ # Cython debug symbols
299
+ cython_debug/
300
+
301
+ # PyCharm
302
+ # JetBrains specific template is maintained in a separate JetBrains.gitignore that can
303
+ # be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
304
+ # and can be added to the global gitignore or merged into this file. For a more nuclear
305
+ # option (not recommended) you can uncomment the following to ignore the entire idea folder.
306
+ # .idea/
307
+
308
+ # Abstra
309
+ # Abstra is an AI-powered process automation framework.
310
+ # Ignore directories containing user credentials, local state, and settings.
311
+ # Learn more at https://abstra.io/docs
312
+ .abstra/
313
+
314
+ # Visual Studio Code
315
+ # Visual Studio Code specific template is maintained in a separate VisualStudioCode.gitignore
316
+ # that can be found at https://github.com/github/gitignore/blob/main/Global/VisualStudioCode.gitignore
317
+ # and can be added to the global gitignore or merged into this file. However, if you prefer,
318
+ # you could uncomment the following to ignore the entire vscode folder
319
+ # .vscode/
320
+ # Temporary file for partial code execution
321
+ tempCodeRunnerFile.py
322
+
323
+ # Ruff stuff:
324
+ .ruff_cache/
325
+
326
+ # PyPI configuration file
327
+ .pypirc
328
+
329
+ # Marimo
330
+ marimo/_static/
331
+ marimo/_lsp/
332
+ __marimo__/
333
+
334
+ # Streamlit
335
+ .streamlit/secrets.toml