sonolus.py 0.3.4__tar.gz → 0.4.0__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 (615) hide show
  1. sonolus_py-0.4.0/.gitattributes +1 -0
  2. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/.github/workflows/publish.yaml +1 -1
  3. sonolus_py-0.4.0/.python-version +1 -0
  4. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/PKG-INFO +1 -1
  5. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/doc_stubs/builtins.pyi +75 -3
  6. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/docs/concepts/builtins.md +7 -4
  7. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/docs/concepts/cli.md +7 -0
  8. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/docs/concepts/constructs.md +2 -0
  9. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/docs/concepts/types.md +18 -12
  10. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/docs/overview.md +105 -27
  11. sonolus_py-0.4.0/docs/reference/sonolus.script.maybe.md +3 -0
  12. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/mkdocs.yml +1 -0
  13. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/pyproject.toml +10 -2
  14. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/sonolus/backend/excepthook.py +30 -0
  15. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/sonolus/backend/finalize.py +15 -1
  16. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/sonolus/backend/ops.py +4 -0
  17. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/sonolus/backend/optimize/allocate.py +5 -5
  18. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/sonolus/backend/optimize/constant_evaluation.py +124 -19
  19. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/sonolus/backend/optimize/copy_coalesce.py +15 -12
  20. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/sonolus/backend/optimize/dead_code.py +7 -6
  21. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/sonolus/backend/optimize/dominance.py +2 -2
  22. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/sonolus/backend/optimize/flow.py +54 -8
  23. sonolus_py-0.4.0/sonolus/backend/optimize/inlining.py +244 -0
  24. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/sonolus/backend/optimize/liveness.py +2 -2
  25. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/sonolus/backend/optimize/optimize.py +15 -1
  26. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/sonolus/backend/optimize/passes.py +11 -3
  27. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/sonolus/backend/optimize/simplify.py +137 -8
  28. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/sonolus/backend/optimize/ssa.py +47 -13
  29. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/sonolus/backend/place.py +5 -4
  30. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/sonolus/backend/utils.py +24 -0
  31. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/sonolus/backend/visitor.py +260 -17
  32. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/sonolus/build/cli.py +47 -19
  33. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/sonolus/build/compile.py +12 -5
  34. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/sonolus/build/engine.py +70 -1
  35. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/sonolus/build/level.py +3 -3
  36. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/sonolus/build/project.py +2 -2
  37. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/sonolus/script/archetype.py +12 -9
  38. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/sonolus/script/array.py +23 -18
  39. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/sonolus/script/array_like.py +26 -29
  40. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/sonolus/script/bucket.py +1 -1
  41. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/sonolus/script/containers.py +22 -26
  42. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/sonolus/script/debug.py +20 -43
  43. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/sonolus/script/effect.py +1 -1
  44. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/sonolus/script/globals.py +3 -3
  45. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/sonolus/script/instruction.py +2 -2
  46. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/sonolus/script/internal/builtin_impls.py +155 -28
  47. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/sonolus/script/internal/constant.py +13 -3
  48. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/sonolus/script/internal/context.py +46 -15
  49. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/sonolus/script/internal/impl.py +9 -3
  50. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/sonolus/script/internal/introspection.py +8 -1
  51. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/sonolus/script/internal/native.py +2 -2
  52. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/sonolus/script/internal/range.py +8 -11
  53. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/sonolus/script/internal/simulation_context.py +1 -1
  54. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/sonolus/script/internal/transient.py +2 -2
  55. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/sonolus/script/internal/value.py +41 -3
  56. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/sonolus/script/interval.py +13 -13
  57. sonolus_py-0.4.0/sonolus/script/iterator.py +116 -0
  58. sonolus_py-0.4.0/sonolus/script/maybe.py +139 -0
  59. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/sonolus/script/num.py +17 -2
  60. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/sonolus/script/options.py +1 -1
  61. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/sonolus/script/particle.py +1 -1
  62. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/sonolus/script/project.py +24 -5
  63. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/sonolus/script/quad.py +15 -15
  64. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/sonolus/script/record.py +16 -12
  65. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/sonolus/script/runtime.py +22 -18
  66. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/sonolus/script/sprite.py +1 -1
  67. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/sonolus/script/stream.py +66 -82
  68. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/sonolus/script/transform.py +35 -34
  69. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/sonolus/script/values.py +10 -10
  70. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/sonolus/script/vec.py +21 -18
  71. sonolus_py-0.4.0/test_projects/pydori/level.py +158 -0
  72. sonolus_py-0.4.0/test_projects/pydori/lib/buckets.py +167 -0
  73. sonolus_py-0.4.0/test_projects/pydori/lib/connector.py +30 -0
  74. sonolus_py-0.4.0/test_projects/pydori/lib/effect.py +24 -0
  75. sonolus_py-0.4.0/test_projects/pydori/lib/layer.py +26 -0
  76. sonolus_py-0.4.0/test_projects/pydori/lib/layout.py +401 -0
  77. sonolus_py-0.4.0/test_projects/pydori/lib/note.py +374 -0
  78. sonolus_py-0.4.0/test_projects/pydori/lib/options.py +105 -0
  79. sonolus_py-0.4.0/test_projects/pydori/lib/particle.py +22 -0
  80. sonolus_py-0.4.0/test_projects/pydori/lib/skin.py +40 -0
  81. sonolus_py-0.4.0/test_projects/pydori/lib/stage.py +71 -0
  82. sonolus_py-0.4.0/test_projects/pydori/lib/streams.py +12 -0
  83. sonolus_py-0.4.0/test_projects/pydori/lib/ui.py +122 -0
  84. sonolus_py-0.4.0/test_projects/pydori/play/__init__.py +0 -0
  85. sonolus_py-0.4.0/test_projects/pydori/play/connector.py +87 -0
  86. sonolus_py-0.4.0/test_projects/pydori/play/event.py +15 -0
  87. sonolus_py-0.4.0/test_projects/pydori/play/input.py +35 -0
  88. sonolus_py-0.4.0/test_projects/pydori/play/mode.py +26 -0
  89. sonolus_py-0.4.0/test_projects/pydori/play/note.py +416 -0
  90. sonolus_py-0.4.0/test_projects/pydori/play/stage.py +63 -0
  91. sonolus_py-0.4.0/test_projects/pydori/preview/__init__.py +0 -0
  92. sonolus_py-0.4.0/test_projects/pydori/preview/connector.py +68 -0
  93. sonolus_py-0.4.0/test_projects/pydori/preview/event.py +75 -0
  94. sonolus_py-0.4.0/test_projects/pydori/preview/layout.py +278 -0
  95. sonolus_py-0.4.0/test_projects/pydori/preview/mode.py +19 -0
  96. sonolus_py-0.4.0/test_projects/pydori/preview/note.py +75 -0
  97. sonolus_py-0.4.0/test_projects/pydori/preview/stage.py +94 -0
  98. sonolus_py-0.4.0/test_projects/pydori/project.py +32 -0
  99. sonolus_py-0.4.0/test_projects/pydori/tutorial/__init__.py +0 -0
  100. sonolus_py-0.4.0/test_projects/pydori/tutorial/framework.py +137 -0
  101. sonolus_py-0.4.0/test_projects/pydori/tutorial/instructions.py +21 -0
  102. sonolus_py-0.4.0/test_projects/pydori/tutorial/intro.py +105 -0
  103. sonolus_py-0.4.0/test_projects/pydori/tutorial/mode.py +19 -0
  104. sonolus_py-0.4.0/test_projects/pydori/tutorial/navigate.py +9 -0
  105. sonolus_py-0.4.0/test_projects/pydori/tutorial/painting.py +125 -0
  106. sonolus_py-0.4.0/test_projects/pydori/tutorial/phases.py +367 -0
  107. sonolus_py-0.4.0/test_projects/pydori/tutorial/preprocess.py +9 -0
  108. sonolus_py-0.4.0/test_projects/pydori/tutorial/update.py +37 -0
  109. sonolus_py-0.4.0/test_projects/pydori/watch/__init__.py +0 -0
  110. sonolus_py-0.4.0/test_projects/pydori/watch/connector.py +76 -0
  111. sonolus_py-0.4.0/test_projects/pydori/watch/event.py +15 -0
  112. sonolus_py-0.4.0/test_projects/pydori/watch/mode.py +29 -0
  113. sonolus_py-0.4.0/test_projects/pydori/watch/note.py +233 -0
  114. sonolus_py-0.4.0/test_projects/pydori/watch/stage.py +68 -0
  115. sonolus_py-0.4.0/test_projects/pydori/watch/update_spawn.py +5 -0
  116. sonolus_py-0.4.0/tests/__init__.py +0 -0
  117. sonolus_py-0.4.0/tests/regressions/__init__.py +10 -0
  118. sonolus_py-0.4.0/tests/regressions/conftest.py +11 -0
  119. sonolus_py-0.4.0/tests/regressions/data/pydori_play_hold_connector_should_spawn_cfg +27 -0
  120. sonolus_py-0.4.0/tests/regressions/data/pydori_play_hold_connector_should_spawn_fast_nodes +60 -0
  121. sonolus_py-0.4.0/tests/regressions/data/pydori_play_hold_connector_should_spawn_fast_optimized_cfg +7 -0
  122. sonolus_py-0.4.0/tests/regressions/data/pydori_play_hold_connector_should_spawn_standard_nodes +36 -0
  123. sonolus_py-0.4.0/tests/regressions/data/pydori_play_hold_connector_should_spawn_standard_optimized_cfg +4 -0
  124. sonolus_py-0.4.0/tests/regressions/data/pydori_play_hold_connector_spawn_order_cfg +24 -0
  125. sonolus_py-0.4.0/tests/regressions/data/pydori_play_hold_connector_spawn_order_fast_nodes +46 -0
  126. sonolus_py-0.4.0/tests/regressions/data/pydori_play_hold_connector_spawn_order_fast_optimized_cfg +6 -0
  127. sonolus_py-0.4.0/tests/regressions/data/pydori_play_hold_connector_spawn_order_standard_nodes +30 -0
  128. sonolus_py-0.4.0/tests/regressions/data/pydori_play_hold_connector_spawn_order_standard_optimized_cfg +4 -0
  129. sonolus_py-0.4.0/tests/regressions/data/pydori_play_hold_connector_update_parallel_cfg +295 -0
  130. sonolus_py-0.4.0/tests/regressions/data/pydori_play_hold_connector_update_parallel_fast_nodes +1754 -0
  131. sonolus_py-0.4.0/tests/regressions/data/pydori_play_hold_connector_update_parallel_fast_optimized_cfg +149 -0
  132. sonolus_py-0.4.0/tests/regressions/data/pydori_play_hold_connector_update_parallel_standard_nodes +762 -0
  133. sonolus_py-0.4.0/tests/regressions/data/pydori_play_hold_connector_update_parallel_standard_optimized_cfg +25 -0
  134. sonolus_py-0.4.0/tests/regressions/data/pydori_play_hold_connector_update_sequential_cfg +180 -0
  135. sonolus_py-0.4.0/tests/regressions/data/pydori_play_hold_connector_update_sequential_fast_nodes +567 -0
  136. sonolus_py-0.4.0/tests/regressions/data/pydori_play_hold_connector_update_sequential_fast_optimized_cfg +60 -0
  137. sonolus_py-0.4.0/tests/regressions/data/pydori_play_hold_connector_update_sequential_standard_nodes +310 -0
  138. sonolus_py-0.4.0/tests/regressions/data/pydori_play_hold_connector_update_sequential_standard_optimized_cfg +24 -0
  139. sonolus_py-0.4.0/tests/regressions/data/pydori_play_hold_manager_touch_cfg +203 -0
  140. sonolus_py-0.4.0/tests/regressions/data/pydori_play_hold_manager_touch_fast_nodes +540 -0
  141. sonolus_py-0.4.0/tests/regressions/data/pydori_play_hold_manager_touch_fast_optimized_cfg +77 -0
  142. sonolus_py-0.4.0/tests/regressions/data/pydori_play_hold_manager_touch_standard_nodes +280 -0
  143. sonolus_py-0.4.0/tests/regressions/data/pydori_play_hold_manager_touch_standard_optimized_cfg +37 -0
  144. sonolus_py-0.4.0/tests/regressions/data/pydori_play_hold_manager_update_parallel_cfg +946 -0
  145. sonolus_py-0.4.0/tests/regressions/data/pydori_play_hold_manager_update_parallel_fast_nodes +4570 -0
  146. sonolus_py-0.4.0/tests/regressions/data/pydori_play_hold_manager_update_parallel_fast_optimized_cfg +470 -0
  147. sonolus_py-0.4.0/tests/regressions/data/pydori_play_hold_manager_update_parallel_standard_nodes +1923 -0
  148. sonolus_py-0.4.0/tests/regressions/data/pydori_play_hold_manager_update_parallel_standard_optimized_cfg +119 -0
  149. sonolus_py-0.4.0/tests/regressions/data/pydori_play_note_initialize_cfg +123 -0
  150. sonolus_py-0.4.0/tests/regressions/data/pydori_play_note_initialize_fast_nodes +310 -0
  151. sonolus_py-0.4.0/tests/regressions/data/pydori_play_note_initialize_fast_optimized_cfg +51 -0
  152. sonolus_py-0.4.0/tests/regressions/data/pydori_play_note_initialize_standard_nodes +105 -0
  153. sonolus_py-0.4.0/tests/regressions/data/pydori_play_note_initialize_standard_optimized_cfg +19 -0
  154. sonolus_py-0.4.0/tests/regressions/data/pydori_play_note_preprocess_cfg +308 -0
  155. sonolus_py-0.4.0/tests/regressions/data/pydori_play_note_preprocess_fast_nodes +1305 -0
  156. sonolus_py-0.4.0/tests/regressions/data/pydori_play_note_preprocess_fast_optimized_cfg +189 -0
  157. sonolus_py-0.4.0/tests/regressions/data/pydori_play_note_preprocess_standard_nodes +609 -0
  158. sonolus_py-0.4.0/tests/regressions/data/pydori_play_note_preprocess_standard_optimized_cfg +109 -0
  159. sonolus_py-0.4.0/tests/regressions/data/pydori_play_note_should_spawn_cfg +12 -0
  160. sonolus_py-0.4.0/tests/regressions/data/pydori_play_note_should_spawn_fast_nodes +27 -0
  161. sonolus_py-0.4.0/tests/regressions/data/pydori_play_note_should_spawn_fast_optimized_cfg +4 -0
  162. sonolus_py-0.4.0/tests/regressions/data/pydori_play_note_should_spawn_standard_nodes +19 -0
  163. sonolus_py-0.4.0/tests/regressions/data/pydori_play_note_should_spawn_standard_optimized_cfg +3 -0
  164. sonolus_py-0.4.0/tests/regressions/data/pydori_play_note_spawn_order_cfg +9 -0
  165. sonolus_py-0.4.0/tests/regressions/data/pydori_play_note_spawn_order_fast_nodes +13 -0
  166. sonolus_py-0.4.0/tests/regressions/data/pydori_play_note_spawn_order_fast_optimized_cfg +3 -0
  167. sonolus_py-0.4.0/tests/regressions/data/pydori_play_note_spawn_order_standard_nodes +13 -0
  168. sonolus_py-0.4.0/tests/regressions/data/pydori_play_note_spawn_order_standard_optimized_cfg +3 -0
  169. sonolus_py-0.4.0/tests/regressions/data/pydori_play_note_terminate_cfg +9 -0
  170. sonolus_py-0.4.0/tests/regressions/data/pydori_play_note_terminate_fast_nodes +13 -0
  171. sonolus_py-0.4.0/tests/regressions/data/pydori_play_note_terminate_fast_optimized_cfg +3 -0
  172. sonolus_py-0.4.0/tests/regressions/data/pydori_play_note_terminate_standard_nodes +13 -0
  173. sonolus_py-0.4.0/tests/regressions/data/pydori_play_note_terminate_standard_optimized_cfg +3 -0
  174. sonolus_py-0.4.0/tests/regressions/data/pydori_play_note_touch_cfg +8372 -0
  175. sonolus_py-0.4.0/tests/regressions/data/pydori_play_note_touch_fast_nodes +36519 -0
  176. sonolus_py-0.4.0/tests/regressions/data/pydori_play_note_touch_fast_optimized_cfg +4441 -0
  177. sonolus_py-0.4.0/tests/regressions/data/pydori_play_note_touch_standard_nodes +16029 -0
  178. sonolus_py-0.4.0/tests/regressions/data/pydori_play_note_touch_standard_optimized_cfg +1686 -0
  179. sonolus_py-0.4.0/tests/regressions/data/pydori_play_note_update_parallel_cfg +1813 -0
  180. sonolus_py-0.4.0/tests/regressions/data/pydori_play_note_update_parallel_fast_nodes +8309 -0
  181. sonolus_py-0.4.0/tests/regressions/data/pydori_play_note_update_parallel_fast_optimized_cfg +925 -0
  182. sonolus_py-0.4.0/tests/regressions/data/pydori_play_note_update_parallel_standard_nodes +3190 -0
  183. sonolus_py-0.4.0/tests/regressions/data/pydori_play_note_update_parallel_standard_optimized_cfg +289 -0
  184. sonolus_py-0.4.0/tests/regressions/data/pydori_play_note_update_sequential_cfg +1250 -0
  185. sonolus_py-0.4.0/tests/regressions/data/pydori_play_note_update_sequential_fast_nodes +5531 -0
  186. sonolus_py-0.4.0/tests/regressions/data/pydori_play_note_update_sequential_fast_optimized_cfg +666 -0
  187. sonolus_py-0.4.0/tests/regressions/data/pydori_play_note_update_sequential_standard_nodes +2225 -0
  188. sonolus_py-0.4.0/tests/regressions/data/pydori_play_note_update_sequential_standard_optimized_cfg +259 -0
  189. sonolus_py-0.4.0/tests/regressions/data/pydori_play_sim_line_should_spawn_cfg +27 -0
  190. sonolus_py-0.4.0/tests/regressions/data/pydori_play_sim_line_should_spawn_fast_nodes +60 -0
  191. sonolus_py-0.4.0/tests/regressions/data/pydori_play_sim_line_should_spawn_fast_optimized_cfg +7 -0
  192. sonolus_py-0.4.0/tests/regressions/data/pydori_play_sim_line_should_spawn_standard_nodes +36 -0
  193. sonolus_py-0.4.0/tests/regressions/data/pydori_play_sim_line_should_spawn_standard_optimized_cfg +4 -0
  194. sonolus_py-0.4.0/tests/regressions/data/pydori_play_sim_line_spawn_order_cfg +24 -0
  195. sonolus_py-0.4.0/tests/regressions/data/pydori_play_sim_line_spawn_order_fast_nodes +46 -0
  196. sonolus_py-0.4.0/tests/regressions/data/pydori_play_sim_line_spawn_order_fast_optimized_cfg +6 -0
  197. sonolus_py-0.4.0/tests/regressions/data/pydori_play_sim_line_spawn_order_standard_nodes +30 -0
  198. sonolus_py-0.4.0/tests/regressions/data/pydori_play_sim_line_spawn_order_standard_optimized_cfg +4 -0
  199. sonolus_py-0.4.0/tests/regressions/data/pydori_play_sim_line_update_parallel_cfg +443 -0
  200. sonolus_py-0.4.0/tests/regressions/data/pydori_play_sim_line_update_parallel_fast_nodes +2014 -0
  201. sonolus_py-0.4.0/tests/regressions/data/pydori_play_sim_line_update_parallel_fast_optimized_cfg +203 -0
  202. sonolus_py-0.4.0/tests/regressions/data/pydori_play_sim_line_update_parallel_standard_nodes +854 -0
  203. sonolus_py-0.4.0/tests/regressions/data/pydori_play_sim_line_update_parallel_standard_optimized_cfg +56 -0
  204. sonolus_py-0.4.0/tests/regressions/data/pydori_play_stage_preprocess_cfg +3238 -0
  205. sonolus_py-0.4.0/tests/regressions/data/pydori_play_stage_preprocess_fast_nodes +15388 -0
  206. sonolus_py-0.4.0/tests/regressions/data/pydori_play_stage_preprocess_fast_optimized_cfg +1658 -0
  207. sonolus_py-0.4.0/tests/regressions/data/pydori_play_stage_preprocess_standard_nodes +5748 -0
  208. sonolus_py-0.4.0/tests/regressions/data/pydori_play_stage_preprocess_standard_optimized_cfg +515 -0
  209. sonolus_py-0.4.0/tests/regressions/data/pydori_play_stage_should_spawn_cfg +9 -0
  210. sonolus_py-0.4.0/tests/regressions/data/pydori_play_stage_should_spawn_fast_nodes +10 -0
  211. sonolus_py-0.4.0/tests/regressions/data/pydori_play_stage_should_spawn_fast_optimized_cfg +3 -0
  212. sonolus_py-0.4.0/tests/regressions/data/pydori_play_stage_should_spawn_standard_nodes +10 -0
  213. sonolus_py-0.4.0/tests/regressions/data/pydori_play_stage_should_spawn_standard_optimized_cfg +3 -0
  214. sonolus_py-0.4.0/tests/regressions/data/pydori_play_stage_spawn_order_cfg +9 -0
  215. sonolus_py-0.4.0/tests/regressions/data/pydori_play_stage_spawn_order_fast_nodes +10 -0
  216. sonolus_py-0.4.0/tests/regressions/data/pydori_play_stage_spawn_order_fast_optimized_cfg +3 -0
  217. sonolus_py-0.4.0/tests/regressions/data/pydori_play_stage_spawn_order_standard_nodes +10 -0
  218. sonolus_py-0.4.0/tests/regressions/data/pydori_play_stage_spawn_order_standard_optimized_cfg +3 -0
  219. sonolus_py-0.4.0/tests/regressions/data/pydori_play_stage_touch_cfg +850 -0
  220. sonolus_py-0.4.0/tests/regressions/data/pydori_play_stage_touch_fast_nodes +3302 -0
  221. sonolus_py-0.4.0/tests/regressions/data/pydori_play_stage_touch_fast_optimized_cfg +428 -0
  222. sonolus_py-0.4.0/tests/regressions/data/pydori_play_stage_touch_standard_nodes +1636 -0
  223. sonolus_py-0.4.0/tests/regressions/data/pydori_play_stage_touch_standard_optimized_cfg +188 -0
  224. sonolus_py-0.4.0/tests/regressions/data/pydori_play_stage_update_parallel_cfg +130 -0
  225. sonolus_py-0.4.0/tests/regressions/data/pydori_play_stage_update_parallel_fast_nodes +391 -0
  226. sonolus_py-0.4.0/tests/regressions/data/pydori_play_stage_update_parallel_fast_optimized_cfg +36 -0
  227. sonolus_py-0.4.0/tests/regressions/data/pydori_play_stage_update_parallel_standard_nodes +261 -0
  228. sonolus_py-0.4.0/tests/regressions/data/pydori_play_stage_update_parallel_standard_optimized_cfg +15 -0
  229. sonolus_py-0.4.0/tests/regressions/data/pydori_play_stage_update_sequential_cfg +34 -0
  230. sonolus_py-0.4.0/tests/regressions/data/pydori_play_stage_update_sequential_fast_nodes +16 -0
  231. sonolus_py-0.4.0/tests/regressions/data/pydori_play_stage_update_sequential_fast_optimized_cfg +4 -0
  232. sonolus_py-0.4.0/tests/regressions/data/pydori_play_stage_update_sequential_standard_nodes +16 -0
  233. sonolus_py-0.4.0/tests/regressions/data/pydori_play_stage_update_sequential_standard_optimized_cfg +4 -0
  234. sonolus_py-0.4.0/tests/regressions/data/pydori_play_unscored_note_initialize_cfg +123 -0
  235. sonolus_py-0.4.0/tests/regressions/data/pydori_play_unscored_note_initialize_fast_nodes +310 -0
  236. sonolus_py-0.4.0/tests/regressions/data/pydori_play_unscored_note_initialize_fast_optimized_cfg +51 -0
  237. sonolus_py-0.4.0/tests/regressions/data/pydori_play_unscored_note_initialize_standard_nodes +105 -0
  238. sonolus_py-0.4.0/tests/regressions/data/pydori_play_unscored_note_initialize_standard_optimized_cfg +19 -0
  239. sonolus_py-0.4.0/tests/regressions/data/pydori_play_unscored_note_preprocess_cfg +308 -0
  240. sonolus_py-0.4.0/tests/regressions/data/pydori_play_unscored_note_preprocess_fast_nodes +1305 -0
  241. sonolus_py-0.4.0/tests/regressions/data/pydori_play_unscored_note_preprocess_fast_optimized_cfg +189 -0
  242. sonolus_py-0.4.0/tests/regressions/data/pydori_play_unscored_note_preprocess_standard_nodes +609 -0
  243. sonolus_py-0.4.0/tests/regressions/data/pydori_play_unscored_note_preprocess_standard_optimized_cfg +109 -0
  244. sonolus_py-0.4.0/tests/regressions/data/pydori_play_unscored_note_should_spawn_cfg +12 -0
  245. sonolus_py-0.4.0/tests/regressions/data/pydori_play_unscored_note_should_spawn_fast_nodes +27 -0
  246. sonolus_py-0.4.0/tests/regressions/data/pydori_play_unscored_note_should_spawn_fast_optimized_cfg +4 -0
  247. sonolus_py-0.4.0/tests/regressions/data/pydori_play_unscored_note_should_spawn_standard_nodes +19 -0
  248. sonolus_py-0.4.0/tests/regressions/data/pydori_play_unscored_note_should_spawn_standard_optimized_cfg +3 -0
  249. sonolus_py-0.4.0/tests/regressions/data/pydori_play_unscored_note_spawn_order_cfg +9 -0
  250. sonolus_py-0.4.0/tests/regressions/data/pydori_play_unscored_note_spawn_order_fast_nodes +13 -0
  251. sonolus_py-0.4.0/tests/regressions/data/pydori_play_unscored_note_spawn_order_fast_optimized_cfg +3 -0
  252. sonolus_py-0.4.0/tests/regressions/data/pydori_play_unscored_note_spawn_order_standard_nodes +13 -0
  253. sonolus_py-0.4.0/tests/regressions/data/pydori_play_unscored_note_spawn_order_standard_optimized_cfg +3 -0
  254. sonolus_py-0.4.0/tests/regressions/data/pydori_play_unscored_note_terminate_cfg +9 -0
  255. sonolus_py-0.4.0/tests/regressions/data/pydori_play_unscored_note_terminate_fast_nodes +13 -0
  256. sonolus_py-0.4.0/tests/regressions/data/pydori_play_unscored_note_terminate_fast_optimized_cfg +3 -0
  257. sonolus_py-0.4.0/tests/regressions/data/pydori_play_unscored_note_terminate_standard_nodes +13 -0
  258. sonolus_py-0.4.0/tests/regressions/data/pydori_play_unscored_note_terminate_standard_optimized_cfg +3 -0
  259. sonolus_py-0.4.0/tests/regressions/data/pydori_play_unscored_note_touch_cfg +8372 -0
  260. sonolus_py-0.4.0/tests/regressions/data/pydori_play_unscored_note_touch_fast_nodes +36519 -0
  261. sonolus_py-0.4.0/tests/regressions/data/pydori_play_unscored_note_touch_fast_optimized_cfg +4441 -0
  262. sonolus_py-0.4.0/tests/regressions/data/pydori_play_unscored_note_touch_standard_nodes +16029 -0
  263. sonolus_py-0.4.0/tests/regressions/data/pydori_play_unscored_note_touch_standard_optimized_cfg +1686 -0
  264. sonolus_py-0.4.0/tests/regressions/data/pydori_play_unscored_note_update_parallel_cfg +1813 -0
  265. sonolus_py-0.4.0/tests/regressions/data/pydori_play_unscored_note_update_parallel_fast_nodes +8309 -0
  266. sonolus_py-0.4.0/tests/regressions/data/pydori_play_unscored_note_update_parallel_fast_optimized_cfg +925 -0
  267. sonolus_py-0.4.0/tests/regressions/data/pydori_play_unscored_note_update_parallel_standard_nodes +3190 -0
  268. sonolus_py-0.4.0/tests/regressions/data/pydori_play_unscored_note_update_parallel_standard_optimized_cfg +289 -0
  269. sonolus_py-0.4.0/tests/regressions/data/pydori_play_unscored_note_update_sequential_cfg +1250 -0
  270. sonolus_py-0.4.0/tests/regressions/data/pydori_play_unscored_note_update_sequential_fast_nodes +5531 -0
  271. sonolus_py-0.4.0/tests/regressions/data/pydori_play_unscored_note_update_sequential_fast_optimized_cfg +666 -0
  272. sonolus_py-0.4.0/tests/regressions/data/pydori_play_unscored_note_update_sequential_standard_nodes +2225 -0
  273. sonolus_py-0.4.0/tests/regressions/data/pydori_play_unscored_note_update_sequential_standard_optimized_cfg +259 -0
  274. sonolus_py-0.4.0/tests/regressions/data/pydori_preview_preview_bpm_change_preprocess_cfg +11 -0
  275. sonolus_py-0.4.0/tests/regressions/data/pydori_preview_preview_bpm_change_preprocess_fast_nodes +30 -0
  276. sonolus_py-0.4.0/tests/regressions/data/pydori_preview_preview_bpm_change_preprocess_fast_optimized_cfg +5 -0
  277. sonolus_py-0.4.0/tests/regressions/data/pydori_preview_preview_bpm_change_preprocess_standard_nodes +22 -0
  278. sonolus_py-0.4.0/tests/regressions/data/pydori_preview_preview_bpm_change_preprocess_standard_optimized_cfg +4 -0
  279. sonolus_py-0.4.0/tests/regressions/data/pydori_preview_preview_bpm_change_render_cfg +437 -0
  280. sonolus_py-0.4.0/tests/regressions/data/pydori_preview_preview_bpm_change_render_fast_nodes +1484 -0
  281. sonolus_py-0.4.0/tests/regressions/data/pydori_preview_preview_bpm_change_render_fast_optimized_cfg +157 -0
  282. sonolus_py-0.4.0/tests/regressions/data/pydori_preview_preview_bpm_change_render_standard_nodes +447 -0
  283. sonolus_py-0.4.0/tests/regressions/data/pydori_preview_preview_bpm_change_render_standard_optimized_cfg +24 -0
  284. sonolus_py-0.4.0/tests/regressions/data/pydori_preview_preview_hold_connector_render_cfg +431 -0
  285. sonolus_py-0.4.0/tests/regressions/data/pydori_preview_preview_hold_connector_render_fast_nodes +1541 -0
  286. sonolus_py-0.4.0/tests/regressions/data/pydori_preview_preview_hold_connector_render_fast_optimized_cfg +163 -0
  287. sonolus_py-0.4.0/tests/regressions/data/pydori_preview_preview_hold_connector_render_standard_nodes +500 -0
  288. sonolus_py-0.4.0/tests/regressions/data/pydori_preview_preview_hold_connector_render_standard_optimized_cfg +25 -0
  289. sonolus_py-0.4.0/tests/regressions/data/pydori_preview_preview_note_preprocess_cfg +31 -0
  290. sonolus_py-0.4.0/tests/regressions/data/pydori_preview_preview_note_preprocess_fast_nodes +165 -0
  291. sonolus_py-0.4.0/tests/regressions/data/pydori_preview_preview_note_preprocess_fast_optimized_cfg +23 -0
  292. sonolus_py-0.4.0/tests/regressions/data/pydori_preview_preview_note_preprocess_standard_nodes +125 -0
  293. sonolus_py-0.4.0/tests/regressions/data/pydori_preview_preview_note_preprocess_standard_optimized_cfg +18 -0
  294. sonolus_py-0.4.0/tests/regressions/data/pydori_preview_preview_note_render_cfg +1101 -0
  295. sonolus_py-0.4.0/tests/regressions/data/pydori_preview_preview_note_render_fast_nodes +4337 -0
  296. sonolus_py-0.4.0/tests/regressions/data/pydori_preview_preview_note_render_fast_optimized_cfg +503 -0
  297. sonolus_py-0.4.0/tests/regressions/data/pydori_preview_preview_note_render_standard_nodes +1271 -0
  298. sonolus_py-0.4.0/tests/regressions/data/pydori_preview_preview_note_render_standard_optimized_cfg +125 -0
  299. sonolus_py-0.4.0/tests/regressions/data/pydori_preview_preview_sim_line_render_cfg +217 -0
  300. sonolus_py-0.4.0/tests/regressions/data/pydori_preview_preview_sim_line_render_fast_nodes +800 -0
  301. sonolus_py-0.4.0/tests/regressions/data/pydori_preview_preview_sim_line_render_fast_optimized_cfg +79 -0
  302. sonolus_py-0.4.0/tests/regressions/data/pydori_preview_preview_sim_line_render_standard_nodes +304 -0
  303. sonolus_py-0.4.0/tests/regressions/data/pydori_preview_preview_sim_line_render_standard_optimized_cfg +17 -0
  304. sonolus_py-0.4.0/tests/regressions/data/pydori_preview_preview_stage_preprocess_cfg +1109 -0
  305. sonolus_py-0.4.0/tests/regressions/data/pydori_preview_preview_stage_preprocess_fast_nodes +850 -0
  306. sonolus_py-0.4.0/tests/regressions/data/pydori_preview_preview_stage_preprocess_fast_optimized_cfg +106 -0
  307. sonolus_py-0.4.0/tests/regressions/data/pydori_preview_preview_stage_preprocess_standard_nodes +276 -0
  308. sonolus_py-0.4.0/tests/regressions/data/pydori_preview_preview_stage_preprocess_standard_optimized_cfg +35 -0
  309. sonolus_py-0.4.0/tests/regressions/data/pydori_preview_preview_stage_render_cfg +1156 -0
  310. sonolus_py-0.4.0/tests/regressions/data/pydori_preview_preview_stage_render_fast_nodes +4001 -0
  311. sonolus_py-0.4.0/tests/regressions/data/pydori_preview_preview_stage_render_fast_optimized_cfg +485 -0
  312. sonolus_py-0.4.0/tests/regressions/data/pydori_preview_preview_stage_render_standard_nodes +797 -0
  313. sonolus_py-0.4.0/tests/regressions/data/pydori_preview_preview_stage_render_standard_optimized_cfg +55 -0
  314. sonolus_py-0.4.0/tests/regressions/data/pydori_preview_preview_timescale_change_preprocess_cfg +11 -0
  315. sonolus_py-0.4.0/tests/regressions/data/pydori_preview_preview_timescale_change_preprocess_fast_nodes +30 -0
  316. sonolus_py-0.4.0/tests/regressions/data/pydori_preview_preview_timescale_change_preprocess_fast_optimized_cfg +5 -0
  317. sonolus_py-0.4.0/tests/regressions/data/pydori_preview_preview_timescale_change_preprocess_standard_nodes +22 -0
  318. sonolus_py-0.4.0/tests/regressions/data/pydori_preview_preview_timescale_change_preprocess_standard_optimized_cfg +4 -0
  319. sonolus_py-0.4.0/tests/regressions/data/pydori_preview_preview_timescale_change_render_cfg +254 -0
  320. sonolus_py-0.4.0/tests/regressions/data/pydori_preview_preview_timescale_change_render_fast_nodes +817 -0
  321. sonolus_py-0.4.0/tests/regressions/data/pydori_preview_preview_timescale_change_render_fast_optimized_cfg +82 -0
  322. sonolus_py-0.4.0/tests/regressions/data/pydori_preview_preview_timescale_change_render_standard_nodes +225 -0
  323. sonolus_py-0.4.0/tests/regressions/data/pydori_preview_preview_timescale_change_render_standard_optimized_cfg +8 -0
  324. sonolus_py-0.4.0/tests/regressions/data/pydori_preview_preview_unscored_note_preprocess_cfg +31 -0
  325. sonolus_py-0.4.0/tests/regressions/data/pydori_preview_preview_unscored_note_preprocess_fast_nodes +165 -0
  326. sonolus_py-0.4.0/tests/regressions/data/pydori_preview_preview_unscored_note_preprocess_fast_optimized_cfg +23 -0
  327. sonolus_py-0.4.0/tests/regressions/data/pydori_preview_preview_unscored_note_preprocess_standard_nodes +125 -0
  328. sonolus_py-0.4.0/tests/regressions/data/pydori_preview_preview_unscored_note_preprocess_standard_optimized_cfg +18 -0
  329. sonolus_py-0.4.0/tests/regressions/data/pydori_preview_preview_unscored_note_render_cfg +1101 -0
  330. sonolus_py-0.4.0/tests/regressions/data/pydori_preview_preview_unscored_note_render_fast_nodes +4337 -0
  331. sonolus_py-0.4.0/tests/regressions/data/pydori_preview_preview_unscored_note_render_fast_optimized_cfg +503 -0
  332. sonolus_py-0.4.0/tests/regressions/data/pydori_preview_preview_unscored_note_render_standard_nodes +1271 -0
  333. sonolus_py-0.4.0/tests/regressions/data/pydori_preview_preview_unscored_note_render_standard_optimized_cfg +125 -0
  334. sonolus_py-0.4.0/tests/regressions/data/pydori_tutorial_global_navigate_fast_cfg +55 -0
  335. sonolus_py-0.4.0/tests/regressions/data/pydori_tutorial_global_navigate_fast_nodes +155 -0
  336. sonolus_py-0.4.0/tests/regressions/data/pydori_tutorial_global_navigate_fast_optimized_cfg +23 -0
  337. sonolus_py-0.4.0/tests/regressions/data/pydori_tutorial_global_navigate_standard_cfg +55 -0
  338. sonolus_py-0.4.0/tests/regressions/data/pydori_tutorial_global_navigate_standard_nodes +112 -0
  339. sonolus_py-0.4.0/tests/regressions/data/pydori_tutorial_global_navigate_standard_optimized_cfg +16 -0
  340. sonolus_py-0.4.0/tests/regressions/data/pydori_tutorial_global_preprocess_fast_cfg +2552 -0
  341. sonolus_py-0.4.0/tests/regressions/data/pydori_tutorial_global_preprocess_fast_nodes +10188 -0
  342. sonolus_py-0.4.0/tests/regressions/data/pydori_tutorial_global_preprocess_fast_optimized_cfg +1089 -0
  343. sonolus_py-0.4.0/tests/regressions/data/pydori_tutorial_global_preprocess_standard_cfg +2552 -0
  344. sonolus_py-0.4.0/tests/regressions/data/pydori_tutorial_global_preprocess_standard_nodes +4214 -0
  345. sonolus_py-0.4.0/tests/regressions/data/pydori_tutorial_global_preprocess_standard_optimized_cfg +342 -0
  346. sonolus_py-0.4.0/tests/regressions/data/pydori_tutorial_global_update_fast_cfg +37959 -0
  347. sonolus_py-0.4.0/tests/regressions/data/pydori_tutorial_global_update_fast_nodes +196268 -0
  348. sonolus_py-0.4.0/tests/regressions/data/pydori_tutorial_global_update_fast_optimized_cfg +19193 -0
  349. sonolus_py-0.4.0/tests/regressions/data/pydori_tutorial_global_update_standard_cfg +37959 -0
  350. sonolus_py-0.4.0/tests/regressions/data/pydori_tutorial_global_update_standard_nodes +123333 -0
  351. sonolus_py-0.4.0/tests/regressions/data/pydori_tutorial_global_update_standard_optimized_cfg +2324 -0
  352. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_global_update_spawn_fast_cfg +9 -0
  353. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_global_update_spawn_fast_nodes +13 -0
  354. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_global_update_spawn_fast_optimized_cfg +3 -0
  355. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_global_update_spawn_standard_cfg +9 -0
  356. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_global_update_spawn_standard_nodes +13 -0
  357. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_global_update_spawn_standard_optimized_cfg +3 -0
  358. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_hold_connector_despawn_time_cfg +18 -0
  359. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_hold_connector_despawn_time_fast_nodes +46 -0
  360. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_hold_connector_despawn_time_fast_optimized_cfg +6 -0
  361. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_hold_connector_despawn_time_standard_nodes +30 -0
  362. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_hold_connector_despawn_time_standard_optimized_cfg +4 -0
  363. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_hold_connector_spawn_time_cfg +24 -0
  364. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_hold_connector_spawn_time_fast_nodes +46 -0
  365. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_hold_connector_spawn_time_fast_optimized_cfg +6 -0
  366. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_hold_connector_spawn_time_standard_nodes +30 -0
  367. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_hold_connector_spawn_time_standard_optimized_cfg +4 -0
  368. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_hold_connector_update_parallel_cfg +289 -0
  369. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_hold_connector_update_parallel_fast_nodes +1745 -0
  370. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_hold_connector_update_parallel_fast_optimized_cfg +145 -0
  371. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_hold_connector_update_parallel_standard_nodes +753 -0
  372. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_hold_connector_update_parallel_standard_optimized_cfg +21 -0
  373. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_hold_connector_update_sequential_cfg +317 -0
  374. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_hold_connector_update_sequential_fast_nodes +873 -0
  375. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_hold_connector_update_sequential_fast_optimized_cfg +111 -0
  376. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_hold_connector_update_sequential_standard_nodes +428 -0
  377. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_hold_connector_update_sequential_standard_optimized_cfg +42 -0
  378. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_hold_manager_despawn_time_cfg +19 -0
  379. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_hold_manager_despawn_time_fast_nodes +54 -0
  380. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_hold_manager_despawn_time_fast_optimized_cfg +7 -0
  381. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_hold_manager_despawn_time_standard_nodes +38 -0
  382. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_hold_manager_despawn_time_standard_optimized_cfg +5 -0
  383. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_hold_manager_spawn_time_cfg +19 -0
  384. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_hold_manager_spawn_time_fast_nodes +54 -0
  385. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_hold_manager_spawn_time_fast_optimized_cfg +7 -0
  386. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_hold_manager_spawn_time_standard_nodes +38 -0
  387. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_hold_manager_spawn_time_standard_optimized_cfg +5 -0
  388. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_hold_manager_terminate_cfg +33 -0
  389. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_hold_manager_terminate_fast_nodes +53 -0
  390. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_hold_manager_terminate_fast_optimized_cfg +11 -0
  391. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_hold_manager_terminate_standard_nodes +45 -0
  392. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_hold_manager_terminate_standard_optimized_cfg +10 -0
  393. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_hold_manager_update_parallel_cfg +820 -0
  394. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_hold_manager_update_parallel_fast_nodes +4224 -0
  395. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_hold_manager_update_parallel_fast_optimized_cfg +430 -0
  396. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_hold_manager_update_parallel_standard_nodes +1697 -0
  397. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_hold_manager_update_parallel_standard_optimized_cfg +92 -0
  398. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_note_despawn_time_cfg +15 -0
  399. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_note_despawn_time_fast_nodes +43 -0
  400. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_note_despawn_time_fast_optimized_cfg +11 -0
  401. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_note_despawn_time_standard_nodes +31 -0
  402. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_note_despawn_time_standard_optimized_cfg +8 -0
  403. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_note_preprocess_cfg +844 -0
  404. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_note_preprocess_fast_nodes +2823 -0
  405. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_note_preprocess_fast_optimized_cfg +445 -0
  406. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_note_preprocess_standard_nodes +1430 -0
  407. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_note_preprocess_standard_optimized_cfg +270 -0
  408. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_note_spawn_time_cfg +9 -0
  409. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_note_spawn_time_fast_nodes +13 -0
  410. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_note_spawn_time_fast_optimized_cfg +3 -0
  411. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_note_spawn_time_standard_nodes +13 -0
  412. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_note_spawn_time_standard_optimized_cfg +3 -0
  413. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_note_terminate_cfg +746 -0
  414. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_note_terminate_fast_nodes +3984 -0
  415. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_note_terminate_fast_optimized_cfg +437 -0
  416. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_note_terminate_standard_nodes +1365 -0
  417. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_note_terminate_standard_optimized_cfg +113 -0
  418. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_note_update_parallel_cfg +1807 -0
  419. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_note_update_parallel_fast_nodes +8301 -0
  420. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_note_update_parallel_fast_optimized_cfg +923 -0
  421. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_note_update_parallel_standard_nodes +3182 -0
  422. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_note_update_parallel_standard_optimized_cfg +287 -0
  423. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_scheduled_lane_effect_despawn_time_cfg +18 -0
  424. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_scheduled_lane_effect_despawn_time_fast_nodes +40 -0
  425. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_scheduled_lane_effect_despawn_time_fast_optimized_cfg +6 -0
  426. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_scheduled_lane_effect_despawn_time_standard_nodes +24 -0
  427. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_scheduled_lane_effect_despawn_time_standard_optimized_cfg +4 -0
  428. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_scheduled_lane_effect_spawn_time_cfg +11 -0
  429. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_scheduled_lane_effect_spawn_time_fast_nodes +29 -0
  430. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_scheduled_lane_effect_spawn_time_fast_optimized_cfg +5 -0
  431. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_scheduled_lane_effect_spawn_time_standard_nodes +21 -0
  432. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_scheduled_lane_effect_spawn_time_standard_optimized_cfg +4 -0
  433. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_scheduled_lane_effect_update_parallel_cfg +153 -0
  434. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_scheduled_lane_effect_update_parallel_fast_nodes +561 -0
  435. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_scheduled_lane_effect_update_parallel_fast_optimized_cfg +78 -0
  436. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_scheduled_lane_effect_update_parallel_standard_nodes +248 -0
  437. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_scheduled_lane_effect_update_parallel_standard_optimized_cfg +29 -0
  438. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_sim_line_despawn_time_cfg +58 -0
  439. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_sim_line_despawn_time_fast_nodes +219 -0
  440. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_sim_line_despawn_time_fast_optimized_cfg +32 -0
  441. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_sim_line_despawn_time_standard_nodes +153 -0
  442. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_sim_line_despawn_time_standard_optimized_cfg +21 -0
  443. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_sim_line_spawn_time_cfg +24 -0
  444. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_sim_line_spawn_time_fast_nodes +46 -0
  445. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_sim_line_spawn_time_fast_optimized_cfg +6 -0
  446. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_sim_line_spawn_time_standard_nodes +30 -0
  447. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_sim_line_spawn_time_standard_optimized_cfg +4 -0
  448. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_sim_line_update_parallel_cfg +394 -0
  449. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_sim_line_update_parallel_fast_nodes +1894 -0
  450. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_sim_line_update_parallel_fast_optimized_cfg +184 -0
  451. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_sim_line_update_parallel_standard_nodes +786 -0
  452. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_sim_line_update_parallel_standard_optimized_cfg +45 -0
  453. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_stage_despawn_time_cfg +9 -0
  454. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_stage_despawn_time_fast_nodes +10 -0
  455. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_stage_despawn_time_fast_optimized_cfg +3 -0
  456. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_stage_despawn_time_standard_nodes +10 -0
  457. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_stage_despawn_time_standard_optimized_cfg +3 -0
  458. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_stage_preprocess_cfg +3508 -0
  459. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_stage_preprocess_fast_nodes +16381 -0
  460. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_stage_preprocess_fast_optimized_cfg +1799 -0
  461. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_stage_preprocess_standard_nodes +6095 -0
  462. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_stage_preprocess_standard_optimized_cfg +568 -0
  463. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_stage_spawn_time_cfg +9 -0
  464. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_stage_spawn_time_fast_nodes +10 -0
  465. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_stage_spawn_time_fast_optimized_cfg +3 -0
  466. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_stage_spawn_time_standard_nodes +10 -0
  467. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_stage_spawn_time_standard_optimized_cfg +3 -0
  468. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_stage_update_parallel_cfg +130 -0
  469. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_stage_update_parallel_fast_nodes +391 -0
  470. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_stage_update_parallel_fast_optimized_cfg +36 -0
  471. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_stage_update_parallel_standard_nodes +261 -0
  472. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_stage_update_parallel_standard_optimized_cfg +15 -0
  473. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_unscored_note_despawn_time_cfg +15 -0
  474. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_unscored_note_despawn_time_fast_nodes +43 -0
  475. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_unscored_note_despawn_time_fast_optimized_cfg +11 -0
  476. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_unscored_note_despawn_time_standard_nodes +31 -0
  477. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_unscored_note_despawn_time_standard_optimized_cfg +8 -0
  478. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_unscored_note_preprocess_cfg +844 -0
  479. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_unscored_note_preprocess_fast_nodes +2823 -0
  480. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_unscored_note_preprocess_fast_optimized_cfg +445 -0
  481. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_unscored_note_preprocess_standard_nodes +1430 -0
  482. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_unscored_note_preprocess_standard_optimized_cfg +270 -0
  483. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_unscored_note_spawn_time_cfg +9 -0
  484. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_unscored_note_spawn_time_fast_nodes +13 -0
  485. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_unscored_note_spawn_time_fast_optimized_cfg +3 -0
  486. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_unscored_note_spawn_time_standard_nodes +13 -0
  487. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_unscored_note_spawn_time_standard_optimized_cfg +3 -0
  488. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_unscored_note_terminate_cfg +746 -0
  489. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_unscored_note_terminate_fast_nodes +3984 -0
  490. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_unscored_note_terminate_fast_optimized_cfg +437 -0
  491. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_unscored_note_terminate_standard_nodes +1365 -0
  492. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_unscored_note_terminate_standard_optimized_cfg +113 -0
  493. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_unscored_note_update_parallel_cfg +1807 -0
  494. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_unscored_note_update_parallel_fast_nodes +8301 -0
  495. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_unscored_note_update_parallel_fast_optimized_cfg +923 -0
  496. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_unscored_note_update_parallel_standard_nodes +3182 -0
  497. sonolus_py-0.4.0/tests/regressions/data/pydori_watch_watch_unscored_note_update_parallel_standard_optimized_cfg +287 -0
  498. sonolus_py-0.4.0/tests/regressions/test_project.py +155 -0
  499. sonolus_py-0.4.0/tests/script/__init__.py +0 -0
  500. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/tests/script/conftest.py +3 -3
  501. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/tests/script/test_array.py +25 -0
  502. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/tests/script/test_flow.py +26 -0
  503. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/tests/script/test_functions.py +1 -1
  504. sonolus_py-0.4.0/tests/script/test_generator.py +636 -0
  505. sonolus_py-0.4.0/tests/script/test_genexpr.py +284 -0
  506. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/tests/script/test_interval.py +3 -1
  507. sonolus_py-0.4.0/tests/script/test_maybe.py +71 -0
  508. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/tests/script/test_var_array.py +1 -1
  509. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/uv.lock +52 -22
  510. sonolus_py-0.3.4/.python-version +0 -1
  511. sonolus_py-0.3.4/sonolus/backend/optimize/inlining.py +0 -137
  512. sonolus_py-0.3.4/sonolus/script/iterator.py +0 -185
  513. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/.gitignore +0 -0
  514. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/.run/Python tests in tests.run.xml +0 -0
  515. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/LICENSE +0 -0
  516. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/README.md +0 -0
  517. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/doc_stubs/__init__.py +0 -0
  518. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/doc_stubs/math.pyi +0 -0
  519. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/doc_stubs/num.pyi +0 -0
  520. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/doc_stubs/random.pyi +0 -0
  521. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/docs/CNAME +0 -0
  522. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/docs/concepts/index.md +0 -0
  523. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/docs/concepts/project.md +0 -0
  524. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/docs/concepts/resources.md +0 -0
  525. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/docs/index.md +0 -0
  526. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/docs/reference/builtins.md +0 -0
  527. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/docs/reference/index.md +0 -0
  528. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/docs/reference/math.md +0 -0
  529. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/docs/reference/random.md +0 -0
  530. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/docs/reference/sonolus.script.archetype.md +0 -0
  531. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/docs/reference/sonolus.script.array.md +0 -0
  532. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/docs/reference/sonolus.script.array_like.md +0 -0
  533. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/docs/reference/sonolus.script.bucket.md +0 -0
  534. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/docs/reference/sonolus.script.containers.md +0 -0
  535. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/docs/reference/sonolus.script.debug.md +0 -0
  536. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/docs/reference/sonolus.script.easing.md +0 -0
  537. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/docs/reference/sonolus.script.effect.md +0 -0
  538. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/docs/reference/sonolus.script.engine.md +0 -0
  539. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/docs/reference/sonolus.script.globals.md +0 -0
  540. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/docs/reference/sonolus.script.instruction.md +0 -0
  541. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/docs/reference/sonolus.script.interval.md +0 -0
  542. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/docs/reference/sonolus.script.iterator.md +0 -0
  543. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/docs/reference/sonolus.script.level.md +0 -0
  544. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/docs/reference/sonolus.script.metadata.md +0 -0
  545. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/docs/reference/sonolus.script.num.md +0 -0
  546. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/docs/reference/sonolus.script.options.md +0 -0
  547. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/docs/reference/sonolus.script.particle.md +0 -0
  548. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/docs/reference/sonolus.script.printing.md +0 -0
  549. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/docs/reference/sonolus.script.project.md +0 -0
  550. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/docs/reference/sonolus.script.quad.md +0 -0
  551. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/docs/reference/sonolus.script.record.md +0 -0
  552. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/docs/reference/sonolus.script.runtime.md +0 -0
  553. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/docs/reference/sonolus.script.sprite.md +0 -0
  554. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/docs/reference/sonolus.script.stream.md +0 -0
  555. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/docs/reference/sonolus.script.text.md +0 -0
  556. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/docs/reference/sonolus.script.timing.md +0 -0
  557. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/docs/reference/sonolus.script.transform.md +0 -0
  558. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/docs/reference/sonolus.script.ui.md +0 -0
  559. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/docs/reference/sonolus.script.values.md +0 -0
  560. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/docs/reference/sonolus.script.vec.md +0 -0
  561. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/scripts/generate.py +0 -0
  562. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/scripts/runtimes/Engine/Tutorial/Blocks.json +0 -0
  563. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/scripts/runtimes/Functions.json +0 -0
  564. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/scripts/runtimes/Level/Play/Blocks.json +0 -0
  565. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/scripts/runtimes/Level/Preview/Blocks.json +0 -0
  566. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/scripts/runtimes/Level/Watch/Blocks.json +0 -0
  567. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/sonolus/__init__.py +0 -0
  568. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/sonolus/backend/__init__.py +0 -0
  569. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/sonolus/backend/blocks.py +0 -0
  570. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/sonolus/backend/interpret.py +0 -0
  571. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/sonolus/backend/ir.py +0 -0
  572. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/sonolus/backend/mode.py +0 -0
  573. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/sonolus/backend/node.py +0 -0
  574. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/sonolus/backend/optimize/__init__.py +0 -0
  575. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/sonolus/build/__init__.py +0 -0
  576. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/sonolus/build/collection.py +0 -0
  577. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/sonolus/build/node.py +0 -0
  578. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/sonolus/py.typed +0 -0
  579. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/sonolus/script/__init__.py +0 -0
  580. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/sonolus/script/easing.py +0 -0
  581. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/sonolus/script/engine.py +0 -0
  582. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/sonolus/script/internal/__init__.py +0 -0
  583. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/sonolus/script/internal/callbacks.py +0 -0
  584. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/sonolus/script/internal/descriptor.py +0 -0
  585. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/sonolus/script/internal/dict_impl.py +0 -0
  586. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/sonolus/script/internal/error.py +0 -0
  587. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/sonolus/script/internal/generic.py +0 -0
  588. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/sonolus/script/internal/math_impls.py +0 -0
  589. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/sonolus/script/internal/random.py +0 -0
  590. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/sonolus/script/internal/tuple_impl.py +0 -0
  591. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/sonolus/script/level.py +0 -0
  592. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/sonolus/script/metadata.py +0 -0
  593. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/sonolus/script/pointer.py +0 -0
  594. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/sonolus/script/printing.py +0 -0
  595. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/sonolus/script/text.py +0 -0
  596. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/sonolus/script/timing.py +0 -0
  597. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/sonolus/script/ui.py +0 -0
  598. {sonolus_py-0.3.4/tests → sonolus_py-0.4.0/test_projects/pydori}/__init__.py +0 -0
  599. {sonolus_py-0.3.4/tests/script → sonolus_py-0.4.0/test_projects/pydori/lib}/__init__.py +0 -0
  600. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/tests/script/test_array_map.py +0 -0
  601. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/tests/script/test_array_set.py +0 -0
  602. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/tests/script/test_assert.py +0 -0
  603. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/tests/script/test_dict.py +0 -0
  604. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/tests/script/test_helpers.py +0 -0
  605. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/tests/script/test_match.py +0 -0
  606. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/tests/script/test_num.py +0 -0
  607. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/tests/script/test_operator.py +0 -0
  608. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/tests/script/test_quad.py +0 -0
  609. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/tests/script/test_random.py +0 -0
  610. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/tests/script/test_range.py +0 -0
  611. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/tests/script/test_record.py +0 -0
  612. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/tests/script/test_transform.py +0 -0
  613. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/tests/script/test_tuple.py +0 -0
  614. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/tests/script/test_values.py +0 -0
  615. {sonolus_py-0.3.4 → sonolus_py-0.4.0}/tests/script/test_vec.py +0 -0
@@ -0,0 +1 @@
1
+ tests/regressions/data/* linguist-generated=true
@@ -13,7 +13,7 @@ jobs:
13
13
  - name: Install uv
14
14
  uses: astral-sh/setup-uv@v3
15
15
  with:
16
- version: 0.7.16
16
+ version: 0.8.3
17
17
  - name: Install Python
18
18
  run: |
19
19
  uv python install 3.12 3.13 3.14
@@ -0,0 +1 @@
1
+ 3.14.0rc1
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sonolus.py
3
- Version: 0.3.4
3
+ Version: 0.4.0
4
4
  Summary: Sonolus engine development in Python
5
5
  License-File: LICENSE
6
6
  Requires-Python: >=3.12
@@ -31,6 +31,20 @@ def any(iterable: Iterable[builtins.bool]) -> builtins.bool:
31
31
  """
32
32
  ...
33
33
 
34
+ def sum(
35
+ iterable: Iterable[builtins.int | builtins.float], /, start: builtins.int | builtins.float = 0
36
+ ) -> builtins.int | builtins.float:
37
+ """Return the sum of a 'start' value (default: 0) and an iterable of numbers.
38
+
39
+ Args:
40
+ iterable: The iterable of numbers to sum.
41
+ start: The starting value to add to the sum.
42
+
43
+ Returns:
44
+ The total sum.
45
+ """
46
+ ...
47
+
34
48
  def abs(x: builtins.int | builtins.float) -> builtins.int | builtins.float:
35
49
  """Return the absolute value of a number.
36
50
 
@@ -134,6 +148,17 @@ def issubclass(cls: type, classinfo: type | tuple[type, ...]) -> builtins.bool:
134
148
  """
135
149
  ...
136
150
 
151
+ def iter[T](iterable: Iterable[T]) -> Iterator[T]:
152
+ """Return an iterator for the given iterable.
153
+
154
+ Args:
155
+ iterable: The iterable to convert to an iterator.
156
+
157
+ Returns:
158
+ An iterator over the elements of the iterable.
159
+ """
160
+ ...
161
+
137
162
  def len(s: object) -> builtins.int:
138
163
  """Return the number of items in a container.
139
164
 
@@ -148,9 +173,6 @@ def len(s: object) -> builtins.int:
148
173
  def map[T, S](function: Callable[[T], S], iterable: Iterable[T]) -> Iterator[S]:
149
174
  """Apply a function to every item of an iterable and return an iterator.
150
175
 
151
- Unlike the standard Python map function, it is possible that the function may be called more than once on the
152
- same item.
153
-
154
176
  Args:
155
177
  function: The function to apply.
156
178
  iterable: The iterable to process.
@@ -173,6 +195,24 @@ def max[T](iterable: Iterable[T], *, key: Callable[[T], Any] | None = ...) -> T:
173
195
  """
174
196
  ...
175
197
 
198
+ @overload
199
+ def max(
200
+ iterable: Iterable[builtins.int | builtins.float],
201
+ *,
202
+ default: builtins.int | builtins.float = ...,
203
+ 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
+
176
216
  @overload
177
217
  def max[T](arg1: T, arg2: T, *args: T, key: Callable[[T], Any] | None = ...) -> T:
178
218
  """Return the largest item in an iterable or the largest of two or more arguments.
@@ -201,6 +241,25 @@ def min[T](iterable: Iterable[T], *, key: Callable[[T], Any] | None = ...) -> T:
201
241
  """
202
242
  ...
203
243
 
244
+ @overload
245
+ def min(
246
+ iterable: Iterable[builtins.int | builtins.float],
247
+ *,
248
+ default: builtins.int | builtins.float = ...,
249
+ 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
+
204
263
  @overload
205
264
  def min[T](arg1: T, arg2: T, *args: T, key: Callable[[T], Any] | None = ...) -> T:
206
265
  """Return the smallest item in an iterable or the smallest of two or more arguments.
@@ -216,6 +275,19 @@ def min[T](arg1: T, arg2: T, *args: T, key: Callable[[T], Any] | None = ...) ->
216
275
  """
217
276
  ...
218
277
 
278
+ def next[T](iterator: Iterator[T]) -> T:
279
+ """Retrieve the next item from an iterator.
280
+
281
+ Errors if the iterator is exhausted.
282
+
283
+ Args:
284
+ iterator: The iterator to retrieve the next item from.
285
+
286
+ Returns:
287
+ The next item from the iterator.
288
+ """
289
+ ...
290
+
219
291
  @overload
220
292
  def range(stop: builtins.int) -> builtins.range:
221
293
  """Return an immutable sequence of numbers from 0 to stop.
@@ -1,5 +1,6 @@
1
1
  # Builtins
2
2
  Sonolus.py comes with support for a number of built-in functions.
3
+ The supported functions and parameters are listed below.
3
4
 
4
5
  - `abs(x)`
5
6
  - `bool(object)`
@@ -10,11 +11,13 @@ Sonolus.py comes with support for a number of built-in functions.
10
11
  - `int(x)` (for a num argument)
11
12
  - `isinstance(object, classinfo)`
12
13
  - `issubclass(class, classinfo)`
14
+ - `iter(iterable)`
13
15
  - `len(s)`
14
- - `map(function, iterable)` (note: may differ from standard Python behavior, see
15
- [`map`](../reference/builtins.md#doc_stubs.builtins.map))
16
- - `max(iterable, *, key=None)`, `max(arg1, arg2, *args, key=None)`
17
- - `min(iterable, *, key=None)`, `min(arg1, arg2, *args, key=None)`
16
+ - `map(function, iterable)`
17
+ - `max(iterable, *, default=..., key=None)`, `max(arg1, arg2, *args, key=None)`
18
+ - `min(iterable, *, default=..., key=None)`, `min(arg1, arg2, *args, key=None)`
19
+ - `next(iterator)`
20
+ - `sum(iterable, start=0)`
18
21
  - `range(stop)`, `range(start, stop[, step])`
19
22
  - `reversed(seq)`
20
23
  - `round(number[, ndigits])`
@@ -15,6 +15,13 @@ To build the project, run the following command in the root directory of your pr
15
15
  sonolus-py build
16
16
  ```
17
17
 
18
+ ## Checking for errors without building
19
+ To check for errors, run the following command in the root directory of your project:
20
+
21
+ ```bash
22
+ sonolus-py check
23
+ ```
24
+
18
25
  ## Outputting the level schema
19
26
  To output the level schema of the project, run the following command in the root directory of your project:
20
27
 
@@ -40,6 +40,7 @@ The following constructs are supported in Sonolus.py:
40
40
  - Variables: `a`, `b`, `c`
41
41
  - Lambda: `lambda a, b: a + b`
42
42
  - Assignment Expression: `(a := b)`
43
+ - Generator Expression: `(x for x in iterable if condition)`
43
44
  - Statements:
44
45
  - Simple Statements:
45
46
  - Assignments:
@@ -55,6 +56,7 @@ The following constructs are supported in Sonolus.py:
55
56
  - Break: `break`
56
57
  - Continue: `continue`
57
58
  - Return: `return <value>`
59
+ - Yield: `yield <value>`, `yield from <iterable>`
58
60
  - Import: `import <module>`, `from <module> import <name>` (only outside of functions)
59
61
  - Compound Statements:
60
62
  - If: `if <condition>:`, `elif <condition>:`, `else:`
@@ -118,6 +118,16 @@ 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
+
124
+ ```python
125
+ from sonolus.script.array import Dim
126
+
127
+ a1 = Array[int, Dim(3)](1, 2, 3)
128
+ a2 = Array[int, Literal[3]](1, 2, 3)
129
+ ```
130
+
121
131
  If at least one element is provided, the element type and size can be inferred:
122
132
 
123
133
  ```python
@@ -613,18 +623,14 @@ class _FilteringIterator[T, Fn](Record, SonolusIterator):
613
623
  fn: Fn
614
624
  iterator: T
615
625
 
616
- def has_next(self) -> bool:
617
- while self.iterator.has_next():
618
- if self.fn(self.iterator.get()):
619
- return True
620
- self.iterator.advance()
621
- return False
622
-
623
- def get(self) -> Any:
624
- return self.iterator.get()
625
-
626
- def advance(self):
627
- self.iterator.advance()
626
+ def next(self) -> Maybe[T]:
627
+ while True:
628
+ value = self.iterator.next()
629
+ if value.is_nothing:
630
+ return Nothing
631
+ inside = value.get()
632
+ if self.fn(inside):
633
+ return Some(inside)
628
634
 
629
635
 
630
636
  def my_filter[T, Fn](iterable: T, fn: Fn) -> T:
@@ -4,15 +4,15 @@ Sonolus.py is a Python library for creating Sonolus engines. This page provides
4
4
  available in the library. For more detailed information, see the [Concepts](concepts/index.md) and
5
5
  [Reference](reference/index.md) sections.
6
6
 
7
- ## Features
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
10
  most syntax and a portion of the standard library. Additionally, Sonolus.py provides its own library of types and
10
11
  functions that are specifically designed for use in Sonolus engines.
11
12
 
12
- ### Language
13
+ ### Syntax
13
14
 
14
- #### Syntax
15
- Most Python syntax is supported, but there are a few limitations:
15
+ Most Python syntax is supported, but there are a few limitations. The primary restrictions are:
16
16
 
17
17
  - Destructuring assignment with the `*` operator is unsupported.
18
18
  - Sequence (list and array) `match` patterns with the `*` operator are unsupported.
@@ -21,7 +21,8 @@ Most Python syntax is supported, but there are a few limitations:
21
21
  - The `global` and `nonlocal` keywords are unsupported.
22
22
  - Exception related statements (`try`, `except`, `finally`, `raise`) are unsupported.
23
23
 
24
- #### Compile Time Evaluation
24
+ ### Compile Time Evaluation
25
+
25
26
  Sonolus.py will evaluate some expressions at compile time such as basic arithmetic operations on constants,
26
27
  boolean logical operations (`and`, `or`, `not`) on constants, and type checks (`isinstance`, `issubclass`).
27
28
 
@@ -38,7 +39,8 @@ else:
38
39
  debug_log(a)
39
40
  ```
40
41
 
41
- #### Variables
42
+ ### Variables
43
+
42
44
  Numeric (`int`, `float`, `bool`) variables are fully supported and can be freely assigned and modified.
43
45
 
44
46
  All other variables have the restriction that if the compiler finds multiple possible values for a variable, it may
@@ -53,7 +55,8 @@ else:
53
55
  debug_log(a.x)
54
56
  ```
55
57
 
56
- #### Function Returns
58
+ ### Function Returns
59
+
57
60
  Similar to variables, functions returning `int`, `float`, or `bool` can have any number of return statements. Functions
58
61
  returning `None` may also have any number of `return` or `return None` statements.
59
62
 
@@ -71,26 +74,25 @@ def fn(a: int | Vec2):
71
74
  fn(123)
72
75
  ```
73
76
 
74
- ### Types
77
+ ## Types
78
+
79
+ ### Numbers
75
80
 
76
- #### Numbers
77
81
  Sonolus.py supports `int`, `float`, and `bool` types and most of the standard operations such as mathematical operations
78
82
  (`+`, `-`, `*`, `/`, `//`, `%`), comparisons (`<`, `<=`, `>`, `>=`, `==`, `!=`), and boolean operations
79
83
  (`and`, `or`, `not`).
80
84
 
81
- #### Record
82
- [`Record`](reference/sonolus.script.record.md) is the main way to define custom types in Sonolus.py. It functions similarly to a data class and
83
- provides a way to define a type with named fields:
85
+ ### Record
86
+
87
+ [`Record`](reference/sonolus.script.record.md) is the main way to define custom types in Sonolus.py.
88
+ It functions similarly to a data class and provides a way to define a type with named fields:
84
89
 
85
90
  ```python
86
91
  class MyRecord(Record):
87
92
  a: int
88
93
  b: float
89
94
 
90
- my_record = MyRecord(1, b=2.5)
91
- my_zero_record = +MyRecord # Short for MyRecord(0, 0.0)
92
- my_record_copy = +my_record # Create a copy of my_record with the same values
93
- my_record.a = 123 # Modify a field of the record
95
+ record_1 = MyRecord(1, b=2.3)
94
96
  ```
95
97
 
96
98
  Records may also be generic:
@@ -99,26 +101,101 @@ Records may also be generic:
99
101
  class MyGenericRecord[T](Record):
100
102
  value: T
101
103
 
102
- my_generic_record = MyGenericRecord[int](42)
103
- my_generic_record_2 = MyGenericRecord(MyRecord(1, 3.5)) # Type arguments are inferred
104
+ record_1 = MyGenericRecord[int](123)
105
+ record_2 = MyGenericRecord(MyRecord(4, 5.6)) # Type arguments are inferred
106
+ ```
107
+
108
+ Record arguments are retained by reference, so modifying the original record will also modify the record in the array:
109
+
110
+ ```python
111
+ record_1 = MyRecord(1, 2.3)
112
+ record_2 = MyGenericRecord(record_1)
113
+ record_2.value.a = 789 # This also affects `record_1` since they're the same object.
114
+ assert record_1.a == record_2.value.a == 789
115
+ ```
116
+
117
+ ### Array
118
+
119
+ [`Array`](reference/sonolus.script.array.md) is a type that represents a fixed-size array of elements of a
120
+ specific type:
121
+
122
+ ```python
123
+ array_1 = Array[int, 3](1, 2, 3)
124
+ array_2 = Array(4, 5, 6) # Type arguments are inferred
125
+ ```
126
+
127
+ When given record or array values as arguments, the array constructor will copy them:
128
+
129
+ ```python
130
+ record_1 = MyRecord(1, 2.5)
131
+ array_1 = Array(record_1)
132
+ array_1[0].a = 789 # This has no effect on `record_1` since it was copied.
133
+ assert record_1.a == 1
134
+ ```
135
+
136
+ ### Operations
137
+
138
+ This section is an overview of the operations available for records and arrays. For full details see the
139
+ [Record documentation](reference/sonolus.script.record.md) and [Array documentation](reference/sonolus.script.array.md).
140
+
141
+ Records and arrays come with the `==` and `!=` operators predefined to compare their values for equality:
142
+
143
+ ```python
144
+ assert MyRecord(1, 2.3) == MyRecord(1, 2.3)
145
+ assert Array(1, 2, 3) != Array(4, 5, 6)
146
+ ```
147
+
148
+ The unary `+` operator makes a copy of a record or array, creating a new instance with the same values:
149
+
150
+ ```python
151
+ record_2 = +record_1
152
+ array_2 = +array_1
153
+ ```
154
+
155
+ Similarly, a new zero initialized value can be created using the unary `+` operator on a record or array type:
156
+
157
+ ```python
158
+ record_1 = +MyRecord
159
+ record_2 = +Array[int, 3]
160
+ ```
161
+
162
+ Records and arrays can be mutated in-place using the `@=` operator:
163
+
164
+ ```python
165
+ record_1 @= MyRecord(1, 2.3)
166
+ array_1 @= Array(4, 5, 6)
167
+ ```
168
+
169
+ Record fields and array elements of numeric types can be set using the `=` operator:
170
+
171
+ ```python
172
+ record_1.a = 123
173
+ array_1[1] = 456
174
+ ```
175
+
176
+ Setting a record field that's a record or array using the `=` operator will modify the field in-place:
177
+
178
+ ```python
179
+ record_1 = MyRecord(1, 2.3)
180
+ record_2 = MyGenericRecord(record_1)
181
+ record_2.value = MyRecord(4, 5.6) # This modifies `record_1` in-place.
182
+ assert record_1 == record_2.value == MyRecord(4, 5.6)
104
183
  ```
105
184
 
106
- #### Array
107
- [`Array`](reference/sonolus.script.array.md) is a type that represents a fixed-size array of elements of a specific type.
185
+ Setting an array element that's a record or array using the `=` operator will also modify the element in-place:
108
186
 
109
187
  ```python
110
- my_array = Array[int, 3](1, 2, 3)
111
- my_array_2 = Array(4, 5, 6) # Type arguments are inferred
112
- my_zero_array = +Array[int, 3] # Short for Array[int, 3](0, 0, 0)
113
- my_array_copy = +my_array # Create a copy of my_array with the same values
114
- my_array[2] = 10 # Modify an element of the array
188
+ array_1 = Array(MyRecord(1, 2.3))
189
+ record_1 = array_1[0]
190
+ array_1[0] = MyRecord(4, 5.6) # This modifies `record_1` in-place.
191
+ assert record_1 == array_1[0] == MyRecord(4, 5.6)
115
192
  ```
116
193
 
117
- #### Other Types
194
+ ### Other Types
118
195
  Sonolus.py has limited support for other types of values such as strings, tuples, and functions. These have restrictions
119
196
  such as not being valid as Record field types or Array element types.
120
197
 
121
- ### Modules
198
+ ## Modules
122
199
  Sonolus.py provides a number of built-in modules that can be used in Sonolus engines. These include:
123
200
 
124
201
  - Project
@@ -155,6 +232,7 @@ Sonolus.py provides a number of built-in modules that can be used in Sonolus eng
155
232
  - [Easing](reference/sonolus.script.easing.md): Easing functions for animations.
156
233
  - [Interval](reference/sonolus.script.interval.md): Mathematical intervals.
157
234
  - [Iterator](reference/sonolus.script.iterator.md): Iterators over collections.
235
+ - [Maybe](reference/sonolus.script.maybe.md): Optional function return values.
158
236
  - [Printing](reference/sonolus.script.printing.md): Preview mode number printing.
159
237
  - [Quad](reference/sonolus.script.quad.md): Quadrilaterals.
160
238
  - [Transform](reference/sonolus.script.transform.md): Transformations like translation, rotation, and scaling.
@@ -0,0 +1,3 @@
1
+ # sonolus.script.maybe
2
+
3
+ ::: sonolus.script.maybe
@@ -98,6 +98,7 @@ nav:
98
98
  - reference/sonolus.script.interval.md
99
99
  - reference/sonolus.script.iterator.md
100
100
  - reference/sonolus.script.level.md
101
+ - reference/sonolus.script.maybe.md
101
102
  - reference/sonolus.script.metadata.md
102
103
  - reference/sonolus.script.num.md
103
104
  - reference/sonolus.script.options.md
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "sonolus.py"
3
- version = "0.3.4"
3
+ version = "0.4.0"
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"]
21
+ ignore = ["E402", "D1", "COM812", "PLW2901", "PLW3201", "PLR6301", "PLC0415", "PLR2004", "PLR09", "SIM108", "FURB113", "A005", "B903", "FURB118"]
22
22
 
23
23
  [tool.ruff.lint.pydocstyle]
24
24
  convention = "google"
@@ -29,6 +29,7 @@ build-backend = "hatchling.build"
29
29
 
30
30
  [dependency-groups]
31
31
  dev = [
32
+ "uv>=0.8.3",
32
33
  "hypothesis>=6.115.3",
33
34
  "pre-commit>=4.0.1",
34
35
  "pytest-xdist>=3.6.1",
@@ -37,6 +38,7 @@ dev = [
37
38
  "pytest-cov>=6.0.0",
38
39
  "tox>=4.23.2",
39
40
  "tox-uv>=1.16.0",
41
+ "ty"
40
42
  ]
41
43
  docs = [
42
44
  "mkdocs-material>=9.5.45",
@@ -61,3 +63,9 @@ deps = [
61
63
  ]
62
64
  uv_python_preference = "managed"
63
65
  commands = [["pytest", "tests", "-n", "auto"]]
66
+
67
+ [tool.ty.environment]
68
+ root = ["./sonolus"]
69
+
70
+ [tool.ty.src]
71
+ include = ["sonolus/script"]
@@ -16,6 +16,10 @@ def is_compiler_internal(tb: TracebackType):
16
16
  )
17
17
 
18
18
 
19
+ def is_traceback_root(tb: TracebackType | None) -> bool:
20
+ return tb.tb_frame.f_locals.get("_traceback_root_", False) or tb.tb_frame.f_globals.get("_traceback_root_", False)
21
+
22
+
19
23
  def filter_traceback(tb: TracebackType | None) -> TracebackType | None:
20
24
  if tb is None:
21
25
  return None
@@ -25,6 +29,17 @@ def filter_traceback(tb: TracebackType | None) -> TracebackType | None:
25
29
  return tb
26
30
 
27
31
 
32
+ def truncate_traceback(tb: TracebackType | None) -> TracebackType | None:
33
+ if tb is None:
34
+ return None
35
+ if is_compiler_internal(tb):
36
+ return truncate_traceback(tb.tb_next)
37
+ if is_traceback_root(tb):
38
+ return tb
39
+ else:
40
+ return truncate_traceback(tb.tb_next)
41
+
42
+
28
43
  def excepthook(exc, value, tb):
29
44
  import traceback
30
45
 
@@ -33,5 +48,20 @@ def excepthook(exc, value, tb):
33
48
  traceback.print_exception(exc, value, tb)
34
49
 
35
50
 
51
+ def print_simple_traceback(exc, value, tb):
52
+ import traceback
53
+
54
+ if should_filter_traceback(tb):
55
+ tb = filter_traceback(tb)
56
+ truncated = truncate_traceback(tb)
57
+ tb = truncated if truncated is not None else tb
58
+ cause = value.__cause__
59
+ value.__cause__ = None
60
+ traceback.print_exception(exc, value, tb)
61
+ value.__cause__ = cause
62
+ else:
63
+ traceback.print_exception(exc, value, tb)
64
+
65
+
36
66
  def install_excepthook():
37
67
  sys.excepthook = excepthook
@@ -13,7 +13,9 @@ def cfg_to_engine_node(entry: BasicBlock):
13
13
  for block in block_indexes:
14
14
  statements = []
15
15
  statements.extend(ir_to_engine_node(stmt) for stmt in block.statements)
16
- outgoing = {edge.cond: edge.dst for edge in block.outgoing}
16
+ outgoing = {
17
+ edge.cond: edge.dst for edge in sorted(block.outgoing, key=lambda edge: (edge.cond is None, edge.cond))
18
+ }
17
19
  match outgoing:
18
20
  case {**other} if not other:
19
21
  statements.append(ConstantNode(value=len(block_indexes)))
@@ -30,6 +32,18 @@ def cfg_to_engine_node(entry: BasicBlock):
30
32
  ],
31
33
  )
32
34
  )
35
+ case {None: default_branch, **other} if len(other) == 1:
36
+ cond, cond_branch = next(iter(other.items()))
37
+ statements.append(
38
+ FunctionNode(
39
+ func=Op.If,
40
+ args=[
41
+ ir_to_engine_node(IRPureInstr(Op.Equal, args=[block.test, IRConst(cond)])),
42
+ ConstantNode(value=block_indexes[cond_branch]),
43
+ ConstantNode(value=block_indexes[default_branch]),
44
+ ],
45
+ )
46
+ )
33
47
  case dict() as targets:
34
48
  args = [ir_to_engine_node(block.test)]
35
49
  default = len(block_indexes)
@@ -2,6 +2,10 @@ from enum import StrEnum
2
2
 
3
3
 
4
4
  class Op(StrEnum):
5
+ side_effects: bool
6
+ pure: bool
7
+ control_flow: bool
8
+
5
9
  def __new__(cls, name: str, side_effects: bool, pure: bool, control_flow: bool):
6
10
  obj = str.__new__(cls, name)
7
11
  obj._value_ = name
@@ -1,7 +1,7 @@
1
1
  from sonolus.backend.ir import IRConst, IRGet, IRInstr, IRPureInstr, IRSet
2
2
  from sonolus.backend.optimize.flow import BasicBlock, traverse_cfg_preorder
3
3
  from sonolus.backend.optimize.liveness import LivenessAnalysis, get_live
4
- from sonolus.backend.optimize.passes import CompilerPass
4
+ from sonolus.backend.optimize.passes import CompilerPass, OptimizerConfig
5
5
  from sonolus.backend.place import BlockPlace, TempBlock
6
6
 
7
7
  TEMP_SIZE = 4096
@@ -10,7 +10,7 @@ TEMP_SIZE = 4096
10
10
  class AllocateBasic(CompilerPass):
11
11
  """Allocate temporary memory for temporary variables without considering lifetimes."""
12
12
 
13
- def run(self, entry: BasicBlock):
13
+ def run(self, entry: BasicBlock, config: OptimizerConfig) -> BasicBlock:
14
14
  offsets = {}
15
15
  index = 0
16
16
 
@@ -62,7 +62,7 @@ class Allocate(CompilerPass):
62
62
  def requires(self) -> set[CompilerPass]:
63
63
  return {LivenessAnalysis()}
64
64
 
65
- def run(self, entry: BasicBlock):
65
+ def run(self, entry: BasicBlock, config: OptimizerConfig) -> BasicBlock:
66
66
  mapping = self.get_mapping(entry)
67
67
  for block in traverse_cfg_preorder(entry):
68
68
  updated_statements = [self.update_stmt(statement, mapping) for statement in block.statements]
@@ -114,7 +114,7 @@ class Allocate(CompilerPass):
114
114
  interference = self.get_interference(entry)
115
115
  offsets: dict[TempBlock, int] = {}
116
116
 
117
- for block, others in sorted(interference.items(), key=lambda x: -x[0].size):
117
+ for block, others in sorted(interference.items(), key=lambda x: (-x[0].size, x[0].name)):
118
118
  size = block.size
119
119
  offset = 0
120
120
  for other in sorted(others, key=lambda x: offsets.get(x, 0) + x.size):
@@ -152,7 +152,7 @@ class AllocateFast(Allocate):
152
152
  offsets: dict[TempBlock, int] = dict.fromkeys(interference, 0)
153
153
  end_offsets: dict[TempBlock, int] = dict.fromkeys(interference, 0)
154
154
 
155
- for block, others in interference.items():
155
+ for block, others in sorted(interference.items(), key=lambda x: (-x[0].size, x[0].name)):
156
156
  size = block.size
157
157
  offset = max((end_offsets[other] for other in others), default=0)
158
158
  if offset + size > TEMP_SIZE: