csys clean-up: remove obsolete code, setup: use proc, other minor improvements

This commit is contained in:
Helmut Merz 2026-05-12 12:52:52 +02:00
parent e657dd5a2e
commit a7af69381b
4 changed files with 14 additions and 49 deletions

View file

@ -7,7 +7,6 @@ defmodule Scopes.CSys do
def neuron(scope) do def neuron(scope) do
Logger.info([scope: inspect(scope)]) Logger.info([scope: inspect(scope)])
Actor.create(fn msg -> process(msg, scope) end) Actor.create(fn msg -> process(msg, scope) end)
# Environ.register(env, ac, ...)
end end
def update_neuron(scope) do def update_neuron(scope) do

View file

@ -3,48 +3,12 @@ defmodule Scopes.CSys.Environ do
alias Scopes.CSys alias Scopes.CSys
def setup(prog) do def setup(proc) do
env = CSys.neuron({[], &proc/2, [], self()}) env = CSys.neuron({[], &proc_env/2, [], self()})
proc = prog[:initial]
CSys.neuron({[], proc, [], env}) CSys.neuron({[], proc, [], env})
#CSys.neuron({[], proc, [], self()})
end end
def proc(msg, scope) do def proc_env(msg, scope) do
send(CSys.env(scope), msg) send(CSys.env(scope), msg)
end 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 end

View file

@ -9,10 +9,11 @@ defmodule Scopes.CSys.Program do
# programs # programs
def basic_prog() do def basic_prog() do
%{default: &basic_active/2, default = &basic_active/2
initial: &basic_active/2, %{default: default,
active: &basic_active/2, initial: default,
retired: &basic_active/2 active: default,
retired: default
} }
end end
@ -22,6 +23,8 @@ defmodule Scopes.CSys.Program do
case head do case head do
[:csys, :create, :pred | _rest] -> create_pred(scope) [:csys, :create, :pred | _rest] -> create_pred(scope)
[:csys, :create, :succ | _rest] -> create_succ(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) _ -> forward(msg, scope) || notify(msg, scope)
end end
end end
@ -48,7 +51,6 @@ defmodule Scopes.CSys.Program do
def create_pred(scope = {_state, proc, _syns, env}) do def create_pred(scope = {_state, proc, _syns, env}) do
syn = synapse(self(), &Function.identity/1, 0) syn = synapse(self(), &Function.identity/1, 0)
#neuron({[], Environ.get_stage(env, :basic, :initial), [syn], env})
new = neuron({[], proc, [syn], env}) new = neuron({[], proc, [syn], env})
notify({:created, new}, scope) notify({:created, new}, scope)
end end

View file

@ -8,18 +8,18 @@ defmodule Scopes.CSysTest do
alias Scopes.CSys.Program alias Scopes.CSys.Program
alias Scopes.Shape alias Scopes.Shape
def receive_with(head) do def receive_select(head) do
assert_receive {^head, info} assert_receive {^head, info}
{head, info} {head, info}
end end
def receive_data() do def receive_data(head \\ [:csys, :data]) do
Shape.data(receive_with([:csys, :data])) Shape.data(receive_select(head))
end end
describe "basic:" do describe "basic:" do
test "minimal-neural-net" do test "minimal-neural-net" do
zero = Environ.setup(Program.basic_prog()) zero = Environ.setup(Program.basic_prog()[:initial])
#Actor.send(zero, "Hello Zero!") #Actor.send(zero, "Hello Zero!")
CSys.send_value(zero, "Hello Zero!") CSys.send_value(zero, "Hello Zero!")
assert "Hello Zero!" = receive_data().value assert "Hello Zero!" = receive_data().value