sonolus.py 0.3.0__py3-none-any.whl → 0.3.2__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/node.py +13 -5
- sonolus/backend/optimize/allocate.py +41 -4
- sonolus/backend/optimize/flow.py +24 -7
- sonolus/backend/optimize/optimize.py +2 -9
- sonolus/backend/utils.py +6 -1
- sonolus/backend/visitor.py +47 -14
- sonolus/build/cli.py +6 -1
- sonolus/build/engine.py +1 -1
- sonolus/script/archetype.py +27 -17
- sonolus/script/array.py +15 -5
- sonolus/script/array_like.py +5 -3
- sonolus/script/containers.py +3 -3
- sonolus/script/debug.py +66 -8
- sonolus/script/globals.py +17 -0
- sonolus/script/internal/builtin_impls.py +2 -3
- sonolus/script/internal/context.py +50 -0
- sonolus/script/internal/simulation_context.py +131 -0
- sonolus/script/internal/tuple_impl.py +15 -10
- sonolus/script/iterator.py +3 -2
- sonolus/script/num.py +13 -3
- sonolus/script/options.py +24 -1
- sonolus/script/quad.py +2 -0
- sonolus/script/record.py +22 -3
- sonolus/script/runtime.py +383 -0
- sonolus/script/stream.py +149 -17
- sonolus/script/transform.py +289 -0
- sonolus/script/values.py +9 -3
- {sonolus_py-0.3.0.dist-info → sonolus_py-0.3.2.dist-info}/METADATA +1 -1
- {sonolus_py-0.3.0.dist-info → sonolus_py-0.3.2.dist-info}/RECORD +32 -31
- {sonolus_py-0.3.0.dist-info → sonolus_py-0.3.2.dist-info}/WHEEL +0 -0
- {sonolus_py-0.3.0.dist-info → sonolus_py-0.3.2.dist-info}/entry_points.txt +0 -0
- {sonolus_py-0.3.0.dist-info → sonolus_py-0.3.2.dist-info}/licenses/LICENSE +0 -0
sonolus/script/transform.py
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
from math import cos, sin
|
|
2
2
|
from typing import Self
|
|
3
3
|
|
|
4
|
+
from sonolus.script.interval import lerp, remap
|
|
4
5
|
from sonolus.script.quad import Quad, QuadLike
|
|
5
6
|
from sonolus.script.record import Record
|
|
6
7
|
from sonolus.script.vec import Vec2
|
|
@@ -396,3 +397,291 @@ class Transform2d(Record):
|
|
|
396
397
|
tl=self.transform_vec(quad.tl),
|
|
397
398
|
tr=self.transform_vec(quad.tr),
|
|
398
399
|
)
|
|
400
|
+
|
|
401
|
+
|
|
402
|
+
class InvertibleTransform2d(Record):
|
|
403
|
+
"""A transformation matrix for 2D points that can be inverted.
|
|
404
|
+
|
|
405
|
+
Usage:
|
|
406
|
+
```python
|
|
407
|
+
InvertibleTransform2d.new()
|
|
408
|
+
```
|
|
409
|
+
"""
|
|
410
|
+
|
|
411
|
+
forward: Transform2d
|
|
412
|
+
inverse: Transform2d
|
|
413
|
+
|
|
414
|
+
@classmethod
|
|
415
|
+
def new(cls) -> Self:
|
|
416
|
+
"""Create a new identity transform.
|
|
417
|
+
|
|
418
|
+
Returns:
|
|
419
|
+
A new identity transform.
|
|
420
|
+
"""
|
|
421
|
+
return cls(
|
|
422
|
+
forward=Transform2d.new(),
|
|
423
|
+
inverse=Transform2d.new(),
|
|
424
|
+
)
|
|
425
|
+
|
|
426
|
+
def translate(self, translation: Vec2, /) -> Self:
|
|
427
|
+
"""Translate along the x and y axes and return a new transform.
|
|
428
|
+
|
|
429
|
+
Args:
|
|
430
|
+
translation: The translation vector.
|
|
431
|
+
|
|
432
|
+
Returns:
|
|
433
|
+
A new invertible transform after translation.
|
|
434
|
+
"""
|
|
435
|
+
return InvertibleTransform2d(
|
|
436
|
+
forward=self.forward.translate(translation),
|
|
437
|
+
inverse=Transform2d.new().translate(-translation).compose(self.inverse),
|
|
438
|
+
)
|
|
439
|
+
|
|
440
|
+
def scale(self, factor: Vec2, /) -> Self:
|
|
441
|
+
"""Scale about the origin and return a new transform.
|
|
442
|
+
|
|
443
|
+
Args:
|
|
444
|
+
factor: The scale factor vector.
|
|
445
|
+
|
|
446
|
+
Returns:
|
|
447
|
+
A new invertible transform after scaling.
|
|
448
|
+
"""
|
|
449
|
+
return InvertibleTransform2d(
|
|
450
|
+
forward=self.forward.scale(factor),
|
|
451
|
+
inverse=Transform2d.new().scale(Vec2.one() / factor).compose(self.inverse),
|
|
452
|
+
)
|
|
453
|
+
|
|
454
|
+
def scale_about(self, factor: Vec2, /, pivot: Vec2) -> Self:
|
|
455
|
+
"""Scale about the pivot and return a new transform.
|
|
456
|
+
|
|
457
|
+
Args:
|
|
458
|
+
factor: The scale factor vector.
|
|
459
|
+
pivot: The pivot point for scaling.
|
|
460
|
+
|
|
461
|
+
Returns:
|
|
462
|
+
A new invertible transform after scaling.
|
|
463
|
+
"""
|
|
464
|
+
return InvertibleTransform2d(
|
|
465
|
+
forward=self.forward.scale_about(factor, pivot),
|
|
466
|
+
inverse=Transform2d.new().scale_about(Vec2.one() / factor, pivot).compose(self.inverse),
|
|
467
|
+
)
|
|
468
|
+
|
|
469
|
+
def rotate(self, angle: float, /) -> Self:
|
|
470
|
+
"""Rotate about the origin and return a new transform.
|
|
471
|
+
|
|
472
|
+
Args:
|
|
473
|
+
angle: The angle of rotation in radians.
|
|
474
|
+
|
|
475
|
+
Returns:
|
|
476
|
+
A new invertible transform after rotation.
|
|
477
|
+
"""
|
|
478
|
+
return InvertibleTransform2d(
|
|
479
|
+
forward=self.forward.rotate(angle),
|
|
480
|
+
inverse=Transform2d.new().rotate(-angle).compose(self.inverse),
|
|
481
|
+
)
|
|
482
|
+
|
|
483
|
+
def rotate_about(self, angle: float, /, pivot: Vec2) -> Self:
|
|
484
|
+
"""Rotate about the pivot and return a new transform.
|
|
485
|
+
|
|
486
|
+
Args:
|
|
487
|
+
angle: The angle of rotation in radians.
|
|
488
|
+
pivot: The pivot point for rotation.
|
|
489
|
+
|
|
490
|
+
Returns:
|
|
491
|
+
A new invertible transform after rotation.
|
|
492
|
+
"""
|
|
493
|
+
return InvertibleTransform2d(
|
|
494
|
+
forward=self.forward.rotate_about(angle, pivot),
|
|
495
|
+
inverse=Transform2d.new().rotate_about(-angle, pivot).compose(self.inverse),
|
|
496
|
+
)
|
|
497
|
+
|
|
498
|
+
def shear_x(self, m: float, /) -> Self:
|
|
499
|
+
"""Shear along the x-axis and return a new transform.
|
|
500
|
+
|
|
501
|
+
Args:
|
|
502
|
+
m: The shear factor along the x-axis.
|
|
503
|
+
|
|
504
|
+
Returns:
|
|
505
|
+
A new invertible transform after shearing.
|
|
506
|
+
"""
|
|
507
|
+
return InvertibleTransform2d(
|
|
508
|
+
forward=self.forward.shear_x(m),
|
|
509
|
+
inverse=Transform2d.new().shear_x(-m).compose(self.inverse),
|
|
510
|
+
)
|
|
511
|
+
|
|
512
|
+
def shear_y(self, m: float, /) -> Self:
|
|
513
|
+
"""Shear along the y-axis and return a new transform.
|
|
514
|
+
|
|
515
|
+
Args:
|
|
516
|
+
m: The shear factor along the y-axis.
|
|
517
|
+
|
|
518
|
+
Returns:
|
|
519
|
+
A new invertible transform after shearing.
|
|
520
|
+
"""
|
|
521
|
+
return InvertibleTransform2d(
|
|
522
|
+
forward=self.forward.shear_y(m),
|
|
523
|
+
inverse=Transform2d.new().shear_y(-m).compose(self.inverse),
|
|
524
|
+
)
|
|
525
|
+
|
|
526
|
+
def simple_perspective_x(self, x: float, /) -> Self:
|
|
527
|
+
"""Apply perspective along the x-axis with vanishing point at the given x coordinate and return a new transform.
|
|
528
|
+
|
|
529
|
+
Args:
|
|
530
|
+
x: The x coordinate of the vanishing point.
|
|
531
|
+
|
|
532
|
+
Returns:
|
|
533
|
+
A new invertible transform after applying perspective.
|
|
534
|
+
"""
|
|
535
|
+
return InvertibleTransform2d(
|
|
536
|
+
forward=self.forward.simple_perspective_x(x),
|
|
537
|
+
inverse=Transform2d.new().simple_perspective_x(-x).compose(self.inverse),
|
|
538
|
+
)
|
|
539
|
+
|
|
540
|
+
def simple_perspective_y(self, y: float, /) -> Self:
|
|
541
|
+
"""Apply perspective along the y-axis with vanishing point at the given y coordinate and return a new transform.
|
|
542
|
+
|
|
543
|
+
Args:
|
|
544
|
+
y: The y coordinate of the vanishing point.
|
|
545
|
+
|
|
546
|
+
Returns:
|
|
547
|
+
A new invertible transform after applying perspective.
|
|
548
|
+
"""
|
|
549
|
+
return InvertibleTransform2d(
|
|
550
|
+
forward=self.forward.simple_perspective_y(y),
|
|
551
|
+
inverse=Transform2d.new().simple_perspective_y(-y).compose(self.inverse),
|
|
552
|
+
)
|
|
553
|
+
|
|
554
|
+
def perspective_x(self, foreground_x: float, vanishing_point: Vec2, /) -> Self:
|
|
555
|
+
"""Apply a perspective transformation along the x-axis and return a new transform.
|
|
556
|
+
|
|
557
|
+
Args:
|
|
558
|
+
foreground_x: The foreground x-coordinate.
|
|
559
|
+
vanishing_point: The vanishing point vector.
|
|
560
|
+
|
|
561
|
+
Returns:
|
|
562
|
+
A new invertible transform after applying perspective.
|
|
563
|
+
"""
|
|
564
|
+
return InvertibleTransform2d(
|
|
565
|
+
forward=self.forward.perspective_x(foreground_x, vanishing_point),
|
|
566
|
+
inverse=Transform2d.new().inverse_perspective_x(foreground_x, vanishing_point).compose(self.inverse),
|
|
567
|
+
)
|
|
568
|
+
|
|
569
|
+
def perspective_y(self, foreground_y: float, vanishing_point: Vec2, /) -> Self:
|
|
570
|
+
"""Apply a perspective transformation along the y-axis and return a new transform.
|
|
571
|
+
|
|
572
|
+
Args:
|
|
573
|
+
foreground_y: The foreground y-coordinate.
|
|
574
|
+
vanishing_point: The vanishing point vector.
|
|
575
|
+
|
|
576
|
+
Returns:
|
|
577
|
+
A new invertible transform after applying perspective.
|
|
578
|
+
"""
|
|
579
|
+
return InvertibleTransform2d(
|
|
580
|
+
forward=self.forward.perspective_y(foreground_y, vanishing_point),
|
|
581
|
+
inverse=Transform2d.new().inverse_perspective_y(foreground_y, vanishing_point).compose(self.inverse),
|
|
582
|
+
)
|
|
583
|
+
|
|
584
|
+
def normalize(self) -> Self:
|
|
585
|
+
"""Normalize the transform to have a 1 in the bottom right corner and return a new transform.
|
|
586
|
+
|
|
587
|
+
This may fail in some special cases involving perspective transformations where the bottom right corner is 0.
|
|
588
|
+
|
|
589
|
+
Returns:
|
|
590
|
+
A new normalized invertible transform.
|
|
591
|
+
"""
|
|
592
|
+
return InvertibleTransform2d(
|
|
593
|
+
forward=self.forward.normalize(),
|
|
594
|
+
inverse=self.inverse.normalize(),
|
|
595
|
+
)
|
|
596
|
+
|
|
597
|
+
def compose(self, other: Self, /) -> Self:
|
|
598
|
+
"""Compose with another invertible transform which is applied after this transform and return a new transform.
|
|
599
|
+
|
|
600
|
+
Args:
|
|
601
|
+
other: The other invertible transform to compose with.
|
|
602
|
+
|
|
603
|
+
Returns:
|
|
604
|
+
A new invertible transform resulting from the composition.
|
|
605
|
+
"""
|
|
606
|
+
return InvertibleTransform2d(
|
|
607
|
+
forward=self.forward.compose(other.forward),
|
|
608
|
+
inverse=other.inverse.compose(self.inverse),
|
|
609
|
+
)
|
|
610
|
+
|
|
611
|
+
def compose_before(self, other: Self, /) -> Self:
|
|
612
|
+
"""Compose with another invertible transform which is applied before this transform and return a new transform.
|
|
613
|
+
|
|
614
|
+
Args:
|
|
615
|
+
other: The other invertible transform to compose with.
|
|
616
|
+
|
|
617
|
+
Returns:
|
|
618
|
+
A new invertible transform resulting from the composition.
|
|
619
|
+
"""
|
|
620
|
+
return other.compose(self)
|
|
621
|
+
|
|
622
|
+
def transform_vec(self, v: Vec2) -> Vec2:
|
|
623
|
+
"""Transform a [`Vec2`][sonolus.script.vec.Vec2] and return a new [`Vec2`][sonolus.script.vec.Vec2].
|
|
624
|
+
|
|
625
|
+
Args:
|
|
626
|
+
v: The vector to transform.
|
|
627
|
+
|
|
628
|
+
Returns:
|
|
629
|
+
A new transformed vector.
|
|
630
|
+
"""
|
|
631
|
+
return self.forward.transform_vec(v)
|
|
632
|
+
|
|
633
|
+
def inverse_transform_vec(self, v: Vec2) -> Vec2:
|
|
634
|
+
"""Inverse transform a [`Vec2`][sonolus.script.vec.Vec2] and return a new [`Vec2`][sonolus.script.vec.Vec2].
|
|
635
|
+
|
|
636
|
+
Args:
|
|
637
|
+
v: The vector to inverse transform.
|
|
638
|
+
|
|
639
|
+
Returns:
|
|
640
|
+
A new inverse transformed vector.
|
|
641
|
+
"""
|
|
642
|
+
return self.inverse.transform_vec(v)
|
|
643
|
+
|
|
644
|
+
def transform_quad(self, quad: QuadLike) -> Quad:
|
|
645
|
+
"""Transform a [`Quad`][sonolus.script.quad.Quad] and return a new [`Quad`][sonolus.script.quad.Quad].
|
|
646
|
+
|
|
647
|
+
Args:
|
|
648
|
+
quad: The quad to transform.
|
|
649
|
+
|
|
650
|
+
Returns:
|
|
651
|
+
A new transformed quad.
|
|
652
|
+
"""
|
|
653
|
+
return self.forward.transform_quad(quad)
|
|
654
|
+
|
|
655
|
+
def inverse_transform_quad(self, quad: QuadLike) -> Quad:
|
|
656
|
+
"""Inverse transform a [`Quad`][sonolus.script.quad.Quad] and return a new [`Quad`][sonolus.script.quad.Quad].
|
|
657
|
+
|
|
658
|
+
Args:
|
|
659
|
+
quad: The quad to inverse transform.
|
|
660
|
+
|
|
661
|
+
Returns:
|
|
662
|
+
A new inverse transformed quad.
|
|
663
|
+
"""
|
|
664
|
+
return self.inverse.transform_quad(quad)
|
|
665
|
+
|
|
666
|
+
|
|
667
|
+
def perspective_approach(
|
|
668
|
+
distance_ratio: float,
|
|
669
|
+
progress: float,
|
|
670
|
+
) -> float:
|
|
671
|
+
"""Calculate the perspective correct approach curve given the initial distance, target distance, and progress.
|
|
672
|
+
|
|
673
|
+
For typical engines with stage tilt, distance_ratio is the displayed width of a lane at the judge line divided
|
|
674
|
+
by the displayed width of a lane at note spawn. For flat stages, this will be 1.0, and this function would simply
|
|
675
|
+
return progress unchanged.
|
|
676
|
+
|
|
677
|
+
Args:
|
|
678
|
+
distance_ratio: The ratio of the distance at note spawn to the distance at the judge line.
|
|
679
|
+
progress: The progress value, where 0 corresponds to note spawn and 1 corresponds to the judge line.
|
|
680
|
+
|
|
681
|
+
Returns:
|
|
682
|
+
The perspective-corrected progress value.
|
|
683
|
+
"""
|
|
684
|
+
d_0 = distance_ratio
|
|
685
|
+
d_1 = 1.0
|
|
686
|
+
d = max(lerp(d_0, d_1, progress), 1e-6) # Avoid a zero or negative distance
|
|
687
|
+
return remap(1 / d_0, 1 / d_1, 0, 1, 1 / d)
|
sonolus/script/values.py
CHANGED
|
@@ -19,13 +19,19 @@ def alloc[T](type_: type[T]) -> T:
|
|
|
19
19
|
|
|
20
20
|
@meta_fn
|
|
21
21
|
def zeros[T](type_: type[T]) -> T:
|
|
22
|
-
"""Make a new instance of the given type initialized with zeros.
|
|
22
|
+
"""Make a new instance of the given type initialized with zeros.
|
|
23
|
+
|
|
24
|
+
Generally works the same as the unary `+` operator on record and array types.
|
|
25
|
+
"""
|
|
23
26
|
return validate_concrete_type(type_)._zero_()
|
|
24
27
|
|
|
25
28
|
|
|
26
29
|
@meta_fn
|
|
27
30
|
def copy[T](value: T) -> T:
|
|
28
|
-
"""Make a deep copy of the given value.
|
|
31
|
+
"""Make a deep copy of the given value.
|
|
32
|
+
|
|
33
|
+
Generally works the same as the unary `+` operator on records and arrays.
|
|
34
|
+
"""
|
|
29
35
|
value = validate_value(value)
|
|
30
36
|
if ctx():
|
|
31
37
|
return value._copy_()
|
|
@@ -34,7 +40,7 @@ def copy[T](value: T) -> T:
|
|
|
34
40
|
|
|
35
41
|
|
|
36
42
|
def swap[T](a: T, b: T):
|
|
37
|
-
"""Swap the values of the two
|
|
43
|
+
"""Swap the values of the two provided mutable values."""
|
|
38
44
|
temp = copy(a)
|
|
39
45
|
a @= b
|
|
40
46
|
b @= temp
|
|
@@ -7,70 +7,70 @@ sonolus/backend/finalize.py,sha256=vNUGLCUDxNqXGxweNRA1NpRvtij7Tks9to1V_JTs7Jo,4
|
|
|
7
7
|
sonolus/backend/interpret.py,sha256=B0jqlLmEGoyO2mxpcvwRwV17Tq_gOE9wLNt26Q5QOfs,14306
|
|
8
8
|
sonolus/backend/ir.py,sha256=TCDLMvlX2S8emFDQwFVeD2OUC4fnhbrMObgYtoa_7PQ,2845
|
|
9
9
|
sonolus/backend/mode.py,sha256=NkcPZJm8dn83LX35uP24MtQOCnfRDFZ280dHeEEfauE,613
|
|
10
|
-
sonolus/backend/node.py,sha256=
|
|
10
|
+
sonolus/backend/node.py,sha256=eEzPP14jzWJp2xrZCAaPlNtokxdoqg0bSM7xQiwx1j8,1254
|
|
11
11
|
sonolus/backend/ops.py,sha256=7DERBPU6z9Bz3i6UxyLdFTXYcCpvRZVNWw4ZQ-Djwnk,10510
|
|
12
12
|
sonolus/backend/place.py,sha256=jABvLNNE-2pklTcb9WnyfHK8c-tYxn0ObsoLp5LYd5I,4703
|
|
13
|
-
sonolus/backend/utils.py,sha256=
|
|
14
|
-
sonolus/backend/visitor.py,sha256=
|
|
13
|
+
sonolus/backend/utils.py,sha256=BuJHI-qTVn-vYlQkSr4fSDPpgckkiO2RJmwlDXY_KzM,1818
|
|
14
|
+
sonolus/backend/visitor.py,sha256=DyFXhhSMtpn0T0muQZz59pfbCMJtapz59CxctqRGxyk,49315
|
|
15
15
|
sonolus/backend/optimize/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
16
|
-
sonolus/backend/optimize/allocate.py,sha256
|
|
16
|
+
sonolus/backend/optimize/allocate.py,sha256=-cpnCQ7S6wH3y-hCUGb2KT5TMuREifhsMXMI0-YtNjY,7380
|
|
17
17
|
sonolus/backend/optimize/constant_evaluation.py,sha256=ozYB__haE2A_L2NBh2H3IT__Z65FBBtbjh6BJfQRC_A,15988
|
|
18
18
|
sonolus/backend/optimize/copy_coalesce.py,sha256=4vUe-y2w8sGyrguSlp8O_p0uy9rEUu5M-smI0F5UMQw,4404
|
|
19
19
|
sonolus/backend/optimize/dead_code.py,sha256=qYmUqBmAp-O5mUpNusOoMEJVkbc9YIHx6Ynrg6dyNGY,8077
|
|
20
20
|
sonolus/backend/optimize/dominance.py,sha256=oTFUqN8twrw6lTzqr1nlYs-Gk1NzIa-4qGdEQvDGzlM,3217
|
|
21
|
-
sonolus/backend/optimize/flow.py,sha256=
|
|
21
|
+
sonolus/backend/optimize/flow.py,sha256=poqsv1BKPIencXjFNJT4Wn0R5UuCiEWGnNv1pWdrCH0,4771
|
|
22
22
|
sonolus/backend/optimize/inlining.py,sha256=jwTiuHivSq9bB7FfVbD9Wd_Ztaz8ml_5CRnikr2d6yU,5719
|
|
23
23
|
sonolus/backend/optimize/liveness.py,sha256=c0ejVf1LNcYBlByf3rxkNs18IoXmiOdCFwEk3Afv8DE,7121
|
|
24
|
-
sonolus/backend/optimize/optimize.py,sha256=
|
|
24
|
+
sonolus/backend/optimize/optimize.py,sha256=MEyQHwAj3enyMZsh-pQUTCgcqUjuc5diYq7BFe7fQwM,1324
|
|
25
25
|
sonolus/backend/optimize/passes.py,sha256=BQy-BovGu234Y12c-vpBmTaNNl9oeW4qZ8A3q5y5nLs,1684
|
|
26
26
|
sonolus/backend/optimize/simplify.py,sha256=Tz4RftjH5TpIxoIOwiZuLchsrwzI9GaS_exdjAW6HKk,7927
|
|
27
27
|
sonolus/backend/optimize/ssa.py,sha256=D3CQm3s3gcuU0_k_0pXVrwirm4xjAZsX6corrTDS1Co,9013
|
|
28
28
|
sonolus/build/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
29
|
-
sonolus/build/cli.py,sha256=
|
|
29
|
+
sonolus/build/cli.py,sha256=L-djaIsD6Pgo2_5sGXEUfyKYsNU7aikpV-D8N1vKZho,8964
|
|
30
30
|
sonolus/build/collection.py,sha256=kOVnpQC_KHAsyTM4nAplSh6QE16CgO-H6PP1GItWm78,12187
|
|
31
31
|
sonolus/build/compile.py,sha256=nWtQRao_k-ChJhjmYFpPMRlPgxFI0t9wtMWSRHQcnbQ,5586
|
|
32
|
-
sonolus/build/engine.py,sha256=
|
|
32
|
+
sonolus/build/engine.py,sha256=F5p7lyhYkRvWG-cyWSmkFsOx6LvP_DNTzrozIx4MdBc,11178
|
|
33
33
|
sonolus/build/level.py,sha256=AjvK4725nqDcg7oGn5kWocBdG-AcirXpku74T7c2epA,673
|
|
34
34
|
sonolus/build/node.py,sha256=gnX71RYDUOK_gYMpinQi-bLWO4csqcfiG5gFmhxzSec,1330
|
|
35
35
|
sonolus/build/project.py,sha256=DhNqgHnm73qKUOhrg1JPlWEL0Vg7VxcGUbNokpMWzVE,6315
|
|
36
36
|
sonolus/script/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
37
|
-
sonolus/script/archetype.py,sha256=
|
|
38
|
-
sonolus/script/array.py,sha256=
|
|
39
|
-
sonolus/script/array_like.py,sha256=
|
|
37
|
+
sonolus/script/archetype.py,sha256=3pvTrQbVimNeU9EDO_2RVoqak3EF0D67OEnCcdaWz1w,40548
|
|
38
|
+
sonolus/script/array.py,sha256=RxdZ-2Df-sYhiMT1xMsPJEGX1oCtDIE3TTntRsk56iA,11760
|
|
39
|
+
sonolus/script/array_like.py,sha256=wFw_drg6aPk_17upAl2G2l-i5fE3rzaUtB8kYEkyJEk,8557
|
|
40
40
|
sonolus/script/bucket.py,sha256=YFSyKS4ZngxerBlKwFBSCRAVewgQdwZ1-NqfPKcPZxI,7519
|
|
41
|
-
sonolus/script/containers.py,sha256=
|
|
42
|
-
sonolus/script/debug.py,sha256=
|
|
41
|
+
sonolus/script/containers.py,sha256=PXwixFp1k1gqjp-gMfnlE1IadEfavFzAS99XH8kaw8Q,17640
|
|
42
|
+
sonolus/script/debug.py,sha256=JIMcGD6cQVWtIw3IIhq-5WenZZu0iArH6SAS1-XfR_8,5076
|
|
43
43
|
sonolus/script/easing.py,sha256=7zaDKIfM_whUpb4FBz1DAF4NNG2vk_nDjl8kL2Y90aU,11396
|
|
44
44
|
sonolus/script/effect.py,sha256=V9bJvMzs1O4C1PjTOKgsAXov-l4AnDb2h38-DzmeWpI,5838
|
|
45
45
|
sonolus/script/engine.py,sha256=BhhQTrHuGAAAD6JPQ3R0jvHdimwW83PPghEIdAdtGMA,10683
|
|
46
|
-
sonolus/script/globals.py,sha256=
|
|
46
|
+
sonolus/script/globals.py,sha256=gUvSbxXW1ZOsyQF6qb5iMRnW-eRrg07rWOK1PAYRwsE,9741
|
|
47
47
|
sonolus/script/instruction.py,sha256=PNfxC1dhT_hB0BxhDV3KXMn_kKxfI0t1iZmg8m6ddMU,6725
|
|
48
48
|
sonolus/script/interval.py,sha256=IYNgJx0ngREnEVu_yMAu0MrA_Q7mZuToT8U3fbdb3Sc,9122
|
|
49
|
-
sonolus/script/iterator.py,sha256=
|
|
49
|
+
sonolus/script/iterator.py,sha256=wH6IM3ozLuMtCJZzhahIN3o2ykwUzDftU7ylbWo2UF8,4575
|
|
50
50
|
sonolus/script/level.py,sha256=wR23xk-NOcW_JMRb3R12sqIXCLSZL-7cM3y7IpMF1J0,6333
|
|
51
51
|
sonolus/script/metadata.py,sha256=ttRK27eojHf3So50KQJ-8yj3udZoN1bli5iD-knaeLw,753
|
|
52
|
-
sonolus/script/num.py,sha256=
|
|
53
|
-
sonolus/script/options.py,sha256=
|
|
52
|
+
sonolus/script/num.py,sha256=6un0Vdaporn0Ft_T71FlUAY57IFjJkCdio91e7FV6KU,15130
|
|
53
|
+
sonolus/script/options.py,sha256=OqvIPgdHbj03Ffzn857R_SrSJVUstrGy8o7Em6vv0y4,9419
|
|
54
54
|
sonolus/script/particle.py,sha256=oeVQF01xOeW2BEn04ZK1ZOP2HGvQzxBJCpITFjy9woQ,8353
|
|
55
55
|
sonolus/script/pointer.py,sha256=IH2_a0XE76uG_UyYM9jAYIf7qZ5LhUNc9ksXDIvAPZA,1511
|
|
56
56
|
sonolus/script/printing.py,sha256=mNYu9QWiacBBGZrnePZQMVwbbguoelUps9GiOK_aVRU,2096
|
|
57
57
|
sonolus/script/project.py,sha256=jLndgGJHdkqFYe-lDl_IzTjQ4gOSuy80en8WoSWXnB8,3340
|
|
58
|
-
sonolus/script/quad.py,sha256=
|
|
59
|
-
sonolus/script/record.py,sha256=
|
|
60
|
-
sonolus/script/runtime.py,sha256=
|
|
58
|
+
sonolus/script/quad.py,sha256=QgA4CdgLPGm2MtANKZPpxaM0qyh3DjxcXZi3D2QuLQs,10213
|
|
59
|
+
sonolus/script/record.py,sha256=ZgQPmkA1GGoQ7aVpMB2xQ3ju4cyTru7nzEVl76P6dV0,12356
|
|
60
|
+
sonolus/script/runtime.py,sha256=8UOedRhtnLQofChpApS-DHZh0VjEWBBktWsNaEubatQ,32245
|
|
61
61
|
sonolus/script/sprite.py,sha256=CMcRAZ2hejXnaBmY2_n1_rj6hGOgPP5zEW-BpyaEVOY,16256
|
|
62
|
-
sonolus/script/stream.py,sha256=
|
|
62
|
+
sonolus/script/stream.py,sha256=S6ukJ251EHQaSYxuqqYa0BO_LGImYgNqd512rc_l_vA,24062
|
|
63
63
|
sonolus/script/text.py,sha256=wxujIgKYcCfl2AD2_Im8g3vh0lDEHYwTSRZg9wsBPEU,13402
|
|
64
64
|
sonolus/script/timing.py,sha256=ZR0ypV2PIoDCMHHGOMfCeezStCsBQdzomdqaz5VKex0,2981
|
|
65
|
-
sonolus/script/transform.py,sha256=
|
|
65
|
+
sonolus/script/transform.py,sha256=qtqh_Dpom698VrkKeMZLD3DjWtd3utkqx_nLrrIyWyY,20740
|
|
66
66
|
sonolus/script/ui.py,sha256=DYPGWIjHj1IFPxW1zaEuIUQx0b32FJPXtiwCvrtJ6oo,7528
|
|
67
|
-
sonolus/script/values.py,sha256=
|
|
67
|
+
sonolus/script/values.py,sha256=woSW3we5OZZ1IaO3Qr0OAs_yuIpAzGw_IjwELKQHzv4,1469
|
|
68
68
|
sonolus/script/vec.py,sha256=4ntfJ96zxKR-nVZluUgHd-Ud4vNfButfiv7EsroZxfE,7002
|
|
69
69
|
sonolus/script/internal/__init__.py,sha256=T6rzLoiOUaiSQtaHMZ88SNO-ijSjSSv33TKtUwu-Ms8,136
|
|
70
|
-
sonolus/script/internal/builtin_impls.py,sha256=
|
|
70
|
+
sonolus/script/internal/builtin_impls.py,sha256=3e1jzDtyyB1QiCqkp4bRhLnnTMlviBi0QjKvhYwd3q8,8209
|
|
71
71
|
sonolus/script/internal/callbacks.py,sha256=vWzJG8uiJoEtsNnbeZPqOHogCwoLpz2D1MnHY2wVV8s,2801
|
|
72
72
|
sonolus/script/internal/constant.py,sha256=k4kIBoy-c74UbfUR7GKzyTT6syhE-lSRJfw0nGuc8ZY,3904
|
|
73
|
-
sonolus/script/internal/context.py,sha256=
|
|
73
|
+
sonolus/script/internal/context.py,sha256=v6DbyqqhieSajcIYf__he4gFSB7UpCMljZaR3SYewzM,15473
|
|
74
74
|
sonolus/script/internal/descriptor.py,sha256=XRFey-EjiAm_--KsNl-8N0Mi_iyQwlPh68gDp0pKf3E,392
|
|
75
75
|
sonolus/script/internal/dict_impl.py,sha256=alu_wKGSk1kZajNf64qbe7t71shEzD4N5xNIATH8Swo,1885
|
|
76
76
|
sonolus/script/internal/error.py,sha256=ZNnsvQVQAnFKzcvsm6-sste2lo-tP5pPI8sD7XlAZWc,490
|
|
@@ -81,11 +81,12 @@ sonolus/script/internal/math_impls.py,sha256=Xk7tLMnV2npzPJWtHlspONQHt09Gh2YLdHh
|
|
|
81
81
|
sonolus/script/internal/native.py,sha256=XKlNnWSJ-lxbwVGWhGj_CSSoWsVN18imqT5sAsDJT1w,1551
|
|
82
82
|
sonolus/script/internal/random.py,sha256=6Ku5edRcDUh7rtqEEYCJz0BQavw69RALsVHS25z50pI,1695
|
|
83
83
|
sonolus/script/internal/range.py,sha256=lrTanQFHU7RuQxSSPwDdoC30Y8FnHGxcP1Ahditu3zU,2297
|
|
84
|
+
sonolus/script/internal/simulation_context.py,sha256=jUgNxCOEc_b99w1yFyVz0nVb6rgkEsyuCBvcYxq34Vk,4819
|
|
84
85
|
sonolus/script/internal/transient.py,sha256=d6iYhM9f6DPUX5nkYQGm-x0b9XEfZUmB4AtUNnyhixo,1636
|
|
85
|
-
sonolus/script/internal/tuple_impl.py,sha256=
|
|
86
|
+
sonolus/script/internal/tuple_impl.py,sha256=BVImJ5q8E9APMtSnHYnbFh6x8c36yktepewnnaQVWg4,3515
|
|
86
87
|
sonolus/script/internal/value.py,sha256=gQVNQD_xGpgrN4-UXFDmWRZCJCe8wPZ_wYv4QoPRJkM,5379
|
|
87
|
-
sonolus_py-0.3.
|
|
88
|
-
sonolus_py-0.3.
|
|
89
|
-
sonolus_py-0.3.
|
|
90
|
-
sonolus_py-0.3.
|
|
91
|
-
sonolus_py-0.3.
|
|
88
|
+
sonolus_py-0.3.2.dist-info/METADATA,sha256=IcdTSXe5sjwmMh50kkhB2JZVSAU3GUUjqQzQFh_yGm0,302
|
|
89
|
+
sonolus_py-0.3.2.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
90
|
+
sonolus_py-0.3.2.dist-info/entry_points.txt,sha256=oTYspY_b7SA8TptEMTDxh4-Aj-ZVPnYC9f1lqH6s9G4,54
|
|
91
|
+
sonolus_py-0.3.2.dist-info/licenses/LICENSE,sha256=JEKpqVhQYfEc7zg3Mj462sKbKYmO1K7WmvX1qvg9IJk,1067
|
|
92
|
+
sonolus_py-0.3.2.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|