Magic Methods and Operators
Signified exposes reactive behavior primarily through magic methods on Signal and Computed.
Unary Methods
| Method |
Usage example |
Notes |
__abs__ |
>>> from signified import Signal
>>> x = Signal(-5)
>>> abs(x)
<5> |
|
__neg__ |
>>> from signified import Signal
>>> x = Signal(10)
>>> -x
<-10> |
|
__pos__ |
>>> from signified import Signal
>>> x = Signal(10)
>>> +x
<10> |
|
__invert__ |
>>> from signified import Signal
>>> flags = Signal(0b0011)
>>> ~flags
<-4> |
Commonly used with bitmasks. |
__round__ |
>>> from signified import Signal
>>> x = Signal(3.14159)
>>> round(x, 2)
<3.14> |
|
__trunc__ |
>>> import math
>>> from signified import Signal
>>> x = Signal(3.9)
>>> math.trunc(x)
<3> |
|
__floor__ |
>>> import math
>>> from signified import Signal
>>> x = Signal(3.9)
>>> math.floor(x)
<3> |
|
__ceil__ |
>>> import math
>>> from signified import Signal
>>> x = Signal(3.1)
>>> math.ceil(x)
<4> |
|
__str__ |
>>> from signified import Signal
>>> x = Signal(10)
>>> str(x)
'10' |
String conversion is not reactive. |
Arithmetic and Bitwise Methods
| Method |
Usage example |
Notes |
__add__ |
>>> from signified import Signal
>>> a = Signal(10)
>>> b = Signal(3)
>>> a + b
<13> |
|
__sub__ |
>>> from signified import Signal
>>> a = Signal(10)
>>> b = Signal(3)
>>> a - b
<7> |
|
__mul__ |
>>> from signified import Signal
>>> a = Signal(10)
>>> b = Signal(3)
>>> a * b
<30> |
|
__truediv__ |
>>> from signified import Signal
>>> a = Signal(10)
>>> b = Signal(3)
>>> a / b
<3.3333333333333335> |
|
__floordiv__ |
>>> from signified import Signal
>>> a = Signal(10)
>>> b = Signal(3)
>>> a // b
<3> |
|
__mod__ |
>>> from signified import Signal
>>> a = Signal(10)
>>> b = Signal(3)
>>> a % b
<1> |
|
__pow__ |
>>> from signified import Signal
>>> a = Signal(10)
>>> b = Signal(3)
>>> a ** b
<1000> |
|
__divmod__ |
>>> from signified import Signal
>>> a = Signal(10)
>>> b = Signal(3)
>>> divmod(a, b)
<(3, 1)> |
|
__matmul__ |
>>> import numpy as np
>>> from signified import Signal
>>> left = Signal(np.array([1, 2]))
>>> right = Signal(np.array([1, 1]))
>>> left @ right
<3> |
|
__and__ |
>>> from signified import Signal
>>> a = Signal(0b1100)
>>> b = Signal(0b1010)
>>> a & b
<8> |
|
__or__ |
>>> from signified import Signal
>>> a = Signal(0b1100)
>>> b = Signal(0b1010)
>>> a | b
<14> |
|
__xor__ |
>>> from signified import Signal
>>> a = Signal(0b1100)
>>> b = Signal(0b1010)
>>> a ^ b
<6> |
|
__lshift__ |
>>> from signified import Signal
>>> x = Signal(10)
>>> x << 1
<20> |
|
__rshift__ |
>>> from signified import Signal
>>> x = Signal(10)
>>> x >> 1
<5> |
|
Reverse Arithmetic and Bitwise Methods
| Method |
Usage example |
Notes |
__radd__ |
>>> from signified import Signal
>>> x = Signal(10)
>>> 5 + x
<15> |
|
__rsub__ |
>>> from signified import Signal
>>> x = Signal(10)
>>> 50 - x
<40> |
|
__rmul__ |
>>> from signified import Signal
>>> x = Signal(10)
>>> 5 * x
<50> |
|
__rtruediv__ |
>>> from signified import Signal
>>> x = Signal(10)
>>> 50 / x
<5.0> |
|
__rfloordiv__ |
>>> from signified import Signal
>>> x = Signal(10)
>>> 50 // x
<5> |
|
__rmod__ |
>>> from signified import Signal
>>> x = Signal(10)
>>> 50 % x
<0> |
|
__rpow__ |
>>> from signified import Signal
>>> x = Signal(10)
>>> 2 ** x
<1024> |
|
__rdivmod__ |
>>> from signified import Signal
>>> x = Signal(10)
>>> divmod(50, x)
<(5, 0)> |
|
__rand__ |
>>> from signified import Signal
>>> x = Signal(0b0101)
>>> 0b1111 & x
<5> |
|
__ror__ |
>>> from signified import Signal
>>> x = Signal(0b0101)
>>> 0b1111 | x
<15> |
|
__rxor__ |
>>> from signified import Signal
>>> x = Signal(0b0101)
>>> 0b1111 ^ x
<10> |
|
Comparisons, Predicates, and Truthiness
| Method |
Usage example |
Notes |
__lt__ |
>>> from signified import Signal
>>> a = Signal(10)
>>> b = Signal(3)
>>> a < b
<False> |
|
__le__ |
>>> from signified import Signal
>>> a = Signal(10)
>>> b = Signal(3)
>>> a <= b
<False> |
|
__gt__ |
>>> from signified import Signal
>>> a = Signal(10)
>>> b = Signal(3)
>>> a > b
<True> |
|
__ge__ |
>>> from signified import Signal
>>> a = Signal(10)
>>> b = Signal(3)
>>> a >= b
<True> |
|
__ne__ |
>>> from signified import Signal
>>> a = Signal(10)
>>> b = Signal(3)
>>> a != b
<True> |
|
eq |
>>> from signified import Signal
>>> a = Signal(10)
>>> b = Signal(3)
>>> a.eq(b)
<False> |
Overloading __eq__ would break the object, so we use an explicit method, a.eq(b) as an analog to a == b. |
is_not |
>>> from signified import Signal
>>> maybe_user = Signal(None)
>>> maybe_user.is_not(None)
<False> |
is / is not are not overloadable. Use this for reactive identity-style checks. |
contains |
>>> from signified import Signal
>>> nums = Signal([1, 2, 3])
>>> nums.contains(2)
<True> |
|
where |
>>> from signified import Signal
>>> flag = Signal(True)
>>> flag.where("yes", "no")
<yes> |
|
as_bool |
>>> from signified import Signal
>>> x = Signal(10)
>>> x.as_bool()
<True> |
__bool__ cannot safely be reactive because Python expects an immediate bool in control flow. |
Object and Container Access
| Method |
Usage example |
Notes |
__getattr__ |
>>> from types import SimpleNamespace
>>> from signified import Signal
>>> person = Signal(SimpleNamespace(name="Alice"))
>>> person.name
<Alice> |
|
__call__ |
>>> from signified import Signal
>>> fn = Signal(lambda x: x + 1)
>>> fn(10)
<11> |
|
__getitem__ |
>>> from signified import Signal
>>> Signal([1, 2, 3])[1]
<2>
>>> Signal({"x": 1})["x"]
<1> |
|
__setattr__ |
>>> from types import SimpleNamespace
>>> from signified import Signal
>>> person = Signal(SimpleNamespace(name="Alice"))
>>> name = person.name
>>> person.name = "Bob"
>>> name
<Bob> |
Updates wrapped object attributes and notifies dependents. |
__setitem__ |
>>> from signified import Signal
>>> nums = Signal([1, 2, 3])
>>> first = nums[0]
>>> nums[0] = 10
>>> first
<10> |
Works for wrapped list/dict item updates. |
Complete API Reference
See Core API for full signatures, overloads, and docstring examples.