From a7af69381ba6f6d7b183ec868d927e400fbb3fb4 Mon Sep 17 00:00:00 2001 From: Helmut Merz Date: Tue, 12 May 2026 12:52:52 +0200 Subject: [PATCH] csys clean-up: remove obsolete code, setup: use proc, other minor improvements --- lib/csys/csys.ex | 1 - lib/csys/environ.ex | 42 +++--------------------------------------- lib/csys/program.ex | 12 +++++++----- test/csys_test.exs | 8 ++++---- 4 files changed, 14 insertions(+), 49 deletions(-) diff --git a/lib/csys/csys.ex b/lib/csys/csys.ex index c5cf062..0f7cc6d 100644 --- a/lib/csys/csys.ex +++ b/lib/csys/csys.ex @@ -7,7 +7,6 @@ defmodule Scopes.CSys do def neuron(scope) do Logger.info([scope: inspect(scope)]) Actor.create(fn msg -> process(msg, scope) end) - # Environ.register(env, ac, ...) end def update_neuron(scope) do diff --git a/lib/csys/environ.ex b/lib/csys/environ.ex index b957d42..8f4b5f0 100644 --- a/lib/csys/environ.ex +++ b/lib/csys/environ.ex @@ -3,48 +3,12 @@ defmodule Scopes.CSys.Environ do alias Scopes.CSys - def setup(prog) do - env = CSys.neuron({[], &proc/2, [], self()}) - proc = prog[:initial] + def setup(proc) do + env = CSys.neuron({[], &proc_env/2, [], self()}) CSys.neuron({[], proc, [], env}) - #CSys.neuron({[], proc, [], self()}) end - def proc(msg, scope) do + def proc_env(msg, scope) do send(CSys.env(scope), msg) end - -# legacy /obsolete: Agent-based environ with program registry - - def create(parent, progs \\ %{}) do - {:ok, env} = Agent.start_link( fn -> {parent, progs} end, name: __MODULE__) - env - end - - def get_prog(env, name) do - Agent.get(env, fn {_parent, progs} -> - progs[name] - end) - end - - def get_stage(env, prog, stage) do - Agent.get(env, fn {_parent, progs} -> - stages = progs[prog] - stages[stage] || stages[:default] - end) - end - - def put_prog(env, name, prog) do - Agent.update(env, fn {parent, progs} -> - {parent, Map.put(progs, name, prog)} - end) - end - - def notify(env, msg) do - Agent.cast(env, fn state -> - {parent, _progs} = state - send(parent, msg) - state - end) - end end diff --git a/lib/csys/program.ex b/lib/csys/program.ex index cb2ea45..2bbd803 100644 --- a/lib/csys/program.ex +++ b/lib/csys/program.ex @@ -9,10 +9,11 @@ defmodule Scopes.CSys.Program do # programs def basic_prog() do - %{default: &basic_active/2, - initial: &basic_active/2, - active: &basic_active/2, - retired: &basic_active/2 + default = &basic_active/2 + %{default: default, + initial: default, + active: default, + retired: default } end @@ -22,6 +23,8 @@ defmodule Scopes.CSys.Program do case head do [:csys, :create, :pred | _rest] -> create_pred(scope) [:csys, :create, :succ | _rest] -> create_succ(scope) + #[:csys, :next | _rest] -> CSys.update_neuron({state, &basic_active/2, syns, env}) + #[:csys, :next | _rest] -> next(:active, scope) _ -> forward(msg, scope) || notify(msg, scope) end end @@ -48,7 +51,6 @@ defmodule Scopes.CSys.Program do def create_pred(scope = {_state, proc, _syns, env}) do syn = synapse(self(), &Function.identity/1, 0) - #neuron({[], Environ.get_stage(env, :basic, :initial), [syn], env}) new = neuron({[], proc, [syn], env}) notify({:created, new}, scope) end diff --git a/test/csys_test.exs b/test/csys_test.exs index 530694b..e20c9bc 100644 --- a/test/csys_test.exs +++ b/test/csys_test.exs @@ -8,18 +8,18 @@ defmodule Scopes.CSysTest do alias Scopes.CSys.Program alias Scopes.Shape - def receive_with(head) do + def receive_select(head) do assert_receive {^head, info} {head, info} end - def receive_data() do - Shape.data(receive_with([:csys, :data])) + def receive_data(head \\ [:csys, :data]) do + Shape.data(receive_select(head)) end describe "basic:" do test "minimal-neural-net" do - zero = Environ.setup(Program.basic_prog()) + zero = Environ.setup(Program.basic_prog()[:initial]) #Actor.send(zero, "Hello Zero!") CSys.send_value(zero, "Hello Zero!") assert "Hello Zero!" = receive_data().value