sonolus.py 0.3.0__tar.gz → 0.3.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


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

Files changed (174) hide show
  1. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/PKG-INFO +1 -1
  2. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/pyproject.toml +1 -1
  3. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/sonolus/script/num.py +2 -1
  4. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/sonolus/script/stream.py +26 -2
  5. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/uv.lock +1 -1
  6. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/.github/workflows/publish.yaml +0 -0
  7. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/.gitignore +0 -0
  8. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/.python-version +0 -0
  9. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/.run/Python tests in tests.run.xml +0 -0
  10. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/LICENSE +0 -0
  11. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/README.md +0 -0
  12. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/doc_stubs/__init__.py +0 -0
  13. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/doc_stubs/builtins.pyi +0 -0
  14. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/doc_stubs/math.pyi +0 -0
  15. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/doc_stubs/num.pyi +0 -0
  16. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/doc_stubs/random.pyi +0 -0
  17. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/docs/CNAME +0 -0
  18. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/docs/concepts/builtins.md +0 -0
  19. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/docs/concepts/cli.md +0 -0
  20. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/docs/concepts/constructs.md +0 -0
  21. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/docs/concepts/index.md +0 -0
  22. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/docs/concepts/project.md +0 -0
  23. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/docs/concepts/resources.md +0 -0
  24. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/docs/concepts/types.md +0 -0
  25. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/docs/index.md +0 -0
  26. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/docs/reference/builtins.md +0 -0
  27. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/docs/reference/index.md +0 -0
  28. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/docs/reference/math.md +0 -0
  29. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/docs/reference/random.md +0 -0
  30. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/docs/reference/sonolus.script.archetype.md +0 -0
  31. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/docs/reference/sonolus.script.array.md +0 -0
  32. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/docs/reference/sonolus.script.array_like.md +0 -0
  33. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/docs/reference/sonolus.script.bucket.md +0 -0
  34. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/docs/reference/sonolus.script.containers.md +0 -0
  35. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/docs/reference/sonolus.script.debug.md +0 -0
  36. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/docs/reference/sonolus.script.easing.md +0 -0
  37. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/docs/reference/sonolus.script.effect.md +0 -0
  38. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/docs/reference/sonolus.script.engine.md +0 -0
  39. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/docs/reference/sonolus.script.globals.md +0 -0
  40. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/docs/reference/sonolus.script.instruction.md +0 -0
  41. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/docs/reference/sonolus.script.interval.md +0 -0
  42. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/docs/reference/sonolus.script.iterator.md +0 -0
  43. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/docs/reference/sonolus.script.level.md +0 -0
  44. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/docs/reference/sonolus.script.metadata.md +0 -0
  45. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/docs/reference/sonolus.script.num.md +0 -0
  46. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/docs/reference/sonolus.script.options.md +0 -0
  47. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/docs/reference/sonolus.script.particle.md +0 -0
  48. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/docs/reference/sonolus.script.printing.md +0 -0
  49. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/docs/reference/sonolus.script.project.md +0 -0
  50. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/docs/reference/sonolus.script.quad.md +0 -0
  51. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/docs/reference/sonolus.script.record.md +0 -0
  52. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/docs/reference/sonolus.script.runtime.md +0 -0
  53. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/docs/reference/sonolus.script.sprite.md +0 -0
  54. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/docs/reference/sonolus.script.stream.md +0 -0
  55. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/docs/reference/sonolus.script.text.md +0 -0
  56. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/docs/reference/sonolus.script.timing.md +0 -0
  57. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/docs/reference/sonolus.script.transform.md +0 -0
  58. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/docs/reference/sonolus.script.ui.md +0 -0
  59. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/docs/reference/sonolus.script.values.md +0 -0
  60. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/docs/reference/sonolus.script.vec.md +0 -0
  61. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/mkdocs.yml +0 -0
  62. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/scripts/generate.py +0 -0
  63. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/scripts/runtimes/Engine/Tutorial/Blocks.json +0 -0
  64. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/scripts/runtimes/Functions.json +0 -0
  65. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/scripts/runtimes/Level/Play/Blocks.json +0 -0
  66. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/scripts/runtimes/Level/Preview/Blocks.json +0 -0
  67. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/scripts/runtimes/Level/Watch/Blocks.json +0 -0
  68. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/sonolus/__init__.py +0 -0
  69. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/sonolus/backend/__init__.py +0 -0
  70. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/sonolus/backend/blocks.py +0 -0
  71. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/sonolus/backend/excepthook.py +0 -0
  72. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/sonolus/backend/finalize.py +0 -0
  73. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/sonolus/backend/interpret.py +0 -0
  74. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/sonolus/backend/ir.py +0 -0
  75. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/sonolus/backend/mode.py +0 -0
  76. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/sonolus/backend/node.py +0 -0
  77. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/sonolus/backend/ops.py +0 -0
  78. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/sonolus/backend/optimize/__init__.py +0 -0
  79. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/sonolus/backend/optimize/allocate.py +0 -0
  80. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/sonolus/backend/optimize/constant_evaluation.py +0 -0
  81. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/sonolus/backend/optimize/copy_coalesce.py +0 -0
  82. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/sonolus/backend/optimize/dead_code.py +0 -0
  83. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/sonolus/backend/optimize/dominance.py +0 -0
  84. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/sonolus/backend/optimize/flow.py +0 -0
  85. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/sonolus/backend/optimize/inlining.py +0 -0
  86. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/sonolus/backend/optimize/liveness.py +0 -0
  87. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/sonolus/backend/optimize/optimize.py +0 -0
  88. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/sonolus/backend/optimize/passes.py +0 -0
  89. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/sonolus/backend/optimize/simplify.py +0 -0
  90. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/sonolus/backend/optimize/ssa.py +0 -0
  91. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/sonolus/backend/place.py +0 -0
  92. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/sonolus/backend/utils.py +0 -0
  93. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/sonolus/backend/visitor.py +0 -0
  94. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/sonolus/build/__init__.py +0 -0
  95. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/sonolus/build/cli.py +0 -0
  96. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/sonolus/build/collection.py +0 -0
  97. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/sonolus/build/compile.py +0 -0
  98. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/sonolus/build/engine.py +0 -0
  99. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/sonolus/build/level.py +0 -0
  100. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/sonolus/build/node.py +0 -0
  101. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/sonolus/build/project.py +0 -0
  102. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/sonolus/py.typed +0 -0
  103. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/sonolus/script/__init__.py +0 -0
  104. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/sonolus/script/archetype.py +0 -0
  105. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/sonolus/script/array.py +0 -0
  106. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/sonolus/script/array_like.py +0 -0
  107. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/sonolus/script/bucket.py +0 -0
  108. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/sonolus/script/containers.py +0 -0
  109. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/sonolus/script/debug.py +0 -0
  110. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/sonolus/script/easing.py +0 -0
  111. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/sonolus/script/effect.py +0 -0
  112. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/sonolus/script/engine.py +0 -0
  113. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/sonolus/script/globals.py +0 -0
  114. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/sonolus/script/instruction.py +0 -0
  115. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/sonolus/script/internal/__init__.py +0 -0
  116. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/sonolus/script/internal/builtin_impls.py +0 -0
  117. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/sonolus/script/internal/callbacks.py +0 -0
  118. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/sonolus/script/internal/constant.py +0 -0
  119. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/sonolus/script/internal/context.py +0 -0
  120. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/sonolus/script/internal/descriptor.py +0 -0
  121. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/sonolus/script/internal/dict_impl.py +0 -0
  122. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/sonolus/script/internal/error.py +0 -0
  123. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/sonolus/script/internal/generic.py +0 -0
  124. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/sonolus/script/internal/impl.py +0 -0
  125. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/sonolus/script/internal/introspection.py +0 -0
  126. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/sonolus/script/internal/math_impls.py +0 -0
  127. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/sonolus/script/internal/native.py +0 -0
  128. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/sonolus/script/internal/random.py +0 -0
  129. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/sonolus/script/internal/range.py +0 -0
  130. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/sonolus/script/internal/transient.py +0 -0
  131. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/sonolus/script/internal/tuple_impl.py +0 -0
  132. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/sonolus/script/internal/value.py +0 -0
  133. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/sonolus/script/interval.py +0 -0
  134. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/sonolus/script/iterator.py +0 -0
  135. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/sonolus/script/level.py +0 -0
  136. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/sonolus/script/metadata.py +0 -0
  137. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/sonolus/script/options.py +0 -0
  138. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/sonolus/script/particle.py +0 -0
  139. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/sonolus/script/pointer.py +0 -0
  140. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/sonolus/script/printing.py +0 -0
  141. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/sonolus/script/project.py +0 -0
  142. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/sonolus/script/quad.py +0 -0
  143. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/sonolus/script/record.py +0 -0
  144. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/sonolus/script/runtime.py +0 -0
  145. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/sonolus/script/sprite.py +0 -0
  146. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/sonolus/script/text.py +0 -0
  147. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/sonolus/script/timing.py +0 -0
  148. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/sonolus/script/transform.py +0 -0
  149. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/sonolus/script/ui.py +0 -0
  150. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/sonolus/script/values.py +0 -0
  151. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/sonolus/script/vec.py +0 -0
  152. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/tests/__init__.py +0 -0
  153. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/tests/script/__init__.py +0 -0
  154. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/tests/script/conftest.py +0 -0
  155. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/tests/script/test_array.py +0 -0
  156. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/tests/script/test_array_map.py +0 -0
  157. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/tests/script/test_array_set.py +0 -0
  158. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/tests/script/test_assert.py +0 -0
  159. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/tests/script/test_dict.py +0 -0
  160. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/tests/script/test_flow.py +0 -0
  161. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/tests/script/test_functions.py +0 -0
  162. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/tests/script/test_helpers.py +0 -0
  163. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/tests/script/test_interval.py +0 -0
  164. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/tests/script/test_match.py +0 -0
  165. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/tests/script/test_num.py +0 -0
  166. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/tests/script/test_operator.py +0 -0
  167. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/tests/script/test_quad.py +0 -0
  168. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/tests/script/test_random.py +0 -0
  169. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/tests/script/test_range.py +0 -0
  170. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/tests/script/test_record.py +0 -0
  171. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/tests/script/test_transform.py +0 -0
  172. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/tests/script/test_tuple.py +0 -0
  173. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/tests/script/test_var_array.py +0 -0
  174. {sonolus_py-0.3.0 → sonolus_py-0.3.1}/tests/script/test_vec.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sonolus.py
3
- Version: 0.3.0
3
+ Version: 0.3.1
4
4
  Summary: Sonolus engine development in Python
5
5
  License-File: LICENSE
6
6
  Requires-Python: >=3.12
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "sonolus.py"
3
- version = "0.3.0"
3
+ version = "0.3.1"
4
4
  description = "Sonolus engine development in Python"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.12"
@@ -114,10 +114,11 @@ class _Num(Value, metaclass=_NumMeta):
114
114
  return Num(self.data)
115
115
 
116
116
  def _set_(self, value: Self):
117
+ value = Num._accept_(value)
117
118
  if ctx():
118
119
  match self.data:
119
120
  case BackingValue():
120
- ctx().add_statements(self.data.write(value))
121
+ self.data.write(value.ir())
121
122
  case BlockPlace():
122
123
  ctx().check_writable(self.data)
123
124
  ctx().add_statements(IRSet(self.data, value.ir()))
@@ -2,7 +2,7 @@ from __future__ import annotations
2
2
 
3
3
  from typing import cast, dataclass_transform
4
4
 
5
- from sonolus.backend.ir import IRExpr, IRInstr, IRPureInstr
5
+ from sonolus.backend.ir import IRExpr, IRInstr, IRPureInstr, IRConst
6
6
  from sonolus.backend.mode import Mode
7
7
  from sonolus.backend.ops import Op
8
8
  from sonolus.script.internal.context import ctx
@@ -42,7 +42,7 @@ class _StreamDataField(SonolusDescriptor):
42
42
  self.type_ = type_
43
43
 
44
44
  def _get(self):
45
- return self.type_._from_backing_source_(lambda offset: _StreamBacking(self.offset, Num(offset)))
45
+ return self.type_._from_backing_source_(lambda offset: _SparseStreamBacking(self.offset, Num(offset)))
46
46
 
47
47
  def __get__(self, instance, owner):
48
48
  _check_can_read_or_write_stream()
@@ -150,6 +150,30 @@ class _StreamBacking(BackingValue):
150
150
  ctx().add_statement(IRInstr(Op.StreamSet, [self.id.ir(), self.index.ir(), value]))
151
151
 
152
152
 
153
+ class _SparseStreamBacking(BackingValue):
154
+ id: Num
155
+ index: Num
156
+
157
+ def __init__(self, stream_id: int, index: Num):
158
+ super().__init__()
159
+ self.id = Num._accept_(stream_id)
160
+ self.index = Num._accept_(index)
161
+
162
+ def read(self) -> IRExpr:
163
+ """Read the value from the stream."""
164
+ _check_can_read_stream()
165
+ return IRPureInstr(Op.StreamGetValue, [self.id.ir(), self.index.ir()])
166
+
167
+ def write(self, value: IRExpr) -> None:
168
+ """Write the value to the stream."""
169
+ _check_can_write_stream()
170
+ ctx().add_statements(
171
+ IRInstr(Op.StreamSet, [self.id.ir(), self.index.ir(), value]),
172
+ IRInstr(Op.StreamSet, [self.id.ir(), (self.index - 0.5).ir(), IRConst(0)]),
173
+ IRInstr(Op.StreamSet, [self.id.ir(), (self.index + 0.5).ir(), IRConst(0)]),
174
+ )
175
+
176
+
153
177
  class Stream[T](Record, BackingValue):
154
178
  """Represents a stream.
155
179
 
@@ -717,7 +717,7 @@ wheels = [
717
717
 
718
718
  [[package]]
719
719
  name = "sonolus-py"
720
- version = "0.3.0"
720
+ version = "0.3.1"
721
721
  source = { editable = "." }
722
722
 
723
723
  [package.dev-dependencies]
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes