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> |
|
__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> |
|
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
For operations that Python cannot overload cleanly (is, is not, and
truthiness via bool(...)) or that have special semantics in Signified
(==), use the rx namespace (x.rx.*). Legacy direct methods like
x.eq(...) still work, but are deprecated aliases.
| 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> |
|
rx.is_ |
>>> from signified import Signal
>>> marker = object()
>>> s = Signal(marker)
>>> s.rx.is_(marker)
<True> |
is is not overloadable. Use this for reactive identity checks. |
rx.is_not |
>>> from signified import Signal
>>> maybe_user = Signal(None)
>>> maybe_user.rx.is_not(None)
<False> |
is not is not overloadable. |
rx.eq |
>>> from signified import Signal
>>> a = Signal(10)
>>> b = Signal(3)
>>> a.rx.eq(b)
<False> |
__eq__ is intentionally not overloaded; use rx.eq for reactive equality. |
rx.in_ |
>>> from signified import Signal
>>> needle = Signal(2)
>>> haystack = Signal([1, 2, 3])
>>> needle.rx.in_(haystack)
<True> |
|
rx.contains |
>>> from signified import Signal
>>> nums = Signal([1, 2, 3])
>>> nums.rx.contains(2)
<True> |
|
rx.where |
>>> from signified import Signal
>>> flag = Signal(True)
>>> flag.rx.where("yes", "no")
<"yes"> |
|
rx.as_bool |
>>> from signified import Signal
>>> x = Signal(10)
>>> x.rx.as_bool()
<True> |
__bool__ is not overloaded. Use rx.as_bool(). |
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.