From e657dd5a2edd95099fe1bd541a80e3ea8e82fc3c Mon Sep 17 00:00:00 2001 From: Helmut Merz Date: Tue, 12 May 2026 07:53:14 +0200 Subject: [PATCH] csys: make env a neuron, move setup To Environ --- lib/csys/csys.ex | 12 +----------- lib/csys/environ.ex | 15 +++++++++++++++ lib/csys/program.ex | 5 ++--- test/csys_test.exs | 3 ++- 4 files changed, 20 insertions(+), 15 deletions(-) diff --git a/lib/csys/csys.ex b/lib/csys/csys.ex index 87196f2..c5cf062 100644 --- a/lib/csys/csys.ex +++ b/lib/csys/csys.ex @@ -2,7 +2,6 @@ defmodule Scopes.CSys do require Logger alias Scopes.Core.Actor - #alias Scopes.CSys.Environ alias Scopes.Shape def neuron(scope) do @@ -21,19 +20,10 @@ defmodule Scopes.CSys do # helper functions - defp process(msg, scope) do + def process(msg, scope) do proc(scope).(msg, scope) end - def setup(_progname, prog) do - #env = Environ.create(self()) - #Environ.put_prog(env, progname, prog) - #proc = Environ.get_stage(env, progname, :initial) - proc = prog[:initial] - #neuron({[], proc, [], env}) - neuron({[], proc, [], self()}) - end - def send_value(rcvr, val) do msg = Shape.create([:csys, :data], data: %{value: val}) Actor.send(rcvr, msg) diff --git a/lib/csys/environ.ex b/lib/csys/environ.ex index df5bca0..b957d42 100644 --- a/lib/csys/environ.ex +++ b/lib/csys/environ.ex @@ -1,6 +1,21 @@ defmodule Scopes.CSys.Environ do use Agent + alias Scopes.CSys + + def setup(prog) do + env = CSys.neuron({[], &proc/2, [], self()}) + proc = prog[:initial] + CSys.neuron({[], proc, [], env}) + #CSys.neuron({[], proc, [], self()}) + end + + def proc(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 diff --git a/lib/csys/program.ex b/lib/csys/program.ex index 72db7b9..cb2ea45 100644 --- a/lib/csys/program.ex +++ b/lib/csys/program.ex @@ -4,7 +4,7 @@ defmodule Scopes.CSys.Program do syns: 1, env: 1 ] - #alias Scopes.CSys.Environ + alias Scopes.Core.Actor # programs @@ -33,8 +33,7 @@ defmodule Scopes.CSys.Program do # processor steps def notify(msg, scope) do - #Environ.notify(env(scope), msg) - send(env(scope), msg) + Actor.send(env(scope), msg) end def forward(msg, scope) do diff --git a/test/csys_test.exs b/test/csys_test.exs index 82a620a..530694b 100644 --- a/test/csys_test.exs +++ b/test/csys_test.exs @@ -4,6 +4,7 @@ defmodule Scopes.CSysTest do alias Scopes.Core.Actor alias Scopes.CSys + alias Scopes.CSys.Environ alias Scopes.CSys.Program alias Scopes.Shape @@ -18,7 +19,7 @@ defmodule Scopes.CSysTest do describe "basic:" do test "minimal-neural-net" do - zero = CSys.setup(:basic, Program.basic_prog()) + zero = Environ.setup(Program.basic_prog()) #Actor.send(zero, "Hello Zero!") CSys.send_value(zero, "Hello Zero!") assert "Hello Zero!" = receive_data().value