sonolus.py 0.4.0__tar.gz → 0.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.

Potentially problematic release.


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

Files changed (614) hide show
  1. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/PKG-INFO +1 -1
  2. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/doc_stubs/builtins.pyi +27 -87
  3. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/docs/concepts/constructs.md +5 -3
  4. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/docs/concepts/types.md +3 -6
  5. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/docs/index.md +8 -3
  6. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/docs/overview.md +19 -23
  7. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/pyproject.toml +2 -2
  8. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/sonolus/backend/utils.py +35 -40
  9. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/sonolus/backend/visitor.py +40 -6
  10. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/sonolus/build/cli.py +3 -3
  11. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/sonolus/build/compile.py +16 -1
  12. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/sonolus/script/archetype.py +21 -12
  13. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/sonolus/script/array.py +1 -1
  14. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/sonolus/script/containers.py +2 -2
  15. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/sonolus/script/easing.py +0 -1
  16. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/sonolus/script/effect.py +4 -2
  17. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/sonolus/script/globals.py +5 -2
  18. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/sonolus/script/internal/context.py +7 -1
  19. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/sonolus/script/internal/native.py +1 -1
  20. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/sonolus/script/iterator.py +18 -1
  21. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/sonolus/script/level.py +2 -2
  22. sonolus_py-0.4.2/sonolus/script/maybe.py +244 -0
  23. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/sonolus/script/num.py +12 -12
  24. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/sonolus/script/project.py +1 -1
  25. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/sonolus/script/record.py +36 -36
  26. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/sonolus/script/sprite.py +1 -1
  27. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/sonolus/script/stream.py +6 -5
  28. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/script/test_genexpr.py +40 -0
  29. sonolus_py-0.4.2/tests/script/test_maybe.py +240 -0
  30. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/uv.lock +1 -1
  31. sonolus_py-0.4.0/sonolus/script/maybe.py +0 -139
  32. sonolus_py-0.4.0/tests/script/test_maybe.py +0 -71
  33. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/.gitattributes +0 -0
  34. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/.github/workflows/publish.yaml +0 -0
  35. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/.gitignore +0 -0
  36. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/.python-version +0 -0
  37. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/.run/Python tests in tests.run.xml +0 -0
  38. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/LICENSE +0 -0
  39. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/README.md +0 -0
  40. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/doc_stubs/__init__.py +0 -0
  41. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/doc_stubs/math.pyi +0 -0
  42. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/doc_stubs/num.pyi +0 -0
  43. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/doc_stubs/random.pyi +0 -0
  44. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/docs/CNAME +0 -0
  45. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/docs/concepts/builtins.md +0 -0
  46. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/docs/concepts/cli.md +0 -0
  47. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/docs/concepts/index.md +0 -0
  48. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/docs/concepts/project.md +0 -0
  49. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/docs/concepts/resources.md +0 -0
  50. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/docs/reference/builtins.md +0 -0
  51. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/docs/reference/index.md +0 -0
  52. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/docs/reference/math.md +0 -0
  53. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/docs/reference/random.md +0 -0
  54. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/docs/reference/sonolus.script.archetype.md +0 -0
  55. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/docs/reference/sonolus.script.array.md +0 -0
  56. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/docs/reference/sonolus.script.array_like.md +0 -0
  57. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/docs/reference/sonolus.script.bucket.md +0 -0
  58. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/docs/reference/sonolus.script.containers.md +0 -0
  59. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/docs/reference/sonolus.script.debug.md +0 -0
  60. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/docs/reference/sonolus.script.easing.md +0 -0
  61. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/docs/reference/sonolus.script.effect.md +0 -0
  62. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/docs/reference/sonolus.script.engine.md +0 -0
  63. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/docs/reference/sonolus.script.globals.md +0 -0
  64. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/docs/reference/sonolus.script.instruction.md +0 -0
  65. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/docs/reference/sonolus.script.interval.md +0 -0
  66. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/docs/reference/sonolus.script.iterator.md +0 -0
  67. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/docs/reference/sonolus.script.level.md +0 -0
  68. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/docs/reference/sonolus.script.maybe.md +0 -0
  69. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/docs/reference/sonolus.script.metadata.md +0 -0
  70. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/docs/reference/sonolus.script.num.md +0 -0
  71. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/docs/reference/sonolus.script.options.md +0 -0
  72. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/docs/reference/sonolus.script.particle.md +0 -0
  73. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/docs/reference/sonolus.script.printing.md +0 -0
  74. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/docs/reference/sonolus.script.project.md +0 -0
  75. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/docs/reference/sonolus.script.quad.md +0 -0
  76. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/docs/reference/sonolus.script.record.md +0 -0
  77. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/docs/reference/sonolus.script.runtime.md +0 -0
  78. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/docs/reference/sonolus.script.sprite.md +0 -0
  79. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/docs/reference/sonolus.script.stream.md +0 -0
  80. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/docs/reference/sonolus.script.text.md +0 -0
  81. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/docs/reference/sonolus.script.timing.md +0 -0
  82. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/docs/reference/sonolus.script.transform.md +0 -0
  83. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/docs/reference/sonolus.script.ui.md +0 -0
  84. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/docs/reference/sonolus.script.values.md +0 -0
  85. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/docs/reference/sonolus.script.vec.md +0 -0
  86. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/mkdocs.yml +0 -0
  87. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/scripts/generate.py +0 -0
  88. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/scripts/runtimes/Engine/Tutorial/Blocks.json +0 -0
  89. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/scripts/runtimes/Functions.json +0 -0
  90. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/scripts/runtimes/Level/Play/Blocks.json +0 -0
  91. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/scripts/runtimes/Level/Preview/Blocks.json +0 -0
  92. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/scripts/runtimes/Level/Watch/Blocks.json +0 -0
  93. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/sonolus/__init__.py +0 -0
  94. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/sonolus/backend/__init__.py +0 -0
  95. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/sonolus/backend/blocks.py +0 -0
  96. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/sonolus/backend/excepthook.py +0 -0
  97. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/sonolus/backend/finalize.py +0 -0
  98. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/sonolus/backend/interpret.py +0 -0
  99. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/sonolus/backend/ir.py +0 -0
  100. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/sonolus/backend/mode.py +0 -0
  101. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/sonolus/backend/node.py +0 -0
  102. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/sonolus/backend/ops.py +0 -0
  103. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/sonolus/backend/optimize/__init__.py +0 -0
  104. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/sonolus/backend/optimize/allocate.py +0 -0
  105. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/sonolus/backend/optimize/constant_evaluation.py +0 -0
  106. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/sonolus/backend/optimize/copy_coalesce.py +0 -0
  107. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/sonolus/backend/optimize/dead_code.py +0 -0
  108. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/sonolus/backend/optimize/dominance.py +0 -0
  109. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/sonolus/backend/optimize/flow.py +0 -0
  110. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/sonolus/backend/optimize/inlining.py +0 -0
  111. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/sonolus/backend/optimize/liveness.py +0 -0
  112. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/sonolus/backend/optimize/optimize.py +0 -0
  113. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/sonolus/backend/optimize/passes.py +0 -0
  114. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/sonolus/backend/optimize/simplify.py +0 -0
  115. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/sonolus/backend/optimize/ssa.py +0 -0
  116. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/sonolus/backend/place.py +0 -0
  117. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/sonolus/build/__init__.py +0 -0
  118. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/sonolus/build/collection.py +0 -0
  119. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/sonolus/build/engine.py +0 -0
  120. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/sonolus/build/level.py +0 -0
  121. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/sonolus/build/node.py +0 -0
  122. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/sonolus/build/project.py +0 -0
  123. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/sonolus/py.typed +0 -0
  124. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/sonolus/script/__init__.py +0 -0
  125. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/sonolus/script/array_like.py +0 -0
  126. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/sonolus/script/bucket.py +0 -0
  127. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/sonolus/script/debug.py +0 -0
  128. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/sonolus/script/engine.py +0 -0
  129. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/sonolus/script/instruction.py +0 -0
  130. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/sonolus/script/internal/__init__.py +0 -0
  131. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/sonolus/script/internal/builtin_impls.py +0 -0
  132. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/sonolus/script/internal/callbacks.py +0 -0
  133. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/sonolus/script/internal/constant.py +0 -0
  134. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/sonolus/script/internal/descriptor.py +0 -0
  135. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/sonolus/script/internal/dict_impl.py +0 -0
  136. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/sonolus/script/internal/error.py +0 -0
  137. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/sonolus/script/internal/generic.py +0 -0
  138. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/sonolus/script/internal/impl.py +0 -0
  139. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/sonolus/script/internal/introspection.py +0 -0
  140. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/sonolus/script/internal/math_impls.py +0 -0
  141. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/sonolus/script/internal/random.py +0 -0
  142. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/sonolus/script/internal/range.py +0 -0
  143. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/sonolus/script/internal/simulation_context.py +0 -0
  144. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/sonolus/script/internal/transient.py +0 -0
  145. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/sonolus/script/internal/tuple_impl.py +0 -0
  146. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/sonolus/script/internal/value.py +0 -0
  147. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/sonolus/script/interval.py +0 -0
  148. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/sonolus/script/metadata.py +0 -0
  149. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/sonolus/script/options.py +0 -0
  150. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/sonolus/script/particle.py +0 -0
  151. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/sonolus/script/pointer.py +0 -0
  152. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/sonolus/script/printing.py +0 -0
  153. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/sonolus/script/quad.py +0 -0
  154. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/sonolus/script/runtime.py +0 -0
  155. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/sonolus/script/text.py +0 -0
  156. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/sonolus/script/timing.py +0 -0
  157. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/sonolus/script/transform.py +0 -0
  158. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/sonolus/script/ui.py +0 -0
  159. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/sonolus/script/values.py +0 -0
  160. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/sonolus/script/vec.py +0 -0
  161. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/test_projects/pydori/__init__.py +0 -0
  162. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/test_projects/pydori/level.py +0 -0
  163. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/test_projects/pydori/lib/__init__.py +0 -0
  164. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/test_projects/pydori/lib/buckets.py +0 -0
  165. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/test_projects/pydori/lib/connector.py +0 -0
  166. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/test_projects/pydori/lib/effect.py +0 -0
  167. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/test_projects/pydori/lib/layer.py +0 -0
  168. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/test_projects/pydori/lib/layout.py +0 -0
  169. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/test_projects/pydori/lib/note.py +0 -0
  170. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/test_projects/pydori/lib/options.py +0 -0
  171. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/test_projects/pydori/lib/particle.py +0 -0
  172. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/test_projects/pydori/lib/skin.py +0 -0
  173. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/test_projects/pydori/lib/stage.py +0 -0
  174. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/test_projects/pydori/lib/streams.py +0 -0
  175. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/test_projects/pydori/lib/ui.py +0 -0
  176. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/test_projects/pydori/play/__init__.py +0 -0
  177. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/test_projects/pydori/play/connector.py +0 -0
  178. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/test_projects/pydori/play/event.py +0 -0
  179. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/test_projects/pydori/play/input.py +0 -0
  180. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/test_projects/pydori/play/mode.py +0 -0
  181. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/test_projects/pydori/play/note.py +0 -0
  182. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/test_projects/pydori/play/stage.py +0 -0
  183. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/test_projects/pydori/preview/__init__.py +0 -0
  184. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/test_projects/pydori/preview/connector.py +0 -0
  185. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/test_projects/pydori/preview/event.py +0 -0
  186. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/test_projects/pydori/preview/layout.py +0 -0
  187. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/test_projects/pydori/preview/mode.py +0 -0
  188. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/test_projects/pydori/preview/note.py +0 -0
  189. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/test_projects/pydori/preview/stage.py +0 -0
  190. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/test_projects/pydori/project.py +0 -0
  191. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/test_projects/pydori/tutorial/__init__.py +0 -0
  192. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/test_projects/pydori/tutorial/framework.py +0 -0
  193. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/test_projects/pydori/tutorial/instructions.py +0 -0
  194. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/test_projects/pydori/tutorial/intro.py +0 -0
  195. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/test_projects/pydori/tutorial/mode.py +0 -0
  196. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/test_projects/pydori/tutorial/navigate.py +0 -0
  197. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/test_projects/pydori/tutorial/painting.py +0 -0
  198. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/test_projects/pydori/tutorial/phases.py +0 -0
  199. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/test_projects/pydori/tutorial/preprocess.py +0 -0
  200. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/test_projects/pydori/tutorial/update.py +0 -0
  201. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/test_projects/pydori/watch/__init__.py +0 -0
  202. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/test_projects/pydori/watch/connector.py +0 -0
  203. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/test_projects/pydori/watch/event.py +0 -0
  204. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/test_projects/pydori/watch/mode.py +0 -0
  205. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/test_projects/pydori/watch/note.py +0 -0
  206. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/test_projects/pydori/watch/stage.py +0 -0
  207. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/test_projects/pydori/watch/update_spawn.py +0 -0
  208. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/__init__.py +0 -0
  209. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/__init__.py +0 -0
  210. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/conftest.py +0 -0
  211. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_hold_connector_should_spawn_cfg +0 -0
  212. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_hold_connector_should_spawn_fast_nodes +0 -0
  213. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_hold_connector_should_spawn_fast_optimized_cfg +0 -0
  214. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_hold_connector_should_spawn_standard_nodes +0 -0
  215. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_hold_connector_should_spawn_standard_optimized_cfg +0 -0
  216. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_hold_connector_spawn_order_cfg +0 -0
  217. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_hold_connector_spawn_order_fast_nodes +0 -0
  218. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_hold_connector_spawn_order_fast_optimized_cfg +0 -0
  219. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_hold_connector_spawn_order_standard_nodes +0 -0
  220. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_hold_connector_spawn_order_standard_optimized_cfg +0 -0
  221. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_hold_connector_update_parallel_cfg +0 -0
  222. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_hold_connector_update_parallel_fast_nodes +0 -0
  223. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_hold_connector_update_parallel_fast_optimized_cfg +0 -0
  224. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_hold_connector_update_parallel_standard_nodes +0 -0
  225. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_hold_connector_update_parallel_standard_optimized_cfg +0 -0
  226. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_hold_connector_update_sequential_cfg +0 -0
  227. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_hold_connector_update_sequential_fast_nodes +0 -0
  228. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_hold_connector_update_sequential_fast_optimized_cfg +0 -0
  229. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_hold_connector_update_sequential_standard_nodes +0 -0
  230. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_hold_connector_update_sequential_standard_optimized_cfg +0 -0
  231. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_hold_manager_touch_cfg +0 -0
  232. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_hold_manager_touch_fast_nodes +0 -0
  233. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_hold_manager_touch_fast_optimized_cfg +0 -0
  234. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_hold_manager_touch_standard_nodes +0 -0
  235. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_hold_manager_touch_standard_optimized_cfg +0 -0
  236. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_hold_manager_update_parallel_cfg +0 -0
  237. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_hold_manager_update_parallel_fast_nodes +0 -0
  238. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_hold_manager_update_parallel_fast_optimized_cfg +0 -0
  239. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_hold_manager_update_parallel_standard_nodes +0 -0
  240. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_hold_manager_update_parallel_standard_optimized_cfg +0 -0
  241. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_note_initialize_cfg +0 -0
  242. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_note_initialize_fast_nodes +0 -0
  243. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_note_initialize_fast_optimized_cfg +0 -0
  244. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_note_initialize_standard_nodes +0 -0
  245. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_note_initialize_standard_optimized_cfg +0 -0
  246. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_note_preprocess_cfg +0 -0
  247. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_note_preprocess_fast_nodes +0 -0
  248. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_note_preprocess_fast_optimized_cfg +0 -0
  249. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_note_preprocess_standard_nodes +0 -0
  250. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_note_preprocess_standard_optimized_cfg +0 -0
  251. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_note_should_spawn_cfg +0 -0
  252. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_note_should_spawn_fast_nodes +0 -0
  253. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_note_should_spawn_fast_optimized_cfg +0 -0
  254. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_note_should_spawn_standard_nodes +0 -0
  255. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_note_should_spawn_standard_optimized_cfg +0 -0
  256. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_note_spawn_order_cfg +0 -0
  257. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_note_spawn_order_fast_nodes +0 -0
  258. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_note_spawn_order_fast_optimized_cfg +0 -0
  259. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_note_spawn_order_standard_nodes +0 -0
  260. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_note_spawn_order_standard_optimized_cfg +0 -0
  261. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_note_terminate_cfg +0 -0
  262. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_note_terminate_fast_nodes +0 -0
  263. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_note_terminate_fast_optimized_cfg +0 -0
  264. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_note_terminate_standard_nodes +0 -0
  265. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_note_terminate_standard_optimized_cfg +0 -0
  266. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_note_touch_cfg +0 -0
  267. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_note_touch_fast_nodes +0 -0
  268. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_note_touch_fast_optimized_cfg +0 -0
  269. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_note_touch_standard_nodes +0 -0
  270. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_note_touch_standard_optimized_cfg +0 -0
  271. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_note_update_parallel_cfg +0 -0
  272. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_note_update_parallel_fast_nodes +0 -0
  273. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_note_update_parallel_fast_optimized_cfg +0 -0
  274. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_note_update_parallel_standard_nodes +0 -0
  275. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_note_update_parallel_standard_optimized_cfg +0 -0
  276. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_note_update_sequential_cfg +0 -0
  277. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_note_update_sequential_fast_nodes +0 -0
  278. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_note_update_sequential_fast_optimized_cfg +0 -0
  279. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_note_update_sequential_standard_nodes +0 -0
  280. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_note_update_sequential_standard_optimized_cfg +0 -0
  281. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_sim_line_should_spawn_cfg +0 -0
  282. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_sim_line_should_spawn_fast_nodes +0 -0
  283. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_sim_line_should_spawn_fast_optimized_cfg +0 -0
  284. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_sim_line_should_spawn_standard_nodes +0 -0
  285. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_sim_line_should_spawn_standard_optimized_cfg +0 -0
  286. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_sim_line_spawn_order_cfg +0 -0
  287. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_sim_line_spawn_order_fast_nodes +0 -0
  288. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_sim_line_spawn_order_fast_optimized_cfg +0 -0
  289. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_sim_line_spawn_order_standard_nodes +0 -0
  290. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_sim_line_spawn_order_standard_optimized_cfg +0 -0
  291. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_sim_line_update_parallel_cfg +0 -0
  292. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_sim_line_update_parallel_fast_nodes +0 -0
  293. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_sim_line_update_parallel_fast_optimized_cfg +0 -0
  294. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_sim_line_update_parallel_standard_nodes +0 -0
  295. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_sim_line_update_parallel_standard_optimized_cfg +0 -0
  296. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_stage_preprocess_cfg +0 -0
  297. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_stage_preprocess_fast_nodes +0 -0
  298. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_stage_preprocess_fast_optimized_cfg +0 -0
  299. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_stage_preprocess_standard_nodes +0 -0
  300. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_stage_preprocess_standard_optimized_cfg +0 -0
  301. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_stage_should_spawn_cfg +0 -0
  302. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_stage_should_spawn_fast_nodes +0 -0
  303. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_stage_should_spawn_fast_optimized_cfg +0 -0
  304. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_stage_should_spawn_standard_nodes +0 -0
  305. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_stage_should_spawn_standard_optimized_cfg +0 -0
  306. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_stage_spawn_order_cfg +0 -0
  307. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_stage_spawn_order_fast_nodes +0 -0
  308. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_stage_spawn_order_fast_optimized_cfg +0 -0
  309. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_stage_spawn_order_standard_nodes +0 -0
  310. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_stage_spawn_order_standard_optimized_cfg +0 -0
  311. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_stage_touch_cfg +0 -0
  312. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_stage_touch_fast_nodes +0 -0
  313. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_stage_touch_fast_optimized_cfg +0 -0
  314. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_stage_touch_standard_nodes +0 -0
  315. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_stage_touch_standard_optimized_cfg +0 -0
  316. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_stage_update_parallel_cfg +0 -0
  317. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_stage_update_parallel_fast_nodes +0 -0
  318. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_stage_update_parallel_fast_optimized_cfg +0 -0
  319. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_stage_update_parallel_standard_nodes +0 -0
  320. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_stage_update_parallel_standard_optimized_cfg +0 -0
  321. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_stage_update_sequential_cfg +0 -0
  322. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_stage_update_sequential_fast_nodes +0 -0
  323. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_stage_update_sequential_fast_optimized_cfg +0 -0
  324. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_stage_update_sequential_standard_nodes +0 -0
  325. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_stage_update_sequential_standard_optimized_cfg +0 -0
  326. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_unscored_note_initialize_cfg +0 -0
  327. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_unscored_note_initialize_fast_nodes +0 -0
  328. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_unscored_note_initialize_fast_optimized_cfg +0 -0
  329. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_unscored_note_initialize_standard_nodes +0 -0
  330. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_unscored_note_initialize_standard_optimized_cfg +0 -0
  331. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_unscored_note_preprocess_cfg +0 -0
  332. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_unscored_note_preprocess_fast_nodes +0 -0
  333. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_unscored_note_preprocess_fast_optimized_cfg +0 -0
  334. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_unscored_note_preprocess_standard_nodes +0 -0
  335. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_unscored_note_preprocess_standard_optimized_cfg +0 -0
  336. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_unscored_note_should_spawn_cfg +0 -0
  337. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_unscored_note_should_spawn_fast_nodes +0 -0
  338. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_unscored_note_should_spawn_fast_optimized_cfg +0 -0
  339. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_unscored_note_should_spawn_standard_nodes +0 -0
  340. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_unscored_note_should_spawn_standard_optimized_cfg +0 -0
  341. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_unscored_note_spawn_order_cfg +0 -0
  342. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_unscored_note_spawn_order_fast_nodes +0 -0
  343. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_unscored_note_spawn_order_fast_optimized_cfg +0 -0
  344. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_unscored_note_spawn_order_standard_nodes +0 -0
  345. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_unscored_note_spawn_order_standard_optimized_cfg +0 -0
  346. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_unscored_note_terminate_cfg +0 -0
  347. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_unscored_note_terminate_fast_nodes +0 -0
  348. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_unscored_note_terminate_fast_optimized_cfg +0 -0
  349. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_unscored_note_terminate_standard_nodes +0 -0
  350. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_unscored_note_terminate_standard_optimized_cfg +0 -0
  351. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_unscored_note_touch_cfg +0 -0
  352. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_unscored_note_touch_fast_nodes +0 -0
  353. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_unscored_note_touch_fast_optimized_cfg +0 -0
  354. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_unscored_note_touch_standard_nodes +0 -0
  355. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_unscored_note_touch_standard_optimized_cfg +0 -0
  356. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_unscored_note_update_parallel_cfg +0 -0
  357. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_unscored_note_update_parallel_fast_nodes +0 -0
  358. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_unscored_note_update_parallel_fast_optimized_cfg +0 -0
  359. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_unscored_note_update_parallel_standard_nodes +0 -0
  360. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_unscored_note_update_parallel_standard_optimized_cfg +0 -0
  361. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_unscored_note_update_sequential_cfg +0 -0
  362. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_unscored_note_update_sequential_fast_nodes +0 -0
  363. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_unscored_note_update_sequential_fast_optimized_cfg +0 -0
  364. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_unscored_note_update_sequential_standard_nodes +0 -0
  365. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_play_unscored_note_update_sequential_standard_optimized_cfg +0 -0
  366. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_preview_preview_bpm_change_preprocess_cfg +0 -0
  367. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_preview_preview_bpm_change_preprocess_fast_nodes +0 -0
  368. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_preview_preview_bpm_change_preprocess_fast_optimized_cfg +0 -0
  369. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_preview_preview_bpm_change_preprocess_standard_nodes +0 -0
  370. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_preview_preview_bpm_change_preprocess_standard_optimized_cfg +0 -0
  371. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_preview_preview_bpm_change_render_cfg +0 -0
  372. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_preview_preview_bpm_change_render_fast_nodes +0 -0
  373. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_preview_preview_bpm_change_render_fast_optimized_cfg +0 -0
  374. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_preview_preview_bpm_change_render_standard_nodes +0 -0
  375. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_preview_preview_bpm_change_render_standard_optimized_cfg +0 -0
  376. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_preview_preview_hold_connector_render_cfg +0 -0
  377. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_preview_preview_hold_connector_render_fast_nodes +0 -0
  378. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_preview_preview_hold_connector_render_fast_optimized_cfg +0 -0
  379. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_preview_preview_hold_connector_render_standard_nodes +0 -0
  380. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_preview_preview_hold_connector_render_standard_optimized_cfg +0 -0
  381. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_preview_preview_note_preprocess_cfg +0 -0
  382. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_preview_preview_note_preprocess_fast_nodes +0 -0
  383. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_preview_preview_note_preprocess_fast_optimized_cfg +0 -0
  384. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_preview_preview_note_preprocess_standard_nodes +0 -0
  385. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_preview_preview_note_preprocess_standard_optimized_cfg +0 -0
  386. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_preview_preview_note_render_cfg +0 -0
  387. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_preview_preview_note_render_fast_nodes +0 -0
  388. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_preview_preview_note_render_fast_optimized_cfg +0 -0
  389. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_preview_preview_note_render_standard_nodes +0 -0
  390. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_preview_preview_note_render_standard_optimized_cfg +0 -0
  391. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_preview_preview_sim_line_render_cfg +0 -0
  392. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_preview_preview_sim_line_render_fast_nodes +0 -0
  393. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_preview_preview_sim_line_render_fast_optimized_cfg +0 -0
  394. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_preview_preview_sim_line_render_standard_nodes +0 -0
  395. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_preview_preview_sim_line_render_standard_optimized_cfg +0 -0
  396. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_preview_preview_stage_preprocess_cfg +0 -0
  397. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_preview_preview_stage_preprocess_fast_nodes +0 -0
  398. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_preview_preview_stage_preprocess_fast_optimized_cfg +0 -0
  399. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_preview_preview_stage_preprocess_standard_nodes +0 -0
  400. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_preview_preview_stage_preprocess_standard_optimized_cfg +0 -0
  401. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_preview_preview_stage_render_cfg +0 -0
  402. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_preview_preview_stage_render_fast_nodes +0 -0
  403. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_preview_preview_stage_render_fast_optimized_cfg +0 -0
  404. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_preview_preview_stage_render_standard_nodes +0 -0
  405. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_preview_preview_stage_render_standard_optimized_cfg +0 -0
  406. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_preview_preview_timescale_change_preprocess_cfg +0 -0
  407. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_preview_preview_timescale_change_preprocess_fast_nodes +0 -0
  408. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_preview_preview_timescale_change_preprocess_fast_optimized_cfg +0 -0
  409. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_preview_preview_timescale_change_preprocess_standard_nodes +0 -0
  410. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_preview_preview_timescale_change_preprocess_standard_optimized_cfg +0 -0
  411. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_preview_preview_timescale_change_render_cfg +0 -0
  412. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_preview_preview_timescale_change_render_fast_nodes +0 -0
  413. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_preview_preview_timescale_change_render_fast_optimized_cfg +0 -0
  414. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_preview_preview_timescale_change_render_standard_nodes +0 -0
  415. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_preview_preview_timescale_change_render_standard_optimized_cfg +0 -0
  416. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_preview_preview_unscored_note_preprocess_cfg +0 -0
  417. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_preview_preview_unscored_note_preprocess_fast_nodes +0 -0
  418. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_preview_preview_unscored_note_preprocess_fast_optimized_cfg +0 -0
  419. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_preview_preview_unscored_note_preprocess_standard_nodes +0 -0
  420. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_preview_preview_unscored_note_preprocess_standard_optimized_cfg +0 -0
  421. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_preview_preview_unscored_note_render_cfg +0 -0
  422. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_preview_preview_unscored_note_render_fast_nodes +0 -0
  423. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_preview_preview_unscored_note_render_fast_optimized_cfg +0 -0
  424. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_preview_preview_unscored_note_render_standard_nodes +0 -0
  425. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_preview_preview_unscored_note_render_standard_optimized_cfg +0 -0
  426. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_tutorial_global_navigate_fast_cfg +0 -0
  427. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_tutorial_global_navigate_fast_nodes +0 -0
  428. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_tutorial_global_navigate_fast_optimized_cfg +0 -0
  429. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_tutorial_global_navigate_standard_cfg +0 -0
  430. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_tutorial_global_navigate_standard_nodes +0 -0
  431. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_tutorial_global_navigate_standard_optimized_cfg +0 -0
  432. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_tutorial_global_preprocess_fast_cfg +0 -0
  433. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_tutorial_global_preprocess_fast_nodes +0 -0
  434. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_tutorial_global_preprocess_fast_optimized_cfg +0 -0
  435. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_tutorial_global_preprocess_standard_cfg +0 -0
  436. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_tutorial_global_preprocess_standard_nodes +0 -0
  437. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_tutorial_global_preprocess_standard_optimized_cfg +0 -0
  438. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_tutorial_global_update_fast_cfg +0 -0
  439. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_tutorial_global_update_fast_nodes +0 -0
  440. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_tutorial_global_update_fast_optimized_cfg +0 -0
  441. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_tutorial_global_update_standard_cfg +0 -0
  442. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_tutorial_global_update_standard_nodes +0 -0
  443. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_tutorial_global_update_standard_optimized_cfg +0 -0
  444. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_global_update_spawn_fast_cfg +0 -0
  445. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_global_update_spawn_fast_nodes +0 -0
  446. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_global_update_spawn_fast_optimized_cfg +0 -0
  447. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_global_update_spawn_standard_cfg +0 -0
  448. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_global_update_spawn_standard_nodes +0 -0
  449. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_global_update_spawn_standard_optimized_cfg +0 -0
  450. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_hold_connector_despawn_time_cfg +0 -0
  451. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_hold_connector_despawn_time_fast_nodes +0 -0
  452. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_hold_connector_despawn_time_fast_optimized_cfg +0 -0
  453. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_hold_connector_despawn_time_standard_nodes +0 -0
  454. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_hold_connector_despawn_time_standard_optimized_cfg +0 -0
  455. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_hold_connector_spawn_time_cfg +0 -0
  456. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_hold_connector_spawn_time_fast_nodes +0 -0
  457. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_hold_connector_spawn_time_fast_optimized_cfg +0 -0
  458. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_hold_connector_spawn_time_standard_nodes +0 -0
  459. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_hold_connector_spawn_time_standard_optimized_cfg +0 -0
  460. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_hold_connector_update_parallel_cfg +0 -0
  461. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_hold_connector_update_parallel_fast_nodes +0 -0
  462. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_hold_connector_update_parallel_fast_optimized_cfg +0 -0
  463. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_hold_connector_update_parallel_standard_nodes +0 -0
  464. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_hold_connector_update_parallel_standard_optimized_cfg +0 -0
  465. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_hold_connector_update_sequential_cfg +0 -0
  466. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_hold_connector_update_sequential_fast_nodes +0 -0
  467. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_hold_connector_update_sequential_fast_optimized_cfg +0 -0
  468. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_hold_connector_update_sequential_standard_nodes +0 -0
  469. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_hold_connector_update_sequential_standard_optimized_cfg +0 -0
  470. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_hold_manager_despawn_time_cfg +0 -0
  471. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_hold_manager_despawn_time_fast_nodes +0 -0
  472. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_hold_manager_despawn_time_fast_optimized_cfg +0 -0
  473. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_hold_manager_despawn_time_standard_nodes +0 -0
  474. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_hold_manager_despawn_time_standard_optimized_cfg +0 -0
  475. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_hold_manager_spawn_time_cfg +0 -0
  476. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_hold_manager_spawn_time_fast_nodes +0 -0
  477. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_hold_manager_spawn_time_fast_optimized_cfg +0 -0
  478. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_hold_manager_spawn_time_standard_nodes +0 -0
  479. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_hold_manager_spawn_time_standard_optimized_cfg +0 -0
  480. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_hold_manager_terminate_cfg +0 -0
  481. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_hold_manager_terminate_fast_nodes +0 -0
  482. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_hold_manager_terminate_fast_optimized_cfg +0 -0
  483. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_hold_manager_terminate_standard_nodes +0 -0
  484. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_hold_manager_terminate_standard_optimized_cfg +0 -0
  485. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_hold_manager_update_parallel_cfg +0 -0
  486. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_hold_manager_update_parallel_fast_nodes +0 -0
  487. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_hold_manager_update_parallel_fast_optimized_cfg +0 -0
  488. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_hold_manager_update_parallel_standard_nodes +0 -0
  489. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_hold_manager_update_parallel_standard_optimized_cfg +0 -0
  490. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_note_despawn_time_cfg +0 -0
  491. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_note_despawn_time_fast_nodes +0 -0
  492. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_note_despawn_time_fast_optimized_cfg +0 -0
  493. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_note_despawn_time_standard_nodes +0 -0
  494. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_note_despawn_time_standard_optimized_cfg +0 -0
  495. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_note_preprocess_cfg +0 -0
  496. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_note_preprocess_fast_nodes +0 -0
  497. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_note_preprocess_fast_optimized_cfg +0 -0
  498. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_note_preprocess_standard_nodes +0 -0
  499. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_note_preprocess_standard_optimized_cfg +0 -0
  500. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_note_spawn_time_cfg +0 -0
  501. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_note_spawn_time_fast_nodes +0 -0
  502. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_note_spawn_time_fast_optimized_cfg +0 -0
  503. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_note_spawn_time_standard_nodes +0 -0
  504. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_note_spawn_time_standard_optimized_cfg +0 -0
  505. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_note_terminate_cfg +0 -0
  506. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_note_terminate_fast_nodes +0 -0
  507. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_note_terminate_fast_optimized_cfg +0 -0
  508. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_note_terminate_standard_nodes +0 -0
  509. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_note_terminate_standard_optimized_cfg +0 -0
  510. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_note_update_parallel_cfg +0 -0
  511. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_note_update_parallel_fast_nodes +0 -0
  512. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_note_update_parallel_fast_optimized_cfg +0 -0
  513. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_note_update_parallel_standard_nodes +0 -0
  514. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_note_update_parallel_standard_optimized_cfg +0 -0
  515. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_scheduled_lane_effect_despawn_time_cfg +0 -0
  516. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_scheduled_lane_effect_despawn_time_fast_nodes +0 -0
  517. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_scheduled_lane_effect_despawn_time_fast_optimized_cfg +0 -0
  518. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_scheduled_lane_effect_despawn_time_standard_nodes +0 -0
  519. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_scheduled_lane_effect_despawn_time_standard_optimized_cfg +0 -0
  520. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_scheduled_lane_effect_spawn_time_cfg +0 -0
  521. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_scheduled_lane_effect_spawn_time_fast_nodes +0 -0
  522. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_scheduled_lane_effect_spawn_time_fast_optimized_cfg +0 -0
  523. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_scheduled_lane_effect_spawn_time_standard_nodes +0 -0
  524. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_scheduled_lane_effect_spawn_time_standard_optimized_cfg +0 -0
  525. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_scheduled_lane_effect_update_parallel_cfg +0 -0
  526. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_scheduled_lane_effect_update_parallel_fast_nodes +0 -0
  527. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_scheduled_lane_effect_update_parallel_fast_optimized_cfg +0 -0
  528. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_scheduled_lane_effect_update_parallel_standard_nodes +0 -0
  529. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_scheduled_lane_effect_update_parallel_standard_optimized_cfg +0 -0
  530. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_sim_line_despawn_time_cfg +0 -0
  531. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_sim_line_despawn_time_fast_nodes +0 -0
  532. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_sim_line_despawn_time_fast_optimized_cfg +0 -0
  533. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_sim_line_despawn_time_standard_nodes +0 -0
  534. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_sim_line_despawn_time_standard_optimized_cfg +0 -0
  535. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_sim_line_spawn_time_cfg +0 -0
  536. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_sim_line_spawn_time_fast_nodes +0 -0
  537. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_sim_line_spawn_time_fast_optimized_cfg +0 -0
  538. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_sim_line_spawn_time_standard_nodes +0 -0
  539. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_sim_line_spawn_time_standard_optimized_cfg +0 -0
  540. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_sim_line_update_parallel_cfg +0 -0
  541. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_sim_line_update_parallel_fast_nodes +0 -0
  542. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_sim_line_update_parallel_fast_optimized_cfg +0 -0
  543. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_sim_line_update_parallel_standard_nodes +0 -0
  544. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_sim_line_update_parallel_standard_optimized_cfg +0 -0
  545. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_stage_despawn_time_cfg +0 -0
  546. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_stage_despawn_time_fast_nodes +0 -0
  547. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_stage_despawn_time_fast_optimized_cfg +0 -0
  548. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_stage_despawn_time_standard_nodes +0 -0
  549. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_stage_despawn_time_standard_optimized_cfg +0 -0
  550. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_stage_preprocess_cfg +0 -0
  551. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_stage_preprocess_fast_nodes +0 -0
  552. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_stage_preprocess_fast_optimized_cfg +0 -0
  553. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_stage_preprocess_standard_nodes +0 -0
  554. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_stage_preprocess_standard_optimized_cfg +0 -0
  555. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_stage_spawn_time_cfg +0 -0
  556. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_stage_spawn_time_fast_nodes +0 -0
  557. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_stage_spawn_time_fast_optimized_cfg +0 -0
  558. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_stage_spawn_time_standard_nodes +0 -0
  559. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_stage_spawn_time_standard_optimized_cfg +0 -0
  560. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_stage_update_parallel_cfg +0 -0
  561. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_stage_update_parallel_fast_nodes +0 -0
  562. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_stage_update_parallel_fast_optimized_cfg +0 -0
  563. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_stage_update_parallel_standard_nodes +0 -0
  564. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_stage_update_parallel_standard_optimized_cfg +0 -0
  565. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_unscored_note_despawn_time_cfg +0 -0
  566. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_unscored_note_despawn_time_fast_nodes +0 -0
  567. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_unscored_note_despawn_time_fast_optimized_cfg +0 -0
  568. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_unscored_note_despawn_time_standard_nodes +0 -0
  569. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_unscored_note_despawn_time_standard_optimized_cfg +0 -0
  570. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_unscored_note_preprocess_cfg +0 -0
  571. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_unscored_note_preprocess_fast_nodes +0 -0
  572. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_unscored_note_preprocess_fast_optimized_cfg +0 -0
  573. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_unscored_note_preprocess_standard_nodes +0 -0
  574. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_unscored_note_preprocess_standard_optimized_cfg +0 -0
  575. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_unscored_note_spawn_time_cfg +0 -0
  576. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_unscored_note_spawn_time_fast_nodes +0 -0
  577. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_unscored_note_spawn_time_fast_optimized_cfg +0 -0
  578. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_unscored_note_spawn_time_standard_nodes +0 -0
  579. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_unscored_note_spawn_time_standard_optimized_cfg +0 -0
  580. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_unscored_note_terminate_cfg +0 -0
  581. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_unscored_note_terminate_fast_nodes +0 -0
  582. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_unscored_note_terminate_fast_optimized_cfg +0 -0
  583. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_unscored_note_terminate_standard_nodes +0 -0
  584. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_unscored_note_terminate_standard_optimized_cfg +0 -0
  585. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_unscored_note_update_parallel_cfg +0 -0
  586. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_unscored_note_update_parallel_fast_nodes +0 -0
  587. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_unscored_note_update_parallel_fast_optimized_cfg +0 -0
  588. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_unscored_note_update_parallel_standard_nodes +0 -0
  589. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/data/pydori_watch_watch_unscored_note_update_parallel_standard_optimized_cfg +0 -0
  590. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/regressions/test_project.py +0 -0
  591. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/script/__init__.py +0 -0
  592. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/script/conftest.py +0 -0
  593. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/script/test_array.py +0 -0
  594. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/script/test_array_map.py +0 -0
  595. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/script/test_array_set.py +0 -0
  596. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/script/test_assert.py +0 -0
  597. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/script/test_dict.py +0 -0
  598. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/script/test_flow.py +0 -0
  599. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/script/test_functions.py +0 -0
  600. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/script/test_generator.py +0 -0
  601. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/script/test_helpers.py +0 -0
  602. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/script/test_interval.py +0 -0
  603. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/script/test_match.py +0 -0
  604. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/script/test_num.py +0 -0
  605. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/script/test_operator.py +0 -0
  606. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/script/test_quad.py +0 -0
  607. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/script/test_random.py +0 -0
  608. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/script/test_range.py +0 -0
  609. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/script/test_record.py +0 -0
  610. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/script/test_transform.py +0 -0
  611. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/script/test_tuple.py +0 -0
  612. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/script/test_values.py +0 -0
  613. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/script/test_var_array.py +0 -0
  614. {sonolus_py-0.4.0 → sonolus_py-0.4.2}/tests/script/test_vec.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sonolus.py
3
- Version: 0.4.0
3
+ Version: 0.4.2
4
4
  Summary: Sonolus engine development in Python
5
5
  License-File: LICENSE
6
6
  Requires-Python: >=3.12
@@ -183,95 +183,48 @@ def map[T, S](function: Callable[[T], S], iterable: Iterable[T]) -> Iterator[S]:
183
183
  ...
184
184
 
185
185
  @overload
186
- def max[T](iterable: Iterable[T], *, key: Callable[[T], Any] | None = ...) -> T:
187
- """Return the largest item in an iterable or the largest of two or more arguments.
188
-
189
- Args:
190
- iterable: The iterable to evaluate.
191
- key: A function of one argument that is used to extract a comparison key from each element.
192
-
193
- Returns:
194
- The largest item.
195
- """
196
- ...
197
-
186
+ def max[T](iterable: Iterable[T], *, key: Callable[[T], Any] | None = ...) -> T: ...
198
187
  @overload
199
188
  def max(
200
189
  iterable: Iterable[builtins.int | builtins.float],
201
190
  *,
202
191
  default: builtins.int | builtins.float = ...,
203
192
  key: Callable[[builtins.int | builtins.float], Any] | None = ...,
204
- ) -> builtins.int | builtins.float:
205
- """Return the largest item in an iterable or the largest of two or more arguments.
206
-
207
- Args:
208
- iterable: The iterable to evaluate.
209
- default: The default value to return if the iterable is empty.
210
- key: A function of one argument that is used to extract a comparison key from each element.
211
-
212
- Returns:
213
- The largest item, or the default value if the iterable is empty.
214
- """
215
-
193
+ ) -> builtins.int | builtins.float: ...
216
194
  @overload
217
- def max[T](arg1: T, arg2: T, *args: T, key: Callable[[T], Any] | None = ...) -> T:
218
- """Return the largest item in an iterable or the largest of two or more arguments.
195
+ def max[T](arg1: T, arg2: T, *args: T, key: Callable[[T], Any] | None = ...) -> T: ...
196
+ def max(*args, **kwargs):
197
+ """Return the largest item in an iterable or the largest of multiple arguments.
219
198
 
220
- Args:
221
- arg1: First argument.
222
- arg2: Second argument.
223
- *args: Additional arguments.
224
- key: A function of one argument that is used to extract a comparison key from each element.
199
+ When called with a single iterable, returns the largest item from that iterable.
200
+ When called with multiple arguments, returns the largest argument.
225
201
 
226
- Returns:
227
- The largest item.
202
+ Use the `key` parameter to specify a function that transforms each element
203
+ before comparison. Use the `default` parameter to specify a value to return
204
+ if the iterable is empty (supported only for numeric values).
228
205
  """
229
206
  ...
230
207
 
231
208
  @overload
232
- def min[T](iterable: Iterable[T], *, key: Callable[[T], Any] | None = ...) -> T:
233
- """Return the smallest item in an iterable or the smallest of two or more arguments.
234
-
235
- Args:
236
- iterable: The iterable to evaluate.
237
- key: A function of one argument that is used to extract a comparison key from each element.
238
-
239
- Returns:
240
- The smallest item.
241
- """
242
- ...
243
-
209
+ def min[T](iterable: Iterable[T], *, key: Callable[[T], Any] | None = ...) -> T: ...
244
210
  @overload
245
211
  def min(
246
212
  iterable: Iterable[builtins.int | builtins.float],
247
213
  *,
248
214
  default: builtins.int | builtins.float = ...,
249
215
  key: Callable[[builtins.int | builtins.float], Any] | None = ...,
250
- ) -> builtins.int | builtins.float:
251
- """Return the smallest item in an iterable or the smallest of two or more arguments.
252
-
253
- Args:
254
- iterable: The iterable to evaluate.
255
- default: The default value to return if the iterable is empty.
256
- key: A function of one argument that is used to extract a comparison key from each element.
257
-
258
- Returns:
259
- The smallest item, or the default value if the iterable is empty.
260
- """
261
- ...
262
-
216
+ ) -> builtins.int | builtins.float: ...
263
217
  @overload
264
- def min[T](arg1: T, arg2: T, *args: T, key: Callable[[T], Any] | None = ...) -> T:
265
- """Return the smallest item in an iterable or the smallest of two or more arguments.
218
+ def min[T](arg1: T, arg2: T, *args: T, key: Callable[[T], Any] | None = ...) -> T: ...
219
+ def min(*args, **kwargs):
220
+ """Return the smallest item in an iterable or the smallest of multiple arguments.
266
221
 
267
- Args:
268
- arg1: First argument.
269
- arg2: Second argument.
270
- *args: Additional arguments.
271
- key: A function of one argument that is used to extract a comparison key from each element.
222
+ When called with a single iterable, returns the smallest item from that iterable.
223
+ When called with multiple arguments, returns the smallest argument.
272
224
 
273
- Returns:
274
- The smallest item.
225
+ Use the `key` parameter to specify a function that transforms each element
226
+ before comparison. Use the `default` parameter to specify a value to return
227
+ if the iterable is empty (supported only for numeric values).
275
228
  """
276
229
  ...
277
230
 
@@ -289,28 +242,15 @@ def next[T](iterator: Iterator[T]) -> T:
289
242
  ...
290
243
 
291
244
  @overload
292
- def range(stop: builtins.int) -> builtins.range:
293
- """Return an immutable sequence of numbers from 0 to stop.
294
-
295
- Args:
296
- stop: Stop value.
297
-
298
- Returns:
299
- The range object.
300
- """
301
- ...
302
-
245
+ def range(stop: builtins.int) -> builtins.range: ...
303
246
  @overload
304
- def range(start: builtins.int, stop: builtins.int, step: builtins.int = ...) -> builtins.range:
305
- """Return an immutable sequence of numbers from start to stop by step.
247
+ def range(start: builtins.int, stop: builtins.int, step: builtins.int = ...) -> builtins.range: ...
248
+ def range(*args) -> builtins.range:
249
+ """Return an immutable sequence of numbers.
306
250
 
307
- Args:
308
- start: Start value.
309
- stop: Stop value.
310
- step: Step value.
311
-
312
- Returns:
313
- The range object.
251
+ When called with one argument, creates a sequence from 0 to that number (exclusive).
252
+ When called with two arguments, creates a sequence from the first to the second (exclusive).
253
+ When called with three arguments, the third argument specifies the step size.
314
254
  """
315
255
  ...
316
256
 
@@ -33,12 +33,12 @@ The following constructs are supported in Sonolus.py:
33
33
  - Binary: `+`, `-`, `*`, `/`, `//`, `%`, `**`, `&`, `|`, `^`, `<<`, `>>`
34
34
  - Comparison: `==`, `!=`, `>`, `<`, `>=`, `<=`, `is`, `is not`, `in`, `not in`
35
35
  - Logical: `and`, `or` (for [`Num`](types.md#num) arguments only)
36
- - Ternary: `a if <condition> else b` (for [`Num`](types.md#num) conditions only)
36
+ - Ternary: `a if <condition> else b`
37
37
  - Attribute: `a.b`
38
38
  - Indexing: `a[b]`
39
39
  - Call: `f(a, b, c)`
40
40
  - Variables: `a`, `b`, `c`
41
- - Lambda: `lambda a, b: a + b`
41
+ - Lambda: `lambda a, b: a + b` (if not on the same line as another lambda or function definition)
42
42
  - Assignment Expression: `(a := b)`
43
43
  - Generator Expression: `(x for x in iterable if condition)`
44
44
  - Statements:
@@ -394,7 +394,9 @@ def g(a):
394
394
 
395
395
  Function returns follow the same rules as variable access. If a function returns a non-num value, it most only
396
396
  return that value. If the function always returns a num, it may have any number of returns. Similarly, if a function
397
- always returns None (`return None` or just `return`), it may have any number of returns.
397
+ always returns None (`return None` or just `return`), it may have any number of returns.
398
+ The [`Maybe`][sonolus.script.maybe.Maybe] is also an exception, see the
399
+ [Maybe documentation](../reference/sonolus.script.maybe.md) for details
398
400
 
399
401
  The following are allowed:
400
402
 
@@ -118,13 +118,10 @@ a2 = Array[int, 0]()
118
118
  a3 = +Array[int, 3] # Create a zero-initialized array
119
119
  ```
120
120
 
121
- For type checker compatibility, `Literal` or [`Dim`][sonolus.script.array.Dim] can also be used to specify the size of
122
- the array:
123
-
121
+ For type checker compatibility, the Python builtin `typing.Literal` or [`Dim`][sonolus.script.array.Dim] may be used
122
+ for an array's size:
124
123
  ```python
125
- from sonolus.script.array import Dim
126
-
127
- a1 = Array[int, Dim(3)](1, 2, 3)
124
+ a1 = Array[int, Dim[3]](1, 2, 3)
128
125
  a2 = Array[int, Literal[3]](1, 2, 3)
129
126
  ```
130
127
 
@@ -13,12 +13,17 @@ Sonolus.py is available on PyPI and can be installed using a package manager lik
13
13
  uv add sonolus.py
14
14
  ```
15
15
 
16
+
16
17
  ## Getting Started
17
- Example Projects:
18
18
 
19
- - [pydori](https://github.com/qwewqa/pydori): A Bandori-like engine designed to be an example project for Sonolus.py.
19
+ Before making a new Sonolus.py engine or even reading through the rest of this documentation, it may be helpful to look
20
+ at some examples to get a sense of how Sonolus.py is used.
21
+
22
+ The [pydori](https://github.com/qwewqa/pydori) engine is an example Sonolus.py engine that implements a Bandori-style
23
+ (vertical scrolling rhythm game) engine.
20
24
 
21
- New Project Template: [sonolus.py-template-project](https://github.com/qwewqa/sonolus.py-template-project)
25
+ Once you're ready to start a new project, you may want to use the
26
+ [new project template](https://github.com/qwewqa/sonolus.py-template-project).
22
27
 
23
28
  ## Documentation
24
29
 
@@ -1,14 +1,14 @@
1
1
  # Overview
2
2
 
3
- Sonolus.py is a Python library for creating Sonolus engines. This page provides an overview of the key functionality
4
- available in the library. For more detailed information, see the [Concepts](concepts/index.md) and
3
+ Sonolus.py is a Python library for creating Sonolus engines. This page provides an overview of the key functionality
4
+ available in the library. For detailed information, see the [Concepts](concepts/index.md) and
5
5
  [Reference](reference/index.md) sections.
6
6
 
7
7
  ## Language
8
8
 
9
- Sonolus.py functions by compiling Python code into Sonolus nodes. As such, it supports a subset of Python including
9
+ Sonolus.py compiles Python code into Sonolus nodes. It supports a subset of Python including
10
10
  most syntax and a portion of the standard library. Additionally, Sonolus.py provides its own library of types and
11
- functions that are specifically designed for use in Sonolus engines.
11
+ functions that are designed for use in Sonolus engines.
12
12
 
13
13
  ### Syntax
14
14
 
@@ -26,7 +26,7 @@ Most Python syntax is supported, but there are a few limitations. The primary re
26
26
  Sonolus.py will evaluate some expressions at compile time such as basic arithmetic operations on constants,
27
27
  boolean logical operations (`and`, `or`, `not`) on constants, and type checks (`isinstance`, `issubclass`).
28
28
 
29
- In control flow constructs like `if` and `match`, Sonolus.py may determine some branches to be unreachable at compile
29
+ In control flow constructs like `if` and `match`, Sonolus.py may determine some branches to be unreachable at compile
30
30
  and eliminate them without evaluating them. This allows code like the following to compile successfully:
31
31
 
32
32
  ```python
@@ -60,16 +60,16 @@ debug_log(a.x)
60
60
  Similar to variables, functions returning `int`, `float`, or `bool` can have any number of return statements. Functions
61
61
  returning `None` may also have any number of `return` or `return None` statements.
62
62
 
63
- Functions returning any other type must have exactly one `return` statement, and it must be the only exit point of the
64
- function. It is ok, however, for a function to have other `return` statements that are eliminated at compile time.
63
+ Functions returning any other type must have exactly one `return` statement, and it must be the only exit point of the
64
+ function [^1]. It is ok, however, for a function to have other `return` statements that are eliminated at compile time.
65
65
  For example, the following code will compile successfully:
66
66
 
67
67
  ```python
68
68
  def fn(a: int | Vec2):
69
69
  if isinstance(a, Vec2):
70
- return a.x + a.y
70
+ return Vec2(a.x, a.y)
71
71
  else:
72
- return a * 2
72
+ return Vec2(a, a)
73
73
 
74
74
  fn(123)
75
75
  ```
@@ -79,12 +79,12 @@ fn(123)
79
79
  ### Numbers
80
80
 
81
81
  Sonolus.py supports `int`, `float`, and `bool` types and most of the standard operations such as mathematical operations
82
- (`+`, `-`, `*`, `/`, `//`, `%`), comparisons (`<`, `<=`, `>`, `>=`, `==`, `!=`), and boolean operations
82
+ (`+`, `-`, `*`, `/`, `//`, `%`), comparisons (`<`, `<=`, `>`, `>=`, `==`, `!=`), and boolean operations
83
83
  (`and`, `or`, `not`).
84
84
 
85
85
  ### Record
86
86
 
87
- [`Record`](reference/sonolus.script.record.md) is the main way to define custom types in Sonolus.py.
87
+ [`Record`](reference/sonolus.script.record.md) is the main way to define custom types in Sonolus.py.
88
88
  It functions similarly to a data class and provides a way to define a type with named fields:
89
89
 
90
90
  ```python
@@ -116,7 +116,7 @@ assert record_1.a == record_2.value.a == 789
116
116
 
117
117
  ### Array
118
118
 
119
- [`Array`](reference/sonolus.script.array.md) is a type that represents a fixed-size array of elements of a
119
+ [`Array`](reference/sonolus.script.array.md) is a type that represents a fixed-size array of elements of a
120
120
  specific type:
121
121
 
122
122
  ```python
@@ -162,7 +162,7 @@ record_2 = +Array[int, 3]
162
162
  Records and arrays can be mutated in-place using the `@=` operator:
163
163
 
164
164
  ```python
165
- record_1 @= MyRecord(1, 2.3)
165
+ record_1 @= MyRecord(1, 2.3)
166
166
  array_1 @= Array(4, 5, 6)
167
167
  ```
168
168
 
@@ -192,10 +192,12 @@ assert record_1 == array_1[0] == MyRecord(4, 5.6)
192
192
  ```
193
193
 
194
194
  ### Other Types
195
+
195
196
  Sonolus.py has limited support for other types of values such as strings, tuples, and functions. These have restrictions
196
197
  such as not being valid as Record field types or Array element types.
197
198
 
198
199
  ## Modules
200
+
199
201
  Sonolus.py provides a number of built-in modules that can be used in Sonolus engines. These include:
200
202
 
201
203
  - Project
@@ -227,7 +229,7 @@ Sonolus.py provides a number of built-in modules that can be used in Sonolus eng
227
229
  - [random](reference/random.md): Supported random functions.
228
230
  - Utilities
229
231
  - [ArrayLike](reference/sonolus.script.array_like.md): Mixin for array functionality.
230
- - [Containers](reference/sonolus.script.containers.md): Additional container types like `VarArray` and `ArrayMap`.
232
+ - [Containers](reference/sonolus.script.containers.md): Additional container types like [`VarArray`][sonolus.script.containers.VarArray] and [`ArrayMap`][sonolus.script.containers.ArrayMap].
231
233
  - [Debug](reference/sonolus.script.debug.md): Debugging utilities.
232
234
  - [Easing](reference/sonolus.script.easing.md): Easing functions for animations.
233
235
  - [Interval](reference/sonolus.script.interval.md): Mathematical intervals.
@@ -241,12 +243,6 @@ Sonolus.py provides a number of built-in modules that can be used in Sonolus eng
241
243
 
242
244
  For more details, see the [Reference](reference/index.md) section.
243
245
 
244
- ## Getting Started
245
-
246
- Before making a new Sonolus.py engine, it may be helpful to look at some existing projects to see how they use
247
- the library:
248
-
249
- - [pydori](https://github.com/qwewqa/pydori): A Bandori-like engine designed to be an example project for Sonolus.py.
250
-
251
- If you're starting a new project, you'll probably want to use the
252
- [new project template](https://github.com/qwewqa/sonolus.py-template-project).
246
+ [^1]:
247
+ The [`Maybe`][sonolus.script.maybe.Maybe] type is an exception to this rule.
248
+ See the [`Maybe` documentation](reference/sonolus.script.maybe.md) for details.
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "sonolus.py"
3
- version = "0.4.0"
3
+ version = "0.4.2"
4
4
  description = "Sonolus engine development in Python"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.12"
@@ -18,7 +18,7 @@ target-version = "py312"
18
18
  [tool.ruff.lint]
19
19
  preview = true
20
20
  select = ["F", "E", "W", "I", "N", "D", "UP", "YTT", "B", "A", "COM", "C4", "DTZ", "PIE", "PT", "Q", "SLOT", "SIM", "PTH", "PL", "PERF", "FURB", "LOG", "RUF"]
21
- ignore = ["E402", "D1", "COM812", "PLW2901", "PLW3201", "PLR6301", "PLC0415", "PLR2004", "PLR09", "SIM108", "FURB113", "A005", "B903", "FURB118"]
21
+ ignore = ["E402", "D1", "COM812", "PLW2901", "PLW3201", "PLR6301", "PLC0415", "PLR2004", "PLR09", "SIM108", "FURB113", "A005", "B903", "FURB118", "E501"]
22
22
 
23
23
  [tool.ruff.lint.pydocstyle]
24
24
  convention = "google"
@@ -23,29 +23,48 @@ def get_tree_from_file(file: str | Path) -> ast.Module:
23
23
  class FindFunction(ast.NodeVisitor):
24
24
  def __init__(self, line):
25
25
  self.line = line
26
- self.node: ast.FunctionDef | None = None
26
+ self.results: list[ast.FunctionDef | ast.Lambda] = []
27
+ self.current_fn = None
27
28
 
28
29
  def visit_FunctionDef(self, node: ast.FunctionDef):
29
- if node.lineno == self.line or (
30
- node.decorator_list and (node.decorator_list[-1].end_lineno <= self.line <= node.lineno)
31
- ):
32
- self.node = node
33
- else:
34
- self.generic_visit(node)
30
+ self.results.append(node)
31
+ outer_fn = self.current_fn
32
+ self.current_fn = node
33
+ self.generic_visit(node)
34
+ self.current_fn = outer_fn
35
35
 
36
36
  def visit_Lambda(self, node: ast.Lambda):
37
- if node.lineno == self.line:
38
- if self.node is not None:
39
- raise ValueError("Multiple functions defined on the same line are not supported")
40
- self.node = node
41
- else:
42
- self.generic_visit(node)
37
+ self.results.append(node)
38
+ outer_fn = self.current_fn
39
+ self.current_fn = node
40
+ self.generic_visit(node)
41
+ self.current_fn = outer_fn
43
42
 
43
+ # Visitors have high overhead, so we detect generators here rather than in a separate pass.
44
44
 
45
- def find_function(tree: ast.Module, line: int):
46
- visitor = FindFunction(line)
45
+ def visit_Yield(self, node):
46
+ self.current_fn.has_yield = True
47
+
48
+ def visit_YieldFrom(self, node):
49
+ self.current_fn.has_yield = True
50
+
51
+
52
+ @cache
53
+ def get_functions(tree: ast.Module) -> list[ast.FunctionDef | ast.Lambda]:
54
+ visitor = FindFunction(0)
47
55
  visitor.visit(tree)
48
- return visitor.node
56
+ return visitor.results
57
+
58
+
59
+ def find_function(tree: ast.Module, line: int):
60
+ for node in get_functions(tree):
61
+ if node.lineno == line or (
62
+ isinstance(node, ast.FunctionDef)
63
+ and node.decorator_list
64
+ and (node.decorator_list[-1].end_lineno <= line <= node.lineno)
65
+ ):
66
+ return node
67
+ raise ValueError("Function not found")
49
68
 
50
69
 
51
70
  class ScanWrites(ast.NodeVisitor):
@@ -61,27 +80,3 @@ def scan_writes(node: ast.AST) -> set[str]:
61
80
  visitor = ScanWrites()
62
81
  visitor.visit(node)
63
82
  return set(visitor.writes)
64
-
65
-
66
- class HasDirectYield(ast.NodeVisitor):
67
- def __init__(self):
68
- self.started = False
69
- self.has_yield = False
70
-
71
- def visit_Yield(self, node: ast.Yield):
72
- self.has_yield = True
73
-
74
- def visit_YieldFrom(self, node: ast.YieldFrom):
75
- self.has_yield = True
76
-
77
- def visit_FunctionDef(self, node: ast.FunctionDef):
78
- if self.started:
79
- return
80
- self.started = True
81
- self.generic_visit(node)
82
-
83
-
84
- def has_yield(node: ast.AST) -> bool:
85
- visitor = HasDirectYield()
86
- visitor.visit(node)
87
- return visitor.has_yield
@@ -11,7 +11,7 @@ from types import FunctionType, MethodType, MethodWrapperType
11
11
  from typing import Any, Never
12
12
 
13
13
  from sonolus.backend.excepthook import install_excepthook
14
- from sonolus.backend.utils import get_function, has_yield, scan_writes
14
+ from sonolus.backend.utils import get_function, scan_writes
15
15
  from sonolus.script.debug import assert_true
16
16
  from sonolus.script.internal.builtin_impls import BUILTIN_IMPLS, _bool, _float, _int, _len
17
17
  from sonolus.script.internal.constant import ConstantValue
@@ -39,6 +39,8 @@ def compile_and_call[**P, R](fn: Callable[P, R], /, *args: P.args, **kwargs: P.k
39
39
  def compile_and_call_at_definition[**P, R](fn: Callable[P, R], /, *args: P.args, **kwargs: P.kwargs) -> R:
40
40
  if not ctx():
41
41
  return fn(*args, **kwargs)
42
+ if ctx().no_eval:
43
+ return compile_and_call(fn, *args, **kwargs)
42
44
  source_file, node = get_function(fn)
43
45
  location_args = {
44
46
  "lineno": node.lineno,
@@ -261,11 +263,26 @@ class Visitor(ast.NodeVisitor):
261
263
  result = self.visit(body)
262
264
  ctx().scope.set_value("$return", result)
263
265
  case ast.GeneratorExp(elt=elt, generators=generators):
264
- self.construct_genexpr(generators, elt)
266
+ first_generator = generators[0]
267
+ iterable = self.visit(first_generator.iter)
268
+ if isinstance(iterable, TupleImpl):
269
+ initial_iterator = iterable
270
+ else:
271
+ if not hasattr(iterable, "__iter__"):
272
+ raise TypeError(f"Object of type '{type(iterable).__name__}' is not iterable")
273
+ initial_iterator = self.handle_call(first_generator.iter, iterable.__iter__)
274
+ if not isinstance(initial_iterator, SonolusIterator):
275
+ raise ValueError("Unsupported iterator")
276
+ # The initial iterator is evaluated eagerly in Python
277
+ before_ctx = ctx().branch_with_scope(None, before_ctx.scope.copy())
278
+ start_ctx = before_ctx.branch_with_scope(None, Scope())
279
+ set_ctx(start_ctx)
280
+ self.construct_genexpr(generators, elt, initial_iterator)
265
281
  ctx().scope.set_value("$return", validate_value(None))
266
282
  case _:
267
283
  raise NotImplementedError("Unsupported syntax")
268
- if has_yield(node) or isinstance(node, ast.GeneratorExp):
284
+ # has_yield is set by the find_function visitor
285
+ if getattr(node, "has_yield", False) or isinstance(node, ast.GeneratorExp):
269
286
  return_ctx = Context.meet([*self.return_ctxs, ctx()])
270
287
  result_binding = return_ctx.scope.get_binding("$return")
271
288
  if not isinstance(result_binding, ValueBinding):
@@ -323,7 +340,9 @@ class Visitor(ast.NodeVisitor):
323
340
  set_ctx(after_ctx.branch_with_scope(None, before_ctx.scope.copy()))
324
341
  return result_binding.value
325
342
 
326
- def construct_genexpr(self, generators: Iterable[ast.comprehension], elt: ast.expr):
343
+ def construct_genexpr(
344
+ self, generators: Iterable[ast.comprehension], elt: ast.expr, initial_iterator: Value | None = None
345
+ ):
327
346
  if not generators:
328
347
  # Note that there may effectively be multiple yields in an expression since
329
348
  # tuples are unrolled.
@@ -335,14 +354,22 @@ class Visitor(ast.NodeVisitor):
335
354
  set_ctx(resume_ctx)
336
355
  return
337
356
  generator, *others = generators
338
- iterable = self.visit(generator.iter)
357
+ if initial_iterator is not None:
358
+ iterable = initial_iterator
359
+ else:
360
+ iterable = self.visit(generator.iter)
339
361
  if isinstance(iterable, TupleImpl):
340
362
  for value in iterable.value:
341
363
  set_ctx(ctx().branch(None))
342
364
  self.handle_assign(generator.target, validate_value(value))
343
365
  self.construct_genexpr(others, elt)
344
366
  else:
345
- iterator = self.handle_call(generator.iter, iterable.__iter__)
367
+ if initial_iterator is not None:
368
+ iterator = initial_iterator
369
+ else:
370
+ if not hasattr(iterable, "__iter__"):
371
+ raise TypeError(f"Object of type '{type(iterable).__name__}' is not iterable")
372
+ iterator = self.handle_call(generator.iter, iterable.__iter__)
346
373
  if not isinstance(iterator, SonolusIterator):
347
374
  raise ValueError("Unsupported iterator")
348
375
  header_ctx = ctx().branch(None)
@@ -493,6 +520,8 @@ class Visitor(ast.NodeVisitor):
493
520
  if break_ctxs:
494
521
  set_ctx(Context.meet([*break_ctxs, ctx()]))
495
522
  return
523
+ if not hasattr(iterable, "__iter__"):
524
+ raise TypeError(f"Object of type '{type(iterable).__name__}' is not iterable")
496
525
  iterator = self.handle_call(node, iterable.__iter__)
497
526
  if not isinstance(iterator, SonolusIterator):
498
527
  raise ValueError("Unsupported iterator")
@@ -980,6 +1009,8 @@ class Visitor(ast.NodeVisitor):
980
1009
  self.resume_ctxs.append(resume_ctx)
981
1010
  set_ctx(resume_ctx)
982
1011
  return validate_value(None)
1012
+ if not hasattr(value, "__iter__"):
1013
+ raise TypeError(f"Object of type '{type(value).__name__}' is not iterable")
983
1014
  iterator = self.handle_call(node, value.__iter__)
984
1015
  if not isinstance(iterator, SonolusIterator):
985
1016
  raise ValueError("Expected a SonolusIterator")
@@ -1395,6 +1426,9 @@ class Visitor(ast.NodeVisitor):
1395
1426
  self, node: ast.stmt | ast.expr, fn: Callable[P, R], /, *args: P.args, **kwargs: P.kwargs
1396
1427
  ) -> R:
1397
1428
  """Executes the given function at the given node for a better traceback."""
1429
+ if ctx().no_eval:
1430
+ return fn(*args, **kwargs)
1431
+
1398
1432
  location_args = {
1399
1433
  "lineno": node.lineno,
1400
1434
  "col_offset": node.col_offset,
@@ -166,13 +166,13 @@ def main():
166
166
  def add_common_arguments(parser):
167
167
  optimization_group = parser.add_mutually_exclusive_group()
168
168
  optimization_group.add_argument(
169
- "-o0", "--optimize-minimal", action="store_true", help="Use minimal optimization passes"
169
+ "-O0", "--optimize-minimal", action="store_true", help="Use minimal optimization passes"
170
170
  )
171
171
  optimization_group.add_argument(
172
- "-o1", "--optimize-fast", action="store_true", help="Use fast optimization passes"
172
+ "-O1", "--optimize-fast", action="store_true", help="Use fast optimization passes"
173
173
  )
174
174
  optimization_group.add_argument(
175
- "-o2", "--optimize-standard", action="store_true", help="Use standard optimization passes"
175
+ "-O2", "--optimize-standard", action="store_true", help="Use standard optimization passes"
176
176
  )
177
177
 
178
178
  build_components = parser.add_argument_group("build components")
@@ -21,6 +21,7 @@ from sonolus.script.internal.context import (
21
21
  ctx,
22
22
  using_ctx,
23
23
  )
24
+ from sonolus.script.internal.error import CompilationError
24
25
  from sonolus.script.num import _is_num
25
26
 
26
27
 
@@ -140,7 +141,21 @@ def callback_to_cfg(
140
141
  name: str,
141
142
  archetype: type[_BaseArchetype] | None = None,
142
143
  ) -> BasicBlock:
143
- callback_state = CallbackContextState(name)
144
+ try:
145
+ # Default to no_eval=True for performance unless there's an error.
146
+ return _callback_to_cfg(global_state, callback, name, archetype, no_eval=True)
147
+ except CompilationError:
148
+ return _callback_to_cfg(global_state, callback, name, archetype, no_eval=False)
149
+
150
+
151
+ def _callback_to_cfg(
152
+ global_state: GlobalContextState,
153
+ callback: Callable,
154
+ name: str,
155
+ archetype: type[_BaseArchetype] | None,
156
+ no_eval: bool,
157
+ ) -> BasicBlock:
158
+ callback_state = CallbackContextState(name, no_eval=no_eval)
144
159
  context = Context(global_state, callback_state)
145
160
  with using_ctx(context):
146
161
  if archetype is not None: