sonolus.py 0.1.7__tar.gz → 0.1.8__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.

Potentially problematic release.


This version of sonolus.py might be problematic. Click here for more details.

Files changed (168) hide show
  1. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/.github/workflows/publish.yaml +2 -2
  2. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/PKG-INFO +2 -2
  3. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/pyproject.toml +17 -2
  4. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/sonolus/script/num.py +2 -2
  5. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/tests/script/test_quad.py +5 -0
  6. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/uv.lock +157 -2
  7. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/.gitignore +0 -0
  8. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/.python-version +0 -0
  9. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/LICENSE +0 -0
  10. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/README.md +0 -0
  11. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/doc_stubs/__init__.py +0 -0
  12. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/doc_stubs/builtins.pyi +0 -0
  13. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/doc_stubs/math.pyi +0 -0
  14. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/doc_stubs/num.pyi +0 -0
  15. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/doc_stubs/random.pyi +0 -0
  16. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/docs/CNAME +0 -0
  17. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/docs/concepts/builtins.md +0 -0
  18. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/docs/concepts/cli.md +0 -0
  19. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/docs/concepts/constructs.md +0 -0
  20. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/docs/concepts/index.md +0 -0
  21. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/docs/concepts/project.md +0 -0
  22. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/docs/concepts/resources.md +0 -0
  23. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/docs/concepts/types.md +0 -0
  24. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/docs/index.md +0 -0
  25. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/docs/reference/builtins.md +0 -0
  26. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/docs/reference/index.md +0 -0
  27. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/docs/reference/math.md +0 -0
  28. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/docs/reference/random.md +0 -0
  29. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/docs/reference/sonolus.script.archetype.md +0 -0
  30. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/docs/reference/sonolus.script.array.md +0 -0
  31. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/docs/reference/sonolus.script.array_like.md +0 -0
  32. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/docs/reference/sonolus.script.bucket.md +0 -0
  33. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/docs/reference/sonolus.script.containers.md +0 -0
  34. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/docs/reference/sonolus.script.debug.md +0 -0
  35. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/docs/reference/sonolus.script.easing.md +0 -0
  36. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/docs/reference/sonolus.script.effect.md +0 -0
  37. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/docs/reference/sonolus.script.engine.md +0 -0
  38. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/docs/reference/sonolus.script.globals.md +0 -0
  39. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/docs/reference/sonolus.script.instruction.md +0 -0
  40. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/docs/reference/sonolus.script.interval.md +0 -0
  41. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/docs/reference/sonolus.script.iterator.md +0 -0
  42. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/docs/reference/sonolus.script.level.md +0 -0
  43. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/docs/reference/sonolus.script.num.md +0 -0
  44. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/docs/reference/sonolus.script.options.md +0 -0
  45. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/docs/reference/sonolus.script.particle.md +0 -0
  46. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/docs/reference/sonolus.script.print.md +0 -0
  47. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/docs/reference/sonolus.script.project.md +0 -0
  48. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/docs/reference/sonolus.script.quad.md +0 -0
  49. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/docs/reference/sonolus.script.record.md +0 -0
  50. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/docs/reference/sonolus.script.runtime.md +0 -0
  51. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/docs/reference/sonolus.script.sprite.md +0 -0
  52. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/docs/reference/sonolus.script.text.md +0 -0
  53. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/docs/reference/sonolus.script.timing.md +0 -0
  54. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/docs/reference/sonolus.script.transform.md +0 -0
  55. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/docs/reference/sonolus.script.ui.md +0 -0
  56. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/docs/reference/sonolus.script.values.md +0 -0
  57. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/docs/reference/sonolus.script.vec.md +0 -0
  58. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/mkdocs.yml +0 -0
  59. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/scripts/generate.py +0 -0
  60. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/scripts/runtimes/Engine/Tutorial/Blocks.json +0 -0
  61. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/scripts/runtimes/Functions.json +0 -0
  62. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/scripts/runtimes/Level/Play/Blocks.json +0 -0
  63. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/scripts/runtimes/Level/Preview/Blocks.json +0 -0
  64. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/scripts/runtimes/Level/Watch/Blocks.json +0 -0
  65. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/sonolus/__init__.py +0 -0
  66. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/sonolus/backend/__init__.py +0 -0
  67. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/sonolus/backend/blocks.py +0 -0
  68. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/sonolus/backend/excepthook.py +0 -0
  69. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/sonolus/backend/finalize.py +0 -0
  70. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/sonolus/backend/interpret.py +0 -0
  71. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/sonolus/backend/ir.py +0 -0
  72. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/sonolus/backend/mode.py +0 -0
  73. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/sonolus/backend/node.py +0 -0
  74. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/sonolus/backend/ops.py +0 -0
  75. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/sonolus/backend/optimize/__init__.py +0 -0
  76. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/sonolus/backend/optimize/allocate.py +0 -0
  77. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/sonolus/backend/optimize/constant_evaluation.py +0 -0
  78. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/sonolus/backend/optimize/copy_coalesce.py +0 -0
  79. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/sonolus/backend/optimize/dead_code.py +0 -0
  80. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/sonolus/backend/optimize/dominance.py +0 -0
  81. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/sonolus/backend/optimize/flow.py +0 -0
  82. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/sonolus/backend/optimize/inlining.py +0 -0
  83. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/sonolus/backend/optimize/liveness.py +0 -0
  84. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/sonolus/backend/optimize/optimize.py +0 -0
  85. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/sonolus/backend/optimize/passes.py +0 -0
  86. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/sonolus/backend/optimize/simplify.py +0 -0
  87. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/sonolus/backend/optimize/ssa.py +0 -0
  88. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/sonolus/backend/place.py +0 -0
  89. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/sonolus/backend/utils.py +0 -0
  90. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/sonolus/backend/visitor.py +0 -0
  91. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/sonolus/build/__init__.py +0 -0
  92. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/sonolus/build/cli.py +0 -0
  93. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/sonolus/build/collection.py +0 -0
  94. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/sonolus/build/compile.py +0 -0
  95. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/sonolus/build/engine.py +0 -0
  96. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/sonolus/build/level.py +0 -0
  97. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/sonolus/build/node.py +0 -0
  98. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/sonolus/build/project.py +0 -0
  99. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/sonolus/py.typed +0 -0
  100. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/sonolus/script/__init__.py +0 -0
  101. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/sonolus/script/archetype.py +0 -0
  102. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/sonolus/script/array.py +0 -0
  103. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/sonolus/script/array_like.py +0 -0
  104. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/sonolus/script/bucket.py +0 -0
  105. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/sonolus/script/containers.py +0 -0
  106. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/sonolus/script/debug.py +0 -0
  107. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/sonolus/script/easing.py +0 -0
  108. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/sonolus/script/effect.py +0 -0
  109. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/sonolus/script/engine.py +0 -0
  110. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/sonolus/script/globals.py +0 -0
  111. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/sonolus/script/instruction.py +0 -0
  112. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/sonolus/script/internal/__init__.py +0 -0
  113. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/sonolus/script/internal/builtin_impls.py +0 -0
  114. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/sonolus/script/internal/callbacks.py +0 -0
  115. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/sonolus/script/internal/constant.py +0 -0
  116. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/sonolus/script/internal/context.py +0 -0
  117. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/sonolus/script/internal/descriptor.py +0 -0
  118. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/sonolus/script/internal/dict_impl.py +0 -0
  119. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/sonolus/script/internal/error.py +0 -0
  120. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/sonolus/script/internal/generic.py +0 -0
  121. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/sonolus/script/internal/impl.py +0 -0
  122. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/sonolus/script/internal/introspection.py +0 -0
  123. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/sonolus/script/internal/math_impls.py +0 -0
  124. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/sonolus/script/internal/native.py +0 -0
  125. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/sonolus/script/internal/random.py +0 -0
  126. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/sonolus/script/internal/range.py +0 -0
  127. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/sonolus/script/internal/transient.py +0 -0
  128. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/sonolus/script/internal/tuple_impl.py +0 -0
  129. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/sonolus/script/internal/value.py +0 -0
  130. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/sonolus/script/interval.py +0 -0
  131. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/sonolus/script/iterator.py +0 -0
  132. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/sonolus/script/level.py +0 -0
  133. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/sonolus/script/options.py +0 -0
  134. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/sonolus/script/particle.py +0 -0
  135. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/sonolus/script/pointer.py +0 -0
  136. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/sonolus/script/print.py +0 -0
  137. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/sonolus/script/project.py +0 -0
  138. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/sonolus/script/quad.py +0 -0
  139. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/sonolus/script/record.py +0 -0
  140. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/sonolus/script/runtime.py +0 -0
  141. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/sonolus/script/sprite.py +0 -0
  142. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/sonolus/script/text.py +0 -0
  143. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/sonolus/script/timing.py +0 -0
  144. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/sonolus/script/transform.py +0 -0
  145. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/sonolus/script/ui.py +0 -0
  146. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/sonolus/script/values.py +0 -0
  147. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/sonolus/script/vec.py +0 -0
  148. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/tests/__init__.py +0 -0
  149. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/tests/script/__init__.py +0 -0
  150. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/tests/script/conftest.py +0 -0
  151. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/tests/script/test_array.py +0 -0
  152. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/tests/script/test_array_map.py +0 -0
  153. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/tests/script/test_assert.py +0 -0
  154. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/tests/script/test_dict.py +0 -0
  155. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/tests/script/test_flow.py +0 -0
  156. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/tests/script/test_functions.py +0 -0
  157. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/tests/script/test_helpers.py +0 -0
  158. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/tests/script/test_interval.py +0 -0
  159. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/tests/script/test_match.py +0 -0
  160. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/tests/script/test_num.py +0 -0
  161. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/tests/script/test_operator.py +0 -0
  162. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/tests/script/test_random.py +0 -0
  163. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/tests/script/test_range.py +0 -0
  164. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/tests/script/test_record.py +0 -0
  165. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/tests/script/test_transform.py +0 -0
  166. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/tests/script/test_tuple.py +0 -0
  167. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/tests/script/test_var_array.py +0 -0
  168. {sonolus_py-0.1.7 → sonolus_py-0.1.8}/tests/script/test_vec.py +0 -0
@@ -16,13 +16,13 @@ jobs:
16
16
  version: 0.5.2
17
17
  - name: Install Python
18
18
  run: |
19
- uv python install
19
+ uv python install 3.12 3.13
20
20
  - name: Install project
21
21
  run: |
22
22
  uv sync --all-extras --dev
23
23
  - name: Run tests
24
24
  run: |
25
- uv run pytest tests -n auto
25
+ uv run tox
26
26
  - name: Build
27
27
  run: |
28
28
  uv build
@@ -1,8 +1,8 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: sonolus.py
3
- Version: 0.1.7
3
+ Version: 0.1.8
4
4
  Summary: Sonolus engine development in Python
5
- Requires-Python: >=3.13
5
+ Requires-Python: >=3.12
6
6
  Description-Content-Type: text/markdown
7
7
 
8
8
  # Sonolus.py
@@ -1,9 +1,9 @@
1
1
  [project]
2
2
  name = "sonolus.py"
3
- version = "0.1.7"
3
+ version = "0.1.8"
4
4
  description = "Sonolus engine development in Python"
5
5
  readme = "README.md"
6
- requires-python = ">=3.13"
6
+ requires-python = ">=3.12"
7
7
 
8
8
  [project.scripts]
9
9
  sonolus-py = "sonolus.build.cli:main"
@@ -16,6 +16,8 @@ dev-dependencies = [
16
16
  "pytest>=8.3.3",
17
17
  "ruff>=0.6.9",
18
18
  "pytest-cov>=6.0.0",
19
+ "tox>=4.23.2",
20
+ "tox-uv>=1.16.0",
19
21
  ]
20
22
 
21
23
  [tool.ruff]
@@ -43,3 +45,16 @@ docs = [
43
45
 
44
46
  [tool.hatch.build.targets.wheel]
45
47
  packages = ["sonolus"]
48
+
49
+ [tool.tox]
50
+ requires = ["tox>=4.19"]
51
+ env_list = ["py312", "py313"]
52
+
53
+ [tool.tox.env_run_base]
54
+ description = "Run tests"
55
+ deps = [
56
+ "hypothesis>=6.115.3",
57
+ "pytest-xdist>=3.6.1",
58
+ "pytest>=8.3.3",
59
+ ]
60
+ commands = [["pytest", "tests", "-n", "auto"]]
@@ -3,7 +3,7 @@ from __future__ import annotations
3
3
 
4
4
  import operator
5
5
  from collections.abc import Callable, Iterable
6
- from typing import TYPE_CHECKING, Any, Self, TypeIs, final, runtime_checkable
6
+ from typing import TYPE_CHECKING, Any, Self, final, runtime_checkable, TypeGuard
7
7
 
8
8
  from sonolus.backend.ir import IRConst, IRGet, IRPureInstr, IRSet
9
9
  from sonolus.backend.ops import Op
@@ -19,7 +19,7 @@ class _NumMeta(type):
19
19
  return isinstance(instance, float | int | bool) or _is_num(instance)
20
20
 
21
21
 
22
- def _is_num(value: Any) -> TypeIs[Num]:
22
+ def _is_num(value: Any) -> TypeGuard[Num]:
23
23
  """Check if a value is a precisely Num instance."""
24
24
  return type.__instancecheck__(Num, value) # type: ignore # noqa: PLC2801
25
25
 
@@ -21,6 +21,10 @@ def vecs(draw):
21
21
  return Vec2(x, y)
22
22
 
23
23
 
24
+ def _area(points: list[Vec2]) -> float:
25
+ return 0.5 * abs(sum(p.x * q.y - p.y * q.x for p, q in zip(points, points[1:] + points[:1], strict=False)))
26
+
27
+
24
28
  @st.composite
25
29
  def quads(draw):
26
30
  points = [draw(vecs()) for _ in range(4)]
@@ -28,6 +32,7 @@ def quads(draw):
28
32
  assume((p1 - p2).magnitude > 1e-2)
29
33
  centroid = sum(points, Vec2(0, 0)) / 4
30
34
  points = sorted(points, key=lambda p: (p - centroid).angle)
35
+ assume(_area(points) > 1e-2)
31
36
  return Quad(*points)
32
37
 
33
38
 
@@ -1,5 +1,5 @@
1
1
  version = 1
2
- requires-python = ">=3.13"
2
+ requires-python = ">=3.12"
3
3
 
4
4
  [[package]]
5
5
  name = "attrs"
@@ -19,6 +19,15 @@ wheels = [
19
19
  { url = "https://files.pythonhosted.org/packages/ed/20/bc79bc575ba2e2a7f70e8a1155618bb1301eaa5132a8271373a6903f73f8/babel-2.16.0-py3-none-any.whl", hash = "sha256:368b5b98b37c06b7daf6696391c3240c938b37767d4584413e8438c5c435fa8b", size = 9587599 },
20
20
  ]
21
21
 
22
+ [[package]]
23
+ name = "cachetools"
24
+ version = "5.5.0"
25
+ source = { registry = "https://pypi.org/simple" }
26
+ sdist = { url = "https://files.pythonhosted.org/packages/c3/38/a0f315319737ecf45b4319a8cd1f3a908e29d9277b46942263292115eee7/cachetools-5.5.0.tar.gz", hash = "sha256:2cc24fb4cbe39633fb7badd9db9ca6295d766d9c2995f245725a46715d050f2a", size = 27661 }
27
+ wheels = [
28
+ { url = "https://files.pythonhosted.org/packages/a4/07/14f8ad37f2d12a5ce41206c21820d8cb6561b728e51fad4530dff0552a67/cachetools-5.5.0-py3-none-any.whl", hash = "sha256:02134e8439cdc2ffb62023ce1debca2944c3f289d66bb17ead3ab3dede74b292", size = 9524 },
29
+ ]
30
+
22
31
  [[package]]
23
32
  name = "certifi"
24
33
  version = "2024.8.30"
@@ -37,12 +46,36 @@ wheels = [
37
46
  { url = "https://files.pythonhosted.org/packages/c5/55/51844dd50c4fc7a33b653bfaba4c2456f06955289ca770a5dbd5fd267374/cfgv-3.4.0-py2.py3-none-any.whl", hash = "sha256:b7265b1f29fd3316bfcd2b330d63d024f2bfd8bcb8b0272f8e19a504856c48f9", size = 7249 },
38
47
  ]
39
48
 
49
+ [[package]]
50
+ name = "chardet"
51
+ version = "5.2.0"
52
+ source = { registry = "https://pypi.org/simple" }
53
+ sdist = { url = "https://files.pythonhosted.org/packages/f3/0d/f7b6ab21ec75897ed80c17d79b15951a719226b9fababf1e40ea74d69079/chardet-5.2.0.tar.gz", hash = "sha256:1b3b6ff479a8c414bc3fa2c0852995695c4a026dcd6d0633b2dd092ca39c1cf7", size = 2069618 }
54
+ wheels = [
55
+ { url = "https://files.pythonhosted.org/packages/38/6f/f5fbc992a329ee4e0f288c1fe0e2ad9485ed064cac731ed2fe47dcc38cbf/chardet-5.2.0-py3-none-any.whl", hash = "sha256:e1cf59446890a00105fe7b7912492ea04b6e6f06d4b742b2c788469e34c82970", size = 199385 },
56
+ ]
57
+
40
58
  [[package]]
41
59
  name = "charset-normalizer"
42
60
  version = "3.4.0"
43
61
  source = { registry = "https://pypi.org/simple" }
44
62
  sdist = { url = "https://files.pythonhosted.org/packages/f2/4f/e1808dc01273379acc506d18f1504eb2d299bd4131743b9fc54d7be4df1e/charset_normalizer-3.4.0.tar.gz", hash = "sha256:223217c3d4f82c3ac5e29032b3f1c2eb0fb591b72161f86d93f5719079dae93e", size = 106620 }
45
63
  wheels = [
64
+ { url = "https://files.pythonhosted.org/packages/d3/0b/4b7a70987abf9b8196845806198975b6aab4ce016632f817ad758a5aa056/charset_normalizer-3.4.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:0713f3adb9d03d49d365b70b84775d0a0d18e4ab08d12bc46baa6132ba78aaf6", size = 194445 },
65
+ { url = "https://files.pythonhosted.org/packages/50/89/354cc56cf4dd2449715bc9a0f54f3aef3dc700d2d62d1fa5bbea53b13426/charset_normalizer-3.4.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:de7376c29d95d6719048c194a9cf1a1b0393fbe8488a22008610b0361d834ecf", size = 125275 },
66
+ { url = "https://files.pythonhosted.org/packages/fa/44/b730e2a2580110ced837ac083d8ad222343c96bb6b66e9e4e706e4d0b6df/charset_normalizer-3.4.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4a51b48f42d9358460b78725283f04bddaf44a9358197b889657deba38f329db", size = 119020 },
67
+ { url = "https://files.pythonhosted.org/packages/9d/e4/9263b8240ed9472a2ae7ddc3e516e71ef46617fe40eaa51221ccd4ad9a27/charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b295729485b06c1a0683af02a9e42d2caa9db04a373dc38a6a58cdd1e8abddf1", size = 139128 },
68
+ { url = "https://files.pythonhosted.org/packages/6b/e3/9f73e779315a54334240353eaea75854a9a690f3f580e4bd85d977cb2204/charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ee803480535c44e7f5ad00788526da7d85525cfefaf8acf8ab9a310000be4b03", size = 149277 },
69
+ { url = "https://files.pythonhosted.org/packages/1a/cf/f1f50c2f295312edb8a548d3fa56a5c923b146cd3f24114d5adb7e7be558/charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3d59d125ffbd6d552765510e3f31ed75ebac2c7470c7274195b9161a32350284", size = 142174 },
70
+ { url = "https://files.pythonhosted.org/packages/16/92/92a76dc2ff3a12e69ba94e7e05168d37d0345fa08c87e1fe24d0c2a42223/charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8cda06946eac330cbe6598f77bb54e690b4ca93f593dee1568ad22b04f347c15", size = 143838 },
71
+ { url = "https://files.pythonhosted.org/packages/a4/01/2117ff2b1dfc61695daf2babe4a874bca328489afa85952440b59819e9d7/charset_normalizer-3.4.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:07afec21bbbbf8a5cc3651aa96b980afe2526e7f048fdfb7f1014d84acc8b6d8", size = 146149 },
72
+ { url = "https://files.pythonhosted.org/packages/f6/9b/93a332b8d25b347f6839ca0a61b7f0287b0930216994e8bf67a75d050255/charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6b40e8d38afe634559e398cc32b1472f376a4099c75fe6299ae607e404c033b2", size = 140043 },
73
+ { url = "https://files.pythonhosted.org/packages/ab/f6/7ac4a01adcdecbc7a7587767c776d53d369b8b971382b91211489535acf0/charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:b8dcd239c743aa2f9c22ce674a145e0a25cb1566c495928440a181ca1ccf6719", size = 148229 },
74
+ { url = "https://files.pythonhosted.org/packages/9d/be/5708ad18161dee7dc6a0f7e6cf3a88ea6279c3e8484844c0590e50e803ef/charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:84450ba661fb96e9fd67629b93d2941c871ca86fc38d835d19d4225ff946a631", size = 151556 },
75
+ { url = "https://files.pythonhosted.org/packages/5a/bb/3d8bc22bacb9eb89785e83e6723f9888265f3a0de3b9ce724d66bd49884e/charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:44aeb140295a2f0659e113b31cfe92c9061622cadbc9e2a2f7b8ef6b1e29ef4b", size = 149772 },
76
+ { url = "https://files.pythonhosted.org/packages/f7/fa/d3fc622de05a86f30beea5fc4e9ac46aead4731e73fd9055496732bcc0a4/charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:1db4e7fefefd0f548d73e2e2e041f9df5c59e178b4c72fbac4cc6f535cfb1565", size = 144800 },
77
+ { url = "https://files.pythonhosted.org/packages/9a/65/bdb9bc496d7d190d725e96816e20e2ae3a6fa42a5cac99c3c3d6ff884118/charset_normalizer-3.4.0-cp312-cp312-win32.whl", hash = "sha256:5726cf76c982532c1863fb64d8c6dd0e4c90b6ece9feb06c9f202417a31f7dd7", size = 94836 },
78
+ { url = "https://files.pythonhosted.org/packages/3e/67/7b72b69d25b89c0b3cea583ee372c43aa24df15f0e0f8d3982c57804984b/charset_normalizer-3.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:b197e7094f232959f8f20541ead1d9862ac5ebea1d58e9849c1bf979255dfac9", size = 102187 },
46
79
  { url = "https://files.pythonhosted.org/packages/f3/89/68a4c86f1a0002810a27f12e9a7b22feb198c59b2f05231349fbce5c06f4/charset_normalizer-3.4.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:dd4eda173a9fcccb5f2e2bd2a9f423d180194b1bf17cf59e3269899235b2a114", size = 194617 },
47
80
  { url = "https://files.pythonhosted.org/packages/4f/cd/8947fe425e2ab0aa57aceb7807af13a0e4162cd21eee42ef5b053447edf5/charset_normalizer-3.4.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e9e3c4c9e1ed40ea53acf11e2a386383c3304212c965773704e4603d589343ed", size = 125310 },
48
81
  { url = "https://files.pythonhosted.org/packages/5b/f0/b5263e8668a4ee9becc2b451ed909e9c27058337fda5b8c49588183c267a/charset_normalizer-3.4.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:92a7e36b000bf022ef3dbb9c46bfe2d52c047d5e3f3343f43204263c5addc250", size = 119126 },
@@ -88,6 +121,16 @@ version = "7.6.8"
88
121
  source = { registry = "https://pypi.org/simple" }
89
122
  sdist = { url = "https://files.pythonhosted.org/packages/ab/75/aecfd0a3adbec6e45753976bc2a9fed62b42cea9a206d10fd29244a77953/coverage-7.6.8.tar.gz", hash = "sha256:8b2b8503edb06822c86d82fa64a4a5cb0760bb8f31f26e138ec743f422f37cfc", size = 801425 }
90
123
  wheels = [
124
+ { url = "https://files.pythonhosted.org/packages/76/ce/3edf581c8fe429ed8ced6e6d9ac693c25975ef9093413276dab6ed68a80a/coverage-7.6.8-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:e683e6ecc587643f8cde8f5da6768e9d165cd31edf39ee90ed7034f9ca0eefee", size = 207285 },
125
+ { url = "https://files.pythonhosted.org/packages/09/9c/cf102ab046c9cf8895c3f7aadcde6f489a4b2ec326757e8c6e6581829b5e/coverage-7.6.8-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1defe91d41ce1bd44b40fabf071e6a01a5aa14de4a31b986aa9dfd1b3e3e414a", size = 207522 },
126
+ { url = "https://files.pythonhosted.org/packages/39/06/42aa6dd13dbfca72e1fd8ffccadbc921b6e75db34545ebab4d955d1e7ad3/coverage-7.6.8-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7ad66e8e50225ebf4236368cc43c37f59d5e6728f15f6e258c8639fa0dd8e6d", size = 240543 },
127
+ { url = "https://files.pythonhosted.org/packages/a0/20/2932971dc215adeca8eeff446266a7fef17a0c238e881ffedebe7bfa0669/coverage-7.6.8-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3fe47da3e4fda5f1abb5709c156eca207eacf8007304ce3019eb001e7a7204cb", size = 237577 },
128
+ { url = "https://files.pythonhosted.org/packages/ac/85/4323ece0cd5452c9522f4b6e5cc461e6c7149a4b1887c9e7a8b1f4e51146/coverage-7.6.8-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:202a2d645c5a46b84992f55b0a3affe4f0ba6b4c611abec32ee88358db4bb649", size = 239646 },
129
+ { url = "https://files.pythonhosted.org/packages/77/52/b2537487d8f36241e518e84db6f79e26bc3343b14844366e35b090fae0d4/coverage-7.6.8-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:4674f0daa1823c295845b6a740d98a840d7a1c11df00d1fd62614545c1583787", size = 239128 },
130
+ { url = "https://files.pythonhosted.org/packages/7c/99/7f007762012186547d0ecc3d328da6b6f31a8c99f05dc1e13dcd929918cd/coverage-7.6.8-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:74610105ebd6f33d7c10f8907afed696e79c59e3043c5f20eaa3a46fddf33b4c", size = 237434 },
131
+ { url = "https://files.pythonhosted.org/packages/97/53/e9b5cf0682a1cab9352adfac73caae0d77ae1d65abc88975d510f7816389/coverage-7.6.8-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:37cda8712145917105e07aab96388ae76e787270ec04bcb9d5cc786d7cbb8443", size = 239095 },
132
+ { url = "https://files.pythonhosted.org/packages/0c/50/054f0b464fbae0483217186478eefa2e7df3a79917ed7f1d430b6da2cf0d/coverage-7.6.8-cp312-cp312-win32.whl", hash = "sha256:9e89d5c8509fbd6c03d0dd1972925b22f50db0792ce06324ba069f10787429ad", size = 209895 },
133
+ { url = "https://files.pythonhosted.org/packages/df/d0/09ba870360a27ecf09e177ca2ff59d4337fc7197b456f22ceff85cffcfa5/coverage-7.6.8-cp312-cp312-win_amd64.whl", hash = "sha256:379c111d3558272a2cae3d8e57e6b6e6f4fe652905692d54bad5ea0ca37c5ad4", size = 210684 },
91
134
  { url = "https://files.pythonhosted.org/packages/9a/84/6f0ccf94a098ac3d6d6f236bd3905eeac049a9e0efcd9a63d4feca37ac4b/coverage-7.6.8-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:0b0c69f4f724c64dfbfe79f5dfb503b42fe6127b8d479b2677f2b227478db2eb", size = 207313 },
92
135
  { url = "https://files.pythonhosted.org/packages/db/2b/e3b3a3a12ebec738c545897ac9f314620470fcbc368cdac88cf14974ba20/coverage-7.6.8-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:c15b32a7aca8038ed7644f854bf17b663bc38e1671b5d6f43f9a2b2bd0c46f63", size = 207574 },
93
136
  { url = "https://files.pythonhosted.org/packages/db/c0/5bf95d42b6a8d21dfce5025ce187f15db57d6460a59b67a95fe8728162f1/coverage-7.6.8-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:63068a11171e4276f6ece913bde059e77c713b48c3a848814a6537f35afb8365", size = 240090 },
@@ -228,6 +271,16 @@ version = "3.0.2"
228
271
  source = { registry = "https://pypi.org/simple" }
229
272
  sdist = { url = "https://files.pythonhosted.org/packages/b2/97/5d42485e71dfc078108a86d6de8fa46db44a1a9295e89c5d6d4a06e23a62/markupsafe-3.0.2.tar.gz", hash = "sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0", size = 20537 }
230
273
  wheels = [
274
+ { url = "https://files.pythonhosted.org/packages/22/09/d1f21434c97fc42f09d290cbb6350d44eb12f09cc62c9476effdb33a18aa/MarkupSafe-3.0.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:9778bd8ab0a994ebf6f84c2b949e65736d5575320a17ae8984a77fab08db94cf", size = 14274 },
275
+ { url = "https://files.pythonhosted.org/packages/6b/b0/18f76bba336fa5aecf79d45dcd6c806c280ec44538b3c13671d49099fdd0/MarkupSafe-3.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:846ade7b71e3536c4e56b386c2a47adf5741d2d8b94ec9dc3e92e5e1ee1e2225", size = 12348 },
276
+ { url = "https://files.pythonhosted.org/packages/e0/25/dd5c0f6ac1311e9b40f4af06c78efde0f3b5cbf02502f8ef9501294c425b/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1c99d261bd2d5f6b59325c92c73df481e05e57f19837bdca8413b9eac4bd8028", size = 24149 },
277
+ { url = "https://files.pythonhosted.org/packages/f3/f0/89e7aadfb3749d0f52234a0c8c7867877876e0a20b60e2188e9850794c17/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e17c96c14e19278594aa4841ec148115f9c7615a47382ecb6b82bd8fea3ab0c8", size = 23118 },
278
+ { url = "https://files.pythonhosted.org/packages/d5/da/f2eeb64c723f5e3777bc081da884b414671982008c47dcc1873d81f625b6/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:88416bd1e65dcea10bc7569faacb2c20ce071dd1f87539ca2ab364bf6231393c", size = 22993 },
279
+ { url = "https://files.pythonhosted.org/packages/da/0e/1f32af846df486dce7c227fe0f2398dc7e2e51d4a370508281f3c1c5cddc/MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2181e67807fc2fa785d0592dc2d6206c019b9502410671cc905d132a92866557", size = 24178 },
280
+ { url = "https://files.pythonhosted.org/packages/c4/f6/bb3ca0532de8086cbff5f06d137064c8410d10779c4c127e0e47d17c0b71/MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:52305740fe773d09cffb16f8ed0427942901f00adedac82ec8b67752f58a1b22", size = 23319 },
281
+ { url = "https://files.pythonhosted.org/packages/a2/82/8be4c96ffee03c5b4a034e60a31294daf481e12c7c43ab8e34a1453ee48b/MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ad10d3ded218f1039f11a75f8091880239651b52e9bb592ca27de44eed242a48", size = 23352 },
282
+ { url = "https://files.pythonhosted.org/packages/51/ae/97827349d3fcffee7e184bdf7f41cd6b88d9919c80f0263ba7acd1bbcb18/MarkupSafe-3.0.2-cp312-cp312-win32.whl", hash = "sha256:0f4ca02bea9a23221c0182836703cbf8930c5e9454bacce27e767509fa286a30", size = 15097 },
283
+ { url = "https://files.pythonhosted.org/packages/c1/80/a61f99dc3a936413c3ee4e1eecac96c0da5ed07ad56fd975f1a9da5bc630/MarkupSafe-3.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:8e06879fc22a25ca47312fbe7c8264eb0b662f6db27cb2d3bbbc74b1df4b9b87", size = 15601 },
231
284
  { url = "https://files.pythonhosted.org/packages/83/0e/67eb10a7ecc77a0c2bbe2b0235765b98d164d81600746914bebada795e97/MarkupSafe-3.0.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ba9527cdd4c926ed0760bc301f6728ef34d841f405abf9d4f959c478421e4efd", size = 14274 },
232
285
  { url = "https://files.pythonhosted.org/packages/2b/6d/9409f3684d3335375d04e5f05744dfe7e9f120062c9857df4ab490a1031a/MarkupSafe-3.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f8b3d067f2e40fe93e1ccdd6b2e1d16c43140e76f02fb1319a05cf2b79d99430", size = 12352 },
233
286
  { url = "https://files.pythonhosted.org/packages/d2/f5/6eadfcd3885ea85fe2a7c128315cc1bb7241e1987443d78c8fe712d03091/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:569511d3b58c8791ab4c2e1285575265991e6d8f8700c7be0e88f86cb0672094", size = 24122 },
@@ -472,6 +525,18 @@ wheels = [
472
525
  { url = "https://files.pythonhosted.org/packages/53/32/95a164ddf533bd676cbbe878e36e89b4ade3efde8dd61d0148c90cbbe57e/pymdown_extensions-10.12-py3-none-any.whl", hash = "sha256:49f81412242d3527b8b4967b990df395c89563043bc51a3d2d7d500e52123b77", size = 263448 },
473
526
  ]
474
527
 
528
+ [[package]]
529
+ name = "pyproject-api"
530
+ version = "1.8.0"
531
+ source = { registry = "https://pypi.org/simple" }
532
+ dependencies = [
533
+ { name = "packaging" },
534
+ ]
535
+ sdist = { url = "https://files.pythonhosted.org/packages/bb/19/441e0624a8afedd15bbcce96df1b80479dd0ff0d965f5ce8fde4f2f6ffad/pyproject_api-1.8.0.tar.gz", hash = "sha256:77b8049f2feb5d33eefcc21b57f1e279636277a8ac8ad6b5871037b243778496", size = 22340 }
536
+ wheels = [
537
+ { url = "https://files.pythonhosted.org/packages/ba/f4/3c4ddfcc0c19c217c6de513842d286de8021af2f2ab79bbb86c00342d778/pyproject_api-1.8.0-py3-none-any.whl", hash = "sha256:3d7d347a047afe796fd5d1885b1e391ba29be7169bd2f102fcd378f04273d228", size = 13100 },
538
+ ]
539
+
475
540
  [[package]]
476
541
  name = "pytest"
477
542
  version = "8.3.3"
@@ -531,6 +596,15 @@ version = "6.0.2"
531
596
  source = { registry = "https://pypi.org/simple" }
532
597
  sdist = { url = "https://files.pythonhosted.org/packages/54/ed/79a089b6be93607fa5cdaedf301d7dfb23af5f25c398d5ead2525b063e17/pyyaml-6.0.2.tar.gz", hash = "sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e", size = 130631 }
533
598
  wheels = [
599
+ { url = "https://files.pythonhosted.org/packages/86/0c/c581167fc46d6d6d7ddcfb8c843a4de25bdd27e4466938109ca68492292c/PyYAML-6.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c70c95198c015b85feafc136515252a261a84561b7b1d51e3384e0655ddf25ab", size = 183873 },
600
+ { url = "https://files.pythonhosted.org/packages/a8/0c/38374f5bb272c051e2a69281d71cba6fdb983413e6758b84482905e29a5d/PyYAML-6.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725", size = 173302 },
601
+ { url = "https://files.pythonhosted.org/packages/c3/93/9916574aa8c00aa06bbac729972eb1071d002b8e158bd0e83a3b9a20a1f7/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f71ea527786de97d1a0cc0eacd1defc0985dcf6b3f17bb77dcfc8c34bec4dc5", size = 739154 },
602
+ { url = "https://files.pythonhosted.org/packages/95/0f/b8938f1cbd09739c6da569d172531567dbcc9789e0029aa070856f123984/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9b22676e8097e9e22e36d6b7bda33190d0d400f345f23d4065d48f4ca7ae0425", size = 766223 },
603
+ { url = "https://files.pythonhosted.org/packages/b9/2b/614b4752f2e127db5cc206abc23a8c19678e92b23c3db30fc86ab731d3bd/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80bab7bfc629882493af4aa31a4cfa43a4c57c83813253626916b8c7ada83476", size = 767542 },
604
+ { url = "https://files.pythonhosted.org/packages/d4/00/dd137d5bcc7efea1836d6264f049359861cf548469d18da90cd8216cf05f/PyYAML-6.0.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48", size = 731164 },
605
+ { url = "https://files.pythonhosted.org/packages/c9/1f/4f998c900485e5c0ef43838363ba4a9723ac0ad73a9dc42068b12aaba4e4/PyYAML-6.0.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b", size = 756611 },
606
+ { url = "https://files.pythonhosted.org/packages/df/d1/f5a275fdb252768b7a11ec63585bc38d0e87c9e05668a139fea92b80634c/PyYAML-6.0.2-cp312-cp312-win32.whl", hash = "sha256:ef6107725bd54b262d6dedcc2af448a266975032bc85ef0172c5f059da6325b4", size = 140591 },
607
+ { url = "https://files.pythonhosted.org/packages/0c/e8/4f648c598b17c3d06e8753d7d13d57542b30d56e6c2dedf9c331ae56312e/PyYAML-6.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8", size = 156338 },
534
608
  { url = "https://files.pythonhosted.org/packages/ef/e3/3af305b830494fa85d95f6d95ef7fa73f2ee1cc8ef5b495c7c3269fb835f/PyYAML-6.0.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba", size = 181309 },
535
609
  { url = "https://files.pythonhosted.org/packages/45/9f/3b1c20a0b7a3200524eb0076cc027a970d320bd3a6592873c85c92a08731/PyYAML-6.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1", size = 171679 },
536
610
  { url = "https://files.pythonhosted.org/packages/7c/9a/337322f27005c33bcb656c655fa78325b730324c78620e8328ae28b64d0c/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133", size = 733428 },
@@ -560,6 +634,21 @@ version = "2024.11.6"
560
634
  source = { registry = "https://pypi.org/simple" }
561
635
  sdist = { url = "https://files.pythonhosted.org/packages/8e/5f/bd69653fbfb76cf8604468d3b4ec4c403197144c7bfe0e6a5fc9e02a07cb/regex-2024.11.6.tar.gz", hash = "sha256:7ab159b063c52a0333c884e4679f8d7a85112ee3078fe3d9004b2dd875585519", size = 399494 }
562
636
  wheels = [
637
+ { url = "https://files.pythonhosted.org/packages/ba/30/9a87ce8336b172cc232a0db89a3af97929d06c11ceaa19d97d84fa90a8f8/regex-2024.11.6-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:52fb28f528778f184f870b7cf8f225f5eef0a8f6e3778529bdd40c7b3920796a", size = 483781 },
638
+ { url = "https://files.pythonhosted.org/packages/01/e8/00008ad4ff4be8b1844786ba6636035f7ef926db5686e4c0f98093612add/regex-2024.11.6-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:fdd6028445d2460f33136c55eeb1f601ab06d74cb3347132e1c24250187500d9", size = 288455 },
639
+ { url = "https://files.pythonhosted.org/packages/60/85/cebcc0aff603ea0a201667b203f13ba75d9fc8668fab917ac5b2de3967bc/regex-2024.11.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:805e6b60c54bf766b251e94526ebad60b7de0c70f70a4e6210ee2891acb70bf2", size = 284759 },
640
+ { url = "https://files.pythonhosted.org/packages/94/2b/701a4b0585cb05472a4da28ee28fdfe155f3638f5e1ec92306d924e5faf0/regex-2024.11.6-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b85c2530be953a890eaffde05485238f07029600e8f098cdf1848d414a8b45e4", size = 794976 },
641
+ { url = "https://files.pythonhosted.org/packages/4b/bf/fa87e563bf5fee75db8915f7352e1887b1249126a1be4813837f5dbec965/regex-2024.11.6-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bb26437975da7dc36b7efad18aa9dd4ea569d2357ae6b783bf1118dabd9ea577", size = 833077 },
642
+ { url = "https://files.pythonhosted.org/packages/a1/56/7295e6bad94b047f4d0834e4779491b81216583c00c288252ef625c01d23/regex-2024.11.6-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:abfa5080c374a76a251ba60683242bc17eeb2c9818d0d30117b4486be10c59d3", size = 823160 },
643
+ { url = "https://files.pythonhosted.org/packages/fb/13/e3b075031a738c9598c51cfbc4c7879e26729c53aa9cca59211c44235314/regex-2024.11.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70b7fa6606c2881c1db9479b0eaa11ed5dfa11c8d60a474ff0e095099f39d98e", size = 796896 },
644
+ { url = "https://files.pythonhosted.org/packages/24/56/0b3f1b66d592be6efec23a795b37732682520b47c53da5a32c33ed7d84e3/regex-2024.11.6-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0c32f75920cf99fe6b6c539c399a4a128452eaf1af27f39bce8909c9a3fd8cbe", size = 783997 },
645
+ { url = "https://files.pythonhosted.org/packages/f9/a1/eb378dada8b91c0e4c5f08ffb56f25fcae47bf52ad18f9b2f33b83e6d498/regex-2024.11.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:982e6d21414e78e1f51cf595d7f321dcd14de1f2881c5dc6a6e23bbbbd68435e", size = 781725 },
646
+ { url = "https://files.pythonhosted.org/packages/83/f2/033e7dec0cfd6dda93390089864732a3409246ffe8b042e9554afa9bff4e/regex-2024.11.6-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:a7c2155f790e2fb448faed6dd241386719802296ec588a8b9051c1f5c481bc29", size = 789481 },
647
+ { url = "https://files.pythonhosted.org/packages/83/23/15d4552ea28990a74e7696780c438aadd73a20318c47e527b47a4a5a596d/regex-2024.11.6-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:149f5008d286636e48cd0b1dd65018548944e495b0265b45e1bffecce1ef7f39", size = 852896 },
648
+ { url = "https://files.pythonhosted.org/packages/e3/39/ed4416bc90deedbfdada2568b2cb0bc1fdb98efe11f5378d9892b2a88f8f/regex-2024.11.6-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:e5364a4502efca094731680e80009632ad6624084aff9a23ce8c8c6820de3e51", size = 860138 },
649
+ { url = "https://files.pythonhosted.org/packages/93/2d/dd56bb76bd8e95bbce684326302f287455b56242a4f9c61f1bc76e28360e/regex-2024.11.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:0a86e7eeca091c09e021db8eb72d54751e527fa47b8d5787caf96d9831bd02ad", size = 787692 },
650
+ { url = "https://files.pythonhosted.org/packages/0b/55/31877a249ab7a5156758246b9c59539abbeba22461b7d8adc9e8475ff73e/regex-2024.11.6-cp312-cp312-win32.whl", hash = "sha256:32f9a4c643baad4efa81d549c2aadefaeba12249b2adc5af541759237eee1c54", size = 262135 },
651
+ { url = "https://files.pythonhosted.org/packages/38/ec/ad2d7de49a600cdb8dd78434a1aeffe28b9d6fc42eb36afab4a27ad23384/regex-2024.11.6-cp312-cp312-win_amd64.whl", hash = "sha256:a93c194e2df18f7d264092dc8539b8ffb86b45b899ab976aa15d48214138e81b", size = 273567 },
563
652
  { url = "https://files.pythonhosted.org/packages/90/73/bcb0e36614601016552fa9344544a3a2ae1809dc1401b100eab02e772e1f/regex-2024.11.6-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:a6ba92c0bcdf96cbf43a12c717eae4bc98325ca3730f6b130ffa2e3c3c723d84", size = 483525 },
564
653
  { url = "https://files.pythonhosted.org/packages/0f/3f/f1a082a46b31e25291d830b369b6b0c5576a6f7fb89d3053a354c24b8a83/regex-2024.11.6-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:525eab0b789891ac3be914d36893bdf972d483fe66551f79d3e27146191a37d4", size = 288324 },
565
654
  { url = "https://files.pythonhosted.org/packages/09/c9/4e68181a4a652fb3ef5099e077faf4fd2a694ea6e0f806a7737aff9e758a/regex-2024.11.6-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:086a27a0b4ca227941700e0b31425e7a28ef1ae8e5e05a33826e17e47fbfdba0", size = 284617 },
@@ -628,7 +717,7 @@ wheels = [
628
717
 
629
718
  [[package]]
630
719
  name = "sonolus-py"
631
- version = "0.1.7"
720
+ version = "0.1.8"
632
721
  source = { editable = "." }
633
722
 
634
723
  [package.dev-dependencies]
@@ -639,6 +728,8 @@ dev = [
639
728
  { name = "pytest-cov" },
640
729
  { name = "pytest-xdist" },
641
730
  { name = "ruff" },
731
+ { name = "tox" },
732
+ { name = "tox-uv" },
642
733
  ]
643
734
  docs = [
644
735
  { name = "mkdocs" },
@@ -656,6 +747,8 @@ dev = [
656
747
  { name = "pytest-cov", specifier = ">=6.0.0" },
657
748
  { name = "pytest-xdist", specifier = ">=3.6.1" },
658
749
  { name = "ruff", specifier = ">=0.6.9" },
750
+ { name = "tox", specifier = ">=4.23.2" },
751
+ { name = "tox-uv", specifier = ">=1.16.0" },
659
752
  ]
660
753
  docs = [
661
754
  { name = "mkdocs", specifier = ">=1.6.1" },
@@ -672,6 +765,40 @@ wheels = [
672
765
  { url = "https://files.pythonhosted.org/packages/32/46/9cb0e58b2deb7f82b84065f37f3bffeb12413f947f9388e4cac22c4621ce/sortedcontainers-2.4.0-py2.py3-none-any.whl", hash = "sha256:a163dcaede0f1c021485e957a39245190e74249897e2ae4b2aa38595db237ee0", size = 29575 },
673
766
  ]
674
767
 
768
+ [[package]]
769
+ name = "tox"
770
+ version = "4.23.2"
771
+ source = { registry = "https://pypi.org/simple" }
772
+ dependencies = [
773
+ { name = "cachetools" },
774
+ { name = "chardet" },
775
+ { name = "colorama" },
776
+ { name = "filelock" },
777
+ { name = "packaging" },
778
+ { name = "platformdirs" },
779
+ { name = "pluggy" },
780
+ { name = "pyproject-api" },
781
+ { name = "virtualenv" },
782
+ ]
783
+ sdist = { url = "https://files.pythonhosted.org/packages/1f/86/32b10f91b4b975a37ac402b0f9fa016775088e0565c93602ba0b3c729ce8/tox-4.23.2.tar.gz", hash = "sha256:86075e00e555df6e82e74cfc333917f91ecb47ffbc868dcafbd2672e332f4a2c", size = 189998 }
784
+ wheels = [
785
+ { url = "https://files.pythonhosted.org/packages/af/c0/124b73d01c120e917383bc6c53ebc34efdf7243faa9fca64d105c94cf2ab/tox-4.23.2-py3-none-any.whl", hash = "sha256:452bc32bb031f2282881a2118923176445bac783ab97c874b8770ab4c3b76c38", size = 166758 },
786
+ ]
787
+
788
+ [[package]]
789
+ name = "tox-uv"
790
+ version = "1.16.0"
791
+ source = { registry = "https://pypi.org/simple" }
792
+ dependencies = [
793
+ { name = "packaging" },
794
+ { name = "tox" },
795
+ { name = "uv" },
796
+ ]
797
+ sdist = { url = "https://files.pythonhosted.org/packages/ed/5e/c3d2a45ab5465dddbbc267a589c9cfce23b91750d49af10738a08c98534e/tox_uv-1.16.0.tar.gz", hash = "sha256:71b2e2fa6c35c1360b91a302df1d65b3e5a1f656b321c5ebf7b84545804c9f01", size = 16337 }
798
+ wheels = [
799
+ { url = "https://files.pythonhosted.org/packages/ad/8d/1baa9f725ddd4824708759cf7b74bc43379f5f7feb079fde0629d7b32b3e/tox_uv-1.16.0-py3-none-any.whl", hash = "sha256:e6f0b525a687e745ab878d07cbf5c7e85d582028d4a7c8935f95e84350651432", size = 13661 },
800
+ ]
801
+
675
802
  [[package]]
676
803
  name = "urllib3"
677
804
  version = "2.2.3"
@@ -681,6 +808,31 @@ wheels = [
681
808
  { url = "https://files.pythonhosted.org/packages/ce/d9/5f4c13cecde62396b0d3fe530a50ccea91e7dfc1ccf0e09c228841bb5ba8/urllib3-2.2.3-py3-none-any.whl", hash = "sha256:ca899ca043dcb1bafa3e262d73aa25c465bfb49e0bd9dd5d59f1d0acba2f8fac", size = 126338 },
682
809
  ]
683
810
 
811
+ [[package]]
812
+ name = "uv"
813
+ version = "0.5.5"
814
+ source = { registry = "https://pypi.org/simple" }
815
+ sdist = { url = "https://files.pythonhosted.org/packages/46/95/ba000f161640015c9f2ecc2681f38eb161b8edac600a0451b36e4ad15aa4/uv-0.5.5.tar.gz", hash = "sha256:7f8db4bdf7eaef6be271457c4b2a167f41ad115434944a09f5034018a29b4093", size = 2324705 }
816
+ wheels = [
817
+ { url = "https://files.pythonhosted.org/packages/6d/91/ac61feea1b11e4dc342a4fd174f311b628a04ec3b4614a24676c4d214bd1/uv-0.5.5-py3-none-linux_armv6l.whl", hash = "sha256:d091e88a9c2c830169c3ccf95fd972759e0ab629dacc2d5eff525e5ba3583904", size = 13887911 },
818
+ { url = "https://files.pythonhosted.org/packages/84/18/461af22fd1f80f86548013639ab345810dbf35aa44dff1732c6faf311a48/uv-0.5.5-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:f0bfc7ced2fe0c85b3070dfa219072a1406133e18aab2f2fe10b6455ede0f8b2", size = 13900075 },
819
+ { url = "https://files.pythonhosted.org/packages/68/5f/7a236ad48f81c580691f9e5f28dd47289a9819f18410f12ee3c621791efd/uv-0.5.5-py3-none-macosx_11_0_arm64.whl", hash = "sha256:553901e95cb5a4da1da19e288c29c5f886793f981750400e5cef48e3031b970b", size = 12869530 },
820
+ { url = "https://files.pythonhosted.org/packages/94/d6/d6f441fd041fb4883332b999481896e28502b51681bcb786a001fb1e4a50/uv-0.5.5-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.musllinux_1_1_aarch64.whl", hash = "sha256:a4f0c7647187044056dc6f6f5d31b01f445d8695eb7d2f442b29fd5c9216a56f", size = 13158009 },
821
+ { url = "https://files.pythonhosted.org/packages/9b/3d/cc1e44e14266bbdb71eb020d14454f4f24f72fcc2eb84a52bf809e030918/uv-0.5.5-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:34e894c922ba29a59bbe812a458a7095a575f76b87dfc362e0c3f4f650d6f631", size = 13676515 },
822
+ { url = "https://files.pythonhosted.org/packages/10/5f/b81ed7ab715687a790b9b06a6f4e2781d7f7222840eead0392c3ef6f80ea/uv-0.5.5-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f5569798fc8eaad58fbb4fb70ced8f09ebe607fbbfb95fa42c559f57bbe0cabd", size = 14245499 },
823
+ { url = "https://files.pythonhosted.org/packages/f7/e1/ce5a88bc5ed61ee310a8e0acc3fa3032280bb2d49514fd48b801bb36f96f/uv-0.5.5-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:59d53cce11718ce5d5367afc8c93ebcfc5e1cddfa4a44aedbf08d08d9b738381", size = 14920230 },
824
+ { url = "https://files.pythonhosted.org/packages/03/84/6fa2deb5bed9dab815cb7f57e14885ecf8de22249b992f9c4ea5dd042c28/uv-0.5.5-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3dee9517ebba13d07d8f139c439c5ff63e438d31ebda4d7eb0af8d0f0cc6a181", size = 14701845 },
825
+ { url = "https://files.pythonhosted.org/packages/59/b2/7078d52a73c1e13d984c22fae1888993e5cd3f40cea029ab2666d79d92a7/uv-0.5.5-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:29286cd6b9f8e040d02894a67c6b6304811ea393ca9dfade109e93cf4b3b842c", size = 18963098 },
826
+ { url = "https://files.pythonhosted.org/packages/b9/89/a91d927574ce2103d22b7beab319468d915a1d04757cf82b6eaf79b56a10/uv-0.5.5-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0f7f04ae5a5430873d8610d8ea0a5d35df92e60bf701f80b3cf24857e0ac5e72", size = 14442788 },
827
+ { url = "https://files.pythonhosted.org/packages/46/3d/2c5a9d362771aeef13c2ba1c9b1267b469e11331b874486f03f6c6fc5eb1/uv-0.5.5-py3-none-manylinux_2_28_aarch64.whl", hash = "sha256:5a47345ccafc0105b2f0cc22fcb0bb05be4d0e60df67f5beea28069b0bb372c8", size = 13394955 },
828
+ { url = "https://files.pythonhosted.org/packages/cf/92/8d646385401472e7358cdf0fc86015edc9bf9132c9b79d7e2a11c300dd84/uv-0.5.5-py3-none-musllinux_1_1_armv7l.whl", hash = "sha256:b55d507bfe2bd2330c41680e4b0077972381f40975a59b53007254196abc4477", size = 13639522 },
829
+ { url = "https://files.pythonhosted.org/packages/da/23/5e00b71f9c8b9c16f0947bf84b71265bafdf24947d2e271a657da00a0c6a/uv-0.5.5-py3-none-musllinux_1_1_i686.whl", hash = "sha256:365715e7247c2cd8ef661e8f96927b181248f689c07e48b076c9dbc78a4a0877", size = 13957451 },
830
+ { url = "https://files.pythonhosted.org/packages/02/38/0c624a8d89416fa6c849c6670066c74f420aa898eafdf7cefd3adf77d686/uv-0.5.5-py3-none-musllinux_1_1_ppc64le.whl", hash = "sha256:0314a4b9a25bf00afe4e5472c338c8c6bd34688c23d63ce1ad35462cf087b492", size = 15840287 },
831
+ { url = "https://files.pythonhosted.org/packages/a8/bd/1a81700d2555be504f0b1ff82f86d666384805e354c8eec2fdf7558d0cf9/uv-0.5.5-py3-none-musllinux_1_1_x86_64.whl", hash = "sha256:f4e9ddcffc29f009f692cda699912b02f6a12089d741b71d2fcd0b181eb71c5d", size = 14560282 },
832
+ { url = "https://files.pythonhosted.org/packages/cd/71/c0b137c62a5a8ab5ecc0a8f505b77e5a05d5b94fd9da7560a247dac000f3/uv-0.5.5-py3-none-win32.whl", hash = "sha256:9af7018430da1f0960eee1592c820c343e2619f2d71f66c3be62da330826c537", size = 13810875 },
833
+ { url = "https://files.pythonhosted.org/packages/e3/d8/56dbbe07aba3cf561fff52b8ed75ce7b694a0710ab676fae4cd7fbf1bdae/uv-0.5.5-py3-none-win_amd64.whl", hash = "sha256:69e15f24493d86c3a2da3764891e35a033ceda09404c1f9b386671d509db95f3", size = 15604848 },
834
+ ]
835
+
684
836
  [[package]]
685
837
  name = "virtualenv"
686
838
  version = "20.26.6"
@@ -701,6 +853,9 @@ version = "6.0.0"
701
853
  source = { registry = "https://pypi.org/simple" }
702
854
  sdist = { url = "https://files.pythonhosted.org/packages/db/7d/7f3d619e951c88ed75c6037b246ddcf2d322812ee8ea189be89511721d54/watchdog-6.0.0.tar.gz", hash = "sha256:9ddf7c82fda3ae8e24decda1338ede66e1c99883db93711d8fb941eaa2d8c282", size = 131220 }
703
855
  wheels = [
856
+ { url = "https://files.pythonhosted.org/packages/39/ea/3930d07dafc9e286ed356a679aa02d777c06e9bfd1164fa7c19c288a5483/watchdog-6.0.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:bdd4e6f14b8b18c334febb9c4425a878a2ac20efd1e0b231978e7b150f92a948", size = 96471 },
857
+ { url = "https://files.pythonhosted.org/packages/12/87/48361531f70b1f87928b045df868a9fd4e253d9ae087fa4cf3f7113be363/watchdog-6.0.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:c7c15dda13c4eb00d6fb6fc508b3c0ed88b9d5d374056b239c4ad1611125c860", size = 88449 },
858
+ { url = "https://files.pythonhosted.org/packages/5b/7e/8f322f5e600812e6f9a31b75d242631068ca8f4ef0582dd3ae6e72daecc8/watchdog-6.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6f10cb2d5902447c7d0da897e2c6768bca89174d0c6e1e30abec5421af97a5b0", size = 89054 },
704
859
  { url = "https://files.pythonhosted.org/packages/68/98/b0345cabdce2041a01293ba483333582891a3bd5769b08eceb0d406056ef/watchdog-6.0.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:490ab2ef84f11129844c23fb14ecf30ef3d8a6abafd3754a6f75ca1e6654136c", size = 96480 },
705
860
  { url = "https://files.pythonhosted.org/packages/85/83/cdf13902c626b28eedef7ec4f10745c52aad8a8fe7eb04ed7b1f111ca20e/watchdog-6.0.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:76aae96b00ae814b181bb25b1b98076d5fc84e8a53cd8885a318b42b6d3a5134", size = 88451 },
706
861
  { url = "https://files.pythonhosted.org/packages/fe/c4/225c87bae08c8b9ec99030cd48ae9c4eca050a59bf5c2255853e18c87b50/watchdog-6.0.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a175f755fc2279e0b7312c0035d52e27211a5bc39719dd529625b1930917345b", size = 89057 },
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes