sonolus.py 0.1.0__py3-none-any.whl

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 (75) hide show
  1. sonolus/__init__.py +0 -0
  2. sonolus/backend/__init__.py +0 -0
  3. sonolus/backend/allocate.py +51 -0
  4. sonolus/backend/blocks.py +756 -0
  5. sonolus/backend/excepthook.py +37 -0
  6. sonolus/backend/finalize.py +69 -0
  7. sonolus/backend/flow.py +92 -0
  8. sonolus/backend/interpret.py +333 -0
  9. sonolus/backend/ir.py +89 -0
  10. sonolus/backend/mode.py +24 -0
  11. sonolus/backend/node.py +40 -0
  12. sonolus/backend/ops.py +197 -0
  13. sonolus/backend/optimize.py +9 -0
  14. sonolus/backend/passes.py +6 -0
  15. sonolus/backend/place.py +90 -0
  16. sonolus/backend/simplify.py +30 -0
  17. sonolus/backend/utils.py +48 -0
  18. sonolus/backend/visitor.py +880 -0
  19. sonolus/build/__init__.py +0 -0
  20. sonolus/build/cli.py +170 -0
  21. sonolus/build/collection.py +293 -0
  22. sonolus/build/compile.py +90 -0
  23. sonolus/build/defaults.py +32 -0
  24. sonolus/build/engine.py +149 -0
  25. sonolus/build/level.py +23 -0
  26. sonolus/build/node.py +43 -0
  27. sonolus/build/project.py +94 -0
  28. sonolus/py.typed +0 -0
  29. sonolus/script/__init__.py +0 -0
  30. sonolus/script/archetype.py +651 -0
  31. sonolus/script/array.py +241 -0
  32. sonolus/script/bucket.py +192 -0
  33. sonolus/script/callbacks.py +105 -0
  34. sonolus/script/comptime.py +146 -0
  35. sonolus/script/containers.py +247 -0
  36. sonolus/script/debug.py +70 -0
  37. sonolus/script/effect.py +132 -0
  38. sonolus/script/engine.py +101 -0
  39. sonolus/script/globals.py +234 -0
  40. sonolus/script/graphics.py +141 -0
  41. sonolus/script/icon.py +73 -0
  42. sonolus/script/internal/__init__.py +5 -0
  43. sonolus/script/internal/builtin_impls.py +144 -0
  44. sonolus/script/internal/context.py +365 -0
  45. sonolus/script/internal/descriptor.py +17 -0
  46. sonolus/script/internal/error.py +15 -0
  47. sonolus/script/internal/generic.py +197 -0
  48. sonolus/script/internal/impl.py +69 -0
  49. sonolus/script/internal/introspection.py +14 -0
  50. sonolus/script/internal/native.py +38 -0
  51. sonolus/script/internal/value.py +144 -0
  52. sonolus/script/interval.py +98 -0
  53. sonolus/script/iterator.py +211 -0
  54. sonolus/script/level.py +52 -0
  55. sonolus/script/math.py +92 -0
  56. sonolus/script/num.py +382 -0
  57. sonolus/script/options.py +194 -0
  58. sonolus/script/particle.py +158 -0
  59. sonolus/script/pointer.py +30 -0
  60. sonolus/script/project.py +17 -0
  61. sonolus/script/range.py +58 -0
  62. sonolus/script/record.py +293 -0
  63. sonolus/script/runtime.py +526 -0
  64. sonolus/script/sprite.py +332 -0
  65. sonolus/script/text.py +404 -0
  66. sonolus/script/timing.py +42 -0
  67. sonolus/script/transform.py +118 -0
  68. sonolus/script/ui.py +160 -0
  69. sonolus/script/values.py +43 -0
  70. sonolus/script/vec.py +48 -0
  71. sonolus_py-0.1.0.dist-info/METADATA +10 -0
  72. sonolus_py-0.1.0.dist-info/RECORD +75 -0
  73. sonolus_py-0.1.0.dist-info/WHEEL +4 -0
  74. sonolus_py-0.1.0.dist-info/entry_points.txt +2 -0
  75. sonolus_py-0.1.0.dist-info/licenses/LICENSE +21 -0
sonolus/script/ui.py ADDED
@@ -0,0 +1,160 @@
1
+ from dataclasses import dataclass, field
2
+ from typing import Literal
3
+
4
+ UiMetric = Literal[
5
+ "arcade",
6
+ "arcadePercentage",
7
+ "accuracy",
8
+ "accuracyPercentage",
9
+ "life",
10
+ "perfect",
11
+ "perfectPercentage",
12
+ "greatGoodMiss",
13
+ "greatGoodMissPercentage",
14
+ "miss",
15
+ "missPercentage",
16
+ "errorHeatmap",
17
+ ]
18
+
19
+ UiJudgmentErrorStyle = Literal[
20
+ "none",
21
+ "plus",
22
+ "minus",
23
+ "arrowUp",
24
+ "arrowDown",
25
+ "arrowLeft",
26
+ "arrowRight",
27
+ "triangleUp",
28
+ "triangleDown",
29
+ "triangleLeft",
30
+ "triangleRight",
31
+ ]
32
+
33
+ UiJudgmentErrorPlacement = Literal["both", "left", "right"]
34
+
35
+ EaseType = Literal[
36
+ "linear",
37
+ "none",
38
+ "inSine",
39
+ "inQuad",
40
+ "inCubic",
41
+ "inQuart",
42
+ "inQuint",
43
+ "inExpo",
44
+ "inCirc",
45
+ "inBack",
46
+ "inElastic",
47
+ "outSine",
48
+ "outQuad",
49
+ "outCubic",
50
+ "outQuart",
51
+ "outQuint",
52
+ "outExpo",
53
+ "outCirc",
54
+ "outBack",
55
+ "outElastic",
56
+ "inOutSine",
57
+ "inOutQuad",
58
+ "inOutCubic",
59
+ "inOutQuart",
60
+ "inOutQuint",
61
+ "inOutExpo",
62
+ "inOutCirc",
63
+ "inOutBack",
64
+ "inOutElastic",
65
+ "outInSine",
66
+ "outInQuad",
67
+ "outInCubic",
68
+ "outInQuart",
69
+ "outInQuint",
70
+ "outInExpo",
71
+ "outInCirc",
72
+ "outInBack",
73
+ "outInElastic",
74
+ ]
75
+
76
+
77
+ @dataclass
78
+ class UiAnimationTween:
79
+ start: float
80
+ end: float
81
+ duration: float
82
+ ease: EaseType
83
+
84
+ def to_dict(self):
85
+ return {
86
+ "from": self.start,
87
+ "to": self.end,
88
+ "duration": self.duration,
89
+ "ease": self.ease,
90
+ }
91
+
92
+
93
+ @dataclass
94
+ class UiAnimation:
95
+ scale: UiAnimationTween = field(default_factory=lambda: UiAnimationTween(1, 1, 0, "none"))
96
+ alpha: UiAnimationTween = field(default_factory=lambda: UiAnimationTween(1, 0, 0.2, "outCubic"))
97
+
98
+ def to_dict(self):
99
+ return {
100
+ "scale": self.scale.to_dict(),
101
+ "alpha": self.alpha.to_dict(),
102
+ }
103
+
104
+
105
+ @dataclass
106
+ class UiVisibility:
107
+ scale: float = 1.0
108
+ alpha: float = 1.0
109
+
110
+ def to_dict(self):
111
+ return {
112
+ "scale": self.scale,
113
+ "alpha": self.alpha,
114
+ }
115
+
116
+
117
+ @dataclass
118
+ class UiConfig:
119
+ scope: str | None = None
120
+ primary_metric: UiMetric = "arcade"
121
+ secondary_metric: UiMetric = "life"
122
+ menu_visibility: UiVisibility = field(default_factory=UiVisibility)
123
+ judgment_visibility: UiVisibility = field(default_factory=UiVisibility)
124
+ combo_visibility: UiVisibility = field(default_factory=UiVisibility)
125
+ primary_metric_visibility: UiVisibility = field(default_factory=UiVisibility)
126
+ secondary_metric_visibility: UiVisibility = field(default_factory=UiVisibility)
127
+ progress_visibility: UiVisibility = field(default_factory=UiVisibility)
128
+ tutorial_navigation_visibility: UiVisibility = field(default_factory=UiVisibility)
129
+ tutorial_instruction_visibility: UiVisibility = field(default_factory=UiVisibility)
130
+ judgment_animation: UiAnimation = field(default_factory=UiAnimation)
131
+ combo_animation: UiAnimation = field(
132
+ default_factory=lambda: UiAnimation(
133
+ scale=UiAnimationTween(1.2, 1, 0.2, "inCubic"), alpha=UiAnimationTween(1, 1, 0, "none")
134
+ )
135
+ )
136
+ judgment_error_style: UiJudgmentErrorStyle = "none"
137
+ judgment_error_placement: UiJudgmentErrorPlacement = "both"
138
+ judgment_error_min: float = 0.0
139
+
140
+ def to_dict(self):
141
+ data = {
142
+ "primaryMetric": self.primary_metric,
143
+ "secondaryMetric": self.secondary_metric,
144
+ "menuVisibility": self.menu_visibility.to_dict(),
145
+ "judgmentVisibility": self.judgment_visibility.to_dict(),
146
+ "comboVisibility": self.combo_visibility.to_dict(),
147
+ "primaryMetricVisibility": self.primary_metric_visibility.to_dict(),
148
+ "secondaryMetricVisibility": self.secondary_metric_visibility.to_dict(),
149
+ "progressVisibility": self.progress_visibility.to_dict(),
150
+ "tutorialNavigationVisibility": self.tutorial_navigation_visibility.to_dict(),
151
+ "tutorialInstructionVisibility": self.tutorial_instruction_visibility.to_dict(),
152
+ "judgmentAnimation": self.judgment_animation.to_dict(),
153
+ "comboAnimation": self.combo_animation.to_dict(),
154
+ "judgmentErrorStyle": self.judgment_error_style,
155
+ "judgmentErrorPlacement": self.judgment_error_placement,
156
+ "judgmentErrorMin": self.judgment_error_min,
157
+ }
158
+ if self.scope is not None:
159
+ data["scope"] = self.scope
160
+ return data
@@ -0,0 +1,43 @@
1
+ from sonolus.script.internal.context import ctx
2
+ from sonolus.script.internal.generic import validate_concrete_type
3
+ from sonolus.script.internal.impl import meta_fn, validate_value
4
+
5
+
6
+ @meta_fn
7
+ def alloc[T](type_: type[T]) -> T:
8
+ """Returns an uninitialized instance of the given type."""
9
+ type_ = validate_concrete_type(type_)
10
+ if ctx():
11
+ return type_._alloc_()
12
+ else:
13
+ return type_._alloc_()._as_py_()
14
+
15
+
16
+ @meta_fn
17
+ def zeros[T](type_: type[T]) -> T:
18
+ """Returns a new instance of the given type initialized with zeros."""
19
+ type_ = validate_concrete_type(type_)
20
+ if ctx():
21
+ return copy(type_._from_list_([0] * type_._size_()))
22
+ else:
23
+ return type_._from_list_([0] * type_._size_())._as_py_()
24
+
25
+
26
+ @meta_fn
27
+ def copy[T](value: T) -> T:
28
+ """Returns a deep copy of the given value."""
29
+ value = validate_value(value)
30
+ if ctx():
31
+ return value._copy_()
32
+ else:
33
+ return value._copy_()._as_py_()
34
+
35
+
36
+ @meta_fn
37
+ def with_default[T](value: T, default: T) -> T:
38
+ """Returns the given value if it's not None, otherwise the default value."""
39
+ value = validate_value(value)
40
+ default = validate_value(default)
41
+ if value._is_py_() and value._as_py_() is None:
42
+ return default
43
+ return value
sonolus/script/vec.py ADDED
@@ -0,0 +1,48 @@
1
+ from typing import Self
2
+
3
+ from sonolus.script.math import atan2
4
+ from sonolus.script.num import Num
5
+ from sonolus.script.record import Record
6
+
7
+
8
+ class Vec2(Record):
9
+ x: float
10
+ y: float
11
+
12
+ @property
13
+ def magnitude(self) -> Num:
14
+ return (self.x**2 + self.y**2) ** 0.5
15
+
16
+ @property
17
+ def angle(self) -> Num:
18
+ return atan2(self.y, self.x)
19
+
20
+ def dot(self, other: Self) -> Num:
21
+ return self.x * other.x + self.y * other.y
22
+
23
+ @property
24
+ def tuple(self) -> tuple[float, float]:
25
+ return self.x, self.y
26
+
27
+ def __add__(self, other: Self) -> Self:
28
+ return Vec2(x=self.x + other.x, y=self.y + other.y)
29
+
30
+ def __sub__(self, other: Self) -> Self:
31
+ return Vec2(x=self.x - other.x, y=self.y - other.y)
32
+
33
+ def __mul__(self, other: Self | float) -> Self:
34
+ match other:
35
+ case Vec2(x, y):
36
+ return Vec2(x=self.x * x, y=self.y * y)
37
+ case float() | int() as factor:
38
+ return Vec2(x=self.x * factor, y=self.y * factor)
39
+
40
+ def __truediv__(self, other: Self | float) -> Self:
41
+ match other:
42
+ case Vec2(x, y):
43
+ return Vec2(x=self.x / x, y=self.y / y)
44
+ case float() | int() as factor:
45
+ return Vec2(x=self.x / factor, y=self.y / factor)
46
+
47
+ def __neg__(self) -> Self:
48
+ return Vec2(x=-self.x, y=-self.y)
@@ -0,0 +1,10 @@
1
+ Metadata-Version: 2.3
2
+ Name: sonolus.py
3
+ Version: 0.1.0
4
+ Summary: Sonolus engine development in Python
5
+ License-File: LICENSE
6
+ Requires-Python: >=3.13
7
+ Description-Content-Type: text/markdown
8
+
9
+ # Sonolus.py
10
+ Sonolus engine development in Python.
@@ -0,0 +1,75 @@
1
+ sonolus/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
+ sonolus/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3
+ sonolus/backend/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
+ sonolus/backend/allocate.py,sha256=3Y2UNGt9Nh3DLr88L1DLhvyavm6R_bg0sMN_d1XzANs,2154
5
+ sonolus/backend/blocks.py,sha256=LR1fAXUGcsVuh03YNUpcVzz8P9sNbhL1ki3Dq57mK8I,19287
6
+ sonolus/backend/excepthook.py,sha256=8tkzohxvkrUq_KbG48SuWdlEPNZKxcvYlwj7fXWFA1g,1031
7
+ sonolus/backend/finalize.py,sha256=4At9fA7zaZsrFSfz9uyYCZIFUb10u16o6d-3wfg2XLw,3399
8
+ sonolus/backend/flow.py,sha256=NtejFHC2LAmCwlYfyfnDZLnwvEyrVV_Dm4RGglBG6U0,3216
9
+ sonolus/backend/interpret.py,sha256=EDpkv3ASzteDhYjTkzoriGYHYepcoHKZusrU_FX0DS4,14247
10
+ sonolus/backend/ir.py,sha256=_D5CXsUxUX2VWkWU1z5ji8czrhTz0ieQ8L6VjtuxaKs,1994
11
+ sonolus/backend/mode.py,sha256=LMrsMwZ4fe7idvXXI-D5-kBeUWMdFVw84JT_OZdHuQI,637
12
+ sonolus/backend/node.py,sha256=BJqEaI_u8pdPNjgUZO9o8dGTn_vyo9x71AN5v4zJjdc,1039
13
+ sonolus/backend/ops.py,sha256=k2YPLSDl4RagJ2Hyz91nZKlrWflMoXovCRjcwyhWmY0,10319
14
+ sonolus/backend/optimize.py,sha256=qLOJ6XEZsOKOTQhzHWPNObsBKTHDHhVke9ZGmnukrhY,284
15
+ sonolus/backend/passes.py,sha256=3NiVnT0KQA1lVEuR9wzcGB6CccVe4A-C3D_JOnGsetI,137
16
+ sonolus/backend/place.py,sha256=61mWyPQ6i59bmV9RtQfUy6mJE0pMAmFoL1W-MyY79ug,2536
17
+ sonolus/backend/simplify.py,sha256=0SLsReWyxwpI2qyGn0JtQWyv3J-4DDyCkmiqP5ZvSV8,1122
18
+ sonolus/backend/utils.py,sha256=AVYidUYSp5H8pbPKEzAZ0Ccorb3nYDU6zFcc6JBtuLs,1430
19
+ sonolus/backend/visitor.py,sha256=y4_5GgOb54g0QrQRNV14b0lOpQtLDtku2iMBG5jNbKg,36420
20
+ sonolus/build/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
21
+ sonolus/build/cli.py,sha256=8PSn8h-UmYGCjE2LAFU_5J3tMapKxCw09kzRTBomSFs,5545
22
+ sonolus/build/collection.py,sha256=IsDgedsAJ-foHzQ4LnQ9zSVXSz5wVVt4sgqiUICBvCU,10573
23
+ sonolus/build/compile.py,sha256=GPIT1gBoGvmTL-JA0hxnRzdr19nm9DdnXrQp6mMXkH0,3685
24
+ sonolus/build/defaults.py,sha256=MDQuJUDRtCeNGbwn9ZgQAPiKJx7q-EH8hb7M6ToFcSU,718
25
+ sonolus/build/engine.py,sha256=zJI-1UM_n_bFoXT1pajVFYWjh0Fp-BKeHrejT1iFPQc,4680
26
+ sonolus/build/level.py,sha256=Ko3XI3T8dpUmUOnxpAW27-1QCT2bkqXaW5GCiVKsfP0,546
27
+ sonolus/build/node.py,sha256=3217uAzOz1KZ9VjOkcGO_Tdarvqwvl-F4sKPwx42QQ0,1205
28
+ sonolus/build/project.py,sha256=x350tPcwKCYakdbrP796b545hVUaBwrzY0yEcQR7ut4,4023
29
+ sonolus/script/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
30
+ sonolus/script/archetype.py,sha256=ktCJWh7bl3skzY-l8tF3Tmw7-G3SXR2wqCivb2zHkOo,23858
31
+ sonolus/script/array.py,sha256=ithYhBG69KTqooZlV7nVQXqrqKtgKL4KJKQ3ZzxTZwg,8914
32
+ sonolus/script/bucket.py,sha256=muCzGbqvEVzf39AnsVGfqfYGoA1zbGqTt-EXQW3g74M,5567
33
+ sonolus/script/callbacks.py,sha256=UESpsFWuyk9EDBWrwStBakbjtIsGDE39myeTQsCWKMg,2444
34
+ sonolus/script/comptime.py,sha256=qaUpaWWfZ3vwkZ43VjGK9hWb9sZepuDQHtGHdioos6U,4249
35
+ sonolus/script/containers.py,sha256=yl6PlX840Km4SQRPGqy95h9Ol32Z-dYEO3ZzJB14dKc,7093
36
+ sonolus/script/debug.py,sha256=nivmdVyowjppxzRUjuIHG2fkTMrurlpFrxJ83L0e348,1969
37
+ sonolus/script/effect.py,sha256=fOeVGE-g1cQZO7aRLXax62GScmz69fhNqnev4fMSWWE,4154
38
+ sonolus/script/engine.py,sha256=W53NTA0KrG8hPFljLx7upsh2ghME4zYxnMqPhXoOMB8,2776
39
+ sonolus/script/globals.py,sha256=PCPPy1sHH6NO737MtOyXLUXF0DYiG-WSFSWhXRlRd_A,7609
40
+ sonolus/script/graphics.py,sha256=D821LmnUwOaElg8cGFPHPA1qRTYPVYsKBPR-vUPtBc0,2851
41
+ sonolus/script/icon.py,sha256=f-KJNpHGi804C5dA0G2MdvEYUmv7A01HqARUJlREEF0,1767
42
+ sonolus/script/interval.py,sha256=yhCWAvuI2WrvC8wtx2MX7pnRY920AvPkZ_SXTC3LqVk,2783
43
+ sonolus/script/iterator.py,sha256=tWdTWoV4pMZC74qCuWWNKV4n3yGFs1m4QRG3hY-VQok,5443
44
+ sonolus/script/level.py,sha256=mKkH3aSwMmYZbyVp7-2nEWpLJhT_1PHsqy-3JK6UyGI,1188
45
+ sonolus/script/math.py,sha256=2HNKoIN6CV8J_1jsnxItXWQn8eUjlfvbPbMEav9li10,1636
46
+ sonolus/script/num.py,sha256=dfg76xvMn21H0OJJkquajNayP78So-Ov3TWMImDtqDI,11695
47
+ sonolus/script/options.py,sha256=URKZ2TRBLZSyom3vGillQeV2etRT1GjSAfP_ylREsSk,5778
48
+ sonolus/script/particle.py,sha256=BnoJqmh8NfT2ZEAgGQJMPCmHDo6bjqDmsq29xpNlLOk,7423
49
+ sonolus/script/pointer.py,sha256=L4qnJumjYgdZ0rs6lg19MVZivk4Yz0gMGNMsYXvv-ac,1155
50
+ sonolus/script/project.py,sha256=7K3iwUdSXAQyEAwcZvtfxgv3M0IaUaXSroUBEj4dnuA,416
51
+ sonolus/script/range.py,sha256=EgdEJYeoq2chD0xCJs2oZZhM_ubWHOzZZwvAZmXxQLs,1753
52
+ sonolus/script/record.py,sha256=l4h4mubPevUAW4oKQpz-ZNXea9EbsbSv9je_KV5CIPE,10381
53
+ sonolus/script/runtime.py,sha256=fXEGd7qD9vpofSlfjlIdzxO-RpPgy2p3zTLEDDuf6FU,14178
54
+ sonolus/script/sprite.py,sha256=w7bD6ZcD6J9Rq223OxZB--GlHST0wrVcQfHo1fcTtXs,13135
55
+ sonolus/script/text.py,sha256=CYiqsyRgzCsCggOBp2RwGGT4QpGo15k1WZx6P5xuwyM,13121
56
+ sonolus/script/timing.py,sha256=qSkoU7bVNaCFPUwpVUMr44xP75h2bapPoIHDsGEReWU,1070
57
+ sonolus/script/transform.py,sha256=Oa0baFc1eBv0Rj6GxmpLCTiTW83-CQ0w1HIJwt-Y_e8,3203
58
+ sonolus/script/ui.py,sha256=eOVqH-6BeRwMbe7ePQWjMIJEvrP1gKQMXhWt7v2OClo,4648
59
+ sonolus/script/values.py,sha256=TyRxHjuvtXlQpKGyVRg0T8fJgXMboKY4TZxQ3lFR4bs,1261
60
+ sonolus/script/vec.py,sha256=ipjKOxx5YCwbIjRMlVJlESiuRCE5zX1bYY32UGi88HY,1414
61
+ sonolus/script/internal/__init__.py,sha256=ZMWLy_WIuYQv0HRquCLoeCidiOpar4J2GojnhBSrxGs,141
62
+ sonolus/script/internal/builtin_impls.py,sha256=PfxpcW1H8pmHsrsuOW70o4V3BZ9JuQxiAagZ23kdf2U,4171
63
+ sonolus/script/internal/context.py,sha256=r6Igx4rXT7_aBB04GJjJolDdCbyZX39qVKRl8vG_bjc,12650
64
+ sonolus/script/internal/descriptor.py,sha256=mlgUVKS2R4Nt1gpDH-Q1YyJHuZDR5i6TcjiszfY-yzE,409
65
+ sonolus/script/internal/error.py,sha256=ZNnsvQVQAnFKzcvsm6-sste2lo-tP5pPI8sD7XlAZWc,490
66
+ sonolus/script/internal/generic.py,sha256=-rhFatYZLrDE3RFgDWu_Zto3funHXmMr3QuyxajaWKU,7356
67
+ sonolus/script/internal/impl.py,sha256=tnIaQCmw0SlFpmnSJp2aEys9XVxoj0Vi8Yf6SP-oUAQ,2321
68
+ sonolus/script/internal/introspection.py,sha256=9e_flldywaB5g1FdLnfLfQcL3s4nQ50E5iFlA-5FF_w,558
69
+ sonolus/script/internal/native.py,sha256=Iib3iqt9OfSnuOUGa9L9jMNDNuApQDnZd0vNKOk52hE,1392
70
+ sonolus/script/internal/value.py,sha256=ftmxr228XRSt2KNsR8KsXMw7vDP1jdwKEMb1PE0bpCA,4214
71
+ sonolus_py-0.1.0.dist-info/METADATA,sha256=zzMbe5Hz2hBW-KVAwX1F62FUjkoxXT-YNTww8jDpegw,238
72
+ sonolus_py-0.1.0.dist-info/WHEEL,sha256=1yFddiXMmvYK7QYTqtRNtX66WJ0Mz8PYEiEUoOUUxRY,87
73
+ sonolus_py-0.1.0.dist-info/entry_points.txt,sha256=oTYspY_b7SA8TptEMTDxh4-Aj-ZVPnYC9f1lqH6s9G4,54
74
+ sonolus_py-0.1.0.dist-info/licenses/LICENSE,sha256=AhIgObMNjnAgjfJIea2c-0PDItKwP71hg4WFVAKh1ew,1088
75
+ sonolus_py-0.1.0.dist-info/RECORD,,
@@ -0,0 +1,4 @@
1
+ Wheel-Version: 1.0
2
+ Generator: hatchling 1.25.0
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
@@ -0,0 +1,2 @@
1
+ [console_scripts]
2
+ sonolus-py = sonolus.build.cli:main
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2024 Kyle Chang
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.