sonolus.py 0.1.4__py3-none-any.whl → 0.1.6__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.
- sonolus/backend/finalize.py +18 -10
- sonolus/backend/interpret.py +7 -7
- sonolus/backend/ir.py +24 -0
- sonolus/backend/optimize/__init__.py +0 -0
- sonolus/backend/{allocate.py → optimize/allocate.py} +4 -3
- sonolus/backend/{constant_evaluation.py → optimize/constant_evaluation.py} +7 -7
- sonolus/backend/{coalesce.py → optimize/copy_coalesce.py} +3 -3
- sonolus/backend/optimize/dead_code.py +185 -0
- sonolus/backend/{dominance.py → optimize/dominance.py} +2 -17
- sonolus/backend/{flow.py → optimize/flow.py} +6 -5
- sonolus/backend/{inlining.py → optimize/inlining.py} +4 -17
- sonolus/backend/{liveness.py → optimize/liveness.py} +69 -65
- sonolus/backend/optimize/optimize.py +44 -0
- sonolus/backend/{passes.py → optimize/passes.py} +1 -1
- sonolus/backend/optimize/simplify.py +191 -0
- sonolus/backend/{ssa.py → optimize/ssa.py} +31 -18
- sonolus/backend/place.py +17 -25
- sonolus/backend/utils.py +10 -0
- sonolus/backend/visitor.py +360 -101
- sonolus/build/cli.py +14 -3
- sonolus/build/compile.py +8 -8
- sonolus/build/engine.py +10 -5
- sonolus/build/project.py +30 -1
- sonolus/script/archetype.py +429 -138
- sonolus/script/array.py +25 -8
- sonolus/script/array_like.py +297 -0
- sonolus/script/bucket.py +73 -11
- sonolus/script/containers.py +234 -51
- sonolus/script/debug.py +8 -8
- sonolus/script/easing.py +147 -105
- sonolus/script/effect.py +60 -0
- sonolus/script/engine.py +71 -4
- sonolus/script/globals.py +66 -32
- sonolus/script/instruction.py +79 -25
- sonolus/script/internal/builtin_impls.py +138 -27
- sonolus/script/internal/constant.py +139 -0
- sonolus/script/internal/context.py +14 -5
- sonolus/script/internal/dict_impl.py +65 -0
- sonolus/script/internal/generic.py +6 -9
- sonolus/script/internal/impl.py +38 -13
- sonolus/script/internal/introspection.py +5 -2
- sonolus/script/{math.py → internal/math_impls.py} +28 -28
- sonolus/script/internal/native.py +3 -3
- sonolus/script/internal/random.py +67 -0
- sonolus/script/internal/range.py +81 -0
- sonolus/script/internal/transient.py +51 -0
- sonolus/script/internal/tuple_impl.py +113 -0
- sonolus/script/interval.py +234 -16
- sonolus/script/iterator.py +120 -167
- sonolus/script/level.py +24 -0
- sonolus/script/num.py +79 -47
- sonolus/script/options.py +78 -12
- sonolus/script/particle.py +37 -4
- sonolus/script/pointer.py +4 -4
- sonolus/script/print.py +22 -1
- sonolus/script/project.py +59 -0
- sonolus/script/{graphics.py → quad.py} +75 -12
- sonolus/script/record.py +44 -13
- sonolus/script/runtime.py +50 -1
- sonolus/script/sprite.py +198 -115
- sonolus/script/text.py +2 -0
- sonolus/script/timing.py +72 -0
- sonolus/script/transform.py +296 -66
- sonolus/script/ui.py +134 -78
- sonolus/script/values.py +6 -13
- sonolus/script/vec.py +118 -3
- {sonolus_py-0.1.4.dist-info → sonolus_py-0.1.6.dist-info}/METADATA +1 -1
- sonolus_py-0.1.6.dist-info/RECORD +89 -0
- sonolus/backend/dead_code.py +0 -80
- sonolus/backend/optimize.py +0 -37
- sonolus/backend/simplify.py +0 -47
- sonolus/script/comptime.py +0 -160
- sonolus/script/random.py +0 -14
- sonolus/script/range.py +0 -58
- sonolus_py-0.1.4.dist-info/RECORD +0 -84
- /sonolus/script/{callbacks.py → internal/callbacks.py} +0 -0
- {sonolus_py-0.1.4.dist-info → sonolus_py-0.1.6.dist-info}/WHEEL +0 -0
- {sonolus_py-0.1.4.dist-info → sonolus_py-0.1.6.dist-info}/entry_points.txt +0 -0
- {sonolus_py-0.1.4.dist-info → sonolus_py-0.1.6.dist-info}/licenses/LICENSE +0 -0
sonolus/backend/optimize.py
DELETED
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
from sonolus.backend.allocate import Allocate, AllocateBasic
|
|
2
|
-
from sonolus.backend.coalesce import CopyCoalesce
|
|
3
|
-
from sonolus.backend.constant_evaluation import SparseConditionalConstantPropagation
|
|
4
|
-
from sonolus.backend.dead_code import DeadCodeElimination, UnreachableCodeElimination
|
|
5
|
-
from sonolus.backend.flow import BasicBlock
|
|
6
|
-
from sonolus.backend.inlining import InlineVars
|
|
7
|
-
from sonolus.backend.passes import run_passes
|
|
8
|
-
from sonolus.backend.simplify import CoalesceFlow
|
|
9
|
-
from sonolus.backend.ssa import FromSSA, ToSSA
|
|
10
|
-
|
|
11
|
-
MINIMAL_PASSES = [
|
|
12
|
-
CoalesceFlow(),
|
|
13
|
-
UnreachableCodeElimination(),
|
|
14
|
-
AllocateBasic(),
|
|
15
|
-
]
|
|
16
|
-
|
|
17
|
-
STANDARD_PASSES = [
|
|
18
|
-
CoalesceFlow(),
|
|
19
|
-
UnreachableCodeElimination(),
|
|
20
|
-
DeadCodeElimination(),
|
|
21
|
-
ToSSA(),
|
|
22
|
-
SparseConditionalConstantPropagation(),
|
|
23
|
-
UnreachableCodeElimination(),
|
|
24
|
-
DeadCodeElimination(),
|
|
25
|
-
CoalesceFlow(),
|
|
26
|
-
InlineVars(),
|
|
27
|
-
FromSSA(),
|
|
28
|
-
CoalesceFlow(),
|
|
29
|
-
CopyCoalesce(),
|
|
30
|
-
DeadCodeElimination(),
|
|
31
|
-
CoalesceFlow(),
|
|
32
|
-
Allocate(),
|
|
33
|
-
]
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
def optimize_and_allocate(cfg: BasicBlock):
|
|
37
|
-
return run_passes(cfg, STANDARD_PASSES)
|
sonolus/backend/simplify.py
DELETED
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
from sonolus.backend.flow import BasicBlock
|
|
2
|
-
from sonolus.backend.ir import IRGet, IRSet
|
|
3
|
-
from sonolus.backend.passes import CompilerPass
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
class CoalesceFlow(CompilerPass):
|
|
7
|
-
def run(self, entry: BasicBlock) -> BasicBlock:
|
|
8
|
-
queue = [entry]
|
|
9
|
-
processed = set()
|
|
10
|
-
while queue:
|
|
11
|
-
block = queue.pop()
|
|
12
|
-
if block in processed:
|
|
13
|
-
continue
|
|
14
|
-
processed.add(block)
|
|
15
|
-
if len(block.outgoing) != 1:
|
|
16
|
-
queue.extend(edge.dst for edge in block.outgoing)
|
|
17
|
-
continue
|
|
18
|
-
next_block = next(iter(block.outgoing)).dst
|
|
19
|
-
if len(next_block.incoming) != 1:
|
|
20
|
-
queue.append(next_block)
|
|
21
|
-
if not block.statements and not block.phis and not next_block.phis:
|
|
22
|
-
for edge in block.incoming:
|
|
23
|
-
edge.dst = next_block
|
|
24
|
-
next_block.incoming.add(edge)
|
|
25
|
-
for edge in block.outgoing: # There should be exactly one
|
|
26
|
-
next_block.incoming.remove(edge)
|
|
27
|
-
if block is entry:
|
|
28
|
-
entry = next_block
|
|
29
|
-
continue
|
|
30
|
-
for p, args in next_block.phis.items():
|
|
31
|
-
if block not in args:
|
|
32
|
-
continue
|
|
33
|
-
block.statements.append(IRSet(p, IRGet(args[block])))
|
|
34
|
-
block.statements.extend(next_block.statements)
|
|
35
|
-
block.test = next_block.test
|
|
36
|
-
block.outgoing = next_block.outgoing
|
|
37
|
-
for edge in block.outgoing:
|
|
38
|
-
edge.src = block
|
|
39
|
-
dst = edge.dst
|
|
40
|
-
for args in dst.phis.values():
|
|
41
|
-
if next_block in args:
|
|
42
|
-
args[block] = args.pop(next_block)
|
|
43
|
-
processed.add(next_block)
|
|
44
|
-
queue.extend(edge.dst for edge in block.outgoing)
|
|
45
|
-
processed.remove(block)
|
|
46
|
-
queue.append(block)
|
|
47
|
-
return entry
|
sonolus/script/comptime.py
DELETED
|
@@ -1,160 +0,0 @@
|
|
|
1
|
-
from collections.abc import Iterable
|
|
2
|
-
from typing import TYPE_CHECKING, Any, Self, TypeVar, final
|
|
3
|
-
|
|
4
|
-
from sonolus.backend.place import BlockPlace
|
|
5
|
-
from sonolus.script.internal.generic import GenericValue
|
|
6
|
-
from sonolus.script.internal.impl import meta_fn, validate_value
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
@final
|
|
10
|
-
class _Comptime[T, V](GenericValue):
|
|
11
|
-
_instance: Self | None = None
|
|
12
|
-
|
|
13
|
-
def __init__(self):
|
|
14
|
-
super().__init__()
|
|
15
|
-
raise TypeError("Comptime cannot be instantiated")
|
|
16
|
-
|
|
17
|
-
@classmethod
|
|
18
|
-
def value(cls):
|
|
19
|
-
_, value = cls._type_args_
|
|
20
|
-
if isinstance(value, Identity):
|
|
21
|
-
return value.value
|
|
22
|
-
return value
|
|
23
|
-
|
|
24
|
-
@classmethod
|
|
25
|
-
def _get_parameterized(cls, args: tuple[Any, ...]) -> type[Self]:
|
|
26
|
-
result = super()._get_parameterized(args)
|
|
27
|
-
result._instance = object.__new__(result)
|
|
28
|
-
return result
|
|
29
|
-
|
|
30
|
-
@classmethod
|
|
31
|
-
def _size_(cls) -> int:
|
|
32
|
-
return 0
|
|
33
|
-
|
|
34
|
-
@classmethod
|
|
35
|
-
def _is_value_type_(cls) -> bool:
|
|
36
|
-
return False
|
|
37
|
-
|
|
38
|
-
@classmethod
|
|
39
|
-
def _from_place_(cls, place: BlockPlace) -> Self:
|
|
40
|
-
return cls._instance
|
|
41
|
-
|
|
42
|
-
@classmethod
|
|
43
|
-
def _accepts_(cls, value: Any) -> bool:
|
|
44
|
-
from sonolus.script.internal.impl import validate_value
|
|
45
|
-
|
|
46
|
-
value = validate_value(value)
|
|
47
|
-
if not value._is_py_():
|
|
48
|
-
return False
|
|
49
|
-
if cls._type_args_ is None:
|
|
50
|
-
return True
|
|
51
|
-
return value._as_py_() == cls.value()
|
|
52
|
-
|
|
53
|
-
@classmethod
|
|
54
|
-
def _accept_(cls, value: Any) -> Self:
|
|
55
|
-
from sonolus.script.internal.impl import validate_value
|
|
56
|
-
|
|
57
|
-
if not cls._accepts_(value):
|
|
58
|
-
raise TypeError("Value does not match this Comptime instance")
|
|
59
|
-
# This might not actually return a Comptime instance, but it will be a compile-time constant
|
|
60
|
-
return validate_value(value)
|
|
61
|
-
|
|
62
|
-
def _is_py_(self) -> bool:
|
|
63
|
-
return True
|
|
64
|
-
|
|
65
|
-
def _as_py_(self) -> Any:
|
|
66
|
-
return self.value()
|
|
67
|
-
|
|
68
|
-
@classmethod
|
|
69
|
-
def _from_list_(cls, values: Iterable[float | BlockPlace]) -> Self:
|
|
70
|
-
return cls._instance
|
|
71
|
-
|
|
72
|
-
def _to_list_(self, level_refs: dict[Any, int] | None = None) -> list[float | BlockPlace]:
|
|
73
|
-
return []
|
|
74
|
-
|
|
75
|
-
@classmethod
|
|
76
|
-
def _flat_keys_(cls, prefix: str) -> list[str]:
|
|
77
|
-
return []
|
|
78
|
-
|
|
79
|
-
def _get_(self) -> Self:
|
|
80
|
-
from sonolus.script.internal.impl import validate_value
|
|
81
|
-
|
|
82
|
-
# Converts numbers out of comptime, although _accept_ may end up returning a non-comptime instance anyway
|
|
83
|
-
return validate_value(self.value())
|
|
84
|
-
|
|
85
|
-
def _set_(self, value: Self):
|
|
86
|
-
if value is not self:
|
|
87
|
-
raise TypeError("Comptime value cannot be changed")
|
|
88
|
-
|
|
89
|
-
def _copy_from_(self, value: Self):
|
|
90
|
-
if value is not self:
|
|
91
|
-
raise TypeError("Comptime value cannot be changed")
|
|
92
|
-
|
|
93
|
-
def _copy_(self) -> Self:
|
|
94
|
-
return self
|
|
95
|
-
|
|
96
|
-
@meta_fn
|
|
97
|
-
def __eq__(self, other):
|
|
98
|
-
other = validate_value(other)
|
|
99
|
-
match self.value():
|
|
100
|
-
case str():
|
|
101
|
-
return other._is_py_() and other._as_py_() == self.value()
|
|
102
|
-
case _:
|
|
103
|
-
raise TypeError("Unsupported comparison with comptime value")
|
|
104
|
-
|
|
105
|
-
@meta_fn
|
|
106
|
-
def __hash__(self):
|
|
107
|
-
return hash(self.value())
|
|
108
|
-
|
|
109
|
-
@classmethod
|
|
110
|
-
def _alloc_(cls) -> Self:
|
|
111
|
-
return cls._instance
|
|
112
|
-
|
|
113
|
-
@classmethod
|
|
114
|
-
def _validate__type_args_(cls, args: tuple[Any, ...]) -> tuple[Any, ...]:
|
|
115
|
-
if len(args) == 2:
|
|
116
|
-
_, value = args
|
|
117
|
-
# We want the type to be there for documentation,
|
|
118
|
-
# but not enforced since they might not match up, e.g. a Callable is really FunctionType
|
|
119
|
-
if isinstance(value, TypeVar):
|
|
120
|
-
args = Any, value
|
|
121
|
-
else:
|
|
122
|
-
args = type(value), value
|
|
123
|
-
return super()._validate__type_args_(args)
|
|
124
|
-
|
|
125
|
-
@classmethod
|
|
126
|
-
def accept_unchecked(cls, value: Any) -> Self:
|
|
127
|
-
if isinstance(value, dict | tuple):
|
|
128
|
-
args = type(value), Identity(value)
|
|
129
|
-
else:
|
|
130
|
-
args = type(value), value
|
|
131
|
-
if args not in cls._parameterized_:
|
|
132
|
-
cls._parameterized_[args] = cls._get_parameterized(args)
|
|
133
|
-
return cls._parameterized_[args]._instance
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
class Identity[T]: # This is to allow accepting potentially unhashable values by using identity comparison
|
|
137
|
-
value: T
|
|
138
|
-
|
|
139
|
-
def __init__(self, value: T):
|
|
140
|
-
self.value = value
|
|
141
|
-
|
|
142
|
-
def __eq__(self, other):
|
|
143
|
-
return self is other
|
|
144
|
-
|
|
145
|
-
def __hash__(self):
|
|
146
|
-
return id(self)
|
|
147
|
-
|
|
148
|
-
def __str__(self):
|
|
149
|
-
return f"{type(self).__name__}({self.value})"
|
|
150
|
-
|
|
151
|
-
def __repr__(self):
|
|
152
|
-
return f"{type(self).__name__}({self.value!r})"
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
if TYPE_CHECKING:
|
|
156
|
-
type Comptime[T, V] = T | V
|
|
157
|
-
else:
|
|
158
|
-
_Comptime.__name__ = "Comptime"
|
|
159
|
-
_Comptime.__qualname__ = "Comptime"
|
|
160
|
-
globals()["Comptime"] = _Comptime
|
sonolus/script/random.py
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import random as _random
|
|
2
|
-
|
|
3
|
-
from sonolus.backend.ops import Op
|
|
4
|
-
from sonolus.script.internal.native import native_function
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
@native_function(Op.Random)
|
|
8
|
-
def random_float(lo: float = 0.0, hi: float = 1.0, /) -> float:
|
|
9
|
-
return lo + (hi - lo) * _random.random()
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
@native_function(Op.RandomInteger)
|
|
13
|
-
def random_integer(lo: int, hi: int, /) -> int:
|
|
14
|
-
return _random.randint(lo, hi)
|
sonolus/script/range.py
DELETED
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
from sonolus.script.iterator import ArrayLike, SonolusIterator
|
|
2
|
-
from sonolus.script.num import Num
|
|
3
|
-
from sonolus.script.record import Record
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
class Range(Record, ArrayLike[Num]):
|
|
7
|
-
start: int
|
|
8
|
-
end: int
|
|
9
|
-
step: int
|
|
10
|
-
|
|
11
|
-
def __new__(cls, start: Num, end: Num | None = None, step: Num = 1):
|
|
12
|
-
if end is None:
|
|
13
|
-
start, end = 0, start
|
|
14
|
-
return super().__new__(cls, start, end, step)
|
|
15
|
-
|
|
16
|
-
def __iter__(self) -> SonolusIterator:
|
|
17
|
-
return RangeIterator(self.start, self.end, self.step)
|
|
18
|
-
|
|
19
|
-
def __contains__(self, item):
|
|
20
|
-
if self.step > 0:
|
|
21
|
-
return self.start <= item < self.end and (item - self.start) % self.step == 0
|
|
22
|
-
else:
|
|
23
|
-
return self.end < item <= self.start and (self.start - item) % -self.step == 0
|
|
24
|
-
|
|
25
|
-
def size(self) -> int:
|
|
26
|
-
if self.step > 0:
|
|
27
|
-
diff = self.end - self.start
|
|
28
|
-
if diff <= 0:
|
|
29
|
-
return 0
|
|
30
|
-
return (diff + self.step - 1) // self.step
|
|
31
|
-
else:
|
|
32
|
-
diff = self.start - self.end
|
|
33
|
-
if diff <= 0:
|
|
34
|
-
return 0
|
|
35
|
-
return (diff - self.step - 1) // -self.step
|
|
36
|
-
|
|
37
|
-
def __getitem__(self, index: Num) -> Num:
|
|
38
|
-
return self.start + index * self.step
|
|
39
|
-
|
|
40
|
-
def __setitem__(self, index: Num, value: Num):
|
|
41
|
-
raise TypeError("Range does not support item assignment")
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
class RangeIterator(Record, SonolusIterator):
|
|
45
|
-
value: int
|
|
46
|
-
end: int
|
|
47
|
-
step: int
|
|
48
|
-
|
|
49
|
-
def has_next(self) -> bool:
|
|
50
|
-
if self.step > 0:
|
|
51
|
-
return self.value < self.end
|
|
52
|
-
else:
|
|
53
|
-
return self.value > self.end
|
|
54
|
-
|
|
55
|
-
def next(self) -> Num:
|
|
56
|
-
value = self.value
|
|
57
|
-
self.value += self.step
|
|
58
|
-
return value
|
|
@@ -1,84 +0,0 @@
|
|
|
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=9Ua4dW_GDzqaSimSbqwjJ4zVXS1M2bJhgHQ2H564eio,5536
|
|
5
|
-
sonolus/backend/blocks.py,sha256=3peyb9eYBy0s53xNVJ1KmK4IgoyVkkwG-lqDQ_VZTHc,18531
|
|
6
|
-
sonolus/backend/coalesce.py,sha256=ZKSGZrG5V4ShcjGJEhkFoMmJ1f9cEhySgXQkC9sibGQ,3939
|
|
7
|
-
sonolus/backend/constant_evaluation.py,sha256=5euKXPBlVZ5f17YaksUWC0vdDnJ_qQk2l8Wg8NFD1_4,15931
|
|
8
|
-
sonolus/backend/dead_code.py,sha256=iy8Cvc1OK4Dh68oJ6QdYqJRsTqPby08GDwu2fB_1JKs,3562
|
|
9
|
-
sonolus/backend/dominance.py,sha256=Ku0Zh8bW3ZvMVKcLdRWI-LSstgSB2s-iIdj34mD_HrA,3658
|
|
10
|
-
sonolus/backend/excepthook.py,sha256=pqI9gtPBh0mlTgMNqul8bEVO1ARzKb8pNE9EN_CyDpk,994
|
|
11
|
-
sonolus/backend/finalize.py,sha256=vDNUZ0KV3Z_q9sDSltxDoQqKoOf68l6LoM9jWUHpq8g,3330
|
|
12
|
-
sonolus/backend/flow.py,sha256=YlIu-iTVg8saZqobvsDP2dH_z1zBvTXiUCWsCMoGBbg,4222
|
|
13
|
-
sonolus/backend/inlining.py,sha256=xyV5LkkXn4BI4FyAI2UMdQdUXjIN4aKAS37W0pjawGE,6129
|
|
14
|
-
sonolus/backend/interpret.py,sha256=EDpkv3ASzteDhYjTkzoriGYHYepcoHKZusrU_FX0DS4,14247
|
|
15
|
-
sonolus/backend/ir.py,sha256=CzrSSFuA3zvw24BapGSTzBhUT83oETscODlrUWnyHWs,2087
|
|
16
|
-
sonolus/backend/liveness.py,sha256=PxbmPXsps3XpIdUp-bMFZLVRlaDEZLZt5T6v3_GVftQ,7095
|
|
17
|
-
sonolus/backend/mode.py,sha256=NkcPZJm8dn83LX35uP24MtQOCnfRDFZ280dHeEEfauE,613
|
|
18
|
-
sonolus/backend/node.py,sha256=H8qgnNyIseR-DhfgtcbDX03SUmhAJSSrYAlUEJTkkUo,999
|
|
19
|
-
sonolus/backend/ops.py,sha256=ekkHSdgRubIYLSYFk0wTUuBvyf3TKdApM4AyR_koTQ8,10122
|
|
20
|
-
sonolus/backend/optimize.py,sha256=1_P1MJx3GVJYlK7vheFtQWOvZFPsC2x0xFuXLQmnfwE,1082
|
|
21
|
-
sonolus/backend/passes.py,sha256=RWsDJnyVEBzzOppaC3JCg62SuuPoRbKF_Tik3Z75M0s,1634
|
|
22
|
-
sonolus/backend/place.py,sha256=61mWyPQ6i59bmV9RtQfUy6mJE0pMAmFoL1W-MyY79ug,2536
|
|
23
|
-
sonolus/backend/simplify.py,sha256=nFhHzEfzz7lZM5Thx5vaC4L7ahm8yQZmrN2hN5N5TKQ,1950
|
|
24
|
-
sonolus/backend/ssa.py,sha256=LPTmX7tJuuZ98CVf6M5YEqKEM9VxzM7qy-H4cYvD4M0,8116
|
|
25
|
-
sonolus/backend/utils.py,sha256=1C4xvxHrQ94RAWS3d4CprmUnFeqgEOzpZjJRooHVpS0,1382
|
|
26
|
-
sonolus/backend/visitor.py,sha256=RgkbYa5NP4dQbgerlpfD8qwkJPkHYaH9rFDB6NREp5Y,35855
|
|
27
|
-
sonolus/build/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
28
|
-
sonolus/build/cli.py,sha256=YlWg3Jfe1gi2wnlIJDh8LCMLSPV3l9AiuDWk2Bbphmg,5812
|
|
29
|
-
sonolus/build/collection.py,sha256=IsDgedsAJ-foHzQ4LnQ9zSVXSz5wVVt4sgqiUICBvCU,10573
|
|
30
|
-
sonolus/build/compile.py,sha256=mEtaWu7kFGYhAYZv28OGfflJ6oIkt0oVLJ9Va8R3atE,3547
|
|
31
|
-
sonolus/build/engine.py,sha256=C0xKUikTKETg2SaPGQpcq4MBhPK-JAkbD1dTPvT47Y0,6732
|
|
32
|
-
sonolus/build/level.py,sha256=3sdGPvIZ4a15u3-JdITnB6rznp6a2E3k6A0gB8A15JA,610
|
|
33
|
-
sonolus/build/node.py,sha256=jwsVWt6Brh4M9MypUt3Nqnxfm7fXrCMRWYQGwBTAszI,1162
|
|
34
|
-
sonolus/build/project.py,sha256=x350tPcwKCYakdbrP796b545hVUaBwrzY0yEcQR7ut4,4023
|
|
35
|
-
sonolus/script/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
36
|
-
sonolus/script/archetype.py,sha256=SnhVgoYEnpm3CVujaIWmCVsUG5BnqNhn5iI5h9C44jk,25542
|
|
37
|
-
sonolus/script/array.py,sha256=iqxLGq_52z9pn5NKChJZp_I4YCcTNWGcIWHQW7dScWo,8966
|
|
38
|
-
sonolus/script/bucket.py,sha256=7aOHsun-xvkwA9PTl0h9Bj3vXAgQauo5cjg2WkE3zNM,5356
|
|
39
|
-
sonolus/script/callbacks.py,sha256=vWzJG8uiJoEtsNnbeZPqOHogCwoLpz2D1MnHY2wVV8s,2801
|
|
40
|
-
sonolus/script/comptime.py,sha256=cMf1VsTU59Nw4fhuW1NkTi11qMRirTg5bsfpI_Bn09Q,4734
|
|
41
|
-
sonolus/script/containers.py,sha256=MPZNh7atddkrQ_Y3cky2q1psIvQJUoglf9kHpz_DYGU,7765
|
|
42
|
-
sonolus/script/debug.py,sha256=Y7TWr2-uctZEVmVvYzfTi32mIitgTcYKFhCTfBj1-88,2421
|
|
43
|
-
sonolus/script/easing.py,sha256=ziYd6zDsMBoVAhoN3vhaI60ywRt5pJU4dfuc-BbZt48,7519
|
|
44
|
-
sonolus/script/effect.py,sha256=Px9vhTh_0cZ4h9-R12eOXdKhYyiEvYCVwqGQ2Jh8_CQ,4015
|
|
45
|
-
sonolus/script/engine.py,sha256=7BHzBJFYPxJYOIvR9k6X8FV1oQAGcLNBzqaz3O6v_8Y,4758
|
|
46
|
-
sonolus/script/globals.py,sha256=W6mWmDbzWhZWuxFr8bmOhlZDCiWoJmYD1QOHBmZCX9o,8397
|
|
47
|
-
sonolus/script/graphics.py,sha256=1yk1d-d0YAQiq7GhVOtFFEo0DgGLvRXuJcNvz8SwG-4,5083
|
|
48
|
-
sonolus/script/instruction.py,sha256=WgUWtJwyzYRnYE7ykxQWVH0XVN_a63L7po4LG4vGedA,5398
|
|
49
|
-
sonolus/script/interval.py,sha256=exQb8guUbtTyDCuFytD3PQiEXGhDN9yoP9HiYL1H6iM,3266
|
|
50
|
-
sonolus/script/iterator.py,sha256=0_CRITyqR5IzpEFXpuPQlvAAOrDRNA4hmv4iFFHR20E,5299
|
|
51
|
-
sonolus/script/level.py,sha256=lcC6zHg3kp8Vm-pG96zASVPG16JeOp3ZR907snXdy18,1249
|
|
52
|
-
sonolus/script/math.py,sha256=s46jpHe2vrl9f6Zm7qI6cYR8NrwsypYfQLEihDGNx8E,2278
|
|
53
|
-
sonolus/script/num.py,sha256=ZJF1_H1y6bddmaVuU_-gSOFiFgpdcUjfoOU86GVBFgc,12491
|
|
54
|
-
sonolus/script/options.py,sha256=uufzFHft59FgdF1HTcv9FM3l0ZIjb8wCyhW9mESk_ZQ,5511
|
|
55
|
-
sonolus/script/particle.py,sha256=vjtI3EwSCjKM41nBmf6Qt3KtaXbHgIwBnn3RCNtDPHs,7387
|
|
56
|
-
sonolus/script/pointer.py,sha256=c_NoOHU8_PgglVAd6m3RkAO_JCdoD8wP_bZiE2OYFRc,1115
|
|
57
|
-
sonolus/script/print.py,sha256=vDgE42yw9f5kXFk-A4ppQgwgKNIjiUXS7GVIHZdhdmg,1564
|
|
58
|
-
sonolus/script/project.py,sha256=7K3iwUdSXAQyEAwcZvtfxgv3M0IaUaXSroUBEj4dnuA,416
|
|
59
|
-
sonolus/script/random.py,sha256=Mgo-fSnWRgOIowdQnPRtbUUdMmUB21tKnwe2d3sjggk,379
|
|
60
|
-
sonolus/script/range.py,sha256=D1nr_CvrfCwopiP2XVVVHQW3eDnDfLsQ7VKe-rEf1Tg,1695
|
|
61
|
-
sonolus/script/record.py,sha256=y06I56PcYJAxjNJiauuhV33mGiH3Z9Lz603_9N03PxE,10472
|
|
62
|
-
sonolus/script/runtime.py,sha256=vciRWn_WG9jyCU236cDXzwuigOtqzswKIJjAZxt1ob4,17100
|
|
63
|
-
sonolus/script/sprite.py,sha256=vNl67okRBOFi3IoXVGOHPt8k9TJQqb9EscxwHnWqlrE,12989
|
|
64
|
-
sonolus/script/text.py,sha256=UPXw8xyGW0sSJR8uiZyDIVF5MtNV9MbyI-AfYZPqHro,12989
|
|
65
|
-
sonolus/script/timing.py,sha256=utAry65nkeDKBT-r_AYz-mWkgylBhiUUMordA3pDhLk,1028
|
|
66
|
-
sonolus/script/transform.py,sha256=ROPm1HjJnP--Jhw2ziHQHns0kyF6b6m2P949Ispp9Mc,5650
|
|
67
|
-
sonolus/script/ui.py,sha256=F-yFndriiqWRHaAOQ7WtnjPIHHQuhAYHMwtFaZM6OJ4,4488
|
|
68
|
-
sonolus/script/values.py,sha256=TyRxHjuvtXlQpKGyVRg0T8fJgXMboKY4TZxQ3lFR4bs,1261
|
|
69
|
-
sonolus/script/vec.py,sha256=tucqiZGFlUEwZQSGKmuacwfP2FiH-94C-crvr7Dt51w,2122
|
|
70
|
-
sonolus/script/internal/__init__.py,sha256=T6rzLoiOUaiSQtaHMZ88SNO-ijSjSSv33TKtUwu-Ms8,136
|
|
71
|
-
sonolus/script/internal/builtin_impls.py,sha256=qo1ZIgZ_FQl6O6CftuDqxuANObv3vzD7KT3bM30SbvU,4012
|
|
72
|
-
sonolus/script/internal/context.py,sha256=lN1Lmh5sB7GTjX10V2vUhGgCBfUsVoDHzweUY3VCd_s,13060
|
|
73
|
-
sonolus/script/internal/descriptor.py,sha256=XRFey-EjiAm_--KsNl-8N0Mi_iyQwlPh68gDp0pKf3E,392
|
|
74
|
-
sonolus/script/internal/error.py,sha256=ZNnsvQVQAnFKzcvsm6-sste2lo-tP5pPI8sD7XlAZWc,490
|
|
75
|
-
sonolus/script/internal/generic.py,sha256=-rhFatYZLrDE3RFgDWu_Zto3funHXmMr3QuyxajaWKU,7356
|
|
76
|
-
sonolus/script/internal/impl.py,sha256=tnIaQCmw0SlFpmnSJp2aEys9XVxoj0Vi8Yf6SP-oUAQ,2321
|
|
77
|
-
sonolus/script/internal/introspection.py,sha256=KBhs_cQxfQpXyFusz3R6O1YkA6ahQni8A2_h5W2A-c0,544
|
|
78
|
-
sonolus/script/internal/native.py,sha256=YKx4uX6Y1cJaoLWpS8oQbWzHMZA5SSCE2cfeyv-nQkY,1518
|
|
79
|
-
sonolus/script/internal/value.py,sha256=ik9sMKl0TbsH_C6QNxD4WfpAnmBFISgmmlazWwh3kY0,4308
|
|
80
|
-
sonolus_py-0.1.4.dist-info/METADATA,sha256=QciwdolhqTIFmhm7mxBs5MBZzFuoEdIBZgijIQawbUQ,216
|
|
81
|
-
sonolus_py-0.1.4.dist-info/WHEEL,sha256=C2FUgwZgiLbznR-k0b_5k3Ai_1aASOXDss3lzCUsUug,87
|
|
82
|
-
sonolus_py-0.1.4.dist-info/entry_points.txt,sha256=oTYspY_b7SA8TptEMTDxh4-Aj-ZVPnYC9f1lqH6s9G4,54
|
|
83
|
-
sonolus_py-0.1.4.dist-info/licenses/LICENSE,sha256=JEKpqVhQYfEc7zg3Mj462sKbKYmO1K7WmvX1qvg9IJk,1067
|
|
84
|
-
sonolus_py-0.1.4.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|