Compare commits
No commits in common. "db6eccd9748c9c31e9ec2d53aa54189d159923f4" and "49cac25cb7461ab04bced874ea9f14bf62510054" have entirely different histories.
db6eccd974
...
49cac25cb7
1 changed files with 2 additions and 20 deletions
|
|
@ -17,9 +17,7 @@ type Mailbox = asyncio.Queue
|
||||||
type Categ = tuple[Symbol, Symbol]
|
type Categ = tuple[Symbol, Symbol]
|
||||||
type Proc = Callable[[Message, Scope], Awaitable[Scope | None]]
|
type Proc = Callable[[Message, Scope], Awaitable[Scope | None]]
|
||||||
type Program = Callable[[Scope], Proc]
|
type Program = Callable[[Scope], Proc]
|
||||||
type ProgramSpec = dict[tuple[Symbol, Symbol], Proc]
|
type Syn = Callable[[Message], Message]
|
||||||
type Syn = Callable[[Message], Awaitable[None]]
|
|
||||||
type SynOp = Callable[[Message], Message | None]
|
|
||||||
|
|
||||||
type Handler = Callable[[Message, Scope],
|
type Handler = Callable[[Message, Scope],
|
||||||
Awaitable[Message | None | tuple[Message | None, Scope | None]]]
|
Awaitable[Message | None | tuple[Message | None, Scope | None]]]
|
||||||
|
|
@ -31,15 +29,6 @@ async def proc_dummy(msg: Message, scope: Scope) -> None:
|
||||||
|
|
||||||
global_mailbox: Mailbox = asyncio.Queue()
|
global_mailbox: Mailbox = asyncio.Queue()
|
||||||
|
|
||||||
def gen_program(spec: ProgramSpec, default: Proc = proc_dummy) -> Program:
|
|
||||||
def program(scope: Scope) -> Proc:
|
|
||||||
key = (scope.categ[1], scope.stage)
|
|
||||||
proc = spec.get(key, spec.get((key[0], k.default)))
|
|
||||||
if proc is None:
|
|
||||||
proc = spec.get((k.default, key[1]), default)
|
|
||||||
return proc
|
|
||||||
return program
|
|
||||||
|
|
||||||
@dataclass
|
@dataclass
|
||||||
class Scope:
|
class Scope:
|
||||||
|
|
||||||
|
|
@ -47,7 +36,7 @@ class Scope:
|
||||||
categ: Categ = (k.csys, k.c00)
|
categ: Categ = (k.csys, k.c00)
|
||||||
stage: Symbol = k.initial
|
stage: Symbol = k.initial
|
||||||
proc: Proc = field(init=False)
|
proc: Proc = field(init=False)
|
||||||
program: Program = gen_program({})
|
program: Program = lambda x: proc_dummy
|
||||||
syns: list[Syn] = field(default_factory=list)
|
syns: list[Syn] = field(default_factory=list)
|
||||||
environ: Mailbox = global_mailbox
|
environ: Mailbox = global_mailbox
|
||||||
|
|
||||||
|
|
@ -73,13 +62,6 @@ def create_zero(env: Mailbox) -> Mailbox:
|
||||||
zero = neuron(scope)
|
zero = neuron(scope)
|
||||||
return zero
|
return zero
|
||||||
|
|
||||||
def synapse(rcvr: Mailbox, op: SynOp = lambda x: x) -> Syn:
|
|
||||||
async def syn(msg: Message) -> None:
|
|
||||||
msg_new = op(msg)
|
|
||||||
if msg_new is not None:
|
|
||||||
await rcvr.put(msg_new)
|
|
||||||
return syn
|
|
||||||
|
|
||||||
def gen_proc(actions: Actions, default: Handlers = None,
|
def gen_proc(actions: Actions, default: Handlers = None,
|
||||||
before: Handlers = None, after: Handlers = None) -> Proc:
|
before: Handlers = None, after: Handlers = None) -> Proc:
|
||||||
async def proc(msg: Message, scope: Scope) -> Scope:
|
async def proc(msg: Message, scope: Scope) -> Scope:
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue