sonolus.py 0.4.0__tar.gz → 0.4.1__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 (613) hide show
  1. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/PKG-INFO +1 -1
  2. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/doc_stubs/builtins.pyi +27 -87
  3. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/docs/concepts/constructs.md +2 -2
  4. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/pyproject.toml +1 -1
  5. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/sonolus/backend/utils.py +20 -16
  6. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/sonolus/backend/visitor.py +32 -4
  7. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/sonolus/script/containers.py +1 -1
  8. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/sonolus/script/iterator.py +15 -0
  9. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/sonolus/script/level.py +2 -2
  10. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/sonolus/script/maybe.py +105 -3
  11. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/sonolus/script/num.py +12 -12
  12. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/sonolus/script/project.py +1 -1
  13. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/sonolus/script/record.py +36 -36
  14. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/script/test_genexpr.py +40 -0
  15. sonolus_py-0.4.1/tests/script/test_maybe.py +240 -0
  16. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/uv.lock +1 -1
  17. sonolus_py-0.4.0/tests/script/test_maybe.py +0 -71
  18. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/.gitattributes +0 -0
  19. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/.github/workflows/publish.yaml +0 -0
  20. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/.gitignore +0 -0
  21. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/.python-version +0 -0
  22. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/.run/Python tests in tests.run.xml +0 -0
  23. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/LICENSE +0 -0
  24. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/README.md +0 -0
  25. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/doc_stubs/__init__.py +0 -0
  26. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/doc_stubs/math.pyi +0 -0
  27. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/doc_stubs/num.pyi +0 -0
  28. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/doc_stubs/random.pyi +0 -0
  29. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/docs/CNAME +0 -0
  30. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/docs/concepts/builtins.md +0 -0
  31. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/docs/concepts/cli.md +0 -0
  32. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/docs/concepts/index.md +0 -0
  33. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/docs/concepts/project.md +0 -0
  34. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/docs/concepts/resources.md +0 -0
  35. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/docs/concepts/types.md +0 -0
  36. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/docs/index.md +0 -0
  37. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/docs/overview.md +0 -0
  38. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/docs/reference/builtins.md +0 -0
  39. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/docs/reference/index.md +0 -0
  40. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/docs/reference/math.md +0 -0
  41. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/docs/reference/random.md +0 -0
  42. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/docs/reference/sonolus.script.archetype.md +0 -0
  43. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/docs/reference/sonolus.script.array.md +0 -0
  44. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/docs/reference/sonolus.script.array_like.md +0 -0
  45. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/docs/reference/sonolus.script.bucket.md +0 -0
  46. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/docs/reference/sonolus.script.containers.md +0 -0
  47. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/docs/reference/sonolus.script.debug.md +0 -0
  48. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/docs/reference/sonolus.script.easing.md +0 -0
  49. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/docs/reference/sonolus.script.effect.md +0 -0
  50. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/docs/reference/sonolus.script.engine.md +0 -0
  51. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/docs/reference/sonolus.script.globals.md +0 -0
  52. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/docs/reference/sonolus.script.instruction.md +0 -0
  53. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/docs/reference/sonolus.script.interval.md +0 -0
  54. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/docs/reference/sonolus.script.iterator.md +0 -0
  55. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/docs/reference/sonolus.script.level.md +0 -0
  56. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/docs/reference/sonolus.script.maybe.md +0 -0
  57. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/docs/reference/sonolus.script.metadata.md +0 -0
  58. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/docs/reference/sonolus.script.num.md +0 -0
  59. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/docs/reference/sonolus.script.options.md +0 -0
  60. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/docs/reference/sonolus.script.particle.md +0 -0
  61. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/docs/reference/sonolus.script.printing.md +0 -0
  62. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/docs/reference/sonolus.script.project.md +0 -0
  63. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/docs/reference/sonolus.script.quad.md +0 -0
  64. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/docs/reference/sonolus.script.record.md +0 -0
  65. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/docs/reference/sonolus.script.runtime.md +0 -0
  66. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/docs/reference/sonolus.script.sprite.md +0 -0
  67. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/docs/reference/sonolus.script.stream.md +0 -0
  68. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/docs/reference/sonolus.script.text.md +0 -0
  69. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/docs/reference/sonolus.script.timing.md +0 -0
  70. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/docs/reference/sonolus.script.transform.md +0 -0
  71. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/docs/reference/sonolus.script.ui.md +0 -0
  72. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/docs/reference/sonolus.script.values.md +0 -0
  73. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/docs/reference/sonolus.script.vec.md +0 -0
  74. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/mkdocs.yml +0 -0
  75. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/scripts/generate.py +0 -0
  76. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/scripts/runtimes/Engine/Tutorial/Blocks.json +0 -0
  77. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/scripts/runtimes/Functions.json +0 -0
  78. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/scripts/runtimes/Level/Play/Blocks.json +0 -0
  79. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/scripts/runtimes/Level/Preview/Blocks.json +0 -0
  80. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/scripts/runtimes/Level/Watch/Blocks.json +0 -0
  81. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/sonolus/__init__.py +0 -0
  82. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/sonolus/backend/__init__.py +0 -0
  83. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/sonolus/backend/blocks.py +0 -0
  84. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/sonolus/backend/excepthook.py +0 -0
  85. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/sonolus/backend/finalize.py +0 -0
  86. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/sonolus/backend/interpret.py +0 -0
  87. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/sonolus/backend/ir.py +0 -0
  88. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/sonolus/backend/mode.py +0 -0
  89. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/sonolus/backend/node.py +0 -0
  90. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/sonolus/backend/ops.py +0 -0
  91. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/sonolus/backend/optimize/__init__.py +0 -0
  92. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/sonolus/backend/optimize/allocate.py +0 -0
  93. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/sonolus/backend/optimize/constant_evaluation.py +0 -0
  94. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/sonolus/backend/optimize/copy_coalesce.py +0 -0
  95. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/sonolus/backend/optimize/dead_code.py +0 -0
  96. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/sonolus/backend/optimize/dominance.py +0 -0
  97. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/sonolus/backend/optimize/flow.py +0 -0
  98. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/sonolus/backend/optimize/inlining.py +0 -0
  99. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/sonolus/backend/optimize/liveness.py +0 -0
  100. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/sonolus/backend/optimize/optimize.py +0 -0
  101. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/sonolus/backend/optimize/passes.py +0 -0
  102. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/sonolus/backend/optimize/simplify.py +0 -0
  103. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/sonolus/backend/optimize/ssa.py +0 -0
  104. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/sonolus/backend/place.py +0 -0
  105. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/sonolus/build/__init__.py +0 -0
  106. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/sonolus/build/cli.py +0 -0
  107. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/sonolus/build/collection.py +0 -0
  108. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/sonolus/build/compile.py +0 -0
  109. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/sonolus/build/engine.py +0 -0
  110. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/sonolus/build/level.py +0 -0
  111. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/sonolus/build/node.py +0 -0
  112. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/sonolus/build/project.py +0 -0
  113. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/sonolus/py.typed +0 -0
  114. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/sonolus/script/__init__.py +0 -0
  115. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/sonolus/script/archetype.py +0 -0
  116. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/sonolus/script/array.py +0 -0
  117. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/sonolus/script/array_like.py +0 -0
  118. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/sonolus/script/bucket.py +0 -0
  119. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/sonolus/script/debug.py +0 -0
  120. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/sonolus/script/easing.py +0 -0
  121. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/sonolus/script/effect.py +0 -0
  122. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/sonolus/script/engine.py +0 -0
  123. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/sonolus/script/globals.py +0 -0
  124. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/sonolus/script/instruction.py +0 -0
  125. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/sonolus/script/internal/__init__.py +0 -0
  126. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/sonolus/script/internal/builtin_impls.py +0 -0
  127. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/sonolus/script/internal/callbacks.py +0 -0
  128. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/sonolus/script/internal/constant.py +0 -0
  129. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/sonolus/script/internal/context.py +0 -0
  130. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/sonolus/script/internal/descriptor.py +0 -0
  131. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/sonolus/script/internal/dict_impl.py +0 -0
  132. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/sonolus/script/internal/error.py +0 -0
  133. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/sonolus/script/internal/generic.py +0 -0
  134. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/sonolus/script/internal/impl.py +0 -0
  135. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/sonolus/script/internal/introspection.py +0 -0
  136. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/sonolus/script/internal/math_impls.py +0 -0
  137. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/sonolus/script/internal/native.py +0 -0
  138. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/sonolus/script/internal/random.py +0 -0
  139. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/sonolus/script/internal/range.py +0 -0
  140. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/sonolus/script/internal/simulation_context.py +0 -0
  141. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/sonolus/script/internal/transient.py +0 -0
  142. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/sonolus/script/internal/tuple_impl.py +0 -0
  143. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/sonolus/script/internal/value.py +0 -0
  144. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/sonolus/script/interval.py +0 -0
  145. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/sonolus/script/metadata.py +0 -0
  146. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/sonolus/script/options.py +0 -0
  147. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/sonolus/script/particle.py +0 -0
  148. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/sonolus/script/pointer.py +0 -0
  149. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/sonolus/script/printing.py +0 -0
  150. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/sonolus/script/quad.py +0 -0
  151. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/sonolus/script/runtime.py +0 -0
  152. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/sonolus/script/sprite.py +0 -0
  153. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/sonolus/script/stream.py +0 -0
  154. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/sonolus/script/text.py +0 -0
  155. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/sonolus/script/timing.py +0 -0
  156. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/sonolus/script/transform.py +0 -0
  157. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/sonolus/script/ui.py +0 -0
  158. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/sonolus/script/values.py +0 -0
  159. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/sonolus/script/vec.py +0 -0
  160. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/test_projects/pydori/__init__.py +0 -0
  161. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/test_projects/pydori/level.py +0 -0
  162. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/test_projects/pydori/lib/__init__.py +0 -0
  163. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/test_projects/pydori/lib/buckets.py +0 -0
  164. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/test_projects/pydori/lib/connector.py +0 -0
  165. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/test_projects/pydori/lib/effect.py +0 -0
  166. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/test_projects/pydori/lib/layer.py +0 -0
  167. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/test_projects/pydori/lib/layout.py +0 -0
  168. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/test_projects/pydori/lib/note.py +0 -0
  169. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/test_projects/pydori/lib/options.py +0 -0
  170. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/test_projects/pydori/lib/particle.py +0 -0
  171. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/test_projects/pydori/lib/skin.py +0 -0
  172. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/test_projects/pydori/lib/stage.py +0 -0
  173. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/test_projects/pydori/lib/streams.py +0 -0
  174. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/test_projects/pydori/lib/ui.py +0 -0
  175. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/test_projects/pydori/play/__init__.py +0 -0
  176. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/test_projects/pydori/play/connector.py +0 -0
  177. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/test_projects/pydori/play/event.py +0 -0
  178. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/test_projects/pydori/play/input.py +0 -0
  179. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/test_projects/pydori/play/mode.py +0 -0
  180. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/test_projects/pydori/play/note.py +0 -0
  181. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/test_projects/pydori/play/stage.py +0 -0
  182. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/test_projects/pydori/preview/__init__.py +0 -0
  183. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/test_projects/pydori/preview/connector.py +0 -0
  184. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/test_projects/pydori/preview/event.py +0 -0
  185. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/test_projects/pydori/preview/layout.py +0 -0
  186. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/test_projects/pydori/preview/mode.py +0 -0
  187. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/test_projects/pydori/preview/note.py +0 -0
  188. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/test_projects/pydori/preview/stage.py +0 -0
  189. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/test_projects/pydori/project.py +0 -0
  190. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/test_projects/pydori/tutorial/__init__.py +0 -0
  191. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/test_projects/pydori/tutorial/framework.py +0 -0
  192. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/test_projects/pydori/tutorial/instructions.py +0 -0
  193. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/test_projects/pydori/tutorial/intro.py +0 -0
  194. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/test_projects/pydori/tutorial/mode.py +0 -0
  195. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/test_projects/pydori/tutorial/navigate.py +0 -0
  196. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/test_projects/pydori/tutorial/painting.py +0 -0
  197. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/test_projects/pydori/tutorial/phases.py +0 -0
  198. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/test_projects/pydori/tutorial/preprocess.py +0 -0
  199. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/test_projects/pydori/tutorial/update.py +0 -0
  200. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/test_projects/pydori/watch/__init__.py +0 -0
  201. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/test_projects/pydori/watch/connector.py +0 -0
  202. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/test_projects/pydori/watch/event.py +0 -0
  203. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/test_projects/pydori/watch/mode.py +0 -0
  204. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/test_projects/pydori/watch/note.py +0 -0
  205. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/test_projects/pydori/watch/stage.py +0 -0
  206. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/test_projects/pydori/watch/update_spawn.py +0 -0
  207. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/__init__.py +0 -0
  208. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/__init__.py +0 -0
  209. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/conftest.py +0 -0
  210. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_hold_connector_should_spawn_cfg +0 -0
  211. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_hold_connector_should_spawn_fast_nodes +0 -0
  212. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_hold_connector_should_spawn_fast_optimized_cfg +0 -0
  213. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_hold_connector_should_spawn_standard_nodes +0 -0
  214. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_hold_connector_should_spawn_standard_optimized_cfg +0 -0
  215. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_hold_connector_spawn_order_cfg +0 -0
  216. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_hold_connector_spawn_order_fast_nodes +0 -0
  217. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_hold_connector_spawn_order_fast_optimized_cfg +0 -0
  218. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_hold_connector_spawn_order_standard_nodes +0 -0
  219. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_hold_connector_spawn_order_standard_optimized_cfg +0 -0
  220. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_hold_connector_update_parallel_cfg +0 -0
  221. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_hold_connector_update_parallel_fast_nodes +0 -0
  222. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_hold_connector_update_parallel_fast_optimized_cfg +0 -0
  223. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_hold_connector_update_parallel_standard_nodes +0 -0
  224. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_hold_connector_update_parallel_standard_optimized_cfg +0 -0
  225. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_hold_connector_update_sequential_cfg +0 -0
  226. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_hold_connector_update_sequential_fast_nodes +0 -0
  227. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_hold_connector_update_sequential_fast_optimized_cfg +0 -0
  228. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_hold_connector_update_sequential_standard_nodes +0 -0
  229. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_hold_connector_update_sequential_standard_optimized_cfg +0 -0
  230. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_hold_manager_touch_cfg +0 -0
  231. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_hold_manager_touch_fast_nodes +0 -0
  232. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_hold_manager_touch_fast_optimized_cfg +0 -0
  233. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_hold_manager_touch_standard_nodes +0 -0
  234. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_hold_manager_touch_standard_optimized_cfg +0 -0
  235. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_hold_manager_update_parallel_cfg +0 -0
  236. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_hold_manager_update_parallel_fast_nodes +0 -0
  237. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_hold_manager_update_parallel_fast_optimized_cfg +0 -0
  238. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_hold_manager_update_parallel_standard_nodes +0 -0
  239. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_hold_manager_update_parallel_standard_optimized_cfg +0 -0
  240. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_note_initialize_cfg +0 -0
  241. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_note_initialize_fast_nodes +0 -0
  242. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_note_initialize_fast_optimized_cfg +0 -0
  243. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_note_initialize_standard_nodes +0 -0
  244. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_note_initialize_standard_optimized_cfg +0 -0
  245. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_note_preprocess_cfg +0 -0
  246. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_note_preprocess_fast_nodes +0 -0
  247. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_note_preprocess_fast_optimized_cfg +0 -0
  248. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_note_preprocess_standard_nodes +0 -0
  249. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_note_preprocess_standard_optimized_cfg +0 -0
  250. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_note_should_spawn_cfg +0 -0
  251. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_note_should_spawn_fast_nodes +0 -0
  252. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_note_should_spawn_fast_optimized_cfg +0 -0
  253. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_note_should_spawn_standard_nodes +0 -0
  254. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_note_should_spawn_standard_optimized_cfg +0 -0
  255. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_note_spawn_order_cfg +0 -0
  256. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_note_spawn_order_fast_nodes +0 -0
  257. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_note_spawn_order_fast_optimized_cfg +0 -0
  258. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_note_spawn_order_standard_nodes +0 -0
  259. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_note_spawn_order_standard_optimized_cfg +0 -0
  260. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_note_terminate_cfg +0 -0
  261. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_note_terminate_fast_nodes +0 -0
  262. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_note_terminate_fast_optimized_cfg +0 -0
  263. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_note_terminate_standard_nodes +0 -0
  264. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_note_terminate_standard_optimized_cfg +0 -0
  265. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_note_touch_cfg +0 -0
  266. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_note_touch_fast_nodes +0 -0
  267. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_note_touch_fast_optimized_cfg +0 -0
  268. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_note_touch_standard_nodes +0 -0
  269. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_note_touch_standard_optimized_cfg +0 -0
  270. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_note_update_parallel_cfg +0 -0
  271. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_note_update_parallel_fast_nodes +0 -0
  272. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_note_update_parallel_fast_optimized_cfg +0 -0
  273. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_note_update_parallel_standard_nodes +0 -0
  274. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_note_update_parallel_standard_optimized_cfg +0 -0
  275. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_note_update_sequential_cfg +0 -0
  276. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_note_update_sequential_fast_nodes +0 -0
  277. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_note_update_sequential_fast_optimized_cfg +0 -0
  278. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_note_update_sequential_standard_nodes +0 -0
  279. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_note_update_sequential_standard_optimized_cfg +0 -0
  280. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_sim_line_should_spawn_cfg +0 -0
  281. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_sim_line_should_spawn_fast_nodes +0 -0
  282. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_sim_line_should_spawn_fast_optimized_cfg +0 -0
  283. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_sim_line_should_spawn_standard_nodes +0 -0
  284. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_sim_line_should_spawn_standard_optimized_cfg +0 -0
  285. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_sim_line_spawn_order_cfg +0 -0
  286. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_sim_line_spawn_order_fast_nodes +0 -0
  287. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_sim_line_spawn_order_fast_optimized_cfg +0 -0
  288. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_sim_line_spawn_order_standard_nodes +0 -0
  289. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_sim_line_spawn_order_standard_optimized_cfg +0 -0
  290. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_sim_line_update_parallel_cfg +0 -0
  291. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_sim_line_update_parallel_fast_nodes +0 -0
  292. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_sim_line_update_parallel_fast_optimized_cfg +0 -0
  293. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_sim_line_update_parallel_standard_nodes +0 -0
  294. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_sim_line_update_parallel_standard_optimized_cfg +0 -0
  295. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_stage_preprocess_cfg +0 -0
  296. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_stage_preprocess_fast_nodes +0 -0
  297. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_stage_preprocess_fast_optimized_cfg +0 -0
  298. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_stage_preprocess_standard_nodes +0 -0
  299. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_stage_preprocess_standard_optimized_cfg +0 -0
  300. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_stage_should_spawn_cfg +0 -0
  301. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_stage_should_spawn_fast_nodes +0 -0
  302. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_stage_should_spawn_fast_optimized_cfg +0 -0
  303. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_stage_should_spawn_standard_nodes +0 -0
  304. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_stage_should_spawn_standard_optimized_cfg +0 -0
  305. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_stage_spawn_order_cfg +0 -0
  306. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_stage_spawn_order_fast_nodes +0 -0
  307. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_stage_spawn_order_fast_optimized_cfg +0 -0
  308. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_stage_spawn_order_standard_nodes +0 -0
  309. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_stage_spawn_order_standard_optimized_cfg +0 -0
  310. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_stage_touch_cfg +0 -0
  311. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_stage_touch_fast_nodes +0 -0
  312. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_stage_touch_fast_optimized_cfg +0 -0
  313. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_stage_touch_standard_nodes +0 -0
  314. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_stage_touch_standard_optimized_cfg +0 -0
  315. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_stage_update_parallel_cfg +0 -0
  316. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_stage_update_parallel_fast_nodes +0 -0
  317. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_stage_update_parallel_fast_optimized_cfg +0 -0
  318. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_stage_update_parallel_standard_nodes +0 -0
  319. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_stage_update_parallel_standard_optimized_cfg +0 -0
  320. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_stage_update_sequential_cfg +0 -0
  321. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_stage_update_sequential_fast_nodes +0 -0
  322. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_stage_update_sequential_fast_optimized_cfg +0 -0
  323. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_stage_update_sequential_standard_nodes +0 -0
  324. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_stage_update_sequential_standard_optimized_cfg +0 -0
  325. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_unscored_note_initialize_cfg +0 -0
  326. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_unscored_note_initialize_fast_nodes +0 -0
  327. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_unscored_note_initialize_fast_optimized_cfg +0 -0
  328. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_unscored_note_initialize_standard_nodes +0 -0
  329. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_unscored_note_initialize_standard_optimized_cfg +0 -0
  330. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_unscored_note_preprocess_cfg +0 -0
  331. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_unscored_note_preprocess_fast_nodes +0 -0
  332. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_unscored_note_preprocess_fast_optimized_cfg +0 -0
  333. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_unscored_note_preprocess_standard_nodes +0 -0
  334. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_unscored_note_preprocess_standard_optimized_cfg +0 -0
  335. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_unscored_note_should_spawn_cfg +0 -0
  336. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_unscored_note_should_spawn_fast_nodes +0 -0
  337. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_unscored_note_should_spawn_fast_optimized_cfg +0 -0
  338. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_unscored_note_should_spawn_standard_nodes +0 -0
  339. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_unscored_note_should_spawn_standard_optimized_cfg +0 -0
  340. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_unscored_note_spawn_order_cfg +0 -0
  341. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_unscored_note_spawn_order_fast_nodes +0 -0
  342. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_unscored_note_spawn_order_fast_optimized_cfg +0 -0
  343. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_unscored_note_spawn_order_standard_nodes +0 -0
  344. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_unscored_note_spawn_order_standard_optimized_cfg +0 -0
  345. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_unscored_note_terminate_cfg +0 -0
  346. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_unscored_note_terminate_fast_nodes +0 -0
  347. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_unscored_note_terminate_fast_optimized_cfg +0 -0
  348. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_unscored_note_terminate_standard_nodes +0 -0
  349. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_unscored_note_terminate_standard_optimized_cfg +0 -0
  350. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_unscored_note_touch_cfg +0 -0
  351. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_unscored_note_touch_fast_nodes +0 -0
  352. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_unscored_note_touch_fast_optimized_cfg +0 -0
  353. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_unscored_note_touch_standard_nodes +0 -0
  354. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_unscored_note_touch_standard_optimized_cfg +0 -0
  355. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_unscored_note_update_parallel_cfg +0 -0
  356. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_unscored_note_update_parallel_fast_nodes +0 -0
  357. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_unscored_note_update_parallel_fast_optimized_cfg +0 -0
  358. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_unscored_note_update_parallel_standard_nodes +0 -0
  359. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_unscored_note_update_parallel_standard_optimized_cfg +0 -0
  360. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_unscored_note_update_sequential_cfg +0 -0
  361. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_unscored_note_update_sequential_fast_nodes +0 -0
  362. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_unscored_note_update_sequential_fast_optimized_cfg +0 -0
  363. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_unscored_note_update_sequential_standard_nodes +0 -0
  364. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_play_unscored_note_update_sequential_standard_optimized_cfg +0 -0
  365. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_preview_preview_bpm_change_preprocess_cfg +0 -0
  366. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_preview_preview_bpm_change_preprocess_fast_nodes +0 -0
  367. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_preview_preview_bpm_change_preprocess_fast_optimized_cfg +0 -0
  368. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_preview_preview_bpm_change_preprocess_standard_nodes +0 -0
  369. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_preview_preview_bpm_change_preprocess_standard_optimized_cfg +0 -0
  370. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_preview_preview_bpm_change_render_cfg +0 -0
  371. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_preview_preview_bpm_change_render_fast_nodes +0 -0
  372. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_preview_preview_bpm_change_render_fast_optimized_cfg +0 -0
  373. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_preview_preview_bpm_change_render_standard_nodes +0 -0
  374. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_preview_preview_bpm_change_render_standard_optimized_cfg +0 -0
  375. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_preview_preview_hold_connector_render_cfg +0 -0
  376. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_preview_preview_hold_connector_render_fast_nodes +0 -0
  377. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_preview_preview_hold_connector_render_fast_optimized_cfg +0 -0
  378. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_preview_preview_hold_connector_render_standard_nodes +0 -0
  379. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_preview_preview_hold_connector_render_standard_optimized_cfg +0 -0
  380. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_preview_preview_note_preprocess_cfg +0 -0
  381. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_preview_preview_note_preprocess_fast_nodes +0 -0
  382. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_preview_preview_note_preprocess_fast_optimized_cfg +0 -0
  383. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_preview_preview_note_preprocess_standard_nodes +0 -0
  384. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_preview_preview_note_preprocess_standard_optimized_cfg +0 -0
  385. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_preview_preview_note_render_cfg +0 -0
  386. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_preview_preview_note_render_fast_nodes +0 -0
  387. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_preview_preview_note_render_fast_optimized_cfg +0 -0
  388. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_preview_preview_note_render_standard_nodes +0 -0
  389. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_preview_preview_note_render_standard_optimized_cfg +0 -0
  390. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_preview_preview_sim_line_render_cfg +0 -0
  391. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_preview_preview_sim_line_render_fast_nodes +0 -0
  392. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_preview_preview_sim_line_render_fast_optimized_cfg +0 -0
  393. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_preview_preview_sim_line_render_standard_nodes +0 -0
  394. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_preview_preview_sim_line_render_standard_optimized_cfg +0 -0
  395. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_preview_preview_stage_preprocess_cfg +0 -0
  396. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_preview_preview_stage_preprocess_fast_nodes +0 -0
  397. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_preview_preview_stage_preprocess_fast_optimized_cfg +0 -0
  398. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_preview_preview_stage_preprocess_standard_nodes +0 -0
  399. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_preview_preview_stage_preprocess_standard_optimized_cfg +0 -0
  400. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_preview_preview_stage_render_cfg +0 -0
  401. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_preview_preview_stage_render_fast_nodes +0 -0
  402. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_preview_preview_stage_render_fast_optimized_cfg +0 -0
  403. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_preview_preview_stage_render_standard_nodes +0 -0
  404. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_preview_preview_stage_render_standard_optimized_cfg +0 -0
  405. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_preview_preview_timescale_change_preprocess_cfg +0 -0
  406. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_preview_preview_timescale_change_preprocess_fast_nodes +0 -0
  407. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_preview_preview_timescale_change_preprocess_fast_optimized_cfg +0 -0
  408. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_preview_preview_timescale_change_preprocess_standard_nodes +0 -0
  409. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_preview_preview_timescale_change_preprocess_standard_optimized_cfg +0 -0
  410. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_preview_preview_timescale_change_render_cfg +0 -0
  411. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_preview_preview_timescale_change_render_fast_nodes +0 -0
  412. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_preview_preview_timescale_change_render_fast_optimized_cfg +0 -0
  413. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_preview_preview_timescale_change_render_standard_nodes +0 -0
  414. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_preview_preview_timescale_change_render_standard_optimized_cfg +0 -0
  415. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_preview_preview_unscored_note_preprocess_cfg +0 -0
  416. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_preview_preview_unscored_note_preprocess_fast_nodes +0 -0
  417. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_preview_preview_unscored_note_preprocess_fast_optimized_cfg +0 -0
  418. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_preview_preview_unscored_note_preprocess_standard_nodes +0 -0
  419. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_preview_preview_unscored_note_preprocess_standard_optimized_cfg +0 -0
  420. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_preview_preview_unscored_note_render_cfg +0 -0
  421. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_preview_preview_unscored_note_render_fast_nodes +0 -0
  422. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_preview_preview_unscored_note_render_fast_optimized_cfg +0 -0
  423. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_preview_preview_unscored_note_render_standard_nodes +0 -0
  424. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_preview_preview_unscored_note_render_standard_optimized_cfg +0 -0
  425. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_tutorial_global_navigate_fast_cfg +0 -0
  426. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_tutorial_global_navigate_fast_nodes +0 -0
  427. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_tutorial_global_navigate_fast_optimized_cfg +0 -0
  428. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_tutorial_global_navigate_standard_cfg +0 -0
  429. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_tutorial_global_navigate_standard_nodes +0 -0
  430. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_tutorial_global_navigate_standard_optimized_cfg +0 -0
  431. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_tutorial_global_preprocess_fast_cfg +0 -0
  432. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_tutorial_global_preprocess_fast_nodes +0 -0
  433. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_tutorial_global_preprocess_fast_optimized_cfg +0 -0
  434. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_tutorial_global_preprocess_standard_cfg +0 -0
  435. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_tutorial_global_preprocess_standard_nodes +0 -0
  436. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_tutorial_global_preprocess_standard_optimized_cfg +0 -0
  437. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_tutorial_global_update_fast_cfg +0 -0
  438. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_tutorial_global_update_fast_nodes +0 -0
  439. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_tutorial_global_update_fast_optimized_cfg +0 -0
  440. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_tutorial_global_update_standard_cfg +0 -0
  441. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_tutorial_global_update_standard_nodes +0 -0
  442. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_tutorial_global_update_standard_optimized_cfg +0 -0
  443. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_global_update_spawn_fast_cfg +0 -0
  444. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_global_update_spawn_fast_nodes +0 -0
  445. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_global_update_spawn_fast_optimized_cfg +0 -0
  446. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_global_update_spawn_standard_cfg +0 -0
  447. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_global_update_spawn_standard_nodes +0 -0
  448. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_global_update_spawn_standard_optimized_cfg +0 -0
  449. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_hold_connector_despawn_time_cfg +0 -0
  450. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_hold_connector_despawn_time_fast_nodes +0 -0
  451. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_hold_connector_despawn_time_fast_optimized_cfg +0 -0
  452. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_hold_connector_despawn_time_standard_nodes +0 -0
  453. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_hold_connector_despawn_time_standard_optimized_cfg +0 -0
  454. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_hold_connector_spawn_time_cfg +0 -0
  455. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_hold_connector_spawn_time_fast_nodes +0 -0
  456. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_hold_connector_spawn_time_fast_optimized_cfg +0 -0
  457. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_hold_connector_spawn_time_standard_nodes +0 -0
  458. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_hold_connector_spawn_time_standard_optimized_cfg +0 -0
  459. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_hold_connector_update_parallel_cfg +0 -0
  460. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_hold_connector_update_parallel_fast_nodes +0 -0
  461. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_hold_connector_update_parallel_fast_optimized_cfg +0 -0
  462. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_hold_connector_update_parallel_standard_nodes +0 -0
  463. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_hold_connector_update_parallel_standard_optimized_cfg +0 -0
  464. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_hold_connector_update_sequential_cfg +0 -0
  465. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_hold_connector_update_sequential_fast_nodes +0 -0
  466. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_hold_connector_update_sequential_fast_optimized_cfg +0 -0
  467. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_hold_connector_update_sequential_standard_nodes +0 -0
  468. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_hold_connector_update_sequential_standard_optimized_cfg +0 -0
  469. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_hold_manager_despawn_time_cfg +0 -0
  470. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_hold_manager_despawn_time_fast_nodes +0 -0
  471. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_hold_manager_despawn_time_fast_optimized_cfg +0 -0
  472. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_hold_manager_despawn_time_standard_nodes +0 -0
  473. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_hold_manager_despawn_time_standard_optimized_cfg +0 -0
  474. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_hold_manager_spawn_time_cfg +0 -0
  475. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_hold_manager_spawn_time_fast_nodes +0 -0
  476. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_hold_manager_spawn_time_fast_optimized_cfg +0 -0
  477. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_hold_manager_spawn_time_standard_nodes +0 -0
  478. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_hold_manager_spawn_time_standard_optimized_cfg +0 -0
  479. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_hold_manager_terminate_cfg +0 -0
  480. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_hold_manager_terminate_fast_nodes +0 -0
  481. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_hold_manager_terminate_fast_optimized_cfg +0 -0
  482. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_hold_manager_terminate_standard_nodes +0 -0
  483. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_hold_manager_terminate_standard_optimized_cfg +0 -0
  484. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_hold_manager_update_parallel_cfg +0 -0
  485. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_hold_manager_update_parallel_fast_nodes +0 -0
  486. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_hold_manager_update_parallel_fast_optimized_cfg +0 -0
  487. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_hold_manager_update_parallel_standard_nodes +0 -0
  488. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_hold_manager_update_parallel_standard_optimized_cfg +0 -0
  489. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_note_despawn_time_cfg +0 -0
  490. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_note_despawn_time_fast_nodes +0 -0
  491. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_note_despawn_time_fast_optimized_cfg +0 -0
  492. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_note_despawn_time_standard_nodes +0 -0
  493. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_note_despawn_time_standard_optimized_cfg +0 -0
  494. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_note_preprocess_cfg +0 -0
  495. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_note_preprocess_fast_nodes +0 -0
  496. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_note_preprocess_fast_optimized_cfg +0 -0
  497. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_note_preprocess_standard_nodes +0 -0
  498. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_note_preprocess_standard_optimized_cfg +0 -0
  499. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_note_spawn_time_cfg +0 -0
  500. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_note_spawn_time_fast_nodes +0 -0
  501. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_note_spawn_time_fast_optimized_cfg +0 -0
  502. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_note_spawn_time_standard_nodes +0 -0
  503. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_note_spawn_time_standard_optimized_cfg +0 -0
  504. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_note_terminate_cfg +0 -0
  505. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_note_terminate_fast_nodes +0 -0
  506. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_note_terminate_fast_optimized_cfg +0 -0
  507. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_note_terminate_standard_nodes +0 -0
  508. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_note_terminate_standard_optimized_cfg +0 -0
  509. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_note_update_parallel_cfg +0 -0
  510. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_note_update_parallel_fast_nodes +0 -0
  511. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_note_update_parallel_fast_optimized_cfg +0 -0
  512. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_note_update_parallel_standard_nodes +0 -0
  513. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_note_update_parallel_standard_optimized_cfg +0 -0
  514. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_scheduled_lane_effect_despawn_time_cfg +0 -0
  515. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_scheduled_lane_effect_despawn_time_fast_nodes +0 -0
  516. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_scheduled_lane_effect_despawn_time_fast_optimized_cfg +0 -0
  517. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_scheduled_lane_effect_despawn_time_standard_nodes +0 -0
  518. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_scheduled_lane_effect_despawn_time_standard_optimized_cfg +0 -0
  519. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_scheduled_lane_effect_spawn_time_cfg +0 -0
  520. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_scheduled_lane_effect_spawn_time_fast_nodes +0 -0
  521. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_scheduled_lane_effect_spawn_time_fast_optimized_cfg +0 -0
  522. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_scheduled_lane_effect_spawn_time_standard_nodes +0 -0
  523. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_scheduled_lane_effect_spawn_time_standard_optimized_cfg +0 -0
  524. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_scheduled_lane_effect_update_parallel_cfg +0 -0
  525. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_scheduled_lane_effect_update_parallel_fast_nodes +0 -0
  526. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_scheduled_lane_effect_update_parallel_fast_optimized_cfg +0 -0
  527. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_scheduled_lane_effect_update_parallel_standard_nodes +0 -0
  528. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_scheduled_lane_effect_update_parallel_standard_optimized_cfg +0 -0
  529. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_sim_line_despawn_time_cfg +0 -0
  530. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_sim_line_despawn_time_fast_nodes +0 -0
  531. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_sim_line_despawn_time_fast_optimized_cfg +0 -0
  532. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_sim_line_despawn_time_standard_nodes +0 -0
  533. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_sim_line_despawn_time_standard_optimized_cfg +0 -0
  534. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_sim_line_spawn_time_cfg +0 -0
  535. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_sim_line_spawn_time_fast_nodes +0 -0
  536. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_sim_line_spawn_time_fast_optimized_cfg +0 -0
  537. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_sim_line_spawn_time_standard_nodes +0 -0
  538. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_sim_line_spawn_time_standard_optimized_cfg +0 -0
  539. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_sim_line_update_parallel_cfg +0 -0
  540. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_sim_line_update_parallel_fast_nodes +0 -0
  541. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_sim_line_update_parallel_fast_optimized_cfg +0 -0
  542. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_sim_line_update_parallel_standard_nodes +0 -0
  543. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_sim_line_update_parallel_standard_optimized_cfg +0 -0
  544. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_stage_despawn_time_cfg +0 -0
  545. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_stage_despawn_time_fast_nodes +0 -0
  546. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_stage_despawn_time_fast_optimized_cfg +0 -0
  547. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_stage_despawn_time_standard_nodes +0 -0
  548. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_stage_despawn_time_standard_optimized_cfg +0 -0
  549. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_stage_preprocess_cfg +0 -0
  550. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_stage_preprocess_fast_nodes +0 -0
  551. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_stage_preprocess_fast_optimized_cfg +0 -0
  552. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_stage_preprocess_standard_nodes +0 -0
  553. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_stage_preprocess_standard_optimized_cfg +0 -0
  554. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_stage_spawn_time_cfg +0 -0
  555. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_stage_spawn_time_fast_nodes +0 -0
  556. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_stage_spawn_time_fast_optimized_cfg +0 -0
  557. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_stage_spawn_time_standard_nodes +0 -0
  558. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_stage_spawn_time_standard_optimized_cfg +0 -0
  559. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_stage_update_parallel_cfg +0 -0
  560. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_stage_update_parallel_fast_nodes +0 -0
  561. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_stage_update_parallel_fast_optimized_cfg +0 -0
  562. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_stage_update_parallel_standard_nodes +0 -0
  563. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_stage_update_parallel_standard_optimized_cfg +0 -0
  564. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_unscored_note_despawn_time_cfg +0 -0
  565. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_unscored_note_despawn_time_fast_nodes +0 -0
  566. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_unscored_note_despawn_time_fast_optimized_cfg +0 -0
  567. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_unscored_note_despawn_time_standard_nodes +0 -0
  568. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_unscored_note_despawn_time_standard_optimized_cfg +0 -0
  569. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_unscored_note_preprocess_cfg +0 -0
  570. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_unscored_note_preprocess_fast_nodes +0 -0
  571. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_unscored_note_preprocess_fast_optimized_cfg +0 -0
  572. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_unscored_note_preprocess_standard_nodes +0 -0
  573. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_unscored_note_preprocess_standard_optimized_cfg +0 -0
  574. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_unscored_note_spawn_time_cfg +0 -0
  575. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_unscored_note_spawn_time_fast_nodes +0 -0
  576. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_unscored_note_spawn_time_fast_optimized_cfg +0 -0
  577. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_unscored_note_spawn_time_standard_nodes +0 -0
  578. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_unscored_note_spawn_time_standard_optimized_cfg +0 -0
  579. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_unscored_note_terminate_cfg +0 -0
  580. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_unscored_note_terminate_fast_nodes +0 -0
  581. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_unscored_note_terminate_fast_optimized_cfg +0 -0
  582. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_unscored_note_terminate_standard_nodes +0 -0
  583. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_unscored_note_terminate_standard_optimized_cfg +0 -0
  584. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_unscored_note_update_parallel_cfg +0 -0
  585. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_unscored_note_update_parallel_fast_nodes +0 -0
  586. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_unscored_note_update_parallel_fast_optimized_cfg +0 -0
  587. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_unscored_note_update_parallel_standard_nodes +0 -0
  588. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/data/pydori_watch_watch_unscored_note_update_parallel_standard_optimized_cfg +0 -0
  589. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/regressions/test_project.py +0 -0
  590. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/script/__init__.py +0 -0
  591. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/script/conftest.py +0 -0
  592. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/script/test_array.py +0 -0
  593. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/script/test_array_map.py +0 -0
  594. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/script/test_array_set.py +0 -0
  595. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/script/test_assert.py +0 -0
  596. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/script/test_dict.py +0 -0
  597. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/script/test_flow.py +0 -0
  598. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/script/test_functions.py +0 -0
  599. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/script/test_generator.py +0 -0
  600. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/script/test_helpers.py +0 -0
  601. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/script/test_interval.py +0 -0
  602. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/script/test_match.py +0 -0
  603. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/script/test_num.py +0 -0
  604. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/script/test_operator.py +0 -0
  605. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/script/test_quad.py +0 -0
  606. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/script/test_random.py +0 -0
  607. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/script/test_range.py +0 -0
  608. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/script/test_record.py +0 -0
  609. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/script/test_transform.py +0 -0
  610. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/script/test_tuple.py +0 -0
  611. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/script/test_values.py +0 -0
  612. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/tests/script/test_var_array.py +0 -0
  613. {sonolus_py-0.4.0 → sonolus_py-0.4.1}/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.1
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:
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "sonolus.py"
3
- version = "0.4.0"
3
+ version = "0.4.1"
4
4
  description = "Sonolus engine development in Python"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.12"
@@ -23,29 +23,33 @@ 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
27
 
28
28
  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)
29
+ self.results.append(node)
30
+ self.generic_visit(node)
35
31
 
36
32
  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)
33
+ self.results.append(node)
34
+ self.generic_visit(node)
43
35
 
44
36
 
45
- def find_function(tree: ast.Module, line: int):
46
- visitor = FindFunction(line)
37
+ @cache
38
+ def get_functions(tree: ast.Module) -> list[ast.FunctionDef | ast.Lambda]:
39
+ visitor = FindFunction(0)
47
40
  visitor.visit(tree)
48
- return visitor.node
41
+ return visitor.results
42
+
43
+
44
+ def find_function(tree: ast.Module, line: int):
45
+ for node in get_functions(tree):
46
+ if node.lineno == line or (
47
+ isinstance(node, ast.FunctionDef)
48
+ and node.decorator_list
49
+ and (node.decorator_list[-1].end_lineno <= line <= node.lineno)
50
+ ):
51
+ return node
52
+ raise ValueError("Function not found")
49
53
 
50
54
 
51
55
  class ScanWrites(ast.NodeVisitor):
@@ -261,7 +261,21 @@ class Visitor(ast.NodeVisitor):
261
261
  result = self.visit(body)
262
262
  ctx().scope.set_value("$return", result)
263
263
  case ast.GeneratorExp(elt=elt, generators=generators):
264
- self.construct_genexpr(generators, elt)
264
+ first_generator = generators[0]
265
+ iterable = self.visit(first_generator.iter)
266
+ if isinstance(iterable, TupleImpl):
267
+ initial_iterator = iterable
268
+ else:
269
+ if not hasattr(iterable, "__iter__"):
270
+ raise TypeError(f"Object of type '{type(iterable).__name__}' is not iterable")
271
+ initial_iterator = self.handle_call(first_generator.iter, iterable.__iter__)
272
+ if not isinstance(initial_iterator, SonolusIterator):
273
+ raise ValueError("Unsupported iterator")
274
+ # The initial iterator is evaluated eagerly in Python
275
+ before_ctx = ctx().branch_with_scope(None, before_ctx.scope.copy())
276
+ start_ctx = before_ctx.branch_with_scope(None, Scope())
277
+ set_ctx(start_ctx)
278
+ self.construct_genexpr(generators, elt, initial_iterator)
265
279
  ctx().scope.set_value("$return", validate_value(None))
266
280
  case _:
267
281
  raise NotImplementedError("Unsupported syntax")
@@ -323,7 +337,9 @@ class Visitor(ast.NodeVisitor):
323
337
  set_ctx(after_ctx.branch_with_scope(None, before_ctx.scope.copy()))
324
338
  return result_binding.value
325
339
 
326
- def construct_genexpr(self, generators: Iterable[ast.comprehension], elt: ast.expr):
340
+ def construct_genexpr(
341
+ self, generators: Iterable[ast.comprehension], elt: ast.expr, initial_iterator: Value | None = None
342
+ ):
327
343
  if not generators:
328
344
  # Note that there may effectively be multiple yields in an expression since
329
345
  # tuples are unrolled.
@@ -335,14 +351,22 @@ class Visitor(ast.NodeVisitor):
335
351
  set_ctx(resume_ctx)
336
352
  return
337
353
  generator, *others = generators
338
- iterable = self.visit(generator.iter)
354
+ if initial_iterator is not None:
355
+ iterable = initial_iterator
356
+ else:
357
+ iterable = self.visit(generator.iter)
339
358
  if isinstance(iterable, TupleImpl):
340
359
  for value in iterable.value:
341
360
  set_ctx(ctx().branch(None))
342
361
  self.handle_assign(generator.target, validate_value(value))
343
362
  self.construct_genexpr(others, elt)
344
363
  else:
345
- iterator = self.handle_call(generator.iter, iterable.__iter__)
364
+ if initial_iterator is not None:
365
+ iterator = initial_iterator
366
+ else:
367
+ if not hasattr(iterable, "__iter__"):
368
+ raise TypeError(f"Object of type '{type(iterable).__name__}' is not iterable")
369
+ iterator = self.handle_call(generator.iter, iterable.__iter__)
346
370
  if not isinstance(iterator, SonolusIterator):
347
371
  raise ValueError("Unsupported iterator")
348
372
  header_ctx = ctx().branch(None)
@@ -493,6 +517,8 @@ class Visitor(ast.NodeVisitor):
493
517
  if break_ctxs:
494
518
  set_ctx(Context.meet([*break_ctxs, ctx()]))
495
519
  return
520
+ if not hasattr(iterable, "__iter__"):
521
+ raise TypeError(f"Object of type '{type(iterable).__name__}' is not iterable")
496
522
  iterator = self.handle_call(node, iterable.__iter__)
497
523
  if not isinstance(iterator, SonolusIterator):
498
524
  raise ValueError("Unsupported iterator")
@@ -980,6 +1006,8 @@ class Visitor(ast.NodeVisitor):
980
1006
  self.resume_ctxs.append(resume_ctx)
981
1007
  set_ctx(resume_ctx)
982
1008
  return validate_value(None)
1009
+ if not hasattr(value, "__iter__"):
1010
+ raise TypeError(f"Object of type '{type(value).__name__}' is not iterable")
983
1011
  iterator = self.handle_call(node, value.__iter__)
984
1012
  if not isinstance(iterator, SonolusIterator):
985
1013
  raise ValueError("Expected a SonolusIterator")
@@ -337,7 +337,7 @@ class ArrayPointer[T](Record, ArrayLike[T]):
337
337
  raise TypeError("ArrayPointer values cannot be accessed outside of a context")
338
338
  return _deref(
339
339
  # Allows a compile time constant block so we can warn based on callback read/write access
340
- (self._value["block"]._is_py_() and self._value["block"]._as_py_()) or self.block,
340
+ (self._value_["block"]._is_py_() and self._value_["block"]._as_py_()) or self.block,
341
341
  self.offset + Num._accept_(item) * Num._accept_(self.element_type()._size_()),
342
342
  self.element_type(),
343
343
  )
@@ -1,7 +1,9 @@
1
1
  from __future__ import annotations
2
2
 
3
+ from collections.abc import Iterator
3
4
  from typing import Any
4
5
 
6
+ from sonolus.script.internal.context import ctx
5
7
  from sonolus.script.internal.impl import meta_fn
6
8
  from sonolus.script.maybe import Maybe, Nothing, Some
7
9
  from sonolus.script.record import Record
@@ -114,3 +116,16 @@ class _FilteringIterator[T, Fn](Record, SonolusIterator):
114
116
  inside = value.get_unsafe()
115
117
  if self.fn(inside):
116
118
  return Some(inside)
119
+
120
+
121
+ @meta_fn
122
+ def maybe_next[T](iterator: Iterator[T]) -> Maybe[T]:
123
+ """Get the next item from an iterator as a `Maybe` if it exists or `Nothing` otherwise."""
124
+ from sonolus.backend.visitor import compile_and_call
125
+
126
+ if not isinstance(iterator, SonolusIterator):
127
+ raise TypeError("Iterator must be an instance of SonolusIterator.")
128
+ if ctx():
129
+ return compile_and_call(iterator.next)
130
+ else:
131
+ return iterator.next()
@@ -145,7 +145,7 @@ class Level:
145
145
  )
146
146
 
147
147
 
148
- type EntityListArg = list[PlayArchetype | EntityListArg]
148
+ type EntityListArg = list[list[PlayArchetype] | PlayArchetype] | PlayArchetype
149
149
 
150
150
 
151
151
  def flatten_entities(entities: EntityListArg) -> Iterator[PlayArchetype]:
@@ -175,7 +175,7 @@ class LevelData:
175
175
  bgm_offset: float
176
176
  entities: list[PlayArchetype]
177
177
 
178
- def __init__(self, bgm_offset: float, entities: list[PlayArchetype]) -> None:
178
+ def __init__(self, bgm_offset: float, entities: EntityListArg) -> None:
179
179
  self.bgm_offset = bgm_offset
180
180
  self.entities = [*flatten_entities(entities)]
181
181
 
@@ -4,10 +4,11 @@ from collections.abc import Callable
4
4
  from typing import Any
5
5
 
6
6
  from sonolus.script.internal.context import ctx
7
- from sonolus.script.internal.impl import meta_fn
7
+ from sonolus.script.internal.impl import meta_fn, validate_value
8
8
  from sonolus.script.internal.transient import TransientValue
9
9
  from sonolus.script.internal.value import Value
10
10
  from sonolus.script.num import Num
11
+ from sonolus.script.values import copy, zeros
11
12
 
12
13
 
13
14
  class Maybe[T](TransientValue):
@@ -38,13 +39,16 @@ class Maybe[T](TransientValue):
38
39
 
39
40
  def __init__(self, *, present: bool, value: T):
40
41
  self._present = Num._accept_(present)
41
- self._value = value
42
+ self._value = validate_value(value)
42
43
 
43
44
  @property
44
45
  @meta_fn
45
46
  def is_some(self) -> bool:
46
47
  """Check if the value is present."""
47
48
  if ctx():
49
+ if self._present._is_py_():
50
+ # Makes this a compile time constant.
51
+ return self._present
48
52
  return self._present._get_readonly_()
49
53
  else:
50
54
  return self._present._as_py_()
@@ -61,13 +65,104 @@ class Maybe[T](TransientValue):
61
65
 
62
66
  @meta_fn
63
67
  def get_unsafe(self) -> T:
64
- return self._value
68
+ if ctx():
69
+ return self._value
70
+ else:
71
+ return self._value._as_py_()
65
72
 
66
73
  def map[R](self, fn: Callable[[T], R], /) -> Maybe[R]:
74
+ """Map the contained value to a new value using the provided function.
75
+
76
+ If the value is not present, returns `Nothing`.
77
+
78
+ Args:
79
+ fn: A function that takes the contained value and returns a new value.
80
+
81
+ Returns:
82
+ A `Maybe` instance containing the result of the function if the value is present, otherwise `Nothing`.
83
+ """
67
84
  if self.is_some:
68
85
  return Some(fn(self.get_unsafe()))
69
86
  return Nothing
70
87
 
88
+ def flat_map[R](self, fn: Callable[[T], Maybe[R]], /) -> Maybe[R]:
89
+ """Flat map the contained value to a new `Maybe` using the provided function.
90
+
91
+ If the value is not present, returns `Nothing`.
92
+
93
+ Args:
94
+ fn: A function that takes the contained value and returns a new `Maybe`.
95
+
96
+ Returns:
97
+ A `Maybe` instance containing the result of the function if the value is present, otherwise `Nothing`.
98
+ """
99
+ if self.is_some:
100
+ return fn(self.get_unsafe())
101
+ return Nothing
102
+
103
+ def or_default(self, default: T) -> T:
104
+ """Return a copy of the contained value if present, otherwise return a copy of the given default value.
105
+
106
+ Args:
107
+ default: The default value to return if the contained value is not present.
108
+
109
+ Returns:
110
+ A copy of the contained value if present, otherwise a copy of the default value.
111
+ """
112
+ result = _box(copy(default))
113
+ if self.is_some:
114
+ result.value = self.get_unsafe()
115
+ return result.value
116
+
117
+ @meta_fn
118
+ def or_else(self, fn: Callable[[], T], /) -> T:
119
+ """Return a copy of the contained value if present, otherwise return a copy of the result of the given function.
120
+
121
+ Args:
122
+ fn: A function that returns a value to use if the contained value is not present.
123
+
124
+ Returns:
125
+ A copy of the contained value if present, otherwise a copy of the result of calling the function.
126
+ """
127
+ from sonolus.backend.visitor import compile_and_call
128
+
129
+ if ctx():
130
+ if self.is_some._is_py_(): # type: ignore
131
+ if self.is_some._as_py_(): # type: ignore
132
+ return copy(self.get_unsafe())
133
+ else:
134
+ return copy(compile_and_call(fn))
135
+ else:
136
+ return compile_and_call(self._or_else, fn)
137
+ elif self.is_some:
138
+ return copy(self.get_unsafe())
139
+ else:
140
+ return copy(fn())
141
+
142
+ def _or_else(self, fn: Callable[[], T], /) -> T:
143
+ result = _box(zeros(self.contained_type))
144
+ if self.is_some:
145
+ result.value = self.get_unsafe()
146
+ else:
147
+ result.value = fn()
148
+ return result.value
149
+
150
+ @property
151
+ def tuple(self) -> tuple[bool, T]:
152
+ """Return whether the value is present and a copy of the contained value if present as a tuple.
153
+
154
+ If the value is not present, the tuple will contain `False` and a zero initialized value of the contained type.
155
+ """
156
+ result_value = _box(zeros(self.contained_type))
157
+ if self.is_some:
158
+ result_value.value = self.get_unsafe()
159
+ return self.is_some, result_value.value
160
+
161
+ @property
162
+ @meta_fn
163
+ def contained_type(self):
164
+ return type(self._value)
165
+
71
166
  @classmethod
72
167
  def _accepts_(cls, value: Any) -> bool:
73
168
  return isinstance(value, cls)
@@ -137,3 +232,10 @@ Nothing: Maybe[Any] = Maybe(present=False, value=None) # type: ignore
137
232
  # Note: has to come after the definition to hide the definition in the docs.
138
233
  Nothing: Maybe[Any]
139
234
  """The empty `Maybe` instance."""
235
+
236
+
237
+ @meta_fn
238
+ def _box(value):
239
+ from sonolus.script.containers import Box
240
+
241
+ return Box(value)
@@ -453,14 +453,14 @@ if TYPE_CHECKING:
453
453
  from typing import Protocol
454
454
 
455
455
  @runtime_checkable
456
- class Num[T](Protocol, int, bool, float):
457
- def __add__(self, other: T, /) -> Num | int | bool | float: ...
458
- def __sub__(self, other: T, /) -> Num | int | bool | float: ...
459
- def __mul__(self, other: T, /) -> Num | int | bool | float: ...
460
- def __truediv__(self, other: T, /) -> Num | int | bool | float: ...
461
- def __floordiv__(self, other: T, /) -> Num | int | bool | float: ...
462
- def __mod__(self, other: T, /) -> Num | int | bool | float: ...
463
- def __pow__(self, other: T, /) -> Num | int | bool | float: ...
456
+ class Num(Protocol, int, bool, float):
457
+ def __add__(self, other: Any, /) -> Num | int | bool | float: ...
458
+ def __sub__(self, other: Any, /) -> Num | int | bool | float: ...
459
+ def __mul__(self, other: Any, /) -> Num | int | bool | float: ...
460
+ def __truediv__(self, other: Any, /) -> Num | int | bool | float: ...
461
+ def __floordiv__(self, other: Any, /) -> Num | int | bool | float: ...
462
+ def __mod__(self, other: Any, /) -> Num | int | bool | float: ...
463
+ def __pow__(self, other: Any, /) -> Num | int | bool | float: ...
464
464
 
465
465
  def __neg__(self, /) -> Num | int | bool | float: ...
466
466
  def __pos__(self, /) -> Num | int | bool | float: ...
@@ -468,10 +468,10 @@ if TYPE_CHECKING:
468
468
 
469
469
  def __eq__(self, other: Any, /) -> bool: ...
470
470
  def __ne__(self, other: Any, /) -> bool: ...
471
- def __lt__(self, other: T, /) -> bool: ...
472
- def __le__(self, other: T, /) -> bool: ...
473
- def __gt__(self, other: T, /) -> bool: ...
474
- def __ge__(self, other: T, /) -> bool: ...
471
+ def __lt__(self, other: Any, /) -> bool: ...
472
+ def __le__(self, other: Any, /) -> bool: ...
473
+ def __gt__(self, other: Any, /) -> bool: ...
474
+ def __ge__(self, other: Any, /) -> bool: ...
475
475
 
476
476
  def __hash__(self, /) -> int: ...
477
477
 
@@ -41,7 +41,7 @@ class Project:
41
41
  self._levels = None
42
42
  self.resources = Path(resources or "resources")
43
43
 
44
- def with_levels(self, levels: list[Level]) -> Project:
44
+ def with_levels(self, levels: Iterable[Level] | Callable[[], Iterable[Level]] | None) -> Project:
45
45
  """Create a new project with the specified levels.
46
46
 
47
47
  Args: