theprogrammablemind 7.5.6-beta.0 → 7.5.7-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/client.js CHANGED
@@ -1,5 +1,6 @@
1
1
  const { Semantics, Semantic } = require('./src/semantics')
2
2
  const { Generators, Generator } = require('./src/generators')
3
+ const DigraphInternal = require('./src/digraph_internal')
3
4
  const Digraph = require('./src/digraph')
4
5
  const fetch = require('node-fetch')
5
6
  const base64 = require('base-64')
@@ -228,7 +229,7 @@ const processContext = (context, { objects = {}, config, logs = [] }) => {
228
229
  const response = {} // NA but passed in
229
230
  // generators = new Generators(generators.map((g) => new Generator(normalizeGenerator(g))))
230
231
  // semantics = new Semantics(semantics.map((g) => new Semantic(normalizeSemantic(g))))
231
- const hierarchy = new Digraph((config.config || {}).hierarchy || [])
232
+ const hierarchy = new DigraphInternal((config.config || {}).hierarchy || [])
232
233
 
233
234
  const args = { objects, response, getObjects: getObjects(objects) }
234
235
  setupArgs(args, config, logs, hierarchy)
@@ -509,7 +510,7 @@ const setupProcessB = ({ config, initializer, allowDelta=false } = {}) => {
509
510
  delete data.generators
510
511
  // const semantics = new Semantics((data.semantics || []).map((g) => new Semantic(normalizeSemantic(g))))
511
512
  delete data.semantics
512
- const hierarchy = new Digraph((config.config || {}).hierarchy || [])
513
+ const hierarchy = new DigraphInternal((config.config || {}).hierarchy || [])
513
514
 
514
515
  return {
515
516
  data,
@@ -721,16 +722,40 @@ const runTest = async (config, expected, { verbose, afterTest, testConfig, debug
721
722
  const failed_contexts = !matching(result.contexts, expected.contexts)
722
723
  const failed_objects = !matching(actual_objects, expected_objects)
723
724
 
724
- const pickEm = (objects) => {
725
+ const pickEm = (getObjects) => {
725
726
  const picked = {}
726
727
  for (let prop of (testConfig.check || [])) {
727
- picked[prop] = objects[prop]
728
+ if (prop.km) {
729
+ c = config.getConfig(prop.km)
730
+ o = getObjects(prop.km)
731
+ picked[prop.km] = {}
732
+ for (let p of c.testConfig.check) {
733
+ if (p.km) {
734
+ continue
735
+ }
736
+ picked[p] = o[p]
737
+ }
738
+ } else {
739
+ picked[prop] = getObjects(testConfigName)[prop]
740
+ }
728
741
  }
729
742
  return picked
730
743
  }
731
- debugger
732
- const expected_checked = sortJson(pickEm(expected.objects.namespaced[expected.objects.nameToUUID[testConfigName]]), { depth: 25 })
733
- const actual_checked = sortJson(pickEm(objects), { depth: 25 })
744
+ const expectedGetObjects = (name) => {
745
+ if (!name) {
746
+ name = config.name
747
+ }
748
+ return expected.objects.namespaced[expected.objects.nameToUUID[name]]
749
+ }
750
+ const expected_checked = sortJson(pickEm(expectedGetObjects), { depth: 25 })
751
+ const actualGetObjects = (name) => {
752
+ if (!name) {
753
+ name = config.name
754
+ }
755
+ const km = config.configs.find( (km) => km.name == name )
756
+ return config.config.objects.namespaced[km.uuid]
757
+ }
758
+ const actual_checked = sortJson(pickEm(actualGetObjects), { depth: 25 })
734
759
  const failed_checked = !matching(actual_objects, expected_objects)
735
760
 
736
761
  const failed_checks = !matching(actual_objects, expected_objects)
@@ -863,12 +888,22 @@ const showInfo = (description, section, config) => {
863
888
  visibleExamples.push(test.query)
864
889
  }
865
890
  }
866
- const info = { name, description, examples: visibleExamples, section, includes, demo: config.demo }
891
+ const templateQueries = []
892
+ if (config.instances && config.instances.length > 0) {
893
+ for (let query of config.instances.slice(-1)[0].queries) {
894
+ if (typeof query == 'string') {
895
+ templateQueries.push(query)
896
+ }
897
+ }
898
+ }
899
+ const info = { name, description, examples: visibleExamples, template: templateQueries, section, includes, demo: config.demo }
900
+ /*
867
901
  if (config.instances.length > 0) {
868
902
  info.template = {
869
903
  base: config.instances[0].base
870
904
  }
871
905
  }
906
+ */
872
907
  console.log(JSON.stringify(info, null, 2))
873
908
  }
874
909
 
package/package.json CHANGED
@@ -44,6 +44,7 @@
44
44
  "src/config.js",
45
45
  "src/copy.js",
46
46
  "src/digraph.js",
47
+ "src/digraph_internal.js",
47
48
  "src/generators.js",
48
49
  "src/semantics.js"
49
50
  ],
@@ -62,6 +63,6 @@
62
63
  "json-stable-stringify": "^1.0.1",
63
64
  "node-fetch": "^2.6.1"
64
65
  },
65
- "version": "7.5.6-beta.0",
66
+ "version": "7.5.7-beta.0",
66
67
  "license": "ISC"
67
68
  }
package/src/config.js CHANGED
@@ -3,7 +3,7 @@ const { Semantics, normalizeGenerator } = require('./semantics')
3
3
  const { Generators } = require('./generators')
4
4
  // const { uuid: uuidv4 } = require('uuidv4')
5
5
  const client = require('../client')
6
- const Digraph = require('./digraph')
6
+ const DigraphInternal = require('./digraph_internal')
7
7
  const helpers = require('./helpers')
8
8
  const runtime = require('../runtime')
9
9
  const _ = require('lodash')
@@ -1287,7 +1287,7 @@ class Config {
1287
1287
  this.name = config.name
1288
1288
  }
1289
1289
  this.motivations = []
1290
- this.loadOrder = new Digraph()
1290
+ this.loadOrder = new DigraphInternal()
1291
1291
  this.wasInitialized = false
1292
1292
  this.configs = []
1293
1293
  this._api = undefined
@@ -1300,7 +1300,7 @@ class Config {
1300
1300
  this.config = config
1301
1301
  handleCalculatedProps(this, config)
1302
1302
  }
1303
- this.hierarchy = new Digraph(this.config.hierarchy)
1303
+ this.hierarchy = new DigraphInternal(this.config.hierarchy)
1304
1304
  this.initConfig = _.cloneDeep(this.config)
1305
1305
  this.configs.push(new KM({ config: this.config, getCounter: (name) => this.config.getCounter(name), uuid: this._uuid }))
1306
1306
 
@@ -1854,7 +1854,7 @@ class Config {
1854
1854
  this.resetDelta()
1855
1855
  const debug = this.config.debug;
1856
1856
  this.config = _.cloneDeep(this.initConfig)
1857
- this.hierarchy = new Digraph(this.config.hierarchy)
1857
+ this.hierarchy = new DigraphInternal(this.config.hierarchy)
1858
1858
  if (debug) {
1859
1859
  this.config.debug = debug
1860
1860
  }
@@ -1918,7 +1918,7 @@ class Config {
1918
1918
  config.wasInitialized = false
1919
1919
  // TODO change name of config: to baseConfig:
1920
1920
  const kmFn = (name) => this.getConfig(name)
1921
- // const hierarchy = new Digraph((config.config || {}).hierarchy)
1921
+ // const hierarchy = new DigraphInternal((config.config || {}).hierarchy)
1922
1922
  const args = { isModule, addWord: aw, km: kmFn, hierarchy: this.hierarchy, config, baseConfig: this, currentConfig: config, uuid: config._uuid, objects: namespacedObjects, namespace, api: config.api }
1923
1923
  config.initializerFn(args)
1924
1924
  if (config.initAfterApi) {
package/src/digraph.js CHANGED
@@ -13,6 +13,38 @@ class Digraph {
13
13
  this._edges = edges
14
14
  }
15
15
 
16
+ // BFS
17
+ path(from, to) {
18
+ debugger
19
+ const frontier = { [from]: [[]] }
20
+ const done = new Set()
21
+ while (Object.keys(frontier).length > 0) {
22
+ const n = Object.keys(frontier)[0]
23
+ const ps = frontier[n]
24
+ if (to == n) {
25
+ return ps[0]
26
+ }
27
+ if (done.has(n)) {
28
+ delete frontier[n]
29
+ continue
30
+ }
31
+ done.add(n)
32
+ for (let edge of this._edges) {
33
+ if (edge.child == n) {
34
+ if (!frontier[edge.parent]) {
35
+ frontier[edge.parent] = []
36
+ }
37
+ for (let path of ps) {
38
+ if (edge.parent == to) {
39
+ return [...path, edge]
40
+ }
41
+ frontier[edge.parent].push([...path, edge])
42
+ }
43
+ }
44
+ }
45
+ }
46
+ }
47
+
16
48
  addEdges(edges) {
17
49
  for (let edge of edges) {
18
50
  this.addEdge(edge)
@@ -0,0 +1,131 @@
1
+ const toA = (edge) => {
2
+ if (Array.isArray(edge)) {
3
+ return edge
4
+ } else {
5
+ return [edge.child, edge.parent]
6
+ }
7
+ }
8
+
9
+ class DigraphInternal {
10
+ // edges maybe either [child, parent] or { child, parent }
11
+ constructor (edges = []) {
12
+ // dont make a copy of edges. this is shared and that breaks stuff. TODO fix this
13
+ this._edges = edges
14
+ }
15
+
16
+ addEdges(edges) {
17
+ for (let edge of edges) {
18
+ this.addEdge(edge)
19
+ }
20
+ }
21
+
22
+ addEdge(edge) {
23
+ edge = toA(edge)
24
+ this._edges.push(edge)
25
+ }
26
+
27
+ get edges() {
28
+ return this._edges
29
+ }
30
+
31
+ set edges(edges) {
32
+ this._edges = edges
33
+ }
34
+
35
+ /*
36
+ set edges(edges) {
37
+ this._edges = edges.map( toA )
38
+ }
39
+ */
40
+
41
+ acdcs (s, from, to) {
42
+ const todo = [s]
43
+ const seen = new Set([s])
44
+ const acdcs = new Set([])
45
+ while (todo.length > 0) {
46
+ const n = todo.pop()
47
+ this._edges.forEach((e) => {
48
+ e = toA(e)
49
+ if (e[from] === n) {
50
+ acdcs.add(e[to])
51
+ if (!seen.has(e[to])) {
52
+ todo.push(e[to])
53
+ seen.add(e[to])
54
+ }
55
+ }
56
+ })
57
+ }
58
+ return acdcs
59
+ }
60
+
61
+ isA (low, high) {
62
+ if (low === high) {
63
+ return true
64
+ }
65
+ return this.ancestors(low).has(high)
66
+ }
67
+
68
+ lessThan (low, high) {
69
+ if (low === high) {
70
+ return false
71
+ }
72
+ return this.ancestors(low).has(high)
73
+ }
74
+
75
+ descendants (s) {
76
+ return this.acdcs(s, 1, 0)
77
+ }
78
+
79
+ ancestors (s) {
80
+ return this.acdcs(s, 0, 1)
81
+ }
82
+
83
+ minima (nodes) {
84
+ let minima = new Set(nodes)
85
+ const ancestors = new Set([])
86
+ nodes.forEach((node) => {
87
+ this.ancestors(node).forEach((n) => ancestors.add(n))
88
+ })
89
+ ancestors.forEach((n) => minima.delete(n))
90
+ if (minima.size === 0) {
91
+ // all unrelated
92
+ minima = new Set(nodes)
93
+ }
94
+ return minima
95
+ }
96
+
97
+ maxima (nodes) {
98
+ const maxima = new Set(nodes)
99
+ const descendants = new Set([])
100
+ nodes.forEach((node) => {
101
+ this.descendants(node).forEach((n) => descendants.add(n))
102
+ })
103
+ descendants.forEach((n) => maxima.delete(n))
104
+ return maxima
105
+ }
106
+
107
+ add (child, parent) {
108
+ this._edges.push([child, parent])
109
+ }
110
+
111
+ addList (l) {
112
+ for (let i = 1; i < l.length; ++i) {
113
+ this._edges.push([l[i - 1], l[i]])
114
+ }
115
+ }
116
+
117
+ order (todo) {
118
+ const ordered = []
119
+ while (todo.length > 0) {
120
+ const nodes = this.minima(todo)
121
+ todo = todo.filter((e) => !nodes.has(e))
122
+ for (const node of nodes) {
123
+ ordered.push(node)
124
+ }
125
+ // ordered = ordered.concat([...nodes])
126
+ }
127
+ return ordered
128
+ }
129
+ }
130
+
131
+ module.exports = DigraphInternal