fastquadtree 2.4.0__tar.gz → 2.4.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 (116) hide show
  1. {fastquadtree-2.4.0 → fastquadtree-2.4.2}/.github/workflows/docs.yml +3 -3
  2. {fastquadtree-2.4.0 → fastquadtree-2.4.2}/.github/workflows/release.yml +69 -12
  3. {fastquadtree-2.4.0 → fastquadtree-2.4.2}/.github/workflows/test.yml +4 -4
  4. {fastquadtree-2.4.0 → fastquadtree-2.4.2}/.gitignore +5 -1
  5. {fastquadtree-2.4.0 → fastquadtree-2.4.2}/Cargo.lock +1 -1
  6. {fastquadtree-2.4.0 → fastquadtree-2.4.2}/Cargo.toml +1 -1
  7. {fastquadtree-2.4.0 → fastquadtree-2.4.2}/PKG-INFO +1 -1
  8. fastquadtree-2.4.2/scripts/build_pyodide_wheel.sh +77 -0
  9. {fastquadtree-2.4.0 → fastquadtree-2.4.2}/.pre-commit-config.yaml +0 -0
  10. {fastquadtree-2.4.0 → fastquadtree-2.4.2}/LICENSE +0 -0
  11. {fastquadtree-2.4.0 → fastquadtree-2.4.2}/README.md +0 -0
  12. {fastquadtree-2.4.0 → fastquadtree-2.4.2}/assets/ballpit.png +0 -0
  13. {fastquadtree-2.4.0 → fastquadtree-2.4.2}/assets/interactive_v2_rect_screenshot.png +0 -0
  14. {fastquadtree-2.4.0 → fastquadtree-2.4.2}/assets/interactive_v2_screenshot.png +0 -0
  15. {fastquadtree-2.4.0 → fastquadtree-2.4.2}/assets/pygame_sprites_demo.png +0 -0
  16. {fastquadtree-2.4.0 → fastquadtree-2.4.2}/assets/quadtree_bench_throughput.png +0 -0
  17. {fastquadtree-2.4.0 → fastquadtree-2.4.2}/assets/quadtree_bench_time.png +0 -0
  18. {fastquadtree-2.4.0 → fastquadtree-2.4.2}/benchmarks/benchmark_native_vs_shim.py +0 -0
  19. {fastquadtree-2.4.0 → fastquadtree-2.4.2}/benchmarks/benchmark_np_vs_list.py +0 -0
  20. {fastquadtree-2.4.0 → fastquadtree-2.4.2}/benchmarks/benchmark_serialization_vs_rebuild.py +0 -0
  21. {fastquadtree-2.4.0 → fastquadtree-2.4.2}/benchmarks/cross_library_bench.py +0 -0
  22. {fastquadtree-2.4.0 → fastquadtree-2.4.2}/benchmarks/quadtree_bench/__init__.py +0 -0
  23. {fastquadtree-2.4.0 → fastquadtree-2.4.2}/benchmarks/quadtree_bench/engines.py +0 -0
  24. {fastquadtree-2.4.0 → fastquadtree-2.4.2}/benchmarks/quadtree_bench/main.py +0 -0
  25. {fastquadtree-2.4.0 → fastquadtree-2.4.2}/benchmarks/quadtree_bench/optimizer.py +0 -0
  26. {fastquadtree-2.4.0 → fastquadtree-2.4.2}/benchmarks/quadtree_bench/plotting.py +0 -0
  27. {fastquadtree-2.4.0 → fastquadtree-2.4.2}/benchmarks/quadtree_bench/runner.py +0 -0
  28. {fastquadtree-2.4.0 → fastquadtree-2.4.2}/benchmarks/runner.py +0 -0
  29. {fastquadtree-2.4.0 → fastquadtree-2.4.2}/benchmarks/system_info_collector.py +0 -0
  30. {fastquadtree-2.4.0 → fastquadtree-2.4.2}/docs/2.0_migration_guide.md +0 -0
  31. {fastquadtree-2.4.0 → fastquadtree-2.4.2}/docs/2.0_proposal.md +0 -0
  32. {fastquadtree-2.4.0 → fastquadtree-2.4.2}/docs/api/insert_result.md +0 -0
  33. {fastquadtree-2.4.0 → fastquadtree-2.4.2}/docs/api/item.md +0 -0
  34. {fastquadtree-2.4.0 → fastquadtree-2.4.2}/docs/api/point_item.md +0 -0
  35. {fastquadtree-2.4.0 → fastquadtree-2.4.2}/docs/api/pygame.md +0 -0
  36. {fastquadtree-2.4.0 → fastquadtree-2.4.2}/docs/api/pyqtree.md +0 -0
  37. {fastquadtree-2.4.0 → fastquadtree-2.4.2}/docs/api/quadtree.md +0 -0
  38. {fastquadtree-2.4.0 → fastquadtree-2.4.2}/docs/api/quadtree_objects.md +0 -0
  39. {fastquadtree-2.4.0 → fastquadtree-2.4.2}/docs/api/rect_item.md +0 -0
  40. {fastquadtree-2.4.0 → fastquadtree-2.4.2}/docs/api/rect_quadtree.md +0 -0
  41. {fastquadtree-2.4.0 → fastquadtree-2.4.2}/docs/api/rect_quadtree_objects.md +0 -0
  42. {fastquadtree-2.4.0 → fastquadtree-2.4.2}/docs/benchmark.md +0 -0
  43. {fastquadtree-2.4.0 → fastquadtree-2.4.2}/docs/engine_defaults.md +0 -0
  44. {fastquadtree-2.4.0 → fastquadtree-2.4.2}/docs/future_features.md +0 -0
  45. {fastquadtree-2.4.0 → fastquadtree-2.4.2}/docs/index.md +0 -0
  46. {fastquadtree-2.4.0 → fastquadtree-2.4.2}/docs/quickstart.md +0 -0
  47. {fastquadtree-2.4.0 → fastquadtree-2.4.2}/docs/runnables.md +0 -0
  48. {fastquadtree-2.4.0 → fastquadtree-2.4.2}/docs/rust_usage.md +0 -0
  49. {fastquadtree-2.4.0 → fastquadtree-2.4.2}/docs/styles/overrides.css +0 -0
  50. {fastquadtree-2.4.0 → fastquadtree-2.4.2}/examples/custom_id_example.py +0 -0
  51. {fastquadtree-2.4.0 → fastquadtree-2.4.2}/examples/object_tracking_example.py +0 -0
  52. {fastquadtree-2.4.0 → fastquadtree-2.4.2}/interactive/ballpit.py +0 -0
  53. {fastquadtree-2.4.0 → fastquadtree-2.4.2}/interactive/interactive.py +0 -0
  54. {fastquadtree-2.4.0 → fastquadtree-2.4.2}/interactive/interactive_v2.py +0 -0
  55. {fastquadtree-2.4.0 → fastquadtree-2.4.2}/interactive/interactive_v2_rect.py +0 -0
  56. {fastquadtree-2.4.0 → fastquadtree-2.4.2}/interactive/pygame_sprites.py +0 -0
  57. {fastquadtree-2.4.0 → fastquadtree-2.4.2}/mkdocs.yml +0 -0
  58. {fastquadtree-2.4.0 → fastquadtree-2.4.2}/pyproject.toml +0 -0
  59. {fastquadtree-2.4.0 → fastquadtree-2.4.2}/pyrightconfig.json +0 -0
  60. {fastquadtree-2.4.0 → fastquadtree-2.4.2}/pysrc/fastquadtree/__init__.py +0 -0
  61. {fastquadtree-2.4.0 → fastquadtree-2.4.2}/pysrc/fastquadtree/_base_quadtree.py +0 -0
  62. {fastquadtree-2.4.0 → fastquadtree-2.4.2}/pysrc/fastquadtree/_base_quadtree_objects.py +0 -0
  63. {fastquadtree-2.4.0 → fastquadtree-2.4.2}/pysrc/fastquadtree/_common.py +0 -0
  64. {fastquadtree-2.4.0 → fastquadtree-2.4.2}/pysrc/fastquadtree/_insert_result.py +0 -0
  65. {fastquadtree-2.4.0 → fastquadtree-2.4.2}/pysrc/fastquadtree/_item.py +0 -0
  66. {fastquadtree-2.4.0 → fastquadtree-2.4.2}/pysrc/fastquadtree/_obj_store.py +0 -0
  67. {fastquadtree-2.4.0 → fastquadtree-2.4.2}/pysrc/fastquadtree/point_quadtree.py +0 -0
  68. {fastquadtree-2.4.0 → fastquadtree-2.4.2}/pysrc/fastquadtree/point_quadtree_objects.py +0 -0
  69. {fastquadtree-2.4.0 → fastquadtree-2.4.2}/pysrc/fastquadtree/py.typed +0 -0
  70. {fastquadtree-2.4.0 → fastquadtree-2.4.2}/pysrc/fastquadtree/pygame.py +0 -0
  71. {fastquadtree-2.4.0 → fastquadtree-2.4.2}/pysrc/fastquadtree/pyqtree.py +0 -0
  72. {fastquadtree-2.4.0 → fastquadtree-2.4.2}/pysrc/fastquadtree/rect_quadtree.py +0 -0
  73. {fastquadtree-2.4.0 → fastquadtree-2.4.2}/pysrc/fastquadtree/rect_quadtree_objects.py +0 -0
  74. {fastquadtree-2.4.0 → fastquadtree-2.4.2}/src/geom.rs +0 -0
  75. {fastquadtree-2.4.0 → fastquadtree-2.4.2}/src/lib.rs +0 -0
  76. {fastquadtree-2.4.0 → fastquadtree-2.4.2}/src/quadtree.rs +0 -0
  77. {fastquadtree-2.4.0 → fastquadtree-2.4.2}/src/rect_quadtree.rs +0 -0
  78. {fastquadtree-2.4.0 → fastquadtree-2.4.2}/src/serialization.rs +0 -0
  79. {fastquadtree-2.4.0 → fastquadtree-2.4.2}/tests/__init__.py +0 -0
  80. {fastquadtree-2.4.0 → fastquadtree-2.4.2}/tests/insertions.rs +0 -0
  81. {fastquadtree-2.4.0 → fastquadtree-2.4.2}/tests/nearest_neighbor.rs +0 -0
  82. {fastquadtree-2.4.0 → fastquadtree-2.4.2}/tests/query.rs +0 -0
  83. {fastquadtree-2.4.0 → fastquadtree-2.4.2}/tests/rect_quadtree.rs +0 -0
  84. {fastquadtree-2.4.0 → fastquadtree-2.4.2}/tests/rectangle_traversal.rs +0 -0
  85. {fastquadtree-2.4.0 → fastquadtree-2.4.2}/tests/serialization.rs +0 -0
  86. {fastquadtree-2.4.0 → fastquadtree-2.4.2}/tests/test_delete.rs +0 -0
  87. {fastquadtree-2.4.0 → fastquadtree-2.4.2}/tests/test_python/__init__.py +0 -0
  88. {fastquadtree-2.4.0 → fastquadtree-2.4.2}/tests/test_python/common/test_common_validation.py +0 -0
  89. {fastquadtree-2.4.0 → fastquadtree-2.4.2}/tests/test_python/common/test_insert_result_and_items.py +0 -0
  90. {fastquadtree-2.4.0 → fastquadtree-2.4.2}/tests/test_python/common/test_internal_edges.py +0 -0
  91. {fastquadtree-2.4.0 → fastquadtree-2.4.2}/tests/test_python/common/test_obj_store.py +0 -0
  92. {fastquadtree-2.4.0 → fastquadtree-2.4.2}/tests/test_python/common/test_serialization_container.py +0 -0
  93. {fastquadtree-2.4.0 → fastquadtree-2.4.2}/tests/test_python/conftest.py +0 -0
  94. {fastquadtree-2.4.0 → fastquadtree-2.4.2}/tests/test_python/integration/test_migration_breaks_and_safety.py +0 -0
  95. {fastquadtree-2.4.0 → fastquadtree-2.4.2}/tests/test_python/integration/test_optional_pygame_dependency.py +0 -0
  96. {fastquadtree-2.4.0 → fastquadtree-2.4.2}/tests/test_python/integration/test_public_api_contracts.py +0 -0
  97. {fastquadtree-2.4.0 → fastquadtree-2.4.2}/tests/test_python/integration/test_pygame_integration.py +0 -0
  98. {fastquadtree-2.4.0 → fastquadtree-2.4.2}/tests/test_python/points/test_point_quadtree_core.py +0 -0
  99. {fastquadtree-2.4.0 → fastquadtree-2.4.2}/tests/test_python/points/test_point_quadtree_mutation.py +0 -0
  100. {fastquadtree-2.4.0 → fastquadtree-2.4.2}/tests/test_python/points/test_point_quadtree_numpy.py +0 -0
  101. {fastquadtree-2.4.0 → fastquadtree-2.4.2}/tests/test_python/points/test_point_quadtree_precision.py +0 -0
  102. {fastquadtree-2.4.0 → fastquadtree-2.4.2}/tests/test_python/points/test_point_quadtree_serialization.py +0 -0
  103. {fastquadtree-2.4.0 → fastquadtree-2.4.2}/tests/test_python/points_objects/test_point_quadtree_objects_core.py +0 -0
  104. {fastquadtree-2.4.0 → fastquadtree-2.4.2}/tests/test_python/points_objects/test_point_quadtree_objects_deletion_update.py +0 -0
  105. {fastquadtree-2.4.0 → fastquadtree-2.4.2}/tests/test_python/points_objects/test_point_quadtree_objects_numpy.py +0 -0
  106. {fastquadtree-2.4.0 → fastquadtree-2.4.2}/tests/test_python/points_objects/test_point_quadtree_objects_serialization.py +0 -0
  107. {fastquadtree-2.4.0 → fastquadtree-2.4.2}/tests/test_python/rects/test_rect_quadtree_core.py +0 -0
  108. {fastquadtree-2.4.0 → fastquadtree-2.4.2}/tests/test_python/rects/test_rect_quadtree_mutation.py +0 -0
  109. {fastquadtree-2.4.0 → fastquadtree-2.4.2}/tests/test_python/rects/test_rect_quadtree_numpy.py +0 -0
  110. {fastquadtree-2.4.0 → fastquadtree-2.4.2}/tests/test_python/rects/test_rect_quadtree_serialization.py +0 -0
  111. {fastquadtree-2.4.0 → fastquadtree-2.4.2}/tests/test_python/rects_objects/test_rect_quadtree_objects_core.py +0 -0
  112. {fastquadtree-2.4.0 → fastquadtree-2.4.2}/tests/test_python/rects_objects/test_rect_quadtree_objects_deletion_update.py +0 -0
  113. {fastquadtree-2.4.0 → fastquadtree-2.4.2}/tests/test_python/rects_objects/test_rect_quadtree_objects_numpy.py +0 -0
  114. {fastquadtree-2.4.0 → fastquadtree-2.4.2}/tests/test_python/rects_objects/test_rect_quadtree_objects_serialization.py +0 -0
  115. {fastquadtree-2.4.0 → fastquadtree-2.4.2}/tests/test_python/test_pyqtree_shim_compat.py +0 -0
  116. {fastquadtree-2.4.0 → fastquadtree-2.4.2}/tests/unconventional_bounds.rs +0 -0
@@ -13,14 +13,14 @@ jobs:
13
13
  build:
14
14
  runs-on: ubuntu-latest
15
15
  steps:
16
- - uses: actions/checkout@v4
16
+ - uses: actions/checkout@v6
17
17
  with:
18
18
  fetch-depth: 0
19
19
  fetch-tags: true
20
- - uses: actions/setup-python@v5
20
+ - uses: actions/setup-python@v6
21
21
  with: { python-version: '3.11' }
22
22
  - name: Install uv
23
- uses: astral-sh/setup-uv@v7
23
+ uses: astral-sh/setup-uv@v8.1.0
24
24
  with:
25
25
  enable-cache: true
26
26
  - run: uv sync --group dev --group docs
@@ -12,15 +12,15 @@ jobs:
12
12
  name: Test build
13
13
  runs-on: ubuntu-latest
14
14
  steps:
15
- - uses: actions/checkout@v4
15
+ - uses: actions/checkout@v6
16
16
 
17
17
  - name: Set up Python
18
- uses: actions/setup-python@v5
18
+ uses: actions/setup-python@v6
19
19
  with:
20
20
  python-version: "3.9"
21
21
 
22
22
  - name: Install uv
23
- uses: astral-sh/setup-uv@v7
23
+ uses: astral-sh/setup-uv@v8.1.0
24
24
  with:
25
25
  enable-cache: true
26
26
 
@@ -45,7 +45,7 @@ jobs:
45
45
  run: cargo test
46
46
 
47
47
  - name: Upload coverage to Codecov
48
- uses: codecov/codecov-action@v5
48
+ uses: codecov/codecov-action@v6
49
49
  with:
50
50
  token: ${{ secrets.CODECOV_TOKEN }}
51
51
 
@@ -78,42 +78,99 @@ jobs:
78
78
  manylinux: "2_28"
79
79
 
80
80
  steps:
81
- - uses: actions/checkout@v4
81
+ - uses: actions/checkout@v6
82
82
 
83
83
  # Keep Python simple here; maturin-action brings its own Python(s) for builds.
84
84
  - name: Set up Python
85
- uses: actions/setup-python@v5
85
+ uses: actions/setup-python@v6
86
86
  with:
87
87
  python-version: "3.9"
88
88
 
89
89
  - name: Build wheels with maturin
90
- uses: PyO3/maturin-action@v1
90
+ uses: PyO3/maturin-action@v1.51.0
91
91
  with:
92
92
  command: build
93
93
  args: ${{ matrix.maturin_args }}
94
94
  manylinux: ${{ matrix.manylinux }}
95
95
 
96
96
  - name: Upload dist artifacts
97
- uses: actions/upload-artifact@v4
97
+ uses: actions/upload-artifact@v7
98
98
  with:
99
99
  name: dist-${{ runner.os }}-${{ matrix.maturin_args }}
100
100
  path: dist/*
101
101
 
102
+ build_pyodide:
103
+ name: Build Pyodide wheels
104
+ needs: test
105
+ runs-on: ubuntu-latest
106
+ strategy:
107
+ fail-fast: false
108
+ matrix:
109
+ include:
110
+ - label: pyodide-2025
111
+ python_version: "3.13"
112
+ xbuildenv_channel: "nightly"
113
+ xbuildenv_version: "20260401"
114
+ emscripten_version: "4.0.9"
115
+ wheel_glob: "fastquadtree-*-cp39-abi3-pyemscripten_2025_0_wasm32.whl"
116
+ - label: pyodide-2026
117
+ python_version: "3.14"
118
+ xbuildenv_channel: "stable"
119
+ xbuildenv_version: "314.0.0"
120
+ emscripten_version: "5.0.3"
121
+ wheel_glob: "fastquadtree-*-cp39-abi3-pyemscripten_2026_0_wasm32.whl"
122
+ steps:
123
+ - uses: actions/checkout@v6
124
+
125
+ - name: Set up Python
126
+ uses: actions/setup-python@v6
127
+ with:
128
+ python-version: ${{ matrix.python_version }}
129
+
130
+ - name: Install uv
131
+ uses: astral-sh/setup-uv@v8.1.0
132
+ with:
133
+ enable-cache: true
134
+
135
+ - name: Cache Pyodide cross-build environment
136
+ uses: actions/cache@v4
137
+ with:
138
+ path: ~/.cache/fastquadtree-${{ matrix.label }}
139
+ key: pyodide-xbuildenv-${{ runner.os }}-${{ matrix.label }}-${{ matrix.xbuildenv_version }}-${{ matrix.emscripten_version }}-rust-1.93.0
140
+
141
+ - name: Build Pyodide wheel
142
+ env:
143
+ PYODIDE_HOST_PYTHON: ${{ matrix.python_version }}
144
+ PYODIDE_XBUILDENV_ROOT: ~/.cache/fastquadtree-${{ matrix.label }}
145
+ PYODIDE_XBUILDENV_CHANNEL: ${{ matrix.xbuildenv_channel }}
146
+ PYODIDE_XBUILDENV_VERSION: ${{ matrix.xbuildenv_version }}
147
+ PYODIDE_EMSCRIPTEN_VERSION: ${{ matrix.emscripten_version }}
148
+ RUST_TOOLCHAIN: "1.93.0"
149
+ UV_CACHE_DIR: ~/.cache/uv
150
+ PYODIDE_EXPECTED_WHEEL_GLOB: ${{ matrix.wheel_glob }}
151
+ run: bash scripts/build_pyodide_wheel.sh
152
+
153
+ - name: Upload Pyodide dist artifact
154
+ uses: actions/upload-artifact@v7
155
+ with:
156
+ name: dist-${{ matrix.label }}
157
+ path: dist/${{ matrix.wheel_glob }}
158
+
102
159
  publish:
103
160
  name: Publish distributions to PyPI
104
- needs: build
161
+ needs: [build, build_pyodide]
105
162
  runs-on: ubuntu-latest
106
163
  permissions:
107
164
  contents: read
108
165
  id-token: write # for Trusted Publisher (recommended)
109
166
  steps:
110
- - uses: actions/checkout@v4
167
+ - uses: actions/checkout@v6
111
168
 
112
169
  - name: Install uv
113
- uses: astral-sh/setup-uv@v7
170
+ uses: astral-sh/setup-uv@v8.1.0
114
171
 
115
172
  - name: Download all dist artifacts
116
- uses: actions/download-artifact@v4
173
+ uses: actions/download-artifact@v8
117
174
  with:
118
175
  pattern: dist-*
119
176
  path: dist
@@ -13,16 +13,16 @@ jobs:
13
13
  python-version: ["3.9", "3.14"]
14
14
 
15
15
  steps:
16
- - uses: actions/checkout@v4
16
+ - uses: actions/checkout@v6
17
17
 
18
18
  - name: Set up Python ${{ matrix.python-version }}
19
- uses: actions/setup-python@v5
19
+ uses: actions/setup-python@v6
20
20
  with:
21
21
  python-version: ${{ matrix.python-version }}
22
22
  allow-prereleases: true
23
23
 
24
24
  - name: Install uv
25
- uses: astral-sh/setup-uv@v7
25
+ uses: astral-sh/setup-uv@v8.1.0
26
26
  with:
27
27
  enable-cache: true
28
28
 
@@ -49,6 +49,6 @@ jobs:
49
49
  run: cargo test
50
50
 
51
51
  - name: Upload coverage to Codecov
52
- uses: codecov/codecov-action@v5
52
+ uses: codecov/codecov-action@v6
53
53
  with:
54
54
  token: ${{ secrets.CODECOV_TOKEN }}
@@ -216,4 +216,8 @@ __marimo__/
216
216
  *.exe
217
217
  *.pdb
218
218
  *.bin
219
- *.lock
219
+ *.lock
220
+
221
+ # pyodide
222
+ .pyodide*
223
+ .venv-pyodide/
@@ -44,7 +44,7 @@ dependencies = [
44
44
 
45
45
  [[package]]
46
46
  name = "fastquadtree"
47
- version = "2.4.0"
47
+ version = "2.4.2"
48
48
  dependencies = [
49
49
  "num-traits",
50
50
  "numpy",
@@ -1,6 +1,6 @@
1
1
  [package]
2
2
  name = "fastquadtree"
3
- version = "2.4.0"
3
+ version = "2.4.2"
4
4
  edition = "2021"
5
5
  rust-version = "1.89"
6
6
  readme = "README.md"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fastquadtree
3
- Version: 2.4.0
3
+ Version: 2.4.2
4
4
  Classifier: Programming Language :: Python :: 3
5
5
  Classifier: Programming Language :: Python :: 3 :: Only
6
6
  Classifier: Programming Language :: Python :: 3.9
@@ -0,0 +1,77 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+
4
+ PROJECT_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
5
+ PYODIDE_HOST_PYTHON="${PYODIDE_HOST_PYTHON:-3.13}"
6
+ PYODIDE_XBUILDENV_VERSION="${PYODIDE_XBUILDENV_VERSION:-20260401}"
7
+ PYODIDE_XBUILDENV_CHANNEL="${PYODIDE_XBUILDENV_CHANNEL:-nightly}"
8
+ PYODIDE_EMSCRIPTEN_VERSION="${PYODIDE_EMSCRIPTEN_VERSION:-4.0.9}"
9
+ PYODIDE_XBUILDENV_ROOT="${PYODIDE_XBUILDENV_ROOT:-${XDG_CACHE_HOME:-$HOME/.cache}/fastquadtree-pyodide}"
10
+ RUST_TOOLCHAIN="${RUST_TOOLCHAIN:-1.93.0}"
11
+ UV_CACHE_DIR="${UV_CACHE_DIR:-${XDG_CACHE_HOME:-$HOME/.cache}/uv}"
12
+ PYODIDE_EXPECTED_WHEEL_GLOB="${PYODIDE_EXPECTED_WHEEL_GLOB:-fastquadtree-*-cp39-abi3-pyemscripten_2025_0_wasm32.whl}"
13
+
14
+ need_cmd() {
15
+ if ! command -v "$1" >/dev/null 2>&1; then
16
+ printf 'Missing required command: %s\n' "$1" >&2
17
+ exit 1
18
+ fi
19
+ }
20
+
21
+ need_cmd uv
22
+ need_cmd rustup
23
+
24
+ printf 'Using Pyodide xbuildenv root: %s\n' "$PYODIDE_XBUILDENV_ROOT"
25
+ printf 'Using Pyodide host Python: %s\n' "$PYODIDE_HOST_PYTHON"
26
+ printf 'Using Pyodide xbuildenv channel: %s\n' "$PYODIDE_XBUILDENV_CHANNEL"
27
+ printf 'Using Pyodide xbuildenv version: %s\n' "$PYODIDE_XBUILDENV_VERSION"
28
+ printf 'Using Emscripten version: %s\n' "$PYODIDE_EMSCRIPTEN_VERSION"
29
+ printf 'Using Rust toolchain: %s\n' "$RUST_TOOLCHAIN"
30
+
31
+ install_args=(
32
+ xbuildenv
33
+ install
34
+ "$PYODIDE_XBUILDENV_VERSION"
35
+ --path
36
+ "$PYODIDE_XBUILDENV_ROOT"
37
+ )
38
+ if [ "$PYODIDE_XBUILDENV_CHANNEL" = "nightly" ]; then
39
+ install_args+=(--nightly)
40
+ fi
41
+
42
+ uv run --python "$PYODIDE_HOST_PYTHON" --with pyodide-build pyodide "${install_args[@]}"
43
+ uv run --python "$PYODIDE_HOST_PYTHON" --with pyodide-build pyodide \
44
+ xbuildenv install-emscripten \
45
+ --version "$PYODIDE_EMSCRIPTEN_VERSION" \
46
+ --path "$PYODIDE_XBUILDENV_ROOT"
47
+
48
+ rustup toolchain install "$RUST_TOOLCHAIN"
49
+ rustup target add wasm32-unknown-emscripten --toolchain "$RUST_TOOLCHAIN"
50
+
51
+ EMSDK_ENV="$PYODIDE_XBUILDENV_ROOT/$PYODIDE_XBUILDENV_VERSION/emsdk/emsdk_env.sh"
52
+ if [ ! -f "$EMSDK_ENV" ]; then
53
+ printf 'Expected emsdk activation script at %s\n' "$EMSDK_ENV" >&2
54
+ exit 1
55
+ fi
56
+
57
+ # shellcheck source=/dev/null
58
+ source "$EMSDK_ENV" >/dev/null 2>&1
59
+
60
+ export PYODIDE_XBUILDENV_PATH="$PYODIDE_XBUILDENV_ROOT"
61
+ export RUSTUP_TOOLCHAIN="$RUST_TOOLCHAIN"
62
+ export UV_CACHE_DIR
63
+
64
+ cd "$PROJECT_ROOT"
65
+ mkdir -p dist
66
+ rm -f dist/fastquadtree-*-pyemscripten_*_wasm32.whl
67
+ uv run --python "$PYODIDE_HOST_PYTHON" --with pyodide-build pyodide build . --outdir dist
68
+
69
+ printf '\nBuilt wheel:\n'
70
+ shopt -s nullglob
71
+ matches=("$PROJECT_ROOT"/dist/$PYODIDE_EXPECTED_WHEEL_GLOB)
72
+ if [ "${#matches[@]}" -eq 0 ]; then
73
+ printf 'No wheel matching expected Pyodide target was produced: %s\n' \
74
+ "$PYODIDE_EXPECTED_WHEEL_GLOB" >&2
75
+ exit 1
76
+ fi
77
+ printf '%s\n' "${matches[@]}" | sort
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes