diff --git a/co3/__init__.py b/co3/__init__.py index d6118a8..d866f01 100644 --- a/co3/__init__.py +++ b/co3/__init__.py @@ -1,43 +1,46 @@ ''' Database submodule -- `db`: contains SQLAlchemy-based schema definitions -- `accessors`: convenience methods for accessing database entries -- `populate`: convenience methods for populating database tables +- ``db``: contains SQLAlchemy-based schema definitions +- ``accessors``: convenience methods for accessing database entries +- ``populate``: convenience methods for populating database tables -The `accessors` and `populate` submodules are each split into `schema` and `fts` method +The ``accessors`` and ``populate`` submodules are each split into ``schema`` and ``fts`` method groups. The former concerns methods relating to the actual database schema, the latter to their SQLite FTS counterparts. -Note: Subpackages organization +.. admonition:: Subpackages organization + Subpackages are broken up by inheritance. Within a given submodule, you have a - `_base.py` file defining the base class associated with that submodule's title, along + ``_base.py`` file defining the base class associated with that submodule's title, along with concrete subclasses of that base in their own files. Deeper inheritance would - recursively extend this structure. The `__init__.py` for a given submodule then + recursively extend this structure. The ``__init__.py`` for a given submodule then exposes the concrete instances, leaving the base hidden. For example, - accessors/ - _base.py - core.py - fts.py + .. code-block:: - `core` and `fts` house the `CoreAccessor` and `FTSAccessor` classes, respectively, - and are the direct subclasses of the `Accessor` parent found in the `_base`. This base - class _could_ be placed outside of the submodule in the parent directory (imported - with something like `from db import accessor` instead of `from db.accessor import - _base`). This is entirely valid, but I tend to prefer when the base class is among its + accessors/ + _base.py + core.py + fts.py + + ``core`` and ``fts`` house the ``CoreAccessor`` and ``FTSAccessor`` classes, respectively, + and are the direct subclasses of the ``Accessor`` parent found in the ``_base``. This base + class *could* be placed outside of the submodule in the parent directory (imported + with something like ``from db import accessor`` instead of ``from db.accessor import + _base``). This is entirely valid, but I tend to prefer when the base class is among its direct children, as - In this case at least, the base doesn't need to be exposed - The base class is being stowed away under an appropriately named submodule; having a - separate `accessor.py` and `accessors/` file/directory can feel a little cluttered. + separate ``accessor.py`` and ``accessors/`` file/directory can feel a little cluttered. - It makes imports across the accessors feel standardized: - ```py - from localsys.db.accessors._base import Accessor - - from localsys.db.accessors.core import CoreAccessor - ``` + .. code-block:: python + + from localsys.db.accessors._base import Accessor + + from localsys.db.accessors.core import CoreAccessor Both have the same level of nesting to reach the class. @@ -46,46 +49,49 @@ Note: Subpackages organization the moment, and so long as I keep things consistent, choosing one over the other shouldn't matter. - Additionally, note how `__init__.py`s are typically set up when providing wider access - to internal modules. The `init` typically pulls out classes from sibling modules + Additionally, note how ``__init__.py``s are typically set up when providing wider access + to internal modules. The ``init`` typically pulls out classes from sibling modules (i.e., files), but will import subpackages are the topmost level. For example, for the structure - ``` - db/ - __init__.py - accessors/ + .. code-block:: + + db/ __init__.py - _base.py - core.py - fts.py - ``` + accessors/ + __init__.py + _base.py + core.py + fts.py we have - ```db/__init__.py - from localsys.db import accessors - ``` + .. code-block:: + :name: db/__init__.py - which just imports the subpackage `accessors`. However, within subpackage: + from localsys.db import accessors - ```db/accessors/__init__.py - from localsys.db.accessors.core import CoreAccessor - ``` + which just imports the subpackage ``accessors``. However, within subpackage: - we don't just import the submodule `core`; we did into the file to grab the relevant - class and pull it into the outer namespace. Overarching point: `__init__.py` files + .. code-block:: + :name: db/accessors/__init__.py + + from localsys.db.accessors.core import CoreAccessor + + we don't just import the submodule ``core``; we did into the file to grab the relevant + class and pull it into the outer namespace. Overarching point: ``__init__.py`` files typically reach into the sibling files (submodules) and pull out classes. Given that - this behavior is recursive, `__init__.py` then respect subpackages (nested - directories), importing them at the top-level and expecting an internal `__init__.py` + this behavior is recursive, ``__init__.py`` then respect subpackages (nested + directories), importing them at the top-level and expecting an internal ``__init__.py`` will have managed access appropriately. -Note: Organization for inheritance over composition +.. admonition:: Organization for inheritance over composition + At a glance, the organization of subpackages here feels like it clashes with those - seen in `localsys.primitives`. `note_components`, for instance, houses the components - for the outer `note` module. Contrast this with how the `core` submodule looks: it's - composing `*/core.py` files across subpackages `accessors` and `managers`, rather than - a single subpackage like `note`. This seems inconsistent, but the subpackages here are + seen in ``localsys.primitives``. ``note_components``, for instance, houses the components + for the outer ``note`` module. Contrast this with how the ``core`` submodule looks: it's + composing ``*/core.py`` files across subpackages ``accessors`` and ``managers``, rather than + a single subpackage like ``note``. This seems inconsistent, but the subpackages here are actually still organized in the same way: by inheritance. It just happens that the all of the note components inherit from the same base class, and are thus confined to a single subpackage. This aside, the subpackages themselves are still created around diff --git a/co3/accessor.py b/co3/accessor.py index d3af9cb..cf08ab2 100644 --- a/co3/accessor.py +++ b/co3/accessor.py @@ -1,5 +1,5 @@ ''' -**Accessor** +Accessor Provides access to an underlying schema through a supported set of operations. Class methods could be general, high-level SQL wrappers, or convenience functions for common diff --git a/co3/accessors/__init__.py b/co3/accessors/__init__.py index 72fad51..6bdc0e1 100644 --- a/co3/accessors/__init__.py +++ b/co3/accessors/__init__.py @@ -15,8 +15,8 @@ subclasses. For instance, you could wrap an FTSComposer in either a TableAccessor or FTSAccessor. The former will treat the tables in the composer like regular tables, exposing methods like -`.select` and `.select_one`, whereas the latter defines FTS-specific actions like -`.search`. +``.select`` and ``.select_one``, whereas the latter defines FTS-specific actions like +``.search``. ''' from co3.accessors.sql import SQLAccessor diff --git a/co3/accessors/fts.py b/co3/accessors/fts.py index 2a7cf9c..16c5a4e 100644 --- a/co3/accessors/fts.py +++ b/co3/accessors/fts.py @@ -25,12 +25,12 @@ class FTSAccessor(Accessor): ''' Execute a search query against an indexed FTS table for specific primitives. This method is mostly a generic FTS handler, capable of handling queries to any available - FTS table with a matching naming scheme (`fts__`). The current + FTS table with a matching naming scheme (``fts__``). The current intention is support all tokenizers, for file, note, block, and link primitives. - Search results include all FTS table columns, as well as SQLite-supported `snippet`s - and `highlight`s for matches. Matches are filtered and ordered by SQLite's - `MATCH`-based score for the text & column queries. Results are (a list of) fully + Search results include all FTS table columns, as well as SQLite-supported ``snippet``s + and ``highlight``s for matches. Matches are filtered and ordered by SQLite's + ``MATCH``-based score for the text & column queries. Results are (a list of) fully expanded dictionaries housing column-value pairs. Note: @@ -55,7 +55,7 @@ class FTSAccessor(Accessor): search_cols : space separated string of columns to use for primary queries q : search query colq : column constraint string; must conform to SQLite standards (e.g., - `:` + ``:`` snip_col : table column to use for snippets (default: 1; source content column) hl_col : table column to use for highlights (default: 2; format column, applied to HTML targets) diff --git a/co3/accessors/sql.py b/co3/accessors/sql.py index d3ab8be..cf58bab 100644 --- a/co3/accessors/sql.py +++ b/co3/accessors/sql.py @@ -3,34 +3,34 @@ Design proposal: variable backends One particular feature not supported by the current type hierarchy is the possible use of different backends to implement a general interface like SQLAccessor. One could imagine, -for instance, using `sqlalchemy` or `sqlite` to define the same methods laid out in a +for instance, using ``sqlalchemy`` or ``sqlite`` to define the same methods laid out in a parent class blueprint. It's not too difficult to imagine cases where both of these may be useful, but for now it is outside the development scope. Should it ever enter the scope, -however, we might consider a simple `backend` argument on instantiation, keeping just the +however, we might consider a simple ``backend`` argument on instantiation, keeping just the SQLAccessor exposed rather than a whole set of backend-specific types: -```py -class SQLAlchemyAccessor(RelationalAccessor): # may also inherit from a dedicated interface parent - def select(...): - ... +.. code-block:: python -class SQLiteAccessor(RelationalAccessor): - def select(...): - ... + class SQLAlchemyAccessor(RelationalAccessor): # may also inherit from a dedicated interface parent + def select(...): + ... + + class SQLiteAccessor(RelationalAccessor): + def select(...): + ... + + class SQLAccessor(RelationalAccessor): + backends = { + 'sqlalchemy': SQLAlchemyAccessor, + 'sqlite': SQLteAccessor, + } + + def __init__(self, backend: str): + self.backend = self.backends.get(backend) + + def select(...): + return self.backend.select(...) -class SQLAccessor(RelationalAccessor): - backends = { - 'sqlalchemy': SQLAlchemyAccessor, - 'sqlite': SQLteAccessor, - } - - def __init__(self, backend: str): - self.backend = self.backends.get(backend) - - def select(...): - return self.backend.select(...) - -``` For now, we can look at SQLAccessor (and equivalents in other type hierarchies, like SQLManagers) as being SQLAlchemyAccessors and not supporting any backend swapping. But in @@ -130,7 +130,7 @@ class SQLAccessor(RelationalAccessor[SQLTable]): ): # -> list[dict|sa.Mapping]: (double check the Mapping types) ''' Perform a SELECT query against the provided table-like object (see - `check_table()`). + ``check_table()``). Deprecated: String aliases String aliases for tables are no longer supported. This method no longer checks @@ -177,7 +177,7 @@ class SQLAccessor(RelationalAccessor[SQLTable]): Parse SQLAlchemy results into Python dicts. Leverages mappings to associate full column name context. - If `query_cols` is provided, their implicit names will be used for the keys of the + If ``query_cols`` is provided, their implicit names will be used for the keys of the returned dictionaries. This information is not available under CursorResults and thus must be provided separately. This will yield results like the following: diff --git a/co3/co3.py b/co3/co3.py index c599fd5..b8866d0 100644 --- a/co3/co3.py +++ b/co3/co3.py @@ -1,7 +1,7 @@ ''' -CO4 +CO3 -CO4 is an abstract base class for scaffolding object hierarchies and managing operations +CO3 is an abstract base class for scaffolding object hierarchies and managing operations with associated database schemas. It facilitates something like a "lightweight ORM" for classes/tables/states with fixed transformations of interest. The canonical use case is managing hierarchical document relations, format conversions, and syntactical components. @@ -60,13 +60,16 @@ class FormatRegistryMeta(type): class CO3(metaclass=FormatRegistryMeta): ''' - CO3: COllate, COllect, COmpose - conversion & DB insertion base + Conversion & DB insertion base class + + CO3: COllate, COllect, COmpose - Collate: organize and transform conversion outputs, possibly across class components - Collect: gather core attributes, conversion data, and subcomponents for DB insertion - Compose: construct object-associated DB table references through the class hierarchy - Note: on action groups + .. admonition:: on action groups + Group keys are simply named collections to make it easy for storage components to be attached to action subsets. They do _not_ augment the action registration namespace, meaning the action key should still be unique; the group key is purely @@ -74,14 +77,14 @@ class CO3(metaclass=FormatRegistryMeta): Action methods can also be attached to several groups, in case there is overlapping utility within or across schemas or storage media. In this case, it - becomes particularly critical to ensure registered `collate` methods really are + becomes particularly critical to ensure registered ``collate`` methods really are just "gathering results" from possibly heavy-duty operations, rather than performing them when called, so as to reduce wasted computation. ''' @property def attributes(self): ''' - Method to define how a subtype's inserts should be handled under `collect` for + Method to define how a subtype's inserts should be handled under ``collect`` for canonical attributes, i.e., inserts to the type's table. ''' return vars(self) @@ -89,7 +92,7 @@ class CO3(metaclass=FormatRegistryMeta): @property def components(self): ''' - Method to define how a subtype's inserts should be handled under `collect` for + Method to define how a subtype's inserts should be handled under ``collect`` for constituent components that need handling. ''' return [] @@ -99,9 +102,9 @@ class CO3(metaclass=FormatRegistryMeta): Return "connective" collation component data, possibly dependent on instance-specific attributes and the action arguments. This is typically the auxiliary structure that may be needed to attach to responses from registered - `collate` calls to complete inserts. + ``collate`` calls to complete inserts. - Note: this method is primarily used by `Mapper.collect()`, and is called just + Note: this method is primarily used by ``Mapper.collect()``, and is called just prior to collector send-off for collation inserts and injected alongside collation data. Common structure in collation components can make this function easy to define, independent of action group for instance. diff --git a/co3/collector.py b/co3/collector.py index 27c66cd..44fe2e9 100644 --- a/co3/collector.py +++ b/co3/collector.py @@ -6,10 +6,11 @@ their representations in the database. It operates with full knowledge of how bo defined, and abstracts away both the prep work for DB insertions as well as updates trickling down the primitive hierarchy. -The `src` format target is re-used for both canonical tables/primitives, as well as -_conversion_matter tables in tables/conversions under the `src` format. The latter -is meant to extend those attributes that are format-specific (i.e., would change when, say, -converting to `html5`), and thus need to be broken across the format dimension. +The ``src`` format target is re-used for both canonical tables/primitives, as well as +``_conversion_matter`` tables in tables/conversions under the ``src`` format. The +latter is meant to extend those attributes that are format-specific (i.e., would change +when, say, converting to ``html5``), and thus need to be broken across the format +dimension. Note: Despite the structure of the database module, this class does not currently inherit @@ -46,8 +47,8 @@ class Collector[C: Component]: def _inserts_from_receipts(self, receipts: list[str]|None=None, pop=False): ''' Group up added inserts by Component, often to be used directly for bulk insertion. - Optionally provide a list of `receipts` to group up only the corresponding subset of - inserts, and `pop` to remove encountered receipts from the internal store. + Optionally provide a list of ``receipts`` to group up only the corresponding subset of + inserts, and ``pop`` to remove encountered receipts from the internal store. ''' inserts = defaultdict(list) @@ -113,7 +114,7 @@ class Collector[C: Component]: The overall collection scheme embraces a session-like sequential update model to an internal insert tracker. The sequence of insert methods is ordered according to the schema hierarchy, and higher level inserts dictate the scope for lower level - inserts (all methods check and populate the same `inserts` dictionary). Calling + inserts (all methods check and populate the same ``inserts`` dictionary). Calling this method flushes any existing inserts, ensuring a re-scan takes place across calls (or "sessions"). diff --git a/co3/components/__init__.py b/co3/components/__init__.py index 3f3dd29..0d048b4 100644 --- a/co3/components/__init__.py +++ b/co3/components/__init__.py @@ -66,7 +66,7 @@ class SQLTable(Relation[SQLTableLike]): def from_table(cls, table: sa.Table): ''' Note that the sa.Table type is intentional here; not all matching types for - SQLTableLike have a defined `name` property + SQLTableLike have a defined ``name`` property ''' return cls(table.name, table) diff --git a/co3/database.py b/co3/database.py index 920de59..cc0892b 100644 --- a/co3/database.py +++ b/co3/database.py @@ -15,32 +15,34 @@ under one roof. This includes the Engine (opens up connections to the database), insert-like actions), and Indexers (systematically caching Accessor queries). Generalized behavior is supported by explicitly leveraging the individual components. For example, -``` -with db.engine.connect() as connection: - db.access.select( - connection, - - ) - db.manager.insert( - connection, - component, - data - ) -``` +.. code-block:: python + + with db.engine.connect() as connection: + db.access.select( + connection, + + ) + db.manager.insert( + connection, + component, + data + ) The Database also supports a few directly callable methods for simplified interaction. These methods manage a connection context internally, passing them through the way they might otherwise be handled explicitly, as seen above. -``` -db.select() +.. code-block:: python -db.insert(, data) -``` + db.select() + + db.insert(, data) + + +.. admonition:: on explicit connection contexts -Dev note: on explicit connection contexts Older models supported Accessors/Managers that housed their own Engine instances, and - when performing actions like `insert`, the Engine would be passed all the way through + when performing actions like ``insert``, the Engine would be passed all the way through until a Connection could be spawned, and in that context the single action would be made. This model forfeits a lot of connection control, preventing multiple actions under a single connection. @@ -71,23 +73,23 @@ class Database[C: Component]: generic openness must be propagated here, as it's intended to be fully abstracted away under the Database roof. Note that we cannot explicitly use an Engine type in its place, as it obscures its internal resource type dependence when we need it for - hinting here in `__init__`. + hinting here in ``__init__``. - Development TODO list: - - Decide on official ruling for assigning Schema objects, and verifying any - attempted Component-based actions (e.g., inserts, selects) to belong to or be a - composition of Components within an attached Schema. Reasons for: helps complete - the sense of a "Database" here programmatically, incorporating a more - structurally accurate representation of allowed operations, and prevent possible - attribute and type collisions. Reasons against: generally not a huge concern to - align Schemas as transactions will rollback, broadly increases a bit of bulk, - and users often expected know which components belong to a particular DB. - Leaning more to **for**, and would only apply to the directly supported method - passthroughs (and thus would have no impact on independent methods like - `Accessor.raw_select`). Additionally, even if component clashes don't pose - serious risk, it can be helpful to systematically address the cases where a - misalignment is occurring (by having helpful `verify` methods that can be ran - before any actions). + .. admonition:: Development TODO list + + Decide on official ruling for assigning Schema objects, and verifying any + attempted Component-based actions (e.g., inserts, selects) to belong to or be a + composition of Components within an attached Schema. Reasons for: helps complete + the sense of a "Database" here programmatically, incorporating a more structurally + accurate representation of allowed operations, and prevent possible attribute and + type collisions. Reasons against: generally not a huge concern to align Schemas as + transactions will rollback, broadly increases a bit of bulk, and users often + expected know which components belong to a particular DB. Leaning more to **for**, + and would only apply to the directly supported method passthroughs (and thus would + have no impact on independent methods like ``Accessor.raw_select``). Additionally, + even if component clashes don't pose serious risk, it can be helpful to + systematically address the cases where a misalignment is occurring (by having + helpful ``verify`` methods that can be ran before any actions). ''' _accessor_cls: type[Accessor[C]] = Accessor[C] _manager_cls: type[Manager[C]] = Manager[C] @@ -119,10 +121,12 @@ class Database[C: Component]: def select(self, component: C, *args, **kwargs): ''' - Dev note: args and kwargs have to be general/unspecified here due to the possible - passthrough method adopting arbitrary parameters in subtypes. I could simply - overload this method in the relevant inheriting DBs (i.e., by matching the - expected Accessor's .select signature). + .. admonition:: Dev note + + args and kwargs have to be general/unspecified here due to the possible + passthrough method adopting arbitrary parameters in subtypes. I could simply + overload this method in the relevant inheriting DBs (i.e., by matching the + expected Accessor's .select signature). ''' with self.engine.connect() as connection: return self.accessor.select( @@ -154,7 +158,7 @@ class Database[C: Component]: @property def manage(self): ''' - Accessing `.manage` queues a cache clear on the external index, as well wipes the + Accessing ``.manage`` queues a cache clear on the external index, as well wipes the local index. ''' self.reset_cache = True diff --git a/co3/databases/sql.py b/co3/databases/sql.py index fe07c3d..7433e0c 100644 --- a/co3/databases/sql.py +++ b/co3/databases/sql.py @@ -10,8 +10,8 @@ from co3.components import Relation, SQLTable class RelationalDatabase[C: RelationR](Database): ''' accessor/manager assignments satisfy supertype's type settings; - `TabluarAccessor[Self, C]` is of type `type[RelationalAccessor[Self, C]]` - (and yes, `type[]` specifies that the variable is itself being set to a type or a + ``TabluarAccessor[Self, C]`` is of type ``type[RelationalAccessor[Self, C]]`` + (and yes, ``type[]`` specifies that the variable is itself being set to a type or a class, rather than a satisfying _instance_) ''' _accessor_cls: type[RelationalAccessor[C]] = RelationalAccessor[C] diff --git a/co3/engine.py b/co3/engine.py index 5e4cb5e..ff27a49 100644 --- a/co3/engine.py +++ b/co3/engine.py @@ -17,7 +17,8 @@ class Engine: other type, although it may appear that way when such a type is in fact readily available). - Dev note: why is this object necessary? + .. admonition:: why is this object necessary? + More specifically, why not just have all the functionality here packed into the Database by default? The answer is that, realistically, it could be. The type separation between the Engine and Database is perhaps the least substantiated in @@ -30,7 +31,8 @@ class Engine: unique Database type), a separate object here would indeed be a waste, as is the case for any compositional typing scheme. - Dev note: + .. admonition:: dev note + This class is now non-generic. It was originally conceived as a generic, depending on a "resource spec type" to be help define expected types on initialization. This simply proved too messy, required generic type propagation to the Database @@ -55,7 +57,7 @@ class Engine: def _create_manager(self): ''' Create the session manager needed for connection contexts. This method is called - once by the `.manager` property function when it is first accessed. This method is + once by the ``.manager`` property function when it is first accessed. This method is separated to isolate the creation logic in inheriting types. Note that this method takes no explicit arguments. This is primarily because the diff --git a/co3/indexer.py b/co3/indexer.py index be87d1b..becb925 100644 --- a/co3/indexer.py +++ b/co3/indexer.py @@ -77,11 +77,11 @@ class Indexer: index_on = None, ): ''' - Like `group_by`, but makes a full query to the Accessors table `table_name` and + Like ``group_by``, but makes a full query to the Accessors table ``table_name`` and caches the results. The processing performed by the GROUP BY is also cached. - Update: `cached_select` and `cached_group_by` now unified by a single - `cached_query` method. This allows better defined GROUP BY caches, that are + Update: ``cached_select`` and ``cached_group_by`` now unified by a single + ``cached_query`` method. This allows better defined GROUP BY caches, that are reactive to the full set of parameters returning the result set (and not just the table, requiring a full query). @@ -93,12 +93,12 @@ class Indexer: which will look the same regardless of instance. Context: this became a clear issue when passing in more - `order_by=.desc()`. The `desc()` causes the index to store the column in + ``order_by=.desc()``. The ``desc()`` causes the index to store the column in an instance-specific way, rather than an easily re-usable, canonical column reference. Each time the CoreDatabase.files() was being called, for instance, - that @property would be re-evaluated, causing `desc()` to be re-initialized, + that @property would be re-evaluated, causing ``desc()`` to be re-initialized, and thus look different to the cache. Stringifying everything prevents this - (although this could well be an indication that only a single `cache_block` + (although this could well be an indication that only a single ``cache_block`` should ever be returned be database properties). Note: on access locks @@ -193,7 +193,7 @@ class Indexer: ): ''' Post-query "group by"-like aggregation. Creates an index over a set of columns - (`group_by_cols`), and aggregates values from `agg_cols` under the groups. + (``group_by_cols``), and aggregates values from ``agg_cols`` under the groups. Rows can be dicts or mappings, and columns can be strings or SQLAlchemy columns. To ensure the right columns are being used for the operation, it's best to pass in @@ -319,49 +319,49 @@ class Indexer: class CacheBlock: ''' - CacheBlock class - Wraps up a set of query parameters for a specific entity, and provides cached access to different types of "re-queries" via an associated Indexer. - The goal here is to help build/define entities as the possibly complex transformations - on the base schema that they are. For example, the Note primitive (entity) - incorporates details across `files`, `notes`, `note_conversions`, and - `note_conversion_matter` tables (defined in a single endpoint by a Composer), often - needs to be selected in particular ways (via an Accessor), and results stored for fast - access later on (handled by an Indexer). This pipeline can be daunting and requires - too many moving parts to be handled explicitly everywhere. CacheBlocks wrap up a set - of query "preferences," exposing a simpler interface for downstream access to - entities. It still allows for low-level control over re-grouping/indexing, raw hits to - the actual DB, etc, but keeps things tighter and well-behaved for the Indexer. - - You can think of these as the Indexer's "fingers"; they're deployable mini-Indexes - that "send back" results to the class cache, which is "broadcast" to all other - instances for use when necessary. + .. admonition:: Additional details - Note: Example usage + The goal here is to help build/define entities as the possibly complex + transformations on the base schema that they are. For example, the Note primitive + (entity) incorporates details across ``files``, ``notes``, ``note_conversions``, + and ``note_conversion_matter`` tables (defined in a single endpoint by a + Composer), often needs to be selected in particular ways (via an Accessor), and + results stored for fast access later on (handled by an Indexer). This pipeline can + be daunting and requires too many moving parts to be handled explicitly + everywhere. CacheBlocks wrap up a set of query "preferences," exposing a simpler + interface for downstream access to entities. It still allows for low-level control + over re-grouping/indexing, raw hits to the actual DB, etc, but keeps things + tighter and well-behaved for the Indexer. - ```py - cb = CacheBlock() + You can think of these as the Indexer's "fingers"; they're deployable mini-Indexes + that "send back" results to the class cache, which is "broadcast" to all other + instances for use when necessary. - # Set up cached queries with chained params or via call: + .. admonition:: Example usage - cb.where(t.notes.c.name=="name").group_by(t.note_conversions.c.format) - cb() # get results + .. code-block:: python - # - OR - # (use strings when known) + cb = CacheBlock() - cb.where(t.notes.c.name=="name").group_by('format') - cb() # get results + # Set up cached queries with chained params or via call: + + cb.where(t.notes.c.name=="name").group_by(t.note_conversions.c.format) + cb() # get results - # - OR - # (use kwargs in the call; results returned right away) + # - OR - # (use strings when known) - cb( - where=(t.notes.c.name=="name"), - group_by='format' - ) - ``` + cb.where(t.notes.c.name=="name").group_by('format') + cb() # get results + # - OR - # (use kwargs in the call; results returned right away) + + cb( + where=(t.notes.c.name=="name"), + group_by='format' + ) ''' def __init__( self, diff --git a/co3/managers/sql.py b/co3/managers/sql.py index 1f9954d..303a632 100644 --- a/co3/managers/sql.py +++ b/co3/managers/sql.py @@ -1,6 +1,6 @@ ''' Note: Common on insert behavior - - Tables with unique constraints have been equipped with `sqlite_on_conflict_unique` + - Tables with unique constraints have been equipped with ``sqlite_on_conflict_unique`` flags, enabling conflicting bulk inserts to replace conflicting rows gracefully. No need to worry about explicitly handling upserts. - The bulk insert via conn.execute(,) automatically ignores @@ -15,17 +15,17 @@ Note: Options for insert/update model the right approach since we defer as much to bulk SQL logic, but it's far and away the worse option b/c prepping all file/note/etc objects is too expensive to ultimately throw away when finding out an update isn't needed. For example, if we - wanted to perform note updates _inside_ the SQL call (like an `INSERT .. UPDATE .. - IF`, as opposed to determining the objects to insert _outside_ of the SQL call), + wanted to perform note updates _inside_ the SQL call (like an ``INSERT .. UPDATE .. + IF``, as opposed to determining the objects to insert _outside_ of the SQL call), you would need to bring each of the note's HTML prior to the insert check. There's no 2-stage processing here where you can check if the note needs to be converted b/c it's out of date, and only then perform the computation. 2. Instantiate objects sequentially, each time checking with the DB to see if full processing is needed. This makes much more sense when the full processing is very expensive, as it is with Note conversion. This would iterate through available notes, - perform a `SELECT` on the target table to see if the note needs updating, and if so + perform a ``SELECT`` on the target table to see if the note needs updating, and if so perform the remaining computation. Those objects then get added to a "update object - list" to be inserted in bulk, but you make sequential `SELECT` checks before that. + list" to be inserted in bulk, but you make sequential ``SELECT`` checks before that. The one extra optimization you could maybe make here is doing a full SELECT on the target table and bring all rows into memory before iterating through the objects. @@ -69,7 +69,7 @@ class SQLManager(RelationalManager[SQLTable]): of rows and bundle them under a single transaction. This is important for table groups with foreign keys and cascading deletions: inserts need to be coordinated. Note that actually collecting the inserts that need to take place is outside the scope of the - Manager (see the Collector). We do, however, implement a `sync` operation that can + Manager (see the Collector). We do, however, implement a ``sync`` operation that can saturates a router with events (dynamically) and sweeps up inserts on session basis from an attached collector. ''' diff --git a/co3/mapper.py b/co3/mapper.py index 912423b..839a501 100644 --- a/co3/mapper.py +++ b/co3/mapper.py @@ -7,23 +7,26 @@ auto-collection and composition. Example: -mapper = Mapper[sa.Table]() +.. code-block:: python -mapper.attach( - Type, - attr_comp=TypeTable, - coll_comp=CollateTable, - coll_groups={ - 'name': NameConversions - } -) + mapper = Mapper[sa.Table]() + + mapper.attach( + Type, + attr_comp=TypeTable, + coll_comp=CollateTable, + coll_groups={ + 'name': NameConversions + } + ) + +.. admonition:: Development log -Development log: - Overruled design decision: Mappers were previously designed to map from a specific CO3 hierarchy to a specific Schema. The intention was to allow only related types to be attached to a single schema, at least under a particular Mapper. The type restriction has since been removed, however, as it isn't particularly well-founded. - During `collect()`, a particular instance collects data from both its attributes and + During ``collect()``, a particular instance collects data from both its attributes and its collation actions. It then repeats the same upward for parent types (part of the same type hierarchy), and down to components (often not part of the same type hierarchy). As such, to fully collect from a type, the Mapper needs to leave @@ -51,11 +54,11 @@ class Mapper[C: Component]: attached CO3 types Additionally, the Mapper manages its own Collector and Composer instances. The - Collector receives the inserts from `.collect()` calls, and will subsequently be + Collector receives the inserts from ``.collect()`` calls, and will subsequently be "dropped off" at an appropriate Database's Manager to actually perform the requested inserts (hence why we tie Mappers to Schemas one-to-one). - Dev note: + .. admonition:: Dev note the Composer needs reconsideration, or at least its positioning directly in this class. It may be more appropriate to have at the Schema level, or even just dissolved altogether if arbitrary named Components can be attached to schemas. @@ -135,7 +138,7 @@ class Mapper[C: Component]: ''' Auto-register a set of types to the Mapper's attached Schema. Associations are made from types to both attribute and collation component names, through - `attr_name_map` and `coll_name_map`, respectively. Collation targets are inferred + ``attr_name_map`` and ``coll_name_map``, respectively. Collation targets are inferred through the registered groups in each type. Parameters: @@ -143,7 +146,7 @@ class Mapper[C: Component]: attr_name_map: function mapping from types/classes to attribute component names in the attached Mapper Schema coll_name_map: function mapping from types/classes & action groups to - collation component names in the attached Mapper Schema. `None` + collation component names in the attached Mapper Schema. ``None`` is passed as the action group to retrieve the default collection target. ''' @@ -192,7 +195,7 @@ class Mapper[C: Component]: how inserts should be handled for inheritance. ORM would make component inserts a little easier perhaps, since they can be attached as attributes to constructed row objects and a sa.Relationship will handle the rest. Granted, - we don't do a whole lot more here: we just call `collect` over those + we don't do a whole lot more here: we just call ``collect`` over those components, adding them to the collector session all the same. Parameters: @@ -256,14 +259,15 @@ class Mapper[C: Component]: class ComposableMapper[C: ComposableComponent](Mapper[C]): ''' - Dev note: class design + .. admonition:: class design + Heavily debating between multiple possible design approaches here. The main purpose of this subtype is make clear the need for additional compositional mapping details, namely functions that can produce pairwise join conditions for both the attribute tree (vertical traversal) and the collation components (horizontal traversal). Here's a few remarks: - - I want the necessary maps to provided/stored _outside_ of `compose` calls to + - I want the necessary maps to provided/stored *outside* of ``compose`` calls to reduce overhead for downstream callers. It's awkward to have think about the exact attr-to-attr associations each time you want a type's associated composition, especially when they don't change under the same Mapper (i.e., @@ -275,7 +279,7 @@ class ComposableMapper[C: ComposableComponent](Mapper[C]): more. - Considering the full deprecation for the Composer type, or whether this could be the place where it serves some purpose. Aesthetically, there's symmetry with the - `collect` and Collector method-type pairing, but that isn't a good enough reason + ``collect`` and Collector method-type pairing, but that isn't a good enough reason to justify a separate type here. The difference is that Collector instances actually store type references, whereas the considered Composer type would effectively just be a convenient collection of utility functions. Still possibly @@ -290,21 +294,21 @@ class ComposableMapper[C: ComposableComponent](Mapper[C]): * Mappers provide an exoskeleton for a Schema's nodes. It structures Components into attributes and collation types, and additionally ties them to external CO3 types. The handy analogy here has been that attribute comps connect - _vertically_ (in a tree like fashion; point up for parents and down for - children), and collation comps point _horiztonally_ (or perhaps more aptly, - _outward_; at each node in the attribute tree, you have a "circle" of + *vertically* (in a tree like fashion; point up for parents and down for + children), and collation comps point *horizontally* (or perhaps more aptly, + *outward*; at each node in the attribute tree, you have a "circle" of collation comps that can point to it, and are not involved as formal tree nodes. Can maybe think of these like "ornaments" or bulbs or orbitals). * While the Mappers may provide the "bones," there's no way to communicate - _across_ them. While I might know that one attribute is the "parent" of - another, I don't know _why_ that relationship is there. A Composer, or the + *across* them. While I might know that one attribute is the "parent" of + another, I don't know *why* that relationship is there. A Composer, or the composer details to be provided to this class, serve as the "nerves" to be paired with the bone, actually establishing a line of communication. More specifically, the nerves here are attribute-based mappings between pairs of Components, i.e., (generalized) join conditions. - Note that, by the above logic, we should then want/need a type to manage the - functions provided to `attach_many`. These functions help automatically + functions provided to ``attach_many``. These functions help automatically characterize the shape of the type skeleton in the same way the proposed Composer wrapper would. In fact, the barebones presentation here is really just the same two function signatures as are expected by that method. The above @@ -313,14 +317,14 @@ class ComposableMapper[C: ComposableComponent](Mapper[C]): one goes, the other must as well. This may also help me keep it simpler for the time being. - One other aspect of a dedicated Composer type (and by the above point, a - hypothetical type to aid in `attach_many` specification) could have some sort of + hypothetical type to aid in ``attach_many`` specification) could have some sort of "auto" feature about it. With a clear enough "discovery system," we could encourage certain kinds of Schemas and components are named and structured. Such an auto-composer could "scan" all components in a provided Schema and attempt to find common attributes across tables that are unlinked (i.e., the reused column names implicit across types in the attribute hierarchy; e.g., File.name -> Note.name), as well as explicit connections which may suggest collation - attachment (e.g., `note_conversions.name` --FK-> Note.name). This, of course, + attachment (e.g., ``note_conversions.name --FK-> Note.name``). This, of course, could always be overridden with manual specification, but being aware of some automatic discovery structures could help constrain schema definitions to be more in-line with the CO3 operational model. That all being said, this is a diff --git a/co3/schema.py b/co3/schema.py index fab895e..5d85d00 100644 --- a/co3/schema.py +++ b/co3/schema.py @@ -4,7 +4,7 @@ Schema Collection of related storage components, often representing the data structure of an entire database. Some databases support multiple schemas, however. In general, a Schema can wrap up an associated subset of components within a single database, so long as -`Manager.recreate()` supports creating components in separate calls (even if the +``Manager.recreate()`` supports creating components in separate calls (even if the associated database doesn't explicitly support multiple schemas). Schema objects are used to: diff --git a/co3/util/db.py b/co3/util/db.py index 3e8c961..19ff374 100644 --- a/co3/util/db.py +++ b/co3/util/db.py @@ -1,24 +1,26 @@ ''' Example usage for this file's utilities: -# get SA engine, creating folder hierarchy to provided DB path -engine = db.get_engine() +.. code-block:: python -# execute a single SA statement, returns a CursorResult -select_results = db.sa_execute(engine, sa.select()) - -# convert raw results to dictionaries, keys corresponding to col names -select_dicts = db.named_results(
, select_results) - -# use table defaults and cols to create compliant insert -insert_dicts = [ db.prepare_insert(
, sd) for sd in select_dicts ] - -# perform a bulk insert -with engine.connect() as connection: - connection.execute( - sa.insert(
), - insert_dicts - ) + # get SA engine, creating folder hierarchy to provided DB path + engine = db.get_engine() + + # execute a single SA statement, returns a CursorResult + select_results = db.sa_execute(engine, sa.select(
)) + + # convert raw results to dictionaries, keys corresponding to col names + select_dicts = db.named_results(
, select_results) + + # use table defaults and cols to create compliant insert + insert_dicts = [ db.prepare_insert(
, sd) for sd in select_dicts ] + + # perform a bulk insert + with engine.connect() as connection: + connection.execute( + sa.insert(
), + insert_dicts + ) ''' import time @@ -54,7 +56,7 @@ def deferred_fkey(target, **kwargs): def deferred_cd_fkey(target, **kwargs): ''' - Prefer this when using FKEYs; need to really justify _not_ having a CASCADE deletion + Prefer this when using FKEYs; need to really justify *not* having a CASCADE deletion enabled ''' return deferred_fkey(target, ondelete='CASCADE', **kwargs) @@ -179,7 +181,7 @@ def create_vss0( embedding_size=384, ): ''' - Create a VSS table + Create a VSS table. Parameters: table: either SQLAlchemy table instance, or table name string diff --git a/docs/_build/doctrees/environment.pickle b/docs/_build/doctrees/environment.pickle index 12d5b66..855b47d 100644 Binary files a/docs/_build/doctrees/environment.pickle and b/docs/_build/doctrees/environment.pickle differ diff --git a/docs/_build/doctrees/index.doctree b/docs/_build/doctrees/index.doctree index 7790f2d..e17093c 100644 Binary files a/docs/_build/doctrees/index.doctree and b/docs/_build/doctrees/index.doctree differ diff --git a/docs/_build/html/.buildinfo b/docs/_build/html/.buildinfo index 6724cba..ba6ea85 100644 --- a/docs/_build/html/.buildinfo +++ b/docs/_build/html/.buildinfo @@ -1,4 +1,4 @@ # Sphinx build info version 1 # This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. -config: 42689903516d5840d143a46f4ba615c6 +config: 31124ef51117182dc672bbc42963e105 tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/docs/_build/html/_autoref/modules.html b/docs/_build/html/_autoref/modules.html index 688ebd8..655564f 100644 --- a/docs/_build/html/_autoref/modules.html +++ b/docs/_build/html/_autoref/modules.html @@ -200,7 +200,6 @@

Contents

    -
  • Test
  • Documentation diff --git a/docs/_build/html/_sources/index.md.txt b/docs/_build/html/_sources/index.md.txt index b0164dc..74b6ee9 100644 --- a/docs/_build/html/_sources/index.md.txt +++ b/docs/_build/html/_sources/index.md.txt @@ -30,8 +30,6 @@ _autoref/co3.rst :maxdepth: 3 :caption: Contents -reference/test - reference/documentation/index reference/site/index ``` diff --git a/docs/_build/html/genindex.html b/docs/_build/html/genindex.html index 8ddcd0a..4cd0d9d 100644 --- a/docs/_build/html/genindex.html +++ b/docs/_build/html/genindex.html @@ -198,7 +198,6 @@

Contents

@@ -275,58 +282,30 @@

A

@@ -335,41 +314,25 @@

C

+ -
+
  • co3.manager @@ -503,8 +468,6 @@
  • module
-
  • co3.managers.fts @@ -575,77 +538,41 @@
  • module
-
  • collate() (co3.CO3 method) +
  • collate() (co3.co3.CO3 method)
  • -
  • collation_attributes() (co3.CO3 method) - -
  • -
  • collect() (co3.Mapper method) - -
  • -
  • collect_inserts() (co3.Collector method) - -
  • -
  • Collector (class in co3), [1] - -
  • -
  • Component (class in co3), [1] - -
  • -
  • components (co3.CO3 property) - -
  • ComposableComponent (class in co3.components)
  • -
  • ComposableMapper (class in co3) - -
  • compose() (co3.components.ComposableComponent method)
  • -
  • connect() (co3.Engine method) +
  • connect() (co3.engine.Engine method)
  • @@ -661,18 +588,14 @@

    D

      +
    • Engine (class in co3.engine) +
    • exec_explicit() (co3.engines.SQLEngine static method)
    • execute() (co3.engines.SQLEngine static method) @@ -735,56 +654,36 @@

      G

      @@ -793,25 +692,13 @@

      I

      @@ -845,39 +728,23 @@

      M

      @@ -1004,11 +867,9 @@

      R

        -
      • raw_select() (co3.Accessor method) +
      • raw_select() (co3.accessor.Accessor method)
      • read_embeddings() (co3.accessors.vss.VSSAccessor method)
      • -
      • recreate() (co3.Database method) +
      • recreate() (co3.database.Database method)
          -
        • (co3.database.Database method) -
        • -
        • (co3.Manager method) -
        • (co3.manager.Manager method)
        • (co3.managers.fts.FTSManager method) @@ -1062,38 +919,30 @@

          S

          - +
          • SQLDatabase (class in co3.databases.sql)
          • SQLEngine (class in co3.engines) @@ -1106,11 +955,9 @@
          • SQLTable (class in co3.components)
          • -
          • sync() (co3.Manager method) +
          • sync() (co3.manager.Manager method)

            Contents

              -
            • Test
            • Documentation @@ -247,34 +246,34 @@
              - + - + - - + + - + - + - + - + - + - + - + @@ -315,7 +314,6 @@

              Contents

              diff --git a/docs/_build/html/objects.inv b/docs/_build/html/objects.inv index 46ad7e0..f8191cc 100644 Binary files a/docs/_build/html/objects.inv and b/docs/_build/html/objects.inv differ diff --git a/docs/_build/html/reference/documentation/index.html b/docs/_build/html/reference/documentation/index.html index 8bb2ca4..9d23768 100644 --- a/docs/_build/html/reference/documentation/index.html +++ b/docs/_build/html/reference/documentation/index.html @@ -3,7 +3,7 @@ - +Documentation - co3 documentation @@ -200,7 +200,6 @@

              Contents

                -
              • Test
              • Documentation @@ -259,14 +258,14 @@ - +
                Previous
                -
                Test
                +
                co3.schema module
                diff --git a/docs/_build/html/reference/documentation/sphinx.html b/docs/_build/html/reference/documentation/sphinx.html index f5d353c..d112f5e 100644 --- a/docs/_build/html/reference/documentation/sphinx.html +++ b/docs/_build/html/reference/documentation/sphinx.html @@ -200,7 +200,6 @@

              Contents

                -
              • Test
              • Documentation diff --git a/docs/_build/html/search.html b/docs/_build/html/search.html index 578bbd7..4e79df3 100644 --- a/docs/_build/html/search.html +++ b/docs/_build/html/search.html @@ -197,7 +197,6 @@

              Contents

                -
              • Test
              • Documentation diff --git a/docs/_build/html/searchindex.js b/docs/_build/html/searchindex.js index 48f31c1..f7f7fb5 100644 --- a/docs/_build/html/searchindex.js +++ b/docs/_build/html/searchindex.js @@ -1 +1 @@ -Search.setIndex({"alltitles": {"Autoref": [[43, null]], "Contents": [[43, null]], "Detailed directory structure": [[45, "detailed-directory-structure"]], "Detailed structural breakdown": [[43, "detailed-structural-breakdown"]], "Documentation": [[44, "documentation"]], "Markdown syntax": [[45, "markdown-syntax"]], "Overview": [[43, "overview"]], "Sphinx": [[45, "sphinx"]], "Sphinx autodoc": [[45, "sphinx-autodoc"]], "Submodules": [[0, "submodules"], [2, "submodules"], [11, "submodules"], [19, "submodules"], [27, "submodules"]], "Subpackages": [[0, "subpackages"]], "Test": [[46, "test"]], "co3": [[31, "co3"], [32, "module-co3"]], "co3 package": [[0, "module-co3"]], "co3 package docs": [[43, "co3-package-docs"]], "co3.Accessor": [[33, "co3-accessor"]], "co3.CO3": [[34, "co3-co3"]], "co3.Collector": [[35, "co3-collector"]], "co3.Component": [[36, "co3-component"]], "co3.Database": [[37, "co3-database"]], "co3.Engine": [[38, "co3-engine"]], "co3.Indexer": [[39, "co3-indexer"]], "co3.Manager": [[40, "co3-manager"]], "co3.Mapper": [[41, "co3-mapper"]], "co3.Schema": [[42, "co3-schema"]], "co3.accessor module": [[1, "module-co3.accessor"]], "co3.accessors package": [[2, "module-co3.accessors"]], "co3.accessors.fts module": [[3, "module-co3.accessors.fts"]], "co3.accessors.sql module": [[4, "module-co3.accessors.sql"]], "co3.accessors.vss module": [[5, "module-co3.accessors.vss"]], "co3.co3 module": [[6, "module-co3.co3"]], "co3.collector module": [[7, "module-co3.collector"]], "co3.component module": [[8, "module-co3.component"]], "co3.components package": [[9, "module-co3.components"]], "co3.database module": [[10, "module-co3.database"]], "co3.databases package": [[11, "module-co3.databases"]], "co3.databases.fts module": [[12, "module-co3.databases.fts"]], "co3.databases.sql module": [[13, "module-co3.databases.sql"]], "co3.databases.vss module": [[14, "module-co3.databases.vss"]], "co3.engine module": [[15, "module-co3.engine"]], "co3.engines package": [[16, "module-co3.engines"]], "co3.indexer module": [[17, "module-co3.indexer"]], "co3.manager module": [[18, "module-co3.manager"]], "co3.managers package": [[19, "module-co3.managers"]], "co3.managers.fts module": [[20, "module-co3.managers.fts"]], "co3.managers.sql module": [[21, "module-co3.managers.sql"]], "co3.managers.vss module": [[22, "module-co3.managers.vss"]], "co3.mapper module": [[23, "module-co3.mapper"]], "co3.mappers package": [[24, "co3-mappers-package"]], "co3.schema module": [[25, "module-co3.schema"]], "co3.schemas package": [[26, "module-co3.schemas"]], "co3.util package": [[27, "module-co3.util"]], "co3.util.db module": [[28, "module-co3.util.db"]], "co3.util.regex module": [[29, "module-co3.util.regex"]], "co3.util.types module": [[30, "module-co3.util.types"]]}, "docnames": ["_autoref/co3", "_autoref/co3.accessor", "_autoref/co3.accessors", "_autoref/co3.accessors.fts", "_autoref/co3.accessors.sql", "_autoref/co3.accessors.vss", "_autoref/co3.co3", "_autoref/co3.collector", "_autoref/co3.component", "_autoref/co3.components", "_autoref/co3.database", "_autoref/co3.databases", "_autoref/co3.databases.fts", "_autoref/co3.databases.sql", "_autoref/co3.databases.vss", "_autoref/co3.engine", "_autoref/co3.engines", "_autoref/co3.indexer", "_autoref/co3.manager", "_autoref/co3.managers", "_autoref/co3.managers.fts", "_autoref/co3.managers.sql", "_autoref/co3.managers.vss", "_autoref/co3.mapper", "_autoref/co3.mappers", "_autoref/co3.schema", "_autoref/co3.schemas", "_autoref/co3.util", "_autoref/co3.util.db", "_autoref/co3.util.regex", "_autoref/co3.util.types", "_autoref/modules", "_autosummary/co3", "_autosummary/co3.Accessor", "_autosummary/co3.CO3", "_autosummary/co3.Collector", "_autosummary/co3.Component", "_autosummary/co3.Database", "_autosummary/co3.Engine", "_autosummary/co3.Indexer", "_autosummary/co3.Manager", "_autosummary/co3.Mapper", "_autosummary/co3.Schema", "index", "reference/documentation/index", "reference/documentation/sphinx", "reference/test"], "envversion": {"sphinx": 61, "sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx.ext.viewcode": 1}, "filenames": ["_autoref/co3.rst", "_autoref/co3.accessor.rst", "_autoref/co3.accessors.rst", "_autoref/co3.accessors.fts.rst", "_autoref/co3.accessors.sql.rst", "_autoref/co3.accessors.vss.rst", "_autoref/co3.co3.rst", "_autoref/co3.collector.rst", "_autoref/co3.component.rst", "_autoref/co3.components.rst", "_autoref/co3.database.rst", "_autoref/co3.databases.rst", "_autoref/co3.databases.fts.rst", "_autoref/co3.databases.sql.rst", "_autoref/co3.databases.vss.rst", "_autoref/co3.engine.rst", "_autoref/co3.engines.rst", "_autoref/co3.indexer.rst", "_autoref/co3.manager.rst", "_autoref/co3.managers.rst", "_autoref/co3.managers.fts.rst", "_autoref/co3.managers.sql.rst", "_autoref/co3.managers.vss.rst", "_autoref/co3.mapper.rst", "_autoref/co3.mappers.rst", "_autoref/co3.schema.rst", "_autoref/co3.schemas.rst", "_autoref/co3.util.rst", "_autoref/co3.util.db.rst", "_autoref/co3.util.regex.rst", "_autoref/co3.util.types.rst", "_autoref/modules.rst", "_autosummary/co3.rst", "_autosummary/co3.Accessor.rst", "_autosummary/co3.CO3.rst", "_autosummary/co3.Collector.rst", "_autosummary/co3.Component.rst", "_autosummary/co3.Database.rst", "_autosummary/co3.Engine.rst", "_autosummary/co3.Indexer.rst", "_autosummary/co3.Manager.rst", "_autosummary/co3.Mapper.rst", "_autosummary/co3.Schema.rst", "index.md", "reference/documentation/index.md", "reference/documentation/sphinx.md", "reference/test.md"], "indexentries": {"__init__() (co3.accessor method)": [[33, "co3.Accessor.__init__", false]], "__init__() (co3.co3 method)": [[34, "co3.CO3.__init__", false]], "__init__() (co3.collector method)": [[35, "co3.Collector.__init__", false]], "__init__() (co3.component method)": [[36, "co3.Component.__init__", false]], "__init__() (co3.database method)": [[37, "co3.Database.__init__", false]], "__init__() (co3.engine method)": [[38, "co3.Engine.__init__", false]], "__init__() (co3.indexer method)": [[39, "co3.Indexer.__init__", false]], "__init__() (co3.manager method)": [[40, "co3.Manager.__init__", false]], "__init__() (co3.mapper method)": [[41, "co3.Mapper.__init__", false]], "__init__() (co3.schema method)": [[42, "co3.Schema.__init__", false]], "accessor (class in co3)": [[32, "co3.Accessor", false], [33, "co3.Accessor", false]], "accessor (class in co3.accessor)": [[1, "co3.accessor.Accessor", false]], "accessor (co3.databases.fts.ftsdatabase attribute)": [[12, "co3.databases.fts.FTSDatabase.accessor", false]], "accessor (co3.databases.vss.vssdatabase attribute)": [[14, "co3.databases.vss.VSSDatabase.accessor", false]], "action_registry (co3.co3 attribute)": [[32, "co3.CO3.action_registry", false]], "action_registry (co3.co3.co3 attribute)": [[6, "co3.co3.CO3.action_registry", false]], "add_component() (co3.schema method)": [[32, "co3.Schema.add_component", false]], "add_component() (co3.schema.schema method)": [[25, "co3.schema.Schema.add_component", false]], "add_insert() (co3.collector method)": [[32, "co3.Collector.add_insert", false]], "add_insert() (co3.collector.collector method)": [[7, "co3.collector.Collector.add_insert", false]], "add_router() (co3.managers.sql.sqlmanager method)": [[21, "co3.managers.sql.SQLManager.add_router", false]], "attach() (co3.mapper method)": [[32, "co3.Mapper.attach", false]], "attach() (co3.mapper.mapper method)": [[23, "co3.mapper.Mapper.attach", false]], "attach_many() (co3.mapper method)": [[32, "co3.Mapper.attach_many", false]], "attach_many() (co3.mapper.mapper method)": [[23, "co3.mapper.Mapper.attach_many", false]], "attributes (co3.co3 property)": [[32, "co3.CO3.attributes", false]], "attributes (co3.co3.co3 property)": [[6, "co3.co3.CO3.attributes", false]], "cache_block() (co3.indexer method)": [[32, "co3.Indexer.cache_block", false]], "cache_block() (co3.indexer.indexer method)": [[17, "co3.indexer.Indexer.cache_block", false]], "cache_clear() (co3.indexer method)": [[32, "co3.Indexer.cache_clear", false]], "cache_clear() (co3.indexer.indexer method)": [[17, "co3.indexer.Indexer.cache_clear", false]], "cacheblock (class in co3.indexer)": [[17, "co3.indexer.CacheBlock", false]], "cached_query() (co3.indexer method)": [[32, "co3.Indexer.cached_query", false]], "cached_query() (co3.indexer.indexer method)": [[17, "co3.indexer.Indexer.cached_query", false]], "camel_to_snake() (in module co3.util.regex)": [[29, "co3.util.regex.camel_to_snake", false]], "co3": [[0, "module-co3", false], [32, "module-co3", false]], "co3 (class in co3)": [[32, "co3.CO3", false], [34, "co3.CO3", false]], "co3 (class in co3.co3)": [[6, "co3.co3.CO3", false]], "co3.accessor": [[1, "module-co3.accessor", false]], "co3.accessors": [[2, "module-co3.accessors", false]], "co3.accessors.fts": [[3, "module-co3.accessors.fts", false]], "co3.accessors.sql": [[4, "module-co3.accessors.sql", false]], "co3.accessors.vss": [[5, "module-co3.accessors.vss", false]], "co3.co3": [[6, "module-co3.co3", false]], "co3.collector": [[7, "module-co3.collector", false]], "co3.component": [[8, "module-co3.component", false]], "co3.components": [[9, "module-co3.components", false]], "co3.database": [[10, "module-co3.database", false]], "co3.databases": [[11, "module-co3.databases", false]], "co3.databases.fts": [[12, "module-co3.databases.fts", false]], "co3.databases.sql": [[13, "module-co3.databases.sql", false]], "co3.databases.vss": [[14, "module-co3.databases.vss", false]], "co3.engine": [[15, "module-co3.engine", false]], "co3.engines": [[16, "module-co3.engines", false]], "co3.indexer": [[17, "module-co3.indexer", false]], "co3.manager": [[18, "module-co3.manager", false]], "co3.managers": [[19, "module-co3.managers", false]], "co3.managers.fts": [[20, "module-co3.managers.fts", false]], "co3.managers.sql": [[21, "module-co3.managers.sql", false]], "co3.managers.vss": [[22, "module-co3.managers.vss", false]], "co3.mapper": [[23, "module-co3.mapper", false]], "co3.schema": [[25, "module-co3.schema", false]], "co3.schemas": [[26, "module-co3.schemas", false]], "co3.util": [[27, "module-co3.util", false]], "co3.util.db": [[28, "module-co3.util.db", false]], "co3.util.regex": [[29, "module-co3.util.regex", false]], "co3.util.types": [[30, "module-co3.util.types", false]], "collate() (co3.co3 method)": [[32, "co3.CO3.collate", false]], "collate() (co3.co3.co3 method)": [[6, "co3.co3.CO3.collate", false]], "collate() (in module co3)": [[32, "co3.collate", false]], "collate() (in module co3.co3)": [[6, "co3.co3.collate", false]], "collation_attributes() (co3.co3 method)": [[32, "co3.CO3.collation_attributes", false]], "collation_attributes() (co3.co3.co3 method)": [[6, "co3.co3.CO3.collation_attributes", false]], "collect() (co3.mapper method)": [[32, "co3.Mapper.collect", false]], "collect() (co3.mapper.mapper method)": [[23, "co3.mapper.Mapper.collect", false]], "collect_inserts() (co3.collector method)": [[32, "co3.Collector.collect_inserts", false]], "collect_inserts() (co3.collector.collector method)": [[7, "co3.collector.Collector.collect_inserts", false]], "collector (class in co3)": [[32, "co3.Collector", false], [35, "co3.Collector", false]], "collector (class in co3.collector)": [[7, "co3.collector.Collector", false]], "component (class in co3)": [[32, "co3.Component", false], [36, "co3.Component", false]], "component (class in co3.component)": [[8, "co3.component.Component", false]], "components (co3.co3 property)": [[32, "co3.CO3.components", false]], "components (co3.co3.co3 property)": [[6, "co3.co3.CO3.components", false]], "composablecomponent (class in co3.components)": [[9, "co3.components.ComposableComponent", false]], "composablemapper (class in co3)": [[32, "co3.ComposableMapper", false]], "composablemapper (class in co3.mapper)": [[23, "co3.mapper.ComposableMapper", false]], "compose() (co3.components.composablecomponent method)": [[9, "co3.components.ComposableComponent.compose", false]], "compose() (co3.components.relation method)": [[9, "co3.components.Relation.compose", false]], "compose() (co3.components.sqltable method)": [[9, "co3.components.SQLTable.compose", false]], "compose() (co3.composablemapper method)": [[32, "co3.ComposableMapper.compose", false]], "compose() (co3.mapper.composablemapper method)": [[23, "co3.mapper.ComposableMapper.compose", false]], "connect() (co3.engine method)": [[32, "co3.Engine.connect", false]], "connect() (co3.engine.engine method)": [[15, "co3.engine.Engine.connect", false]], "connect() (co3.engines.sqlengine method)": [[16, "co3.engines.SQLEngine.connect", false]], "create_fts5() (in module co3.util.db)": [[28, "co3.util.db.create_fts5", false]], "create_vss0() (in module co3.util.db)": [[28, "co3.util.db.create_vss0", false]], "database (class in co3)": [[32, "co3.Database", false], [37, "co3.Database", false]], "database (class in co3.database)": [[10, "co3.database.Database", false]], "deferred_cd_fkey() (in module co3.util.db)": [[28, "co3.util.db.deferred_cd_fkey", false]], "deferred_fkey() (in module co3.util.db)": [[28, "co3.util.db.deferred_fkey", false]], "dictionary (class in co3.components)": [[9, "co3.components.Dictionary", false]], "distinct_on() (co3.indexer.cacheblock method)": [[17, "co3.indexer.CacheBlock.distinct_on", false]], "document (class in co3.components)": [[9, "co3.components.Document", false]], "embed_chunks() (co3.accessors.vss.vssaccessor method)": [[5, "co3.accessors.vss.VSSAccessor.embed_chunks", false]], "embeddings (co3.accessors.vss.vssaccessor property)": [[5, "co3.accessors.vss.VSSAccessor.embeddings", false]], "engine (class in co3)": [[32, "co3.Engine", false], [38, "co3.Engine", false]], "engine (class in co3.engine)": [[15, "co3.engine.Engine", false]], "exec_explicit() (co3.engines.sqlengine static method)": [[16, "co3.engines.SQLEngine.exec_explicit", false]], "execute() (co3.engines.sqlengine static method)": [[16, "co3.engines.SQLEngine.execute", false]], "formatregistrymeta (class in co3.co3)": [[6, "co3.co3.FormatRegistryMeta", false]], "from_metadata() (co3.schemas.sqlschema class method)": [[26, "co3.schemas.SQLSchema.from_metadata", false]], "from_table() (co3.components.sqltable class method)": [[9, "co3.components.SQLTable.from_table", false]], "fts5_prep_composite() (in module co3.util.db)": [[28, "co3.util.db.fts5_prep_composite", false]], "ftsaccessor (class in co3.accessors.fts)": [[3, "co3.accessors.fts.FTSAccessor", false]], "ftsdatabase (class in co3.databases.fts)": [[12, "co3.databases.fts.FTSDatabase", false]], "ftsmanager (class in co3.managers.fts)": [[20, "co3.managers.fts.FTSManager", false]], "get_attr_comp() (co3.mapper method)": [[32, "co3.Mapper.get_attr_comp", false]], "get_attr_comp() (co3.mapper.mapper method)": [[23, "co3.mapper.Mapper.get_attr_comp", false]], "get_attributes() (co3.component method)": [[32, "co3.Component.get_attributes", false]], "get_attributes() (co3.component.component method)": [[8, "co3.component.Component.get_attributes", false]], "get_attributes() (co3.components.dictionary method)": [[9, "co3.components.Dictionary.get_attributes", false]], "get_attributes() (co3.components.sqltable method)": [[9, "co3.components.SQLTable.get_attributes", false]], "get_coll_comp() (co3.mapper method)": [[32, "co3.Mapper.get_coll_comp", false]], "get_coll_comp() (co3.mapper.mapper method)": [[23, "co3.mapper.Mapper.get_coll_comp", false]], "get_column_defaults() (co3.components.sqltable method)": [[9, "co3.components.SQLTable.get_column_defaults", false]], "get_column_names_str_table() (in module co3.util.db)": [[28, "co3.util.db.get_column_names_str_table", false]], "get_component() (co3.schema method)": [[32, "co3.Schema.get_component", false]], "get_component() (co3.schema.schema method)": [[25, "co3.schema.Schema.get_component", false]], "get_engine() (in module co3.util.db)": [[28, "co3.util.db.get_engine", false]], "group_by() (co3.indexer class method)": [[32, "co3.Indexer.group_by", false]], "group_by() (co3.indexer.cacheblock method)": [[17, "co3.indexer.CacheBlock.group_by", false]], "group_by() (co3.indexer.indexer class method)": [[17, "co3.indexer.Indexer.group_by", false]], "group_registry (co3.co3 attribute)": [[32, "co3.CO3.group_registry", false]], "group_registry (co3.co3.co3 attribute)": [[6, "co3.co3.CO3.group_registry", false]], "index (co3.database property)": [[32, "co3.Database.index", false]], "index (co3.database.database property)": [[10, "co3.database.Database.index", false]], "indexer (class in co3)": [[32, "co3.Indexer", false], [39, "co3.Indexer", false]], "indexer (class in co3.indexer)": [[17, "co3.indexer.Indexer", false]], "insert() (co3.database method)": [[32, "co3.Database.insert", false]], "insert() (co3.database.database method)": [[10, "co3.database.Database.insert", false]], "insert() (co3.manager method)": [[32, "co3.Manager.insert", false]], "insert() (co3.manager.manager method)": [[18, "co3.manager.Manager.insert", false]], "insert() (co3.managers.sql.sqlmanager method)": [[21, "co3.managers.sql.SQLManager.insert", false]], "insert_many() (co3.managers.sql.sqlmanager method)": [[21, "co3.managers.sql.SQLManager.insert_many", false]], "inserts (co3.collector property)": [[32, "co3.Collector.inserts", false]], "inserts (co3.collector.collector property)": [[7, "co3.collector.Collector.inserts", false]], "limit() (co3.indexer.cacheblock method)": [[17, "co3.indexer.CacheBlock.limit", false]], "manage (co3.database property)": [[32, "co3.Database.manage", false]], "manage (co3.database.database property)": [[10, "co3.database.Database.manage", false]], "manager (class in co3)": [[32, "co3.Manager", false], [40, "co3.Manager", false]], "manager (class in co3.manager)": [[18, "co3.manager.Manager", false]], "manager (co3.databases.fts.ftsdatabase attribute)": [[12, "co3.databases.fts.FTSDatabase.manager", false]], "manager (co3.databases.vss.vssdatabase attribute)": [[14, "co3.databases.vss.VSSDatabase.manager", false]], "manager (co3.engine property)": [[32, "co3.Engine.manager", false]], "manager (co3.engine.engine property)": [[15, "co3.engine.Engine.manager", false]], "mapper (class in co3)": [[32, "co3.Mapper", false], [41, "co3.Mapper", false]], "mapper (class in co3.mapper)": [[23, "co3.mapper.Mapper", false]], "migrate() (co3.manager method)": [[32, "co3.Manager.migrate", false]], "migrate() (co3.manager.manager method)": [[18, "co3.manager.Manager.migrate", false]], "migrate() (co3.managers.fts.ftsmanager method)": [[20, "co3.managers.fts.FTSManager.migrate", false]], "migrate() (co3.managers.sql.sqlmanager method)": [[21, "co3.managers.sql.SQLManager.migrate", false]], "migrate() (co3.managers.vss.vssmanager method)": [[22, "co3.managers.vss.VSSManager.migrate", false]], "model (co3.accessors.vss.vssaccessor property)": [[5, "co3.accessors.vss.VSSAccessor.model", false]], "module": [[0, "module-co3", false], [1, "module-co3.accessor", false], [2, "module-co3.accessors", false], [3, "module-co3.accessors.fts", false], [4, "module-co3.accessors.sql", false], [5, "module-co3.accessors.vss", false], [6, "module-co3.co3", false], [7, "module-co3.collector", false], [8, "module-co3.component", false], [9, "module-co3.components", false], [10, "module-co3.database", false], [11, "module-co3.databases", false], [12, "module-co3.databases.fts", false], [13, "module-co3.databases.sql", false], [14, "module-co3.databases.vss", false], [15, "module-co3.engine", false], [16, "module-co3.engines", false], [17, "module-co3.indexer", false], [18, "module-co3.manager", false], [19, "module-co3.managers", false], [20, "module-co3.managers.fts", false], [21, "module-co3.managers.sql", false], [22, "module-co3.managers.vss", false], [23, "module-co3.mapper", false], [25, "module-co3.schema", false], [26, "module-co3.schemas", false], [27, "module-co3.util", false], [28, "module-co3.util.db", false], [29, "module-co3.util.regex", false], [30, "module-co3.util.types", false], [32, "module-co3", false]], "named_results() (in module co3.util.db)": [[28, "co3.util.db.named_results", false]], "node (class in co3.components)": [[9, "co3.components.Node", false]], "order_by() (co3.indexer.cacheblock method)": [[17, "co3.indexer.CacheBlock.order_by", false]], "populate_fts5() (in module co3.util.db)": [[28, "co3.util.db.populate_fts5", false]], "populate_indexes() (co3.database method)": [[32, "co3.Database.populate_indexes", false]], "populate_indexes() (co3.database.database method)": [[10, "co3.database.Database.populate_indexes", false]], "prepare_insert_data() (co3.components.sqltable method)": [[9, "co3.components.SQLTable.prepare_insert_data", false]], "raw_select() (co3.accessor method)": [[32, "co3.Accessor.raw_select", false]], "raw_select() (co3.accessor.accessor method)": [[1, "co3.accessor.Accessor.raw_select", false]], "raw_select() (co3.accessors.sql.relationalaccessor method)": [[4, "co3.accessors.sql.RelationalAccessor.raw_select", false]], "raw_select() (co3.accessors.sql.sqlaccessor method)": [[4, "co3.accessors.sql.SQLAccessor.raw_select", false]], "read_embeddings() (co3.accessors.vss.vssaccessor method)": [[5, "co3.accessors.vss.VSSAccessor.read_embeddings", false]], "recreate() (co3.database method)": [[32, "co3.Database.recreate", false]], "recreate() (co3.database.database method)": [[10, "co3.database.Database.recreate", false]], "recreate() (co3.manager method)": [[32, "co3.Manager.recreate", false]], "recreate() (co3.manager.manager method)": [[18, "co3.manager.Manager.recreate", false]], "recreate() (co3.managers.fts.ftsmanager method)": [[20, "co3.managers.fts.FTSManager.recreate", false]], "recreate() (co3.managers.sql.sqlmanager method)": [[21, "co3.managers.sql.SQLManager.recreate", false]], "recreate() (co3.managers.vss.vssmanager method)": [[22, "co3.managers.vss.VSSManager.recreate", false]], "recreate_old() (in module co3.managers.fts)": [[20, "co3.managers.fts.recreate_old", false]], "recreate_pivot() (co3.managers.fts.ftsmanager method)": [[20, "co3.managers.fts.FTSManager.recreate_pivot", false]], "recreate_simple() (co3.managers.fts.ftsmanager method)": [[20, "co3.managers.fts.FTSManager.recreate_simple", false]], "relation (class in co3.components)": [[9, "co3.components.Relation", false]], "relationalaccessor (class in co3.accessors.sql)": [[4, "co3.accessors.sql.RelationalAccessor", false]], "relationaldatabase (class in co3.databases.sql)": [[13, "co3.databases.sql.RelationalDatabase", false]], "relationalmanager (class in co3.managers.sql)": [[21, "co3.managers.sql.RelationalManager", false]], "relationalschema (class in co3.schemas)": [[26, "co3.schemas.RelationalSchema", false]], "result_dicts() (co3.accessors.sql.sqlaccessor static method)": [[4, "co3.accessors.sql.SQLAccessor.result_dicts", false]], "router (co3.managers.sql.sqlmanager property)": [[21, "co3.managers.sql.SQLManager.router", false]], "schema (class in co3)": [[32, "co3.Schema", false], [42, "co3.Schema", false]], "schema (class in co3.schema)": [[25, "co3.schema.Schema", false]], "search() (co3.accessors.fts.ftsaccessor method)": [[3, "co3.accessors.fts.FTSAccessor.search", false]], "search() (co3.accessors.vss.vssaccessor method)": [[5, "co3.accessors.vss.VSSAccessor.search", false]], "select() (co3.accessor method)": [[32, "co3.Accessor.select", false]], "select() (co3.accessor.accessor method)": [[1, "co3.accessor.Accessor.select", false]], "select() (co3.accessors.sql.relationalaccessor method)": [[4, "co3.accessors.sql.RelationalAccessor.select", false]], "select() (co3.accessors.sql.sqlaccessor method)": [[4, "co3.accessors.sql.SQLAccessor.select", false]], "select() (co3.database method)": [[32, "co3.Database.select", false]], "select() (co3.database.database method)": [[10, "co3.database.Database.select", false]], "select_one() (co3.accessors.sql.relationalaccessor method)": [[4, "co3.accessors.sql.RelationalAccessor.select_one", false]], "sqlaccessor (class in co3.accessors.sql)": [[4, "co3.accessors.sql.SQLAccessor", false]], "sqldatabase (class in co3.databases.sql)": [[13, "co3.databases.sql.SQLDatabase", false]], "sqlengine (class in co3.engines)": [[16, "co3.engines.SQLEngine", false]], "sqlitedatabase (class in co3.databases.sql)": [[13, "co3.databases.sql.SQLiteDatabase", false]], "sqlmanager (class in co3.managers.sql)": [[21, "co3.managers.sql.SQLManager", false]], "sqlschema (class in co3.schemas)": [[26, "co3.schemas.SQLSchema", false]], "sqltable (class in co3.components)": [[9, "co3.components.SQLTable", false]], "sync() (co3.manager method)": [[32, "co3.Manager.sync", false]], "sync() (co3.manager.manager method)": [[18, "co3.manager.Manager.sync", false]], "sync() (co3.managers.fts.ftsmanager method)": [[20, "co3.managers.fts.FTSManager.sync", false]], "sync() (co3.managers.sql.sqlmanager method)": [[21, "co3.managers.sql.SQLManager.sync", false]], "sync() (co3.managers.vss.vssmanager method)": [[22, "co3.managers.vss.VSSManager.sync", false]], "update() (co3.managers.fts.ftsmanager method)": [[20, "co3.managers.fts.FTSManager.update", false]], "update() (co3.managers.sql.sqlmanager method)": [[21, "co3.managers.sql.SQLManager.update", false]], "update() (co3.managers.vss.vssmanager method)": [[22, "co3.managers.vss.VSSManager.update", false]], "vssaccessor (class in co3.accessors.vss)": [[5, "co3.accessors.vss.VSSAccessor", false]], "vssdatabase (class in co3.databases.vss)": [[14, "co3.databases.vss.VSSDatabase", false]], "vssmanager (class in co3.managers.vss)": [[22, "co3.managers.vss.VSSManager", false]], "where() (co3.indexer.cacheblock method)": [[17, "co3.indexer.CacheBlock.where", false]], "write_embeddings() (co3.accessors.vss.vssaccessor method)": [[5, "co3.accessors.vss.VSSAccessor.write_embeddings", false]]}, "objects": {"": [[32, 0, 0, "-", "co3"]], "co3": [[33, 1, 1, "", "Accessor"], [34, 1, 1, "", "CO3"], [35, 1, 1, "", "Collector"], [36, 1, 1, "", "Component"], [32, 1, 1, "", "ComposableMapper"], [37, 1, 1, "", "Database"], [38, 1, 1, "", "Engine"], [39, 1, 1, "", "Indexer"], [40, 1, 1, "", "Manager"], [41, 1, 1, "", "Mapper"], [42, 1, 1, "", "Schema"], [1, 0, 0, "-", "accessor"], [2, 0, 0, "-", "accessors"], [6, 0, 0, "-", "co3"], [32, 5, 1, "", "collate"], [7, 0, 0, "-", "collector"], [8, 0, 0, "-", "component"], [9, 0, 0, "-", "components"], [10, 0, 0, "-", "database"], [11, 0, 0, "-", "databases"], [15, 0, 0, "-", "engine"], [16, 0, 0, "-", "engines"], [17, 0, 0, "-", "indexer"], [18, 0, 0, "-", "manager"], [19, 0, 0, "-", "managers"], [23, 0, 0, "-", "mapper"], [25, 0, 0, "-", "schema"], [26, 0, 0, "-", "schemas"], [27, 0, 0, "-", "util"]], "co3.Accessor": [[33, 2, 1, "", "__init__"], [32, 2, 1, "", "raw_select"], [32, 2, 1, "", "select"]], "co3.CO3": [[34, 2, 1, "", "__init__"], [32, 3, 1, "", "action_registry"], [32, 4, 1, "", "attributes"], [32, 2, 1, "", "collate"], [32, 2, 1, "", "collation_attributes"], [32, 4, 1, "", "components"], [32, 3, 1, "", "group_registry"]], "co3.Collector": [[35, 2, 1, "", "__init__"], [32, 2, 1, "", "add_insert"], [32, 2, 1, "", "collect_inserts"], [32, 4, 1, "", "inserts"]], "co3.Component": [[36, 2, 1, "", "__init__"], [32, 2, 1, "", "get_attributes"]], "co3.ComposableMapper": [[32, 2, 1, "", "compose"]], "co3.Database": [[37, 2, 1, "", "__init__"], [32, 4, 1, "", "index"], [32, 2, 1, "", "insert"], [32, 4, 1, "", "manage"], [32, 2, 1, "", "populate_indexes"], [32, 2, 1, "", "recreate"], [32, 2, 1, "", "select"]], "co3.Engine": [[38, 2, 1, "", "__init__"], [32, 2, 1, "", "connect"], [32, 4, 1, "", "manager"]], "co3.Indexer": [[39, 2, 1, "", "__init__"], [32, 2, 1, "", "cache_block"], [32, 2, 1, "", "cache_clear"], [32, 2, 1, "", "cached_query"], [32, 2, 1, "", "group_by"]], "co3.Manager": [[40, 2, 1, "", "__init__"], [32, 2, 1, "", "insert"], [32, 2, 1, "", "migrate"], [32, 2, 1, "", "recreate"], [32, 2, 1, "", "sync"]], "co3.Mapper": [[41, 2, 1, "", "__init__"], [32, 2, 1, "", "attach"], [32, 2, 1, "", "attach_many"], [32, 2, 1, "", "collect"], [32, 2, 1, "", "get_attr_comp"], [32, 2, 1, "", "get_coll_comp"]], "co3.Schema": [[42, 2, 1, "", "__init__"], [32, 2, 1, "", "add_component"], [32, 2, 1, "", "get_component"]], "co3.accessor": [[1, 1, 1, "", "Accessor"]], "co3.accessor.Accessor": [[1, 2, 1, "", "raw_select"], [1, 2, 1, "", "select"]], "co3.accessors": [[3, 0, 0, "-", "fts"], [4, 0, 0, "-", "sql"], [5, 0, 0, "-", "vss"]], "co3.accessors.fts": [[3, 1, 1, "", "FTSAccessor"]], "co3.accessors.fts.FTSAccessor": [[3, 2, 1, "", "search"]], "co3.accessors.sql": [[4, 1, 1, "", "RelationalAccessor"], [4, 1, 1, "", "SQLAccessor"]], "co3.accessors.sql.RelationalAccessor": [[4, 2, 1, "", "raw_select"], [4, 2, 1, "", "select"], [4, 2, 1, "", "select_one"]], "co3.accessors.sql.SQLAccessor": [[4, 2, 1, "", "raw_select"], [4, 2, 1, "", "result_dicts"], [4, 2, 1, "", "select"]], "co3.accessors.vss": [[5, 1, 1, "", "VSSAccessor"]], "co3.accessors.vss.VSSAccessor": [[5, 2, 1, "", "embed_chunks"], [5, 4, 1, "", "embeddings"], [5, 4, 1, "", "model"], [5, 2, 1, "", "read_embeddings"], [5, 2, 1, "", "search"], [5, 2, 1, "", "write_embeddings"]], "co3.co3": [[6, 1, 1, "", "CO3"], [6, 1, 1, "", "FormatRegistryMeta"], [6, 5, 1, "", "collate"]], "co3.co3.CO3": [[6, 3, 1, "", "action_registry"], [6, 4, 1, "", "attributes"], [6, 2, 1, "", "collate"], [6, 2, 1, "", "collation_attributes"], [6, 4, 1, "", "components"], [6, 3, 1, "", "group_registry"]], "co3.collector": [[7, 1, 1, "", "Collector"]], "co3.collector.Collector": [[7, 2, 1, "", "add_insert"], [7, 2, 1, "", "collect_inserts"], [7, 4, 1, "", "inserts"]], "co3.component": [[8, 1, 1, "", "Component"]], "co3.component.Component": [[8, 2, 1, "", "get_attributes"]], "co3.components": [[9, 1, 1, "", "ComposableComponent"], [9, 1, 1, "", "Dictionary"], [9, 1, 1, "", "Document"], [9, 1, 1, "", "Node"], [9, 1, 1, "", "Relation"], [9, 1, 1, "", "SQLTable"]], "co3.components.ComposableComponent": [[9, 2, 1, "", "compose"]], "co3.components.Dictionary": [[9, 2, 1, "", "get_attributes"]], "co3.components.Relation": [[9, 2, 1, "", "compose"]], "co3.components.SQLTable": [[9, 2, 1, "", "compose"], [9, 2, 1, "", "from_table"], [9, 2, 1, "", "get_attributes"], [9, 2, 1, "", "get_column_defaults"], [9, 2, 1, "", "prepare_insert_data"]], "co3.database": [[10, 1, 1, "", "Database"]], "co3.database.Database": [[10, 4, 1, "", "index"], [10, 2, 1, "", "insert"], [10, 4, 1, "", "manage"], [10, 2, 1, "", "populate_indexes"], [10, 2, 1, "", "recreate"], [10, 2, 1, "", "select"]], "co3.databases": [[12, 0, 0, "-", "fts"], [13, 0, 0, "-", "sql"], [14, 0, 0, "-", "vss"]], "co3.databases.fts": [[12, 1, 1, "", "FTSDatabase"]], "co3.databases.fts.FTSDatabase": [[12, 3, 1, "", "accessor"], [12, 3, 1, "", "manager"]], "co3.databases.sql": [[13, 1, 1, "", "RelationalDatabase"], [13, 1, 1, "", "SQLDatabase"], [13, 1, 1, "", "SQLiteDatabase"]], "co3.databases.vss": [[14, 1, 1, "", "VSSDatabase"]], "co3.databases.vss.VSSDatabase": [[14, 3, 1, "", "accessor"], [14, 3, 1, "", "manager"]], "co3.engine": [[15, 1, 1, "", "Engine"]], "co3.engine.Engine": [[15, 2, 1, "", "connect"], [15, 4, 1, "", "manager"]], "co3.engines": [[16, 1, 1, "", "SQLEngine"]], "co3.engines.SQLEngine": [[16, 2, 1, "", "connect"], [16, 2, 1, "", "exec_explicit"], [16, 2, 1, "", "execute"]], "co3.indexer": [[17, 1, 1, "", "CacheBlock"], [17, 1, 1, "", "Indexer"]], "co3.indexer.CacheBlock": [[17, 2, 1, "", "distinct_on"], [17, 2, 1, "", "group_by"], [17, 2, 1, "", "limit"], [17, 2, 1, "", "order_by"], [17, 2, 1, "", "where"]], "co3.indexer.Indexer": [[17, 2, 1, "", "cache_block"], [17, 2, 1, "", "cache_clear"], [17, 2, 1, "", "cached_query"], [17, 2, 1, "", "group_by"]], "co3.manager": [[18, 1, 1, "", "Manager"]], "co3.manager.Manager": [[18, 2, 1, "", "insert"], [18, 2, 1, "", "migrate"], [18, 2, 1, "", "recreate"], [18, 2, 1, "", "sync"]], "co3.managers": [[20, 0, 0, "-", "fts"], [21, 0, 0, "-", "sql"], [22, 0, 0, "-", "vss"]], "co3.managers.fts": [[20, 1, 1, "", "FTSManager"], [20, 5, 1, "", "recreate_old"]], "co3.managers.fts.FTSManager": [[20, 2, 1, "", "migrate"], [20, 2, 1, "", "recreate"], [20, 2, 1, "", "recreate_pivot"], [20, 2, 1, "", "recreate_simple"], [20, 2, 1, "", "sync"], [20, 2, 1, "", "update"]], "co3.managers.sql": [[21, 1, 1, "", "RelationalManager"], [21, 1, 1, "", "SQLManager"]], "co3.managers.sql.SQLManager": [[21, 2, 1, "", "add_router"], [21, 2, 1, "", "insert"], [21, 2, 1, "", "insert_many"], [21, 2, 1, "", "migrate"], [21, 2, 1, "", "recreate"], [21, 4, 1, "", "router"], [21, 2, 1, "", "sync"], [21, 2, 1, "", "update"]], "co3.managers.vss": [[22, 1, 1, "", "VSSManager"]], "co3.managers.vss.VSSManager": [[22, 2, 1, "", "migrate"], [22, 2, 1, "", "recreate"], [22, 2, 1, "", "sync"], [22, 2, 1, "", "update"]], "co3.mapper": [[23, 1, 1, "", "ComposableMapper"], [23, 1, 1, "", "Mapper"]], "co3.mapper.ComposableMapper": [[23, 2, 1, "", "compose"]], "co3.mapper.Mapper": [[23, 2, 1, "", "attach"], [23, 2, 1, "", "attach_many"], [23, 2, 1, "", "collect"], [23, 2, 1, "", "get_attr_comp"], [23, 2, 1, "", "get_coll_comp"]], "co3.schema": [[25, 1, 1, "", "Schema"]], "co3.schema.Schema": [[25, 2, 1, "", "add_component"], [25, 2, 1, "", "get_component"]], "co3.schemas": [[26, 1, 1, "", "RelationalSchema"], [26, 1, 1, "", "SQLSchema"]], "co3.schemas.SQLSchema": [[26, 2, 1, "", "from_metadata"]], "co3.util": [[28, 0, 0, "-", "db"], [29, 0, 0, "-", "regex"], [30, 0, 0, "-", "types"]], "co3.util.db": [[28, 5, 1, "", "create_fts5"], [28, 5, 1, "", "create_vss0"], [28, 5, 1, "", "deferred_cd_fkey"], [28, 5, 1, "", "deferred_fkey"], [28, 5, 1, "", "fts5_prep_composite"], [28, 5, 1, "", "get_column_names_str_table"], [28, 5, 1, "", "get_engine"], [28, 5, 1, "", "named_results"], [28, 5, 1, "", "populate_fts5"]], "co3.util.regex": [[29, 5, 1, "", "camel_to_snake"]]}, "objnames": {"0": ["py", "module", "Python module"], "1": ["py", "class", "Python class"], "2": ["py", "method", "Python method"], "3": ["py", "attribute", "Python attribute"], "4": ["py", "property", "Python property"], "5": ["py", "function", "Python function"]}, "objtypes": {"0": "py:module", "1": "py:class", "2": "py:method", "3": "py:attribute", "4": "py:property", "5": "py:function"}, "terms": {"": [0, 3, 4, 6, 7, 9, 10, 13, 15, 17, 21, 23, 28, 32, 37, 39, 41, 45], "0": [3, 4, 5, 17, 21, 32], "1": [3, 4, 9, 15, 32, 38, 45], "10": 5, "100": 3, "1000": 21, "2": [3, 4, 21, 45], "384": 28, "5": 5, "64": [3, 5], "A": [17, 18, 23, 32, 40, 45], "AND": 21, "As": [9, 23], "At": [0, 32], "BY": [3, 17, 32], "But": [4, 9], "By": 45, "For": [0, 2, 4, 10, 17, 21, 23, 32, 45], "IF": 21, "IN": 3, "If": [4, 15, 23, 32, 38, 45], "In": [0, 6, 15, 21, 23, 25, 32, 34, 38, 45], "It": [0, 4, 6, 7, 15, 17, 21, 23, 28, 32, 38, 41], "No": 21, "OR": 17, "One": [4, 23, 32], "Such": [23, 32], "That": [15, 17, 23, 32, 38], "The": [0, 2, 3, 6, 7, 9, 10, 15, 17, 18, 21, 23, 32, 37, 38, 40, 41, 43, 45], "There": [21, 43], "These": [10, 23, 28, 32, 45], "To": [17, 32], "With": [23, 32], "_": [3, 45], "__init__": [0, 4, 10, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42], "_across_": [23, 32], "_autoref": 45, "_base": [0, 32], "_build": 45, "_conversion_matt": 7, "_could_": [0, 32], "_horiztonally_": [23, 32], "_inside_": 21, "_instance_": 13, "_local_cach": 37, "_not_": [6, 28, 32, 34, 37], "_only_": 2, "_outside_": [21, 23, 32], "_outward_": [23, 32], "_this_": [15, 32, 38], "_vertically_": [23, 32], "_why_": [23, 32], "_with": 9, "abl": [3, 9], "about": [21, 23, 32], "abov": [4, 10, 21, 23, 32], "abstract": [1, 6, 7, 8, 9, 10, 15, 18, 21, 32, 37, 38, 43], "accept": 4, "access": [0, 1, 2, 4, 10, 17, 32, 33, 39, 43], "accessor": [0, 7, 10, 11, 12, 13, 14, 17, 31, 32, 37, 39, 43], "accommod": [7, 32], "accord": [7, 9, 32, 45], "accur": [10, 32, 37], "across": [0, 6, 7, 15, 17, 18, 23, 32, 34, 38, 40, 45], "action": [2, 6, 10, 15, 16, 23, 32, 34, 37], "action_arg": [6, 32], "action_group": [6, 23, 32], "action_kei": [6, 23, 32], "action_kwarg": [6, 32], "action_registri": [0, 6, 32], "actual": [0, 17, 21, 23, 32, 41, 45], "ad": [21, 23, 32, 37, 45], "add": [17, 32, 45], "add_compon": [0, 25, 32], "add_insert": [0, 7, 32], "add_rout": [19, 21], "addit": [23, 32], "addition": [0, 10, 23, 32, 37, 41], "address": [10, 17, 32, 37, 43], "adher": 9, "adopt": [10, 32], "advanc": 45, "aesthet": [23, 32], "afterward": [17, 32], "against": [3, 4, 10, 32, 37], "agg_col": [3, 17, 32], "agg_on": [17, 32], "aggreg": [4, 7, 17, 32], "aid": [23, 32], "algebra": 9, "alia": [12, 14], "alias": 4, "align": [10, 21, 32, 37], "all": [0, 3, 7, 9, 10, 15, 17, 21, 23, 32, 38, 45], "allow": [10, 15, 16, 17, 21, 23, 32, 37, 45], "almost": [3, 21], "along": [0, 3, 32], "alongsid": [6, 17, 32], "also": [4, 6, 9, 10, 17, 18, 21, 23, 28, 32, 34, 40, 45], "although": [15, 17, 23, 32, 38], "altogeth": [17, 23, 32, 41], "alwai": [21, 23, 32], "ambigu": [17, 32], "among": [0, 32], "amount": [3, 23, 32], "an": [0, 1, 2, 3, 6, 7, 10, 15, 16, 17, 18, 21, 23, 25, 28, 32, 37, 38, 39, 41, 43, 45], "analog": 9, "analogi": [23, 32], "analysi": 3, "ani": [3, 4, 7, 9, 10, 15, 21, 23, 28, 32, 37, 38], "anoth": [15, 23, 32, 38], "answer": [15, 32, 38], "apidoc": 45, "appear": [15, 23, 32, 38], "append": [7, 32], "appli": [3, 10, 32, 37], "approach": [21, 23, 32], "appropri": [0, 23, 32, 41, 43], "aptli": [23, 32], "ar": [0, 2, 3, 4, 6, 7, 9, 17, 18, 21, 23, 25, 32, 34, 37, 40, 41, 43, 45], "arbitrari": [10, 23, 32, 41], "aren": [9, 17, 21, 32], "arg": [1, 10, 15, 18, 21, 32, 38], "argument": [4, 6, 32, 37], "around": [0, 2, 7, 18, 32, 40], "arrai": 3, "asid": [0, 32], "ask": [23, 32], "aspect": [23, 32], "assign": [10, 13, 32, 37], "associ": [0, 3, 4, 6, 16, 17, 23, 25, 32, 34, 43], "assum": 3, "attach": [0, 6, 10, 15, 21, 23, 32, 34, 37, 38, 41], "attach_mani": [0, 23, 32], "attempt": [9, 10, 23, 32, 37], "attr": [6, 23, 32], "attr_comp": [23, 32], "attr_compose_map": [23, 32], "attr_name_map": [23, 32], "attribut": [0, 4, 6, 7, 9, 10, 23, 32, 34, 35, 37, 38], "augment": [6, 32, 34], "auto": [23, 32, 45], "automat": [4, 21, 23, 28, 32, 45], "autoref": 45, "auxiliari": [6, 32, 34], "avail": [2, 3, 4, 9, 15, 17, 21, 32, 38, 39, 45], "avoid": [10, 23, 32], "awai": [0, 7, 10, 17, 21, 32, 37], "awar": [23, 32], "awkward": [23, 32], "b": 21, "back": [17, 32], "backend": [4, 21], "barebon": [23, 32], "base": [0, 1, 3, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14, 15, 16, 17, 18, 20, 21, 22, 23, 25, 26, 32, 33, 34, 37, 38, 41, 43, 45], "basi": 21, "basic": 43, "batch": 21, "batch_siz": 5, "becam": [17, 32], "becom": [6, 10, 32, 34], "been": [3, 21, 23, 32], "befor": [3, 10, 17, 21, 32, 37], "behav": 17, "behavior": [0, 10, 17, 21, 32], "being": [0, 2, 4, 13, 15, 17, 23, 32, 38], "belong": [10, 32, 37], "best": [17, 32], "better": [17, 32], "between": [15, 23, 32, 38, 41, 43], "bind": 16, "bind_param": [4, 16], "bit": [10, 23, 32, 37], "block": [3, 5, 17, 32, 45], "block_convers": [17, 32], "blueprint": 4, "bodi": 9, "bone": [23, 32], "bool": 4, "both": [0, 4, 7, 10, 17, 23, 32, 37], "bottom": 45, "bring": 21, "broadcast": 17, "broadli": [10, 32, 37], "broken": [0, 7, 32], "build": [17, 21], "built": 3, "bulb": [23, 32], "bulk": [10, 21, 28, 32, 37], "bundl": [17, 21, 32], "bys": [17, 32, 39], "c": [1, 7, 10, 13, 17, 18, 21, 23, 25, 32, 37, 41], "cach": [10, 17, 32, 37, 39, 43], "cache_block": [0, 17, 32], "cache_clear": [0, 17, 32], "cache_groupbi": [17, 32, 39], "cache_path": 5, "cache_select": [17, 32, 39], "cacheblock": [0, 17, 31, 37], "cached_group_bi": [17, 32], "cached_queri": [0, 17, 32], "cached_select": [17, 32], "call": [6, 7, 15, 17, 21, 23, 25, 32, 34, 41, 45], "callabl": [10, 23, 32], "caller": [17, 23, 32], "camel_to_snak": [0, 27, 29], "can": [0, 2, 4, 6, 8, 9, 10, 15, 17, 21, 23, 25, 28, 32, 34, 37, 38, 41, 45], "cannot": [3, 10, 21, 32, 37], "canon": [6, 7, 17, 23, 32], "capabl": 3, "caption": 45, "cascad": [21, 28], "case": [0, 3, 4, 6, 10, 15, 32, 34, 37, 38], "caus": [17, 32], "cb": 17, "center": [18, 32, 40], "central": 10, "certain": [4, 23, 32], "chain": [17, 23, 32], "chang": [4, 7, 18, 23, 32, 45], "character": [23, 32], "check": [3, 4, 7, 17, 21, 23, 32, 37, 41], "check_tabl": 4, "children": [0, 23, 32], "choos": [0, 32], "chunk": [5, 21], "chunk_size_cap": 21, "chunk_tim": 21, "circl": [23, 32], "clash": [0, 10, 32, 37], "class": [0, 1, 3, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14, 15, 16, 17, 18, 20, 21, 22, 23, 25, 26, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43], "classmethod": [9, 17, 26, 32], "claus": 3, "clear": [10, 17, 23, 32, 39], "clearli": [23, 32], "cli": 45, "click": 45, "client": 3, "close": 45, "clutter": [0, 32], "co3": 46, "co3_ref": [23, 32], "co4": [6, 23], "code": 45, "col": [3, 4, 17, 28, 32], "col_1": 4, "coll_comp": [23, 32], "coll_compose_map": [23, 32], "coll_group": [23, 32], "coll_name_map": [23, 32], "collat": [0, 6, 23, 31, 32, 34, 46], "collatet": 23, "collation_attribut": [0, 6, 32], "collect": [0, 6, 7, 9, 21, 23, 25, 32, 34, 41, 43], "collect_insert": [0, 7, 32], "collector": [0, 6, 21, 23, 31, 32, 41, 43], "collis": [10, 32, 37], "colq": 3, "column": [3, 4, 7, 9, 16, 17, 21, 23, 28, 32], "command": 45, "commit": 21, "common": [1, 6, 7, 17, 18, 21, 23, 32, 33, 40, 43, 45], "commonli": 9, "commun": [23, 32], "comp": [23, 32], "compar": [3, 9, 23, 32], "complet": [6, 10, 32, 37], "complex": [1, 17, 23, 32, 33], "compliant": 28, "compon": [0, 1, 4, 6, 7, 10, 18, 21, 23, 25, 31, 32, 34, 37, 41, 43], "compos": [0, 1, 2, 4, 6, 9, 17, 23, 32, 33, 34, 39, 41, 43], "composablecompon": [0, 9, 31], "composablemapp": [0, 23, 31, 32], "compose_arg": [23, 32], "compose_kwarg": [23, 32], "composeablecompon": 9, "composit": [0, 9, 10, 15, 23, 28, 32, 37, 38], "compound": 28, "comput": [6, 21, 32, 34], "conceiv": [15, 32, 38], "concern": [0, 10, 32, 37], "concret": [0, 7, 32], "condit": [17, 23, 32], "conf": 45, "config": [1, 32, 33, 45], "configur": 45, "confin": [0, 32], "conflict": 21, "conform": 3, "congest": [17, 32], "conn": 21, "connect": [0, 1, 4, 6, 7, 10, 15, 16, 18, 21, 23, 25, 28, 32, 38, 40, 43], "consid": [4, 23, 32, 41], "consist": [0, 32], "constitu": [6, 10, 32, 43, 45], "constitut": [15, 16, 32], "constrain": [1, 23, 32, 33], "constraint": [3, 21], "construct": [3, 6, 23, 32, 34], "contain": [0, 8, 9, 28, 32], "content": [3, 45], "context": [4, 8, 9, 10, 15, 16, 17, 25, 32], "continu": 21, "contrast": [0, 32], "control": [10, 17], "conveni": [0, 1, 23, 32], "convers": [6, 7, 17, 21, 32, 34, 43], "convert": [4, 7, 17, 21, 28, 32], "coordin": [18, 21, 23, 32, 40], "core": [0, 2, 6, 7, 21, 32, 34], "coreaccessor": [0, 32], "coredatabas": [17, 32], "correspond": [2, 28], "could": [1, 2, 4, 10, 15, 17, 21, 23, 32, 38, 41], "counterpart": [0, 18, 32, 40], "cours": [23, 32], "creat": [0, 3, 17, 25, 28, 32, 45], "create_fts5": [0, 27, 28], "create_vss0": [0, 27, 28], "creation": [15, 28, 32, 38], "critic": [6, 7, 32, 34], "current": [3, 4, 7, 45], "cursorresult": [4, 28], "d": [4, 15, 32, 38], "danger": 21, "data": [6, 7, 8, 10, 23, 25, 28, 32, 34, 41, 43], "databas": [0, 6, 7, 8, 15, 16, 17, 18, 20, 22, 23, 25, 28, 31, 32, 38, 39, 41, 43], "date": [7, 21, 32], "daunt": 17, "db": [0, 2, 6, 7, 9, 10, 17, 21, 23, 27, 32, 34, 37], "db_path": 28, "debat": [23, 32], "decid": [10, 32, 37], "decis": [23, 32], "dedic": [4, 23, 32], "deeper": [0, 32], "def": 4, "default": [3, 9, 15, 23, 28, 32, 38, 45], "defer": 21, "deferred_cd_fkei": [0, 27, 28], "deferred_fkei": [0, 27, 28], "defin": [0, 2, 4, 6, 7, 9, 10, 15, 17, 32, 38], "definit": [0, 7, 10, 15, 23, 32, 37, 38], "delet": [21, 28], "depend": [6, 10, 15, 21, 32, 37, 38], "deploy": 17, "deprec": [4, 23, 32], "depth": 45, "deriv": [10, 15, 32, 38], "desc": [4, 17, 32], "descend": 4, "describ": 45, "descript": [43, 45], "design": [2, 4, 23, 32], "desir": [2, 17, 32], "despit": 7, "detail": [17, 23, 32], "determin": 21, "dev": [9, 10, 15, 23, 32, 38, 41], "develop": [4, 9, 10, 23, 32, 37], "dict": [3, 4, 7, 9, 17, 21, 23, 32], "dictat": [7, 32], "dictionari": [0, 3, 4, 7, 9, 21, 28, 31, 32], "did": [0, 32], "differ": [2, 4, 17, 23, 32], "difficult": [4, 45], "dim": [17, 32], "dimens": [2, 7], "dir": 45, "direct": [0, 32, 45], "directli": [10, 23, 28, 32, 37, 41, 45], "directori": [0, 32], "discoveri": [23, 32], "dissolv": [23, 32, 41], "distinct": [4, 17, 32], "distinct_on": [0, 4, 17, 32], "do": [6, 17, 21, 23, 32, 34], "doc": 45, "docstr": 45, "document": [0, 6, 9, 31, 43, 45], "doe": [7, 21], "doesn": [0, 2, 21, 25, 32], "domain": 9, "don": [0, 3, 10, 21, 23, 32, 37], "done": 4, "doubl": [17, 32], "down": [3, 7, 21, 23, 32], "downstream": [17, 23, 32], "driver": 45, "drop": [23, 32, 41], "dropdown": 45, "dry": [15, 21, 32, 38], "due": [10, 32], "dure": [21, 23, 28, 37], "duti": [6, 32, 34], "dynam": [1, 17, 21, 32, 33], "e": [0, 3, 6, 7, 10, 15, 16, 17, 23, 28, 32, 37, 38, 43], "each": [0, 3, 17, 21, 23, 32], "easi": [1, 6, 32, 33, 34, 43], "easier": [15, 23, 32, 38], "easili": [17, 32], "echo": 28, "edg": [23, 32], "effect": [7, 17, 23, 32], "effici": [17, 32, 39], "either": [2, 4, 17, 23, 28, 32], "elig": 41, "elsewher": [7, 32], "embed": [2, 5], "embed_chunk": [2, 5], "embedding_dict": 5, "embedding_s": 28, "embrac": [7, 32], "emphasi": 25, "emploi": [17, 32], "en": 9, "enabl": [17, 21, 28, 32, 39, 45], "encourag": [23, 32], "endpoint": 17, "engin": [0, 1, 10, 18, 20, 21, 22, 28, 31, 32, 33, 37, 43], "engine_arg": [10, 12, 13, 14, 32, 37], "engine_kwarg": [10, 12, 13, 14, 32, 37], "enough": [23, 32], "ensur": [6, 7, 17, 32, 34], "enter": 4, "entir": [0, 25, 32], "entiti": [8, 17], "entri": [0, 7, 32], "equip": 21, "equival": 4, "error": 21, "especi": [17, 23, 32], "esqu": 37, "establish": [23, 32], "estim": 21, "etc": [17, 21], "evalu": [17, 32], "even": [9, 10, 23, 25, 32, 37, 41], "event": 21, "ever": [4, 17, 32], "everyth": [17, 32], "everywher": 17, "exact": [23, 32], "exactli": [15, 16, 17, 25, 32], "exampl": [0, 10, 17, 21, 23, 28, 32, 45], "exceedingli": 10, "exec_explicit": [0, 16], "execut": [0, 3, 16, 21, 28], "exist": [7, 28, 32, 37], "exoskeleton": [23, 32], "expand": 3, "expect": [0, 3, 10, 15, 23, 32, 37, 38], "expens": 21, "experi": [17, 21, 32], "explicit": [9, 10, 21, 23, 28, 32, 43], "explicitli": [10, 17, 21, 23, 25, 32, 37], "explod": [17, 32], "expos": [0, 2, 4, 9, 10, 17, 18, 21, 32], "ext": 45, "extend": [0, 7, 32], "extens": [3, 45], "extern": [10, 23, 32], "extra": 21, "facilit": [6, 21, 23, 32, 41], "fact": [15, 23, 32, 38], "factori": [23, 32, 41], "fals": [4, 9, 16, 17, 21, 28, 32], "far": [0, 21, 32], "fashion": [3, 23, 32], "fast": [17, 21], "faster": [3, 21], "featur": [4, 23, 32], "feel": [0, 32], "few": [9, 10, 18, 23, 32, 40, 43, 45], "file": [0, 3, 7, 17, 21, 23, 28, 32, 43, 45], "fileengin": [15, 32, 38], "filter": [3, 17, 32], "find": [21, 23, 32], "fine": [0, 2, 32], "finger": 17, "first": [15, 17, 32, 45], "fix": 6, "fk": [23, 32], "fkei": 28, "flag": [17, 21, 32, 45], "flatten": [17, 32], "flush": [7, 32], "folder": 28, "follow": [4, 45], "foreign": [18, 21, 23, 32, 40], "forfeit": 10, "form": 3, "formal": [9, 18, 23, 32], "format": [3, 6, 7, 17, 32], "formatregistrymeta": [0, 6, 31], "former": [0, 2, 32], "forward": [15, 32, 38], "found": [0, 23, 32, 45], "framework": 43, "frankli": [0, 32], "friendli": [17, 32], "from": [0, 2, 4, 6, 7, 10, 17, 21, 23, 28, 32, 34, 41, 45], "from_metadata": [0, 26], "from_tabl": [0, 9], "front": [23, 32], "ft": [0, 2, 7, 11, 18, 19, 32, 40], "fts5": 28, "fts5_prep_composit": [0, 27, 28], "fts_": 3, "ftsaccessor": [0, 2, 3, 12, 32], "ftscompos": 2, "ftsdatabas": [0, 11, 12], "ftsmanag": [0, 12, 17, 19, 20, 32], "full": [4, 7, 9, 17, 21, 23, 32], "fulli": [3, 10, 17, 23, 32, 37], "function": [1, 6, 15, 16, 23, 32, 38, 43], "fundament": [8, 43], "furo": 45, "g": [3, 10, 15, 17, 23, 32, 37, 38, 43], "gap": 9, "gather": [6, 32, 34], "gener": [1, 2, 3, 4, 7, 8, 9, 10, 13, 15, 16, 18, 21, 23, 25, 26, 32, 37, 38, 43, 45], "get": [4, 17, 21, 28], "get_attr_comp": [0, 23, 32], "get_attribut": [0, 8, 9, 32], "get_coll_comp": [0, 23, 32], "get_column_default": [0, 9], "get_column_names_str_t": [0, 27, 28], "get_compon": [0, 25, 32], "get_engin": [0, 27, 28], "given": [0, 2, 15, 16, 21, 32], "glanc": [0, 32], "global": [21, 37], "go": [21, 23, 32], "goal": [17, 43], "goe": [23, 32], "good": [23, 32], "grab": [0, 32], "gracefulli": 21, "grant": [23, 32], "great": 21, "group": [0, 2, 3, 4, 6, 7, 10, 17, 18, 21, 23, 25, 32, 34, 37, 39, 40, 43, 45], "group_bi": [0, 3, 4, 17, 32], "group_by_col": [17, 32], "group_by_onli": [17, 32], "group_registri": [0, 6, 32], "ha": [3, 23, 32, 45], "handi": [23, 32], "handl": [3, 6, 10, 17, 21, 23, 32, 39], "handler": 3, "happen": [0, 32], "have": [0, 2, 3, 9, 10, 15, 17, 21, 23, 28, 32, 37, 38, 41], "haven": 21, "head": [9, 45], "header": 45, "heavi": [6, 9, 32, 34], "heavili": [23, 32], "help": [10, 15, 17, 23, 32, 37, 38], "helper": 28, "henc": [23, 32, 41], "here": [0, 9, 10, 15, 17, 21, 23, 32, 37, 38, 45], "hidden": [0, 32, 45], "hierarch": 6, "hierarchi": [4, 6, 7, 10, 15, 23, 25, 28, 32, 34, 38, 43, 45], "high": [1, 17, 32, 33, 45], "higher": [7, 32], "highli": 21, "highlight": 3, "hint": [10, 32, 37], "hit": 17, "hl_col": 3, "hoc": [3, 37], "hold": 41, "hood": [17, 32, 39], "hook": 43, "horizont": [23, 32], "hous": [0, 3, 10, 23, 32, 41, 45], "how": [0, 6, 7, 17, 21, 23, 32], "howev": [0, 4, 7, 21, 23, 25, 32], "html": [3, 21, 45], "html5": 7, "http": 9, "huge": [10, 21, 32, 37], "hypothet": [23, 32], "i": [0, 1, 2, 3, 4, 6, 7, 9, 10, 13, 15, 16, 17, 18, 21, 23, 25, 28, 32, 33, 34, 37, 38, 39, 40, 43, 45], "id": [17, 32], "ideal": 21, "ignor": [7, 21, 32], "imagin": [4, 21], "impact": [10, 32, 37], "implement": [1, 4, 9, 21, 32, 33], "implic": 28, "implicit": [4, 23, 32], "import": [0, 21, 32], "includ": [3, 9, 10, 23, 32, 45], "include_al": 9, "include_col": [4, 16], "incomplet": [7, 32], "inconsist": [0, 2, 32], "incorpor": [10, 17, 32, 37], "increas": [10, 32, 37], "incredibli": 9, "inde": [15, 32, 38], "independ": [6, 7, 10, 32, 37], "index": [0, 3, 7, 10, 21, 28, 31, 32, 37, 43, 45], "index_nam": 5, "index_on": [17, 32], "indic": [17, 32], "individu": [3, 10], "infer": [23, 32], "inform": 4, "inherit": [0, 2, 4, 7, 10, 15, 23, 32, 38], "init": [0, 23, 32, 41], "initi": [1, 15, 17, 32, 33, 38], "inject": [6, 32], "inner": [17, 32], "insert": [0, 6, 7, 9, 10, 18, 19, 21, 23, 28, 32, 34, 37, 41, 43], "insert_data": [7, 9, 32], "insert_dict": 28, "insert_mani": [19, 21], "inspect": 43, "instanc": [0, 2, 4, 6, 7, 9, 10, 16, 17, 21, 23, 28, 32, 41], "instanti": [4, 21, 37], "instead": [0, 2, 4, 9, 10, 15, 32, 38], "int": [3, 5], "integr": [1, 32, 33, 43], "intend": [10, 32, 37], "intent": [3, 9, 23, 25], "interact": [10, 15, 16, 18, 32, 43], "interest": [6, 17, 32], "interfac": [4, 9, 10, 17, 23, 43], "intern": [0, 7, 10, 15, 32, 37, 38], "intuit": 4, "invok": [10, 15, 16, 32], "involv": [23, 32], "irrelev": 21, "isn": [17, 21, 23, 32, 45], "issu": [17, 21, 32], "item": [10, 43], "iter": 21, "its": [0, 9, 10, 15, 23, 32, 37, 38, 41], "itself": [10, 13], "j": 3, "javascript": 3, "join": [17, 23, 28, 32, 43], "joint": 21, "json": 3, "just": [0, 4, 6, 9, 15, 17, 21, 23, 32, 34, 38, 41], "justifi": [23, 28, 32], "keep": [0, 4, 15, 17, 21, 23, 32, 38], "kei": [4, 6, 17, 18, 21, 23, 28, 32, 34, 40], "keyword": 37, "kind": [15, 21, 23, 32, 38], "know": [10, 23, 32, 37], "knowledg": 7, "known": [17, 43], "kwarg": [1, 10, 15, 16, 17, 18, 21, 28, 32, 38], "label": [17, 32], "laid": 4, "larg": [23, 32, 45], "last": 28, "later": [17, 23, 32], "latter": [0, 2, 7, 25, 32], "lax": 9, "lean": [10, 32, 37], "least": [0, 15, 23, 32, 38, 41], "leav": [0, 23, 32], "length": 3, "level": [0, 1, 7, 17, 21, 23, 32, 33, 39, 41, 45], "leverag": [4, 10], "lift": 9, "light": [7, 32], "lightweight": [6, 9, 15, 32, 38], "like": [0, 1, 2, 4, 6, 7, 9, 10, 15, 16, 17, 18, 21, 23, 32, 33, 37, 38, 39, 45], "limit": [0, 3, 4, 5, 17, 21, 32, 45], "line": [23, 32], "linearli": [17, 32], "link": [3, 17, 32, 45], "list": [3, 4, 7, 10, 21, 23, 28, 32, 37, 45], "littl": [0, 4, 23, 32], "load": 9, "local": [10, 32, 37, 45], "localsi": [0, 7, 32, 45], "locat": 43, "lock": [17, 32], "log": 23, "logic": [7, 9, 21, 23, 32], "long": [0, 17, 25, 32, 39], "longer": 4, "look": [0, 4, 15, 16, 17, 32], "loos": 3, "lose": 21, "lot": [10, 23, 32], "low": 17, "lower": [7, 32], "luckili": 21, "lurk": 21, "made": [10, 15, 23, 32], "mai": [4, 6, 9, 15, 21, 23, 32, 38, 41], "main": [23, 32], "make": [0, 4, 6, 15, 17, 21, 23, 32, 34, 38, 43], "makefil": 45, "manag": [0, 6, 7, 10, 11, 12, 13, 14, 15, 23, 25, 31, 32, 37, 38, 41, 43, 45], "manager_arg": [15, 32, 38], "manager_kwarg": [15, 32, 38], "mani": [10, 17, 23, 32], "manual": [3, 17, 23, 28, 32, 45], "map": [4, 17, 23, 32], "mapper": [0, 6, 25, 31, 32, 43], "massiv": 3, "match": [3, 9, 10, 32], "matter": [0, 32], "max": 3, "maxdepth": 45, "maximum": 3, "mayb": [21, 23, 32], "md": 45, "me": [23, 32], "mean": [0, 6, 10, 17, 18, 32, 34, 39], "meaningfulli": 43, "meant": [7, 15, 32, 38], "media": [6, 32, 34], "medium": 43, "memori": [17, 21, 32], "mere": [15, 32, 38], "messi": [15, 32, 38], "metadata": [3, 21, 26], "method": [0, 1, 2, 3, 4, 6, 7, 10, 15, 17, 21, 23, 28, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42], "middlewar": 7, "might": [4, 9, 10, 21, 23, 32], "migrat": [0, 18, 19, 20, 21, 22, 32], "mini": 17, "mirror": [18, 32, 40, 43], "misalign": [10, 32, 37], "miss": [17, 32], "model": [2, 5, 7, 9, 10, 21, 23, 25, 32, 43], "modifi": [9, 21, 43], "modul": [0, 2, 11, 19, 27, 31, 32, 43, 45], "moment": [0, 17, 32], "more": [4, 10, 15, 17, 21, 23, 32, 37, 38, 39, 41, 45], "most": [9, 17, 18, 32, 40], "mostli": [3, 15, 32, 38], "move": 17, "much": 21, "muddi": [15, 32, 38], "multi": [17, 32], "multipl": [10, 23, 25, 32], "must": [3, 4, 10, 23, 28, 32, 37], "my": [17, 32], "myst": 45, "myst_pars": 45, "n": 45, "nail": 21, "name": [0, 3, 4, 6, 7, 8, 9, 10, 16, 17, 21, 23, 25, 28, 32, 34, 36, 41, 45], "nameconvers": 23, "named_result": [0, 27, 28], "namespac": [0, 6, 32, 34], "nativ": [17, 32], "navig": 45, "necessari": [15, 17, 23, 32, 38], "necessarili": [15, 21, 32, 38], "need": [0, 2, 4, 6, 7, 9, 10, 17, 18, 21, 23, 28, 32, 37, 40, 41, 45], "nerv": [23, 32], "nest": [0, 17, 21, 32, 45], "never": 3, "nevertheless": [21, 37], "new": 10, "newer": 10, "next": 21, "node": [0, 9, 23, 31, 32], "non": [15, 17, 21, 32, 38], "none": [3, 4, 6, 7, 15, 16, 17, 20, 21, 22, 23, 28, 32], "note": [0, 2, 3, 5, 6, 7, 9, 10, 15, 17, 21, 23, 28, 32, 34, 37, 38, 41, 45], "note_compon": [0, 32], "note_convers": [17, 23, 32], "note_conversion_matt": 17, "now": [4, 10, 15, 17, 23, 32, 38], "null": [17, 32], "number": 3, "o": 45, "obj": [8, 9, 23, 32, 36], "object": [3, 4, 6, 7, 9, 10, 15, 17, 21, 23, 25, 32, 34, 37, 38, 41, 43], "obscur": [10, 32, 37, 45], "occur": [10, 17, 32, 37, 39], "oddli": 45, "off": [6, 9, 23, 32, 41], "offici": [10, 32, 37], "often": [10, 17, 23, 25, 32, 37], "older": 10, "one": [0, 5, 10, 21, 23, 25, 32, 41], "ones": [17, 32], "onli": [3, 10, 17, 21, 23, 28, 32, 37, 45], "open": [10, 15, 16, 21, 23, 32, 37], "oper": [1, 2, 6, 7, 9, 10, 17, 18, 21, 23, 25, 32, 34, 37, 40, 43], "oppos": 21, "optim": [3, 21], "option": [7, 16, 21, 28, 32, 45], "orbit": [23, 32], "order": [3, 4, 7, 32], "order_bi": [0, 4, 17, 32], "org": 9, "organ": [0, 6, 32, 34], "origin": [15, 17, 32, 38, 39], "orm": [6, 23, 32], "ornament": [23, 32], "other": [0, 2, 4, 7, 9, 15, 17, 23, 28, 32, 38, 45], "otherwis": [10, 15, 32, 38], "out": [0, 4, 21, 32], "outer": [0, 9, 10, 32], "outlin": 9, "output": [6, 32, 34, 45], "outright": 21, "outsid": [0, 4, 15, 21, 32, 38], "outweigh": 3, "over": [0, 17, 23, 32], "overal": [7, 32], "overarch": [0, 32], "overhead": [10, 21, 23, 32], "overlap": [6, 32, 34], "overload": [10, 32], "overridden": [23, 32], "overrul": 23, "own": [0, 10, 17, 23, 32, 41], "pack": [15, 32, 38], "packag": [31, 45], "page": [43, 45], "pair": [3, 9, 23, 32], "pairwis": [23, 32], "param": [17, 23, 32], "paramet": [1, 3, 4, 5, 7, 9, 10, 16, 17, 21, 23, 28, 32, 33, 37, 41], "parent": [0, 4, 23, 32], "pars": 4, "parser": 3, "part": [17, 23], "particular": [0, 4, 8, 10, 17, 21, 23, 25, 32, 37], "particularli": [6, 23, 32, 34], "pass": [10, 17, 23, 32, 37], "passthrough": [10, 32, 37], "path": 28, "pattern": [7, 32], "payload": 3, "per": [15, 32, 38], "perfectli": [0, 21, 32], "perform": [3, 4, 6, 10, 15, 16, 17, 21, 23, 28, 32, 34, 41, 43], "perhap": [15, 23, 32, 38], "persist": 45, "pickl": 43, "piec": 10, "pillar": 43, "pipelin": 17, "place": [0, 7, 10, 21, 23, 32, 37, 45], "pleas": 10, "point": [0, 23, 25, 32, 43], "popul": [0, 7, 28, 32], "populate_fts5": [0, 27, 28], "populate_index": [0, 10, 32], "pose": [10, 32, 37], "posit": [23, 32, 37, 41], "possibl": [4, 9, 10, 15, 16, 21, 23, 32, 37], "possibli": [6, 7, 17, 23, 32, 34], "post": [3, 17, 32], "practic": 21, "predominantli": 3, "prefer": [0, 17, 28, 32], "prefix": [7, 17, 32, 39, 45], "prep": [7, 21, 28], "prepar": 43, "prepare_insert": 28, "prepare_insert_data": [0, 9], "present": [23, 28, 32], "prevent": [10, 17, 32, 37], "previous": 23, "prim": 7, "primari": [3, 23, 32, 41, 45], "primarili": [6, 15, 32, 38], "primit": [0, 3, 7, 17, 32], "print_report": 21, "prior": [6, 21, 32], "process": [17, 21, 32], "produc": [23, 32], "programmat": [10, 32, 37], "propag": [10, 15, 32, 37, 38], "properti": [1, 5, 6, 7, 9, 10, 15, 17, 21, 32, 33, 37], "propos": [4, 23, 32], "protocol": [8, 10], "prove": [15, 32, 38], "provid": [0, 1, 4, 9, 10, 16, 17, 21, 23, 25, 28, 32, 33, 39, 41, 43, 45], "proxi": 4, "pull": [0, 32], "pure": [6, 9, 32, 34], "purpos": [15, 23, 32, 38], "push": [23, 32, 41], "py": [0, 4, 17, 32, 45], "python": [3, 4, 45], "q": 3, "queri": [1, 3, 4, 5, 10, 17, 28, 32, 33, 37, 43], "query_col": 4, "queue": [10, 32], "quit": [9, 21], "r": [4, 10, 32, 37], "ran": [10, 32, 37], "rather": [0, 4, 6, 13, 17, 32, 34], "raw": [7, 17, 28, 32], "raw_select": [0, 1, 2, 4, 10, 32, 37], "re": [2, 7, 9, 17, 32], "reach": [0, 32], "reactiv": [17, 32], "read_embed": [2, 5], "readi": [7, 32], "readili": [15, 32, 38], "readm": 45, "realist": [15, 32, 38], "realli": [2, 6, 23, 28, 32, 34], "reason": [9, 10, 17, 23, 32, 37], "receipt": [7, 32], "receiv": [23, 32, 41], "reconsider": [23, 32, 41], "record": 21, "recreat": [0, 10, 17, 18, 19, 20, 21, 22, 25, 32], "recreate_old": [0, 19, 20], "recreate_pivot": [19, 20], "recreate_simpl": [19, 20], "recurs": [0, 32, 45], "reduc": [6, 10, 23, 32, 34], "refer": [6, 17, 23, 32, 34, 45], "regardless": [17, 32, 39], "regex": [0, 27], "regist": [6, 7, 23, 32, 34, 41], "registr": [6, 23, 32, 34], "regular": 2, "rel": [15, 16, 32], "relat": [0, 4, 6, 8, 9, 10, 15, 23, 25, 31, 32, 38, 41], "relational_model": 9, "relationalaccessor": [0, 2, 4, 13], "relationaldatabas": [0, 10, 11, 13], "relationalmanag": [0, 19, 21], "relationalschema": [0, 26, 31], "relationship": [23, 32, 41], "relev": [0, 3, 10, 23, 32], "reli": [10, 15, 21, 32, 38], "remain": [7, 15, 16, 21, 32], "remark": [23, 32], "remov": [23, 25], "renam": 4, "render": 45, "repeat": [15, 23, 32, 38], "replac": 21, "repres": 25, "represent": [7, 10, 32, 37, 43], "request": [23, 32, 41], "requir": [10, 15, 17, 21, 32, 38], "reset": 28, "reset_ft": 28, "resolv": [17, 32], "resourc": [10, 15, 16, 32, 37, 38], "respect": [0, 23, 32], "respons": [3, 6, 23, 32, 37, 41], "rest": [23, 32], "restrict": [17, 23, 32, 39], "restructuredtext": 45, "result": [3, 4, 6, 17, 28, 32, 34, 37], "result_dict": [2, 4], "retriev": [23, 32], "return": [3, 4, 6, 7, 15, 16, 17, 23, 28, 32], "return_index": [17, 32], "reus": [23, 32], "reusabl": [23, 32], "right": [0, 17, 21, 32], "risk": [10, 32, 37], "rollback": [10, 32, 37], "roof": [10, 32, 37], "router": [19, 21], "row": [17, 21, 23, 32], "row_list": 21, "rst": 45, "rule": [10, 15, 32, 37, 38, 45], "run": [10, 23, 32], "sa": [9, 23, 28, 32], "sa_execut": 28, "safe": 21, "sai": 7, "said": [15, 23, 32, 38], "same": [0, 3, 4, 7, 9, 15, 16, 17, 23, 28, 32, 39, 45], "satisfi": 13, "satur": 21, "save": [3, 17, 32], "scaffold": 6, "scan": [7, 23, 32], "scenario": [17, 32], "schema": [0, 1, 4, 6, 7, 10, 17, 18, 21, 23, 31, 32, 34, 35, 37, 40, 41, 43], "scheme": [0, 3, 7, 15, 17, 32, 38], "scope": [4, 7, 21, 32], "score": 3, "score_threshold": 5, "sd": 28, "se": [15, 32, 38], "search": [2, 3, 5, 43], "search_col": 3, "sec": 21, "see": [2, 4, 21, 45], "seem": [0, 2, 21, 32], "seen": [0, 10, 32], "select": [0, 1, 2, 4, 10, 17, 21, 28, 32, 33, 37, 39], "select_col": 3, "select_dict": 28, "select_on": [2, 4], "select_result": 28, "self": [4, 9, 13, 20], "semant": [0, 25, 32], "send": [6, 17, 32], "sens": [10, 21, 23, 32, 37], "separ": [0, 2, 3, 4, 9, 15, 23, 25, 32, 38, 45], "sequenc": [7, 32], "sequenti": [7, 21, 32], "seriou": [10, 32, 37], "serv": [4, 8, 9, 15, 23, 32, 38, 43], "session": [7, 15, 16, 21, 23, 32], "set": [0, 1, 2, 3, 4, 9, 13, 17, 21, 23, 32, 41, 43, 45], "setup": 45, "sever": [6, 15, 16, 32, 34, 38], "shape": [23, 32], "short": 3, "should": [4, 6, 7, 9, 10, 15, 16, 17, 21, 23, 32, 34, 37, 45], "shouldn": [0, 15, 32, 38], "show": 45, "show_prog": 5, "sibl": [0, 15, 32, 38], "side": [3, 23, 32], "sidebar": 45, "signatur": [10, 23, 32], "signific": 3, "simpl": [4, 15, 32, 38], "simpler": [17, 23, 32], "simpli": [6, 10, 15, 23, 32, 34, 38], "simplif": 25, "simplifi": [10, 43], "sinc": [21, 23, 28, 32], "singl": [0, 10, 17, 21, 23, 25, 28, 32, 41, 45], "singleton": [15, 32], "singular": [15, 32, 38], "size": 3, "skeleton": [9, 15, 23, 32, 38], "skip_upd": [7, 32], "slightli": 45, "slow": 3, "small": 9, "snip": 3, "snip_col": 3, "snippet": 3, "so": [0, 6, 17, 21, 23, 25, 32, 34, 39], "some": [3, 9, 15, 23, 25, 32, 38], "someth": [0, 6, 17, 21, 32, 45], "sort": [23, 32], "sound": [0, 21, 32], "sourc": [1, 3, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14, 15, 16, 17, 18, 20, 21, 22, 23, 25, 26, 28, 29, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 45], "space": 3, "spawn": 10, "spec": [15, 23, 32, 38], "specif": [1, 2, 3, 4, 6, 7, 10, 15, 17, 23, 32, 38, 43], "specifi": [13, 15, 16, 28, 32], "speed": 3, "split": [0, 2, 17, 32], "sqa": [17, 32], "sql": [0, 1, 2, 3, 10, 11, 19], "sqlaccessor": [0, 2, 4], "sqlalchemi": [0, 1, 4, 9, 16, 17, 21, 23, 28, 32, 33], "sqlalchemyaccessor": 4, "sqlalchemysqlmanag": 21, "sqldatabas": [0, 11, 13, 21], "sqlengin": [0, 15, 16, 21, 31, 32, 38], "sqlite": [0, 3, 4, 21, 23, 28, 32], "sqlite_on_conflict_uniqu": 21, "sqliteaccessor": 4, "sqlitedatabas": [0, 11, 13], "sqlmanag": [0, 4, 19, 21], "sqlschema": [0, 26, 31], "sqltabl": [0, 4, 9, 13, 21, 26, 31], "sqltablelik": 9, "sqlteaccessor": 4, "src": 7, "stage": [17, 21, 23, 32], "stand": 9, "standard": [0, 3, 32, 43], "state": [6, 10, 18, 37, 43], "statement": [4, 15, 16, 28, 32], "static": [4, 16], "still": [0, 6, 15, 17, 23, 32, 34, 38], "stitch": [17, 32], "stop": [15, 32, 38], "storag": [6, 8, 10, 23, 25, 32, 34, 41, 43], "store": [15, 17, 23, 32, 37, 38, 43], "stow": [0, 32], "str": [1, 3, 4, 5, 7, 16, 23, 25, 28, 32], "string": [3, 4, 17, 28, 32], "stringifi": [17, 32], "structur": [0, 3, 6, 7, 10, 23, 25, 32, 37], "sub": 45, "subclass": [0, 2, 7, 10, 32, 43], "subcompon": [6, 32, 34], "subject": 45, "submodul": [31, 32, 43], "subpackag": [2, 31, 32, 43, 45], "subsequ": [23, 32, 41], "subset": [6, 25, 32, 34], "substanti": [15, 32, 38], "subtyp": [6, 10, 15, 23, 32, 38], "suggest": [23, 32], "super": 7, "superfici": [17, 32, 39], "supertyp": 13, "support": [1, 3, 4, 10, 15, 25, 32, 37, 38, 43], "suppos": [15, 32, 38], "sure": [17, 32], "surfac": 21, "swap": 4, "sweep": 21, "symmetri": [23, 32], "sync": [0, 10, 18, 19, 20, 21, 22, 32, 43], "syntact": 6, "system": [23, 25, 32], "systemat": [10, 32, 37], "t": [0, 2, 3, 8, 9, 10, 15, 17, 21, 23, 25, 32, 36, 37, 38, 45], "tabl": [0, 1, 2, 3, 4, 6, 7, 9, 17, 18, 21, 23, 28, 32, 33, 34, 39, 40, 43], "table1": 4, "table2": 4, "table_nam": [3, 17, 28, 32], "tableaccessor": 2, "tabluaraccessor": 13, "tabular": 9, "take": [7, 21, 32], "target": [3, 7, 21, 23, 25, 28, 32, 41, 45], "task": [9, 23, 32, 41], "tell": [0, 25, 32], "tend": [0, 32], "terminologi": 9, "test": 43, "text": [1, 3, 4, 29, 32], "than": [0, 3, 4, 6, 13, 17, 21, 32, 34], "thei": [6, 10, 17, 23, 32, 34, 45], "them": [0, 6, 10, 17, 21, 23, 32, 34], "theme": 45, "themselv": [0, 32], "theoret": 9, "theoretic_formul": 9, "theori": 4, "thi": [0, 2, 3, 4, 6, 7, 10, 15, 16, 17, 18, 21, 23, 25, 28, 32, 34, 37, 38, 39, 40, 41, 43, 45], "thing": [0, 1, 15, 17, 32, 33, 38], "think": [2, 17, 23, 32], "those": [0, 7, 9, 17, 21, 23, 28, 32], "thought": [8, 9], "thread": [17, 21, 32], "through": [1, 6, 10, 21, 23, 32, 34], "throw": 21, "thu": [0, 3, 4, 7, 10, 17, 18, 32, 37, 40], "ti": [23, 32], "tie": [23, 32, 41], "tighter": 17, "time": [3, 17, 21, 23, 32], "timeout": [15, 16, 32], "tissu": [23, 32], "titl": [0, 32, 45], "toctre": 45, "todo": [10, 17, 32, 37], "togeth": [17, 25, 32], "token": [3, 28], "ton": [17, 32], "too": [4, 15, 17, 21, 32, 38], "top": [0, 32, 45], "topic": 45, "topmost": [0, 32], "total": [17, 32, 45], "trace": [23, 32], "track": 45, "tracker": [7, 32], "transact": [10, 21, 32, 37], "transfer": [3, 21], "transform": [6, 17, 32, 34], "transmit": 3, "travers": [23, 32], "treat": [2, 17, 32], "tree": [23, 32, 45], "trickl": 7, "true": [5, 9, 17, 21, 32, 39], "try": [17, 32], "tupl": [9, 17, 32], "turn": 21, "two": [17, 23, 32, 41], "type": [0, 2, 3, 4, 6, 9, 10, 13, 15, 17, 23, 25, 27, 32, 37, 38, 41, 43], "type_list": [23, 32], "type_ref": [23, 32], "typet": 23, "typic": [0, 6, 32], "ultim": [7, 9, 21], "unconstrain": [15, 16, 32], "under": [0, 4, 6, 7, 10, 17, 21, 23, 32, 37, 39, 45], "underli": [1, 17, 18, 32, 39], "unicode61": [3, 28], "unifi": [17, 32], "uniqu": [6, 15, 21, 32, 34, 38], "unique_on": 3, "unlink": [23, 32], "unnam": [23, 32], "unspecifi": [10, 32], "until": [7, 10, 23, 32], "up": [0, 4, 7, 9, 10, 17, 18, 21, 23, 25, 32, 40, 41, 43, 45], "updat": [7, 10, 17, 19, 20, 21, 22, 32, 43], "upsert": 21, "upward": 23, "url": 16, "us": [1, 3, 4, 6, 7, 8, 9, 10, 15, 16, 17, 21, 23, 25, 28, 32, 33, 37, 38, 39, 45], "usabl": [17, 32], "usag": [17, 21, 28], "user": [10, 17, 32, 37], "util": [0, 6, 23, 31, 32, 34, 43], "valid": [0, 32], "valu": [3, 4, 9, 15, 17, 21, 23, 32, 38], "variabl": [4, 13, 37], "varieti": [15, 16, 32], "variou": [8, 23], "veri": [15, 21, 32, 38], "verifi": [10, 32, 37], "vertic": [23, 32], "via": [3, 10, 17, 18, 21, 32, 40], "viabl": 3, "viewcod": 45, "virtual": 28, "vss": [0, 2, 11, 19, 28, 43], "vssaccessor": [0, 2, 5, 14], "vssdatabas": [0, 11, 14], "vssmanag": [0, 14, 19, 22], "wa": [3, 15, 17, 23, 32, 38], "wai": [0, 3, 10, 15, 17, 23, 32, 38], "wait": [17, 32], "want": [9, 17, 21, 23, 32], "wast": [6, 15, 32, 34, 38], "we": [0, 2, 3, 4, 9, 10, 15, 17, 21, 23, 32, 37, 38, 41], "well": [3, 7, 10, 17, 23, 32, 45], "were": [15, 23, 32, 38], "what": [15, 16, 17, 21, 25, 32], "whatev": 21, "when": [0, 6, 7, 10, 15, 17, 21, 23, 28, 32, 34, 37, 38, 45], "where": [0, 3, 4, 10, 15, 17, 21, 23, 32, 37, 38], "wherea": [2, 21, 23, 32], "wherein_dict": 3, "whether": [7, 9, 16, 23, 32], "which": [0, 2, 4, 7, 9, 10, 17, 23, 32, 37], "while": [2, 3, 10, 15, 23, 32, 38], "whole": [4, 23, 32], "why": [2, 15, 23, 32, 38, 41], "wide": [15, 16, 32], "wider": [0, 32], "wiki": 9, "wikipedia": 9, "wipe": [10, 32], "wise": [15, 23, 32, 38], "within": [0, 6, 8, 10, 21, 23, 25, 32, 34, 37, 41, 45], "without": 9, "work": [2, 7, 17, 32], "worri": 21, "wors": 21, "would": [0, 2, 3, 7, 10, 15, 17, 21, 23, 32, 37, 38], "wouldn": [9, 23, 32], "wrap": [0, 2, 4, 10, 15, 17, 18, 23, 25, 32, 38, 40, 41], "wrapper": [1, 7, 8, 15, 17, 18, 23, 32, 33, 38, 39, 40], "write": [37, 45], "write_embed": [2, 5], "written": 45, "ye": 13, "yield": 4, "you": [0, 2, 17, 21, 23, 32], "your": [2, 17, 32]}, "titles": ["co3 package", "co3.accessor module", "co3.accessors package", "co3.accessors.fts module", "co3.accessors.sql module", "co3.accessors.vss module", "co3.co3 module", "co3.collector module", "co3.component module", "co3.components package", "co3.database module", "co3.databases package", "co3.databases.fts module", "co3.databases.sql module", "co3.databases.vss module", "co3.engine module", "co3.engines package", "co3.indexer module", "co3.manager module", "co3.managers package", "co3.managers.fts module", "co3.managers.sql module", "co3.managers.vss module", "co3.mapper module", "co3.mappers package", "co3.schema module", "co3.schemas package", "co3.util package", "co3.util.db module", "co3.util.regex module", "co3.util.types module", "co3", "co3", "co3.Accessor", "co3.CO3", "co3.Collector", "co3.Component", "co3.Database", "co3.Engine", "co3.Indexer", "co3.Manager", "co3.Mapper", "co3.Schema", "co3 package docs", "Documentation", "Sphinx", "Test"], "titleterms": {"accessor": [1, 2, 3, 4, 5, 33], "autodoc": 45, "autoref": 43, "breakdown": 43, "co3": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43], "collector": [7, 35], "compon": [8, 9, 36], "content": 43, "databas": [10, 11, 12, 13, 14, 37], "db": 28, "detail": [43, 45], "directori": 45, "doc": 43, "document": 44, "engin": [15, 16, 38], "ft": [3, 12, 20], "index": [17, 39], "manag": [18, 19, 20, 21, 22, 40], "mapper": [23, 24, 41], "markdown": 45, "modul": [1, 3, 4, 5, 6, 7, 8, 10, 12, 13, 14, 15, 17, 18, 20, 21, 22, 23, 25, 28, 29, 30], "overview": 43, "packag": [0, 2, 9, 11, 16, 19, 24, 26, 27, 43], "regex": 29, "schema": [25, 26, 42], "sphinx": 45, "sql": [4, 13, 21], "structur": [43, 45], "submodul": [0, 2, 11, 19, 27], "subpackag": 0, "syntax": 45, "test": 46, "type": 30, "util": [27, 28, 29, 30], "vss": [5, 14, 22]}}) \ No newline at end of file +Search.setIndex({"alltitles": {"Additional details": [[17, null]], "Autoref": [[32, null]], "Contents": [[32, null]], "Detailed directory structure": [[34, "detailed-directory-structure"]], "Detailed structural breakdown": [[32, "detailed-structural-breakdown"]], "Dev note": [[10, null]], "Dev note\nthe Composer needs reconsideration, or at least its positioning directly in this\nclass. It may be more appropriate to have at the Schema level, or even just\ndissolved altogether if arbitrary named Components can be attached to schemas.": [[23, null]], "Development TODO list": [[10, null]], "Development log": [[23, null]], "Documentation": [[33, "documentation"]], "Example usage": [[17, null]], "Markdown syntax": [[34, "markdown-syntax"]], "Organization for inheritance over composition": [[0, null]], "Overview": [[32, "overview"]], "Sphinx": [[34, "sphinx"]], "Sphinx autodoc": [[34, "sphinx-autodoc"]], "Submodules": [[0, "submodules"], [2, "submodules"], [11, "submodules"], [19, "submodules"], [27, "submodules"]], "Subpackages": [[0, "subpackages"]], "Subpackages organization": [[0, null]], "class design": [[23, null]], "co3": [[31, "co3"]], "co3 package": [[0, "module-co3"]], "co3 package docs": [[32, "co3-package-docs"]], "co3.accessor module": [[1, "module-co3.accessor"]], "co3.accessors package": [[2, "module-co3.accessors"]], "co3.accessors.fts module": [[3, "module-co3.accessors.fts"]], "co3.accessors.sql module": [[4, "module-co3.accessors.sql"]], "co3.accessors.vss module": [[5, "module-co3.accessors.vss"]], "co3.co3 module": [[6, "module-co3.co3"]], "co3.collector module": [[7, "module-co3.collector"]], "co3.component module": [[8, "module-co3.component"]], "co3.components package": [[9, "module-co3.components"]], "co3.database module": [[10, "module-co3.database"]], "co3.databases package": [[11, "module-co3.databases"]], "co3.databases.fts module": [[12, "module-co3.databases.fts"]], "co3.databases.sql module": [[13, "module-co3.databases.sql"]], "co3.databases.vss module": [[14, "module-co3.databases.vss"]], "co3.engine module": [[15, "module-co3.engine"]], "co3.engines package": [[16, "module-co3.engines"]], "co3.indexer module": [[17, "module-co3.indexer"]], "co3.manager module": [[18, "module-co3.manager"]], "co3.managers package": [[19, "module-co3.managers"]], "co3.managers.fts module": [[20, "module-co3.managers.fts"]], "co3.managers.sql module": [[21, "module-co3.managers.sql"]], "co3.managers.vss module": [[22, "module-co3.managers.vss"]], "co3.mapper module": [[23, "module-co3.mapper"]], "co3.mappers package": [[24, "co3-mappers-package"]], "co3.schema module": [[25, "module-co3.schema"]], "co3.schemas package": [[26, "module-co3.schemas"]], "co3.util package": [[27, "module-co3.util"]], "co3.util.db module": [[28, "module-co3.util.db"]], "co3.util.regex module": [[29, "module-co3.util.regex"]], "co3.util.types module": [[30, "module-co3.util.types"]], "dev note": [[15, null]], "on action groups": [[6, null]], "on explicit connection contexts": [[10, null]], "why is this object necessary?": [[15, null]]}, "docnames": ["_autoref/co3", "_autoref/co3.accessor", "_autoref/co3.accessors", "_autoref/co3.accessors.fts", "_autoref/co3.accessors.sql", "_autoref/co3.accessors.vss", "_autoref/co3.co3", "_autoref/co3.collector", "_autoref/co3.component", "_autoref/co3.components", "_autoref/co3.database", "_autoref/co3.databases", "_autoref/co3.databases.fts", "_autoref/co3.databases.sql", "_autoref/co3.databases.vss", "_autoref/co3.engine", "_autoref/co3.engines", "_autoref/co3.indexer", "_autoref/co3.manager", "_autoref/co3.managers", "_autoref/co3.managers.fts", "_autoref/co3.managers.sql", "_autoref/co3.managers.vss", "_autoref/co3.mapper", "_autoref/co3.mappers", "_autoref/co3.schema", "_autoref/co3.schemas", "_autoref/co3.util", "_autoref/co3.util.db", "_autoref/co3.util.regex", "_autoref/co3.util.types", "_autoref/modules", "index", "reference/documentation/index", "reference/documentation/sphinx"], "envversion": {"sphinx": 61, "sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx.ext.viewcode": 1}, "filenames": ["_autoref/co3.rst", "_autoref/co3.accessor.rst", "_autoref/co3.accessors.rst", "_autoref/co3.accessors.fts.rst", "_autoref/co3.accessors.sql.rst", "_autoref/co3.accessors.vss.rst", "_autoref/co3.co3.rst", "_autoref/co3.collector.rst", "_autoref/co3.component.rst", "_autoref/co3.components.rst", "_autoref/co3.database.rst", "_autoref/co3.databases.rst", "_autoref/co3.databases.fts.rst", "_autoref/co3.databases.sql.rst", "_autoref/co3.databases.vss.rst", "_autoref/co3.engine.rst", "_autoref/co3.engines.rst", "_autoref/co3.indexer.rst", "_autoref/co3.manager.rst", "_autoref/co3.managers.rst", "_autoref/co3.managers.fts.rst", "_autoref/co3.managers.sql.rst", "_autoref/co3.managers.vss.rst", "_autoref/co3.mapper.rst", "_autoref/co3.mappers.rst", "_autoref/co3.schema.rst", "_autoref/co3.schemas.rst", "_autoref/co3.util.rst", "_autoref/co3.util.db.rst", "_autoref/co3.util.regex.rst", "_autoref/co3.util.types.rst", "_autoref/modules.rst", "index.md", "reference/documentation/index.md", "reference/documentation/sphinx.md"], "indexentries": {"__init__() (co3.accessors.vss.vssaccessor method)": [[5, "co3.accessors.vss.VSSAccessor.__init__", false]], "__init__() (co3.collector.collector method)": [[7, "co3.collector.Collector.__init__", false]], "__init__() (co3.component.component method)": [[8, "co3.component.Component.__init__", false]], "__init__() (co3.database.database method)": [[10, "co3.database.Database.__init__", false]], "__init__() (co3.engine.engine method)": [[15, "co3.engine.Engine.__init__", false]], "__init__() (co3.engines.sqlengine method)": [[16, "co3.engines.SQLEngine.__init__", false]], "__init__() (co3.indexer.cacheblock method)": [[17, "co3.indexer.CacheBlock.__init__", false]], "__init__() (co3.indexer.indexer method)": [[17, "co3.indexer.Indexer.__init__", false]], "__init__() (co3.managers.fts.ftsmanager method)": [[20, "co3.managers.fts.FTSManager.__init__", false]], "__init__() (co3.managers.sql.sqlmanager method)": [[21, "co3.managers.sql.SQLManager.__init__", false]], "__init__() (co3.managers.vss.vssmanager method)": [[22, "co3.managers.vss.VSSManager.__init__", false]], "__init__() (co3.mapper.composablemapper method)": [[23, "co3.mapper.ComposableMapper.__init__", false]], "__init__() (co3.mapper.mapper method)": [[23, "co3.mapper.Mapper.__init__", false]], "__init__() (co3.schema.schema method)": [[25, "co3.schema.Schema.__init__", false]], "accessor (class in co3.accessor)": [[1, "co3.accessor.Accessor", false]], "accessor (co3.databases.fts.ftsdatabase attribute)": [[12, "co3.databases.fts.FTSDatabase.accessor", false]], "accessor (co3.databases.vss.vssdatabase attribute)": [[14, "co3.databases.vss.VSSDatabase.accessor", false]], "action_registry (co3.co3.co3 attribute)": [[6, "co3.co3.CO3.action_registry", false]], "add_component() (co3.schema.schema method)": [[25, "co3.schema.Schema.add_component", false]], "add_insert() (co3.collector.collector method)": [[7, "co3.collector.Collector.add_insert", false]], "add_router() (co3.managers.sql.sqlmanager method)": [[21, "co3.managers.sql.SQLManager.add_router", false]], "attach() (co3.mapper.mapper method)": [[23, "co3.mapper.Mapper.attach", false]], "attach_many() (co3.mapper.mapper method)": [[23, "co3.mapper.Mapper.attach_many", false]], "attributes (co3.co3.co3 property)": [[6, "co3.co3.CO3.attributes", false]], "cache_block() (co3.indexer.indexer method)": [[17, "co3.indexer.Indexer.cache_block", false]], "cache_clear() (co3.indexer.indexer method)": [[17, "co3.indexer.Indexer.cache_clear", false]], "cacheblock (class in co3.indexer)": [[17, "co3.indexer.CacheBlock", false]], "cached_query() (co3.indexer.indexer method)": [[17, "co3.indexer.Indexer.cached_query", false]], "camel_to_snake() (in module co3.util.regex)": [[29, "co3.util.regex.camel_to_snake", false]], "co3": [[0, "module-co3", false]], "co3 (class in co3.co3)": [[6, "co3.co3.CO3", false]], "co3.accessor": [[1, "module-co3.accessor", false]], "co3.accessors": [[2, "module-co3.accessors", false]], "co3.accessors.fts": [[3, "module-co3.accessors.fts", false]], "co3.accessors.sql": [[4, "module-co3.accessors.sql", false]], "co3.accessors.vss": [[5, "module-co3.accessors.vss", false]], "co3.co3": [[6, "module-co3.co3", false]], "co3.collector": [[7, "module-co3.collector", false]], "co3.component": [[8, "module-co3.component", false]], "co3.components": [[9, "module-co3.components", false]], "co3.database": [[10, "module-co3.database", false]], "co3.databases": [[11, "module-co3.databases", false]], "co3.databases.fts": [[12, "module-co3.databases.fts", false]], "co3.databases.sql": [[13, "module-co3.databases.sql", false]], "co3.databases.vss": [[14, "module-co3.databases.vss", false]], "co3.engine": [[15, "module-co3.engine", false]], "co3.engines": [[16, "module-co3.engines", false]], "co3.indexer": [[17, "module-co3.indexer", false]], "co3.manager": [[18, "module-co3.manager", false]], "co3.managers": [[19, "module-co3.managers", false]], "co3.managers.fts": [[20, "module-co3.managers.fts", false]], "co3.managers.sql": [[21, "module-co3.managers.sql", false]], "co3.managers.vss": [[22, "module-co3.managers.vss", false]], "co3.mapper": [[23, "module-co3.mapper", false]], "co3.schema": [[25, "module-co3.schema", false]], "co3.schemas": [[26, "module-co3.schemas", false]], "co3.util": [[27, "module-co3.util", false]], "co3.util.db": [[28, "module-co3.util.db", false]], "co3.util.regex": [[29, "module-co3.util.regex", false]], "co3.util.types": [[30, "module-co3.util.types", false]], "collate() (co3.co3.co3 method)": [[6, "co3.co3.CO3.collate", false]], "collate() (in module co3.co3)": [[6, "co3.co3.collate", false]], "collation_attributes() (co3.co3.co3 method)": [[6, "co3.co3.CO3.collation_attributes", false]], "collect() (co3.mapper.mapper method)": [[23, "co3.mapper.Mapper.collect", false]], "collect_inserts() (co3.collector.collector method)": [[7, "co3.collector.Collector.collect_inserts", false]], "collector (class in co3.collector)": [[7, "co3.collector.Collector", false]], "component (class in co3.component)": [[8, "co3.component.Component", false]], "components (co3.co3.co3 property)": [[6, "co3.co3.CO3.components", false]], "composablecomponent (class in co3.components)": [[9, "co3.components.ComposableComponent", false]], "composablemapper (class in co3.mapper)": [[23, "co3.mapper.ComposableMapper", false]], "compose() (co3.components.composablecomponent method)": [[9, "co3.components.ComposableComponent.compose", false]], "compose() (co3.components.relation method)": [[9, "co3.components.Relation.compose", false]], "compose() (co3.components.sqltable method)": [[9, "co3.components.SQLTable.compose", false]], "compose() (co3.mapper.composablemapper method)": [[23, "co3.mapper.ComposableMapper.compose", false]], "connect() (co3.engine.engine method)": [[15, "co3.engine.Engine.connect", false]], "connect() (co3.engines.sqlengine method)": [[16, "co3.engines.SQLEngine.connect", false]], "create_fts5() (in module co3.util.db)": [[28, "co3.util.db.create_fts5", false]], "create_vss0() (in module co3.util.db)": [[28, "co3.util.db.create_vss0", false]], "database (class in co3.database)": [[10, "co3.database.Database", false]], "deferred_cd_fkey() (in module co3.util.db)": [[28, "co3.util.db.deferred_cd_fkey", false]], "deferred_fkey() (in module co3.util.db)": [[28, "co3.util.db.deferred_fkey", false]], "dictionary (class in co3.components)": [[9, "co3.components.Dictionary", false]], "distinct_on() (co3.indexer.cacheblock method)": [[17, "co3.indexer.CacheBlock.distinct_on", false]], "document (class in co3.components)": [[9, "co3.components.Document", false]], "embed_chunks() (co3.accessors.vss.vssaccessor method)": [[5, "co3.accessors.vss.VSSAccessor.embed_chunks", false]], "embeddings (co3.accessors.vss.vssaccessor property)": [[5, "co3.accessors.vss.VSSAccessor.embeddings", false]], "engine (class in co3.engine)": [[15, "co3.engine.Engine", false]], "exec_explicit() (co3.engines.sqlengine static method)": [[16, "co3.engines.SQLEngine.exec_explicit", false]], "execute() (co3.engines.sqlengine static method)": [[16, "co3.engines.SQLEngine.execute", false]], "formatregistrymeta (class in co3.co3)": [[6, "co3.co3.FormatRegistryMeta", false]], "from_metadata() (co3.schemas.sqlschema class method)": [[26, "co3.schemas.SQLSchema.from_metadata", false]], "from_table() (co3.components.sqltable class method)": [[9, "co3.components.SQLTable.from_table", false]], "fts5_prep_composite() (in module co3.util.db)": [[28, "co3.util.db.fts5_prep_composite", false]], "ftsaccessor (class in co3.accessors.fts)": [[3, "co3.accessors.fts.FTSAccessor", false]], "ftsdatabase (class in co3.databases.fts)": [[12, "co3.databases.fts.FTSDatabase", false]], "ftsmanager (class in co3.managers.fts)": [[20, "co3.managers.fts.FTSManager", false]], "get_attr_comp() (co3.mapper.mapper method)": [[23, "co3.mapper.Mapper.get_attr_comp", false]], "get_attributes() (co3.component.component method)": [[8, "co3.component.Component.get_attributes", false]], "get_attributes() (co3.components.dictionary method)": [[9, "co3.components.Dictionary.get_attributes", false]], "get_attributes() (co3.components.sqltable method)": [[9, "co3.components.SQLTable.get_attributes", false]], "get_coll_comp() (co3.mapper.mapper method)": [[23, "co3.mapper.Mapper.get_coll_comp", false]], "get_column_defaults() (co3.components.sqltable method)": [[9, "co3.components.SQLTable.get_column_defaults", false]], "get_column_names_str_table() (in module co3.util.db)": [[28, "co3.util.db.get_column_names_str_table", false]], "get_component() (co3.schema.schema method)": [[25, "co3.schema.Schema.get_component", false]], "get_engine() (in module co3.util.db)": [[28, "co3.util.db.get_engine", false]], "group_by() (co3.indexer.cacheblock method)": [[17, "co3.indexer.CacheBlock.group_by", false]], "group_by() (co3.indexer.indexer class method)": [[17, "co3.indexer.Indexer.group_by", false]], "group_registry (co3.co3.co3 attribute)": [[6, "co3.co3.CO3.group_registry", false]], "index (co3.database.database property)": [[10, "co3.database.Database.index", false]], "indexer (class in co3.indexer)": [[17, "co3.indexer.Indexer", false]], "insert() (co3.database.database method)": [[10, "co3.database.Database.insert", false]], "insert() (co3.manager.manager method)": [[18, "co3.manager.Manager.insert", false]], "insert() (co3.managers.sql.sqlmanager method)": [[21, "co3.managers.sql.SQLManager.insert", false]], "insert_many() (co3.managers.sql.sqlmanager method)": [[21, "co3.managers.sql.SQLManager.insert_many", false]], "inserts (co3.collector.collector property)": [[7, "co3.collector.Collector.inserts", false]], "limit() (co3.indexer.cacheblock method)": [[17, "co3.indexer.CacheBlock.limit", false]], "manage (co3.database.database property)": [[10, "co3.database.Database.manage", false]], "manager (class in co3.manager)": [[18, "co3.manager.Manager", false]], "manager (co3.databases.fts.ftsdatabase attribute)": [[12, "co3.databases.fts.FTSDatabase.manager", false]], "manager (co3.databases.vss.vssdatabase attribute)": [[14, "co3.databases.vss.VSSDatabase.manager", false]], "manager (co3.engine.engine property)": [[15, "co3.engine.Engine.manager", false]], "mapper (class in co3.mapper)": [[23, "co3.mapper.Mapper", false]], "migrate() (co3.manager.manager method)": [[18, "co3.manager.Manager.migrate", false]], "migrate() (co3.managers.fts.ftsmanager method)": [[20, "co3.managers.fts.FTSManager.migrate", false]], "migrate() (co3.managers.sql.sqlmanager method)": [[21, "co3.managers.sql.SQLManager.migrate", false]], "migrate() (co3.managers.vss.vssmanager method)": [[22, "co3.managers.vss.VSSManager.migrate", false]], "model (co3.accessors.vss.vssaccessor property)": [[5, "co3.accessors.vss.VSSAccessor.model", false]], "module": [[0, "module-co3", false], [1, "module-co3.accessor", false], [2, "module-co3.accessors", false], [3, "module-co3.accessors.fts", false], [4, "module-co3.accessors.sql", false], [5, "module-co3.accessors.vss", false], [6, "module-co3.co3", false], [7, "module-co3.collector", false], [8, "module-co3.component", false], [9, "module-co3.components", false], [10, "module-co3.database", false], [11, "module-co3.databases", false], [12, "module-co3.databases.fts", false], [13, "module-co3.databases.sql", false], [14, "module-co3.databases.vss", false], [15, "module-co3.engine", false], [16, "module-co3.engines", false], [17, "module-co3.indexer", false], [18, "module-co3.manager", false], [19, "module-co3.managers", false], [20, "module-co3.managers.fts", false], [21, "module-co3.managers.sql", false], [22, "module-co3.managers.vss", false], [23, "module-co3.mapper", false], [25, "module-co3.schema", false], [26, "module-co3.schemas", false], [27, "module-co3.util", false], [28, "module-co3.util.db", false], [29, "module-co3.util.regex", false], [30, "module-co3.util.types", false]], "named_results() (in module co3.util.db)": [[28, "co3.util.db.named_results", false]], "node (class in co3.components)": [[9, "co3.components.Node", false]], "order_by() (co3.indexer.cacheblock method)": [[17, "co3.indexer.CacheBlock.order_by", false]], "populate_fts5() (in module co3.util.db)": [[28, "co3.util.db.populate_fts5", false]], "populate_indexes() (co3.database.database method)": [[10, "co3.database.Database.populate_indexes", false]], "prepare_insert_data() (co3.components.sqltable method)": [[9, "co3.components.SQLTable.prepare_insert_data", false]], "raw_select() (co3.accessor.accessor method)": [[1, "co3.accessor.Accessor.raw_select", false]], "raw_select() (co3.accessors.sql.relationalaccessor method)": [[4, "co3.accessors.sql.RelationalAccessor.raw_select", false]], "raw_select() (co3.accessors.sql.sqlaccessor method)": [[4, "co3.accessors.sql.SQLAccessor.raw_select", false]], "read_embeddings() (co3.accessors.vss.vssaccessor method)": [[5, "co3.accessors.vss.VSSAccessor.read_embeddings", false]], "recreate() (co3.database.database method)": [[10, "co3.database.Database.recreate", false]], "recreate() (co3.manager.manager method)": [[18, "co3.manager.Manager.recreate", false]], "recreate() (co3.managers.fts.ftsmanager method)": [[20, "co3.managers.fts.FTSManager.recreate", false]], "recreate() (co3.managers.sql.sqlmanager method)": [[21, "co3.managers.sql.SQLManager.recreate", false]], "recreate() (co3.managers.vss.vssmanager method)": [[22, "co3.managers.vss.VSSManager.recreate", false]], "recreate_old() (in module co3.managers.fts)": [[20, "co3.managers.fts.recreate_old", false]], "recreate_pivot() (co3.managers.fts.ftsmanager method)": [[20, "co3.managers.fts.FTSManager.recreate_pivot", false]], "recreate_simple() (co3.managers.fts.ftsmanager method)": [[20, "co3.managers.fts.FTSManager.recreate_simple", false]], "relation (class in co3.components)": [[9, "co3.components.Relation", false]], "relationalaccessor (class in co3.accessors.sql)": [[4, "co3.accessors.sql.RelationalAccessor", false]], "relationaldatabase (class in co3.databases.sql)": [[13, "co3.databases.sql.RelationalDatabase", false]], "relationalmanager (class in co3.managers.sql)": [[21, "co3.managers.sql.RelationalManager", false]], "relationalschema (class in co3.schemas)": [[26, "co3.schemas.RelationalSchema", false]], "result_dicts() (co3.accessors.sql.sqlaccessor static method)": [[4, "co3.accessors.sql.SQLAccessor.result_dicts", false]], "router (co3.managers.sql.sqlmanager property)": [[21, "co3.managers.sql.SQLManager.router", false]], "schema (class in co3.schema)": [[25, "co3.schema.Schema", false]], "search() (co3.accessors.fts.ftsaccessor method)": [[3, "co3.accessors.fts.FTSAccessor.search", false]], "search() (co3.accessors.vss.vssaccessor method)": [[5, "co3.accessors.vss.VSSAccessor.search", false]], "select() (co3.accessor.accessor method)": [[1, "co3.accessor.Accessor.select", false]], "select() (co3.accessors.sql.relationalaccessor method)": [[4, "co3.accessors.sql.RelationalAccessor.select", false]], "select() (co3.accessors.sql.sqlaccessor method)": [[4, "co3.accessors.sql.SQLAccessor.select", false]], "select() (co3.database.database method)": [[10, "co3.database.Database.select", false]], "select_one() (co3.accessors.sql.relationalaccessor method)": [[4, "co3.accessors.sql.RelationalAccessor.select_one", false]], "sqlaccessor (class in co3.accessors.sql)": [[4, "co3.accessors.sql.SQLAccessor", false]], "sqldatabase (class in co3.databases.sql)": [[13, "co3.databases.sql.SQLDatabase", false]], "sqlengine (class in co3.engines)": [[16, "co3.engines.SQLEngine", false]], "sqlitedatabase (class in co3.databases.sql)": [[13, "co3.databases.sql.SQLiteDatabase", false]], "sqlmanager (class in co3.managers.sql)": [[21, "co3.managers.sql.SQLManager", false]], "sqlschema (class in co3.schemas)": [[26, "co3.schemas.SQLSchema", false]], "sqltable (class in co3.components)": [[9, "co3.components.SQLTable", false]], "sync() (co3.manager.manager method)": [[18, "co3.manager.Manager.sync", false]], "sync() (co3.managers.fts.ftsmanager method)": [[20, "co3.managers.fts.FTSManager.sync", false]], "sync() (co3.managers.sql.sqlmanager method)": [[21, "co3.managers.sql.SQLManager.sync", false]], "sync() (co3.managers.vss.vssmanager method)": [[22, "co3.managers.vss.VSSManager.sync", false]], "update() (co3.managers.fts.ftsmanager method)": [[20, "co3.managers.fts.FTSManager.update", false]], "update() (co3.managers.sql.sqlmanager method)": [[21, "co3.managers.sql.SQLManager.update", false]], "update() (co3.managers.vss.vssmanager method)": [[22, "co3.managers.vss.VSSManager.update", false]], "vssaccessor (class in co3.accessors.vss)": [[5, "co3.accessors.vss.VSSAccessor", false]], "vssdatabase (class in co3.databases.vss)": [[14, "co3.databases.vss.VSSDatabase", false]], "vssmanager (class in co3.managers.vss)": [[22, "co3.managers.vss.VSSManager", false]], "where() (co3.indexer.cacheblock method)": [[17, "co3.indexer.CacheBlock.where", false]], "write_embeddings() (co3.accessors.vss.vssaccessor method)": [[5, "co3.accessors.vss.VSSAccessor.write_embeddings", false]]}, "objects": {"": [[0, 0, 0, "-", "co3"]], "co3": [[1, 0, 0, "-", "accessor"], [2, 0, 0, "-", "accessors"], [6, 0, 0, "-", "co3"], [7, 0, 0, "-", "collector"], [8, 0, 0, "-", "component"], [9, 0, 0, "-", "components"], [10, 0, 0, "-", "database"], [11, 0, 0, "-", "databases"], [15, 0, 0, "-", "engine"], [16, 0, 0, "-", "engines"], [17, 0, 0, "-", "indexer"], [18, 0, 0, "-", "manager"], [19, 0, 0, "-", "managers"], [23, 0, 0, "-", "mapper"], [25, 0, 0, "-", "schema"], [26, 0, 0, "-", "schemas"], [27, 0, 0, "-", "util"]], "co3.accessor": [[1, 1, 1, "", "Accessor"]], "co3.accessor.Accessor": [[1, 2, 1, "", "raw_select"], [1, 2, 1, "", "select"]], "co3.accessors": [[3, 0, 0, "-", "fts"], [4, 0, 0, "-", "sql"], [5, 0, 0, "-", "vss"]], "co3.accessors.fts": [[3, 1, 1, "", "FTSAccessor"]], "co3.accessors.fts.FTSAccessor": [[3, 2, 1, "", "search"]], "co3.accessors.sql": [[4, 1, 1, "", "RelationalAccessor"], [4, 1, 1, "", "SQLAccessor"]], "co3.accessors.sql.RelationalAccessor": [[4, 2, 1, "", "raw_select"], [4, 2, 1, "", "select"], [4, 2, 1, "", "select_one"]], "co3.accessors.sql.SQLAccessor": [[4, 2, 1, "", "raw_select"], [4, 2, 1, "", "result_dicts"], [4, 2, 1, "", "select"]], "co3.accessors.vss": [[5, 1, 1, "", "VSSAccessor"]], "co3.accessors.vss.VSSAccessor": [[5, 2, 1, "", "__init__"], [5, 2, 1, "", "embed_chunks"], [5, 3, 1, "", "embeddings"], [5, 3, 1, "", "model"], [5, 2, 1, "", "read_embeddings"], [5, 2, 1, "", "search"], [5, 2, 1, "", "write_embeddings"]], "co3.co3": [[6, 1, 1, "", "CO3"], [6, 1, 1, "", "FormatRegistryMeta"], [6, 5, 1, "", "collate"]], "co3.co3.CO3": [[6, 4, 1, "", "action_registry"], [6, 3, 1, "", "attributes"], [6, 2, 1, "", "collate"], [6, 2, 1, "", "collation_attributes"], [6, 3, 1, "", "components"], [6, 4, 1, "", "group_registry"]], "co3.collector": [[7, 1, 1, "", "Collector"]], "co3.collector.Collector": [[7, 2, 1, "", "__init__"], [7, 2, 1, "", "add_insert"], [7, 2, 1, "", "collect_inserts"], [7, 3, 1, "", "inserts"]], "co3.component": [[8, 1, 1, "", "Component"]], "co3.component.Component": [[8, 2, 1, "", "__init__"], [8, 2, 1, "", "get_attributes"]], "co3.components": [[9, 1, 1, "", "ComposableComponent"], [9, 1, 1, "", "Dictionary"], [9, 1, 1, "", "Document"], [9, 1, 1, "", "Node"], [9, 1, 1, "", "Relation"], [9, 1, 1, "", "SQLTable"]], "co3.components.ComposableComponent": [[9, 2, 1, "", "compose"]], "co3.components.Dictionary": [[9, 2, 1, "", "get_attributes"]], "co3.components.Relation": [[9, 2, 1, "", "compose"]], "co3.components.SQLTable": [[9, 2, 1, "", "compose"], [9, 2, 1, "", "from_table"], [9, 2, 1, "", "get_attributes"], [9, 2, 1, "", "get_column_defaults"], [9, 2, 1, "", "prepare_insert_data"]], "co3.database": [[10, 1, 1, "", "Database"]], "co3.database.Database": [[10, 2, 1, "", "__init__"], [10, 3, 1, "", "index"], [10, 2, 1, "", "insert"], [10, 3, 1, "", "manage"], [10, 2, 1, "", "populate_indexes"], [10, 2, 1, "", "recreate"], [10, 2, 1, "", "select"]], "co3.databases": [[12, 0, 0, "-", "fts"], [13, 0, 0, "-", "sql"], [14, 0, 0, "-", "vss"]], "co3.databases.fts": [[12, 1, 1, "", "FTSDatabase"]], "co3.databases.fts.FTSDatabase": [[12, 4, 1, "", "accessor"], [12, 4, 1, "", "manager"]], "co3.databases.sql": [[13, 1, 1, "", "RelationalDatabase"], [13, 1, 1, "", "SQLDatabase"], [13, 1, 1, "", "SQLiteDatabase"]], "co3.databases.vss": [[14, 1, 1, "", "VSSDatabase"]], "co3.databases.vss.VSSDatabase": [[14, 4, 1, "", "accessor"], [14, 4, 1, "", "manager"]], "co3.engine": [[15, 1, 1, "", "Engine"]], "co3.engine.Engine": [[15, 2, 1, "", "__init__"], [15, 2, 1, "", "connect"], [15, 3, 1, "", "manager"]], "co3.engines": [[16, 1, 1, "", "SQLEngine"]], "co3.engines.SQLEngine": [[16, 2, 1, "", "__init__"], [16, 2, 1, "", "connect"], [16, 2, 1, "", "exec_explicit"], [16, 2, 1, "", "execute"]], "co3.indexer": [[17, 1, 1, "", "CacheBlock"], [17, 1, 1, "", "Indexer"]], "co3.indexer.CacheBlock": [[17, 2, 1, "", "__init__"], [17, 2, 1, "", "distinct_on"], [17, 2, 1, "", "group_by"], [17, 2, 1, "", "limit"], [17, 2, 1, "", "order_by"], [17, 2, 1, "", "where"]], "co3.indexer.Indexer": [[17, 2, 1, "", "__init__"], [17, 2, 1, "", "cache_block"], [17, 2, 1, "", "cache_clear"], [17, 2, 1, "", "cached_query"], [17, 2, 1, "", "group_by"]], "co3.manager": [[18, 1, 1, "", "Manager"]], "co3.manager.Manager": [[18, 2, 1, "", "insert"], [18, 2, 1, "", "migrate"], [18, 2, 1, "", "recreate"], [18, 2, 1, "", "sync"]], "co3.managers": [[20, 0, 0, "-", "fts"], [21, 0, 0, "-", "sql"], [22, 0, 0, "-", "vss"]], "co3.managers.fts": [[20, 1, 1, "", "FTSManager"], [20, 5, 1, "", "recreate_old"]], "co3.managers.fts.FTSManager": [[20, 2, 1, "", "__init__"], [20, 2, 1, "", "migrate"], [20, 2, 1, "", "recreate"], [20, 2, 1, "", "recreate_pivot"], [20, 2, 1, "", "recreate_simple"], [20, 2, 1, "", "sync"], [20, 2, 1, "", "update"]], "co3.managers.sql": [[21, 1, 1, "", "RelationalManager"], [21, 1, 1, "", "SQLManager"]], "co3.managers.sql.SQLManager": [[21, 2, 1, "", "__init__"], [21, 2, 1, "", "add_router"], [21, 2, 1, "", "insert"], [21, 2, 1, "", "insert_many"], [21, 2, 1, "", "migrate"], [21, 2, 1, "", "recreate"], [21, 3, 1, "", "router"], [21, 2, 1, "", "sync"], [21, 2, 1, "", "update"]], "co3.managers.vss": [[22, 1, 1, "", "VSSManager"]], "co3.managers.vss.VSSManager": [[22, 2, 1, "", "__init__"], [22, 2, 1, "", "migrate"], [22, 2, 1, "", "recreate"], [22, 2, 1, "", "sync"], [22, 2, 1, "", "update"]], "co3.mapper": [[23, 1, 1, "", "ComposableMapper"], [23, 1, 1, "", "Mapper"]], "co3.mapper.ComposableMapper": [[23, 2, 1, "", "__init__"], [23, 2, 1, "", "compose"]], "co3.mapper.Mapper": [[23, 2, 1, "", "__init__"], [23, 2, 1, "", "attach"], [23, 2, 1, "", "attach_many"], [23, 2, 1, "", "collect"], [23, 2, 1, "", "get_attr_comp"], [23, 2, 1, "", "get_coll_comp"]], "co3.schema": [[25, 1, 1, "", "Schema"]], "co3.schema.Schema": [[25, 2, 1, "", "__init__"], [25, 2, 1, "", "add_component"], [25, 2, 1, "", "get_component"]], "co3.schemas": [[26, 1, 1, "", "RelationalSchema"], [26, 1, 1, "", "SQLSchema"]], "co3.schemas.SQLSchema": [[26, 2, 1, "", "from_metadata"]], "co3.util": [[28, 0, 0, "-", "db"], [29, 0, 0, "-", "regex"], [30, 0, 0, "-", "types"]], "co3.util.db": [[28, 5, 1, "", "create_fts5"], [28, 5, 1, "", "create_vss0"], [28, 5, 1, "", "deferred_cd_fkey"], [28, 5, 1, "", "deferred_fkey"], [28, 5, 1, "", "fts5_prep_composite"], [28, 5, 1, "", "get_column_names_str_table"], [28, 5, 1, "", "get_engine"], [28, 5, 1, "", "named_results"], [28, 5, 1, "", "populate_fts5"]], "co3.util.regex": [[29, 5, 1, "", "camel_to_snake"]]}, "objnames": {"0": ["py", "module", "Python module"], "1": ["py", "class", "Python class"], "2": ["py", "method", "Python method"], "3": ["py", "property", "Python property"], "4": ["py", "attribute", "Python attribute"], "5": ["py", "function", "Python function"]}, "objtypes": {"0": "py:module", "1": "py:class", "2": "py:method", "3": "py:property", "4": "py:attribute", "5": "py:function"}, "terms": {"": [0, 3, 4, 6, 7, 9, 10, 13, 15, 17, 21, 23, 28, 34], "0": [3, 4, 5, 17, 21], "1": [3, 4, 9, 15, 34], "10": 5, "100": 3, "1000": 21, "2": [3, 4, 21, 34], "384": 28, "5": 5, "64": [3, 5], "A": [17, 18, 23, 34], "AND": 21, "As": [9, 23], "At": 0, "BY": [3, 17], "But": [4, 9], "By": 34, "For": [0, 2, 4, 10, 17, 21, 23, 34], "IF": 21, "IN": 3, "If": [4, 15, 23, 34], "In": [0, 6, 15, 21, 23, 25, 34], "It": [0, 4, 6, 7, 15, 17, 21, 28], "No": 21, "OR": 17, "One": [4, 23], "Such": 23, "That": [15, 17, 23], "The": [0, 2, 3, 6, 7, 9, 10, 15, 17, 18, 21, 23, 32, 34], "There": [21, 32], "These": [10, 23, 28, 34], "To": 17, "With": 23, "_": [3, 34], "__init__": [0, 2, 4, 5, 7, 8, 10, 15, 16, 17, 19, 20, 21, 22, 23, 25], "_autoref": 34, "_base": 0, "_build": 34, "_conversion_matt": 7, "_inside_": 21, "_instance_": 13, "_local_cach": 10, "_not_": [6, 10], "_only_": 2, "_outside_": 21, "_reentrant": 21, "_this_": 15, "_with": 9, "abl": [3, 9], "about": [21, 23], "abov": [4, 10, 21, 23], "abstract": [1, 6, 7, 8, 9, 10, 15, 18, 21, 32], "accept": 4, "access": [0, 1, 2, 4, 10, 17, 32], "accessor": [0, 7, 10, 11, 12, 13, 14, 17, 31, 32], "accommod": 7, "accord": [7, 9, 34], "accur": 10, "acquir": 21, "across": [0, 6, 7, 15, 17, 18, 21, 23, 34], "action": [2, 10, 15, 16, 23], "action_arg": 6, "action_group": [6, 23], "action_kei": [6, 23], "action_kwarg": 6, "action_registri": [0, 6], "actual": [0, 17, 21, 23, 34], "ad": [10, 21, 23, 34], "add": [17, 34], "add_compon": [0, 25], "add_insert": [0, 7], "add_rout": [19, 21], "addit": 23, "addition": [0, 10, 23], "address": [10, 17, 32], "adher": 9, "adopt": 10, "advanc": 34, "aesthet": 23, "afterward": 17, "again": 21, "against": [3, 4, 10], "agg_col": [3, 17], "agg_on": 17, "aggreg": [4, 7, 17], "aid": 23, "algebra": 9, "alia": [12, 14], "alias": 4, "align": [10, 21], "all": [0, 3, 7, 9, 10, 15, 17, 21, 23, 34], "allow": [10, 15, 16, 17, 21, 23, 34], "almost": [3, 21], "along": [0, 3], "alongsid": [6, 17], "also": [4, 6, 9, 10, 17, 18, 21, 23, 28, 34], "although": [15, 17, 23], "altogeth": 17, "alwai": [21, 23], "ambigu": 17, "among": 0, "amount": [3, 23], "an": [0, 1, 2, 3, 6, 7, 10, 15, 16, 17, 18, 21, 23, 25, 28, 32, 34], "analog": 9, "analogi": 23, "analysi": 3, "ani": [3, 4, 7, 9, 10, 15, 21, 28], "anoth": [15, 23], "answer": 15, "apidoc": 34, "appear": [15, 23], "append": 7, "appli": [3, 10], "approach": [21, 23], "appropri": [0, 32], "aptli": 23, "ar": [0, 2, 3, 4, 6, 7, 9, 10, 17, 18, 21, 23, 25, 32, 34], "arbitrari": 10, "aren": [9, 17, 21], "arg": [1, 10, 15, 18, 21], "argument": [4, 6, 10], "around": [0, 2, 7, 18], "arrai": 3, "asid": 0, "ask": 23, "aspect": 23, "assign": [10, 13], "associ": [0, 3, 4, 6, 16, 17, 23, 25, 32], "assum": 3, "attach": [0, 6, 10, 15, 21], "attach_mani": [0, 23], "attempt": [9, 10, 23], "attr": [6, 23], "attr_comp": 23, "attr_compose_map": 23, "attr_name_map": 23, "attribut": [0, 4, 6, 7, 9, 10, 23], "augment": 6, "auto": [23, 34], "automat": [4, 21, 23, 28, 34], "autoref": 34, "auxiliari": 6, "avail": [2, 3, 4, 9, 15, 17, 21, 34], "avoid": [10, 23], "awai": [0, 7, 10, 17, 21], "awar": 23, "awkward": 23, "b": 21, "back": 17, "backend": [4, 21], "barebon": 23, "base": [0, 1, 3, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14, 15, 16, 17, 18, 20, 21, 22, 23, 25, 26, 32, 34], "basi": 21, "basic": 32, "batch": 21, "batch_siz": 5, "becam": 17, "becom": [6, 10], "been": [3, 21, 23], "befor": [3, 10, 17, 21], "behav": 17, "behavior": [0, 10, 17, 21], "being": [0, 2, 4, 13, 15, 17, 23], "belong": 10, "best": 17, "better": 17, "between": [15, 23, 32], "bind": 16, "bind_param": [4, 16], "bit": [10, 23], "block": [3, 5, 17, 34], "block_convers": 17, "blueprint": 4, "bodi": 9, "bone": 23, "both": [0, 4, 7, 10, 17, 23], "bottom": 34, "bound": [7, 23], "bring": 21, "broadcast": 17, "broadli": 10, "broken": [0, 7], "build": [17, 21], "built": 3, "bulb": 23, "bulk": [10, 21, 28], "bundl": [17, 21], "bys": 17, "c": [7, 10, 13, 17, 21, 23], "cach": [10, 17, 32], "cache_block": [0, 17], "cache_clear": [0, 17], "cache_groupbi": 17, "cache_path": 5, "cache_select": 17, "cacheblock": [0, 10, 17, 31], "cached_group_bi": 17, "cached_queri": [0, 17], "cached_select": 17, "call": [6, 7, 15, 17, 21, 23, 25, 34], "callabl": [10, 23], "caller": [17, 23], "camel_to_snak": [0, 27, 29], "can": [0, 2, 4, 6, 8, 9, 10, 15, 17, 21, 25, 28, 34], "cannot": [3, 10, 21], "canon": [6, 7, 17, 23], "capabl": 3, "caption": 34, "cascad": [21, 28], "case": [0, 3, 4, 6, 10, 15], "caus": 17, "cb": 17, "center": 18, "central": 10, "certain": [4, 23], "chain": [17, 23], "chang": [4, 7, 18, 23, 34], "character": 23, "check": [3, 4, 7, 10, 17, 21, 23], "check_tabl": 4, "children": [0, 23], "choos": 0, "chunk": [5, 21], "chunk_size_cap": 21, "chunk_tim": 21, "circl": 23, "clash": [0, 10], "class": [0, 1, 3, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14, 15, 16, 17, 18, 20, 21, 22, 25, 26, 32], "classmethod": [9, 17, 26], "claus": 3, "clear": [10, 17, 23], "clearli": 23, "cli": 34, "click": 34, "client": 3, "close": 34, "clutter": 0, "co3_ref": 23, "co4": 23, "code": 34, "col": [3, 4, 17, 28], "col_1": 4, "coll_comp": 23, "coll_compose_map": 23, "coll_group": 23, "coll_name_map": 23, "collat": [0, 6, 23, 31], "collatet": 23, "collation_attribut": [0, 6], "collect": [0, 6, 7, 9, 21, 23, 25, 32], "collect_insert": [0, 7], "collector": [0, 6, 21, 23, 31, 32], "collis": 10, "colq": 3, "column": [3, 4, 7, 9, 16, 17, 21, 23, 28], "command": 34, "commit": 21, "common": [1, 6, 7, 17, 18, 21, 23, 32, 34], "commonli": 9, "commun": 23, "comp": 23, "compar": [3, 9, 23], "complet": [6, 10], "complex": [1, 17, 23], "compliant": 28, "compon": [0, 1, 4, 6, 7, 10, 18, 21, 25, 31, 32], "compos": [0, 1, 2, 4, 6, 9, 17, 32], "composablecompon": [0, 9, 23, 31], "composablemapp": [0, 23, 31], "compose_arg": 23, "compose_kwarg": 23, "composeablecompon": 9, "composit": [9, 10, 15, 23, 28], "compound": 28, "comput": [6, 21], "conceiv": 15, "concern": [0, 10], "concret": [0, 7], "condit": [17, 23], "conf": 34, "config": [1, 34], "configur": 34, "confin": 0, "conflict": 21, "conform": 3, "congest": 17, "conn": 21, "connect": [0, 1, 4, 6, 7, 15, 16, 18, 21, 23, 25, 28, 32], "consid": [4, 23], "consist": 0, "constitu": [6, 10, 32, 34], "constitut": [15, 16], "constrain": [1, 23], "constraint": [3, 21], "construct": [3, 6, 23], "contain": [0, 8, 9, 28], "content": [3, 34], "context": [4, 8, 9, 15, 16, 17, 25], "continu": 21, "contrast": 0, "control": [10, 17], "conveni": [0, 1, 23], "convers": [6, 7, 17, 21, 32], "convert": [4, 7, 17, 21, 28], "coordin": [18, 21, 23], "core": [0, 2, 6, 7, 21], "coreaccessor": 0, "coredatabas": 17, "correspond": [2, 28], "could": [0, 1, 2, 4, 10, 15, 17, 21, 23], "counterpart": [0, 18], "cours": 23, "creat": [0, 3, 17, 25, 28, 34], "create_fts5": [0, 27, 28], "create_vss0": [0, 27, 28], "creation": [15, 28], "critic": [6, 7], "current": [3, 4, 7, 34], "cursorresult": [4, 28], "d": [4, 15], "danger": 21, "data": [6, 7, 8, 10, 23, 25, 28, 32], "databas": [0, 6, 7, 8, 15, 16, 17, 18, 20, 22, 23, 25, 28, 31, 32], "date": [7, 21], "daunt": 17, "db": [0, 2, 6, 7, 9, 10, 17, 21, 23, 27], "db_path": 28, "deadlock": 21, "debat": 23, "decid": 10, "decis": 23, "dedic": [4, 23], "deeper": 0, "def": 4, "default": [3, 9, 15, 23, 28, 34], "defer": 21, "deferred_cd_fkei": [0, 27, 28], "deferred_fkei": [0, 27, 28], "defin": [0, 2, 4, 6, 7, 9, 10, 15, 17], "definit": [0, 7, 10, 15, 23], "delet": [21, 28], "depend": [6, 10, 15, 21], "deploy": 17, "deprec": [4, 23], "depth": 34, "deriv": [10, 15], "desc": [4, 17], "descend": 4, "describ": 34, "descript": [32, 34], "design": [2, 4], "desir": [2, 17], "despit": 7, "detail": 23, "determin": 21, "dev": 9, "develop": [4, 9], "dict": [3, 4, 7, 9, 17, 21, 23], "dictat": 7, "dictionari": [0, 3, 4, 7, 9, 21, 28, 31], "did": 0, "differ": [2, 4, 17, 23], "difficult": [4, 34], "dim": 17, "dimens": [2, 7], "dir": 34, "direct": [0, 34], "directli": [10, 28, 34], "directori": 0, "discoveri": 23, "distinct": [4, 17], "distinct_on": [0, 4, 17], "do": [6, 17, 21, 23], "doc": 34, "docstr": 34, "document": [0, 6, 9, 31, 32, 34], "doe": [7, 21], "doesn": [0, 2, 21, 25], "domain": 9, "don": [0, 3, 10, 21, 23], "done": 4, "doubl": 17, "down": [3, 7, 21, 23], "downstream": [17, 23], "driver": 34, "drop": 23, "dropdown": 34, "dry": [15, 21], "due": 10, "dure": [10, 21, 23, 28], "duti": 6, "dynam": [1, 17, 21], "e": [0, 3, 6, 7, 10, 15, 16, 17, 23, 28, 32], "each": [0, 3, 17, 21, 23], "easi": [1, 6, 32], "easier": [15, 23], "easili": 17, "echo": 28, "edg": 23, "effect": [7, 17, 23], "effici": 17, "either": [2, 4, 17, 23, 28], "elig": 23, "elsewher": 7, "embed": [2, 5], "embed_chunk": [2, 5], "embedding_dict": 5, "embedding_s": 28, "embrac": 7, "emphasi": 25, "emploi": 17, "en": 9, "enabl": [17, 21, 28, 34], "encourag": 23, "endpoint": 17, "engin": [0, 1, 10, 18, 20, 21, 22, 28, 31, 32], "engine_arg": [10, 12, 13, 14], "engine_kwarg": [10, 12, 13, 14], "enough": 23, "ensur": [6, 7, 17], "enter": 4, "entir": [0, 25], "entiti": [8, 17], "entri": [0, 7], "equip": 21, "equival": 4, "error": 21, "especi": [17, 23], "esqu": 10, "establish": 23, "estim": 21, "etc": [17, 21], "evalu": 17, "even": [9, 10, 25], "event": 21, "ever": [4, 17], "everyth": 17, "everywher": 17, "exact": 23, "exactli": [15, 16, 17, 25], "exampl": [0, 10, 21, 23, 28, 34], "exceedingli": 10, "exec_explicit": [0, 16], "execut": [0, 3, 16, 21, 28], "exist": [7, 10, 28], "exoskeleton": 23, "expand": 3, "expect": [0, 3, 10, 15, 23], "expens": 21, "experi": [17, 21], "explicit": [9, 21, 23, 28, 32], "explicitli": [10, 17, 21, 23, 25], "explod": 17, "expos": [0, 2, 4, 9, 10, 17, 18, 21], "ext": 34, "extend": [0, 7], "extens": [3, 34], "extern": [10, 23], "extra": 21, "facilit": [6, 21, 23], "fact": [15, 23], "factori": 23, "fals": [4, 9, 16, 17, 21, 28], "far": [0, 21], "fashion": [3, 23], "fast": [17, 21], "faster": [3, 21], "featur": [4, 23], "feel": 0, "few": [9, 10, 18, 23, 32, 34], "file": [0, 3, 7, 17, 21, 23, 28, 32, 34], "fileengin": 15, "filter": [3, 17], "find": [21, 23], "fine": [0, 2], "finger": 17, "first": [15, 17, 34], "fix": 6, "fk": 23, "fkei": 28, "flag": [17, 21, 34], "flatten": 17, "flush": 7, "folder": 28, "follow": [4, 34], "foreign": [18, 21, 23], "forfeit": 10, "form": 3, "formal": [9, 18, 23], "format": [3, 6, 7, 17], "formatregistrymeta": [0, 6, 31], "former": [0, 2], "forward": 15, "found": [0, 23, 34], "framework": 32, "frankli": 0, "friendli": 17, "from": [0, 2, 4, 6, 7, 10, 17, 21, 23, 28, 34], "from_metadata": [0, 26], "from_tabl": [0, 9], "front": 23, "ft": [0, 2, 7, 11, 18, 19], "fts5": 28, "fts5_prep_composit": [0, 27, 28], "fts_": 3, "ftsaccessor": [0, 2, 3, 12], "ftscompos": 2, "ftsdatabas": [0, 11, 12], "ftsmanag": [0, 12, 17, 19, 20], "full": [4, 7, 9, 17, 21, 23], "fulli": [3, 10, 17, 23], "function": [1, 6, 15, 16, 23, 32], "fundament": [8, 32], "furo": 34, "g": [3, 10, 15, 17, 23, 32], "gap": 9, "gather": 6, "gener": [1, 2, 3, 4, 7, 8, 9, 10, 13, 15, 16, 18, 21, 23, 25, 26, 32, 34], "get": [4, 17, 21, 28], "get_attr_comp": [0, 23], "get_attribut": [0, 8, 9], "get_coll_comp": [0, 23], "get_column_default": [0, 9], "get_column_names_str_t": [0, 27, 28], "get_compon": [0, 25], "get_engin": [0, 27, 28], "given": [0, 2, 15, 16, 21], "glanc": 0, "global": [10, 21], "go": [21, 23], "goal": [17, 32], "goe": 23, "good": 23, "grab": 0, "gracefulli": 21, "grant": 23, "great": 21, "group": [0, 2, 3, 4, 7, 10, 17, 18, 21, 23, 25, 32, 34], "group_bi": [0, 3, 4, 17], "group_by_col": 17, "group_by_onli": 17, "group_registri": [0, 6], "ha": [3, 23, 34], "handi": 23, "handl": [3, 6, 10, 17, 21, 23], "handler": 3, "happen": 0, "have": [0, 2, 3, 9, 10, 15, 17, 21, 28], "haven": 21, "head": [9, 34], "header": 34, "heavi": [6, 9], "heavili": 23, "help": [10, 15, 17, 23], "helper": 28, "henc": 23, "here": [0, 9, 10, 15, 17, 21, 23, 34], "hidden": [0, 34], "hierarch": 6, "hierarchi": [4, 6, 7, 10, 15, 23, 25, 28, 32, 34], "high": [1, 17, 34], "higher": 7, "highli": 21, "highlight": 3, "hint": 10, "hit": 17, "hl_col": 3, "hoc": [3, 10], "hold": 23, "hood": 17, "hook": 32, "horizont": 23, "hous": [0, 3, 10, 23, 34], "how": [0, 6, 7, 17, 21, 23], "howev": [0, 4, 7, 21, 23, 25], "html": [3, 21, 34], "html5": 7, "http": 9, "huge": [10, 21], "hypothet": 23, "i": [0, 1, 2, 3, 4, 6, 7, 9, 10, 13, 16, 17, 18, 21, 23, 25, 28, 32, 34], "id": 17, "ideal": 21, "ignor": [7, 21], "imagin": [4, 21], "impact": 10, "implement": [1, 4, 9, 21], "implic": 28, "implicit": [4, 23], "import": [0, 21], "includ": [3, 9, 10, 23, 34], "include_al": 9, "include_col": [4, 16], "incomplet": 7, "inconsist": [0, 2], "incorpor": [10, 17], "increas": 10, "incredibli": 9, "inde": 15, "independ": [6, 7, 10], "index": [0, 3, 7, 10, 21, 28, 31, 32, 34], "index_nam": 5, "index_on": 17, "indic": 17, "individu": [3, 10], "infer": 23, "inform": 4, "inherit": [2, 4, 7, 10, 15, 23], "init": [0, 23], "initi": [1, 15, 17], "inject": 6, "inner": 17, "insert": [0, 6, 7, 9, 10, 18, 19, 21, 23, 28, 32], "insert_data": [7, 9], "insert_dict": 28, "insert_mani": [19, 21], "inspect": 32, "instanc": [0, 2, 4, 6, 7, 9, 10, 16, 17, 21, 23, 28], "instanti": [4, 10, 21], "instead": [0, 2, 4, 9, 10, 15], "int": 3, "integr": [1, 32], "intend": 10, "intent": [3, 9, 23, 25], "interact": [10, 15, 16, 18, 32], "interest": [6, 17], "interfac": [4, 9, 10, 17, 23, 32], "intern": [0, 7, 10, 15], "intuit": 4, "invok": [10, 15, 16], "involv": 23, "irrelev": 21, "isn": [17, 21, 23, 34], "issu": [17, 21], "item": [10, 32], "iter": 21, "its": [0, 9, 10, 15], "itself": [10, 13], "j": 3, "javascript": 3, "join": [17, 23, 28, 32], "joint": 21, "json": 3, "just": [0, 4, 6, 9, 15, 17, 21], "justifi": [23, 28], "keep": [0, 4, 15, 17, 21, 23], "kei": [4, 6, 17, 18, 21, 23, 28], "keyword": 10, "kind": [15, 21, 23], "know": [10, 23], "knowledg": 7, "known": [17, 32], "kwarg": [1, 10, 15, 16, 17, 18, 21, 28], "label": 17, "laid": 4, "larg": [23, 34], "last": 28, "later": [17, 23], "latter": [0, 2, 7, 25], "lax": 9, "lean": 10, "least": [0, 15], "leav": [0, 23], "length": 3, "level": [0, 1, 7, 17, 21, 34], "leverag": [4, 10], "lift": 9, "light": 7, "lightweight": [6, 9, 15], "like": [0, 1, 2, 4, 6, 7, 9, 10, 15, 16, 17, 18, 21, 23, 34], "limit": [0, 3, 4, 5, 17, 21, 34], "line": 23, "linearli": 17, "link": [3, 17, 34], "list": [3, 4, 7, 21, 23, 28, 34], "littl": [0, 4, 23], "load": 9, "local": [10, 34], "localsi": [0, 7, 34], "locat": 32, "lock": [17, 21], "lock_": 21, "logic": [7, 9, 21, 23], "long": [0, 17, 25], "longer": 4, "look": [0, 4, 15, 16, 17], "loos": 3, "lose": 21, "lot": [10, 23], "low": 17, "lower": 7, "luckili": 21, "lurk": 21, "made": [10, 15, 23], "mai": [4, 6, 9, 15, 21], "main": 23, "make": [0, 4, 6, 15, 17, 21, 23, 32], "makefil": 34, "manag": [0, 6, 7, 10, 11, 12, 13, 14, 15, 23, 25, 31, 32, 34], "manager_arg": 15, "manager_kwarg": 15, "mani": [10, 17, 23], "manual": [3, 17, 23, 28, 34], "map": [4, 17, 23], "mapper": [0, 6, 25, 31, 32], "massiv": 3, "match": [3, 9, 10], "matter": 0, "max": 3, "maxdepth": 34, "maximum": 3, "mayb": [21, 23], "md": 34, "me": 23, "mean": [0, 6, 10, 17, 18, 21], "meaningfulli": 32, "meant": [7, 15], "media": 6, "medium": 32, "memori": [17, 21], "mere": 15, "messi": 15, "metadata": [3, 21, 26], "method": [0, 1, 2, 3, 4, 6, 7, 10, 15, 17, 21, 23, 28], "middlewar": 7, "might": [4, 9, 10, 21, 23], "migrat": [0, 18, 19, 20, 21, 22], "mini": 17, "mirror": [18, 32], "misalign": 10, "miss": 17, "model": [2, 5, 7, 9, 10, 21, 23, 25, 32], "modifi": [9, 21, 32], "modul": [0, 2, 11, 19, 27, 31, 32, 34], "moment": [0, 17], "more": [4, 10, 15, 17, 21, 34], "most": [9, 17, 18], "mostli": [3, 15], "move": 17, "much": 21, "muddi": 15, "multi": 17, "multipl": [10, 23, 25], "must": [3, 4, 10, 23, 28], "my": 17, "myst": 34, "myst_pars": 34, "n": 34, "nail": 21, "name": [0, 3, 4, 6, 7, 8, 9, 10, 16, 17, 21, 25, 28, 34], "nameconvers": 23, "named_result": [0, 27, 28], "namespac": [0, 6], "nativ": 17, "navig": 34, "necessari": [17, 23], "necessarili": [15, 21], "need": [0, 2, 4, 6, 7, 9, 10, 17, 18, 21, 28, 34], "nerv": 23, "nest": [0, 17, 21, 34], "never": 3, "nevertheless": [10, 21], "new": 10, "newer": 10, "next": 21, "node": [0, 9, 23, 31], "non": [15, 17, 21], "none": [3, 4, 6, 7, 15, 16, 17, 20, 21, 22, 23, 28], "note": [0, 2, 3, 5, 6, 7, 9, 17, 21, 28, 34], "note_compon": 0, "note_convers": [17, 23], "note_conversion_matt": 17, "now": [4, 10, 15, 17, 23], "null": 17, "number": 3, "o": 34, "obj": [8, 9, 23], "object": [3, 4, 6, 7, 9, 10, 17, 21, 23, 25, 32], "obscur": [10, 34], "occur": [10, 17], "oddli": 34, "off": [6, 9, 23], "offici": 10, "often": [10, 17, 23, 25], "older": 10, "one": [0, 5, 10, 21, 23, 25], "ones": 17, "onli": [3, 10, 17, 21, 23, 28, 34], "open": [10, 15, 16, 21, 23], "oper": [1, 2, 6, 7, 9, 10, 17, 18, 21, 23, 25, 32], "oppos": 21, "optim": [3, 21], "option": [7, 16, 21, 23, 28, 34], "orbit": 23, "order": [3, 4, 7], "order_bi": [0, 4, 17], "org": 9, "organ": 6, "origin": [15, 17], "orm": [6, 23], "ornament": 23, "other": [0, 2, 4, 7, 9, 15, 17, 23, 28, 34], "otherwis": [10, 15], "out": [0, 4, 21], "outer": [0, 9, 10], "outlin": 9, "output": [6, 34], "outright": 21, "outsid": [0, 4, 15, 21, 23], "outward": 23, "outweigh": 3, "over": [17, 23], "overal": 7, "overarch": 0, "overhead": [10, 21, 23], "overlap": 6, "overload": 10, "overridden": 23, "overrul": 23, "own": [0, 10, 17, 23], "pack": 15, "packag": [31, 34], "page": [32, 34], "pair": [3, 9, 23], "pairwis": 23, "param": [17, 23], "paramet": [1, 3, 4, 5, 7, 9, 10, 16, 17, 21, 23, 28], "parent": [0, 4, 23], "pars": 4, "parser": 3, "part": [17, 23], "particular": [0, 4, 8, 10, 17, 21, 23, 25], "particularli": [6, 23], "pass": [10, 17, 23], "passthrough": 10, "path": 28, "pattern": 7, "payload": 3, "per": 15, "perfectli": [0, 21], "perform": [3, 4, 6, 10, 15, 16, 17, 21, 23, 28, 32], "perhap": [15, 23], "persist": 34, "pickl": 32, "piec": 10, "pillar": 32, "pipelin": 17, "place": [0, 7, 10, 21, 23, 34], "pleas": 10, "point": [0, 23, 25, 32], "popul": [0, 7, 28], "populate_fts5": [0, 27, 28], "populate_index": [0, 10], "pose": 10, "posit": 10, "possibl": [4, 9, 10, 15, 16, 21, 23], "possibli": [6, 7, 17, 23], "post": [3, 17], "practic": 21, "predominantli": 3, "prefer": [0, 17, 28], "prefix": [7, 17, 34], "prep": [7, 21, 28], "prepar": 32, "prepare_insert": 28, "prepare_insert_data": [0, 9], "present": [23, 28], "prevent": [10, 17], "previous": 23, "prim": 7, "primari": [3, 23, 34], "primarili": [6, 15], "primit": [0, 3, 7, 17], "print_report": 21, "prior": [6, 21], "process": [17, 21], "produc": 23, "programmat": 10, "propag": [10, 15], "properti": [1, 5, 6, 7, 9, 10, 15, 17, 21], "propos": [4, 23], "protocol": [8, 10], "prove": 15, "provid": [0, 1, 4, 9, 10, 16, 17, 21, 23, 25, 28, 32, 34], "proxi": 4, "pull": 0, "pure": [6, 9], "purpos": [15, 23], "push": 23, "py": [0, 34], "python": [3, 4, 34], "q": 3, "queri": [1, 3, 4, 5, 10, 17, 28, 32], "query_col": 4, "queue": 10, "quit": [9, 21], "r": 10, "ran": 10, "rather": [0, 4, 6, 13, 17], "raw": [7, 17, 28], "raw_select": [0, 1, 2, 4, 10], "re": [2, 7, 9, 17], "reach": 0, "reactiv": 17, "read_embed": [2, 5], "readi": 7, "readili": 15, "readm": 34, "realist": 15, "realli": [2, 6, 23, 28], "reason": [9, 10, 17, 23], "receipt": 7, "receiv": 23, "record": 21, "recreat": [0, 10, 17, 18, 19, 20, 21, 22, 25], "recreate_old": [0, 19, 20], "recreate_pivot": [19, 20], "recreate_simpl": [19, 20], "recurs": [0, 34], "reduc": [6, 10, 23], "refer": [6, 17, 23, 34], "regardless": 17, "regex": [0, 27], "regist": [6, 7, 23], "registr": [6, 23], "regular": 2, "rel": [15, 16], "relat": [0, 4, 6, 8, 9, 10, 15, 23, 25, 31], "relational_model": 9, "relationalaccessor": [0, 2, 4, 13], "relationaldatabas": [0, 10, 11, 13], "relationalmanag": [0, 19, 21], "relationalschema": [0, 26, 31], "relationship": 23, "relev": [0, 3, 10, 23], "reli": [10, 15, 21], "remain": [7, 15, 16, 21], "remark": 23, "remov": [23, 25], "renam": 4, "render": 34, "repeat": [15, 23], "replac": 21, "repres": 25, "represent": [7, 10, 32], "request": 23, "requir": [10, 15, 17, 21], "reset": 28, "reset_ft": 28, "resolv": 17, "resourc": [10, 15, 16], "respect": [0, 23], "respons": [3, 6, 10, 23], "rest": 23, "restrict": [17, 23], "restructuredtext": 34, "result": [3, 4, 6, 10, 17, 28], "result_dict": [2, 4], "retriev": 23, "return": [3, 4, 6, 7, 9, 15, 16, 17, 21, 23, 28], "return_index": 17, "reus": 23, "reusabl": 23, "right": [0, 17, 21], "risk": 10, "rollback": 10, "roof": 10, "router": [19, 21], "row": [17, 21, 23], "row_list": 21, "rst": 34, "rule": [10, 15, 34], "run": [10, 23], "sa": [9, 23, 28], "sa_execut": 28, "safe": 21, "sai": 7, "said": [15, 23], "same": [0, 3, 4, 7, 9, 15, 16, 17, 21, 23, 28, 34], "satisfi": 13, "satur": 21, "save": [3, 17], "scaffold": 6, "scan": [7, 23], "scenario": 17, "schema": [0, 1, 4, 6, 7, 10, 17, 18, 21, 31, 32], "scheme": [0, 3, 7, 15, 17], "scope": [4, 7, 21], "score": 3, "score_threshold": 5, "sd": 28, "se": 15, "search": [2, 3, 5, 32], "search_col": 3, "sec": 21, "see": [2, 4, 21, 34], "seem": [0, 2, 21], "seen": [0, 10], "select": [0, 1, 2, 4, 10, 17, 21, 28], "select_col": 3, "select_dict": 28, "select_on": [2, 4], "select_result": 28, "self": [4, 9, 13, 20], "semant": [0, 25], "send": [6, 17], "sens": [10, 21, 23], "separ": [0, 2, 3, 4, 9, 15, 23, 25, 34], "sequenc": 7, "sequenti": [7, 21], "seriou": 10, "serv": [4, 8, 9, 15, 23, 32], "session": [7, 15, 16, 21, 23], "set": [0, 1, 2, 3, 4, 9, 13, 17, 21, 23, 32, 34], "setup": 34, "sever": [6, 15, 16], "shape": 23, "short": 3, "should": [4, 6, 7, 9, 10, 15, 16, 17, 21, 23, 34], "shouldn": [0, 15], "show": 34, "show_prog": 5, "sibl": [0, 15], "side": [3, 23], "sidebar": 34, "signatur": [10, 23], "signific": 3, "simpl": [4, 15], "simpler": [17, 23], "simpli": [6, 10, 15, 23], "simplif": 25, "simplifi": [10, 21, 32], "sinc": [21, 23, 28], "singl": [0, 10, 17, 21, 23, 25, 28, 34], "singleton": 15, "singular": 15, "size": 3, "skeleton": [9, 15, 23], "skip_upd": 7, "slightli": 34, "slow": 3, "small": 9, "snip": 3, "snip_col": 3, "snippet": 3, "so": [0, 6, 17, 21, 23, 25], "some": [3, 9, 15, 23, 25], "someth": [0, 6, 17, 21, 34], "sort": 23, "sound": [0, 21], "sourc": [1, 3, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14, 15, 16, 17, 18, 20, 21, 22, 23, 25, 26, 28, 29, 34], "space": 3, "spawn": 10, "spec": [15, 23], "specif": [1, 2, 3, 4, 6, 7, 10, 15, 17, 23, 32], "specifi": [13, 15, 16, 28], "speed": 3, "split": [0, 2, 17], "sqa": 17, "sql": [0, 1, 2, 3, 10, 11, 19], "sqlaccessor": [0, 2, 4], "sqlalchemi": [0, 1, 4, 9, 16, 17, 21, 23, 28], "sqlalchemyaccessor": 4, "sqlalchemysqlmanag": 21, "sqldatabas": [0, 11, 13, 21], "sqlengin": [0, 15, 16, 31], "sqlite": [0, 3, 4, 21, 23, 28], "sqlite_on_conflict_uniqu": 21, "sqliteaccessor": 4, "sqlitedatabas": [0, 11, 13], "sqlmanag": [0, 4, 19, 21], "sqlschema": [0, 26, 31], "sqltabl": [0, 4, 9, 13, 21, 26, 31], "sqltablelik": 9, "sqlteaccessor": 4, "src": 7, "stage": [17, 21, 23], "stand": 9, "standard": [0, 3, 32], "state": [6, 10, 18, 32], "statement": [4, 15, 16, 28], "static": [4, 16], "still": [0, 6, 15, 17, 23], "stitch": 17, "stop": 15, "storag": [6, 8, 10, 23, 25, 32], "store": [10, 15, 17, 23, 32], "stow": 0, "str": [3, 4, 5, 23, 28], "string": [3, 4, 17, 28], "stringifi": 17, "structur": [0, 3, 6, 7, 10, 23, 25], "sub": 34, "subclass": [0, 2, 7, 10, 32], "subcompon": 6, "subject": 34, "submodul": [31, 32], "subpackag": [2, 31, 32, 34], "subsequ": 23, "subset": [6, 25], "substanti": 15, "subtyp": [6, 10, 15, 23], "suggest": 23, "super": 7, "superfici": 17, "supertyp": 13, "support": [1, 3, 4, 10, 15, 25, 32], "suppos": 15, "sure": 17, "surfac": 21, "swap": 4, "sweep": 21, "symmetri": 23, "sync": [0, 10, 18, 19, 20, 21, 22, 32], "syntact": 6, "system": [23, 25], "systemat": 10, "t": [0, 2, 3, 9, 10, 15, 17, 21, 23, 25, 34], "tabl": [0, 1, 2, 3, 4, 6, 7, 9, 17, 18, 21, 23, 28, 32], "table1": 4, "table2": 4, "table_nam": [3, 17, 28], "tableaccessor": 2, "tabluaraccessor": 13, "tabular": 9, "take": [7, 21], "target": [3, 7, 21, 23, 25, 28, 34], "task": [9, 23], "tell": [0, 25], "tend": 0, "terminologi": 9, "text": [1, 3, 4, 29], "than": [0, 3, 4, 6, 13, 17, 21], "thei": [6, 10, 17, 23, 34], "them": [0, 6, 10, 17, 21, 23], "theme": 34, "themselv": 0, "theoret": 9, "theoretic_formul": 9, "theori": 4, "thi": [0, 2, 3, 4, 6, 7, 10, 16, 17, 18, 21, 25, 28, 32, 34], "thing": [0, 1, 15, 17], "think": [2, 17, 23], "those": [0, 7, 9, 17, 21, 23, 28], "thought": [8, 9], "thread": [17, 21], "through": [1, 6, 10, 21, 23], "throw": 21, "thu": [0, 3, 4, 7, 10, 17, 18], "ti": 23, "tie": 23, "tighter": 17, "time": [3, 17, 21, 23], "timeout": [15, 16], "tissu": 23, "titl": [0, 34], "toctre": 34, "todo": 17, "togeth": [17, 25], "token": [3, 28], "ton": 17, "too": [4, 15, 17, 21], "top": [0, 34], "topic": 34, "topmost": 0, "total": [17, 34], "trace": 23, "track": 34, "tracker": 7, "transact": [10, 21], "transfer": [3, 21], "transform": [6, 17], "transmit": 3, "travers": 23, "treat": [2, 17], "tree": [23, 34], "trickl": 7, "true": [5, 9, 17, 21], "try": 17, "tupl": [9, 17], "turn": 21, "two": [17, 23], "type": [0, 2, 3, 4, 6, 9, 10, 13, 15, 17, 21, 23, 25, 27, 32], "type_list": 23, "type_ref": 23, "typet": 23, "typevar": [7, 23], "typic": [0, 6], "ultim": [7, 9, 21], "unconstrain": [15, 16], "under": [0, 4, 6, 7, 10, 17, 21, 23, 34], "underli": [1, 17, 18], "unicode61": [3, 28], "unifi": 17, "union": 23, "uniqu": [6, 15, 21], "unique_on": 3, "unlink": 23, "unnam": 23, "unspecifi": 10, "until": [7, 10, 23], "up": [0, 4, 7, 9, 10, 17, 18, 21, 23, 25, 32, 34], "updat": [7, 10, 17, 19, 20, 21, 22, 32], "upsert": 21, "upward": 23, "url": 16, "us": [1, 3, 4, 6, 7, 8, 9, 10, 15, 16, 17, 21, 23, 25, 28, 34], "usabl": 17, "usag": [21, 28], "user": [10, 17], "util": [0, 6, 23, 31, 32], "valid": 0, "valu": [3, 4, 9, 15, 17, 21, 23], "variabl": [4, 10, 13], "varieti": [15, 16], "variou": [8, 23], "veri": [15, 21], "verifi": 10, "vertic": 23, "via": [3, 10, 17, 18, 21], "viabl": 3, "viewcod": 34, "virtual": 28, "vss": [0, 2, 11, 19, 28, 32], "vssaccessor": [0, 2, 5, 14], "vssdatabas": [0, 11, 14], "vssmanag": [0, 14, 19, 22], "wa": [3, 15, 17, 23], "wai": [0, 3, 10, 15, 17, 23], "wait": 17, "want": [9, 17, 21, 23], "wast": [6, 15], "we": [0, 2, 3, 4, 9, 10, 15, 17, 21, 23], "well": [3, 7, 10, 17, 23, 34], "were": [15, 23], "what": [15, 16, 17, 21, 25], "whatev": 21, "when": [0, 6, 7, 10, 15, 17, 21, 23, 28, 34], "where": [0, 3, 4, 10, 15, 17, 21, 23], "wherea": [2, 21, 23], "wherein_dict": 3, "whether": [7, 9, 16, 23], "which": [0, 2, 4, 7, 9, 10, 17, 23], "while": [2, 3, 10, 15, 23], "whole": [4, 23], "why": [2, 23], "wide": [15, 16], "wider": 0, "wiki": 9, "wikipedia": 9, "wipe": 10, "wise": [15, 23], "within": [0, 6, 8, 10, 21, 23, 25, 34], "without": 9, "work": [2, 7, 17], "worri": 21, "wors": 21, "would": [0, 2, 3, 7, 10, 15, 17, 21, 23], "wouldn": [9, 23], "wrap": [0, 2, 4, 10, 15, 17, 18, 23, 25], "wrapper": [1, 7, 8, 15, 17, 18, 23], "write": [10, 34], "write_embed": [2, 5], "written": 34, "ye": 13, "yield": 4, "you": [0, 2, 17, 21, 23], "your": [2, 17]}, "titles": ["co3 package", "co3.accessor module", "co3.accessors package", "co3.accessors.fts module", "co3.accessors.sql module", "co3.accessors.vss module", "co3.co3 module", "co3.collector module", "co3.component module", "co3.components package", "co3.database module", "co3.databases package", "co3.databases.fts module", "co3.databases.sql module", "co3.databases.vss module", "co3.engine module", "co3.engines package", "co3.indexer module", "co3.manager module", "co3.managers package", "co3.managers.fts module", "co3.managers.sql module", "co3.managers.vss module", "co3.mapper module", "co3.mappers package", "co3.schema module", "co3.schemas package", "co3.util package", "co3.util.db module", "co3.util.regex module", "co3.util.types module", "co3", "co3 package docs", "Documentation", "Sphinx"], "titleterms": {"It": 23, "accessor": [1, 2, 3, 4, 5], "action": 6, "addit": 17, "altogeth": 23, "appropri": 23, "arbitrari": 23, "attach": 23, "autodoc": 34, "autoref": 32, "breakdown": 32, "can": 23, "class": 23, "co3": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32], "collector": 7, "compon": [8, 9, 23], "compos": 23, "composit": 0, "connect": 10, "content": 32, "context": 10, "databas": [10, 11, 12, 13, 14], "db": 28, "design": 23, "detail": [17, 32, 34], "dev": [10, 15, 23], "develop": [10, 23], "directli": 23, "directori": 34, "dissolv": 23, "doc": 32, "document": 33, "engin": [15, 16], "even": 23, "exampl": 17, "explicit": 10, "ft": [3, 12, 20], "group": 6, "have": 23, "i": 15, "index": 17, "inherit": 0, "its": 23, "just": 23, "least": 23, "level": 23, "list": 10, "log": 23, "mai": 23, "manag": [18, 19, 20, 21, 22], "mapper": [23, 24], "markdown": 34, "modul": [1, 3, 4, 5, 6, 7, 8, 10, 12, 13, 14, 15, 17, 18, 20, 21, 22, 23, 25, 28, 29, 30], "more": 23, "name": 23, "necessari": 15, "need": 23, "note": [10, 15, 23], "object": 15, "organ": 0, "over": 0, "overview": 32, "packag": [0, 2, 9, 11, 16, 19, 24, 26, 27, 32], "posit": 23, "reconsider": 23, "regex": 29, "schema": [23, 25, 26], "sphinx": 34, "sql": [4, 13, 21], "structur": [32, 34], "submodul": [0, 2, 11, 19, 27], "subpackag": 0, "syntax": 34, "thi": [15, 23], "todo": 10, "type": 30, "usag": 17, "util": [27, 28, 29, 30], "vss": [5, 14, 22], "why": 15}}) \ No newline at end of file diff --git a/docs/conf.py b/docs/conf.py index 68a0ba7..4b2ec62 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -15,13 +15,22 @@ author = 'Sam Griesemer' extensions = [ "sphinx.ext.autodoc", - "sphinx.ext.autosummary", - "sphinx.ext.viewcode", - "myst_parser", + "sphinx.ext.autosummary", # enables a directive to be specified manually that gathers + # module/object summary details in a table + "sphinx.ext.viewcode", # allow viewing source in the HTML pages + "myst_parser", # only really applies to manual docs; docstrings still need RST-like + "sphinx.ext.napoleon", # enables Google-style docstring formats + "sphinx_autodoc_typehints", # external extension that allows arg types to be inferred by type hints ] autosummary_generate = True autosummary_imported_members = True +# include __init__ definitions in autodoc +autodoc_default_options = { + 'special-members': '__init__', +} +#smartquotes = True + templates_path = ['_templates'] exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store'] diff --git a/docs/reference/documentation/index.md b/docs/reference/documentation/index.md deleted file mode 100644 index a14cdde..0000000 --- a/docs/reference/documentation/index.md +++ /dev/null @@ -1,8 +0,0 @@ -# Documentation - -```{toctree} -:hidden: - -sphinx -``` - diff --git a/docs/reference/documentation/sphinx.md b/docs/reference/documentation/sphinx.md deleted file mode 100644 index 33d6f27..0000000 --- a/docs/reference/documentation/sphinx.md +++ /dev/null @@ -1,111 +0,0 @@ -# Sphinx -The primary driver of this package's documentation is Sphinx's `autodoc` extension, -using the [Furo theme][1]. - -**High-level details**: - -- `sphinx-apidoc` generates package-based documentation to the `_autoref/` directory, - with navigation available under "Autoref" in the sidebar. -- Markdown-based documentation files are manually written under the `reference/` - directory, showing up under "Contents" in the sidebar. - -## Detailed directory structure -All files are placed under `docs/sphinx`: - -- `_`-prefixed are Sphinx-managed directories - * `_build/html/` houses output HTML files - * `_autoref/` is the target for module-based RST files written by `autodoc` -- `reference/`: houses all manually written documentation (totally separate from - auto-generated package docs) -- `conf.py`: single Sphinx configuration file -- `index.md`: documentation index, setups up a persistent sidebar across all other pages - -For manually written documentation under `reference/`, topics are nested as needed. Within -a nested directory `reference/`, an `index.md` should created with content like: - -``` -# - -\`\`\`{toctree} -:hidden: - -sub-topic-1.rst -sub-topic-2.rst -... -\`\`\` -``` - -This will add the nested directory to the sidebar navigation, using the name set under the -top-level header. See [Markdown syntax][#markdown-syntax] for more details on the syntax. - -## Sphinx autodoc -Sphinx's `autodoc` extension allows automatic generation of documents according to -(Python) subpackage structure and available docstrings. A few notes here: - -- In the `conf.py` file, autodoc is enabled by adding `"sphinx.ext.autodoc"` to - the extensions list. `"sphinx.ext.viewcode"` can also be added to provide - links to source code. -- Documents are actually generated by calling the `sphinx-apidoc` CLI command. The - current Makefile uses the following call: - - ```sh - sphinx-apidoc --module-first -o docs/sphinx/_autoref/ localsys - ``` - - This writes the automatically generated docs for modules in the package at the - local directory `localsys/` to the `docs/sphinx/_autoref` directory. These are - reStructuredText files by default. - * `--module-first` places the module-level descriptions at the top of the module page. - By default, this is placed at the bottom (oddly), and can be obscured by large lists - of subpackages if this flag isn't provided. - * See available `sphinx-apidoc` options [here][2], as well as more advanced config - [here][3]. - - -## Markdown syntax -The `myst_parser` extension enables Markdown (or something close to it) to be used when -writing documentation files. The Sphinx directives can be difficult to track, and -they change slightly under the MyST Markdown syntax. The following are a few common -blocks: - -**Page hierarchies**: the following will generate link hierarchy according to the provided -pages: - -``` -\`\`\`{toctree} -:maxdepth: -:caption:

              co3.Accessor

              co3.Accessor

              Access wrapper class for complex queries and easy integration with Composer tables.

              co3.Collector

              co3.Collector

              co3.CO3

              CO3: COllate, COllect, COmpose - conversion & DB insertion base

              co3.CO3

              Conversion & DB insertion base class

              co3.Database

              co3.Database

              Generic Database definition

              co3.Indexer

              co3.Indexer

              Indexer class

              co3.Manager

              co3.Manager

              Management wrapper class for table groupings.

              co3.Mapper

              co3.Mapper

              Mapper base class for housing schema components and managing relationships between CO3 types and storage components (of type C).

              co3.Component

              co3.Component

              co3.Schema

              co3.Schema

              co3.Engine

              co3.Engine

              Engine base class.

              -:hidden: - -example-file-1 -example-file-2 -example-dir/index -... -\`\`\` -``` - -- `:maxdepth:` limits the depth of nesting -- `:caption:` title for the group of pages -- `:hidden:` if provided, links will only show in the sidebar (hidden on the page) -- Constituent files: listed files will be rendered as a link directly. If a listed file - has a `{toctree}` directive, this tree will be rendered in place of the page's link as a - dropdown. The dropdown will be named according to the file's top-level heading, and - clicking directly on the dropdown header will show that page's content. Files found in - the tree will be placed as links under the dropdown, recursively subject to same rules - described here. - -**Include files**: the following will include file content -pages: - -``` -\`\`\`{include} README.md -\`\`\` -``` - -**Reference directives** - - -[1]: https://pradyunsg.me/furo/ -[2]: https://www.sphinx-doc.org/en/master/man/sphinx-apidoc.html -[3]: https://www.sphinx-doc.org/en/master/usage/extensions/autodoc.html# - diff --git a/requirements.txt b/requirements.txt index 65f68c4..a4e9d6b 100644 --- a/requirements.txt +++ b/requirements.txt @@ -3,6 +3,7 @@ sphinx sphinx-togglebutton furo myst-parser +sphinx-autodoc-typehints sqlalchemy numpy