From f4b94c932552e819c2fb3b36c7cc621592812735 Mon Sep 17 00:00:00 2001 From: Thomas Walker Lynch Date: Thu, 12 Feb 2026 15:03:16 +0000 Subject: [PATCH] introduces Symbol.py --- developer/authored/Symbol.py | 281 +++++++++++++----- developer/authored/TM_Array.c | 85 +++++- developer/authored/TM_GR.c | 46 +-- developer/authored/TM_NaturalNumber.c | 14 +- developer/authored/TM_module.c | 129 +------- .../temp.linux-x86_64-cpython-311/TM_module.o | Bin 173856 -> 190448 bytes document/Symbol_Specification.html | 104 +++++++ 7 files changed, 424 insertions(+), 235 deletions(-) create mode 100644 document/Symbol_Specification.html diff --git a/developer/authored/Symbol.py b/developer/authored/Symbol.py index 98deb40..e893c6f 100755 --- a/developer/authored/Symbol.py +++ b/developer/authored/Symbol.py @@ -1,82 +1,209 @@ -#!/usr/bin/env python3 -""" -Symbol.py -Epimetheus Symbol Implementation. -Core Concept: A Symbol is a discrete, hashable set defined by its identity. -""" +# Symbol.py +# RT format: 2-space indent, PascalCase type names, snake_case identifiers. +from __future__ import annotations + +import threading import weakref +from typing import Optional, Sequence, Tuple + + +class SymbolSpace: + """ + A SymbolSpace provides: + - A Null symbol (identity 0). + - A ContextMap from symbol context keys to Factories. + - Factories that issue symbols and reclaim identities on GC. + """ + + class Symbol: + __slots__ = ( + "_identity" + ,"_factory_ref" + ,"_finalizer" + ,"_factory_id" + ,"__weakref__" + ) + + def __init__(self ,identity: int ,factory: Optional["SymbolSpace.Factory"]): + self._identity = int(identity) + + if(self._identity == 0): + self._factory_ref = None + self._finalizer = None + self._factory_id = 0 + return + + if(factory is None): + raise ValueError("Non-null symbols require a factory.") + + self._factory_id = factory.factory_id + self._factory_ref = weakref.ref(factory) + + identity_copy = self._identity + factory_ref = self._factory_ref + + def _finalize(): + f = factory_ref() + if(f is None): + return + try: + f._reclaim_identity(identity_copy) + except Exception: + # Finalizers must never raise. + return + + self._finalizer = weakref.finalize(self ,_finalize) + + @property + def identity(self) -> int: + return self._identity + + def __repr__(self) -> str: + if(self._identity == 0): + return "Symbol(0)" + return f"Symbol({self._identity} ,factory_id={self._factory_id})" + + def __hash__(self) -> int: + return hash( (self._factory_id ,self._identity) ) + + def __eq__(self ,other: object) -> bool: + if( not isinstance(other ,SymbolSpace.Symbol) ): + return False + return (self._factory_id == other._factory_id) and (self._identity == other._identity) + + class Factory: + """ + Issues identities from a monotonically increasing counter and a free set. + + Reclaim policy (from the spec): + - When a reclaimed identity equals counter, decrement counter. + Continue decrementing while counter is in the free set. + - Otherwise, add the identity to the free set. + """ + + __slots__ = ( + "_lock" + ,"_counter" + ,"_free_set" + ,"_space" + ,"_context_key" + ,"factory_id" + ,"__weakref__" + ) + + def __init__(self ,space: "SymbolSpace" ,context_key: Tuple["SymbolSpace.Symbol" ,...] ,factory_id: int): + self._lock = threading.RLock() + self._counter = 0 # 0 is reserved for space.null + self._free_set = set() # Set[int] + self._space = space + self._context_key = context_key + self.factory_id = int(factory_id) -class Symbol(set): + @property + def counter(self) -> int: + with self._lock: + return self._counter + + @property + def free_set_size(self) -> int: + with self._lock: + return len(self._free_set) + + def make(self) -> "SymbolSpace.Symbol": + with self._lock: + if(self._free_set): + identity = min(self._free_set) + self._free_set.remove(identity) + return self._space.Symbol(identity ,self) + + self._counter += 1 + return self._space.Symbol(self._counter ,self) + + def _reclaim_identity(self ,identity: int) -> None: + identity = int(identity) + if(identity == 0): + raise ValueError("Attempted to reclaim the null symbol identity 0.") + + with self._lock: + if(identity > self._counter): + raise ValueError(f"Attempted to reclaim identity {identity} above counter {self._counter}.") + + if(identity in self._free_set): + raise ValueError(f"Identity {identity} already reclaimed.") + + if(identity == self._counter): + self._counter -= 1 + while(self._counter in self._free_set): + self._free_set.remove(self._counter) + self._counter -= 1 + return + + self._free_set.add(identity) + + class ContextMap: """ - A persistent, unique identity that acts as a container. - - Properties: - - Identity: Equality and Hashing are based on memory address (id). - - Container: Inherits from set. Can contain other symbols (differentiation). - - Hierarchy: Knows its parent to support dealloc(). + Map: context_key -> Factory + A context_key is an ordered list of symbols, represented as a tuple. """ - - def __init__(self, parent=None): - super().__init__() - # We hold a strong ref to the parent? - # If we hold strong, the root keeps the whole tree alive. - # If we hold weak, we can't dealloc if parent dies (but that's expected). - # Standard graph theory: Edges are usually strong. - self._parent = parent - - def alloc(self): - """ - Allocates a new differentiated symbol from this one. - The new symbol is added to this symbol (the set). - """ - child = Symbol(parent=self) - self.add(child) - return child - - def dealloc(self): - """ - Removes this symbol from its parent. - If no other references exist, this symbol will be garbage collected. - """ - if self._parent is not None: - self._parent.remove(self) - self._parent = None - # If parent is None (Root), dealloc does nothing. - - # --- Identity Overrides (Force Set to be Hashable) --- - - def __hash__(self): - return id(self) - - def __eq__(self, other): - return self is other - - def __repr__(self): - return f"" - -# --- Example --- - -def example_symbol_lifecycle(): - print("--- Symbol Lifecycle Example ---") - root = Symbol() - - # 1. Root exists - print(f"Root: {root}") - - # 2. Alloc Features - nav = root.alloc() - print(f"Allocated 'nav' inside root: {nav}") - print(f"root has nav? {nav in root}") - - # 3. Alloc Leaf - left = nav.alloc() - print(f"Allocated 'left' inside nav: {left}") - - # 4. Dealloc - print("Deallocating 'left'...") - left.dealloc() - print(f"nav has left? {left in nav} (Expected: False)") - -if __name__ == "__main__": - example_symbol_lifecycle() + + __slots__ = ( + "_space" + ,"_lock" + ,"_factory_map" + ,"_factory_id_counter" + ) + + def __init__(self ,space: "SymbolSpace"): + self._space = space + self._lock = threading.RLock() + self._factory_map = {} # Dict[Tuple[Symbol] ,Factory] + self._factory_id_counter = 0 + + def _normalize(self ,context_key: Optional[Sequence["SymbolSpace.Symbol"]]) -> Tuple["SymbolSpace.Symbol" ,...]: + if(context_key is None): + return tuple() + if( isinstance(context_key ,tuple) ): + ctx = context_key + else: + ctx = tuple(context_key) + + for s in ctx: + if( not isinstance(s ,SymbolSpace.Symbol) ): + raise TypeError("context_key entries must be SymbolSpace.Symbol values.") + + return ctx + + def read(self ,context_key: Optional[Sequence["SymbolSpace.Symbol"]] = None) -> Optional["SymbolSpace.Factory"]: + ctx = self._normalize(context_key) + with self._lock: + return self._factory_map.get(ctx) + + def make(self ,context_key: Optional[Sequence["SymbolSpace.Symbol"]] = None) -> "SymbolSpace.Factory": + ctx = self._normalize(context_key) + with self._lock: + if(ctx in self._factory_map): + raise KeyError("Factory already exists for this context_key.") + + self._factory_id_counter += 1 + f = SymbolSpace.Factory(self._space ,ctx ,self._factory_id_counter) + self._factory_map[ctx] = f + return f + + def delete(self ,context_key: Optional[Sequence["SymbolSpace.Symbol"]] = None) -> None: + ctx = self._normalize(context_key) + with self._lock: + if(ctx not in self._factory_map): + raise KeyError("No factory exists for this context_key.") + del self._factory_map[ctx] + + def __len__(self) -> int: + with self._lock: + return len(self._factory_map) + + def __init__(self): + self.null = SymbolSpace.Symbol(0 ,None) + self.context_map = SymbolSpace.ContextMap(self) + + # Default root factory for empty context. + self.root_factory = self.context_map.make(tuple()) diff --git a/developer/authored/TM_Array.c b/developer/authored/TM_Array.c index f0ae915..471f805 100644 --- a/developer/authored/TM_Array.c +++ b/developer/authored/TM_Array.c @@ -4,21 +4,18 @@ Backing: PyListObject */ -/* ALLOW CDOT IN IDENTIFIERS */ -#define · _ - #define PY_SSIZE_T_CLEAN #include #include "structmember.h" -/* --- 1. HEAD STRUCT (Linear Array) --- */ +/* --- 1. HEAD STRUCT --- */ typedef struct { PyObject_HEAD - PyObject* tape_obj; /* Variable: The Container */ - PyObject** head_ptr; /* Variable: Pointer to Current Cell */ - PyObject** leftmost_ptr; /* Variable: Pointer to Leftmost Cell */ - PyObject** right_sentinel;/* Variable: Pointer to Right Sentinel */ + PyObject* tape_obj; /* Variable: Container */ + PyObject** head_ptr; /* Variable: Current Cell */ + PyObject** leftmost_ptr; /* Variable: Left Bound */ + PyObject** right_sentinel;/* Variable: Right Bound */ } TM·Arr·Head; static void TM·Arr·dealloc(TM·Arr·Head* self){ @@ -178,7 +175,6 @@ static PyObject* TM·Arr·LqnR(TM·Arr·Head* self){ static PyObject* TM·Arr·dR(TM·Arr·Head* self){ TM·Arr·lazysync(self); - /* Guard: Must have a left neighbor to step back to. */ if (self->head_ptr <= self->leftmost_ptr) { PyErr_SetString(PyExc_RuntimeError, "Invariant Violation: Cannot dR from leftmost cell."); return NULL; @@ -195,7 +191,6 @@ static PyObject* TM·Arr·dR(TM·Arr·Head* self){ static PyObject* TM·Arr·LdR(TM·Arr·Head* self){ TM·Arr·lazysync(self); - /* Guard: Must have a right neighbor to reset to. */ if (self->head_ptr >= self->right_sentinel - 1) { PyErr_SetString(PyExc_RuntimeError, "Invariant Violation: Cannot LdR from rightmost cell."); return NULL; @@ -264,3 +259,73 @@ static PyObject* TM·Arr·LaR(TM·Arr·Head* self, PyObject* val){ TM·Arr·sync(self); Py_RETURN_NONE; } + +/* --- 8. METHOD TABLES --- */ + +static PyMethodDef Table·Arr·CR·ND[] = { + {"s", (PyCFunction)TM·Arr·s, METH_NOARGS, ""}, + {"sn",(PyCFunction)TM·Arr·sn,METH_VARARGS,""}, + {"e", (PyCFunction)TM·Arr·e, METH_NOARGS, ""}, + {"r", (PyCFunction)TM·Arr·r, METH_NOARGS, ""}, + {"w", (PyCFunction)TM·Arr·w, METH_O, ""}, + {"qR",(PyCFunction)TM·Arr·qR,METH_NOARGS, ""}, + {"qnR",(PyCFunction)TM·Arr·qnR,METH_NOARGS,""}, + {"LqnR",(PyCFunction)TM·Arr·LqnR,METH_NOARGS,""}, + {"LsR",(PyCFunction)TM·Arr·LsR,METH_NOARGS,""}, + {NULL} +}; + +static PyMethodDef Table·Arr·CLR·ND[] = { + {"s", (PyCFunction)TM·Arr·s, METH_NOARGS, ""}, + {"sn",(PyCFunction)TM·Arr·sn,METH_VARARGS,""}, + {"e", (PyCFunction)TM·Arr·e, METH_NOARGS, ""}, + {"Ls",(PyCFunction)TM·Arr·Ls,METH_NOARGS, ""}, + {"Lsn",(PyCFunction)TM·Arr·Lsn,METH_VARARGS,""}, + {"r", (PyCFunction)TM·Arr·r, METH_NOARGS, ""}, + {"w", (PyCFunction)TM·Arr·w, METH_O, ""}, + {"qR",(PyCFunction)TM·Arr·qR,METH_NOARGS, ""}, + {"LqR",(PyCFunction)TM·Arr·LqR,METH_NOARGS, ""}, + {"qnR",(PyCFunction)TM·Arr·qnR,METH_NOARGS,""}, + {"LqnR",(PyCFunction)TM·Arr·LqnR,METH_NOARGS,""}, + {"sR",(PyCFunction)TM·Arr·sR,METH_NOARGS, ""}, + {"LsR",(PyCFunction)TM·Arr·LsR,METH_NOARGS,""}, + {NULL} +}; + +static PyMethodDef Table·Arr·CR·SO[] = { + {"s", (PyCFunction)TM·Arr·s, METH_NOARGS, ""}, + {"sn",(PyCFunction)TM·Arr·sn,METH_VARARGS,""}, + {"r", (PyCFunction)TM·Arr·r, METH_NOARGS, ""}, + {"w", (PyCFunction)TM·Arr·w, METH_O, ""}, + {"dR",(PyCFunction)TM·Arr·dR,METH_NOARGS, ""}, + {"esd",(PyCFunction)TM·Arr·esd,METH_NOARGS,""}, + {"esa",(PyCFunction)TM·Arr·esa,METH_O, ""}, + {"aR",(PyCFunction)TM·Arr·aR,METH_O, ""}, + {"qR",(PyCFunction)TM·Arr·qR,METH_NOARGS, ""}, + {"qnR",(PyCFunction)TM·Arr·qnR,METH_NOARGS,""}, + {"LqnR",(PyCFunction)TM·Arr·LqnR,METH_NOARGS,""}, + {"LsR",(PyCFunction)TM·Arr·LsR,METH_NOARGS,""}, + {NULL} +}; + +static PyMethodDef Table·Arr·CLR·SO[] = { + {"s", (PyCFunction)TM·Arr·s, METH_NOARGS, ""}, + {"Ls",(PyCFunction)TM·Arr·Ls,METH_NOARGS, ""}, + {"r", (PyCFunction)TM·Arr·r, METH_NOARGS, ""}, + {"w", (PyCFunction)TM·Arr·w, METH_O, ""}, + {"dR",(PyCFunction)TM·Arr·dR,METH_NOARGS, ""}, + {"LdR",(PyCFunction)TM·Arr·LdR,METH_NOARGS,""}, + {"esd",(PyCFunction)TM·Arr·esd,METH_NOARGS,""}, + {"eLsd",(PyCFunction)TM·Arr·eLsd,METH_NOARGS,""}, + {"esa",(PyCFunction)TM·Arr·esa,METH_O, ""}, + {"eLsa",(PyCFunction)TM·Arr·eLsa,METH_O, ""}, + {"aR",(PyCFunction)TM·Arr·aR,METH_O, ""}, + {"LaR",(PyCFunction)TM·Arr·LaR,METH_O, ""}, + {"qR",(PyCFunction)TM·Arr·qR,METH_NOARGS, ""}, + {"LqR",(PyCFunction)TM·Arr·LqR,METH_NOARGS, ""}, + {"qnR",(PyCFunction)TM·Arr·qnR,METH_NOARGS,""}, + {"LqnR",(PyCFunction)TM·Arr·LqnR,METH_NOARGS,""}, + {"sR",(PyCFunction)TM·Arr·sR,METH_NOARGS, ""}, + {"LsR",(PyCFunction)TM·Arr·LsR,METH_NOARGS,""}, + {NULL} +}; diff --git a/developer/authored/TM_GR.c b/developer/authored/TM_GR.c index 76b4aa4..3134744 100644 --- a/developer/authored/TM_GR.c +++ b/developer/authored/TM_GR.c @@ -4,19 +4,14 @@ Backing: Generic Python Object with "right" and "left" attributes. */ -/* ALLOW CDOT IN IDENTIFIERS */ -#define · _ - #define PY_SSIZE_T_CLEAN #include #include "structmember.h" -/* --- 1. HEAD STRUCT (Graph) --- */ - typedef struct { PyObject_HEAD - PyObject* leftmost_node; /* Variable: The anchor/start of the tape */ - PyObject* head_node; /* Variable: The current cell/node */ + PyObject* leftmost_node; + PyObject* head_node; } TM·Gr·Head; static void TM·Gr·dealloc(TM·Gr·Head* self){ @@ -43,35 +38,29 @@ static int TM·Gr·init(TM·Gr·Head* self, PyObject* args, PyObject* kwds){ return 0; } -/* --- 2. PRIMITIVES --- */ +/* --- PRIMITIVES --- */ static PyObject* TM·Gr·s(TM·Gr·Head* self){ - /* Spatial: Move Right */ PyObject* right = PyObject_GetAttrString(self->head_node, "right"); if (!right) return NULL; - if (right == Py_None) { Py_DECREF(right); PyErr_SetString(PyExc_RuntimeError, "Stepped off tape (right is None)."); return NULL; } - Py_DECREF(self->head_node); self->head_node = right; Py_RETURN_NONE; } static PyObject* TM·Gr·Ls(TM·Gr·Head* self){ - /* Spatial: Move Left */ PyObject* left = PyObject_GetAttrString(self->head_node, "left"); if (!left) return NULL; - if (left == Py_None) { Py_DECREF(left); PyErr_SetString(PyExc_RuntimeError, "Stepped off tape (left is None)."); return NULL; } - Py_DECREF(self->head_node); self->head_node = left; Py_RETURN_NONE; @@ -92,19 +81,16 @@ static PyObject* TM·Gr·e(TM·Gr·Head* self){ } static PyObject* TM·Gr·r(TM·Gr·Head* self){ - /* In Graph topology, the Node IS the cell. Return the node. */ Py_INCREF(self->head_node); return self->head_node; } static PyObject* TM·Gr·w(TM·Gr·Head* self, PyObject* val){ - /* Write payload to 'val' attribute of the node */ if (PyObject_SetAttrString(self->head_node, "val", val) < 0) return NULL; Py_RETURN_NONE; } static PyObject* TM·Gr·qR(TM·Gr·Head* self){ - /* Is Rightmost? Check if .right is None/Missing */ PyObject* right = PyObject_GetAttrString(self->head_node, "right"); if (!right || right == Py_None) { Py_XDECREF(right); @@ -115,7 +101,6 @@ static PyObject* TM·Gr·qR(TM·Gr·Head* self){ } static PyObject* TM·Gr·LqR(TM·Gr·Head* self){ - /* Is Leftmost? Check if .left is None/Missing */ PyObject* left = PyObject_GetAttrString(self->head_node, "left"); if (!left || left == Py_None) { Py_XDECREF(left); @@ -126,9 +111,32 @@ static PyObject* TM·Gr·LqR(TM·Gr·Head* self){ } static PyObject* TM·Gr·LsR(TM·Gr·Head* self){ - /* Cue to Leftmost */ Py_DECREF(self->head_node); self->head_node = self->leftmost_node; Py_INCREF(self->head_node); Py_RETURN_NONE; } + +/* --- METHOD TABLES --- */ + +static PyMethodDef Table·Gr·CR·ND[] = { + {"s", (PyCFunction)TM·Gr·s, METH_NOARGS, ""}, + {"e", (PyCFunction)TM·Gr·e, METH_NOARGS, ""}, + {"r", (PyCFunction)TM·Gr·r, METH_NOARGS, ""}, + {"w", (PyCFunction)TM·Gr·w, METH_O, ""}, + {"qR",(PyCFunction)TM·Gr·qR,METH_NOARGS, ""}, + {"LsR",(PyCFunction)TM·Gr·LsR,METH_NOARGS,""}, + {NULL} +}; + +static PyMethodDef Table·Gr·CLR·ND[] = { + {"s", (PyCFunction)TM·Gr·s, METH_NOARGS, ""}, + {"e", (PyCFunction)TM·Gr·e, METH_NOARGS, ""}, + {"Ls",(PyCFunction)TM·Gr·Ls,METH_NOARGS, ""}, + {"r", (PyCFunction)TM·Gr·r, METH_NOARGS, ""}, + {"w", (PyCFunction)TM·Gr·w, METH_O, ""}, + {"qR",(PyCFunction)TM·Gr·qR,METH_NOARGS, ""}, + {"LqR",(PyCFunction)TM·Gr·LqR,METH_NOARGS, ""}, + {"LsR",(PyCFunction)TM·Gr·LsR,METH_NOARGS,""}, + {NULL} +}; diff --git a/developer/authored/TM_NaturalNumber.c b/developer/authored/TM_NaturalNumber.c index 65e0c29..c782b7d 100644 --- a/developer/authored/TM_NaturalNumber.c +++ b/developer/authored/TM_NaturalNumber.c @@ -3,18 +3,13 @@ Topology: Infinite Line */ -/* ALLOW CDOT IN IDENTIFIERS */ -#define · _ - #define PY_SSIZE_T_CLEAN #include #include "structmember.h" -/* --- 1. HEAD STRUCT --- */ - typedef struct { PyObject_HEAD - unsigned long long state; /* Variable */ + unsigned long long state; } TM·Nat·Head; static int TM·Nat·init(TM·Nat·Head* self, PyObject* args, PyObject* kwds){ @@ -26,8 +21,6 @@ static void TM·Nat·dealloc(TM·Nat·Head* self){ Py_TYPE(self)->tp_free((PyObject*)self); } -/* --- 2. PRIMITIVES --- */ - static PyObject* TM·Nat·s(TM·Nat·Head* self){ self->state++; Py_RETURN_NONE; @@ -60,7 +53,6 @@ static PyObject* TM·Nat·w(TM·Nat·Head* self, PyObject* val){ } static PyObject* TM·Nat·qR(TM·Nat·Head* self){ - /* Infinite tape, never at rightmost end */ Py_RETURN_FALSE; } @@ -80,8 +72,6 @@ static PyObject* TM·Nat·LqnR(TM·Nat·Head* self){ return PyLong_FromUnsignedLongLong(self->state); } -/* --- 3. METHOD TABLE --- */ - static PyMethodDef TM·Nat·methods[] = { {"s", (PyCFunction)TM·Nat·s, METH_NOARGS, ""}, {"sn",(PyCFunction)TM·Nat·sn,METH_VARARGS,""}, @@ -96,8 +86,6 @@ static PyMethodDef TM·Nat·methods[] = { {NULL} }; -/* --- 4. TYPE DEFINITION --- */ - static PyTypeObject TMA_NaturalNumber·Type = { PyVarObject_HEAD_INIT(NULL, 0) .tp_name = "TM_module.TMA_NaturalNumber", diff --git a/developer/authored/TM_module.c b/developer/authored/TM_module.c index c25dff4..8d56b74 100644 --- a/developer/authored/TM_module.c +++ b/developer/authored/TM_module.c @@ -4,10 +4,6 @@ Aggregates implementations for Array, Graph, and Abstract topologies. */ -/* ALLOW CDOT IN IDENTIFIERS */ -#define · _ - -/* Shared Includes */ #include /* Include Implementations */ @@ -15,105 +11,6 @@ #include "TM_GR.c" #include "TM_NaturalNumber.c" -/* --- METHOD TABLES (Graph) --- */ - -/* Note: Graph machines implemented here are ND (Non-Destructive) for structure. - They allow 'w' (write value), but not 'd' (delete node). */ - -static PyMethodDef Table·Gr·CR·ND[] = { - {"s", (PyCFunction)TM·Gr·s, METH_NOARGS, ""}, - {"e", (PyCFunction)TM·Gr·e, METH_NOARGS, ""}, - {"r", (PyCFunction)TM·Gr·r, METH_NOARGS, ""}, - {"w", (PyCFunction)TM·Gr·w, METH_O, ""}, - {"qR",(PyCFunction)TM·Gr·qR,METH_NOARGS, ""}, - {"LsR",(PyCFunction)TM·Gr·LsR,METH_NOARGS,""}, - {NULL} -}; - -static PyMethodDef Table·Gr·CLR·ND[] = { - {"s", (PyCFunction)TM·Gr·s, METH_NOARGS, ""}, - {"e", (PyCFunction)TM·Gr·e, METH_NOARGS, ""}, - {"Ls",(PyCFunction)TM·Gr·Ls,METH_NOARGS, ""}, - {"r", (PyCFunction)TM·Gr·r, METH_NOARGS, ""}, - {"w", (PyCFunction)TM·Gr·w, METH_O, ""}, - {"qR",(PyCFunction)TM·Gr·qR,METH_NOARGS, ""}, - {"LqR",(PyCFunction)TM·Gr·LqR,METH_NOARGS, ""}, - {"LsR",(PyCFunction)TM·Gr·LsR,METH_NOARGS,""}, - {NULL} -}; - -/* --- METHOD TABLES (Array) --- */ - -/* 1. NON-DESTRUCTIVE (ND) */ -static PyMethodDef Table·Arr·CR·ND[] = { - {"s", (PyCFunction)TM·Arr·s, METH_NOARGS, ""}, - {"sn",(PyCFunction)TM·Arr·sn,METH_VARARGS,""}, - {"e", (PyCFunction)TM·Arr·e, METH_NOARGS, ""}, - {"r", (PyCFunction)TM·Arr·r, METH_NOARGS, ""}, - {"w", (PyCFunction)TM·Arr·w, METH_O, ""}, - {"qR",(PyCFunction)TM·Arr·qR,METH_NOARGS, ""}, - {"qnR",(PyCFunction)TM·Arr·qnR,METH_NOARGS,""}, - {"LqnR",(PyCFunction)TM·Arr·LqnR,METH_NOARGS,""}, - {"LsR",(PyCFunction)TM·Arr·LsR,METH_NOARGS,""}, - {NULL} -}; - -static PyMethodDef Table·Arr·CLR·ND[] = { - {"s", (PyCFunction)TM·Arr·s, METH_NOARGS, ""}, - {"sn",(PyCFunction)TM·Arr·sn,METH_VARARGS,""}, - {"e", (PyCFunction)TM·Arr·e, METH_NOARGS, ""}, - {"Ls",(PyCFunction)TM·Arr·Ls,METH_NOARGS, ""}, - {"Lsn",(PyCFunction)TM·Arr·Lsn,METH_VARARGS,""}, - {"r", (PyCFunction)TM·Arr·r, METH_NOARGS, ""}, - {"w", (PyCFunction)TM·Arr·w, METH_O, ""}, - {"qR",(PyCFunction)TM·Arr·qR,METH_NOARGS, ""}, - {"LqR",(PyCFunction)TM·Arr·LqR,METH_NOARGS, ""}, - {"qnR",(PyCFunction)TM·Arr·qnR,METH_NOARGS,""}, - {"LqnR",(PyCFunction)TM·Arr·LqnR,METH_NOARGS,""}, - {"sR",(PyCFunction)TM·Arr·sR,METH_NOARGS, ""}, - {"LsR",(PyCFunction)TM·Arr·LsR,METH_NOARGS,""}, - {NULL} -}; - -/* 2. DESTRUCTIVE (SO) - No Entangle 'e' */ -static PyMethodDef Table·Arr·CR·SO[] = { - {"s", (PyCFunction)TM·Arr·s, METH_NOARGS, ""}, - {"sn",(PyCFunction)TM·Arr·sn,METH_VARARGS,""}, - {"r", (PyCFunction)TM·Arr·r, METH_NOARGS, ""}, - {"w", (PyCFunction)TM·Arr·w, METH_O, ""}, - {"dR",(PyCFunction)TM·Arr·dR,METH_NOARGS, ""}, - {"esd",(PyCFunction)TM·Arr·esd,METH_NOARGS,""}, - {"esa",(PyCFunction)TM·Arr·esa,METH_O, ""}, - {"aR",(PyCFunction)TM·Arr·aR,METH_O, ""}, - {"qR",(PyCFunction)TM·Arr·qR,METH_NOARGS, ""}, - {"qnR",(PyCFunction)TM·Arr·qnR,METH_NOARGS,""}, - {"LqnR",(PyCFunction)TM·Arr·LqnR,METH_NOARGS,""}, - {"LsR",(PyCFunction)TM·Arr·LsR,METH_NOARGS,""}, - {NULL} -}; - -static PyMethodDef Table·Arr·CLR·SO[] = { - {"s", (PyCFunction)TM·Arr·s, METH_NOARGS, ""}, - {"Ls",(PyCFunction)TM·Arr·Ls,METH_NOARGS, ""}, - {"r", (PyCFunction)TM·Arr·r, METH_NOARGS, ""}, - {"w", (PyCFunction)TM·Arr·w, METH_O, ""}, - {"dR",(PyCFunction)TM·Arr·dR,METH_NOARGS, ""}, - {"LdR",(PyCFunction)TM·Arr·LdR,METH_NOARGS,""}, - {"esd",(PyCFunction)TM·Arr·esd,METH_NOARGS,""}, - {"eLsd",(PyCFunction)TM·Arr·eLsd,METH_NOARGS,""}, - {"esa",(PyCFunction)TM·Arr·esa,METH_O, ""}, - {"eLsa",(PyCFunction)TM·Arr·eLsa,METH_O, ""}, - {"aR",(PyCFunction)TM·Arr·aR,METH_O, ""}, - {"LaR",(PyCFunction)TM·Arr·LaR,METH_O, ""}, - {"qR",(PyCFunction)TM·Arr·qR,METH_NOARGS, ""}, - {"LqR",(PyCFunction)TM·Arr·LqR,METH_NOARGS, ""}, - {"qnR",(PyCFunction)TM·Arr·qnR,METH_NOARGS,""}, - {"LqnR",(PyCFunction)TM·Arr·LqnR,METH_NOARGS,""}, - {"sR",(PyCFunction)TM·Arr·sR,METH_NOARGS, ""}, - {"LsR",(PyCFunction)TM·Arr·LsR,METH_NOARGS,""}, - {NULL} -}; - /* --- TYPE MACROS --- */ #define DEFINE_ARRAY_TYPE(NAME, METHODS) \ @@ -171,8 +68,8 @@ DEFINE_ARRAY_TYPE(TM_UTF8_CR_ND, Table·Arr·CR·ND) DEFINE_ARRAY_TYPE(TM_UTF8_CR_SO, Table·Arr·CR·SO) DEFINE_ARRAY_TYPE(TM_UTF8_CR_EA, Table·Arr·CR·ND) DEFINE_ARRAY_TYPE(TM_UTF8_CLR_ND, Table·Arr·CLR·ND) -DEFINE_ARRAY_TYPE(TM_UTF8_CLR_SO, Table·Arr_CLR_SO) -DEFINE_ARRAY_TYPE(TM_UTF8_CLR_EA, Table·Arr_CLR_ND) +DEFINE_ARRAY_TYPE(TM_UTF8_CLR_SO, Table·Arr·CLR·SO) +DEFINE_ARRAY_TYPE(TM_UTF8_CLR_EA, Table·Arr·CLR·ND) /* 2. Graph Types */ DEFINE_GR_TYPE(TM_Gr_CR_ND, Table·Gr·CR·ND) @@ -181,14 +78,14 @@ DEFINE_GR_TYPE(TM_Gr_CR_EA, Table·Gr·CR·ND) DEFINE_GR_TYPE(TM_Gr_CLR_ND, Table·Gr·CLR·ND) DEFINE_GR_TYPE(TM_Gr_CLR_SO, Table·Gr·CLR·ND) -DEFINE_GR_TYPE(TM_Gr_CLR_EA, Table·Gr_CLR_ND) +DEFINE_GR_TYPE(TM_Gr_CLR_EA, Table·Gr·CLR·ND) DEFINE_GR_TYPE(TM_Glr_CR_ND, Table·Gr·CR·ND) DEFINE_GR_TYPE(TM_Glr_CR_SO, Table·Gr·CR·ND) DEFINE_GR_TYPE(TM_Glr_CR_EA, Table·Gr·CR·ND) DEFINE_GR_TYPE(TM_Glr_CLR_ND, Table·Gr·CLR·ND) DEFINE_GR_TYPE(TM_Glr_CLR_SO, Table·Gr·CLR·ND) -DEFINE_GR_TYPE(TM_Glr_CLR_EA, Table·Gr_CLR_ND) +DEFINE_GR_TYPE(TM_Glr_CLR_EA, Table·Gr·CLR·ND) /* ... Maps and Sets ... */ DEFINE_GR_TYPE(TM_Set_CR_ND, Table·Gr·CR·ND) @@ -196,28 +93,28 @@ DEFINE_GR_TYPE(TM_Set_CR_SO, Table·Gr·CR·ND) DEFINE_GR_TYPE(TM_Set_CR_EA, Table·Gr·CR·ND) DEFINE_GR_TYPE(TM_Set_CLR_ND, Table·Gr·CLR·ND) DEFINE_GR_TYPE(TM_Set_CLR_SO, Table·Gr·CLR·ND) -DEFINE_GR_TYPE(TM_Set_CLR_EA, Table·Gr·CLR_ND) +DEFINE_GR_TYPE(TM_Set_CLR_EA, Table·Gr·CLR·ND) DEFINE_GR_TYPE(TM_Map_CR_ND, Table·Gr·CR·ND) DEFINE_GR_TYPE(TM_Map_CR_SO, Table·Gr·CR·ND) DEFINE_GR_TYPE(TM_Map_CR_EA, Table·Gr·CR·ND) DEFINE_GR_TYPE(TM_Map_CLR_ND, Table·Gr·CLR·ND) -DEFINE_GR_TYPE(TM_Map_CLR_SO, Table·Gr·CLR_ND) -DEFINE_GR_TYPE(TM_Map_CLR_EA, Table·Gr_CLR_ND) +DEFINE_GR_TYPE(TM_Map_CLR_SO, Table·Gr·CLR·ND) +DEFINE_GR_TYPE(TM_Map_CLR_EA, Table·Gr·CLR·ND) DEFINE_GR_TYPE(TM_MapK_CR_ND, Table·Gr·CR·ND) DEFINE_GR_TYPE(TM_MapK_CR_SO, Table·Gr·CR·ND) -DEFINE_GR_TYPE(TM_MapK_CR_EA, Table·Gr_CR_ND) +DEFINE_GR_TYPE(TM_MapK_CR_EA, Table·Gr·CR·ND) DEFINE_GR_TYPE(TM_MapK_CLR_ND, Table·Gr·CLR·ND) -DEFINE_GR_TYPE(TM_MapK_CLR_SO, Table·Gr·CLR_ND) -DEFINE_GR_TYPE(TM_MapK_CLR_EA, Table·Gr_CLR_ND) +DEFINE_GR_TYPE(TM_MapK_CLR_SO, Table·Gr·CLR·ND) +DEFINE_GR_TYPE(TM_MapK_CLR_EA, Table·Gr·CLR·ND) DEFINE_GR_TYPE(TM_MapV_CR_ND, Table·Gr·CR·ND) DEFINE_GR_TYPE(TM_MapV_CR_SO, Table·Gr·CR·ND) -DEFINE_GR_TYPE(TM_MapV_CR_EA, Table·Gr_CR_ND) +DEFINE_GR_TYPE(TM_MapV_CR_EA, Table·Gr·CR·ND) DEFINE_GR_TYPE(TM_MapV_CLR_ND, Table·Gr·CLR·ND) -DEFINE_GR_TYPE(TM_MapV_CLR_SO, Table·Gr_CLR_ND) -DEFINE_GR_TYPE(TM_MapV_CLR_EA, Table_Gr_CLR_ND) +DEFINE_GR_TYPE(TM_MapV_CLR_SO, Table·Gr·CLR·ND) +DEFINE_GR_TYPE(TM_MapV_CLR_EA, Table·Gr·CLR·ND) /* --- MODULE INIT --- */ diff --git a/developer/authored/build/temp.linux-x86_64-cpython-311/TM_module.o b/developer/authored/build/temp.linux-x86_64-cpython-311/TM_module.o index 0a4bc2fe5d420314622d74be8ffde9211b3563c1..ae8ada3edfccc1fafb3378b59485de45722c2b72 100644 GIT binary patch literal 190448 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 literal 173856 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 j7XyjKa&L_8|Az&rMYIgq?(uK$zclI + + + + Symbol Specification + + + + + + + + + + +

SymbolSpace

+

+ SymbolSpace has: +

    +
  1. Symbol subclass
  2. +
  3. Factory subclass
  4. +
  5. Context subclass
  6. +
  7. a null symbol
  8. +
+

+ +

Symbol

+ +

+ A Symbol instance wraps an integer known as its identity. +

+ +

+ Symbols are made by the Factory `make` method. +

+ +

+ When a Symbol instance is garbage collected, it contacts the Symbol.Factory, so that its identity can be added to the Symbol.Factory's free list. +

+ +

Factory

+ +

The Factory has: +

    +
  1. counter
  2. +
  3. free_list
  4. +
+

+ +

+ Factory method calls are transactional. +

+ +

+ The counter value at any time between transactions is the highest count symbol identity that has been issued. +

+ +

+ The lowest counter value is zero. At time of Factory initialization the zero value is given as the identity for the SymbolSpace.null symbol. This initialization strategy assures the counter value remains the highest issued symbol identity even immediately after initialization. +

+ +

+ To add to the free list, first check the current counter value, If the count matches the identity of the newly freed Symbol instance, decremented the count. If the Counter's post decrement value is on the free list, it is removed from the free list and the count is decremented again, this repeats until the new decement count is not found on the free list. It is an error to attempt to free the null symbol, that of 0. +

+ +

Context

+

+ Context is a map keyed on a symbol list. Such a symbol list is called a 'symbol context'. Each key maps to a Factory. +

+ +

+ A program creates a context by calling make while giving it a Symbol instance list. That list, in the order the symbols are given, is said to be a symbol context. The make routine returns a Factory. Thus the returned Factory instance is a context specific factory. +

+ +

The program should never give make a symbol context that is already a key in the table. make can be guarded using read +

+ +

The read function is given a symbol context and returns the corresponding context specific factory, or none, if there isn't one. +

+ +

A symbol that is part of symbol context will never be garbage + collected. Hence, a symbol context remains in the table even when it is not being used. +

+ +

A symbol context is deleted from the table by calling the delete interface function and giving it the symbol context to be deleted.

+ + +

Usage

+ +

A programmer first creates a SymbolSpace, then in normal use, the programmer will create a top level symbol to serve as a namespace. The programmer will then use the resulting context specific factory to create symbols within that namespace +

+ + + + + + -- 2.20.1