From 410cdacd377c7f40d4f52ccc980a0b03da7878e8 Mon Sep 17 00:00:00 2001 From: angelajt Date: Tue, 14 Jan 2025 20:44:04 -0800 Subject: [PATCH 01/32] provide framework to support embedded readme in sims --- egui/gui.go | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/egui/gui.go b/egui/gui.go index 3552a44c..bcb5f6ed 100644 --- a/egui/gui.go +++ b/egui/gui.go @@ -57,6 +57,9 @@ type GUI struct { // Toolbar is the overall sim toolbar Toolbar *core.Toolbar `display:"-"` + + // ReadMe is the sim ReadMe frame + ReadMe *core.Frame `display:"-"` } // UpdateWindow triggers an update on window body, @@ -70,7 +73,6 @@ func (gui *GUI) UpdateWindow() { gui.Body.Scene.NeedsRender() // todo: could update other stuff but not really necessary } - // GoUpdateWindow triggers an update on window body, // for calling from a separate goroutine. func (gui *GUI) GoUpdateWindow() { @@ -94,13 +96,14 @@ func (gui *GUI) Stopped() { } // MakeBody returns default window Body content -func (gui *GUI) MakeBody(sim any, appname, title, about string) { +func (gui *GUI) MakeBody(sim any, appname, title, about string, readme ...string) { core.NoSentenceCaseFor = append(core.NoSentenceCaseFor, "github.com/emer") gui.Body = core.NewBody(appname).SetTitle(title) // gui.Body.App().About = about split := core.NewSplits(gui.Body) split.Name = "split" + gui.SimForm = core.NewForm(split).SetStruct(sim) gui.SimForm.Name = "sim-form" if tb, ok := sim.(core.ToolbarMaker); ok { @@ -109,8 +112,20 @@ func (gui *GUI) MakeBody(sim any, appname, title, about string) { gui.Toolbar.Maker(tb.MakeToolbar) }) } + gui.Tabs = core.NewTabs(split) gui.Tabs.Name = "tabs" + + if len(readme) > 0 { + gui.ReadMe = core.NewFrame(split) + gui.ReadMe.Name = "readme" + + split.SetTiles( + core.TileSecondLong, + ) + split.SetTileSplits(.8, .2) + } + split.SetSplits(.2, .8) } From f6492bd3dea1736a432cab1e1bf79ae2b438b042 Mon Sep 17 00:00:00 2001 From: angelajt Date: Wed, 15 Jan 2025 14:49:31 -0800 Subject: [PATCH 02/32] WIP embedding images in README --- egui/gui.go | 52 ++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 46 insertions(+), 6 deletions(-) diff --git a/egui/gui.go b/egui/gui.go index bcb5f6ed..c42c4c69 100644 --- a/egui/gui.go +++ b/egui/gui.go @@ -7,9 +7,15 @@ package egui //go:generate core generate -add-types import ( + "embed" + "fmt" + "net/http" + "strings" + "cogentcore.org/core/core" "cogentcore.org/core/events" _ "cogentcore.org/core/gpu/gosl/slbool/slboolcore" // include to get gui views + "cogentcore.org/core/htmlcore" "cogentcore.org/core/plot/plotcore" "cogentcore.org/core/tensor/tensorcore" "github.com/emer/emergent/v2/etime" @@ -73,6 +79,7 @@ func (gui *GUI) UpdateWindow() { gui.Body.Scene.NeedsRender() // todo: could update other stuff but not really necessary } + // GoUpdateWindow triggers an update on window body, // for calling from a separate goroutine. func (gui *GUI) GoUpdateWindow() { @@ -96,7 +103,7 @@ func (gui *GUI) Stopped() { } // MakeBody returns default window Body content -func (gui *GUI) MakeBody(sim any, appname, title, about string, readme ...string) { +func (gui *GUI) MakeBody(sim any, appname, title, about string, readmefses ...embed.FS) { core.NoSentenceCaseFor = append(core.NoSentenceCaseFor, "github.com/emer") gui.Body = core.NewBody(appname).SetTitle(title) @@ -116,14 +123,47 @@ func (gui *GUI) MakeBody(sim any, appname, title, about string, readme ...string gui.Tabs = core.NewTabs(split) gui.Tabs.Name = "tabs" - if len(readme) > 0 { + if len(readmefses) > 0 { + readmefs := readmefses[0] gui.ReadMe = core.NewFrame(split) gui.ReadMe.Name = "readme" - split.SetTiles( - core.TileSecondLong, - ) - split.SetTileSplits(.8, .2) + ctx := htmlcore.NewContext() + ctx.GetURL = func(url string) (*http.Response, error) { + url = strings.Split(url, "?")[0] + url = strings.TrimPrefix(url, "/") + fmt.Println(url) + body, err := readmefs.Open(url) + if err != nil { + fmt.Printf("Error opening file %v\n", err) + return nil, err + } + res := &http.Response{ + Status: "200 OK", + StatusCode: 200, + Body: body, + Header: make(http.Header), + ContentLength: -1, + } + fmt.Printf("res: %#v\n", res) + normalresponse, err := http.Get("https://github.com/CompCogNeuro/sims/blob/main/ch6/objrec/" + url) + if err != nil { + fmt.Printf("Error getting file %v\n", err) + } + fmt.Printf("normalresponse: %#v\n", normalresponse) + return res, nil + } + readme, err := readmefs.ReadFile("README.md") + // TODO: handle error + if err == nil { + htmlcore.ReadMDString(ctx, gui.ReadMe, string(readme)) + split.SetTiles( + core.TileSecondLong, + ) + split.SetTileSplits(.8, .2) + } else { + fmt.Printf("MakeBody error %#v\n", err) + } } split.SetSplits(.2, .8) From 4dd81bd95870df2ed308b056998b9cce821da667 Mon Sep 17 00:00:00 2001 From: angelajt Date: Fri, 24 Jan 2025 12:22:25 -0800 Subject: [PATCH 03/32] merge embedimages to leabra, clean up MakeBody --- egui/gui.go | 74 +++++++++++++++++++++++++---------------------------- 1 file changed, 35 insertions(+), 39 deletions(-) diff --git a/egui/gui.go b/egui/gui.go index c42c4c69..974d8268 100644 --- a/egui/gui.go +++ b/egui/gui.go @@ -124,49 +124,45 @@ func (gui *GUI) MakeBody(sim any, appname, title, about string, readmefses ...em gui.Tabs.Name = "tabs" if len(readmefses) > 0 { - readmefs := readmefses[0] - gui.ReadMe = core.NewFrame(split) - gui.ReadMe.Name = "readme" - - ctx := htmlcore.NewContext() - ctx.GetURL = func(url string) (*http.Response, error) { - url = strings.Split(url, "?")[0] - url = strings.TrimPrefix(url, "/") - fmt.Println(url) - body, err := readmefs.Open(url) - if err != nil { - fmt.Printf("Error opening file %v\n", err) - return nil, err - } - res := &http.Response{ - Status: "200 OK", - StatusCode: 200, - Body: body, - Header: make(http.Header), - ContentLength: -1, - } - fmt.Printf("res: %#v\n", res) - normalresponse, err := http.Get("https://github.com/CompCogNeuro/sims/blob/main/ch6/objrec/" + url) - if err != nil { - fmt.Printf("Error getting file %v\n", err) - } - fmt.Printf("normalresponse: %#v\n", normalresponse) - return res, nil + gui.addReadMe(readmefses[0], split) + } + + split.SetSplits(.2, .8) +} + +func (gui *GUI) addReadMe(readmefs embed.FS, split *core.Splits) { + gui.ReadMe = core.NewFrame(split) + gui.ReadMe.Name = "readme" + + ctx := htmlcore.NewContext() + ctx.GetURL = func(url string) (*http.Response, error) { + url = strings.Split(url, "?")[0] + url = strings.TrimPrefix(url, "/") + body, err := readmefs.Open(url) + if err != nil { + fmt.Printf("Error opening file %v\n", err) + return nil, err } - readme, err := readmefs.ReadFile("README.md") - // TODO: handle error - if err == nil { - htmlcore.ReadMDString(ctx, gui.ReadMe, string(readme)) - split.SetTiles( - core.TileSecondLong, - ) - split.SetTileSplits(.8, .2) - } else { - fmt.Printf("MakeBody error %#v\n", err) + res := &http.Response{ + StatusCode: 200, + Body: body, + Header: make(http.Header), + ContentLength: -1, } + return res, nil } - split.SetSplits(.2, .8) + readme, err := readmefs.ReadFile("README.md") + + if err == nil { + htmlcore.ReadMDString(ctx, gui.ReadMe, string(readme)) + split.SetTiles( + core.TileSecondLong, + ) + split.SetTileSplits(.8, .2) + } else { + fmt.Printf("MakeBody error %#v\n", err) + } } // AddNetView adds NetView in tab with given name From 32e1d2183b0f6cd3cb75dd6741cca48ceb32690b Mon Sep 17 00:00:00 2001 From: Kai O'Reilly Date: Tue, 28 Jan 2025 15:08:44 -0800 Subject: [PATCH 04/32] update to use emer/etensor and other temporary packages --- actrf/actrf.go | 4 +-- actrf/actrfs.go | 2 +- actrf/mpi.go | 4 +-- actrf/running.go | 2 +- chem/stater.go | 2 +- confusion/confusion.go | 4 +-- decoder/linear.go | 4 +-- decoder/linear_test.go | 2 +- decoder/softmax.go | 4 +-- ecmd/std.go | 2 +- econfig/args.go | 2 +- econfig/config.go | 2 +- econfig/io.go | 2 +- egui/grids.go | 4 +-- egui/gui.go | 6 ++-- egui/plots.go | 4 +-- elog/context.go | 8 ++--- elog/logs.go | 6 ++-- elog/stditems.go | 6 ++-- elog/table.go | 2 +- emer/layer.go | 2 +- emer/netparams.go | 2 +- emer/network.go | 2 +- env/env.go | 2 +- env/fixed.go | 6 ++-- env/freq.go | 6 ++-- env/mpifixed.go | 8 ++--- esg/rule.go | 2 +- estats/actrf.go | 2 +- estats/funcs.go | 8 ++--- estats/plots.go | 10 +++---- estats/rasters.go | 2 +- estats/stats.go | 8 ++--- go.mod | 26 ++++++++-------- go.sum | 55 ++++++++++++++++++---------------- netview/laymesh.go | 2 +- netview/netdata.go | 4 +-- patgen/configpats.go | 2 +- patgen/configvocab.go | 4 +-- patgen/configvocabpats_test.go | 2 +- patgen/flip.go | 4 +-- patgen/permuted.go | 6 ++-- patgen/rand.go | 2 +- patgen/reshape.go | 2 +- patgen/shuffle.go | 4 +-- paths/circle.go | 2 +- paths/full.go | 2 +- paths/onetoone.go | 2 +- paths/pattern.go | 2 +- paths/poolonetoone.go | 2 +- paths/poolrect.go | 2 +- paths/poolsameunit.go | 2 +- paths/pooltile.go | 2 +- paths/pooltilesub.go | 2 +- paths/poolunifrnd.go | 4 +-- paths/prjn_test.go | 2 +- paths/rect.go | 2 +- paths/uniformrand.go | 4 +-- popcode/popcode2d.go | 2 +- popcode/popcode_test.go | 2 +- 60 files changed, 142 insertions(+), 137 deletions(-) diff --git a/actrf/actrf.go b/actrf/actrf.go index 8a272b1e..8c82b168 100644 --- a/actrf/actrf.go +++ b/actrf/actrf.go @@ -7,8 +7,8 @@ package actrf //go:generate core generate -add-types import ( - "cogentcore.org/core/tensor" - "cogentcore.org/core/tensor/stats/norm" + "github.com/emer/etensor/tensor" + "github.com/emer/etensor/tensor/stats/norm" ) // RF is used for computing an activation-based receptive field. diff --git a/actrf/actrfs.go b/actrf/actrfs.go index b7da8825..d4c8827c 100644 --- a/actrf/actrfs.go +++ b/actrf/actrfs.go @@ -8,7 +8,7 @@ import ( "fmt" "cogentcore.org/core/base/errors" - "cogentcore.org/core/tensor" + "github.com/emer/etensor/tensor" ) // RFs manages multiple named RF's -- each one must be initialized first diff --git a/actrf/mpi.go b/actrf/mpi.go index bebed8b9..eeea78b9 100644 --- a/actrf/mpi.go +++ b/actrf/mpi.go @@ -5,8 +5,8 @@ package actrf import ( - "cogentcore.org/core/base/mpi" - "cogentcore.org/core/tensor/tensormpi" + "cogentcore.org/lab/base/mpi" + "github.com/emer/etensor/tensor/tensormpi" ) // MPISum aggregates RF Sum data across all processors in given mpi communicator. diff --git a/actrf/running.go b/actrf/running.go index 69f903c0..7ed8e7c2 100644 --- a/actrf/running.go +++ b/actrf/running.go @@ -4,7 +4,7 @@ package actrf -import "cogentcore.org/core/tensor" +import "github.com/emer/etensor/tensor" // RunningAvg computes a running-average activation-based receptive field // for activities act relative to source activations src (the thing we're projecting rf onto) diff --git a/chem/stater.go b/chem/stater.go index 48d3c8d7..c52f522b 100644 --- a/chem/stater.go +++ b/chem/stater.go @@ -4,7 +4,7 @@ package chem -import "cogentcore.org/core/tensor/table" +import "github.com/emer/etensor/tensor/table" // The Stater interface defines the functions implemented for State // structures containing chem state variables. diff --git a/confusion/confusion.go b/confusion/confusion.go index 554bfbb2..8ed33715 100644 --- a/confusion/confusion.go +++ b/confusion/confusion.go @@ -11,8 +11,8 @@ import ( "math" "cogentcore.org/core/core" - "cogentcore.org/core/tensor" - "cogentcore.org/core/tensor/stats/simat" + "github.com/emer/etensor/tensor" + "github.com/emer/etensor/tensor/stats/simat" ) // Matrix computes the confusion matrix, with rows representing diff --git a/decoder/linear.go b/decoder/linear.go index 35e112d3..37fffbbc 100644 --- a/decoder/linear.go +++ b/decoder/linear.go @@ -9,9 +9,9 @@ package decoder import ( "fmt" - "cogentcore.org/core/base/mpi" "cogentcore.org/core/math32" - "cogentcore.org/core/tensor" + "cogentcore.org/lab/base/mpi" + "github.com/emer/etensor/tensor" ) type ActivationFunc func(float32) float32 diff --git a/decoder/linear_test.go b/decoder/linear_test.go index 9ffbf38c..f0685e49 100644 --- a/decoder/linear_test.go +++ b/decoder/linear_test.go @@ -8,7 +8,7 @@ import ( "fmt" "testing" - "cogentcore.org/core/tensor" + "github.com/emer/etensor/tensor" "github.com/stretchr/testify/assert" ) diff --git a/decoder/softmax.go b/decoder/softmax.go index 8c164bfd..c46be6df 100644 --- a/decoder/softmax.go +++ b/decoder/softmax.go @@ -15,10 +15,10 @@ import ( "path/filepath" "sort" - "cogentcore.org/core/base/mpi" "cogentcore.org/core/math32" - "cogentcore.org/core/tensor" + "cogentcore.org/lab/base/mpi" "github.com/emer/emergent/v2/emer" + "github.com/emer/etensor/tensor" ) // SoftMax is a softmax decoder, which is the best choice for a 1-hot classification diff --git a/ecmd/std.go b/ecmd/std.go index 724db092..a4875212 100644 --- a/ecmd/std.go +++ b/ecmd/std.go @@ -9,7 +9,7 @@ package ecmd import ( "os" - "cogentcore.org/core/base/mpi" + "cogentcore.org/lab/base/mpi" "github.com/emer/emergent/v2/elog" "github.com/emer/emergent/v2/emer" "github.com/emer/emergent/v2/etime" diff --git a/econfig/args.go b/econfig/args.go index d93ff1e0..ca8c0eb9 100644 --- a/econfig/args.go +++ b/econfig/args.go @@ -14,9 +14,9 @@ import ( "strings" "cogentcore.org/core/base/iox/tomlx" - "cogentcore.org/core/base/mpi" "cogentcore.org/core/base/reflectx" "cogentcore.org/core/base/strcase" + "cogentcore.org/lab/base/mpi" ) // SetFromArgs sets Config values from command-line args, diff --git a/econfig/config.go b/econfig/config.go index 7f0707dd..d1a3d92f 100644 --- a/econfig/config.go +++ b/econfig/config.go @@ -12,7 +12,7 @@ import ( "reflect" "cogentcore.org/core/base/fsx" - "cogentcore.org/core/base/mpi" + "cogentcore.org/lab/base/mpi" ) var ( diff --git a/econfig/io.go b/econfig/io.go index 615bd918..494a9c1c 100644 --- a/econfig/io.go +++ b/econfig/io.go @@ -9,7 +9,7 @@ import ( "strings" "cogentcore.org/core/base/iox/tomlx" - "cogentcore.org/core/base/mpi" + "cogentcore.org/lab/base/mpi" ) // OpenWithIncludes reads config from given config file, diff --git a/egui/grids.go b/egui/grids.go index 4f3383c6..11a86be7 100644 --- a/egui/grids.go +++ b/egui/grids.go @@ -6,9 +6,9 @@ package egui import ( "cogentcore.org/core/core" - "cogentcore.org/core/tensor" - "cogentcore.org/core/tensor/tensorcore" "github.com/emer/emergent/v2/actrf" + "github.com/emer/etensor/tensor" + "github.com/emer/etensor/tensor/tensorcore" ) // Grid gets tensor grid view of given name, creating if not yet made diff --git a/egui/gui.go b/egui/gui.go index 3552a44c..1bfba192 100644 --- a/egui/gui.go +++ b/egui/gui.go @@ -9,11 +9,11 @@ package egui import ( "cogentcore.org/core/core" "cogentcore.org/core/events" - _ "cogentcore.org/core/gpu/gosl/slbool/slboolcore" // include to get gui views - "cogentcore.org/core/plot/plotcore" - "cogentcore.org/core/tensor/tensorcore" + _ "cogentcore.org/lab/gosl/slbool/slboolcore" // include to get gui views "github.com/emer/emergent/v2/etime" "github.com/emer/emergent/v2/netview" + "github.com/emer/etensor/plot/plotcore" + "github.com/emer/etensor/tensor/tensorcore" ) // GUI manages all standard elements of a simulation Graphical User Interface diff --git a/egui/plots.go b/egui/plots.go index 61f7333d..44316e5c 100644 --- a/egui/plots.go +++ b/egui/plots.go @@ -10,10 +10,10 @@ import ( "cogentcore.org/core/base/errors" "cogentcore.org/core/colors/gradient" - "cogentcore.org/core/plot/plotcore" - "cogentcore.org/core/tensor/tensorcore" "github.com/emer/emergent/v2/elog" "github.com/emer/emergent/v2/etime" + "github.com/emer/etensor/plot/plotcore" + "github.com/emer/etensor/tensor/tensorcore" ) // AddPlots adds plots based on the unique tables we have, diff --git a/elog/context.go b/elog/context.go index 3b5af40c..8f30a06f 100644 --- a/elog/context.go +++ b/elog/context.go @@ -8,13 +8,13 @@ import ( "fmt" "cogentcore.org/core/base/errors" - "cogentcore.org/core/tensor" - "cogentcore.org/core/tensor/stats/metric" - "cogentcore.org/core/tensor/stats/stats" - "cogentcore.org/core/tensor/table" "github.com/emer/emergent/v2/emer" "github.com/emer/emergent/v2/estats" "github.com/emer/emergent/v2/etime" + "github.com/emer/etensor/tensor" + "github.com/emer/etensor/tensor/stats/metric" + "github.com/emer/etensor/tensor/stats/stats" + "github.com/emer/etensor/tensor/table" ) // WriteFunc function that computes and sets log values diff --git a/elog/logs.go b/elog/logs.go index 01510c90..dbaa334c 100644 --- a/elog/logs.go +++ b/elog/logs.go @@ -13,12 +13,12 @@ import ( "path/filepath" "strconv" - "cogentcore.org/core/base/mpi" - "cogentcore.org/core/tensor/table" - "cogentcore.org/core/tensor/tensormpi" + "cogentcore.org/lab/base/mpi" "github.com/emer/emergent/v2/emer" "github.com/emer/emergent/v2/estats" "github.com/emer/emergent/v2/etime" + "github.com/emer/etensor/tensor/table" + "github.com/emer/etensor/tensor/tensormpi" ) // LogPrec is precision for saving float values in logs diff --git a/elog/stditems.go b/elog/stditems.go index 959a7a45..3e244f4a 100644 --- a/elog/stditems.go +++ b/elog/stditems.go @@ -11,11 +11,11 @@ import ( "cogentcore.org/core/base/errors" "cogentcore.org/core/math32/minmax" - "cogentcore.org/core/tensor/stats/split" - "cogentcore.org/core/tensor/stats/stats" - "cogentcore.org/core/tensor/table" "github.com/emer/emergent/v2/emer" "github.com/emer/emergent/v2/etime" + "github.com/emer/etensor/tensor/stats/split" + "github.com/emer/etensor/tensor/stats/stats" + "github.com/emer/etensor/tensor/table" ) // AddCounterItems adds given Int counters from Stats, diff --git a/elog/table.go b/elog/table.go index e159ebae..d10480e2 100644 --- a/elog/table.go +++ b/elog/table.go @@ -7,7 +7,7 @@ package elog import ( "os" - "cogentcore.org/core/tensor/table" + "github.com/emer/etensor/tensor/table" ) // LogTable contains all the data for one log table diff --git a/emer/layer.go b/emer/layer.go index 93f2ba97..949de23f 100644 --- a/emer/layer.go +++ b/emer/layer.go @@ -13,10 +13,10 @@ import ( "cogentcore.org/core/base/errors" "cogentcore.org/core/base/slicesx" "cogentcore.org/core/math32" - "cogentcore.org/core/tensor" "github.com/emer/emergent/v2/params" "github.com/emer/emergent/v2/relpos" "github.com/emer/emergent/v2/weights" + "github.com/emer/etensor/tensor" ) var ( diff --git a/emer/netparams.go b/emer/netparams.go index a24f2153..02b1da1e 100644 --- a/emer/netparams.go +++ b/emer/netparams.go @@ -10,7 +10,7 @@ import ( "log/slog" "strings" - "cogentcore.org/core/base/mpi" + "cogentcore.org/lab/base/mpi" "github.com/emer/emergent/v2/params" ) diff --git a/emer/network.go b/emer/network.go index 8c19908e..08cea021 100644 --- a/emer/network.go +++ b/emer/network.go @@ -13,9 +13,9 @@ import ( "strings" "cogentcore.org/core/base/errors" - "cogentcore.org/core/base/randx" "cogentcore.org/core/core" "cogentcore.org/core/math32" + "cogentcore.org/lab/base/randx" "github.com/emer/emergent/v2/params" "github.com/emer/emergent/v2/relpos" ) diff --git a/env/env.go b/env/env.go index afc036cc..1bb9836d 100644 --- a/env/env.go +++ b/env/env.go @@ -6,7 +6,7 @@ package env import ( "cogentcore.org/core/base/labels" - "cogentcore.org/core/tensor" + "github.com/emer/etensor/tensor" ) //go:generate core generate -add-types diff --git a/env/fixed.go b/env/fixed.go index 598ef27d..33d66ef6 100644 --- a/env/fixed.go +++ b/env/fixed.go @@ -10,10 +10,10 @@ import ( "math/rand" "cogentcore.org/core/base/errors" - "cogentcore.org/core/base/randx" - "cogentcore.org/core/tensor" - "cogentcore.org/core/tensor/table" + "cogentcore.org/lab/base/randx" "github.com/emer/emergent/v2/etime" + "github.com/emer/etensor/tensor" + "github.com/emer/etensor/tensor/table" ) // FixedTable is a basic Env that manages patterns from an table.Table, with diff --git a/env/freq.go b/env/freq.go index b69e3941..4cdeb674 100644 --- a/env/freq.go +++ b/env/freq.go @@ -10,10 +10,10 @@ import ( "math" "cogentcore.org/core/base/errors" - "cogentcore.org/core/base/randx" - "cogentcore.org/core/tensor" - "cogentcore.org/core/tensor/table" + "cogentcore.org/lab/base/randx" "github.com/emer/emergent/v2/etime" + "github.com/emer/etensor/tensor" + "github.com/emer/etensor/tensor/table" ) // FreqTable is an Env that manages patterns from an table.Table with frequency diff --git a/env/mpifixed.go b/env/mpifixed.go index aed39c0e..76af50b8 100644 --- a/env/mpifixed.go +++ b/env/mpifixed.go @@ -10,11 +10,11 @@ import ( "math/rand" "cogentcore.org/core/base/errors" - "cogentcore.org/core/base/randx" - "cogentcore.org/core/tensor" - "cogentcore.org/core/tensor/table" - "cogentcore.org/core/tensor/tensormpi" + "cogentcore.org/lab/base/randx" "github.com/emer/emergent/v2/etime" + "github.com/emer/etensor/tensor" + "github.com/emer/etensor/tensor/table" + "github.com/emer/etensor/tensor/tensormpi" ) // MPIFixedTable is an MPI-enabled version of the FixedTable, which is diff --git a/esg/rule.go b/esg/rule.go index e7ba392a..83d3adb1 100644 --- a/esg/rule.go +++ b/esg/rule.go @@ -11,7 +11,7 @@ import ( "math/rand" "strings" - "cogentcore.org/core/base/randx" + "cogentcore.org/lab/base/randx" ) // RuleTypes are different types of rules (i.e., how the items are selected) diff --git a/estats/actrf.go b/estats/actrf.go index 75e2f6fd..91c47a4d 100644 --- a/estats/actrf.go +++ b/estats/actrf.go @@ -8,8 +8,8 @@ import ( "fmt" "strings" - "cogentcore.org/core/tensor" "github.com/emer/emergent/v2/emer" + "github.com/emer/etensor/tensor" ) // InitActRFs initializes a set of activation-based receptive field (ActRF) diff --git a/estats/funcs.go b/estats/funcs.go index 38ae50d1..eccf7d87 100644 --- a/estats/funcs.go +++ b/estats/funcs.go @@ -6,11 +6,11 @@ package estats import ( "cogentcore.org/core/base/errors" - "cogentcore.org/core/tensor" - "cogentcore.org/core/tensor/stats/metric" - "cogentcore.org/core/tensor/stats/stats" - "cogentcore.org/core/tensor/table" "github.com/emer/emergent/v2/emer" + "github.com/emer/etensor/tensor" + "github.com/emer/etensor/tensor/stats/metric" + "github.com/emer/etensor/tensor/stats/stats" + "github.com/emer/etensor/tensor/table" ) // funcs contains misc stats functions diff --git a/estats/plots.go b/estats/plots.go index 1e2ecba7..efdf9edb 100644 --- a/estats/plots.go +++ b/estats/plots.go @@ -5,11 +5,11 @@ package estats import ( - "cogentcore.org/core/plot/plotcore" - "cogentcore.org/core/tensor/stats/clust" - "cogentcore.org/core/tensor/stats/metric" - "cogentcore.org/core/tensor/stats/simat" - "cogentcore.org/core/tensor/table" + "github.com/emer/etensor/plot/plotcore" + "github.com/emer/etensor/tensor/stats/clust" + "github.com/emer/etensor/tensor/stats/metric" + "github.com/emer/etensor/tensor/stats/simat" + "github.com/emer/etensor/tensor/table" ) func ConfigPCAPlot(plt *plotcore.PlotEditor, dt *table.Table, nm string) { diff --git a/estats/rasters.go b/estats/rasters.go index 94549b75..cae6cf0a 100644 --- a/estats/rasters.go +++ b/estats/rasters.go @@ -6,8 +6,8 @@ package estats import ( "cogentcore.org/core/base/errors" - "cogentcore.org/core/tensor" "github.com/emer/emergent/v2/emer" + "github.com/emer/etensor/tensor" ) // ConfigRasters configures spike rasters for given maximum number of cycles diff --git a/estats/stats.go b/estats/stats.go index 28440c20..26530b69 100644 --- a/estats/stats.go +++ b/estats/stats.go @@ -10,13 +10,13 @@ import ( "fmt" "cogentcore.org/core/base/timer" - "cogentcore.org/core/plot/plotcore" - "cogentcore.org/core/tensor" - "cogentcore.org/core/tensor/stats/pca" - "cogentcore.org/core/tensor/stats/simat" "github.com/emer/emergent/v2/actrf" "github.com/emer/emergent/v2/confusion" "github.com/emer/emergent/v2/decoder" + "github.com/emer/etensor/plot/plotcore" + "github.com/emer/etensor/tensor" + "github.com/emer/etensor/tensor/stats/pca" + "github.com/emer/etensor/tensor/stats/simat" ) // Stats provides maps for storing statistics as named scalar and tensor values. diff --git a/go.mod b/go.mod index 63bdcd86..8b88f7ef 100644 --- a/go.mod +++ b/go.mod @@ -3,10 +3,12 @@ module github.com/emer/emergent/v2 go 1.22 require ( - cogentcore.org/core v0.3.5 + cogentcore.org/core v0.3.9-0.20250127075122-ddf64b82d707 + cogentcore.org/lab v0.0.0-20250116065728-014d19175d12 github.com/BurntSushi/toml v1.3.2 - github.com/stretchr/testify v1.9.0 - golang.org/x/exp v0.0.0-20240823005443-9b4947da3948 + github.com/emer/etensor v0.0.0-20250128230539-a9366874f7c3 + github.com/stretchr/testify v1.10.0 + golang.org/x/exp v0.0.0-20250128182459-e0ece0dbea4c ) require ( @@ -17,7 +19,7 @@ require ( github.com/aymanbagabas/go-osc52/v2 v2.0.1 // indirect github.com/aymerick/douceur v0.2.0 // indirect github.com/chewxy/math32 v1.10.1 // indirect - github.com/cogentcore/webgpu v0.0.0-20240906154609-e35089e9a725 // indirect + github.com/cogentcore/webgpu v0.0.0-20250118183535-3dd1436165cf // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/dlclark/regexp2 v1.11.0 // indirect github.com/fsnotify/fsnotify v1.7.0 // indirect @@ -29,7 +31,6 @@ require ( github.com/hack-pad/hackpadfs v0.2.1 // indirect github.com/hack-pad/safejs v0.1.1 // indirect github.com/jinzhu/copier v0.4.0 // indirect - github.com/kr/text v0.2.0 // indirect github.com/lucasb-eyer/go-colorful v1.2.0 // indirect github.com/mattn/go-isatty v0.0.20 // indirect github.com/mattn/go-runewidth v0.0.15 // indirect @@ -39,14 +40,13 @@ require ( github.com/pelletier/go-toml/v2 v2.1.2-0.20240227203013-2b69615b5d55 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/rivo/uniseg v0.4.7 // indirect - github.com/rogpeppe/go-internal v1.12.0 // indirect golang.org/x/image v0.18.0 // indirect - golang.org/x/mod v0.20.0 // indirect - golang.org/x/net v0.28.0 // indirect - golang.org/x/sync v0.8.0 // indirect - golang.org/x/sys v0.23.0 // indirect - golang.org/x/text v0.17.0 // indirect - golang.org/x/tools v0.24.0 // indirect - gonum.org/v1/gonum v0.15.0 // indirect + golang.org/x/mod v0.22.0 // indirect + golang.org/x/net v0.34.0 // indirect + golang.org/x/sync v0.10.0 // indirect + golang.org/x/sys v0.29.0 // indirect + golang.org/x/text v0.21.0 // indirect + golang.org/x/tools v0.29.0 // indirect + gonum.org/v1/gonum v0.15.1 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/go.sum b/go.sum index ef74d145..220c7199 100644 --- a/go.sum +++ b/go.sum @@ -1,5 +1,7 @@ -cogentcore.org/core v0.3.5 h1:qTW/+GSUbeYYCSi29zdAQ/fnjWg2/E/aTbAMbfAFGfI= -cogentcore.org/core v0.3.5/go.mod h1:q3OrXihYG2aTE2oG785ad5b6aJ3wzSCXeeD2SSLKWIE= +cogentcore.org/core v0.3.9-0.20250127075122-ddf64b82d707 h1:iuSRxC52LhHwAiNKfKx0UslAmZV2Io7QkkQYOgOyM6M= +cogentcore.org/core v0.3.9-0.20250127075122-ddf64b82d707/go.mod h1:o9vCyA2Sdsc6W0qYvxzzQQlozfemP0TiAGEHDDR+xLU= +cogentcore.org/lab v0.0.0-20250116065728-014d19175d12 h1:Y11ebOAN9EMCEmSg2M/O5wToGOOvQN08CWi2iou8jGU= +cogentcore.org/lab v0.0.0-20250116065728-014d19175d12/go.mod h1:QlbVp7wdCDo59f6d0UIoPFLtIsCcG7DueOqd/8OohUs= github.com/Bios-Marcel/wastebasket v0.0.4-0.20240213135800-f26f1ae0a7c4 h1:6lx9xzJAhdjq0LvVfbITeC3IH9Fzvo1aBahyPu2FuG8= github.com/Bios-Marcel/wastebasket v0.0.4-0.20240213135800-f26f1ae0a7c4/go.mod h1:FChzXi1izqzdPb6BiNZmcZLGyTYiT61iGx9Rxx9GNeI= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= @@ -22,19 +24,20 @@ github.com/aymerick/douceur v0.2.0 h1:Mv+mAeH1Q+n9Fr+oyamOlAkUNPWPlA8PPGR0QAaYuP github.com/aymerick/douceur v0.2.0/go.mod h1:wlT5vV2O3h55X9m7iVYN0TBM0NH/MmbLnd30/FjWUq4= github.com/chewxy/math32 v1.10.1 h1:LFpeY0SLJXeaiej/eIp2L40VYfscTvKh/FSEZ68uMkU= github.com/chewxy/math32 v1.10.1/go.mod h1:dOB2rcuFrCn6UHrze36WSLVPKtzPMRAQvBvUwkSsLqs= -github.com/cogentcore/webgpu v0.0.0-20240906154609-e35089e9a725 h1:Zf2ixJY1PsN3huZa0Uof7VKYuoBbdxJCEbKdhKhHqwE= -github.com/cogentcore/webgpu v0.0.0-20240906154609-e35089e9a725/go.mod h1:ciqaxChrmRRMU1SnI5OE12Cn3QWvOKO+e5nSy+N9S1o= +github.com/cogentcore/webgpu v0.0.0-20250118183535-3dd1436165cf h1:efac1kg29kwhSLyMd9EjwHbNX8jJpiRG5Dm2QIb56YQ= +github.com/cogentcore/webgpu v0.0.0-20250118183535-3dd1436165cf/go.mod h1:ciqaxChrmRRMU1SnI5OE12Cn3QWvOKO+e5nSy+N9S1o= github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= -github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/dlclark/regexp2 v1.11.0 h1:G/nrcoOa7ZXlpoa/91N3X7mM3r8eIlMBBJZvsz/mxKI= github.com/dlclark/regexp2 v1.11.0/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8= +github.com/emer/etensor v0.0.0-20250128230539-a9366874f7c3 h1:9yia9XH5z88JjDJwi1trDlVQTIEJ9TTUwdxo6bzr94U= +github.com/emer/etensor v0.0.0-20250128230539-a9366874f7c3/go.mod h1:pH4lH+TChvqJG4Lh2Qi1bS5e3pnGK1QDkCSfUX4J+lQ= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA= github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM= @@ -42,6 +45,8 @@ github.com/go-gl/glfw/v3.3/glfw v0.0.0-20240506104042-037f3cc74f2a h1:vxnBhFDDT+ github.com/go-gl/glfw/v3.3/glfw v0.0.0-20240506104042-037f3cc74f2a/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/goki/freetype v1.0.5 h1:yi2lQeUhXnBgSMqYd0vVmPw6RnnfIeTP3N4uvaJXd7A= github.com/goki/freetype v1.0.5/go.mod h1:wKmKxddbzKmeci9K96Wknn5kjTWLyfC8tKOqAFbEX8E= +github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= +github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/gorilla/css v1.0.1 h1:ntNaBIghp6JmvWnxbZKANoLyuXTPZ4cAMlo6RyhlbO8= github.com/gorilla/css v1.0.1/go.mod h1:BvnYkspnSzMmwRK+b8/xgNPLiIuNZr6vbZBTPQ2A3b0= github.com/h2non/filetype v1.1.3 h1:FKkx9QbD7HR/zjK1Ia5XiBsq9zdLi5Kf3zGyFTAFkGg= @@ -85,8 +90,8 @@ github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ= github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= -github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8= -github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4= +github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII= +github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o= github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= @@ -101,33 +106,33 @@ github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXf github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= -github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= -github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= +github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/exp v0.0.0-20240823005443-9b4947da3948 h1:kx6Ds3MlpiUHKj7syVnbp57++8WpuKPcR5yjLBjvLEA= -golang.org/x/exp v0.0.0-20240823005443-9b4947da3948/go.mod h1:akd2r19cwCdwSwWeIdzYQGa/EZZyqcOdwWiwj5L5eKQ= +golang.org/x/exp v0.0.0-20250128182459-e0ece0dbea4c h1:KL/ZBHXgKGVmuZBZ01Lt57yE5ws8ZPSkkihmEyq7FXc= +golang.org/x/exp v0.0.0-20250128182459-e0ece0dbea4c/go.mod h1:tujkw807nyEEAamNbDrEGzRav+ilXA7PCRAd6xsmwiU= golang.org/x/image v0.0.0-20190703141733-d6a02ce849c9/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/image v0.18.0 h1:jGzIakQa/ZXI1I0Fxvaa9W7yP25TqT6cHIHn+6CqvSQ= golang.org/x/image v0.18.0/go.mod h1:4yyo5vMFQjVjUcVk4jEQcU9MGy/rulF5WvUILseCM2E= -golang.org/x/mod v0.20.0 h1:utOm6MM3R3dnawAiJgn0y+xvuYRsm1RKM/4giyfDgV0= -golang.org/x/mod v0.20.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= -golang.org/x/net v0.28.0 h1:a9JDOJc5GMUJ0+UDqmLT86WiEy7iWyIhz8gz8E4e5hE= -golang.org/x/net v0.28.0/go.mod h1:yqtgsTWOOnlGLG9GFRrK3++bGOUEkNBoHZc8MEDWPNg= -golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ= -golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/mod v0.22.0 h1:D4nJWe9zXqHOmWqj4VMOJhvzj7bEZg4wEYa759z1pH4= +golang.org/x/mod v0.22.0/go.mod h1:6SkKJ3Xj0I0BrPOZoBy3bdMptDDU9oJrpohJ3eWZ1fY= +golang.org/x/net v0.34.0 h1:Mb7Mrk043xzHgnRM88suvJFwzVrRfHEHJEl5/71CKw0= +golang.org/x/net v0.34.0/go.mod h1:di0qlW3YNM5oh6GqDGQr92MyTozJPmybPK4Ev/Gm31k= +golang.org/x/sync v0.10.0 h1:3NQrjDixjgGwUOCaF8w2+VYHv0Ve/vGYSbdkTa98gmQ= +golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.23.0 h1:YfKFowiIMvtgl1UERQoTPPToxltDeZfbj4H7dVUCwmM= -golang.org/x/sys v0.23.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.29.0 h1:TPYlXGxvx1MGTn2GiZDhnjPA9wZzZeGKHHmKhHYvgaU= +golang.org/x/sys v0.29.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.17.0 h1:XtiM5bkSOt+ewxlOE/aE/AKEHibwj/6gvWMl9Rsh0Qc= -golang.org/x/text v0.17.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= -golang.org/x/tools v0.24.0 h1:J1shsA93PJUEVaUSaay7UXAyE8aimq3GW0pjlolpa24= -golang.org/x/tools v0.24.0/go.mod h1:YhNqVBIfWHdzvTLs0d8LCuMhkKUgSUKldakyV7W/WDQ= -gonum.org/v1/gonum v0.15.0 h1:2lYxjRbTYyxkJxlhC+LvJIx3SsANPdRybu1tGj9/OrQ= -gonum.org/v1/gonum v0.15.0/go.mod h1:xzZVBJBtS+Mz4q0Yl2LJTk+OxOg4jiXZ7qBoM0uISGo= +golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= +golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= +golang.org/x/tools v0.29.0 h1:Xx0h3TtM9rzQpQuR4dKLrdglAmCEN5Oi+P74JdhdzXE= +golang.org/x/tools v0.29.0/go.mod h1:KMQVMRsVxU6nHCFXrBPhDB8XncLNLM0lIy/F14RP588= +gonum.org/v1/gonum v0.15.1 h1:FNy7N6OUZVUaWG9pTiD+jlhdQ3lMP+/LcTpJ6+a8sQ0= +gonum.org/v1/gonum v0.15.1/go.mod h1:eZTZuRFrzu5pcyjN5wJhcIhnUdNijYxX1T2IcrOGY0o= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= diff --git a/netview/laymesh.go b/netview/laymesh.go index 2791c626..c6ad933c 100644 --- a/netview/laymesh.go +++ b/netview/laymesh.go @@ -7,9 +7,9 @@ package netview import ( "cogentcore.org/core/gpu/shape" "cogentcore.org/core/math32" - "cogentcore.org/core/tensor" "cogentcore.org/core/xyz" "github.com/emer/emergent/v2/emer" + "github.com/emer/etensor/tensor" ) // LayMesh is a xyz.Mesh that represents a layer -- it is dynamically updated using the diff --git a/netview/netdata.go b/netview/netdata.go index 77794a10..6dddbb02 100644 --- a/netview/netdata.go +++ b/netview/netdata.go @@ -20,10 +20,10 @@ import ( "cogentcore.org/core/base/errors" "cogentcore.org/core/core" "cogentcore.org/core/math32" - "cogentcore.org/core/plot/plotcore" - "cogentcore.org/core/tensor/table" "github.com/emer/emergent/v2/emer" "github.com/emer/emergent/v2/ringidx" + "github.com/emer/etensor/plot/plotcore" + "github.com/emer/etensor/tensor/table" ) // NetData maintains a record of all the network data that has been displayed diff --git a/patgen/configpats.go b/patgen/configpats.go index 6a4c868f..b7d87cb9 100644 --- a/patgen/configpats.go +++ b/patgen/configpats.go @@ -10,7 +10,7 @@ import ( "reflect" "cogentcore.org/core/base/errors" - "cogentcore.org/core/tensor/table" + "github.com/emer/etensor/tensor/table" ) // InitPats initiates patterns to be used in MixPats diff --git a/patgen/configvocab.go b/patgen/configvocab.go index 92ea6978..6e4adfd4 100644 --- a/patgen/configvocab.go +++ b/patgen/configvocab.go @@ -12,8 +12,8 @@ import ( "math" "cogentcore.org/core/base/errors" - "cogentcore.org/core/tensor" - "cogentcore.org/core/tensor/stats/stats" + "github.com/emer/etensor/tensor" + "github.com/emer/etensor/tensor/stats/stats" ) // Vocab is a map of named tensors that contain patterns used for creating diff --git a/patgen/configvocabpats_test.go b/patgen/configvocabpats_test.go index 86eba68d..c8ad8878 100644 --- a/patgen/configvocabpats_test.go +++ b/patgen/configvocabpats_test.go @@ -6,7 +6,7 @@ import ( "testing" "cogentcore.org/core/base/errors" - "cogentcore.org/core/tensor/table" + "github.com/emer/etensor/tensor/table" "github.com/stretchr/testify/assert" "golang.org/x/exp/maps" ) diff --git a/patgen/flip.go b/patgen/flip.go index dfaf4614..b397c4b3 100644 --- a/patgen/flip.go +++ b/patgen/flip.go @@ -5,8 +5,8 @@ package patgen import ( - "cogentcore.org/core/base/randx" - "cogentcore.org/core/tensor" + "cogentcore.org/lab/base/randx" + "github.com/emer/etensor/tensor" ) // FlipBits turns nOff bits that are currently On to Off and diff --git a/patgen/permuted.go b/patgen/permuted.go index 8b188584..67adea35 100644 --- a/patgen/permuted.go +++ b/patgen/permuted.go @@ -10,10 +10,10 @@ import ( "log" "math" - "cogentcore.org/core/base/randx" "cogentcore.org/core/math32" - "cogentcore.org/core/tensor" - "cogentcore.org/core/tensor/stats/metric" + "cogentcore.org/lab/base/randx" + "github.com/emer/etensor/tensor" + "github.com/emer/etensor/tensor/stats/metric" ) // PermutedBinary sets the given tensor to contain nOn onVal values and the diff --git a/patgen/rand.go b/patgen/rand.go index 481c6ae9..2e2befb4 100644 --- a/patgen/rand.go +++ b/patgen/rand.go @@ -4,7 +4,7 @@ package patgen -import "cogentcore.org/core/base/randx" +import "cogentcore.org/lab/base/randx" var ( // RandSource is a random source to use for all random numbers used in patgen diff --git a/patgen/reshape.go b/patgen/reshape.go index f532d6c4..56aadc57 100644 --- a/patgen/reshape.go +++ b/patgen/reshape.go @@ -9,7 +9,7 @@ import ( "reflect" "cogentcore.org/core/core" - "cogentcore.org/core/tensor/table" + "github.com/emer/etensor/tensor/table" ) // ReshapeCpp fixes C++ emergent table shape which is reversed from Go. diff --git a/patgen/shuffle.go b/patgen/shuffle.go index de771705..bf193d75 100644 --- a/patgen/shuffle.go +++ b/patgen/shuffle.go @@ -5,8 +5,8 @@ package patgen import ( - "cogentcore.org/core/base/randx" - "cogentcore.org/core/tensor/table" + "cogentcore.org/lab/base/randx" + "github.com/emer/etensor/tensor/table" ) // Shuffle shuffles rows in specified columns in the table independently diff --git a/paths/circle.go b/paths/circle.go index c337af17..03a2d063 100644 --- a/paths/circle.go +++ b/paths/circle.go @@ -7,9 +7,9 @@ package paths import ( "cogentcore.org/core/math32" "cogentcore.org/core/math32/vecint" - "cogentcore.org/core/tensor" "github.com/emer/emergent/v2/edge" "github.com/emer/emergent/v2/efuns" + "github.com/emer/etensor/tensor" ) // Circle implements a circular pattern of connectivity between two layers diff --git a/paths/full.go b/paths/full.go index d01de5a3..3b5d4da1 100644 --- a/paths/full.go +++ b/paths/full.go @@ -4,7 +4,7 @@ package paths -import "cogentcore.org/core/tensor" +import "github.com/emer/etensor/tensor" // Full implements full all-to-all pattern of connectivity between two layers type Full struct { diff --git a/paths/onetoone.go b/paths/onetoone.go index ca396e74..df6a68e7 100644 --- a/paths/onetoone.go +++ b/paths/onetoone.go @@ -4,7 +4,7 @@ package paths -import "cogentcore.org/core/tensor" +import "github.com/emer/etensor/tensor" // OneToOne implements point-to-point one-to-one pattern of connectivity between two layers type OneToOne struct { diff --git a/paths/pattern.go b/paths/pattern.go index de324159..13a7936d 100644 --- a/paths/pattern.go +++ b/paths/pattern.go @@ -7,7 +7,7 @@ package paths //go:generate core generate -add-types import ( - "cogentcore.org/core/tensor" + "github.com/emer/etensor/tensor" ) // Pattern defines a pattern of connectivity between two layers. diff --git a/paths/poolonetoone.go b/paths/poolonetoone.go index e372ed2e..fd4bdf67 100644 --- a/paths/poolonetoone.go +++ b/paths/poolonetoone.go @@ -4,7 +4,7 @@ package paths -import "cogentcore.org/core/tensor" +import "github.com/emer/etensor/tensor" // PoolOneToOne implements one-to-one connectivity between pools within layers. // Pools are the outer-most two dimensions of a 4D layer shape. diff --git a/paths/poolrect.go b/paths/poolrect.go index bac69a3c..216cff21 100644 --- a/paths/poolrect.go +++ b/paths/poolrect.go @@ -7,8 +7,8 @@ package paths import ( "cogentcore.org/core/math32" "cogentcore.org/core/math32/vecint" - "cogentcore.org/core/tensor" "github.com/emer/emergent/v2/edge" + "github.com/emer/etensor/tensor" ) // PoolRect implements a rectangular pattern of connectivity between diff --git a/paths/poolsameunit.go b/paths/poolsameunit.go index 147e32d5..e1dbfe73 100644 --- a/paths/poolsameunit.go +++ b/paths/poolsameunit.go @@ -4,7 +4,7 @@ package paths -import "cogentcore.org/core/tensor" +import "github.com/emer/etensor/tensor" // PoolSameUnit connects a given unit to the unit at the same index // across all the pools in a layer. diff --git a/paths/pooltile.go b/paths/pooltile.go index 7a0bc712..40758fc7 100644 --- a/paths/pooltile.go +++ b/paths/pooltile.go @@ -11,9 +11,9 @@ import ( "cogentcore.org/core/math32" "cogentcore.org/core/math32/minmax" "cogentcore.org/core/math32/vecint" - "cogentcore.org/core/tensor" "github.com/emer/emergent/v2/edge" "github.com/emer/emergent/v2/efuns" + "github.com/emer/etensor/tensor" ) // PoolTile implements tiled 2D connectivity between pools within layers, where diff --git a/paths/pooltilesub.go b/paths/pooltilesub.go index dcbe54a6..11002e7c 100644 --- a/paths/pooltilesub.go +++ b/paths/pooltilesub.go @@ -11,9 +11,9 @@ import ( "cogentcore.org/core/math32" "cogentcore.org/core/math32/minmax" "cogentcore.org/core/math32/vecint" - "cogentcore.org/core/tensor" "github.com/emer/emergent/v2/edge" "github.com/emer/emergent/v2/efuns" + "github.com/emer/etensor/tensor" ) // PoolTileSub implements tiled 2D connectivity between pools within layers, where diff --git a/paths/poolunifrnd.go b/paths/poolunifrnd.go index e0efeb90..a4fa16a8 100644 --- a/paths/poolunifrnd.go +++ b/paths/poolunifrnd.go @@ -8,8 +8,8 @@ import ( "math" "sort" - "cogentcore.org/core/base/randx" - "cogentcore.org/core/tensor" + "cogentcore.org/lab/base/randx" + "github.com/emer/etensor/tensor" ) // PoolUniformRand implements random pattern of connectivity between pools within layers. diff --git a/paths/prjn_test.go b/paths/prjn_test.go index f504c0af..277ccc83 100644 --- a/paths/prjn_test.go +++ b/paths/prjn_test.go @@ -7,7 +7,7 @@ package paths import ( "testing" - "cogentcore.org/core/tensor" + "github.com/emer/etensor/tensor" "github.com/stretchr/testify/assert" ) diff --git a/paths/rect.go b/paths/rect.go index ba8dea8f..e6fc9370 100644 --- a/paths/rect.go +++ b/paths/rect.go @@ -7,8 +7,8 @@ package paths import ( "cogentcore.org/core/math32" "cogentcore.org/core/math32/vecint" - "cogentcore.org/core/tensor" "github.com/emer/emergent/v2/edge" + "github.com/emer/etensor/tensor" ) // Rect implements a rectangular pattern of connectivity between two layers diff --git a/paths/uniformrand.go b/paths/uniformrand.go index d5f6d926..45af646b 100644 --- a/paths/uniformrand.go +++ b/paths/uniformrand.go @@ -9,8 +9,8 @@ import ( "math/rand" "sort" - "cogentcore.org/core/base/randx" - "cogentcore.org/core/tensor" + "cogentcore.org/lab/base/randx" + "github.com/emer/etensor/tensor" ) // UniformRand implements uniform random pattern of connectivity between two layers diff --git a/popcode/popcode2d.go b/popcode/popcode2d.go index 5925f647..9e59d621 100644 --- a/popcode/popcode2d.go +++ b/popcode/popcode2d.go @@ -10,7 +10,7 @@ import ( "sort" "cogentcore.org/core/math32" - "cogentcore.org/core/tensor" + "github.com/emer/etensor/tensor" ) // popcode.TwoD provides encoding and decoding of population diff --git a/popcode/popcode_test.go b/popcode/popcode_test.go index 55cb35f0..d3161a3a 100644 --- a/popcode/popcode_test.go +++ b/popcode/popcode_test.go @@ -8,7 +8,7 @@ import ( "testing" "cogentcore.org/core/math32" - "cogentcore.org/core/tensor" + "github.com/emer/etensor/tensor" ) // difTol is the numerical difference tolerance for comparing vs. target values From 1e71a5c7249bd144a05627eaf3c4a1b8cb73460e Mon Sep 17 00:00:00 2001 From: Kai O'Reilly Date: Tue, 28 Jan 2025 15:21:10 -0800 Subject: [PATCH 05/32] fix build errors --- econfig/args.go | 4 ++-- netview/netview.go | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/econfig/args.go b/econfig/args.go index ca8c0eb9..aad7a4ee 100644 --- a/econfig/args.go +++ b/econfig/args.go @@ -202,10 +202,10 @@ func addAllCases(nm, path string, pval reflect.Value, allArgs map[string]reflect // fieldArgNamesStruct returns map of all the different ways the field names // can be specified as arg flags, mapping to the reflect.Value func fieldArgNamesStruct(obj any, path string, nest bool, allArgs map[string]reflect.Value) { - if reflectx.AnyIsNil(obj) { + ov := reflect.ValueOf(obj) + if reflectx.IsNil(ov) { return } - ov := reflect.ValueOf(obj) if ov.Kind() == reflect.Pointer && ov.IsNil() { return } diff --git a/netview/netview.go b/netview/netview.go index 3527ac53..bf5fd1b3 100644 --- a/netview/netview.go +++ b/netview/netview.go @@ -653,7 +653,7 @@ func (nv *NetView) UnitValColor(lay emer.Layer, idx1d int, raw float32, hasval b clr = NilColor } } else { - clp := nv.CurVarOptions.Range.ClipValue(raw) + clp := nv.CurVarOptions.Range.ClampValue(raw) norm := nv.CurVarOptions.Range.NormValue(clp) var op float32 if nv.CurVarOptions.ZeroCtr { From 400250a41689729b48ba3d5bef4440ca16d18a8f Mon Sep 17 00:00:00 2001 From: angelajt Date: Thu, 30 Jan 2025 15:40:31 -0800 Subject: [PATCH 06/32] cleanup, use GetURLFromFS --- egui/gui.go | 50 +++++++++++++++++--------------------------------- go.mod | 6 +++++- go.sum | 12 ++++++++++++ 3 files changed, 34 insertions(+), 34 deletions(-) diff --git a/egui/gui.go b/egui/gui.go index 3ade022c..466809e3 100644 --- a/egui/gui.go +++ b/egui/gui.go @@ -8,10 +8,9 @@ package egui import ( "embed" - "fmt" "net/http" - "strings" + "cogentcore.org/core/base/errors" "cogentcore.org/core/core" "cogentcore.org/core/events" "cogentcore.org/core/htmlcore" @@ -64,8 +63,8 @@ type GUI struct { // Toolbar is the overall sim toolbar Toolbar *core.Toolbar `display:"-"` - // ReadMe is the sim ReadMe frame - ReadMe *core.Frame `display:"-"` + // Readme is the sim ReadMe frame + Readme *core.Frame `display:"-"` } // UpdateWindow triggers an update on window body, @@ -103,7 +102,7 @@ func (gui *GUI) Stopped() { } // MakeBody returns default window Body content -func (gui *GUI) MakeBody(sim any, appname, title, about string, readmefses ...embed.FS) { +func (gui *GUI) MakeBody(sim any, appname, title, about string, readme ...embed.FS) { core.NoSentenceCaseFor = append(core.NoSentenceCaseFor, "github.com/emer") gui.Body = core.NewBody(appname).SetTitle(title) @@ -123,45 +122,30 @@ func (gui *GUI) MakeBody(sim any, appname, title, about string, readmefses ...em gui.Tabs = core.NewTabs(split) gui.Tabs.Name = "tabs" - if len(readmefses) > 0 { - gui.addReadMe(readmefses[0], split) + if len(readme) > 0 { + gui.addReadme(readme[0], split) } split.SetSplits(.2, .8) } -func (gui *GUI) addReadMe(readmefs embed.FS, split *core.Splits) { - gui.ReadMe = core.NewFrame(split) - gui.ReadMe.Name = "readme" +func (gui *GUI) addReadme(readmefs embed.FS, split *core.Splits) { + gui.Readme = core.NewFrame(split) + gui.Readme.Name = "readme" + + split.SetTiles(core.TileSecondLong) + split.SetTileSplits(.8, .2) ctx := htmlcore.NewContext() - ctx.GetURL = func(url string) (*http.Response, error) { - url = strings.Split(url, "?")[0] - url = strings.TrimPrefix(url, "/") - body, err := readmefs.Open(url) - if err != nil { - fmt.Printf("Error opening file %v\n", err) - return nil, err - } - res := &http.Response{ - StatusCode: 200, - Body: body, - Header: make(http.Header), - ContentLength: -1, - } - return res, nil + + ctx.GetURL = func(rawURL string) (*http.Response, error) { + return htmlcore.GetURLFromFS(readmefs, rawURL) } readme, err := readmefs.ReadFile("README.md") - if err == nil { - htmlcore.ReadMDString(ctx, gui.ReadMe, string(readme)) - split.SetTiles( - core.TileSecondLong, - ) - split.SetTileSplits(.8, .2) - } else { - fmt.Printf("MakeBody error %#v\n", err) + if errors.Log(err) == nil { + htmlcore.ReadMDString(ctx, gui.Readme, string(readme)) } } diff --git a/go.mod b/go.mod index 8b88f7ef..20960f0c 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,8 @@ module github.com/emer/emergent/v2 -go 1.22 +go 1.22.0 + +toolchain go1.23.1 require ( cogentcore.org/core v0.3.9-0.20250127075122-ddf64b82d707 @@ -22,9 +24,11 @@ require ( github.com/cogentcore/webgpu v0.0.0-20250118183535-3dd1436165cf // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/dlclark/regexp2 v1.11.0 // indirect + github.com/ericchiang/css v1.3.0 // indirect github.com/fsnotify/fsnotify v1.7.0 // indirect github.com/go-gl/glfw/v3.3/glfw v0.0.0-20240506104042-037f3cc74f2a // indirect github.com/goki/freetype v1.0.5 // indirect + github.com/gomarkdown/markdown v0.0.0-20240930133441-72d49d9543d8 // indirect github.com/gorilla/css v1.0.1 // indirect github.com/h2non/filetype v1.1.3 // indirect github.com/hack-pad/go-indexeddb v0.3.2 // indirect diff --git a/go.sum b/go.sum index 220c7199..3ed23cd0 100644 --- a/go.sum +++ b/go.sum @@ -38,6 +38,8 @@ github.com/dlclark/regexp2 v1.11.0 h1:G/nrcoOa7ZXlpoa/91N3X7mM3r8eIlMBBJZvsz/mxK github.com/dlclark/regexp2 v1.11.0/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8= github.com/emer/etensor v0.0.0-20250128230539-a9366874f7c3 h1:9yia9XH5z88JjDJwi1trDlVQTIEJ9TTUwdxo6bzr94U= github.com/emer/etensor v0.0.0-20250128230539-a9366874f7c3/go.mod h1:pH4lH+TChvqJG4Lh2Qi1bS5e3pnGK1QDkCSfUX4J+lQ= +github.com/ericchiang/css v1.3.0 h1:e0vS+vpujMjtT3/SYu7qTHn1LVzXWcLCCDjlfq3YlLY= +github.com/ericchiang/css v1.3.0/go.mod h1:sVSdL+MFR9Q4cKJMQzpIkHIDOLiK+7Wmjjhq7D+MubA= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA= github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM= @@ -45,6 +47,9 @@ github.com/go-gl/glfw/v3.3/glfw v0.0.0-20240506104042-037f3cc74f2a h1:vxnBhFDDT+ github.com/go-gl/glfw/v3.3/glfw v0.0.0-20240506104042-037f3cc74f2a/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/goki/freetype v1.0.5 h1:yi2lQeUhXnBgSMqYd0vVmPw6RnnfIeTP3N4uvaJXd7A= github.com/goki/freetype v1.0.5/go.mod h1:wKmKxddbzKmeci9K96Wknn5kjTWLyfC8tKOqAFbEX8E= +github.com/gomarkdown/markdown v0.0.0-20240930133441-72d49d9543d8 h1:4txT5G2kqVAKMjzidIabL/8KqjIK71yj30YOeuxLn10= +github.com/gomarkdown/markdown v0.0.0-20240930133441-72d49d9543d8/go.mod h1:JDGcbDT52eL4fju3sZ4TeHGsQwhG9nbDV21aMyhwPoA= +github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/gorilla/css v1.0.1 h1:ntNaBIghp6JmvWnxbZKANoLyuXTPZ4cAMlo6RyhlbO8= @@ -118,19 +123,26 @@ golang.org/x/image v0.18.0 h1:jGzIakQa/ZXI1I0Fxvaa9W7yP25TqT6cHIHn+6CqvSQ= golang.org/x/image v0.18.0/go.mod h1:4yyo5vMFQjVjUcVk4jEQcU9MGy/rulF5WvUILseCM2E= golang.org/x/mod v0.22.0 h1:D4nJWe9zXqHOmWqj4VMOJhvzj7bEZg4wEYa759z1pH4= golang.org/x/mod v0.22.0/go.mod h1:6SkKJ3Xj0I0BrPOZoBy3bdMptDDU9oJrpohJ3eWZ1fY= +golang.org/x/net v0.0.0-20211216030914-fe4d6282115f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.34.0 h1:Mb7Mrk043xzHgnRM88suvJFwzVrRfHEHJEl5/71CKw0= golang.org/x/net v0.34.0/go.mod h1:di0qlW3YNM5oh6GqDGQr92MyTozJPmybPK4Ev/Gm31k= golang.org/x/sync v0.10.0 h1:3NQrjDixjgGwUOCaF8w2+VYHv0Ve/vGYSbdkTa98gmQ= golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.29.0 h1:TPYlXGxvx1MGTn2GiZDhnjPA9wZzZeGKHHmKhHYvgaU= golang.org/x/sys v0.29.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.29.0 h1:Xx0h3TtM9rzQpQuR4dKLrdglAmCEN5Oi+P74JdhdzXE= golang.org/x/tools v0.29.0/go.mod h1:KMQVMRsVxU6nHCFXrBPhDB8XncLNLM0lIy/F14RP588= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= gonum.org/v1/gonum v0.15.1 h1:FNy7N6OUZVUaWG9pTiD+jlhdQ3lMP+/LcTpJ6+a8sQ0= gonum.org/v1/gonum v0.15.1/go.mod h1:eZTZuRFrzu5pcyjN5wJhcIhnUdNijYxX1T2IcrOGY0o= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= From 86f46c0bb5bf626dd0e564afb2d0e9333d4c2166 Mon Sep 17 00:00:00 2001 From: angelajt Date: Fri, 31 Jan 2025 16:10:48 -0800 Subject: [PATCH 07/32] remove toolchain from go.mod --- go.mod | 2 -- 1 file changed, 2 deletions(-) diff --git a/go.mod b/go.mod index 20960f0c..07c139c0 100644 --- a/go.mod +++ b/go.mod @@ -2,8 +2,6 @@ module github.com/emer/emergent/v2 go 1.22.0 -toolchain go1.23.1 - require ( cogentcore.org/core v0.3.9-0.20250127075122-ddf64b82d707 cogentcore.org/lab v0.0.0-20250116065728-014d19175d12 From a824ad2b14e73190ce16303ec5907e4e5b361c5b Mon Sep 17 00:00:00 2001 From: angelajt Date: Fri, 31 Jan 2025 16:26:06 -0800 Subject: [PATCH 08/32] move readme window to the side --- egui/gui.go | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/egui/gui.go b/egui/gui.go index 466809e3..ddeb4707 100644 --- a/egui/gui.go +++ b/egui/gui.go @@ -124,17 +124,16 @@ func (gui *GUI) MakeBody(sim any, appname, title, about string, readme ...embed. if len(readme) > 0 { gui.addReadme(readme[0], split) + } else { + split.SetSplits(.2, .8) } - - split.SetSplits(.2, .8) } func (gui *GUI) addReadme(readmefs embed.FS, split *core.Splits) { gui.Readme = core.NewFrame(split) gui.Readme.Name = "readme" - split.SetTiles(core.TileSecondLong) - split.SetTileSplits(.8, .2) + split.SetTileSplits(.2, .5, .3) ctx := htmlcore.NewContext() From eb21c6c6123bcd475ada46e9974857288f57e703 Mon Sep 17 00:00:00 2001 From: angelajt Date: Fri, 31 Jan 2025 16:27:59 -0800 Subject: [PATCH 09/32] change SetTileSplits to SetSplits --- egui/gui.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/egui/gui.go b/egui/gui.go index ddeb4707..0faeb73f 100644 --- a/egui/gui.go +++ b/egui/gui.go @@ -133,7 +133,7 @@ func (gui *GUI) addReadme(readmefs embed.FS, split *core.Splits) { gui.Readme = core.NewFrame(split) gui.Readme.Name = "readme" - split.SetTileSplits(.2, .5, .3) + split.SetSplits(.2, .5, .3) ctx := htmlcore.NewContext() From 45097f69d497d6b5472e656d4bc8f4f617e32d68 Mon Sep 17 00:00:00 2001 From: Quincy Ryan Date: Fri, 31 Jan 2025 18:55:23 -0800 Subject: [PATCH 10/32] wrapping implemented --- netview/netview.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/netview/netview.go b/netview/netview.go index bf5fd1b3..3ebf0014 100644 --- a/netview/netview.go +++ b/netview/netview.go @@ -136,6 +136,9 @@ func (nv *NetView) Init() { }) }) tree.AddChildAt(nv, "vbar", func(w *core.Toolbar) { + w.FinalStyler(func(s *styles.Style) { + s.Wrap = true + }) w.Maker(nv.MakeViewbar) }) } From 324d8bddda48dcfdca91aed78be5db6a93854e2f Mon Sep 17 00:00:00 2001 From: Quincy Ryan Date: Mon, 3 Feb 2025 12:41:54 -0800 Subject: [PATCH 11/32] Replaced final stylers to stylers: tbar and vbar --- netview/netview.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/netview/netview.go b/netview/netview.go index 3ebf0014..670da792 100644 --- a/netview/netview.go +++ b/netview/netview.go @@ -103,7 +103,7 @@ func (nv *NetView) Init() { }) tree.AddChildAt(nv, "tbar", func(w *core.Toolbar) { - w.FinalStyler(func(s *styles.Style) { + w.Styler(func(s *styles.Style) { s.Wrap = true }) w.Maker(nv.MakeToolbar) @@ -136,7 +136,7 @@ func (nv *NetView) Init() { }) }) tree.AddChildAt(nv, "vbar", func(w *core.Toolbar) { - w.FinalStyler(func(s *styles.Style) { + w.Styler(func(s *styles.Style) { s.Wrap = true }) w.Maker(nv.MakeViewbar) From 06471c1db13192779c816d85f01387afba9ae89a Mon Sep 17 00:00:00 2001 From: Quincy Ryan Date: Fri, 14 Feb 2025 14:24:24 -0800 Subject: [PATCH 12/32] working button, not on sidebar --- egui/gui.go | 52 +++++++++++++++++++++++++++++++++++++++++++++++++++- emergent | Bin 0 -> 886 bytes 2 files changed, 51 insertions(+), 1 deletion(-) create mode 100644 emergent diff --git a/egui/gui.go b/egui/gui.go index 0faeb73f..08ed64ba 100644 --- a/egui/gui.go +++ b/egui/gui.go @@ -8,12 +8,18 @@ package egui import ( "embed" + "fmt" "net/http" + "strings" "cogentcore.org/core/base/errors" + "cogentcore.org/core/base/labels" "cogentcore.org/core/core" "cogentcore.org/core/events" "cogentcore.org/core/htmlcore" + "cogentcore.org/core/styles/abilities" + "cogentcore.org/core/system" + "cogentcore.org/core/tree" _ "cogentcore.org/lab/gosl/slbool/slboolcore" // include to get gui views "github.com/emer/emergent/v2/etime" "github.com/emer/emergent/v2/netview" @@ -141,6 +147,10 @@ func (gui *GUI) addReadme(readmefs embed.FS, split *core.Splits) { return htmlcore.GetURLFromFS(readmefs, rawURL) } + ctx.AddWikilinkHandler(gui.readmeWikilink("sim")) + + ctx.OpenURL = gui.readmeOpenURL + readme, err := readmefs.ReadFile("README.md") if errors.Log(err) == nil { @@ -148,6 +158,46 @@ func (gui *GUI) addReadme(readmefs embed.FS, split *core.Splits) { } } +func (gui *GUI) readmeWikilink(prefix string) htmlcore.WikilinkHandler { + return func(text string) (url string, label string) { + if !strings.HasPrefix(text, prefix+":") { + return "", "" + } + text = strings.TrimPrefix(text, prefix+":") + url = prefix + "://" + text + fmt.Println("text: ", text) + return url, text + } +} + +func (gui *GUI) readmeOpenURL(url string) { + if strings.HasPrefix(url, "sim://") { + fmt.Println("open url: ", url) + text := strings.TrimPrefix(url, "sim://") + WidgetFound := false + gui.Body.WidgetWalkDown(func(cw core.Widget, cwb *core.WidgetBase) bool { + // fmt.Println("Current widget Base:", cwb) + // fmt.Println("Widget found = ", WidgetFound) + if (WidgetFound) { + return tree.Break + } + if (labels.ToLabel(cwb.Name) == labels.ToLabel(text)) && (cwb.AbilityIs(abilities.Focusable)) { + // fmt.Println("found widget") + // fmt.Println(cwb.Name) + cwb.SetFocus() + // fmt.Println("focus set") + WidgetFound = true + return tree.Break + } else { + return tree.Continue + } + }) + // fmt.Println("WidgetWalkDown Break") + } else { + system.TheApp.OpenURL(url) + } +} + // AddNetView adds NetView in tab with given name func (gui *GUI) AddNetView(tabName string) *netview.NetView { nvt, tb := gui.Tabs.NewTab(tabName) @@ -175,4 +225,4 @@ func (gui *GUI) FinalizeGUI(closePrompt bool) { }) } gui.Active = true -} +} \ No newline at end of file diff --git a/emergent b/emergent new file mode 100644 index 0000000000000000000000000000000000000000..0feaab2f1fd707b6b525dfec69287c0367fda9a4 GIT binary patch literal 886 zcmd6lO;5r=5QYmzWA>mI<9S76VuB0Q(tuGDh{{2YU%_~TrCqi~=#uRRc=oRU!9U{3 zt49wW{4LJXVhB;<(Mg_tXSZ+D+3Bq9QE52`sL>!7C$+<)V;o05Q6+I6ucl#)p6I1g z;%Fi+uxNFd6=0jnf$L!^d!~W8C=h*z6mjjma&=}J`%#JH@$If;oVMJ7r2RgVem34x z$^EP)A|@$klG)66xrbVz+qJQ4j5cTfJP` zt~=bI8HCWrMiqrAEsi;m`Gf_~-%##FU>(>3vVaM&9+RAT0e1r@Y!OTJa_VTbsPkN; zr_?u8C{1bUbV_^uc#@mX*AGw&YH-mYB5BumKjZyRy*148|LyG>(%{GH`K~>_qH6S8 z!aL~a6pLV(W(CeLke#3kxq^#bD|EfKAblz9&|;Fz=>3G7T6Zu!9__JNFYM7U5MYBz v3z&TX#cEAp8F&E*&;;U|M~S8tKp#iBy2u}52|TO7w(n4wW*iUsc$Bm+Rd&rm literal 0 HcmV?d00001 From 82f1278018d56db9a82cc33b68352453232912a4 Mon Sep 17 00:00:00 2001 From: Qu1ncyRy4n Date: Fri, 21 Feb 2025 14:42:05 -0800 Subject: [PATCH 13/32] Beyond next widget capability --- egui/gui.go | 50 +++++++++++++++++++++++++++++++++++--------------- emergent | Bin 886 -> 886 bytes 2 files changed, 35 insertions(+), 15 deletions(-) diff --git a/egui/gui.go b/egui/gui.go index 08ed64ba..894fb7d6 100644 --- a/egui/gui.go +++ b/egui/gui.go @@ -171,29 +171,49 @@ func (gui *GUI) readmeWikilink(prefix string) htmlcore.WikilinkHandler { } func (gui *GUI) readmeOpenURL(url string) { + found := false + focusSet := false if strings.HasPrefix(url, "sim://") { fmt.Println("open url: ", url) text := strings.TrimPrefix(url, "sim://") - WidgetFound := false - gui.Body.WidgetWalkDown(func(cw core.Widget, cwb *core.WidgetBase) bool { - // fmt.Println("Current widget Base:", cwb) + gui.Body.Scene.WidgetWalkDown(func(cw core.Widget, cwb *core.WidgetBase) bool { + fmt.Println("Current widget Base:", cwb) // fmt.Println("Widget found = ", WidgetFound) - if (WidgetFound) { + if focusSet { return tree.Break } - if (labels.ToLabel(cwb.Name) == labels.ToLabel(text)) && (cwb.AbilityIs(abilities.Focusable)) { - // fmt.Println("found widget") - // fmt.Println(cwb.Name) - cwb.SetFocus() - // fmt.Println("focus set") - WidgetFound = true - return tree.Break - } else { - return tree.Continue + if strings.ToLower(labels.ToLabel(cw)) == strings.ToLower(text) { + if cwb.AbilityIs(abilities.Focusable) { + fmt.Printf("labels.ToLabel(cw): %v\n", labels.ToLabel(cw)) + fmt.Printf("text: %v\n", text) + fmt.Println("found widget") + fmt.Println(cwb.Name) + cwb.SetFocus() + fmt.Println("focus set") + found = true + return tree.Break + } + + next := core.AsWidget(tree.Next(cwb)) + if next.AbilityIs(abilities.Focusable) { + next.SetFocus() + return tree.Break + } + } + + // This looks very convoluted. + if !focusSet && strings.Contains( strings.ToLower(labels.ToLabel(cw)), strings.ToLower(text)) { + if cwb.AbilityIs(abilities.Focusable) { + cwb.SetFocus() + focusSet = true + return tree.Break + } } + return tree.Continue }) // fmt.Println("WidgetWalkDown Break") - } else { + } + if !found { system.TheApp.OpenURL(url) } } @@ -225,4 +245,4 @@ func (gui *GUI) FinalizeGUI(closePrompt bool) { }) } gui.Active = true -} \ No newline at end of file +} diff --git a/emergent b/emergent index 0feaab2f1fd707b6b525dfec69287c0367fda9a4..ed4ffbc9a0a4cad76b4fd5cd2951a4bc69a61de4 100644 GIT binary patch delta 110 zcmeyy_Kj^q5~JDV{fw@f>1AoY?z-+iIXR{oX=YBk$*uuG`Yx%4&XIv`sg;gVo)#H~ U#Z>|BX%jELB~{C2T_#UP04mKSiU0rr delta 110 zcmeyy_Kj^q5~Jzl{fw@f{wXCnjyaW~rWuA6>85EufvH)B`UOr#Wffr=mc>O8MwS-3 Up&98Wi4!lrB~{C2T_#UP0DD6vwg3PC From 1dbe131117c13996a75417a1dc32fd67cd6b5dfe Mon Sep 17 00:00:00 2001 From: Qu1ncyRy4n Date: Fri, 21 Feb 2025 15:38:43 -0800 Subject: [PATCH 14/32] Working Label-separate button highlights --- egui/gui.go | 49 +++++++++++++++++++++++++++++++++---------------- 1 file changed, 33 insertions(+), 16 deletions(-) diff --git a/egui/gui.go b/egui/gui.go index 894fb7d6..144d93ee 100644 --- a/egui/gui.go +++ b/egui/gui.go @@ -170,50 +170,67 @@ func (gui *GUI) readmeWikilink(prefix string) htmlcore.WikilinkHandler { } } + + // TODO + // Focus tab + // Use Label.toLabel + // core.AsWidget + // if you can do it on cw, + // Use as little nesting as possible, ifs an no elses if possible. + // Change work space to high level workspace: Not really getting? + // Disambiguate + // Add / parser for path: If path doesn't include "word"/, skip. + + func (gui *GUI) readmeOpenURL(url string) { - found := false + // found := false focusSet := false + if strings.HasPrefix(url, "sim://") { fmt.Println("open url: ", url) text := strings.TrimPrefix(url, "sim://") + + // var pathPrefix string = "" + // hasPath := false + // if strings.Contains(text, "/"){ + // pathPrefix, text, hasPath = strings.Cut(text, "/") + // } + gui.Body.Scene.WidgetWalkDown(func(cw core.Widget, cwb *core.WidgetBase) bool { - fmt.Println("Current widget Base:", cwb) - // fmt.Println("Widget found = ", WidgetFound) if focusSet { return tree.Break } - if strings.ToLower(labels.ToLabel(cw)) == strings.ToLower(text) { + label := labels.ToLabel(cw) + if strings.EqualFold(label, text) { + // found = true if cwb.AbilityIs(abilities.Focusable) { - fmt.Printf("labels.ToLabel(cw): %v\n", labels.ToLabel(cw)) - fmt.Printf("text: %v\n", text) - fmt.Println("found widget") - fmt.Println(cwb.Name) cwb.SetFocus() - fmt.Println("focus set") - found = true + focusSet = true return tree.Break } - - next := core.AsWidget(tree.Next(cwb)) + next := core.AsWidget(tree.Next(cwb)) // RM? recursive solution? if next.AbilityIs(abilities.Focusable) { next.SetFocus() + focusSet = true + fmt.Println("Next focus used") return tree.Break } } - // This looks very convoluted. - if !focusSet && strings.Contains( strings.ToLower(labels.ToLabel(cw)), strings.ToLower(text)) { + // Found but not focused loop + if !focusSet && strings.Contains(strings.ToLower(label), strings.ToLower(text)) { if cwb.AbilityIs(abilities.Focusable) { cwb.SetFocus() focusSet = true + fmt.Println("focus Loop used") return tree.Break } } return tree.Continue }) - // fmt.Println("WidgetWalkDown Break") } - if !found { + if !focusSet { + fmt.Println("No match to", url, " in sim. Trying OpenURL") system.TheApp.OpenURL(url) } } From 3ef42d672e7c73ab20b05979f29894bb505a8c63 Mon Sep 17 00:00:00 2001 From: Qu1ncyRy4n Date: Fri, 21 Feb 2025 17:52:43 -0800 Subject: [PATCH 15/32] Working pathed bhl + logic simplification --- egui/gui.go | 67 ++++++++++++++++++++++++++++++----------------------- 1 file changed, 38 insertions(+), 29 deletions(-) diff --git a/egui/gui.go b/egui/gui.go index 144d93ee..038ed0c9 100644 --- a/egui/gui.go +++ b/egui/gui.go @@ -181,50 +181,59 @@ func (gui *GUI) readmeWikilink(prefix string) htmlcore.WikilinkHandler { // Disambiguate // Add / parser for path: If path doesn't include "word"/, skip. + // Move path logic earlier as a disqualifier + // Try to register internship via handshake: Cogent core. + func (gui *GUI) readmeOpenURL(url string) { - // found := false focusSet := false if strings.HasPrefix(url, "sim://") { fmt.Println("open url: ", url) - text := strings.TrimPrefix(url, "sim://") + text := strings.TrimPrefix(url, "sim://") + - // var pathPrefix string = "" - // hasPath := false - // if strings.Contains(text, "/"){ - // pathPrefix, text, hasPath = strings.Cut(text, "/") - // } + // For links with path specificaiton: `[[sim://]]` + var pathPrefix string = "" + hasPath := false + if strings.Contains(text, "/"){ + pathPrefix, text, hasPath = strings.Cut(text, "/") + } + fmt.Println("pathPrefix:", pathPrefix," text:", text, "hasPath: ", hasPath) gui.Body.Scene.WidgetWalkDown(func(cw core.Widget, cwb *core.WidgetBase) bool { if focusSet { return tree.Break } + if !hasPath && !cwb.IsVisible() { + return tree.Break + } + if hasPath && !strings.Contains(cw.AsTree().Path(), pathPrefix){ + return tree.Continue + } label := labels.ToLabel(cw) - if strings.EqualFold(label, text) { - // found = true - if cwb.AbilityIs(abilities.Focusable) { - cwb.SetFocus() - focusSet = true - return tree.Break - } - next := core.AsWidget(tree.Next(cwb)) // RM? recursive solution? - if next.AbilityIs(abilities.Focusable) { - next.SetFocus() - focusSet = true - fmt.Println("Next focus used") - return tree.Break - } + if !strings.EqualFold(label, text) { + return tree.Continue } + if cwb.AbilityIs(abilities.Focusable) { + cwb.SetFocus() + focusSet = true + + // cwb.walkup activate Walk up until find a widget whose parents`tabs` and calls index in parent to get tab, tabs.select.index + // if widget.parent is inside a tabs, select this tabs, only if + // tabs.select.index + // selectTabIndex() + // indexInParent() call on the node in walk up fn : asTree + // Link hovering? (maybe not now) Maybe better to link more than not - // Found but not focused loop - if !focusSet && strings.Contains(strings.ToLower(label), strings.ToLower(text)) { - if cwb.AbilityIs(abilities.Focusable) { - cwb.SetFocus() - focusSet = true - fmt.Println("focus Loop used") - return tree.Break - } + return tree.Break + } + next := core.AsWidget(tree.Next(cwb)) + if next.AbilityIs(abilities.Focusable) { + next.SetFocus() + focusSet = true + fmt.Println("Next focus used") + return tree.Break } return tree.Continue }) From 8f4cbeeb9dbb22373101552d71976fdbfd52f108 Mon Sep 17 00:00:00 2001 From: Quincy Ryan <95124070+Qu1ncyRy4n@users.noreply.github.com> Date: Fri, 28 Feb 2025 14:57:40 -0800 Subject: [PATCH 16/32] Notes removed, ready for PR --- egui/gui.go | 25 ------------------------- 1 file changed, 25 deletions(-) diff --git a/egui/gui.go b/egui/gui.go index 038ed0c9..a4547cd4 100644 --- a/egui/gui.go +++ b/egui/gui.go @@ -170,21 +170,6 @@ func (gui *GUI) readmeWikilink(prefix string) htmlcore.WikilinkHandler { } } - - // TODO - // Focus tab - // Use Label.toLabel - // core.AsWidget - // if you can do it on cw, - // Use as little nesting as possible, ifs an no elses if possible. - // Change work space to high level workspace: Not really getting? - // Disambiguate - // Add / parser for path: If path doesn't include "word"/, skip. - - // Move path logic earlier as a disqualifier - // Try to register internship via handshake: Cogent core. - - func (gui *GUI) readmeOpenURL(url string) { focusSet := false @@ -192,8 +177,6 @@ func (gui *GUI) readmeOpenURL(url string) { fmt.Println("open url: ", url) text := strings.TrimPrefix(url, "sim://") - - // For links with path specificaiton: `[[sim://]]` var pathPrefix string = "" hasPath := false if strings.Contains(text, "/"){ @@ -218,14 +201,6 @@ func (gui *GUI) readmeOpenURL(url string) { if cwb.AbilityIs(abilities.Focusable) { cwb.SetFocus() focusSet = true - - // cwb.walkup activate Walk up until find a widget whose parents`tabs` and calls index in parent to get tab, tabs.select.index - // if widget.parent is inside a tabs, select this tabs, only if - // tabs.select.index - // selectTabIndex() - // indexInParent() call on the node in walk up fn : asTree - // Link hovering? (maybe not now) Maybe better to link more than not - return tree.Break } next := core.AsWidget(tree.Next(cwb)) From b942816fe1af36738f6070c90e514f07e8ada045 Mon Sep 17 00:00:00 2001 From: Quincy Ryan <95124070+Qu1ncyRy4n@users.noreply.github.com> Date: Fri, 28 Feb 2025 15:16:14 -0800 Subject: [PATCH 17/32] removed debug comments, added fn desc --- egui/gui.go | 2 -- 1 file changed, 2 deletions(-) diff --git a/egui/gui.go b/egui/gui.go index a4547cd4..e91e38c0 100644 --- a/egui/gui.go +++ b/egui/gui.go @@ -207,14 +207,12 @@ func (gui *GUI) readmeOpenURL(url string) { if next.AbilityIs(abilities.Focusable) { next.SetFocus() focusSet = true - fmt.Println("Next focus used") return tree.Break } return tree.Continue }) } if !focusSet { - fmt.Println("No match to", url, " in sim. Trying OpenURL") system.TheApp.OpenURL(url) } } From c55ff0c00abfaf6e10cfdc87f167ff9d0a0c5a37 Mon Sep 17 00:00:00 2001 From: Quincy Ryan <95124070+Qu1ncyRy4n@users.noreply.github.com> Date: Fri, 28 Feb 2025 15:17:00 -0800 Subject: [PATCH 18/32] description added --- egui/gui.go | 1 + 1 file changed, 1 insertion(+) diff --git a/egui/gui.go b/egui/gui.go index e91e38c0..6065fe5e 100644 --- a/egui/gui.go +++ b/egui/gui.go @@ -170,6 +170,7 @@ func (gui *GUI) readmeWikilink(prefix string) htmlcore.WikilinkHandler { } } +// Parses URL, highlights linked button or opens URL func (gui *GUI) readmeOpenURL(url string) { focusSet := false From 0feb88d3f9d9b5efcefb28dbe1711bb68f135036 Mon Sep 17 00:00:00 2001 From: Quincy Ryan <95124070+Qu1ncyRy4n@users.noreply.github.com> Date: Tue, 4 Mar 2025 14:56:41 -0800 Subject: [PATCH 19/32] some requested changes made, need specification on urls --- egui/gui.go | 20 +++++++++++--------- emergent | Bin 886 -> 0 bytes 2 files changed, 11 insertions(+), 9 deletions(-) delete mode 100644 emergent diff --git a/egui/gui.go b/egui/gui.go index 6065fe5e..defded00 100644 --- a/egui/gui.go +++ b/egui/gui.go @@ -8,10 +8,9 @@ package egui import ( "embed" - "fmt" + // "fmt" "net/http" "strings" - "cogentcore.org/core/base/errors" "cogentcore.org/core/base/labels" "cogentcore.org/core/core" @@ -165,17 +164,24 @@ func (gui *GUI) readmeWikilink(prefix string) htmlcore.WikilinkHandler { } text = strings.TrimPrefix(text, prefix+":") url = prefix + "://" + text - fmt.Println("text: ", text) return url, text } } -// Parses URL, highlights linked button or opens URL +// readmeOpenURL Parses URL, highlights linked button or opens URL func (gui *GUI) readmeOpenURL(url string) { focusSet := false + if !strings.HasPrefix(url, "sim://"){ + // core.ErrorSnackbar(gui.Body, fmt.Errorf("invalid sim rul %q", url)) + system.TheApp.OpenURL(url) + // if err != nil { + // core.ErrorSnackbar(gui.Body, fmt.Error("invalid sim rul %q", url)) + // } + } + + if strings.HasPrefix(url, "sim://") { - fmt.Println("open url: ", url) text := strings.TrimPrefix(url, "sim://") var pathPrefix string = "" @@ -183,7 +189,6 @@ func (gui *GUI) readmeOpenURL(url string) { if strings.Contains(text, "/"){ pathPrefix, text, hasPath = strings.Cut(text, "/") } - fmt.Println("pathPrefix:", pathPrefix," text:", text, "hasPath: ", hasPath) gui.Body.Scene.WidgetWalkDown(func(cw core.Widget, cwb *core.WidgetBase) bool { if focusSet { @@ -213,9 +218,6 @@ func (gui *GUI) readmeOpenURL(url string) { return tree.Continue }) } - if !focusSet { - system.TheApp.OpenURL(url) - } } // AddNetView adds NetView in tab with given name diff --git a/emergent b/emergent deleted file mode 100644 index ed4ffbc9a0a4cad76b4fd5cd2951a4bc69a61de4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 886 zcmd6lO;5r=5Qd9JL-wE-<9ShHVgk#DwLyX;;74PWhd1&tL?c*r&u_}r3Xf1U!X zmE6x*V#FlnOfsAKF85G3bo(}TZM?!qy@r`JkNW*hr)Si&)?Txf+hv8F^OJpcQ@c1Q zIR*c=Y4%nSLg{oJg$XT+S&+GydC=cb?j*1ZtOFUq0N8*@&b)xTffII#B?dWlG+xws zZd6RDZ>Uh3&}L>5+Vk6kTzfpdgIZ9Vi#8E)yFU9F?SJa6ZfyPE-lmWSKem|f+mkD* zM!&?og1&zv35M@1!5IcJU#LT_;G%4WuGbS}D1{wbOp+;=vkYW?hr%@DXvim{q Date: Tue, 4 Mar 2025 15:06:53 -0800 Subject: [PATCH 20/32] url and error handling implemented --- egui/gui.go | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/egui/gui.go b/egui/gui.go index defded00..aa52664c 100644 --- a/egui/gui.go +++ b/egui/gui.go @@ -8,7 +8,7 @@ package egui import ( "embed" - // "fmt" + "fmt" "net/http" "strings" "cogentcore.org/core/base/errors" @@ -173,11 +173,8 @@ func (gui *GUI) readmeOpenURL(url string) { focusSet := false if !strings.HasPrefix(url, "sim://"){ - // core.ErrorSnackbar(gui.Body, fmt.Errorf("invalid sim rul %q", url)) system.TheApp.OpenURL(url) - // if err != nil { - // core.ErrorSnackbar(gui.Body, fmt.Error("invalid sim rul %q", url)) - // } + return } @@ -218,6 +215,7 @@ func (gui *GUI) readmeOpenURL(url string) { return tree.Continue }) } + core.ErrorSnackbar(gui.Body, fmt.Errorf("invalid sim url %q", url)) } // AddNetView adds NetView in tab with given name From 693a601d647e3ed384dfe0c4c36b214092a68bb1 Mon Sep 17 00:00:00 2001 From: Quincy Ryan <95124070+Qu1ncyRy4n@users.noreply.github.com> Date: Tue, 4 Mar 2025 15:27:14 -0800 Subject: [PATCH 21/32] nesting if-hasprefix removed --- egui/gui.go | 67 +++++++++++++++++++++++++---------------------------- 1 file changed, 31 insertions(+), 36 deletions(-) diff --git a/egui/gui.go b/egui/gui.go index aa52664c..dcc1e285 100644 --- a/egui/gui.go +++ b/egui/gui.go @@ -171,50 +171,45 @@ func (gui *GUI) readmeWikilink(prefix string) htmlcore.WikilinkHandler { // readmeOpenURL Parses URL, highlights linked button or opens URL func (gui *GUI) readmeOpenURL(url string) { focusSet := false - if !strings.HasPrefix(url, "sim://"){ system.TheApp.OpenURL(url) return } + text := strings.TrimPrefix(url, "sim://") + var pathPrefix string = "" + hasPath := false + if strings.Contains(text, "/"){ + pathPrefix, text, hasPath = strings.Cut(text, "/") + } - if strings.HasPrefix(url, "sim://") { - text := strings.TrimPrefix(url, "sim://") - - var pathPrefix string = "" - hasPath := false - if strings.Contains(text, "/"){ - pathPrefix, text, hasPath = strings.Cut(text, "/") + gui.Body.Scene.WidgetWalkDown(func(cw core.Widget, cwb *core.WidgetBase) bool { + if focusSet { + return tree.Break } - - gui.Body.Scene.WidgetWalkDown(func(cw core.Widget, cwb *core.WidgetBase) bool { - if focusSet { - return tree.Break - } - if !hasPath && !cwb.IsVisible() { - return tree.Break - } - if hasPath && !strings.Contains(cw.AsTree().Path(), pathPrefix){ - return tree.Continue - } - label := labels.ToLabel(cw) - if !strings.EqualFold(label, text) { - return tree.Continue - } - if cwb.AbilityIs(abilities.Focusable) { - cwb.SetFocus() - focusSet = true - return tree.Break - } - next := core.AsWidget(tree.Next(cwb)) - if next.AbilityIs(abilities.Focusable) { - next.SetFocus() - focusSet = true - return tree.Break - } + if !hasPath && !cwb.IsVisible() { + return tree.Break + } + if hasPath && !strings.Contains(cw.AsTree().Path(), pathPrefix){ return tree.Continue - }) - } + } + label := labels.ToLabel(cw) + if !strings.EqualFold(label, text) { + return tree.Continue + } + if cwb.AbilityIs(abilities.Focusable) { + cwb.SetFocus() + focusSet = true + return tree.Break + } + next := core.AsWidget(tree.Next(cwb)) + if next.AbilityIs(abilities.Focusable) { + next.SetFocus() + focusSet = true + return tree.Break + } + return tree.Continue + }) core.ErrorSnackbar(gui.Body, fmt.Errorf("invalid sim url %q", url)) } From 02b79b69b5898367f8b4cce81093cdb5109a3e99 Mon Sep 17 00:00:00 2001 From: Quincy Ryan <95124070+Qu1ncyRy4n@users.noreply.github.com> Date: Thu, 6 Mar 2025 17:55:58 -0800 Subject: [PATCH 22/32] goimport, if focusset, cut text fixes --- egui/gui.go | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/egui/gui.go b/egui/gui.go index dcc1e285..bf13fc9a 100644 --- a/egui/gui.go +++ b/egui/gui.go @@ -11,6 +11,7 @@ import ( "fmt" "net/http" "strings" + "cogentcore.org/core/base/errors" "cogentcore.org/core/base/labels" "cogentcore.org/core/core" @@ -164,6 +165,9 @@ func (gui *GUI) readmeWikilink(prefix string) htmlcore.WikilinkHandler { } text = strings.TrimPrefix(text, prefix+":") url = prefix + "://" + text + if strings.Contains(text, "/") { + _, text, _ = strings.Cut(text, "/") + } return url, text } } @@ -171,15 +175,15 @@ func (gui *GUI) readmeWikilink(prefix string) htmlcore.WikilinkHandler { // readmeOpenURL Parses URL, highlights linked button or opens URL func (gui *GUI) readmeOpenURL(url string) { focusSet := false - if !strings.HasPrefix(url, "sim://"){ + if !strings.HasPrefix(url, "sim://") { system.TheApp.OpenURL(url) return } - text := strings.TrimPrefix(url, "sim://") + text := strings.TrimPrefix(url, "sim://") var pathPrefix string = "" - hasPath := false - if strings.Contains(text, "/"){ + hasPath := false + if strings.Contains(text, "/") { pathPrefix, text, hasPath = strings.Cut(text, "/") } @@ -190,7 +194,7 @@ func (gui *GUI) readmeOpenURL(url string) { if !hasPath && !cwb.IsVisible() { return tree.Break } - if hasPath && !strings.Contains(cw.AsTree().Path(), pathPrefix){ + if hasPath && !strings.Contains(cw.AsTree().Path(), pathPrefix) { return tree.Continue } label := labels.ToLabel(cw) @@ -201,8 +205,8 @@ func (gui *GUI) readmeOpenURL(url string) { cwb.SetFocus() focusSet = true return tree.Break - } - next := core.AsWidget(tree.Next(cwb)) + } + next := core.AsWidget(tree.Next(cwb)) if next.AbilityIs(abilities.Focusable) { next.SetFocus() focusSet = true @@ -210,7 +214,9 @@ func (gui *GUI) readmeOpenURL(url string) { } return tree.Continue }) - core.ErrorSnackbar(gui.Body, fmt.Errorf("invalid sim url %q", url)) + if !focusSet { + core.ErrorSnackbar(gui.Body, fmt.Errorf("invalid sim url %q", url)) + } } // AddNetView adds NetView in tab with given name From 872823f205e7b97afe403c6ad0da929aaefcc3d3 Mon Sep 17 00:00:00 2001 From: angelajt Date: Fri, 16 May 2025 13:29:34 -0700 Subject: [PATCH 23/32] implement answer boxes for questions, copy button --- egui/gui.go | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/egui/gui.go b/egui/gui.go index bf13fc9a..daef9bb0 100644 --- a/egui/gui.go +++ b/egui/gui.go @@ -13,12 +13,16 @@ import ( "strings" "cogentcore.org/core/base/errors" + "cogentcore.org/core/base/fileinfo/mimedata" "cogentcore.org/core/base/labels" "cogentcore.org/core/core" "cogentcore.org/core/events" "cogentcore.org/core/htmlcore" + "cogentcore.org/core/styles" "cogentcore.org/core/styles/abilities" + "cogentcore.org/core/styles/units" "cogentcore.org/core/system" + "cogentcore.org/core/texteditor" "cogentcore.org/core/tree" _ "cogentcore.org/lab/gosl/slbool/slboolcore" // include to get gui views "github.com/emer/emergent/v2/etime" @@ -151,6 +155,33 @@ func (gui *GUI) addReadme(readmefs embed.FS, split *core.Splits) { ctx.OpenURL = gui.readmeOpenURL + eds := []*texteditor.Editor{} + + ctx.ElementHandlers["question"] = func(ctx *htmlcore.Context) bool { + ed := texteditor.NewEditor(ctx.BlockParent) + ed.Buffer.Options.LineNumbers = false + ed.Styler(func(s *styles.Style) { + s.SetMono(false) + s.Padding.SetBottom(units.Em(0)) + }) + eds = append(eds, ed) + id := htmlcore.GetAttr(ctx.Node, "id") + ed.SetName(id) + return true + } + + core.NewButton(gui.Readme).SetText("Copy Answers").OnClick(func(e events.Event) { + clipboard := gui.Readme.Clipboard() + var ab strings.Builder + for _, ed := range eds { + ab.WriteString("Question " + ed.Name + ":\n" + ed.Buffer.String() + "\n") + } + answers := ab.String() + md := mimedata.NewText(answers) + clipboard.Write(md) + core.MessageSnackbar(gui.Body, "Answers copied to clipboard") + }) + readme, err := readmefs.ReadFile("README.md") if errors.Log(err) == nil { From 251cc74190fe8d76d09474e2f6279d1d8298c298 Mon Sep 17 00:00:00 2001 From: angelajt Date: Wed, 9 Jul 2025 10:27:57 -0700 Subject: [PATCH 24/32] change question to sim-question --- egui/gui.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/egui/gui.go b/egui/gui.go index daef9bb0..478a10a6 100644 --- a/egui/gui.go +++ b/egui/gui.go @@ -157,7 +157,7 @@ func (gui *GUI) addReadme(readmefs embed.FS, split *core.Splits) { eds := []*texteditor.Editor{} - ctx.ElementHandlers["question"] = func(ctx *htmlcore.Context) bool { + ctx.ElementHandlers["sim-question"] = func(ctx *htmlcore.Context) bool { ed := texteditor.NewEditor(ctx.BlockParent) ed.Buffer.Options.LineNumbers = false ed.Styler(func(s *styles.Style) { From ac11bbc0edc7b52bd7d652707efe594445a96e66 Mon Sep 17 00:00:00 2001 From: angelajt Date: Wed, 9 Jul 2025 10:35:54 -0700 Subject: [PATCH 25/32] remove styler for text editor --- egui/gui.go | 6 ------ 1 file changed, 6 deletions(-) diff --git a/egui/gui.go b/egui/gui.go index 478a10a6..feccf13d 100644 --- a/egui/gui.go +++ b/egui/gui.go @@ -18,9 +18,7 @@ import ( "cogentcore.org/core/core" "cogentcore.org/core/events" "cogentcore.org/core/htmlcore" - "cogentcore.org/core/styles" "cogentcore.org/core/styles/abilities" - "cogentcore.org/core/styles/units" "cogentcore.org/core/system" "cogentcore.org/core/texteditor" "cogentcore.org/core/tree" @@ -160,10 +158,6 @@ func (gui *GUI) addReadme(readmefs embed.FS, split *core.Splits) { ctx.ElementHandlers["sim-question"] = func(ctx *htmlcore.Context) bool { ed := texteditor.NewEditor(ctx.BlockParent) ed.Buffer.Options.LineNumbers = false - ed.Styler(func(s *styles.Style) { - s.SetMono(false) - s.Padding.SetBottom(units.Em(0)) - }) eds = append(eds, ed) id := htmlcore.GetAttr(ctx.Node, "id") ed.SetName(id) From d118e0b161b5323a2b09ec72727e04ecbd4b9591 Mon Sep 17 00:00:00 2001 From: angelajt Date: Wed, 9 Jul 2025 10:46:46 -0700 Subject: [PATCH 26/32] change button to sentence case, md formatting for answers --- egui/gui.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/egui/gui.go b/egui/gui.go index feccf13d..251f452c 100644 --- a/egui/gui.go +++ b/egui/gui.go @@ -164,11 +164,11 @@ func (gui *GUI) addReadme(readmefs embed.FS, split *core.Splits) { return true } - core.NewButton(gui.Readme).SetText("Copy Answers").OnClick(func(e events.Event) { + core.NewButton(gui.Readme).SetText("Copy answers").OnClick(func(e events.Event) { clipboard := gui.Readme.Clipboard() var ab strings.Builder for _, ed := range eds { - ab.WriteString("Question " + ed.Name + ":\n" + ed.Buffer.String() + "\n") + ab.WriteString("## Question " + ed.Name + "\n" + ed.Buffer.String() + "\n") } answers := ab.String() md := mimedata.NewText(answers) From d279c30b55b4014520e93be06af00815973e6102 Mon Sep 17 00:00:00 2001 From: Kai O'Reilly Date: Wed, 9 Jul 2025 11:13:54 -0700 Subject: [PATCH 27/32] egui: remove erroneous extra space in AddTableView --- egui/plots.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/egui/plots.go b/egui/plots.go index 44316e5c..1c8dd609 100644 --- a/egui/plots.go +++ b/egui/plots.go @@ -220,7 +220,7 @@ func (gui *GUI) AddTableView(lg *elog.Logs, mode etime.Modes, time etime.Times) return nil } - tt, _ := gui.Tabs.NewTab(mode.String() + " " + time.String() + " ") + tt, _ := gui.Tabs.NewTab(mode.String() + " " + time.String()) tv := tensorcore.NewTable(tt) gui.TableViews[key] = tv tv.SetReadOnly(true) From cc9d7e5a2f0927581e33e22479c1c7b835e7d10a Mon Sep 17 00:00:00 2001 From: Kai O'Reilly Date: Mon, 21 Jul 2025 10:50:31 -0700 Subject: [PATCH 28/32] revert etensor import path --- actrf/actrf.go | 4 ++-- actrf/actrfs.go | 2 +- actrf/mpi.go | 4 ++-- actrf/running.go | 2 +- chem/stater.go | 2 +- confusion/confusion.go | 4 ++-- decoder/linear.go | 4 ++-- decoder/linear_test.go | 2 +- decoder/softmax.go | 4 ++-- ecmd/std.go | 2 +- econfig/args.go | 2 +- econfig/config.go | 2 +- econfig/io.go | 2 +- egui/grids.go | 4 ++-- egui/gui.go | 4 ++-- egui/plots.go | 4 ++-- elog/context.go | 8 ++++---- elog/logs.go | 6 +++--- elog/stditems.go | 6 +++--- elog/table.go | 2 +- emer/layer.go | 2 +- emer/netparams.go | 2 +- emer/network.go | 2 +- env/env.go | 2 +- env/fixed.go | 6 +++--- env/freq.go | 6 +++--- env/mpifixed.go | 8 ++++---- esg/rule.go | 2 +- estats/actrf.go | 2 +- estats/funcs.go | 8 ++++---- estats/plots.go | 10 +++++----- estats/rasters.go | 2 +- estats/stats.go | 8 ++++---- go.mod | 26 +++++++++++++------------- go.sum | 23 +++++++++++------------ netview/laymesh.go | 2 +- netview/netdata.go | 4 ++-- patgen/configpats.go | 2 +- patgen/configvocab.go | 4 ++-- patgen/configvocabpats_test.go | 2 +- patgen/flip.go | 4 ++-- patgen/permuted.go | 6 +++--- patgen/rand.go | 2 +- patgen/reshape.go | 2 +- patgen/shuffle.go | 4 ++-- paths/circle.go | 2 +- paths/full.go | 2 +- paths/onetoone.go | 2 +- paths/pattern.go | 2 +- paths/poolonetoone.go | 2 +- paths/poolrect.go | 2 +- paths/poolsameunit.go | 2 +- paths/pooltile.go | 2 +- paths/pooltilesub.go | 2 +- paths/poolunifrnd.go | 4 ++-- paths/prjn_test.go | 2 +- paths/rect.go | 2 +- paths/uniformrand.go | 4 ++-- popcode/popcode2d.go | 2 +- popcode/popcode_test.go | 2 +- 60 files changed, 122 insertions(+), 123 deletions(-) diff --git a/actrf/actrf.go b/actrf/actrf.go index 8c82b168..8a272b1e 100644 --- a/actrf/actrf.go +++ b/actrf/actrf.go @@ -7,8 +7,8 @@ package actrf //go:generate core generate -add-types import ( - "github.com/emer/etensor/tensor" - "github.com/emer/etensor/tensor/stats/norm" + "cogentcore.org/core/tensor" + "cogentcore.org/core/tensor/stats/norm" ) // RF is used for computing an activation-based receptive field. diff --git a/actrf/actrfs.go b/actrf/actrfs.go index d4c8827c..b7da8825 100644 --- a/actrf/actrfs.go +++ b/actrf/actrfs.go @@ -8,7 +8,7 @@ import ( "fmt" "cogentcore.org/core/base/errors" - "github.com/emer/etensor/tensor" + "cogentcore.org/core/tensor" ) // RFs manages multiple named RF's -- each one must be initialized first diff --git a/actrf/mpi.go b/actrf/mpi.go index eeea78b9..bebed8b9 100644 --- a/actrf/mpi.go +++ b/actrf/mpi.go @@ -5,8 +5,8 @@ package actrf import ( - "cogentcore.org/lab/base/mpi" - "github.com/emer/etensor/tensor/tensormpi" + "cogentcore.org/core/base/mpi" + "cogentcore.org/core/tensor/tensormpi" ) // MPISum aggregates RF Sum data across all processors in given mpi communicator. diff --git a/actrf/running.go b/actrf/running.go index 7ed8e7c2..69f903c0 100644 --- a/actrf/running.go +++ b/actrf/running.go @@ -4,7 +4,7 @@ package actrf -import "github.com/emer/etensor/tensor" +import "cogentcore.org/core/tensor" // RunningAvg computes a running-average activation-based receptive field // for activities act relative to source activations src (the thing we're projecting rf onto) diff --git a/chem/stater.go b/chem/stater.go index c52f522b..48d3c8d7 100644 --- a/chem/stater.go +++ b/chem/stater.go @@ -4,7 +4,7 @@ package chem -import "github.com/emer/etensor/tensor/table" +import "cogentcore.org/core/tensor/table" // The Stater interface defines the functions implemented for State // structures containing chem state variables. diff --git a/confusion/confusion.go b/confusion/confusion.go index 8ed33715..554bfbb2 100644 --- a/confusion/confusion.go +++ b/confusion/confusion.go @@ -11,8 +11,8 @@ import ( "math" "cogentcore.org/core/core" - "github.com/emer/etensor/tensor" - "github.com/emer/etensor/tensor/stats/simat" + "cogentcore.org/core/tensor" + "cogentcore.org/core/tensor/stats/simat" ) // Matrix computes the confusion matrix, with rows representing diff --git a/decoder/linear.go b/decoder/linear.go index 37fffbbc..35e112d3 100644 --- a/decoder/linear.go +++ b/decoder/linear.go @@ -9,9 +9,9 @@ package decoder import ( "fmt" + "cogentcore.org/core/base/mpi" "cogentcore.org/core/math32" - "cogentcore.org/lab/base/mpi" - "github.com/emer/etensor/tensor" + "cogentcore.org/core/tensor" ) type ActivationFunc func(float32) float32 diff --git a/decoder/linear_test.go b/decoder/linear_test.go index f0685e49..9ffbf38c 100644 --- a/decoder/linear_test.go +++ b/decoder/linear_test.go @@ -8,7 +8,7 @@ import ( "fmt" "testing" - "github.com/emer/etensor/tensor" + "cogentcore.org/core/tensor" "github.com/stretchr/testify/assert" ) diff --git a/decoder/softmax.go b/decoder/softmax.go index c46be6df..8c164bfd 100644 --- a/decoder/softmax.go +++ b/decoder/softmax.go @@ -15,10 +15,10 @@ import ( "path/filepath" "sort" + "cogentcore.org/core/base/mpi" "cogentcore.org/core/math32" - "cogentcore.org/lab/base/mpi" + "cogentcore.org/core/tensor" "github.com/emer/emergent/v2/emer" - "github.com/emer/etensor/tensor" ) // SoftMax is a softmax decoder, which is the best choice for a 1-hot classification diff --git a/ecmd/std.go b/ecmd/std.go index a4875212..724db092 100644 --- a/ecmd/std.go +++ b/ecmd/std.go @@ -9,7 +9,7 @@ package ecmd import ( "os" - "cogentcore.org/lab/base/mpi" + "cogentcore.org/core/base/mpi" "github.com/emer/emergent/v2/elog" "github.com/emer/emergent/v2/emer" "github.com/emer/emergent/v2/etime" diff --git a/econfig/args.go b/econfig/args.go index aad7a4ee..6bb3a1b2 100644 --- a/econfig/args.go +++ b/econfig/args.go @@ -14,9 +14,9 @@ import ( "strings" "cogentcore.org/core/base/iox/tomlx" + "cogentcore.org/core/base/mpi" "cogentcore.org/core/base/reflectx" "cogentcore.org/core/base/strcase" - "cogentcore.org/lab/base/mpi" ) // SetFromArgs sets Config values from command-line args, diff --git a/econfig/config.go b/econfig/config.go index d1a3d92f..7f0707dd 100644 --- a/econfig/config.go +++ b/econfig/config.go @@ -12,7 +12,7 @@ import ( "reflect" "cogentcore.org/core/base/fsx" - "cogentcore.org/lab/base/mpi" + "cogentcore.org/core/base/mpi" ) var ( diff --git a/econfig/io.go b/econfig/io.go index 494a9c1c..615bd918 100644 --- a/econfig/io.go +++ b/econfig/io.go @@ -9,7 +9,7 @@ import ( "strings" "cogentcore.org/core/base/iox/tomlx" - "cogentcore.org/lab/base/mpi" + "cogentcore.org/core/base/mpi" ) // OpenWithIncludes reads config from given config file, diff --git a/egui/grids.go b/egui/grids.go index 11a86be7..4f3383c6 100644 --- a/egui/grids.go +++ b/egui/grids.go @@ -6,9 +6,9 @@ package egui import ( "cogentcore.org/core/core" + "cogentcore.org/core/tensor" + "cogentcore.org/core/tensor/tensorcore" "github.com/emer/emergent/v2/actrf" - "github.com/emer/etensor/tensor" - "github.com/emer/etensor/tensor/tensorcore" ) // Grid gets tensor grid view of given name, creating if not yet made diff --git a/egui/gui.go b/egui/gui.go index 251f452c..523101c1 100644 --- a/egui/gui.go +++ b/egui/gui.go @@ -18,15 +18,15 @@ import ( "cogentcore.org/core/core" "cogentcore.org/core/events" "cogentcore.org/core/htmlcore" + "cogentcore.org/core/plot/plotcore" "cogentcore.org/core/styles/abilities" "cogentcore.org/core/system" + "cogentcore.org/core/tensor/tensorcore" "cogentcore.org/core/texteditor" "cogentcore.org/core/tree" _ "cogentcore.org/lab/gosl/slbool/slboolcore" // include to get gui views "github.com/emer/emergent/v2/etime" "github.com/emer/emergent/v2/netview" - "github.com/emer/etensor/plot/plotcore" - "github.com/emer/etensor/tensor/tensorcore" ) // GUI manages all standard elements of a simulation Graphical User Interface diff --git a/egui/plots.go b/egui/plots.go index 1c8dd609..dfd169ce 100644 --- a/egui/plots.go +++ b/egui/plots.go @@ -10,10 +10,10 @@ import ( "cogentcore.org/core/base/errors" "cogentcore.org/core/colors/gradient" + "cogentcore.org/core/plot/plotcore" + "cogentcore.org/core/tensor/tensorcore" "github.com/emer/emergent/v2/elog" "github.com/emer/emergent/v2/etime" - "github.com/emer/etensor/plot/plotcore" - "github.com/emer/etensor/tensor/tensorcore" ) // AddPlots adds plots based on the unique tables we have, diff --git a/elog/context.go b/elog/context.go index 8f30a06f..3b5af40c 100644 --- a/elog/context.go +++ b/elog/context.go @@ -8,13 +8,13 @@ import ( "fmt" "cogentcore.org/core/base/errors" + "cogentcore.org/core/tensor" + "cogentcore.org/core/tensor/stats/metric" + "cogentcore.org/core/tensor/stats/stats" + "cogentcore.org/core/tensor/table" "github.com/emer/emergent/v2/emer" "github.com/emer/emergent/v2/estats" "github.com/emer/emergent/v2/etime" - "github.com/emer/etensor/tensor" - "github.com/emer/etensor/tensor/stats/metric" - "github.com/emer/etensor/tensor/stats/stats" - "github.com/emer/etensor/tensor/table" ) // WriteFunc function that computes and sets log values diff --git a/elog/logs.go b/elog/logs.go index dbaa334c..01510c90 100644 --- a/elog/logs.go +++ b/elog/logs.go @@ -13,12 +13,12 @@ import ( "path/filepath" "strconv" - "cogentcore.org/lab/base/mpi" + "cogentcore.org/core/base/mpi" + "cogentcore.org/core/tensor/table" + "cogentcore.org/core/tensor/tensormpi" "github.com/emer/emergent/v2/emer" "github.com/emer/emergent/v2/estats" "github.com/emer/emergent/v2/etime" - "github.com/emer/etensor/tensor/table" - "github.com/emer/etensor/tensor/tensormpi" ) // LogPrec is precision for saving float values in logs diff --git a/elog/stditems.go b/elog/stditems.go index 3e244f4a..959a7a45 100644 --- a/elog/stditems.go +++ b/elog/stditems.go @@ -11,11 +11,11 @@ import ( "cogentcore.org/core/base/errors" "cogentcore.org/core/math32/minmax" + "cogentcore.org/core/tensor/stats/split" + "cogentcore.org/core/tensor/stats/stats" + "cogentcore.org/core/tensor/table" "github.com/emer/emergent/v2/emer" "github.com/emer/emergent/v2/etime" - "github.com/emer/etensor/tensor/stats/split" - "github.com/emer/etensor/tensor/stats/stats" - "github.com/emer/etensor/tensor/table" ) // AddCounterItems adds given Int counters from Stats, diff --git a/elog/table.go b/elog/table.go index d10480e2..e159ebae 100644 --- a/elog/table.go +++ b/elog/table.go @@ -7,7 +7,7 @@ package elog import ( "os" - "github.com/emer/etensor/tensor/table" + "cogentcore.org/core/tensor/table" ) // LogTable contains all the data for one log table diff --git a/emer/layer.go b/emer/layer.go index 949de23f..93f2ba97 100644 --- a/emer/layer.go +++ b/emer/layer.go @@ -13,10 +13,10 @@ import ( "cogentcore.org/core/base/errors" "cogentcore.org/core/base/slicesx" "cogentcore.org/core/math32" + "cogentcore.org/core/tensor" "github.com/emer/emergent/v2/params" "github.com/emer/emergent/v2/relpos" "github.com/emer/emergent/v2/weights" - "github.com/emer/etensor/tensor" ) var ( diff --git a/emer/netparams.go b/emer/netparams.go index 02b1da1e..a24f2153 100644 --- a/emer/netparams.go +++ b/emer/netparams.go @@ -10,7 +10,7 @@ import ( "log/slog" "strings" - "cogentcore.org/lab/base/mpi" + "cogentcore.org/core/base/mpi" "github.com/emer/emergent/v2/params" ) diff --git a/emer/network.go b/emer/network.go index 08cea021..8c19908e 100644 --- a/emer/network.go +++ b/emer/network.go @@ -13,9 +13,9 @@ import ( "strings" "cogentcore.org/core/base/errors" + "cogentcore.org/core/base/randx" "cogentcore.org/core/core" "cogentcore.org/core/math32" - "cogentcore.org/lab/base/randx" "github.com/emer/emergent/v2/params" "github.com/emer/emergent/v2/relpos" ) diff --git a/env/env.go b/env/env.go index 1bb9836d..afc036cc 100644 --- a/env/env.go +++ b/env/env.go @@ -6,7 +6,7 @@ package env import ( "cogentcore.org/core/base/labels" - "github.com/emer/etensor/tensor" + "cogentcore.org/core/tensor" ) //go:generate core generate -add-types diff --git a/env/fixed.go b/env/fixed.go index 33d66ef6..598ef27d 100644 --- a/env/fixed.go +++ b/env/fixed.go @@ -10,10 +10,10 @@ import ( "math/rand" "cogentcore.org/core/base/errors" - "cogentcore.org/lab/base/randx" + "cogentcore.org/core/base/randx" + "cogentcore.org/core/tensor" + "cogentcore.org/core/tensor/table" "github.com/emer/emergent/v2/etime" - "github.com/emer/etensor/tensor" - "github.com/emer/etensor/tensor/table" ) // FixedTable is a basic Env that manages patterns from an table.Table, with diff --git a/env/freq.go b/env/freq.go index 4cdeb674..b69e3941 100644 --- a/env/freq.go +++ b/env/freq.go @@ -10,10 +10,10 @@ import ( "math" "cogentcore.org/core/base/errors" - "cogentcore.org/lab/base/randx" + "cogentcore.org/core/base/randx" + "cogentcore.org/core/tensor" + "cogentcore.org/core/tensor/table" "github.com/emer/emergent/v2/etime" - "github.com/emer/etensor/tensor" - "github.com/emer/etensor/tensor/table" ) // FreqTable is an Env that manages patterns from an table.Table with frequency diff --git a/env/mpifixed.go b/env/mpifixed.go index 76af50b8..aed39c0e 100644 --- a/env/mpifixed.go +++ b/env/mpifixed.go @@ -10,11 +10,11 @@ import ( "math/rand" "cogentcore.org/core/base/errors" - "cogentcore.org/lab/base/randx" + "cogentcore.org/core/base/randx" + "cogentcore.org/core/tensor" + "cogentcore.org/core/tensor/table" + "cogentcore.org/core/tensor/tensormpi" "github.com/emer/emergent/v2/etime" - "github.com/emer/etensor/tensor" - "github.com/emer/etensor/tensor/table" - "github.com/emer/etensor/tensor/tensormpi" ) // MPIFixedTable is an MPI-enabled version of the FixedTable, which is diff --git a/esg/rule.go b/esg/rule.go index 83d3adb1..e7ba392a 100644 --- a/esg/rule.go +++ b/esg/rule.go @@ -11,7 +11,7 @@ import ( "math/rand" "strings" - "cogentcore.org/lab/base/randx" + "cogentcore.org/core/base/randx" ) // RuleTypes are different types of rules (i.e., how the items are selected) diff --git a/estats/actrf.go b/estats/actrf.go index 91c47a4d..75e2f6fd 100644 --- a/estats/actrf.go +++ b/estats/actrf.go @@ -8,8 +8,8 @@ import ( "fmt" "strings" + "cogentcore.org/core/tensor" "github.com/emer/emergent/v2/emer" - "github.com/emer/etensor/tensor" ) // InitActRFs initializes a set of activation-based receptive field (ActRF) diff --git a/estats/funcs.go b/estats/funcs.go index eccf7d87..38ae50d1 100644 --- a/estats/funcs.go +++ b/estats/funcs.go @@ -6,11 +6,11 @@ package estats import ( "cogentcore.org/core/base/errors" + "cogentcore.org/core/tensor" + "cogentcore.org/core/tensor/stats/metric" + "cogentcore.org/core/tensor/stats/stats" + "cogentcore.org/core/tensor/table" "github.com/emer/emergent/v2/emer" - "github.com/emer/etensor/tensor" - "github.com/emer/etensor/tensor/stats/metric" - "github.com/emer/etensor/tensor/stats/stats" - "github.com/emer/etensor/tensor/table" ) // funcs contains misc stats functions diff --git a/estats/plots.go b/estats/plots.go index efdf9edb..1e2ecba7 100644 --- a/estats/plots.go +++ b/estats/plots.go @@ -5,11 +5,11 @@ package estats import ( - "github.com/emer/etensor/plot/plotcore" - "github.com/emer/etensor/tensor/stats/clust" - "github.com/emer/etensor/tensor/stats/metric" - "github.com/emer/etensor/tensor/stats/simat" - "github.com/emer/etensor/tensor/table" + "cogentcore.org/core/plot/plotcore" + "cogentcore.org/core/tensor/stats/clust" + "cogentcore.org/core/tensor/stats/metric" + "cogentcore.org/core/tensor/stats/simat" + "cogentcore.org/core/tensor/table" ) func ConfigPCAPlot(plt *plotcore.PlotEditor, dt *table.Table, nm string) { diff --git a/estats/rasters.go b/estats/rasters.go index cae6cf0a..94549b75 100644 --- a/estats/rasters.go +++ b/estats/rasters.go @@ -6,8 +6,8 @@ package estats import ( "cogentcore.org/core/base/errors" + "cogentcore.org/core/tensor" "github.com/emer/emergent/v2/emer" - "github.com/emer/etensor/tensor" ) // ConfigRasters configures spike rasters for given maximum number of cycles diff --git a/estats/stats.go b/estats/stats.go index 26530b69..28440c20 100644 --- a/estats/stats.go +++ b/estats/stats.go @@ -10,13 +10,13 @@ import ( "fmt" "cogentcore.org/core/base/timer" + "cogentcore.org/core/plot/plotcore" + "cogentcore.org/core/tensor" + "cogentcore.org/core/tensor/stats/pca" + "cogentcore.org/core/tensor/stats/simat" "github.com/emer/emergent/v2/actrf" "github.com/emer/emergent/v2/confusion" "github.com/emer/emergent/v2/decoder" - "github.com/emer/etensor/plot/plotcore" - "github.com/emer/etensor/tensor" - "github.com/emer/etensor/tensor/stats/pca" - "github.com/emer/etensor/tensor/stats/simat" ) // Stats provides maps for storing statistics as named scalar and tensor values. diff --git a/go.mod b/go.mod index 07c139c0..a0967e0a 100644 --- a/go.mod +++ b/go.mod @@ -3,12 +3,10 @@ module github.com/emer/emergent/v2 go 1.22.0 require ( - cogentcore.org/core v0.3.9-0.20250127075122-ddf64b82d707 - cogentcore.org/lab v0.0.0-20250116065728-014d19175d12 + cogentcore.org/core v0.3.5 github.com/BurntSushi/toml v1.3.2 - github.com/emer/etensor v0.0.0-20250128230539-a9366874f7c3 - github.com/stretchr/testify v1.10.0 - golang.org/x/exp v0.0.0-20250128182459-e0ece0dbea4c + github.com/stretchr/testify v1.9.0 + golang.org/x/exp v0.0.0-20240823005443-9b4947da3948 ) require ( @@ -19,7 +17,7 @@ require ( github.com/aymanbagabas/go-osc52/v2 v2.0.1 // indirect github.com/aymerick/douceur v0.2.0 // indirect github.com/chewxy/math32 v1.10.1 // indirect - github.com/cogentcore/webgpu v0.0.0-20250118183535-3dd1436165cf // indirect + github.com/cogentcore/webgpu v0.0.0-20240906154609-e35089e9a725 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/dlclark/regexp2 v1.11.0 // indirect github.com/ericchiang/css v1.3.0 // indirect @@ -33,6 +31,7 @@ require ( github.com/hack-pad/hackpadfs v0.2.1 // indirect github.com/hack-pad/safejs v0.1.1 // indirect github.com/jinzhu/copier v0.4.0 // indirect + github.com/kr/text v0.2.0 // indirect github.com/lucasb-eyer/go-colorful v1.2.0 // indirect github.com/mattn/go-isatty v0.0.20 // indirect github.com/mattn/go-runewidth v0.0.15 // indirect @@ -42,13 +41,14 @@ require ( github.com/pelletier/go-toml/v2 v2.1.2-0.20240227203013-2b69615b5d55 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/rivo/uniseg v0.4.7 // indirect + github.com/rogpeppe/go-internal v1.12.0 // indirect golang.org/x/image v0.18.0 // indirect - golang.org/x/mod v0.22.0 // indirect - golang.org/x/net v0.34.0 // indirect - golang.org/x/sync v0.10.0 // indirect - golang.org/x/sys v0.29.0 // indirect - golang.org/x/text v0.21.0 // indirect - golang.org/x/tools v0.29.0 // indirect - gonum.org/v1/gonum v0.15.1 // indirect + golang.org/x/mod v0.20.0 // indirect + golang.org/x/net v0.28.0 // indirect + golang.org/x/sync v0.8.0 // indirect + golang.org/x/sys v0.23.0 // indirect + golang.org/x/text v0.17.0 // indirect + golang.org/x/tools v0.24.0 // indirect + gonum.org/v1/gonum v0.15.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/go.sum b/go.sum index 3ed23cd0..84b1765a 100644 --- a/go.sum +++ b/go.sum @@ -1,7 +1,5 @@ -cogentcore.org/core v0.3.9-0.20250127075122-ddf64b82d707 h1:iuSRxC52LhHwAiNKfKx0UslAmZV2Io7QkkQYOgOyM6M= -cogentcore.org/core v0.3.9-0.20250127075122-ddf64b82d707/go.mod h1:o9vCyA2Sdsc6W0qYvxzzQQlozfemP0TiAGEHDDR+xLU= -cogentcore.org/lab v0.0.0-20250116065728-014d19175d12 h1:Y11ebOAN9EMCEmSg2M/O5wToGOOvQN08CWi2iou8jGU= -cogentcore.org/lab v0.0.0-20250116065728-014d19175d12/go.mod h1:QlbVp7wdCDo59f6d0UIoPFLtIsCcG7DueOqd/8OohUs= +cogentcore.org/core v0.3.5 h1:qTW/+GSUbeYYCSi29zdAQ/fnjWg2/E/aTbAMbfAFGfI= +cogentcore.org/core v0.3.5/go.mod h1:q3OrXihYG2aTE2oG785ad5b6aJ3wzSCXeeD2SSLKWIE= github.com/Bios-Marcel/wastebasket v0.0.4-0.20240213135800-f26f1ae0a7c4 h1:6lx9xzJAhdjq0LvVfbITeC3IH9Fzvo1aBahyPu2FuG8= github.com/Bios-Marcel/wastebasket v0.0.4-0.20240213135800-f26f1ae0a7c4/go.mod h1:FChzXi1izqzdPb6BiNZmcZLGyTYiT61iGx9Rxx9GNeI= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= @@ -24,12 +22,13 @@ github.com/aymerick/douceur v0.2.0 h1:Mv+mAeH1Q+n9Fr+oyamOlAkUNPWPlA8PPGR0QAaYuP github.com/aymerick/douceur v0.2.0/go.mod h1:wlT5vV2O3h55X9m7iVYN0TBM0NH/MmbLnd30/FjWUq4= github.com/chewxy/math32 v1.10.1 h1:LFpeY0SLJXeaiej/eIp2L40VYfscTvKh/FSEZ68uMkU= github.com/chewxy/math32 v1.10.1/go.mod h1:dOB2rcuFrCn6UHrze36WSLVPKtzPMRAQvBvUwkSsLqs= -github.com/cogentcore/webgpu v0.0.0-20250118183535-3dd1436165cf h1:efac1kg29kwhSLyMd9EjwHbNX8jJpiRG5Dm2QIb56YQ= -github.com/cogentcore/webgpu v0.0.0-20250118183535-3dd1436165cf/go.mod h1:ciqaxChrmRRMU1SnI5OE12Cn3QWvOKO+e5nSy+N9S1o= +github.com/cogentcore/webgpu v0.0.0-20240906154609-e35089e9a725 h1:Zf2ixJY1PsN3huZa0Uof7VKYuoBbdxJCEbKdhKhHqwE= +github.com/cogentcore/webgpu v0.0.0-20240906154609-e35089e9a725/go.mod h1:ciqaxChrmRRMU1SnI5OE12Cn3QWvOKO+e5nSy+N9S1o= github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= +github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= @@ -95,8 +94,8 @@ github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ= github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= -github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII= -github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o= +github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8= +github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4= github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= @@ -111,13 +110,13 @@ github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXf github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= -github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= -github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= +github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/exp v0.0.0-20250128182459-e0ece0dbea4c h1:KL/ZBHXgKGVmuZBZ01Lt57yE5ws8ZPSkkihmEyq7FXc= -golang.org/x/exp v0.0.0-20250128182459-e0ece0dbea4c/go.mod h1:tujkw807nyEEAamNbDrEGzRav+ilXA7PCRAd6xsmwiU= +golang.org/x/exp v0.0.0-20240823005443-9b4947da3948 h1:kx6Ds3MlpiUHKj7syVnbp57++8WpuKPcR5yjLBjvLEA= +golang.org/x/exp v0.0.0-20240823005443-9b4947da3948/go.mod h1:akd2r19cwCdwSwWeIdzYQGa/EZZyqcOdwWiwj5L5eKQ= golang.org/x/image v0.0.0-20190703141733-d6a02ce849c9/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/image v0.18.0 h1:jGzIakQa/ZXI1I0Fxvaa9W7yP25TqT6cHIHn+6CqvSQ= golang.org/x/image v0.18.0/go.mod h1:4yyo5vMFQjVjUcVk4jEQcU9MGy/rulF5WvUILseCM2E= diff --git a/netview/laymesh.go b/netview/laymesh.go index c6ad933c..2791c626 100644 --- a/netview/laymesh.go +++ b/netview/laymesh.go @@ -7,9 +7,9 @@ package netview import ( "cogentcore.org/core/gpu/shape" "cogentcore.org/core/math32" + "cogentcore.org/core/tensor" "cogentcore.org/core/xyz" "github.com/emer/emergent/v2/emer" - "github.com/emer/etensor/tensor" ) // LayMesh is a xyz.Mesh that represents a layer -- it is dynamically updated using the diff --git a/netview/netdata.go b/netview/netdata.go index 6dddbb02..77794a10 100644 --- a/netview/netdata.go +++ b/netview/netdata.go @@ -20,10 +20,10 @@ import ( "cogentcore.org/core/base/errors" "cogentcore.org/core/core" "cogentcore.org/core/math32" + "cogentcore.org/core/plot/plotcore" + "cogentcore.org/core/tensor/table" "github.com/emer/emergent/v2/emer" "github.com/emer/emergent/v2/ringidx" - "github.com/emer/etensor/plot/plotcore" - "github.com/emer/etensor/tensor/table" ) // NetData maintains a record of all the network data that has been displayed diff --git a/patgen/configpats.go b/patgen/configpats.go index b7d87cb9..6a4c868f 100644 --- a/patgen/configpats.go +++ b/patgen/configpats.go @@ -10,7 +10,7 @@ import ( "reflect" "cogentcore.org/core/base/errors" - "github.com/emer/etensor/tensor/table" + "cogentcore.org/core/tensor/table" ) // InitPats initiates patterns to be used in MixPats diff --git a/patgen/configvocab.go b/patgen/configvocab.go index 6e4adfd4..92ea6978 100644 --- a/patgen/configvocab.go +++ b/patgen/configvocab.go @@ -12,8 +12,8 @@ import ( "math" "cogentcore.org/core/base/errors" - "github.com/emer/etensor/tensor" - "github.com/emer/etensor/tensor/stats/stats" + "cogentcore.org/core/tensor" + "cogentcore.org/core/tensor/stats/stats" ) // Vocab is a map of named tensors that contain patterns used for creating diff --git a/patgen/configvocabpats_test.go b/patgen/configvocabpats_test.go index c8ad8878..86eba68d 100644 --- a/patgen/configvocabpats_test.go +++ b/patgen/configvocabpats_test.go @@ -6,7 +6,7 @@ import ( "testing" "cogentcore.org/core/base/errors" - "github.com/emer/etensor/tensor/table" + "cogentcore.org/core/tensor/table" "github.com/stretchr/testify/assert" "golang.org/x/exp/maps" ) diff --git a/patgen/flip.go b/patgen/flip.go index b397c4b3..dfaf4614 100644 --- a/patgen/flip.go +++ b/patgen/flip.go @@ -5,8 +5,8 @@ package patgen import ( - "cogentcore.org/lab/base/randx" - "github.com/emer/etensor/tensor" + "cogentcore.org/core/base/randx" + "cogentcore.org/core/tensor" ) // FlipBits turns nOff bits that are currently On to Off and diff --git a/patgen/permuted.go b/patgen/permuted.go index 67adea35..8b188584 100644 --- a/patgen/permuted.go +++ b/patgen/permuted.go @@ -10,10 +10,10 @@ import ( "log" "math" + "cogentcore.org/core/base/randx" "cogentcore.org/core/math32" - "cogentcore.org/lab/base/randx" - "github.com/emer/etensor/tensor" - "github.com/emer/etensor/tensor/stats/metric" + "cogentcore.org/core/tensor" + "cogentcore.org/core/tensor/stats/metric" ) // PermutedBinary sets the given tensor to contain nOn onVal values and the diff --git a/patgen/rand.go b/patgen/rand.go index 2e2befb4..481c6ae9 100644 --- a/patgen/rand.go +++ b/patgen/rand.go @@ -4,7 +4,7 @@ package patgen -import "cogentcore.org/lab/base/randx" +import "cogentcore.org/core/base/randx" var ( // RandSource is a random source to use for all random numbers used in patgen diff --git a/patgen/reshape.go b/patgen/reshape.go index 56aadc57..f532d6c4 100644 --- a/patgen/reshape.go +++ b/patgen/reshape.go @@ -9,7 +9,7 @@ import ( "reflect" "cogentcore.org/core/core" - "github.com/emer/etensor/tensor/table" + "cogentcore.org/core/tensor/table" ) // ReshapeCpp fixes C++ emergent table shape which is reversed from Go. diff --git a/patgen/shuffle.go b/patgen/shuffle.go index bf193d75..de771705 100644 --- a/patgen/shuffle.go +++ b/patgen/shuffle.go @@ -5,8 +5,8 @@ package patgen import ( - "cogentcore.org/lab/base/randx" - "github.com/emer/etensor/tensor/table" + "cogentcore.org/core/base/randx" + "cogentcore.org/core/tensor/table" ) // Shuffle shuffles rows in specified columns in the table independently diff --git a/paths/circle.go b/paths/circle.go index 03a2d063..c337af17 100644 --- a/paths/circle.go +++ b/paths/circle.go @@ -7,9 +7,9 @@ package paths import ( "cogentcore.org/core/math32" "cogentcore.org/core/math32/vecint" + "cogentcore.org/core/tensor" "github.com/emer/emergent/v2/edge" "github.com/emer/emergent/v2/efuns" - "github.com/emer/etensor/tensor" ) // Circle implements a circular pattern of connectivity between two layers diff --git a/paths/full.go b/paths/full.go index 3b5d4da1..d01de5a3 100644 --- a/paths/full.go +++ b/paths/full.go @@ -4,7 +4,7 @@ package paths -import "github.com/emer/etensor/tensor" +import "cogentcore.org/core/tensor" // Full implements full all-to-all pattern of connectivity between two layers type Full struct { diff --git a/paths/onetoone.go b/paths/onetoone.go index df6a68e7..ca396e74 100644 --- a/paths/onetoone.go +++ b/paths/onetoone.go @@ -4,7 +4,7 @@ package paths -import "github.com/emer/etensor/tensor" +import "cogentcore.org/core/tensor" // OneToOne implements point-to-point one-to-one pattern of connectivity between two layers type OneToOne struct { diff --git a/paths/pattern.go b/paths/pattern.go index 13a7936d..de324159 100644 --- a/paths/pattern.go +++ b/paths/pattern.go @@ -7,7 +7,7 @@ package paths //go:generate core generate -add-types import ( - "github.com/emer/etensor/tensor" + "cogentcore.org/core/tensor" ) // Pattern defines a pattern of connectivity between two layers. diff --git a/paths/poolonetoone.go b/paths/poolonetoone.go index fd4bdf67..e372ed2e 100644 --- a/paths/poolonetoone.go +++ b/paths/poolonetoone.go @@ -4,7 +4,7 @@ package paths -import "github.com/emer/etensor/tensor" +import "cogentcore.org/core/tensor" // PoolOneToOne implements one-to-one connectivity between pools within layers. // Pools are the outer-most two dimensions of a 4D layer shape. diff --git a/paths/poolrect.go b/paths/poolrect.go index 216cff21..bac69a3c 100644 --- a/paths/poolrect.go +++ b/paths/poolrect.go @@ -7,8 +7,8 @@ package paths import ( "cogentcore.org/core/math32" "cogentcore.org/core/math32/vecint" + "cogentcore.org/core/tensor" "github.com/emer/emergent/v2/edge" - "github.com/emer/etensor/tensor" ) // PoolRect implements a rectangular pattern of connectivity between diff --git a/paths/poolsameunit.go b/paths/poolsameunit.go index e1dbfe73..147e32d5 100644 --- a/paths/poolsameunit.go +++ b/paths/poolsameunit.go @@ -4,7 +4,7 @@ package paths -import "github.com/emer/etensor/tensor" +import "cogentcore.org/core/tensor" // PoolSameUnit connects a given unit to the unit at the same index // across all the pools in a layer. diff --git a/paths/pooltile.go b/paths/pooltile.go index 40758fc7..7a0bc712 100644 --- a/paths/pooltile.go +++ b/paths/pooltile.go @@ -11,9 +11,9 @@ import ( "cogentcore.org/core/math32" "cogentcore.org/core/math32/minmax" "cogentcore.org/core/math32/vecint" + "cogentcore.org/core/tensor" "github.com/emer/emergent/v2/edge" "github.com/emer/emergent/v2/efuns" - "github.com/emer/etensor/tensor" ) // PoolTile implements tiled 2D connectivity between pools within layers, where diff --git a/paths/pooltilesub.go b/paths/pooltilesub.go index 11002e7c..dcbe54a6 100644 --- a/paths/pooltilesub.go +++ b/paths/pooltilesub.go @@ -11,9 +11,9 @@ import ( "cogentcore.org/core/math32" "cogentcore.org/core/math32/minmax" "cogentcore.org/core/math32/vecint" + "cogentcore.org/core/tensor" "github.com/emer/emergent/v2/edge" "github.com/emer/emergent/v2/efuns" - "github.com/emer/etensor/tensor" ) // PoolTileSub implements tiled 2D connectivity between pools within layers, where diff --git a/paths/poolunifrnd.go b/paths/poolunifrnd.go index a4fa16a8..e0efeb90 100644 --- a/paths/poolunifrnd.go +++ b/paths/poolunifrnd.go @@ -8,8 +8,8 @@ import ( "math" "sort" - "cogentcore.org/lab/base/randx" - "github.com/emer/etensor/tensor" + "cogentcore.org/core/base/randx" + "cogentcore.org/core/tensor" ) // PoolUniformRand implements random pattern of connectivity between pools within layers. diff --git a/paths/prjn_test.go b/paths/prjn_test.go index 277ccc83..f504c0af 100644 --- a/paths/prjn_test.go +++ b/paths/prjn_test.go @@ -7,7 +7,7 @@ package paths import ( "testing" - "github.com/emer/etensor/tensor" + "cogentcore.org/core/tensor" "github.com/stretchr/testify/assert" ) diff --git a/paths/rect.go b/paths/rect.go index e6fc9370..ba8dea8f 100644 --- a/paths/rect.go +++ b/paths/rect.go @@ -7,8 +7,8 @@ package paths import ( "cogentcore.org/core/math32" "cogentcore.org/core/math32/vecint" + "cogentcore.org/core/tensor" "github.com/emer/emergent/v2/edge" - "github.com/emer/etensor/tensor" ) // Rect implements a rectangular pattern of connectivity between two layers diff --git a/paths/uniformrand.go b/paths/uniformrand.go index 45af646b..d5f6d926 100644 --- a/paths/uniformrand.go +++ b/paths/uniformrand.go @@ -9,8 +9,8 @@ import ( "math/rand" "sort" - "cogentcore.org/lab/base/randx" - "github.com/emer/etensor/tensor" + "cogentcore.org/core/base/randx" + "cogentcore.org/core/tensor" ) // UniformRand implements uniform random pattern of connectivity between two layers diff --git a/popcode/popcode2d.go b/popcode/popcode2d.go index 9e59d621..5925f647 100644 --- a/popcode/popcode2d.go +++ b/popcode/popcode2d.go @@ -10,7 +10,7 @@ import ( "sort" "cogentcore.org/core/math32" - "github.com/emer/etensor/tensor" + "cogentcore.org/core/tensor" ) // popcode.TwoD provides encoding and decoding of population diff --git a/popcode/popcode_test.go b/popcode/popcode_test.go index d3161a3a..55cb35f0 100644 --- a/popcode/popcode_test.go +++ b/popcode/popcode_test.go @@ -8,7 +8,7 @@ import ( "testing" "cogentcore.org/core/math32" - "github.com/emer/etensor/tensor" + "cogentcore.org/core/tensor" ) // difTol is the numerical difference tolerance for comparing vs. target values From e2e022cdbf9516ed4c9d0e4696e0ad5795ae7627 Mon Sep 17 00:00:00 2001 From: Kai O'Reilly Date: Mon, 21 Jul 2025 11:13:59 -0700 Subject: [PATCH 29/32] egui: fix errors with leabra-merge --- egui/gui.go | 28 +++++++++++++--------------- go.mod | 2 ++ go.sum | 10 ++++++++-- 3 files changed, 23 insertions(+), 17 deletions(-) diff --git a/egui/gui.go b/egui/gui.go index c853c6db..8327dc40 100644 --- a/egui/gui.go +++ b/egui/gui.go @@ -9,8 +9,10 @@ package egui import ( "embed" "fmt" + "io/fs" "net/http" "strings" + "sync" "cogentcore.org/core/base/errors" "cogentcore.org/core/base/fileinfo/mimedata" @@ -19,13 +21,13 @@ import ( "cogentcore.org/core/enums" "cogentcore.org/core/events" "cogentcore.org/core/htmlcore" - "cogentcore.org/core/plot/plotcore" + "cogentcore.org/core/styles" "cogentcore.org/core/styles/abilities" "cogentcore.org/core/system" - "cogentcore.org/core/tensor/tensorcore" - "cogentcore.org/core/texteditor" + "cogentcore.org/core/text/textcore" "cogentcore.org/core/tree" _ "cogentcore.org/lab/gosl/slbool/slboolcore" // include to get gui views + "cogentcore.org/lab/lab" "github.com/emer/emergent/v2/etime" "github.com/emer/emergent/v2/netview" ) @@ -49,10 +51,10 @@ type GUI struct { // Body is the entire content of the sim window. Body *core.Body `display:"-"` - // Toolbar is the overall sim toolbar + // Toolbar is the overall sim toolbar Toolbar *core.Toolbar `display:"-"` - // Readme is the sim ReadMe frame + // Readme is the sim readme frame Readme *core.Frame `display:"-"` // OnStop is called when running is stopped through the GUI, @@ -151,8 +153,8 @@ func NewGUIBody(b tree.Node, sim any, fsroot fs.FS, appname, title, about string // a [core.Form] editor of the given sim object, and a filetree for the data filesystem // rooted at fsroot, and with given app name, title, and about information. // The first arg is an optional existing [core.Body] to make into: if nil then -// a new body is made first. It takes an optional readme string. -func (gui *GUI) MakeBody(b tree.Node, sim any, fsroot fs.FS, appname, title, about string, readme ...string) { +// a new body is made first. It takes an optional fs with a README.md file. +func (gui *GUI) MakeBody(b tree.Node, sim any, fsroot fs.FS, appname, title, about string, readme ...embed.FS) { gui.StopLevel = etime.NoTime // corresponds to the first level typically core.NoSentenceCaseFor = append(core.NoSentenceCaseFor, "github.com/emer") if b == nil { @@ -182,7 +184,6 @@ func (gui *GUI) MakeBody(b tree.Node, sim any, fsroot fs.FS, appname, title, abo gui.Toolbar.Maker(tb.MakeToolbar) } } - fform := core.NewFrame(split) fform.Styler(func(s *styles.Style) { s.Direction = styles.Column @@ -202,9 +203,6 @@ func (gui *GUI) MakeBody(b tree.Node, sim any, fsroot fs.FS, appname, title, abo split.SetTiles(core.TileSplit, core.TileSpan) split.SetSplits(.2, .5, .8) - gui.Tabs = core.NewTabs(split) - gui.Tabs.Name = "tabs" - if len(readme) > 0 { gui.addReadme(readme[0], split) } else { @@ -228,11 +226,11 @@ func (gui *GUI) addReadme(readmefs embed.FS, split *core.Splits) { ctx.OpenURL = gui.readmeOpenURL - eds := []*texteditor.Editor{} + eds := []*textcore.Editor{} ctx.ElementHandlers["sim-question"] = func(ctx *htmlcore.Context) bool { - ed := texteditor.NewEditor(ctx.BlockParent) - ed.Buffer.Options.LineNumbers = false + ed := textcore.NewEditor(ctx.BlockParent) + ed.Lines.Settings.LineNumbers = false eds = append(eds, ed) id := htmlcore.GetAttr(ctx.Node, "id") ed.SetName(id) @@ -243,7 +241,7 @@ func (gui *GUI) addReadme(readmefs embed.FS, split *core.Splits) { clipboard := gui.Readme.Clipboard() var ab strings.Builder for _, ed := range eds { - ab.WriteString("## Question " + ed.Name + "\n" + ed.Buffer.String() + "\n") + ab.WriteString("## Question " + ed.Name + "\n" + ed.Lines.String() + "\n") } answers := ab.String() md := mimedata.NewText(answers) diff --git a/go.mod b/go.mod index b97be615..0f3c5f37 100644 --- a/go.mod +++ b/go.mod @@ -21,10 +21,12 @@ require ( github.com/cogentcore/webgpu v0.23.0 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/dlclark/regexp2 v1.11.0 // indirect + github.com/ericchiang/css v1.3.0 // indirect github.com/fsnotify/fsnotify v1.8.0 // indirect github.com/go-gl/glfw/v3.3/glfw v0.0.0-20240506104042-037f3cc74f2a // indirect github.com/go-text/typesetting v0.3.1-0.20250402122313-7a0f05577ff5 // indirect github.com/gobwas/glob v0.2.3 // indirect + github.com/gomarkdown/markdown v0.0.0-20250311123330-531bef5e742b // indirect github.com/gorilla/css v1.0.1 // indirect github.com/h2non/filetype v1.1.3 // indirect github.com/hack-pad/go-indexeddb v0.3.2 // indirect diff --git a/go.sum b/go.sum index e5e46d2e..7d8df445 100644 --- a/go.sum +++ b/go.sum @@ -36,8 +36,6 @@ github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1 github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/dlclark/regexp2 v1.11.0 h1:G/nrcoOa7ZXlpoa/91N3X7mM3r8eIlMBBJZvsz/mxKI= github.com/dlclark/regexp2 v1.11.0/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8= -github.com/emer/etensor v0.0.0-20250128230539-a9366874f7c3 h1:9yia9XH5z88JjDJwi1trDlVQTIEJ9TTUwdxo6bzr94U= -github.com/emer/etensor v0.0.0-20250128230539-a9366874f7c3/go.mod h1:pH4lH+TChvqJG4Lh2Qi1bS5e3pnGK1QDkCSfUX4J+lQ= github.com/ericchiang/css v1.3.0 h1:e0vS+vpujMjtT3/SYu7qTHn1LVzXWcLCCDjlfq3YlLY= github.com/ericchiang/css v1.3.0/go.mod h1:sVSdL+MFR9Q4cKJMQzpIkHIDOLiK+7Wmjjhq7D+MubA= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= @@ -53,6 +51,9 @@ github.com/go-text/typesetting-utils v0.0.0-20241103174707-87a29e9e6066 h1:qCuYC github.com/go-text/typesetting-utils v0.0.0-20241103174707-87a29e9e6066/go.mod h1:DDxDdQEnB70R8owOx3LVpEFvpMK9eeH1o2r0yZhFI9o= github.com/gobwas/glob v0.2.3 h1:A4xDbljILXROh+kObIiy5kIaPYD8e96x1tgBhUI5J+Y= github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8= +github.com/gomarkdown/markdown v0.0.0-20250311123330-531bef5e742b h1:EY/KpStFl60qA17CptGXhwfZ+k1sFNJIUNR8DdbcuUk= +github.com/gomarkdown/markdown v0.0.0-20250311123330-531bef5e742b/go.mod h1:JDGcbDT52eL4fju3sZ4TeHGsQwhG9nbDV21aMyhwPoA= +github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/gorilla/css v1.0.1 h1:ntNaBIghp6JmvWnxbZKANoLyuXTPZ4cAMlo6RyhlbO8= @@ -131,6 +132,7 @@ golang.org/x/image v0.25.0 h1:Y6uW6rH1y5y/LK1J8BPWZtr6yZ7hrsy6hFrXjgsc2fQ= golang.org/x/image v0.25.0/go.mod h1:tCAmOEGthTtkalusGp1g3xa2gke8J6c2N565dTyl9Rs= golang.org/x/mod v0.25.0 h1:n7a+ZbQKQA/Ysbyb0/6IbB1H/X41mKgbhfv7AfG/44w= golang.org/x/mod v0.25.0/go.mod h1:IXM97Txy2VM4PJ3gI61r1YEk/gAj6zAHN3AdZt6S9Ww= +golang.org/x/net v0.0.0-20211216030914-fe4d6282115f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.41.0 h1:vBTly1HeNPEn3wtREYfy4GZ/NECgw2Cnl+nK6Nz3uvw= golang.org/x/net v0.41.0/go.mod h1:B/K4NNqkfmg07DQYrbwvSluqCJOOXwUjeb/5lOisjbA= golang.org/x/sync v0.15.0 h1:KWH3jNZsfyT6xfAfKiz6MRNmd46ByHDYaZ7KSkCtdW8= @@ -141,11 +143,15 @@ golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.33.0 h1:q3i8TbbEz+JRD9ywIRlyRAQbM0qF7hu24q3teo2hbuw= golang.org/x/sys v0.33.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.26.0 h1:P42AVeLghgTYr4+xUnTRKDMqpar+PtX7KWuNQL21L8M= golang.org/x/text v0.26.0/go.mod h1:QK15LZJUUQVJxhz7wXgxSy/CJaTFjd0G+YLonydOVQA= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.33.0 h1:4qz2S3zmRxbGIhDIAgjxvFutSvH5EfnsYrRBj0UI0bc= golang.org/x/tools v0.33.0/go.mod h1:CIJMaWEY88juyUfo7UbgPqbC8rU2OqfAV1h2Qp0oMYI= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= From 8c5da6b2dc8e1851b41735408318fae06ab2a9dd Mon Sep 17 00:00:00 2001 From: Kai O'Reilly Date: Mon, 21 Jul 2025 11:18:24 -0700 Subject: [PATCH 30/32] egui: fix splits for addReadme --- egui/gui.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/egui/gui.go b/egui/gui.go index 8327dc40..7b9cc720 100644 --- a/egui/gui.go +++ b/egui/gui.go @@ -214,7 +214,8 @@ func (gui *GUI) addReadme(readmefs embed.FS, split *core.Splits) { gui.Readme = core.NewFrame(split) gui.Readme.Name = "readme" - split.SetSplits(.2, .5, .3) + split.SetTiles(core.TileSplit, core.TileSpan, core.TileSpan) + split.SetSplits(.2, .5, .5, .3) ctx := htmlcore.NewContext() From 52708b2694b2dc0c40ff290514c6beab4bcfa1e2 Mon Sep 17 00:00:00 2001 From: Kai O'Reilly Date: Mon, 21 Jul 2025 11:24:46 -0700 Subject: [PATCH 31/32] egui: more updating --- egui/gui.go | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/egui/gui.go b/egui/gui.go index 7b9cc720..3c1e64d6 100644 --- a/egui/gui.go +++ b/egui/gui.go @@ -51,9 +51,6 @@ type GUI struct { // Body is the entire content of the sim window. Body *core.Body `display:"-"` - // Toolbar is the overall sim toolbar - Toolbar *core.Toolbar `display:"-"` - // Readme is the sim readme frame Readme *core.Frame `display:"-"` @@ -290,7 +287,7 @@ func (gui *GUI) readmeOpenURL(url string) { if focusSet { return tree.Break } - if !hasPath && !cwb.IsVisible() { + if !hasPath && !cwb.IsDisplayable() { return tree.Break } if hasPath && !strings.Contains(cw.AsTree().Path(), pathPrefix) { From 727125a072d32bf4bbebaae1d792062eebb70027 Mon Sep 17 00:00:00 2001 From: Kai O'Reilly Date: Mon, 21 Jul 2025 12:36:50 -0700 Subject: [PATCH 32/32] egui: fix splits for non-readme --- egui/gui.go | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/egui/gui.go b/egui/gui.go index 3c1e64d6..d65393fb 100644 --- a/egui/gui.go +++ b/egui/gui.go @@ -197,13 +197,12 @@ func (gui *GUI) MakeBody(b tree.Node, sim any, fsroot fs.FS, appname, title, abo gui.CycleUpdateInterval = 10 gui.UpdateFiles() gui.Files.Tabber = tabs - split.SetTiles(core.TileSplit, core.TileSpan) - split.SetSplits(.2, .5, .8) if len(readme) > 0 { gui.addReadme(readme[0], split) } else { - split.SetSplits(.2, .8) + split.SetTiles(core.TileSplit, core.TileSpan) + split.SetSplits(.2, .5, .8) } }