Skip to main content
Yanked

This release has been yanked by its maintainers, and will be ignored by installers, except when explicitly specified.
Consider using release 0.0.2 instead.
Reason given by maintainers: Meant to only pre-release

signals

A signals implementation for Python

install

pip install signals

usage

from signals import Signal, computed, effect

a = Signal(0)
b = Signal(2)
c = computed(lambda: a.value + b.value)

print(c.value) # 2

a.value = 1
print(c.value) # 3

b.value = 3
print(c.value) # 4

# Log the values of a, b, c whenever one changes
@effect
def log_abc():
    print(a.value, b.value, c.value)

a.value = 2 # prints (2, 3, 5)

cell magic

we also provide a ipython cell magic %%effect, which offers a convenient way re-execute cells that use signals.

In[1]:

%load_ext signals
from signals import Signal

a = Signal(0)
b = Signal(2)

In[2]:

%%effect
a.value + b.value # re-evaluates the cell whenever a or b changes

In[3]:

a.value = 1

what

Signals are a declarative programming model for updating based on fine-grained changes. With signals, application state is represented as a directed graph of relationships between other signals. However, the most important part of signals is that you don't need to manage the graph yourself.

Instead, you declare signals and their relationships, and the signal system automatically tracks dependencies and executes necessary computations when values change. Singal-like constructs have been adopted by popular UI libraries and non-UI contexts (e.g., build systems to avoid uneccessary rebuilds).

why

Signals are an easier way to manage state. We need something in Python other than callbacks and events. This repo is a playground to explore patterns for using a signal-based system in Python.

ideas

Signals for widgets

@anywidget.dataclass
class Counter:
    count: int

a = Counter(count=0) # creates a signal internally

shared_count = Signal(0)
b = Counter(count=shared_count) # creates a signal internally
c = Counter(count=shared_count) # creates a signal internally

# behind the scenes, creating Counter creates an effect to update the frontend view
# when the count changes. E.g.,
# @effect
# def update():
#     self.comm.send('update', self.count)
#
# Updates b/c views because they share a signal, and have separate effects
shared_count.value += 1

development

this project uses rye for development.

rye lint # lints code
rye fmt  # formats code
rye test # runs tests

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

signals-0.1.0.tar.gz (9.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

signals-0.1.0-py3-none-any.whl (8.1 kB view details)

Uploaded Python 3

File details

Details for the file signals-0.1.0.tar.gz.

File metadata

  • Download URL: signals-0.1.0.tar.gz
  • Upload date:
  • Size: 9.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.12.4

File hashes

Hashes for signals-0.1.0.tar.gz
Algorithm Hash digest
SHA256 03f62406ad80e7e36ee90f721542f76b8215c103ca5283d6079c87db46496277
MD5 8cd2ba6ffd54a7bc2ecf8f1c57ed4215
BLAKE2b-256 19693ed7fe7b708d08939e21a43122b522e16944a1a32ad0f39d5b752bdcb4c6

See more details on using hashes here.

File details

Details for the file signals-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: signals-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 8.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.12.4

File hashes

Hashes for signals-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 b51121ef6ea8955acb3b3c4f03bf0a3ebf9bd09984fda15cb1a245ca950a3ecf
MD5 2426ac1a57a2ac0f6e1cefaabccbad06
BLAKE2b-256 1a1e1b1c07c3bd84b4b16c0dc81579150ac25e7664492d83baf1f36628ee3e63

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 files

0.0.2

1 file

0.0.1

1 file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page