Skip to content

Commit

Permalink
tooltips for layer labels showing Info field.
Browse files Browse the repository at this point in the history
  • Loading branch information
rcoreilly committed Aug 24, 2024
1 parent fa1ced2 commit a2f0334
Show file tree
Hide file tree
Showing 11 changed files with 67 additions and 47 deletions.
16 changes: 7 additions & 9 deletions elog/context.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ package elog

import (
"fmt"
"log"

"cogentcore.org/core/base/errors"
"cogentcore.org/core/tensor"
Expand Down Expand Up @@ -152,14 +151,13 @@ func (ctx *Context) SetAggItem(mode etime.Modes, time etime.Times, itemNm string
// returns aggregated value(s).
func (ctx *Context) SetAggItemScope(scope etime.ScopeKey, itemNm string, ag stats.Stats) []float64 {
ix := ctx.Logs.IndexViewScope(scope)
vals := stats.StatColumn(ix, itemNm, ag)
if len(vals) == 0 {
fmt.Printf("elog.Context SetAggItemScope for item: %s in scope: %s -- could not aggregate item: %s from scope: %s -- check names\n", ctx.Item.Name, ctx.Scope, itemNm, scope)
vals, err := stats.StatColumn(ix, itemNm, ag)
if err != nil {
fmt.Printf("elog.Context SetAggItemScope for item: %s in scope: %s: could not aggregate item: %s from scope: %s: %s\n", ctx.Item.Name, ctx.Scope, itemNm, scope, err.Error())
return nil
}
cl, err := ctx.Table.ColumnByNameTry(ctx.Item.Name)
if err != nil {
log.Println(err)
cl, err := ctx.Table.ColumnByName(ctx.Item.Name)
if errors.Log(err) != nil {
return vals
}
if cl.NumDims() > 1 {
Expand Down Expand Up @@ -228,7 +226,7 @@ func (ctx *Context) ItemColTensor(mode etime.Modes, time etime.Times, itemNm str
// in log for given scope.
func (ctx *Context) ItemColTensorScope(scope etime.ScopeKey, itemNm string) tensor.Tensor {
dt := ctx.Logs.TableScope(scope)
return dt.ColumnByName(itemNm)
return errors.Log1(dt.ColumnByName(itemNm))
}

///////////////////////////////////////////////////
Expand Down Expand Up @@ -280,7 +278,7 @@ func (ctx *Context) SetLayerSampleTensor(layNm, unitVar string) *tensor.Float32
// Column must be tensor.Float32
func (ctx *Context) ClosestPat(layNm, unitVar string, pats *table.Table, colnm, namecol string) (int, float32, string) {
tsr := ctx.SetLayerTensor(layNm, unitVar)
col := pats.ColumnByName(colnm)
col := errors.Log1(pats.ColumnByName(colnm))
// note: requires Increasing metric so using Inv
row, cor := metric.ClosestRow32(tsr, col.(*tensor.Float32), metric.InvCorrelation32)
cor = 1 - cor // convert back to correl
Expand Down
5 changes: 3 additions & 2 deletions env/fixed.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import (
"log"
"math/rand"

"cogentcore.org/core/base/errors"
"cogentcore.org/core/base/randx"
"cogentcore.org/core/tensor"
"cogentcore.org/core/tensor/table"
Expand Down Expand Up @@ -115,7 +116,7 @@ func (ft *FixedTable) Row() int {
}

func (ft *FixedTable) SetTrialName() {
if nms := ft.Table.Table.ColumnByName(ft.NameCol); nms != nil {
if nms := errors.Ignore1(ft.Table.Table.ColumnByName(ft.NameCol)); nms != nil {
rw := ft.Row()
if rw >= 0 && rw < nms.Len() {
ft.TrialName.Set(nms.String1D(rw))
Expand All @@ -124,7 +125,7 @@ func (ft *FixedTable) SetTrialName() {
}

func (ft *FixedTable) SetGroupName() {
if nms := ft.Table.Table.ColumnByName(ft.GroupCol); nms != nil {
if nms := errors.Ignore1(ft.Table.Table.ColumnByName(ft.GroupCol)); nms != nil {
rw := ft.Row()
if rw >= 0 && rw < nms.Len() {
ft.GroupName.Set(nms.String1D(rw))
Expand Down
9 changes: 5 additions & 4 deletions env/freq.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import (
"log"
"math"

"cogentcore.org/core/base/errors"
"cogentcore.org/core/base/randx"
"cogentcore.org/core/tensor"
"cogentcore.org/core/tensor/table"
Expand Down Expand Up @@ -70,7 +71,7 @@ func (ft *FreqTable) Validate() error {
if ft.Table.Table.NumColumns() == 0 {
return fmt.Errorf("env.FreqTable: %v Table has no columns -- Outputs will be invalid", ft.Name)
}
_, err := ft.Table.Table.ColumnByNameTry(ft.FreqCol)
_, err := ft.Table.Table.ColumnByName(ft.FreqCol)
if err != nil {
return err
}
Expand Down Expand Up @@ -107,7 +108,7 @@ func (ft *FreqTable) Sample() {
} else {
ft.Order = ft.Order[:0]
}
frqs := ft.Table.Table.ColumnByName(ft.FreqCol)
frqs := errors.Log1(ft.Table.Table.ColumnByName(ft.FreqCol))

for ri := 0; ri < np; ri++ {
ti := ft.Table.Indexes[ri]
Expand Down Expand Up @@ -138,7 +139,7 @@ func (ft *FreqTable) Row() int {
}

func (ft *FreqTable) SetTrialName() {
if nms := ft.Table.Table.ColumnByName(ft.NameCol); nms != nil {
if nms := errors.Ignore1(ft.Table.Table.ColumnByName(ft.NameCol)); nms != nil {
rw := ft.Row()
if rw >= 0 && rw < nms.Len() {
ft.TrialName.Set(nms.String1D(rw))
Expand All @@ -147,7 +148,7 @@ func (ft *FreqTable) SetTrialName() {
}

func (ft *FreqTable) SetGroupName() {
if nms := ft.Table.Table.ColumnByName(ft.GroupCol); nms != nil {
if nms := errors.Ignore1(ft.Table.Table.ColumnByName(ft.GroupCol)); nms != nil {
rw := ft.Row()
if rw >= 0 && rw < nms.Len() {
ft.GroupName.Set(nms.String1D(rw))
Expand Down
5 changes: 3 additions & 2 deletions env/mpifixed.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import (
"log"
"math/rand"

"cogentcore.org/core/base/errors"
"cogentcore.org/core/base/randx"
"cogentcore.org/core/tensor"
"cogentcore.org/core/tensor/table"
Expand Down Expand Up @@ -113,7 +114,7 @@ func (ft *MPIFixedTable) Row() int {
}

func (ft *MPIFixedTable) SetTrialName() {
if nms := ft.Table.Table.ColumnByName(ft.NameCol); nms != nil {
if nms := errors.Ignore1(ft.Table.Table.ColumnByName(ft.NameCol)); nms != nil {
rw := ft.Row()
if rw >= 0 && rw < nms.Len() {
ft.TrialName.Set(nms.String1D(rw))
Expand All @@ -122,7 +123,7 @@ func (ft *MPIFixedTable) SetTrialName() {
}

func (ft *MPIFixedTable) SetGroupName() {
if nms := ft.Table.Table.ColumnByName(ft.GroupCol); nms != nil {
if nms := errors.Ignore1(ft.Table.Table.ColumnByName(ft.GroupCol)); nms != nil {
rw := ft.Row()
if rw >= 0 && rw < nms.Len() {
ft.GroupName.Set(nms.String1D(rw))
Expand Down
2 changes: 1 addition & 1 deletion estats/funcs.go
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ func (st *Stats) LayerVarsCorrelRep(net emer.Network, layNm, unitVarA, unitVarB
// di is a data parallel index di, for networks capable of processing input patterns in parallel.
func (st *Stats) ClosestPat(net emer.Network, layNm, unitVar string, di int, pats *table.Table, colnm, namecol string) (int, float32, string) {
tsr := st.SetLayerTensor(net, layNm, unitVar, di)
col := pats.ColumnByName(colnm)
col := errors.Log1(pats.ColumnByName(colnm))
// note: requires Increasing metric so using Inv
row, cor := metric.ClosestRow32(tsr, col.(*tensor.Float32), metric.InvCorrelation32)
cor = 1 - cor // convert back to correl
Expand Down
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ module github.com/emer/emergent/v2
go 1.22

require (
cogentcore.org/core v0.3.3-0.20240823053213-f975eb9c487c
cogentcore.org/core v0.3.3-0.20240824041409-a3b72b4e5b61
github.com/BurntSushi/toml v1.3.2
github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883
github.com/iancoleman/strcase v0.3.0
Expand Down
4 changes: 2 additions & 2 deletions go.sum
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
cogentcore.org/core v0.3.3-0.20240823053213-f975eb9c487c h1:fPTsOnzaFa9WVzplGW7JtTAnQ845uc5c3t/kcklASHQ=
cogentcore.org/core v0.3.3-0.20240823053213-f975eb9c487c/go.mod h1:dg3uRsPcd8S1ZYvRD2TztCtjopRkrB5V/lbl54xsQd4=
cogentcore.org/core v0.3.3-0.20240824041409-a3b72b4e5b61 h1:1G8tQzATA1o9QRVbCV5+YTrQFkLSTZas2EiJS4bjiG8=
cogentcore.org/core v0.3.3-0.20240824041409-a3b72b4e5b61/go.mod h1:dg3uRsPcd8S1ZYvRD2TztCtjopRkrB5V/lbl54xsQd4=
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=
Expand Down
46 changes: 31 additions & 15 deletions netview/events.go
Original file line number Diff line number Diff line change
Expand Up @@ -44,20 +44,13 @@ func (sw *Scene) Init() {

func (sw *Scene) MouseDownEvent(e events.Event) {
pos := e.Pos().Sub(sw.Geom.ContentBBox.Min)
ns := xyz.NodesUnderPoint(sw.SceneXYZ(), pos)
for _, n := range ns {
ln, ok := n.(*LayName)
if ok {
lay, _ := ln.NetView.Net.AsEmer().EmerLayerByName(ln.Text)
if lay != nil {
FormDialog(sw, lay, "Layer: "+lay.StyleName())
}
e.SetHandled()
return
}
lay := sw.LayerLabelAtPoint(pos)
if lay != nil {
FormDialog(sw, lay, "Layer: "+lay.StyleName())
e.SetHandled()
return
}

lay, _, _, unIndex := sw.LayerUnitAtPoint(e.Pos())
lay, _, _, unIndex := sw.LayerUnitAtPoint(pos)
if lay == nil {
return
}
Expand All @@ -72,8 +65,18 @@ func (sw *Scene) WidgetTooltip(pos image.Point) (string, image.Point) {
if pos == image.Pt(-1, -1) {
return "_", image.Point{}
}
lpos := pos.Sub(sw.Geom.ContentBBox.Min)
lay := sw.LayerLabelAtPoint(lpos)
if lay != nil {
le := lay.AsEmer()
tt := "[Click to edit]"
if le.Info != "" {
tt += " " + le.Info
}
return tt, pos
}

lay, lx, ly, _ := sw.LayerUnitAtPoint(pos)
lay, lx, ly, _ := sw.LayerUnitAtPoint(lpos)
if lay == nil {
return "", pos
}
Expand Down Expand Up @@ -106,8 +109,21 @@ func (sw *Scene) WidgetTooltip(pos image.Point) (string, image.Point) {
return tt, pos
}

func (sw *Scene) LayerLabelAtPoint(pos image.Point) emer.Layer {
ns := xyz.NodesUnderPoint(sw.SceneXYZ(), pos)
for _, n := range ns {
ln, ok := n.(*LayName)
if ok {
lay, _ := ln.NetView.Net.AsEmer().EmerLayerByName(ln.Text)
if lay != nil {
return lay
}
}
}
return nil
}

func (sw *Scene) LayerUnitAtPoint(pos image.Point) (lay emer.Layer, lx, ly, unIndex int) {
pos = pos.Sub(sw.Geom.ContentBBox.Min)
sc := sw.SceneXYZ()
laysGpi := sc.ChildByName("Layers", 0)
if laysGpi == nil {
Expand Down
5 changes: 3 additions & 2 deletions netview/netview.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ import (
"sync"
"time"

"cogentcore.org/core/base/errors"
"cogentcore.org/core/colors"
"cogentcore.org/core/colors/colormap"
"cogentcore.org/core/core"
Expand Down Expand Up @@ -566,7 +567,7 @@ func (nv *NetView) UpdateLayers() {
if !tree.Update(laysGp, layConfig) {
for li := range laysGp.Children {
ly := nv.Net.EmerLayer(li)
lmesh := se.MeshByName(ly.StyleName())
lmesh := errors.Log1(se.MeshByName(ly.StyleName()))
se.SetMesh(lmesh) // does update
}
return
Expand All @@ -585,7 +586,7 @@ func (nv *NetView) UpdateLayers() {
for li, lgi := range laysGp.Children {
ly := nv.Net.EmerLayer(li)
lb := ly.AsEmer()
lmesh := se.MeshByName(ly.StyleName())
lmesh, _ := se.MeshByName(ly.StyleName())
if lmesh == nil {
NewLayMesh(se, nv, ly)
} else {
Expand Down
11 changes: 6 additions & 5 deletions patgen/configpats.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import (
"log"
"reflect"

"cogentcore.org/core/base/errors"
"cogentcore.org/core/tensor/table"
)

Expand All @@ -27,9 +28,9 @@ func InitPats(dt *table.Table, name, desc, inputName, outputName string, listSiz
// poolSource order: left right, bottom up
func MixPats(dt *table.Table, mp Vocab, colName string, poolSource []string) error {
name := dt.MetaData["name"]
listSize := dt.ColumnByName(colName).Shape().Sizes[0]
ySize := dt.ColumnByName(colName).Shape().Sizes[1]
xSize := dt.ColumnByName(colName).Shape().Sizes[2]
listSize := errors.Log1(dt.ColumnByName(colName)).Shape().Sizes[0]
ySize := errors.Log1(dt.ColumnByName(colName)).Shape().Sizes[1]
xSize := errors.Log1(dt.ColumnByName(colName)).Shape().Sizes[2]
for row := 0; row < listSize; row++ {
dt.SetString("Name", row, fmt.Sprint(name, row))
npool := 0
Expand Down Expand Up @@ -65,8 +66,8 @@ func MixPats(dt *table.Table, mp Vocab, colName string, poolSource []string) err
func MixPatsN(dt *table.Table, mp Vocab, colName string, poolSource []string, targRow, vocabStart, vocabN int) error {
name := dt.MetaData["name"]
_ = name
ySize := dt.ColumnByName(colName).Shape().Sizes[1]
xSize := dt.ColumnByName(colName).Shape().Sizes[2]
ySize := errors.Log1(dt.ColumnByName(colName)).Shape().Sizes[1]
xSize := errors.Log1(dt.ColumnByName(colName)).Shape().Sizes[2]
for ri := 0; ri < vocabN; ri++ {
row := targRow + ri
vocIndex := vocabStart + ri
Expand Down
9 changes: 5 additions & 4 deletions patgen/configvocabpats_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import (
"slices"
"testing"

"cogentcore.org/core/base/errors"
"cogentcore.org/core/tensor/table"
"github.com/stretchr/testify/assert"
"golang.org/x/exp/maps"
Expand Down Expand Up @@ -313,8 +314,8 @@ func TestVocab(t *testing.T) {
// fmt.Println("Input Pats")
// fmt.Println(dt.ColumnByName("Input").Shape.Sizes)
// fmt.Println(dt.ColumnByName("Input").String())
assert.Equal(t, []int{6, 3, 2, 3, 3}, dt.ColumnByName("Input").Shape().Sizes)
assert.Equal(t, exip, dt.ColumnByName("Input").String())
assert.Equal(t, []int{6, 3, 2, 3, 3}, errors.Log1(dt.ColumnByName("Input")).Shape().Sizes)
assert.Equal(t, exip, errors.Log1(dt.ColumnByName("Input")).String())

exop := `Tensor: [Row: 6, ySize: 3, xSize: 2, poolY: 3, poolX: 3]
[0 0 0]: 0 0 0 0 1 0
Expand Down Expand Up @@ -377,6 +378,6 @@ func TestVocab(t *testing.T) {
// fmt.Println(dt.ColumnByName("ECout").Shape.Sizes)
// fmt.Println(dt.ColumnByName("ECout").String())

assert.Equal(t, []int{6, 3, 2, 3, 3}, dt.ColumnByName("ECout").Shape().Sizes)
assert.Equal(t, exop, dt.ColumnByName("ECout").String())
assert.Equal(t, []int{6, 3, 2, 3, 3}, errors.Log1(dt.ColumnByName("ECout")).Shape().Sizes)
assert.Equal(t, exop, errors.Log1(dt.ColumnByName("ECout")).String())
}

0 comments on commit a2f0334

Please sign in to comment.