core, work in progress: scope creation, environment setup

This commit is contained in:
Helmut Merz 2026-10-17 22:36:06 +02:00
parent 48a5105eea
commit c1bff58ad3
3 changed files with 41 additions and 7 deletions

View file

@ -1,6 +1,6 @@
# scopes.core.core
"""The scopes.core package"""
"""A concurrent cybernetic communication system"""
from __future__ import annotations # no check of type annotations at runtime
import asyncio
@ -11,6 +11,8 @@ from typing import Any
from scopes.core.message import Message
from scopes.util import keywords as k, Symbol
type Mailbox = asyncio.Queue
type Categ = tuple[Symbol, Symbol]
type Proc = Callable[[Scope, Message], AsyncGenerator[Scope]]
type Program = Callable[[Scope], Proc]
type Syn = Callable[[Message], Message]
@ -22,13 +24,18 @@ async def proc_dummy(scope: Scope, msg: Message) -> AsyncGenerator[Scope]:
class Scope:
value: Any = 0
categ: tuple[Symbol, Symbol] = (k.csys, k.c00)
categ: Categ = (k.csys, k.c00)
stage: Symbol = k.initial
proc: Proc = proc_dummy
program: Program = lambda x: proc_dummy
syns: list[Syn] = field(default_factory=list)
environ: asyncio.Queue = field(default_factory=asyncio.Queue)
environ: Mailbox = field(default_factory=asyncio.Queue)
def set_proc(self) -> Scope:
self.proc = self.program(self)
return self
def create_scope(env: Mailbox, cat=(k.csys, k.c00), **kw):
scope = Scope(environ=env, categ=cat, **kw)
return scope.set_proc()

14
scopes/core/environ.py Normal file
View file

@ -0,0 +1,14 @@
# scopes.core.environ
"""Defining an environment for the communication system"""
from scopes import core
from scopes.core import actor
from scopes.util import keywords as k
async def proc_env(scope, msg):
await scope.environ.put(msg)
def create(meta_env):
return core.create_scope(meta_env, (k.env, k.c00), program=lambda x: proc_env)

View file

@ -6,7 +6,7 @@ import asyncio
import pytest
from scopes import core
from scopes.core import actor, message
from scopes.core import actor, environ, message
from scopes.util import keywords as k
collector = []
@ -26,6 +26,7 @@ async def handle_alt(msg):
case k.show: show('switched')
case _: await asyncio.sleep(0.01); show(msg)
@pytest.mark.anyio
async def test_actor():
async with asyncio.TaskGroup() as group:
@ -53,7 +54,19 @@ def test_message():
assert msg.categ() == (k.test, k.person)
def test_core():
sc = core.Scope()
assert sc.value == 0
@pytest.fixture
def coll():
return []
@pytest.fixture
async def meta_env(coll):
async def collect(msg):
coll.append(msg)
return actor.create(collect)
@pytest.mark.anyio
async def test_core(meta_env, coll):
env_scope = environ.create(meta_env)
assert env_scope.value == 0
await asyncio.sleep(0.01)