sonolus.py 0.5.0__tar.gz → 0.5.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (625) hide show
  1. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/PKG-INFO +1 -1
  2. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/pyproject.toml +1 -1
  3. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/sonolus/backend/visitor.py +0 -2
  4. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/sonolus/build/compile.py +9 -4
  5. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/sonolus/script/archetype.py +187 -17
  6. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/sonolus/script/internal/context.py +10 -2
  7. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/sonolus/script/internal/introspection.py +3 -0
  8. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/uv.lock +1 -1
  9. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/.gitattributes +0 -0
  10. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/.github/workflows/publish.yaml +0 -0
  11. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/.gitignore +0 -0
  12. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/.python-version +0 -0
  13. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/.run/Python tests in tests.run.xml +0 -0
  14. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/LICENSE +0 -0
  15. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/README.md +0 -0
  16. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/doc_stubs/__init__.py +0 -0
  17. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/doc_stubs/builtins.pyi +0 -0
  18. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/doc_stubs/math.pyi +0 -0
  19. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/doc_stubs/num.pyi +0 -0
  20. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/doc_stubs/random.pyi +0 -0
  21. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/docs/CNAME +0 -0
  22. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/docs/concepts/builtins.md +0 -0
  23. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/docs/concepts/cli.md +0 -0
  24. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/docs/concepts/constructs.md +0 -0
  25. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/docs/concepts/index.md +0 -0
  26. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/docs/concepts/project.md +0 -0
  27. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/docs/concepts/resources.md +0 -0
  28. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/docs/concepts/types.md +0 -0
  29. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/docs/guides/bucket.md +0 -0
  30. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/docs/guides/coming-soon.md +0 -0
  31. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/docs/guides/effect.md +0 -0
  32. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/docs/guides/index.md +0 -0
  33. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/docs/guides/particle.md +0 -0
  34. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/docs/guides/play.md +0 -0
  35. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/docs/guides/project-structure.md +0 -0
  36. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/docs/guides/screen.md +0 -0
  37. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/docs/guides/setup.md +0 -0
  38. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/docs/guides/skin.md +0 -0
  39. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/docs/guides/ui.md +0 -0
  40. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/docs/guides/usage.md +0 -0
  41. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/docs/index.md +0 -0
  42. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/docs/overview.md +0 -0
  43. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/docs/reference/builtins.md +0 -0
  44. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/docs/reference/index.md +0 -0
  45. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/docs/reference/math.md +0 -0
  46. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/docs/reference/random.md +0 -0
  47. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/docs/reference/sonolus.script.archetype.md +0 -0
  48. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/docs/reference/sonolus.script.array.md +0 -0
  49. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/docs/reference/sonolus.script.array_like.md +0 -0
  50. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/docs/reference/sonolus.script.bucket.md +0 -0
  51. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/docs/reference/sonolus.script.containers.md +0 -0
  52. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/docs/reference/sonolus.script.debug.md +0 -0
  53. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/docs/reference/sonolus.script.easing.md +0 -0
  54. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/docs/reference/sonolus.script.effect.md +0 -0
  55. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/docs/reference/sonolus.script.engine.md +0 -0
  56. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/docs/reference/sonolus.script.globals.md +0 -0
  57. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/docs/reference/sonolus.script.instruction.md +0 -0
  58. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/docs/reference/sonolus.script.interval.md +0 -0
  59. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/docs/reference/sonolus.script.iterator.md +0 -0
  60. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/docs/reference/sonolus.script.level.md +0 -0
  61. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/docs/reference/sonolus.script.maybe.md +0 -0
  62. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/docs/reference/sonolus.script.metadata.md +0 -0
  63. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/docs/reference/sonolus.script.num.md +0 -0
  64. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/docs/reference/sonolus.script.options.md +0 -0
  65. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/docs/reference/sonolus.script.particle.md +0 -0
  66. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/docs/reference/sonolus.script.printing.md +0 -0
  67. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/docs/reference/sonolus.script.project.md +0 -0
  68. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/docs/reference/sonolus.script.quad.md +0 -0
  69. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/docs/reference/sonolus.script.record.md +0 -0
  70. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/docs/reference/sonolus.script.runtime.md +0 -0
  71. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/docs/reference/sonolus.script.sprite.md +0 -0
  72. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/docs/reference/sonolus.script.stream.md +0 -0
  73. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/docs/reference/sonolus.script.text.md +0 -0
  74. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/docs/reference/sonolus.script.timing.md +0 -0
  75. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/docs/reference/sonolus.script.transform.md +0 -0
  76. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/docs/reference/sonolus.script.ui.md +0 -0
  77. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/docs/reference/sonolus.script.values.md +0 -0
  78. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/docs/reference/sonolus.script.vec.md +0 -0
  79. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/mkdocs.yml +0 -0
  80. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/scripts/generate.py +0 -0
  81. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/scripts/runtimes/Engine/Tutorial/Blocks.json +0 -0
  82. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/scripts/runtimes/Functions.json +0 -0
  83. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/scripts/runtimes/Level/Play/Blocks.json +0 -0
  84. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/scripts/runtimes/Level/Preview/Blocks.json +0 -0
  85. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/scripts/runtimes/Level/Watch/Blocks.json +0 -0
  86. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/sonolus/__init__.py +0 -0
  87. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/sonolus/backend/__init__.py +0 -0
  88. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/sonolus/backend/blocks.py +0 -0
  89. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/sonolus/backend/excepthook.py +0 -0
  90. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/sonolus/backend/finalize.py +0 -0
  91. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/sonolus/backend/interpret.py +0 -0
  92. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/sonolus/backend/ir.py +0 -0
  93. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/sonolus/backend/mode.py +0 -0
  94. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/sonolus/backend/node.py +0 -0
  95. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/sonolus/backend/ops.py +0 -0
  96. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/sonolus/backend/optimize/__init__.py +0 -0
  97. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/sonolus/backend/optimize/allocate.py +0 -0
  98. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/sonolus/backend/optimize/constant_evaluation.py +0 -0
  99. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/sonolus/backend/optimize/copy_coalesce.py +0 -0
  100. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/sonolus/backend/optimize/dead_code.py +0 -0
  101. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/sonolus/backend/optimize/dominance.py +0 -0
  102. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/sonolus/backend/optimize/flow.py +0 -0
  103. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/sonolus/backend/optimize/inlining.py +0 -0
  104. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/sonolus/backend/optimize/liveness.py +0 -0
  105. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/sonolus/backend/optimize/optimize.py +0 -0
  106. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/sonolus/backend/optimize/passes.py +0 -0
  107. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/sonolus/backend/optimize/simplify.py +0 -0
  108. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/sonolus/backend/optimize/ssa.py +0 -0
  109. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/sonolus/backend/place.py +0 -0
  110. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/sonolus/backend/utils.py +0 -0
  111. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/sonolus/build/__init__.py +0 -0
  112. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/sonolus/build/cli.py +0 -0
  113. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/sonolus/build/collection.py +0 -0
  114. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/sonolus/build/engine.py +0 -0
  115. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/sonolus/build/level.py +0 -0
  116. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/sonolus/build/node.py +0 -0
  117. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/sonolus/build/project.py +0 -0
  118. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/sonolus/py.typed +0 -0
  119. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/sonolus/script/__init__.py +0 -0
  120. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/sonolus/script/array.py +0 -0
  121. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/sonolus/script/array_like.py +0 -0
  122. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/sonolus/script/bucket.py +0 -0
  123. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/sonolus/script/containers.py +0 -0
  124. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/sonolus/script/debug.py +0 -0
  125. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/sonolus/script/easing.py +0 -0
  126. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/sonolus/script/effect.py +0 -0
  127. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/sonolus/script/engine.py +0 -0
  128. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/sonolus/script/globals.py +0 -0
  129. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/sonolus/script/instruction.py +0 -0
  130. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/sonolus/script/internal/__init__.py +0 -0
  131. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/sonolus/script/internal/builtin_impls.py +0 -0
  132. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/sonolus/script/internal/callbacks.py +0 -0
  133. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/sonolus/script/internal/constant.py +0 -0
  134. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/sonolus/script/internal/descriptor.py +0 -0
  135. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/sonolus/script/internal/dict_impl.py +0 -0
  136. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/sonolus/script/internal/error.py +0 -0
  137. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/sonolus/script/internal/generic.py +0 -0
  138. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/sonolus/script/internal/impl.py +0 -0
  139. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/sonolus/script/internal/math_impls.py +0 -0
  140. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/sonolus/script/internal/native.py +0 -0
  141. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/sonolus/script/internal/random.py +0 -0
  142. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/sonolus/script/internal/range.py +0 -0
  143. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/sonolus/script/internal/simulation_context.py +0 -0
  144. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/sonolus/script/internal/transient.py +0 -0
  145. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/sonolus/script/internal/tuple_impl.py +0 -0
  146. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/sonolus/script/internal/value.py +0 -0
  147. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/sonolus/script/interval.py +0 -0
  148. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/sonolus/script/iterator.py +0 -0
  149. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/sonolus/script/level.py +0 -0
  150. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/sonolus/script/maybe.py +0 -0
  151. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/sonolus/script/metadata.py +0 -0
  152. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/sonolus/script/num.py +0 -0
  153. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/sonolus/script/options.py +0 -0
  154. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/sonolus/script/particle.py +0 -0
  155. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/sonolus/script/pointer.py +0 -0
  156. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/sonolus/script/printing.py +0 -0
  157. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/sonolus/script/project.py +0 -0
  158. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/sonolus/script/quad.py +0 -0
  159. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/sonolus/script/record.py +0 -0
  160. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/sonolus/script/runtime.py +0 -0
  161. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/sonolus/script/sprite.py +0 -0
  162. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/sonolus/script/stream.py +0 -0
  163. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/sonolus/script/text.py +0 -0
  164. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/sonolus/script/timing.py +0 -0
  165. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/sonolus/script/transform.py +0 -0
  166. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/sonolus/script/ui.py +0 -0
  167. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/sonolus/script/values.py +0 -0
  168. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/sonolus/script/vec.py +0 -0
  169. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/test_projects/pydori/__init__.py +0 -0
  170. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/test_projects/pydori/level.py +0 -0
  171. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/test_projects/pydori/lib/__init__.py +0 -0
  172. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/test_projects/pydori/lib/buckets.py +0 -0
  173. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/test_projects/pydori/lib/connector.py +0 -0
  174. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/test_projects/pydori/lib/effect.py +0 -0
  175. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/test_projects/pydori/lib/layer.py +0 -0
  176. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/test_projects/pydori/lib/layout.py +0 -0
  177. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/test_projects/pydori/lib/note.py +0 -0
  178. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/test_projects/pydori/lib/options.py +0 -0
  179. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/test_projects/pydori/lib/particle.py +0 -0
  180. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/test_projects/pydori/lib/skin.py +0 -0
  181. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/test_projects/pydori/lib/stage.py +0 -0
  182. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/test_projects/pydori/lib/streams.py +0 -0
  183. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/test_projects/pydori/lib/ui.py +0 -0
  184. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/test_projects/pydori/play/__init__.py +0 -0
  185. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/test_projects/pydori/play/connector.py +0 -0
  186. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/test_projects/pydori/play/event.py +0 -0
  187. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/test_projects/pydori/play/input.py +0 -0
  188. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/test_projects/pydori/play/mode.py +0 -0
  189. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/test_projects/pydori/play/note.py +0 -0
  190. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/test_projects/pydori/play/stage.py +0 -0
  191. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/test_projects/pydori/preview/__init__.py +0 -0
  192. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/test_projects/pydori/preview/connector.py +0 -0
  193. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/test_projects/pydori/preview/event.py +0 -0
  194. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/test_projects/pydori/preview/layout.py +0 -0
  195. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/test_projects/pydori/preview/mode.py +0 -0
  196. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/test_projects/pydori/preview/note.py +0 -0
  197. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/test_projects/pydori/preview/stage.py +0 -0
  198. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/test_projects/pydori/project.py +0 -0
  199. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/test_projects/pydori/tutorial/__init__.py +0 -0
  200. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/test_projects/pydori/tutorial/framework.py +0 -0
  201. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/test_projects/pydori/tutorial/instructions.py +0 -0
  202. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/test_projects/pydori/tutorial/intro.py +0 -0
  203. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/test_projects/pydori/tutorial/mode.py +0 -0
  204. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/test_projects/pydori/tutorial/navigate.py +0 -0
  205. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/test_projects/pydori/tutorial/painting.py +0 -0
  206. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/test_projects/pydori/tutorial/phases.py +0 -0
  207. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/test_projects/pydori/tutorial/preprocess.py +0 -0
  208. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/test_projects/pydori/tutorial/update.py +0 -0
  209. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/test_projects/pydori/watch/__init__.py +0 -0
  210. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/test_projects/pydori/watch/connector.py +0 -0
  211. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/test_projects/pydori/watch/event.py +0 -0
  212. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/test_projects/pydori/watch/mode.py +0 -0
  213. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/test_projects/pydori/watch/note.py +0 -0
  214. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/test_projects/pydori/watch/stage.py +0 -0
  215. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/test_projects/pydori/watch/update_spawn.py +0 -0
  216. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/__init__.py +0 -0
  217. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/__init__.py +0 -0
  218. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/conftest.py +0 -0
  219. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_hold_connector_should_spawn_cfg +0 -0
  220. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_hold_connector_should_spawn_fast_nodes +0 -0
  221. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_hold_connector_should_spawn_fast_optimized_cfg +0 -0
  222. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_hold_connector_should_spawn_standard_nodes +0 -0
  223. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_hold_connector_should_spawn_standard_optimized_cfg +0 -0
  224. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_hold_connector_spawn_order_cfg +0 -0
  225. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_hold_connector_spawn_order_fast_nodes +0 -0
  226. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_hold_connector_spawn_order_fast_optimized_cfg +0 -0
  227. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_hold_connector_spawn_order_standard_nodes +0 -0
  228. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_hold_connector_spawn_order_standard_optimized_cfg +0 -0
  229. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_hold_connector_update_parallel_cfg +0 -0
  230. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_hold_connector_update_parallel_fast_nodes +0 -0
  231. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_hold_connector_update_parallel_fast_optimized_cfg +0 -0
  232. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_hold_connector_update_parallel_standard_nodes +0 -0
  233. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_hold_connector_update_parallel_standard_optimized_cfg +0 -0
  234. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_hold_connector_update_sequential_cfg +0 -0
  235. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_hold_connector_update_sequential_fast_nodes +0 -0
  236. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_hold_connector_update_sequential_fast_optimized_cfg +0 -0
  237. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_hold_connector_update_sequential_standard_nodes +0 -0
  238. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_hold_connector_update_sequential_standard_optimized_cfg +0 -0
  239. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_hold_manager_touch_cfg +0 -0
  240. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_hold_manager_touch_fast_nodes +0 -0
  241. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_hold_manager_touch_fast_optimized_cfg +0 -0
  242. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_hold_manager_touch_standard_nodes +0 -0
  243. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_hold_manager_touch_standard_optimized_cfg +0 -0
  244. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_hold_manager_update_parallel_cfg +0 -0
  245. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_hold_manager_update_parallel_fast_nodes +0 -0
  246. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_hold_manager_update_parallel_fast_optimized_cfg +0 -0
  247. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_hold_manager_update_parallel_standard_nodes +0 -0
  248. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_hold_manager_update_parallel_standard_optimized_cfg +0 -0
  249. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_note_initialize_cfg +0 -0
  250. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_note_initialize_fast_nodes +0 -0
  251. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_note_initialize_fast_optimized_cfg +0 -0
  252. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_note_initialize_standard_nodes +0 -0
  253. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_note_initialize_standard_optimized_cfg +0 -0
  254. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_note_preprocess_cfg +0 -0
  255. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_note_preprocess_fast_nodes +0 -0
  256. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_note_preprocess_fast_optimized_cfg +0 -0
  257. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_note_preprocess_standard_nodes +0 -0
  258. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_note_preprocess_standard_optimized_cfg +0 -0
  259. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_note_should_spawn_cfg +0 -0
  260. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_note_should_spawn_fast_nodes +0 -0
  261. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_note_should_spawn_fast_optimized_cfg +0 -0
  262. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_note_should_spawn_standard_nodes +0 -0
  263. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_note_should_spawn_standard_optimized_cfg +0 -0
  264. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_note_spawn_order_cfg +0 -0
  265. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_note_spawn_order_fast_nodes +0 -0
  266. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_note_spawn_order_fast_optimized_cfg +0 -0
  267. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_note_spawn_order_standard_nodes +0 -0
  268. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_note_spawn_order_standard_optimized_cfg +0 -0
  269. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_note_terminate_cfg +0 -0
  270. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_note_terminate_fast_nodes +0 -0
  271. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_note_terminate_fast_optimized_cfg +0 -0
  272. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_note_terminate_standard_nodes +0 -0
  273. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_note_terminate_standard_optimized_cfg +0 -0
  274. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_note_touch_cfg +0 -0
  275. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_note_touch_fast_nodes +0 -0
  276. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_note_touch_fast_optimized_cfg +0 -0
  277. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_note_touch_standard_nodes +0 -0
  278. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_note_touch_standard_optimized_cfg +0 -0
  279. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_note_update_parallel_cfg +0 -0
  280. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_note_update_parallel_fast_nodes +0 -0
  281. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_note_update_parallel_fast_optimized_cfg +0 -0
  282. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_note_update_parallel_standard_nodes +0 -0
  283. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_note_update_parallel_standard_optimized_cfg +0 -0
  284. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_note_update_sequential_cfg +0 -0
  285. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_note_update_sequential_fast_nodes +0 -0
  286. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_note_update_sequential_fast_optimized_cfg +0 -0
  287. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_note_update_sequential_standard_nodes +0 -0
  288. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_note_update_sequential_standard_optimized_cfg +0 -0
  289. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_sim_line_should_spawn_cfg +0 -0
  290. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_sim_line_should_spawn_fast_nodes +0 -0
  291. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_sim_line_should_spawn_fast_optimized_cfg +0 -0
  292. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_sim_line_should_spawn_standard_nodes +0 -0
  293. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_sim_line_should_spawn_standard_optimized_cfg +0 -0
  294. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_sim_line_spawn_order_cfg +0 -0
  295. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_sim_line_spawn_order_fast_nodes +0 -0
  296. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_sim_line_spawn_order_fast_optimized_cfg +0 -0
  297. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_sim_line_spawn_order_standard_nodes +0 -0
  298. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_sim_line_spawn_order_standard_optimized_cfg +0 -0
  299. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_sim_line_update_parallel_cfg +0 -0
  300. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_sim_line_update_parallel_fast_nodes +0 -0
  301. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_sim_line_update_parallel_fast_optimized_cfg +0 -0
  302. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_sim_line_update_parallel_standard_nodes +0 -0
  303. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_sim_line_update_parallel_standard_optimized_cfg +0 -0
  304. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_stage_preprocess_cfg +0 -0
  305. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_stage_preprocess_fast_nodes +0 -0
  306. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_stage_preprocess_fast_optimized_cfg +0 -0
  307. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_stage_preprocess_standard_nodes +0 -0
  308. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_stage_preprocess_standard_optimized_cfg +0 -0
  309. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_stage_should_spawn_cfg +0 -0
  310. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_stage_should_spawn_fast_nodes +0 -0
  311. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_stage_should_spawn_fast_optimized_cfg +0 -0
  312. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_stage_should_spawn_standard_nodes +0 -0
  313. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_stage_should_spawn_standard_optimized_cfg +0 -0
  314. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_stage_spawn_order_cfg +0 -0
  315. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_stage_spawn_order_fast_nodes +0 -0
  316. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_stage_spawn_order_fast_optimized_cfg +0 -0
  317. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_stage_spawn_order_standard_nodes +0 -0
  318. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_stage_spawn_order_standard_optimized_cfg +0 -0
  319. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_stage_touch_cfg +0 -0
  320. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_stage_touch_fast_nodes +0 -0
  321. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_stage_touch_fast_optimized_cfg +0 -0
  322. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_stage_touch_standard_nodes +0 -0
  323. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_stage_touch_standard_optimized_cfg +0 -0
  324. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_stage_update_parallel_cfg +0 -0
  325. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_stage_update_parallel_fast_nodes +0 -0
  326. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_stage_update_parallel_fast_optimized_cfg +0 -0
  327. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_stage_update_parallel_standard_nodes +0 -0
  328. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_stage_update_parallel_standard_optimized_cfg +0 -0
  329. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_stage_update_sequential_cfg +0 -0
  330. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_stage_update_sequential_fast_nodes +0 -0
  331. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_stage_update_sequential_fast_optimized_cfg +0 -0
  332. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_stage_update_sequential_standard_nodes +0 -0
  333. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_stage_update_sequential_standard_optimized_cfg +0 -0
  334. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_unscored_note_initialize_cfg +0 -0
  335. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_unscored_note_initialize_fast_nodes +0 -0
  336. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_unscored_note_initialize_fast_optimized_cfg +0 -0
  337. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_unscored_note_initialize_standard_nodes +0 -0
  338. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_unscored_note_initialize_standard_optimized_cfg +0 -0
  339. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_unscored_note_preprocess_cfg +0 -0
  340. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_unscored_note_preprocess_fast_nodes +0 -0
  341. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_unscored_note_preprocess_fast_optimized_cfg +0 -0
  342. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_unscored_note_preprocess_standard_nodes +0 -0
  343. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_unscored_note_preprocess_standard_optimized_cfg +0 -0
  344. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_unscored_note_should_spawn_cfg +0 -0
  345. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_unscored_note_should_spawn_fast_nodes +0 -0
  346. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_unscored_note_should_spawn_fast_optimized_cfg +0 -0
  347. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_unscored_note_should_spawn_standard_nodes +0 -0
  348. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_unscored_note_should_spawn_standard_optimized_cfg +0 -0
  349. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_unscored_note_spawn_order_cfg +0 -0
  350. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_unscored_note_spawn_order_fast_nodes +0 -0
  351. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_unscored_note_spawn_order_fast_optimized_cfg +0 -0
  352. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_unscored_note_spawn_order_standard_nodes +0 -0
  353. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_unscored_note_spawn_order_standard_optimized_cfg +0 -0
  354. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_unscored_note_terminate_cfg +0 -0
  355. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_unscored_note_terminate_fast_nodes +0 -0
  356. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_unscored_note_terminate_fast_optimized_cfg +0 -0
  357. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_unscored_note_terminate_standard_nodes +0 -0
  358. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_unscored_note_terminate_standard_optimized_cfg +0 -0
  359. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_unscored_note_touch_cfg +0 -0
  360. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_unscored_note_touch_fast_nodes +0 -0
  361. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_unscored_note_touch_fast_optimized_cfg +0 -0
  362. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_unscored_note_touch_standard_nodes +0 -0
  363. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_unscored_note_touch_standard_optimized_cfg +0 -0
  364. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_unscored_note_update_parallel_cfg +0 -0
  365. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_unscored_note_update_parallel_fast_nodes +0 -0
  366. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_unscored_note_update_parallel_fast_optimized_cfg +0 -0
  367. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_unscored_note_update_parallel_standard_nodes +0 -0
  368. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_unscored_note_update_parallel_standard_optimized_cfg +0 -0
  369. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_unscored_note_update_sequential_cfg +0 -0
  370. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_unscored_note_update_sequential_fast_nodes +0 -0
  371. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_unscored_note_update_sequential_fast_optimized_cfg +0 -0
  372. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_unscored_note_update_sequential_standard_nodes +0 -0
  373. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_play_unscored_note_update_sequential_standard_optimized_cfg +0 -0
  374. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_preview_preview_bpm_change_preprocess_cfg +0 -0
  375. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_preview_preview_bpm_change_preprocess_fast_nodes +0 -0
  376. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_preview_preview_bpm_change_preprocess_fast_optimized_cfg +0 -0
  377. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_preview_preview_bpm_change_preprocess_standard_nodes +0 -0
  378. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_preview_preview_bpm_change_preprocess_standard_optimized_cfg +0 -0
  379. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_preview_preview_bpm_change_render_cfg +0 -0
  380. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_preview_preview_bpm_change_render_fast_nodes +0 -0
  381. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_preview_preview_bpm_change_render_fast_optimized_cfg +0 -0
  382. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_preview_preview_bpm_change_render_standard_nodes +0 -0
  383. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_preview_preview_bpm_change_render_standard_optimized_cfg +0 -0
  384. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_preview_preview_hold_connector_render_cfg +0 -0
  385. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_preview_preview_hold_connector_render_fast_nodes +0 -0
  386. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_preview_preview_hold_connector_render_fast_optimized_cfg +0 -0
  387. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_preview_preview_hold_connector_render_standard_nodes +0 -0
  388. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_preview_preview_hold_connector_render_standard_optimized_cfg +0 -0
  389. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_preview_preview_note_preprocess_cfg +0 -0
  390. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_preview_preview_note_preprocess_fast_nodes +0 -0
  391. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_preview_preview_note_preprocess_fast_optimized_cfg +0 -0
  392. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_preview_preview_note_preprocess_standard_nodes +0 -0
  393. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_preview_preview_note_preprocess_standard_optimized_cfg +0 -0
  394. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_preview_preview_note_render_cfg +0 -0
  395. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_preview_preview_note_render_fast_nodes +0 -0
  396. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_preview_preview_note_render_fast_optimized_cfg +0 -0
  397. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_preview_preview_note_render_standard_nodes +0 -0
  398. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_preview_preview_note_render_standard_optimized_cfg +0 -0
  399. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_preview_preview_sim_line_render_cfg +0 -0
  400. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_preview_preview_sim_line_render_fast_nodes +0 -0
  401. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_preview_preview_sim_line_render_fast_optimized_cfg +0 -0
  402. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_preview_preview_sim_line_render_standard_nodes +0 -0
  403. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_preview_preview_sim_line_render_standard_optimized_cfg +0 -0
  404. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_preview_preview_stage_preprocess_cfg +0 -0
  405. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_preview_preview_stage_preprocess_fast_nodes +0 -0
  406. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_preview_preview_stage_preprocess_fast_optimized_cfg +0 -0
  407. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_preview_preview_stage_preprocess_standard_nodes +0 -0
  408. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_preview_preview_stage_preprocess_standard_optimized_cfg +0 -0
  409. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_preview_preview_stage_render_cfg +0 -0
  410. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_preview_preview_stage_render_fast_nodes +0 -0
  411. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_preview_preview_stage_render_fast_optimized_cfg +0 -0
  412. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_preview_preview_stage_render_standard_nodes +0 -0
  413. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_preview_preview_stage_render_standard_optimized_cfg +0 -0
  414. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_preview_preview_timescale_change_preprocess_cfg +0 -0
  415. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_preview_preview_timescale_change_preprocess_fast_nodes +0 -0
  416. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_preview_preview_timescale_change_preprocess_fast_optimized_cfg +0 -0
  417. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_preview_preview_timescale_change_preprocess_standard_nodes +0 -0
  418. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_preview_preview_timescale_change_preprocess_standard_optimized_cfg +0 -0
  419. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_preview_preview_timescale_change_render_cfg +0 -0
  420. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_preview_preview_timescale_change_render_fast_nodes +0 -0
  421. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_preview_preview_timescale_change_render_fast_optimized_cfg +0 -0
  422. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_preview_preview_timescale_change_render_standard_nodes +0 -0
  423. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_preview_preview_timescale_change_render_standard_optimized_cfg +0 -0
  424. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_preview_preview_unscored_note_preprocess_cfg +0 -0
  425. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_preview_preview_unscored_note_preprocess_fast_nodes +0 -0
  426. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_preview_preview_unscored_note_preprocess_fast_optimized_cfg +0 -0
  427. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_preview_preview_unscored_note_preprocess_standard_nodes +0 -0
  428. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_preview_preview_unscored_note_preprocess_standard_optimized_cfg +0 -0
  429. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_preview_preview_unscored_note_render_cfg +0 -0
  430. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_preview_preview_unscored_note_render_fast_nodes +0 -0
  431. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_preview_preview_unscored_note_render_fast_optimized_cfg +0 -0
  432. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_preview_preview_unscored_note_render_standard_nodes +0 -0
  433. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_preview_preview_unscored_note_render_standard_optimized_cfg +0 -0
  434. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_tutorial_global_navigate_fast_cfg +0 -0
  435. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_tutorial_global_navigate_fast_nodes +0 -0
  436. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_tutorial_global_navigate_fast_optimized_cfg +0 -0
  437. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_tutorial_global_navigate_standard_cfg +0 -0
  438. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_tutorial_global_navigate_standard_nodes +0 -0
  439. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_tutorial_global_navigate_standard_optimized_cfg +0 -0
  440. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_tutorial_global_preprocess_fast_cfg +0 -0
  441. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_tutorial_global_preprocess_fast_nodes +0 -0
  442. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_tutorial_global_preprocess_fast_optimized_cfg +0 -0
  443. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_tutorial_global_preprocess_standard_cfg +0 -0
  444. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_tutorial_global_preprocess_standard_nodes +0 -0
  445. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_tutorial_global_preprocess_standard_optimized_cfg +0 -0
  446. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_tutorial_global_update_fast_cfg +0 -0
  447. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_tutorial_global_update_fast_nodes +0 -0
  448. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_tutorial_global_update_fast_optimized_cfg +0 -0
  449. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_tutorial_global_update_standard_cfg +0 -0
  450. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_tutorial_global_update_standard_nodes +0 -0
  451. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_tutorial_global_update_standard_optimized_cfg +0 -0
  452. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_global_update_spawn_fast_cfg +0 -0
  453. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_global_update_spawn_fast_nodes +0 -0
  454. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_global_update_spawn_fast_optimized_cfg +0 -0
  455. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_global_update_spawn_standard_cfg +0 -0
  456. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_global_update_spawn_standard_nodes +0 -0
  457. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_global_update_spawn_standard_optimized_cfg +0 -0
  458. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_hold_connector_despawn_time_cfg +0 -0
  459. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_hold_connector_despawn_time_fast_nodes +0 -0
  460. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_hold_connector_despawn_time_fast_optimized_cfg +0 -0
  461. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_hold_connector_despawn_time_standard_nodes +0 -0
  462. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_hold_connector_despawn_time_standard_optimized_cfg +0 -0
  463. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_hold_connector_spawn_time_cfg +0 -0
  464. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_hold_connector_spawn_time_fast_nodes +0 -0
  465. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_hold_connector_spawn_time_fast_optimized_cfg +0 -0
  466. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_hold_connector_spawn_time_standard_nodes +0 -0
  467. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_hold_connector_spawn_time_standard_optimized_cfg +0 -0
  468. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_hold_connector_update_parallel_cfg +0 -0
  469. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_hold_connector_update_parallel_fast_nodes +0 -0
  470. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_hold_connector_update_parallel_fast_optimized_cfg +0 -0
  471. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_hold_connector_update_parallel_standard_nodes +0 -0
  472. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_hold_connector_update_parallel_standard_optimized_cfg +0 -0
  473. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_hold_connector_update_sequential_cfg +0 -0
  474. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_hold_connector_update_sequential_fast_nodes +0 -0
  475. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_hold_connector_update_sequential_fast_optimized_cfg +0 -0
  476. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_hold_connector_update_sequential_standard_nodes +0 -0
  477. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_hold_connector_update_sequential_standard_optimized_cfg +0 -0
  478. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_hold_manager_despawn_time_cfg +0 -0
  479. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_hold_manager_despawn_time_fast_nodes +0 -0
  480. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_hold_manager_despawn_time_fast_optimized_cfg +0 -0
  481. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_hold_manager_despawn_time_standard_nodes +0 -0
  482. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_hold_manager_despawn_time_standard_optimized_cfg +0 -0
  483. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_hold_manager_spawn_time_cfg +0 -0
  484. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_hold_manager_spawn_time_fast_nodes +0 -0
  485. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_hold_manager_spawn_time_fast_optimized_cfg +0 -0
  486. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_hold_manager_spawn_time_standard_nodes +0 -0
  487. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_hold_manager_spawn_time_standard_optimized_cfg +0 -0
  488. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_hold_manager_terminate_cfg +0 -0
  489. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_hold_manager_terminate_fast_nodes +0 -0
  490. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_hold_manager_terminate_fast_optimized_cfg +0 -0
  491. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_hold_manager_terminate_standard_nodes +0 -0
  492. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_hold_manager_terminate_standard_optimized_cfg +0 -0
  493. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_hold_manager_update_parallel_cfg +0 -0
  494. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_hold_manager_update_parallel_fast_nodes +0 -0
  495. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_hold_manager_update_parallel_fast_optimized_cfg +0 -0
  496. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_hold_manager_update_parallel_standard_nodes +0 -0
  497. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_hold_manager_update_parallel_standard_optimized_cfg +0 -0
  498. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_note_despawn_time_cfg +0 -0
  499. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_note_despawn_time_fast_nodes +0 -0
  500. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_note_despawn_time_fast_optimized_cfg +0 -0
  501. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_note_despawn_time_standard_nodes +0 -0
  502. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_note_despawn_time_standard_optimized_cfg +0 -0
  503. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_note_preprocess_cfg +0 -0
  504. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_note_preprocess_fast_nodes +0 -0
  505. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_note_preprocess_fast_optimized_cfg +0 -0
  506. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_note_preprocess_standard_nodes +0 -0
  507. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_note_preprocess_standard_optimized_cfg +0 -0
  508. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_note_spawn_time_cfg +0 -0
  509. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_note_spawn_time_fast_nodes +0 -0
  510. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_note_spawn_time_fast_optimized_cfg +0 -0
  511. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_note_spawn_time_standard_nodes +0 -0
  512. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_note_spawn_time_standard_optimized_cfg +0 -0
  513. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_note_terminate_cfg +0 -0
  514. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_note_terminate_fast_nodes +0 -0
  515. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_note_terminate_fast_optimized_cfg +0 -0
  516. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_note_terminate_standard_nodes +0 -0
  517. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_note_terminate_standard_optimized_cfg +0 -0
  518. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_note_update_parallel_cfg +0 -0
  519. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_note_update_parallel_fast_nodes +0 -0
  520. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_note_update_parallel_fast_optimized_cfg +0 -0
  521. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_note_update_parallel_standard_nodes +0 -0
  522. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_note_update_parallel_standard_optimized_cfg +0 -0
  523. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_scheduled_lane_effect_despawn_time_cfg +0 -0
  524. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_scheduled_lane_effect_despawn_time_fast_nodes +0 -0
  525. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_scheduled_lane_effect_despawn_time_fast_optimized_cfg +0 -0
  526. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_scheduled_lane_effect_despawn_time_standard_nodes +0 -0
  527. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_scheduled_lane_effect_despawn_time_standard_optimized_cfg +0 -0
  528. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_scheduled_lane_effect_spawn_time_cfg +0 -0
  529. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_scheduled_lane_effect_spawn_time_fast_nodes +0 -0
  530. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_scheduled_lane_effect_spawn_time_fast_optimized_cfg +0 -0
  531. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_scheduled_lane_effect_spawn_time_standard_nodes +0 -0
  532. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_scheduled_lane_effect_spawn_time_standard_optimized_cfg +0 -0
  533. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_scheduled_lane_effect_update_parallel_cfg +0 -0
  534. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_scheduled_lane_effect_update_parallel_fast_nodes +0 -0
  535. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_scheduled_lane_effect_update_parallel_fast_optimized_cfg +0 -0
  536. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_scheduled_lane_effect_update_parallel_standard_nodes +0 -0
  537. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_scheduled_lane_effect_update_parallel_standard_optimized_cfg +0 -0
  538. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_sim_line_despawn_time_cfg +0 -0
  539. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_sim_line_despawn_time_fast_nodes +0 -0
  540. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_sim_line_despawn_time_fast_optimized_cfg +0 -0
  541. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_sim_line_despawn_time_standard_nodes +0 -0
  542. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_sim_line_despawn_time_standard_optimized_cfg +0 -0
  543. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_sim_line_spawn_time_cfg +0 -0
  544. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_sim_line_spawn_time_fast_nodes +0 -0
  545. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_sim_line_spawn_time_fast_optimized_cfg +0 -0
  546. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_sim_line_spawn_time_standard_nodes +0 -0
  547. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_sim_line_spawn_time_standard_optimized_cfg +0 -0
  548. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_sim_line_update_parallel_cfg +0 -0
  549. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_sim_line_update_parallel_fast_nodes +0 -0
  550. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_sim_line_update_parallel_fast_optimized_cfg +0 -0
  551. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_sim_line_update_parallel_standard_nodes +0 -0
  552. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_sim_line_update_parallel_standard_optimized_cfg +0 -0
  553. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_stage_despawn_time_cfg +0 -0
  554. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_stage_despawn_time_fast_nodes +0 -0
  555. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_stage_despawn_time_fast_optimized_cfg +0 -0
  556. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_stage_despawn_time_standard_nodes +0 -0
  557. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_stage_despawn_time_standard_optimized_cfg +0 -0
  558. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_stage_preprocess_cfg +0 -0
  559. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_stage_preprocess_fast_nodes +0 -0
  560. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_stage_preprocess_fast_optimized_cfg +0 -0
  561. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_stage_preprocess_standard_nodes +0 -0
  562. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_stage_preprocess_standard_optimized_cfg +0 -0
  563. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_stage_spawn_time_cfg +0 -0
  564. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_stage_spawn_time_fast_nodes +0 -0
  565. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_stage_spawn_time_fast_optimized_cfg +0 -0
  566. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_stage_spawn_time_standard_nodes +0 -0
  567. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_stage_spawn_time_standard_optimized_cfg +0 -0
  568. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_stage_update_parallel_cfg +0 -0
  569. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_stage_update_parallel_fast_nodes +0 -0
  570. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_stage_update_parallel_fast_optimized_cfg +0 -0
  571. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_stage_update_parallel_standard_nodes +0 -0
  572. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_stage_update_parallel_standard_optimized_cfg +0 -0
  573. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_unscored_note_despawn_time_cfg +0 -0
  574. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_unscored_note_despawn_time_fast_nodes +0 -0
  575. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_unscored_note_despawn_time_fast_optimized_cfg +0 -0
  576. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_unscored_note_despawn_time_standard_nodes +0 -0
  577. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_unscored_note_despawn_time_standard_optimized_cfg +0 -0
  578. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_unscored_note_preprocess_cfg +0 -0
  579. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_unscored_note_preprocess_fast_nodes +0 -0
  580. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_unscored_note_preprocess_fast_optimized_cfg +0 -0
  581. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_unscored_note_preprocess_standard_nodes +0 -0
  582. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_unscored_note_preprocess_standard_optimized_cfg +0 -0
  583. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_unscored_note_spawn_time_cfg +0 -0
  584. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_unscored_note_spawn_time_fast_nodes +0 -0
  585. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_unscored_note_spawn_time_fast_optimized_cfg +0 -0
  586. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_unscored_note_spawn_time_standard_nodes +0 -0
  587. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_unscored_note_spawn_time_standard_optimized_cfg +0 -0
  588. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_unscored_note_terminate_cfg +0 -0
  589. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_unscored_note_terminate_fast_nodes +0 -0
  590. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_unscored_note_terminate_fast_optimized_cfg +0 -0
  591. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_unscored_note_terminate_standard_nodes +0 -0
  592. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_unscored_note_terminate_standard_optimized_cfg +0 -0
  593. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_unscored_note_update_parallel_cfg +0 -0
  594. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_unscored_note_update_parallel_fast_nodes +0 -0
  595. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_unscored_note_update_parallel_fast_optimized_cfg +0 -0
  596. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_unscored_note_update_parallel_standard_nodes +0 -0
  597. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/data/pydori_watch_watch_unscored_note_update_parallel_standard_optimized_cfg +0 -0
  598. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/regressions/test_project.py +0 -0
  599. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/script/__init__.py +0 -0
  600. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/script/conftest.py +0 -0
  601. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/script/test_array.py +0 -0
  602. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/script/test_array_map.py +0 -0
  603. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/script/test_array_set.py +0 -0
  604. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/script/test_assert.py +0 -0
  605. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/script/test_dict.py +0 -0
  606. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/script/test_flow.py +0 -0
  607. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/script/test_functions.py +0 -0
  608. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/script/test_generator.py +0 -0
  609. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/script/test_genexpr.py +0 -0
  610. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/script/test_helpers.py +0 -0
  611. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/script/test_interval.py +0 -0
  612. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/script/test_match.py +0 -0
  613. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/script/test_maybe.py +0 -0
  614. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/script/test_num.py +0 -0
  615. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/script/test_operator.py +0 -0
  616. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/script/test_quad.py +0 -0
  617. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/script/test_random.py +0 -0
  618. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/script/test_range.py +0 -0
  619. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/script/test_record.py +0 -0
  620. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/script/test_super.py +0 -0
  621. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/script/test_transform.py +0 -0
  622. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/script/test_tuple.py +0 -0
  623. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/script/test_values.py +0 -0
  624. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/script/test_var_array.py +0 -0
  625. {sonolus_py-0.5.0 → sonolus_py-0.5.2}/tests/script/test_vec.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sonolus.py
3
- Version: 0.5.0
3
+ Version: 0.5.2
4
4
  Summary: Sonolus engine development in Python
5
5
  License-File: LICENSE
6
6
  Requires-Python: >=3.12
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "sonolus.py"
3
- version = "0.5.0"
3
+ version = "0.5.2"
4
4
  description = "Sonolus engine development in Python"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.12"
@@ -1126,8 +1126,6 @@ class Visitor(ast.NodeVisitor):
1126
1126
  if first_param_name is not None:
1127
1127
  first_param_value = self.get_name(first_param_name)
1128
1128
  args = (validate_value(class_value), validate_value(first_param_value))
1129
- else:
1130
- args = (validate_value(class_value),)
1131
1129
  return self.handle_call(node, fn, *args, **kwargs)
1132
1130
 
1133
1131
  def visit_FormattedValue(self, node):
@@ -74,10 +74,12 @@ def compile_mode(
74
74
  return cb_info.name, node_index
75
75
 
76
76
  all_futures = {}
77
- archetype_entries = []
77
+ base_archetype_entries = {}
78
78
 
79
79
  if archetypes is not None:
80
- for archetype in archetypes:
80
+ base_archetypes = {getattr(a, "_derived_base_", a) for a in archetypes}
81
+
82
+ for archetype in base_archetypes:
81
83
  archetype._init_fields()
82
84
 
83
85
  archetype_data = {
@@ -109,7 +111,7 @@ def compile_mode(
109
111
  cb_name, result_data = process_callback(cb_info, cb, archetype)
110
112
  archetype_data[cb_name] = result_data
111
113
 
112
- archetype_entries.append(archetype_data)
114
+ base_archetype_entries[archetype] = archetype_data
113
115
 
114
116
  if global_callbacks is not None and thread_pool is not None:
115
117
  for cb_info, cb in global_callbacks:
@@ -129,7 +131,10 @@ def compile_mode(
129
131
  results[cb_name] = node_index
130
132
 
131
133
  if archetypes is not None:
132
- results["archetypes"] = archetype_entries
134
+ results["archetypes"] = [
135
+ {**base_archetype_entries[getattr(a, "_derived_base_", a)], "name": a.name, "hasInput": a.is_scored}
136
+ for a in archetypes
137
+ ]
133
138
 
134
139
  results["nodes"] = nodes.get()
135
140
  return results
@@ -183,6 +183,68 @@ class _ArchetypeField(SonolusDescriptor):
183
183
  target._copy_from_(value)
184
184
 
185
185
 
186
+ class _NameDescriptor(SonolusDescriptor):
187
+ def __init__(self, name: str):
188
+ self.name = name
189
+
190
+ def __get__(self, instance, owner):
191
+ if instance is None:
192
+ return self.name
193
+ elif ctx():
194
+ raise RuntimeError("Cannot access archetype name in from self in a callback, use ArchetypeClass.name")
195
+ else:
196
+ return self.name
197
+
198
+ def __set__(self, instance, value):
199
+ raise AttributeError("Archetype name is read-only and cannot be set")
200
+
201
+
202
+ class _IsScoredDescriptor(SonolusDescriptor):
203
+ def __init__(self, value: bool):
204
+ self.value = value
205
+
206
+ def __get__(self, instance, owner):
207
+ if instance is None:
208
+ return self.value
209
+ elif ctx():
210
+ raise RuntimeError("Cannot access is_scored from self in a callback, use ArchetypeClass.is_scored")
211
+ else:
212
+ return self.value
213
+
214
+ def __set__(self, instance, value):
215
+ raise AttributeError("is_scored is read-only and cannot be set")
216
+
217
+
218
+ class _IdDescriptor(SonolusDescriptor):
219
+ def __get__(self, instance, owner):
220
+ if not ctx():
221
+ raise RuntimeError("Archetype id is only available during compilation")
222
+ if instance is None:
223
+ result = ctx().global_state.archetypes.get(owner)
224
+ if result is None:
225
+ raise RuntimeError("Archetype is not registered")
226
+ return result
227
+ else:
228
+ return instance._info.archetype_id
229
+
230
+ def __set__(self, instance, value):
231
+ raise AttributeError("Archetype id is read-only and cannot be set")
232
+
233
+
234
+ class _KeyDescriptor(SonolusDescriptor):
235
+ def __init__(self, value: int | float):
236
+ self.value = value
237
+
238
+ def __get__(self, instance, owner):
239
+ if instance is not None and ctx():
240
+ return ctx().global_state.keys[instance.id]
241
+ else:
242
+ return self.value
243
+
244
+ def __set__(self, instance, value):
245
+ raise AttributeError("Archetype key is read-only and cannot be set")
246
+
247
+
186
248
  def imported(*, name: str | None = None) -> Any:
187
249
  """Declare a field as imported.
188
250
 
@@ -387,6 +449,28 @@ class _BaseArchetype:
387
449
 
388
450
  _data_: _ArchetypeData
389
451
 
452
+ id: int = 0
453
+ """The id of the archetype or entity.
454
+
455
+ If accessed on an entity, always returns the runtime archetype id of the entity, even if it doesn't match the type
456
+ that was used to access it.
457
+
458
+ E.g. if an entity of archetype `A` is accessed via [`EntityRef[B]`][sonolus.script.archetype.EntityRef], the id will
459
+ still be the id of `A`.
460
+ """
461
+
462
+ key: int | float = -1
463
+ """An optional key for the archetype.
464
+
465
+ May be useful to identify an archetype in an inheritance hierarchy without needing to check id.
466
+
467
+ If accessed on an entity, always returns the runtime key of the entity, even if it doesn't match the type
468
+ that was used to access it.
469
+
470
+ E.g. if an entity of archetype `A` is accessed via [`EntityRef[B]`][sonolus.script.archetype.EntityRef], the key
471
+ will still be the key of `A`.
472
+ """
473
+
390
474
  name: ClassVar[str | None] = None
391
475
  """The name of the archetype.
392
476
 
@@ -433,17 +517,7 @@ class _BaseArchetype:
433
517
  def is_at(cls, index: int) -> bool:
434
518
  if not ctx():
435
519
  raise RuntimeError("is_at is only available during compilation")
436
- return entity_info_at(index).archetype_id == cls.id()
437
-
438
- @classmethod
439
- @meta_fn
440
- def id(cls) -> int:
441
- if not ctx():
442
- raise RuntimeError("Archetype id is only available during compilation")
443
- result = ctx().global_state.archetypes.get(cls)
444
- if result is None:
445
- raise RuntimeError("Archetype is not registered")
446
- return result
520
+ return entity_info_at(index).archetype_id == cls.id
447
521
 
448
522
  @classmethod
449
523
  @meta_fn
@@ -465,7 +539,7 @@ class _BaseArchetype:
465
539
  cls._init_fields()
466
540
  if not ctx():
467
541
  raise RuntimeError("Spawn is only allowed within a callback")
468
- archetype_id = cls.id()
542
+ archetype_id = cls.id
469
543
  bound = cls._spawn_signature_.bind_partial(**kwargs)
470
544
  bound.apply_defaults()
471
545
  data = []
@@ -497,7 +571,7 @@ class _BaseArchetype:
497
571
  return entries
498
572
 
499
573
  def __init_subclass__(cls, **kwargs):
500
- if cls.__module__ == _BaseArchetype.__module__:
574
+ if cls.__module__ == _BaseArchetype.__module__ and not getattr(cls, "_is_derived_", False):
501
575
  if cls._supported_callbacks_ is None:
502
576
  raise TypeError("Cannot directly subclass Archetype, use the Archetype subclass for your mode")
503
577
  cls._default_callbacks_ = {getattr(cls, cb_info.py_name) for cb_info in cls._supported_callbacks_.values()}
@@ -511,6 +585,11 @@ class _BaseArchetype:
511
585
  continue
512
586
  cls._callbacks_.append(cb)
513
587
  cls._field_init_done = False
588
+ cls.id = _IdDescriptor()
589
+ cls._key_ = cls.key
590
+ cls.key = _KeyDescriptor(cls.key)
591
+ cls.name = _NameDescriptor(cls.name)
592
+ cls.is_scored = _IsScoredDescriptor(cls.is_scored)
514
593
 
515
594
  @classmethod
516
595
  def _init_fields(cls):
@@ -521,7 +600,19 @@ class _BaseArchetype:
521
600
  if hasattr(mro_entry, "_field_init_done"):
522
601
  mro_entry._init_fields()
523
602
  field_specifiers = get_field_specifiers(
524
- cls, skip={"name", "is_scored", "_callbacks_", "_field_init_done"}
603
+ cls,
604
+ skip={
605
+ "id",
606
+ "key",
607
+ "name",
608
+ "is_scored",
609
+ "_key_",
610
+ "_derived_base_",
611
+ "_is_derived_",
612
+ "_default_callbacks_",
613
+ "_callbacks_",
614
+ "_field_init_done",
615
+ },
525
616
  ).items()
526
617
  if not hasattr(cls, "_imported_fields_"):
527
618
  cls._imported_fields_ = {}
@@ -656,6 +747,41 @@ class _BaseArchetype:
656
747
  def _post_init_fields(cls):
657
748
  pass
658
749
 
750
+ @classmethod
751
+ def derive[T](cls: type[T], name: str, is_scored: bool, key: int | float | None = None) -> type[T]:
752
+ """Derive a new archetype class from this archetype.
753
+
754
+ Roughly equivalent to returning:
755
+ ```python
756
+ class Derived(cls):
757
+ name = <name>
758
+ is_scored = <is_scored>
759
+ key = <key> # Only set if key is not None
760
+ ```
761
+
762
+ This is used to create a new archetype with the same fields and callbacks, but with a different name and
763
+ whether it is scored. Compared to manually subclassing, this method also enables faster compilation when
764
+ the same base archetype has multiple derived archetypes by compiling callbacks only once for the base archetype.
765
+
766
+ Args:
767
+ name: The name of the new archetype.
768
+ is_scored: Whether the new archetype is scored.
769
+ key: A key that can be accessed via the `key` property of the new archetype.
770
+
771
+ Returns:
772
+ A new archetype class with the same fields and callbacks as this archetype, but with the given name and
773
+ whether it is scored.
774
+ """
775
+ if getattr(cls, "_is_derived_", False):
776
+ raise RuntimeError("Cannot derive from a derived archetype")
777
+ cls_dict = {"name": name, "is_scored": is_scored, "_is_derived_": True, "_derived_base_": cls}
778
+ if key is not None:
779
+ if not isinstance(key, (int, float)):
780
+ raise TypeError(f"Key must be an int or float, got {type(key)}")
781
+ cls_dict["key"] = key
782
+ new_cls = type(name, (cls,), cls_dict)
783
+ return new_cls
784
+
659
785
 
660
786
  class PlayArchetype(_BaseArchetype):
661
787
  """Base class for play mode archetypes.
@@ -807,7 +933,7 @@ class PlayArchetype(_BaseArchetype):
807
933
  raise RuntimeError("Calling life is only allowed within a callback")
808
934
  match self._data_:
809
935
  case _ArchetypeSelfData() | _ArchetypeReferenceData():
810
- return _deref(ctx().blocks.ArchetypeLife, self.id() * ArchetypeLife._size_(), ArchetypeLife)
936
+ return _deref(ctx().blocks.ArchetypeLife, self.id * ArchetypeLife._size_(), ArchetypeLife)
811
937
  case _:
812
938
  raise RuntimeError("Life is not available in level data")
813
939
 
@@ -826,6 +952,26 @@ class PlayArchetype(_BaseArchetype):
826
952
  case _:
827
953
  raise RuntimeError("Result is only accessible from the entity itself")
828
954
 
955
+ @classmethod
956
+ def update_life(
957
+ cls,
958
+ perfect_increment: int | None = None,
959
+ great_increment: int | None = None,
960
+ good_increment: int | None = None,
961
+ miss_increment: int | None = None,
962
+ ):
963
+ """Update the life of this archetype.
964
+
965
+ Values default to 0.
966
+
967
+ Args:
968
+ perfect_increment: The increment for perfect life.
969
+ great_increment: The increment for great life.
970
+ good_increment: The increment for good life.
971
+ miss_increment: The increment for miss life.
972
+ """
973
+ archetype_life_of(cls).update(perfect_increment, great_increment, good_increment, miss_increment)
974
+
829
975
 
830
976
  class WatchArchetype(_BaseArchetype):
831
977
  """Base class for watch mode archetypes.
@@ -920,7 +1066,7 @@ class WatchArchetype(_BaseArchetype):
920
1066
  raise RuntimeError("Calling life is only allowed within a callback")
921
1067
  match self._data_:
922
1068
  case _ArchetypeSelfData() | _ArchetypeReferenceData():
923
- return _deref(ctx().blocks.ArchetypeLife, self.id() * ArchetypeLife._size_(), ArchetypeLife)
1069
+ return _deref(ctx().blocks.ArchetypeLife, self.id * ArchetypeLife._size_(), ArchetypeLife)
924
1070
  case _:
925
1071
  raise RuntimeError("Life is not available in level data")
926
1072
 
@@ -944,6 +1090,26 @@ class WatchArchetype(_BaseArchetype):
944
1090
  if cls._exported_fields_:
945
1091
  raise RuntimeError("Watch archetypes cannot have exported fields")
946
1092
 
1093
+ @classmethod
1094
+ def update_life(
1095
+ cls,
1096
+ perfect_increment: int | None = None,
1097
+ great_increment: int | None = None,
1098
+ good_increment: int | None = None,
1099
+ miss_increment: int | None = None,
1100
+ ):
1101
+ """Update the life of this archetype.
1102
+
1103
+ Values default to 0.
1104
+
1105
+ Args:
1106
+ perfect_increment: The increment for perfect life.
1107
+ great_increment: The increment for great life.
1108
+ good_increment: The increment for good life.
1109
+ miss_increment: The increment for miss life.
1110
+ """
1111
+ archetype_life_of(cls).update(perfect_increment, great_increment, good_increment, miss_increment)
1112
+
947
1113
 
948
1114
  class PreviewArchetype(_BaseArchetype):
949
1115
  """Base class for preview mode archetypes.
@@ -1032,7 +1198,7 @@ def archetype_life_of(archetype: type[_BaseArchetype] | _BaseArchetype) -> Arche
1032
1198
  raise RuntimeError("Calling archetype_life_of is only allowed within a callback")
1033
1199
  match ctx().global_state.mode:
1034
1200
  case Mode.PLAY | Mode.WATCH:
1035
- return _deref(ctx().blocks.ArchetypeLife, archetype.id() * ArchetypeLife._size_(), ArchetypeLife)
1201
+ return _deref(ctx().blocks.ArchetypeLife, archetype.id * ArchetypeLife._size_(), ArchetypeLife)
1036
1202
  case _:
1037
1203
  raise RuntimeError(f"Archetype life is not available in mode '{ctx().global_state.mode}'")
1038
1204
 
@@ -1184,3 +1350,7 @@ class StandardArchetypeName(StrEnum):
1184
1350
 
1185
1351
  TIMESCALE_CHANGE = "#TIMESCALE_CHANGE"
1186
1352
  """Timescale change marker"""
1353
+
1354
+
1355
+ type AnyArchetype = PlayArchetype | WatchArchetype | PreviewArchetype
1356
+ """Union of all archetype types."""
@@ -1,11 +1,11 @@
1
1
  from __future__ import annotations
2
2
 
3
- from collections.abc import Iterable
3
+ from collections.abc import Iterable, Sequence
4
4
  from contextlib import contextmanager
5
5
  from contextvars import ContextVar
6
6
  from dataclasses import dataclass
7
7
  from threading import Lock
8
- from typing import Any, Self
8
+ from typing import Any, Literal, Self
9
9
 
10
10
  from sonolus.backend.blocks import BlockData, PlayBlock
11
11
  from sonolus.backend.ir import IRConst, IRExpr, IRStmt
@@ -41,6 +41,7 @@ debug_var = ContextVar("debug_var", default=_disabled_debug_config)
41
41
 
42
42
  class GlobalContextState:
43
43
  archetypes: dict[type, int]
44
+ keys: Sequence[int] | None
44
45
  rom: ReadOnlyMemory
45
46
  const_mappings: dict[Any, int]
46
47
  environment_mappings: dict[_GlobalInfo, int]
@@ -49,7 +50,14 @@ class GlobalContextState:
49
50
  lock: Lock
50
51
 
51
52
  def __init__(self, mode: Mode, archetypes: dict[type, int] | None = None, rom: ReadOnlyMemory | None = None):
53
+ from sonolus.script.array import Array
54
+
52
55
  self.archetypes = archetypes or {}
56
+ self.keys = (
57
+ Array(*((getattr(a, "_key_", -1)) for a in sorted(self.archetypes, key=lambda a: archetypes[a])))
58
+ if archetypes
59
+ else Array[int, Literal[0]]()
60
+ )
53
61
  self.rom = ReadOnlyMemory() if rom is None else rom
54
62
  self.const_mappings = {}
55
63
  self.environment_mappings = {}
@@ -28,4 +28,7 @@ def get_field_specifiers(
28
28
  and not isinstance(value, property)
29
29
  ):
30
30
  raise ValueError(f"Missing annotation for {cls.__name__}.{key}")
31
+ for skipped_key in skip:
32
+ if skipped_key in results:
33
+ del results[skipped_key]
31
34
  return results
@@ -694,7 +694,7 @@ wheels = [
694
694
 
695
695
  [[package]]
696
696
  name = "sonolus-py"
697
- version = "0.5.0"
697
+ version = "0.5.2"
698
698
  source = { editable = "." }
699
699
 
700
700
  [package.dev-dependencies]
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes