tgi-foundation 0.2.0.dev12__tar.gz → 0.2.0.dev14__tar.gz

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.
Files changed (55) hide show
  1. {tgi_foundation-0.2.0.dev12/tgi_foundation.egg-info → tgi_foundation-0.2.0.dev14}/PKG-INFO +1 -1
  2. {tgi_foundation-0.2.0.dev12 → tgi_foundation-0.2.0.dev14}/pyproject.toml +1 -1
  3. {tgi_foundation-0.2.0.dev12 → tgi_foundation-0.2.0.dev14}/tgi/causal_port_classes.py +25 -18
  4. {tgi_foundation-0.2.0.dev12 → tgi_foundation-0.2.0.dev14}/tgi/causal_port_classes_check.py +32 -20
  5. {tgi_foundation-0.2.0.dev12 → tgi_foundation-0.2.0.dev14/tgi_foundation.egg-info}/PKG-INFO +1 -1
  6. {tgi_foundation-0.2.0.dev12 → tgi_foundation-0.2.0.dev14}/LICENSE +0 -0
  7. {tgi_foundation-0.2.0.dev12 → tgi_foundation-0.2.0.dev14}/MANIFEST.in +0 -0
  8. {tgi_foundation-0.2.0.dev12 → tgi_foundation-0.2.0.dev14}/README.md +0 -0
  9. {tgi_foundation-0.2.0.dev12 → tgi_foundation-0.2.0.dev14}/setup.cfg +0 -0
  10. {tgi_foundation-0.2.0.dev12 → tgi_foundation-0.2.0.dev14}/tgi/__init__.py +0 -0
  11. {tgi_foundation-0.2.0.dev12 → tgi_foundation-0.2.0.dev14}/tgi/acquisition_snapshot.py +0 -0
  12. {tgi_foundation-0.2.0.dev12 → tgi_foundation-0.2.0.dev14}/tgi/acquisition_witness.py +0 -0
  13. {tgi_foundation-0.2.0.dev12 → tgi_foundation-0.2.0.dev14}/tgi/compact_measured_path.py +0 -0
  14. {tgi_foundation-0.2.0.dev12 → tgi_foundation-0.2.0.dev14}/tgi/compatible_joins.py +0 -0
  15. {tgi_foundation-0.2.0.dev12 → tgi_foundation-0.2.0.dev14}/tgi/derivation.py +0 -0
  16. {tgi_foundation-0.2.0.dev12 → tgi_foundation-0.2.0.dev14}/tgi/events.py +0 -0
  17. {tgi_foundation-0.2.0.dev12 → tgi_foundation-0.2.0.dev14}/tgi/frame_engine.py +0 -0
  18. {tgi_foundation-0.2.0.dev12 → tgi_foundation-0.2.0.dev14}/tgi/identity.py +0 -0
  19. {tgi_foundation-0.2.0.dev12 → tgi_foundation-0.2.0.dev14}/tgi/incidence.py +0 -0
  20. {tgi_foundation-0.2.0.dev12 → tgi_foundation-0.2.0.dev14}/tgi/incremental.py +0 -0
  21. {tgi_foundation-0.2.0.dev12 → tgi_foundation-0.2.0.dev14}/tgi/intervention_continuity.py +0 -0
  22. {tgi_foundation-0.2.0.dev12 → tgi_foundation-0.2.0.dev14}/tgi/intervention_continuity_check.py +0 -0
  23. {tgi_foundation-0.2.0.dev12 → tgi_foundation-0.2.0.dev14}/tgi/intervention_edit_contrast.py +0 -0
  24. {tgi_foundation-0.2.0.dev12 → tgi_foundation-0.2.0.dev14}/tgi/intervention_edit_contrast_check.py +0 -0
  25. {tgi_foundation-0.2.0.dev12 → tgi_foundation-0.2.0.dev14}/tgi/intervention_roles.py +0 -0
  26. {tgi_foundation-0.2.0.dev12 → tgi_foundation-0.2.0.dev14}/tgi/intervention_roles_check.py +0 -0
  27. {tgi_foundation-0.2.0.dev12 → tgi_foundation-0.2.0.dev14}/tgi/lineage_state.py +0 -0
  28. {tgi_foundation-0.2.0.dev12 → tgi_foundation-0.2.0.dev14}/tgi/lineage_state_check.py +0 -0
  29. {tgi_foundation-0.2.0.dev12 → tgi_foundation-0.2.0.dev14}/tgi/local_edit_transport_classes.py +0 -0
  30. {tgi_foundation-0.2.0.dev12 → tgi_foundation-0.2.0.dev14}/tgi/local_edit_transport_classes_check.py +0 -0
  31. {tgi_foundation-0.2.0.dev12 → tgi_foundation-0.2.0.dev14}/tgi/measured_occurrence_path.py +0 -0
  32. {tgi_foundation-0.2.0.dev12 → tgi_foundation-0.2.0.dev14}/tgi/observation_point.py +0 -0
  33. {tgi_foundation-0.2.0.dev12 → tgi_foundation-0.2.0.dev14}/tgi/organization.py +0 -0
  34. {tgi_foundation-0.2.0.dev12 → tgi_foundation-0.2.0.dev14}/tgi/organization_check.py +0 -0
  35. {tgi_foundation-0.2.0.dev12 → tgi_foundation-0.2.0.dev14}/tgi/organization_snapshot.py +0 -0
  36. {tgi_foundation-0.2.0.dev12 → tgi_foundation-0.2.0.dev14}/tgi/phase_bound_port_classes.py +0 -0
  37. {tgi_foundation-0.2.0.dev12 → tgi_foundation-0.2.0.dev14}/tgi/phase_bound_response_atlas.py +0 -0
  38. {tgi_foundation-0.2.0.dev12 → tgi_foundation-0.2.0.dev14}/tgi/phase_bound_response_atlas_check.py +0 -0
  39. {tgi_foundation-0.2.0.dev12 → tgi_foundation-0.2.0.dev14}/tgi/phase_evidence.py +0 -0
  40. {tgi_foundation-0.2.0.dev12 → tgi_foundation-0.2.0.dev14}/tgi/resonance.py +0 -0
  41. {tgi_foundation-0.2.0.dev12 → tgi_foundation-0.2.0.dev14}/tgi/response_incidence_check.py +0 -0
  42. {tgi_foundation-0.2.0.dev12 → tgi_foundation-0.2.0.dev14}/tgi/role_eligibility_check.py +0 -0
  43. {tgi_foundation-0.2.0.dev12 → tgi_foundation-0.2.0.dev14}/tgi/role_history_check.py +0 -0
  44. {tgi_foundation-0.2.0.dev12 → tgi_foundation-0.2.0.dev14}/tgi/role_projection_check.py +0 -0
  45. {tgi_foundation-0.2.0.dev12 → tgi_foundation-0.2.0.dev14}/tgi/role_readout_check.py +0 -0
  46. {tgi_foundation-0.2.0.dev12 → tgi_foundation-0.2.0.dev14}/tgi/role_response_check.py +0 -0
  47. {tgi_foundation-0.2.0.dev12 → tgi_foundation-0.2.0.dev14}/tgi/role_work.py +0 -0
  48. {tgi_foundation-0.2.0.dev12 → tgi_foundation-0.2.0.dev14}/tgi/source_bound_endpoint_transport.py +0 -0
  49. {tgi_foundation-0.2.0.dev12 → tgi_foundation-0.2.0.dev14}/tgi/source_bound_endpoint_transport_check.py +0 -0
  50. {tgi_foundation-0.2.0.dev12 → tgi_foundation-0.2.0.dev14}/tgi/source_bound_single_nmu_edit.py +0 -0
  51. {tgi_foundation-0.2.0.dev12 → tgi_foundation-0.2.0.dev14}/tgi/source_bound_single_nmu_edit_check.py +0 -0
  52. {tgi_foundation-0.2.0.dev12 → tgi_foundation-0.2.0.dev14}/tgi/spatial.py +0 -0
  53. {tgi_foundation-0.2.0.dev12 → tgi_foundation-0.2.0.dev14}/tgi_foundation.egg-info/SOURCES.txt +0 -0
  54. {tgi_foundation-0.2.0.dev12 → tgi_foundation-0.2.0.dev14}/tgi_foundation.egg-info/dependency_links.txt +0 -0
  55. {tgi_foundation-0.2.0.dev12 → tgi_foundation-0.2.0.dev14}/tgi_foundation.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: tgi-foundation
3
- Version: 0.2.0.dev12
3
+ Version: 0.2.0.dev14
4
4
  Summary: Native character-identity and geometric knowledge mechanisms for Topological Geometric Intelligence
5
5
  Author: Emylton Leunufna
6
6
  License: Copyright (c) 2026 Emylton Leunufna
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "tgi-foundation"
7
- version = "0.2.0.dev12"
7
+ version = "0.2.0.dev14"
8
8
  description = "Native character-identity and geometric knowledge mechanisms for Topological Geometric Intelligence"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.11"
@@ -31,22 +31,17 @@ def _event(source, action, ports):
31
31
  return {'source': source, 'action_nmu': list(encode(action)), 'ports': observed}
32
32
 
33
33
 
34
- def _evidence(events, members, names, action):
35
- contexts = set()
36
- controls = 0
37
- comparators = set()
38
- for event in events:
39
- key = tuple(event['action_nmu'])
40
- changed = all(event['ports'][name]['kind'] != 'STABLE' for name in members)
41
- stable = all(event['ports'][name]['kind'] == 'STABLE' for name in members)
42
- if changed and key == action:
43
- contexts.add(tuple(tuple(event['ports'][name]['before_nmu']) for name in members))
44
- if stable:
45
- if key == action:
46
- controls += 1
47
- if any(event['ports'][name]['kind'] != 'STABLE' for name in names if name not in members):
48
- comparators.add(key)
49
- return len(contexts), controls, any(other != action for other in comparators)
34
+ def _accrue(stats, event, members, names):
35
+ """Add one original C/L experience to an unchanged live class."""
36
+ action = tuple(event['action_nmu'])
37
+ ports = event['ports']
38
+ if all(ports[name]['kind'] != 'STABLE' for name in members):
39
+ context = tuple(tuple(ports[name]['before_nmu']) for name in members)
40
+ stats['contexts'].setdefault(action, set()).add(context)
41
+ if all(ports[name]['kind'] == 'STABLE' for name in members):
42
+ stats['controls'][action] = stats['controls'].get(action, 0) + 1
43
+ if any(ports[name]['kind'] != 'STABLE' for name in names if name not in members):
44
+ stats['comparators'].add(action)
50
45
 
51
46
 
52
47
  def form(events, *, revision=REVISION, valid_row=None):
@@ -56,7 +51,7 @@ def form(events, *, revision=REVISION, valid_row=None):
56
51
  if valid_row is None:
57
52
  valid_row = valid_contrast
58
53
  traces, phases, names, seen, actions = {}, [], None, set(), set()
59
- prior, epoch = None, 0
54
+ prior, epoch, cache = None, 0, {}
60
55
  for index, event in enumerate(events):
61
56
  if type(event) is not dict or set(event) != {'source', 'action_nmu', 'ports'} or \
62
57
  type(event['source']) is not str or not event['source'] or event['source'] in seen or \
@@ -82,9 +77,20 @@ def form(events, *, revision=REVISION, valid_row=None):
82
77
  groups = sorted(tuple(members) for members in grouped.values())
83
78
  cells, winners = [], []
84
79
  for members in groups:
80
+ key = (epoch, members)
81
+ stats = cache.get(key)
82
+ if stats is None:
83
+ stats = {'stop': epoch - 1, 'contexts': {},
84
+ 'controls': {}, 'comparators': set()}
85
+ cache[key] = stats
86
+ for position in range(stats['stop'] + 1, index + 1):
87
+ _accrue(stats, events[position], members, names)
88
+ stats['stop'] = index
85
89
  counts = []
86
90
  for action in sorted(actions):
87
- omega, controls, comparator = _evidence(events[epoch:index+1], members, names, action)
91
+ omega = len(stats['contexts'].get(action, ()))
92
+ controls = stats['controls'].get(action, 0)
93
+ comparator = any(other != action for other in stats['comparators'])
88
94
  counts.append({'action_nmu': list(action), 'omega': omega,
89
95
  'controls': controls, 'comparator': comparator})
90
96
  if omega >= OMEGA_CRIT and controls and comparator:
@@ -93,6 +99,7 @@ def form(events, *, revision=REVISION, valid_row=None):
93
99
  if prior is not None and prior not in groups:
94
100
  result = {'status': 'REVOKED', 'action_nmu': None, 'members': None}
95
101
  prior, epoch = None, index + 1
102
+ cache = {}
96
103
  elif len(winners) == 1:
97
104
  action, members = winners[0]
98
105
  result = {'status': 'CRYSTAL', 'action_nmu': list(action), 'members': list(members)}
@@ -7,6 +7,19 @@ from .organization import OMEGA_CRIT
7
7
  REVISION = 'TGI-M1-CAUSAL-PORT-TOPOLOGY-V1'
8
8
 
9
9
 
10
+ def _add_source(stats, row, members, names):
11
+ """Accumulate one raw C/L witness for a fixed live port class."""
12
+ action = tuple(row['action_nmu'])
13
+ ports = row['ports']
14
+ if all(ports[name]['changed'] for name in members):
15
+ context = tuple(tuple(ports[name]['before_nmu']) for name in members)
16
+ stats['support'].setdefault(action, set()).add(context)
17
+ if all(not ports[name]['changed'] for name in members):
18
+ stats['controls'][action] = stats['controls'].get(action, 0) + 1
19
+ if any(ports[name]['changed'] for name in names if name not in members):
20
+ stats['separating'].add(action)
21
+
22
+
10
23
  def verify(events, certificate, *, revision=REVISION, valid_row=valid_contrast):
11
24
  try:
12
25
  if type(events) is not list or type(certificate) is not dict or \
@@ -19,6 +32,7 @@ def verify(events, certificate, *, revision=REVISION, valid_row=valid_contrast):
19
32
  sources = set()
20
33
  prior = None
21
34
  epoch = 0
35
+ traces, actions, cache = {}, set(), {}
22
36
  final = {'status': 'NO_PATH', 'action_nmu': None, 'members': None}
23
37
  for stop, event in enumerate(events):
24
38
  if type(event) is not dict or set(event) != {'source', 'action_nmu', 'ports'} or \
@@ -36,35 +50,32 @@ def verify(events, certificate, *, revision=REVISION, valid_row=valid_contrast):
36
50
  return False
37
51
  if names is None:
38
52
  names = observed
53
+ traces = {name: [] for name in names}
39
54
  if observed != names:
40
55
  return False
41
- prefix = events[:stop+1]
56
+ actions.add(tuple(event['action_nmu']))
42
57
  partition = {}
43
58
  for name in names:
44
- signature = tuple(row['ports'][name]['kind'] for row in prefix)
59
+ traces[name].append(event['ports'][name]['kind'])
60
+ signature = tuple(traces[name])
45
61
  partition.setdefault(signature, []).append(name)
46
62
  groups = sorted(tuple(members) for members in partition.values())
47
- actions = sorted({tuple(row['action_nmu']) for row in prefix})
48
63
  cells, winners = [], []
49
64
  for members in groups:
65
+ key = (epoch, members)
66
+ stats = cache.get(key)
67
+ if stats is None:
68
+ stats = {'stop': epoch - 1, 'support': {},
69
+ 'controls': {}, 'separating': set()}
70
+ cache[key] = stats
71
+ for position in range(stats['stop'] + 1, stop + 1):
72
+ _add_source(stats, events[position], members, names)
73
+ stats['stop'] = stop
50
74
  counts = []
51
- for action in actions:
52
- support = set()
53
- controls = 0
54
- separating_actions = set()
55
- for row in events[epoch:stop+1]:
56
- raw_action = tuple(row['action_nmu'])
57
- all_changed = all(row['ports'][name]['changed'] for name in members)
58
- all_stable = all(not row['ports'][name]['changed'] for name in members)
59
- if all_changed and raw_action == action:
60
- support.add(tuple(tuple(row['ports'][name]['before_nmu']) for name in members))
61
- if all_stable:
62
- if raw_action == action:
63
- controls += 1
64
- if any(row['ports'][name]['changed'] for name in names if name not in members):
65
- separating_actions.add(raw_action)
66
- comparator = any(other != action for other in separating_actions)
67
- omega = len(support)
75
+ for action in sorted(actions):
76
+ comparator = any(other != action for other in stats['separating'])
77
+ omega = len(stats['support'].get(action, ()))
78
+ controls = stats['controls'].get(action, 0)
68
79
  counts.append({'action_nmu': list(action), 'omega': omega,
69
80
  'controls': controls, 'comparator': comparator})
70
81
  if omega >= OMEGA_CRIT and controls and comparator:
@@ -74,6 +85,7 @@ def verify(events, certificate, *, revision=REVISION, valid_row=valid_contrast):
74
85
  final = {'status': 'REVOKED', 'action_nmu': None, 'members': None}
75
86
  prior = None
76
87
  epoch = stop+1
88
+ cache = {}
77
89
  elif len(winners) == 1:
78
90
  action, members = winners[0]
79
91
  final = {'status': 'CRYSTAL', 'action_nmu': list(action), 'members': list(members)}
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: tgi-foundation
3
- Version: 0.2.0.dev12
3
+ Version: 0.2.0.dev14
4
4
  Summary: Native character-identity and geometric knowledge mechanisms for Topological Geometric Intelligence
5
5
  Author: Emylton Leunufna
6
6
  License: Copyright (c) 2026 Emylton Leunufna