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