cg = CodeGraph(':memory:')graph
CodeGraph
def CodeGraph(
path:str | pathlib.Path=':memory:'
):Call graph builder and query engine. Uses pyan3 for static analysis and custom AST parsing for dynamic edges. Stores everything in a SQLite database.
tables = {r[0] for r in cg.db.execute("SELECT name FROM sqlite_master WHERE type='table'")}
assert {'graph_edges','graph_nodes','co_dispatch','file_index'} <= tables, f"Missing tables: {tables}"
print("schema ok:", tables)schema ok: {'file_index', 'co_dispatch', 'graph_edges', 'pending_attr_calls', 'graph_nodes'}
dyn_edges
def dyn_edges(
src:str, module:str
)->list:All dynamic dispatch edges: decorator, connect_body, registration, co_dispatch.
from fastcore.test import test_eq_src = "from litesearch import *\ndef f(self): self.db.search(q)\ndef g(self): self.st.insert(x)"
_meta = {'m.f': {}, 'm.g': {}}
_hints = _attr_call_hints(sources={'m': _src}, meta=_meta)
test_eq(len(_hints), 2)
test_eq({h['method'] for h in _hints}, {'search','insert'})
assert all('litesearch' in h['pkgs'].split(',') for h in _hints)
# fn not in meta → excluded
test_eq(_attr_call_hints(sources={'m': _src}, meta={}), [])
# depth-1 self.method() and non-self calls → excluded
_src2 = "def f(self): self.direct(); other.thing()"
test_eq(_attr_call_hints(sources={'m2': _src2}, meta={'m2.f':{}}), [])
src="""
def f(self):
self.db.search(q)
self.store.insert(x)
self.direct() # depth 1 — skip
other.thing() # not self — skip
"""
_fn = [n for n in ast.walk(ast.parse(_src)) if isinstance(n, ast.FunctionDef)]
test_eq(_attr_calls(_fn[0]), {'search'})
test_eq(_attr_calls(_fn[1]), {'insert'})_SRC = '''
import flask
app = flask.Flask(__name__)
@app.route('/hello')
def hello(): pass
def setup(other_app):
other_app.register(hello)
'''
edges = dyn_edges(_SRC, 'mymod')
kinds = {e['kind'] for e in edges}
assert 'decorator' in kinds, f"Expected decorator edge, got: {edges}"
assert 'registration' in kinds, f"Expected registration edge, got: {edges}"
assert dyn_edges('def (broken', 'bad') == L()
print("_dyn_edges ok:", edges)_dyn_edges ok: [{'caller': 'mymod.app', 'callee': 'mymod.hello', 'kind': 'decorator', 'confidence': 0.75}, {'caller': 'mymod.setup', 'callee': 'mymod.hello', 'kind': 'connect_body', 'confidence': 0.9}, {'caller': 'mymod.other_app', 'callee': 'mymod.hello', 'kind': 'registration', 'confidence': 0.75}]
_DELEGATES_SRC = '''
from fastcore.all import delegates
def target(x, y, z=1): pass
@delegates(target)
def wrapper_pos(**kw): pass
@delegates(to=target)
def wrapper_kw(**kw): pass
@delegates
def bare(**kw): pass
@delegates()
def empty(**kw): pass
'''
dyn_edges(_DELEGATES_SRC, 'mymod')[{'caller': 'mymod.wrapper_pos',
'callee': 'mymod.target',
'kind': 'delegates',
'confidence': 0.85},
{'caller': 'mymod.wrapper_kw',
'callee': 'mymod.to=target',
'kind': 'delegates',
'confidence': 0.85}]
_PATCH_SRC = '''
from fastcore.all import patch, delegates
from apswutils.db import Database, Table, View
@patch
def basic(self:Database, x): pass
@patch(as_prop=True)
def prop(self:Database): pass
@patch(cls_method=True)
def cls_m(cls:Database): pass
@patch
def no_ann(self): pass
@patch
def union_m(self:Table|View): pass
'''
dyn_edges(_PATCH_SRC, 'mymod')[{'caller': 'mymod.Database',
'callee': 'mymod.basic',
'kind': 'patch',
'confidence': 0.9},
{'caller': 'mymod.Database',
'callee': 'mymod.prop',
'kind': 'patch',
'confidence': 0.9},
{'caller': 'mymod.Database',
'callee': 'mymod.cls_m',
'kind': 'patch',
'confidence': 0.9},
{'caller': 'mymod.Table',
'callee': 'mymod.union_m',
'kind': 'patch',
'confidence': 0.9},
{'caller': 'mymod.View',
'callee': 'mymod.union_m',
'kind': 'patch',
'confidence': 0.9}]
CodeGraph.resolve_attr_calls
def resolve_attr_calls()->CodeGraph:Post-sync: resolve pending attr_call hints into edges using populated graph_nodes.
static_edges
def static_edges(
sources:dict=None, filenames:list=None, root:str=None
)->tuple:Static call edges via pyan3. Provide either filenames+root or sources dict.
edges, meta = static_edges({"mod": "def foo(): pass\ndef bar(): foo()"})
meta['mod.foo']{'node': 'mod.foo', 'flavor': 'function', 'file': 'mod'}
assert all(k in edges[0] for k in ('caller','callee','kind','confidence'))
assert all(e['kind'] == 'static' for e in edges)static_edges({"bad": "def (: !!!"})pyan3 static analysis failed: invalid syntax (bad, line 1)
([], {})
from textwrap import dedent_src1 = dedent('''
class Database:
def query(self): pass
''')
_src2 = dedent('''
from mod1 import Database
def use_db():
db = Database()
db.query()
''')
_edges, _ = static_edges({"mod1": _src1, "mod2": _src2})
assert not any(e['callee'].startswith('None.') for e in _edges), \
f"None namespace callees found: {[e['callee'] for e in _edges if e['callee'].startswith('None.')]}"
print('cross-module callee fix ok:', [e['callee'] for e in _edges])cross-module callee fix ok: ['mod1.Database.query', 'mod1.Database']
static_edges(filenames=['/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'], root=Path('/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages'))([{'caller': 'litesearch.core._dtype_suffix',
'callee': 'litesearch.core._dtype_suffixes',
'kind': 'static',
'confidence': 1.0},
{'caller': 'litesearch.core._slug',
'callee': 'apswutils.utils.hash_record',
'kind': 'static',
'confidence': 1.0},
{'caller': 'litesearch.core.embed_chunk',
'callee': 'fastcore.all.L',
'kind': 'static',
'confidence': 1.0},
{'caller': 'litesearch.core.process_content',
'callee': 'litesearch.core.embed_chunk',
'kind': 'static',
'confidence': 1.0},
{'caller': 'litesearch.core.get_store',
'callee': 'fastlite.Database',
'kind': 'static',
'confidence': 1.0},
{'caller': 'litesearch.core.get_store',
'callee': 'fastcore.all.patch',
'kind': 'static',
'confidence': 1.0},
{'caller': 'litesearch.core._register_ann',
'callee': 'litesearch.core._dtype_suffix',
'kind': 'static',
'confidence': 1.0},
{'caller': 'litesearch.core._register_ann',
'callee': 'fastlite.Database',
'kind': 'static',
'confidence': 1.0},
{'caller': 'litesearch.core._register_ann',
'callee': 'fastcore.all.patch',
'kind': 'static',
'confidence': 1.0},
{'caller': 'litesearch.core.ann_indices',
'callee': 'fastlite.Database',
'kind': 'static',
'confidence': 1.0},
{'caller': 'litesearch.core.ann_indices',
'callee': 'fastcore.all.patch',
'kind': 'static',
'confidence': 1.0},
{'caller': 'litesearch.core._ann_meta',
'callee': 'fastlite.Database',
'kind': 'static',
'confidence': 1.0},
{'caller': 'litesearch.core._ann_meta',
'callee': 'fastcore.all.patch',
'kind': 'static',
'confidence': 1.0},
{'caller': 'litesearch.core._ann_meta',
'callee': 'fastcore.all.first',
'kind': 'static',
'confidence': 1.0},
{'caller': 'litesearch.core.get_index',
'callee': 'fastlite.Database',
'kind': 'static',
'confidence': 1.0},
{'caller': 'litesearch.core.get_index',
'callee': 'litesearch.core._usearch_metric',
'kind': 'static',
'confidence': 1.0},
{'caller': 'litesearch.core.get_index',
'callee': 'fastcore.all.patch',
'kind': 'static',
'confidence': 1.0},
{'caller': 'litesearch.core.get_index',
'callee': 'fastcore.all.merge',
'kind': 'static',
'confidence': 1.0},
{'caller': 'litesearch.core.get_index',
'callee': 'usearch.index.Index',
'kind': 'static',
'confidence': 1.0},
{'caller': 'litesearch.core.get_index',
'callee': 'fastcore.all.Path',
'kind': 'static',
'confidence': 1.0},
{'caller': 'litesearch.core._save_index',
'callee': 'fastlite.Database',
'kind': 'static',
'confidence': 1.0},
{'caller': 'litesearch.core._save_index',
'callee': 'fastcore.all.patch',
'kind': 'static',
'confidence': 1.0},
{'caller': 'litesearch.core.fts_search',
'callee': 'apswutils.db.Table',
'kind': 'static',
'confidence': 1.0},
{'caller': 'litesearch.core.fts_search',
'callee': 'fastcore.all.patch',
'kind': 'static',
'confidence': 1.0},
{'caller': 'litesearch.core.fts_search',
'callee': 'fastcore.all.merge',
'kind': 'static',
'confidence': 1.0},
{'caller': 'litesearch.core.vec_search',
'callee': 'apswutils.db.Table',
'kind': 'static',
'confidence': 1.0},
{'caller': 'litesearch.core.vec_search',
'callee': 'fastcore.all.patch',
'kind': 'static',
'confidence': 1.0},
{'caller': 'litesearch.core.vec_search',
'callee': 'fastcore.all.ifnone',
'kind': 'static',
'confidence': 1.0},
{'caller': 'litesearch.core.vec_search',
'callee': 'litesearch.core._dtype_suffix',
'kind': 'static',
'confidence': 1.0},
{'caller': 'litesearch.core.ann_search',
'callee': 'fastcore.all.L',
'kind': 'static',
'confidence': 1.0},
{'caller': 'litesearch.core.ann_search',
'callee': 'apswutils.db.Table',
'kind': 'static',
'confidence': 1.0},
{'caller': 'litesearch.core.ann_search',
'callee': 'litesearch.core._in',
'kind': 'static',
'confidence': 1.0},
{'caller': 'litesearch.core.ann_search',
'callee': 'fastcore.all.patch',
'kind': 'static',
'confidence': 1.0},
{'caller': 'litesearch.core.ann_search',
'callee': 'litesearch.core._rid',
'kind': 'static',
'confidence': 1.0},
{'caller': 'litesearch.core._idx_remove',
'callee': 'apswutils.db.Table',
'kind': 'static',
'confidence': 1.0},
{'caller': 'litesearch.core._idx_remove',
'callee': 'fastcore.all.patch',
'kind': 'static',
'confidence': 1.0},
{'caller': 'litesearch.core._sync_index',
'callee': 'apswutils.db.Table',
'kind': 'static',
'confidence': 1.0},
{'caller': 'litesearch.core._sync_index',
'callee': 'litesearch.core._in',
'kind': 'static',
'confidence': 1.0},
{'caller': 'litesearch.core._sync_index',
'callee': 'fastcore.all.patch',
'kind': 'static',
'confidence': 1.0},
{'caller': 'litesearch.core._sync_index',
'callee': 'litesearch.core._rid',
'kind': 'static',
'confidence': 1.0},
{'caller': 'litesearch.core._sync_index',
'callee': 'fastcore.all.L',
'kind': 'static',
'confidence': 1.0},
{'caller': 'litesearch.core.sync',
'callee': 'fastcore.all.not_',
'kind': 'static',
'confidence': 1.0},
{'caller': 'litesearch.core.sync',
'callee': 'fastcore.all.in_',
'kind': 'static',
'confidence': 1.0},
{'caller': 'litesearch.core.sync',
'callee': 'fastcore.all.L',
'kind': 'static',
'confidence': 1.0},
{'caller': 'litesearch.core.sync',
'callee': 'litesearch.core._slug',
'kind': 'static',
'confidence': 1.0},
{'caller': 'litesearch.core.sync',
'callee': 'apswutils.db.Table',
'kind': 'static',
'confidence': 1.0},
{'caller': 'litesearch.core.sync',
'callee': 'litesearch.core.process_content',
'kind': 'static',
'confidence': 1.0},
{'caller': 'litesearch.core.sync',
'callee': 'fastcore.all.filter_keys',
'kind': 'static',
'confidence': 1.0},
{'caller': 'litesearch.core.sync',
'callee': 'litesearch.core._np_dtype',
'kind': 'static',
'confidence': 1.0},
{'caller': 'litesearch.core.sync',
'callee': 'litesearch.core._in',
'kind': 'static',
'confidence': 1.0},
{'caller': 'litesearch.core.sync',
'callee': 'fastcore.all.patch',
'kind': 'static',
'confidence': 1.0},
{'caller': 'litesearch.core.sync',
'callee': 'litesearch.core._rid',
'kind': 'static',
'confidence': 1.0},
{'caller': 'litesearch.core.sync.dictcomp.0',
'callee': 'litesearch.core._slug',
'kind': 'static',
'confidence': 1.0},
{'caller': 'litesearch.core.sync.dictcomp.0',
'callee': 'fastcore.all.L',
'kind': 'static',
'confidence': 1.0},
{'caller': 'litesearch.core.rebuild_index',
'callee': 'fastcore.all.L',
'kind': 'static',
'confidence': 1.0},
{'caller': 'litesearch.core.rebuild_index',
'callee': 'apswutils.db.Table',
'kind': 'static',
'confidence': 1.0},
{'caller': 'litesearch.core.rebuild_index',
'callee': 'litesearch.core._np_dtype',
'kind': 'static',
'confidence': 1.0},
{'caller': 'litesearch.core.rebuild_index',
'callee': 'fastcore.all.patch',
'kind': 'static',
'confidence': 1.0},
{'caller': 'litesearch.core.rebuild_index',
'callee': 'litesearch.core._rid',
'kind': 'static',
'confidence': 1.0},
{'caller': 'litesearch.core.rrf_merge',
'callee': 'fastcore.all.merge',
'kind': 'static',
'confidence': 1.0},
{'caller': 'litesearch.core.database',
'callee': 'fastlite.Database',
'kind': 'static',
'confidence': 1.0},
{'caller': 'litesearch.core.database',
'callee': 'usearch.sqlite_path',
'kind': 'static',
'confidence': 1.0},
{'caller': 'litesearch.core.database',
'callee': 'fastcore.all.Path',
'kind': 'static',
'confidence': 1.0},
{'caller': 'litesearch.core._get_reranker',
'callee': 'litesearch.core._RERANKERS',
'kind': 'static',
'confidence': 1.0},
{'caller': 'litesearch.core._get_reranker',
'callee': 'flashrank.Ranker',
'kind': 'static',
'confidence': 1.0},
{'caller': 'litesearch.core.rerank_hits',
'callee': 'flashrank.RerankRequest',
'kind': 'static',
'confidence': 1.0},
{'caller': 'litesearch.core.rerank_hits',
'callee': 'litesearch.core._get_reranker',
'kind': 'static',
'confidence': 1.0},
{'caller': 'litesearch.core.rerank_hits.listcomp.1',
'callee': 'litesearch.core._get_reranker',
'kind': 'static',
'confidence': 1.0},
{'caller': 'litesearch.core.search',
'callee': 'litesearch.core.rerank_hits',
'kind': 'static',
'confidence': 1.0},
{'caller': 'litesearch.core.search',
'callee': 'fastcore.all.L',
'kind': 'static',
'confidence': 1.0},
{'caller': 'litesearch.core.search',
'callee': 'litesearch.core.rrf_merge',
'kind': 'static',
'confidence': 1.0},
{'caller': 'litesearch.core.search',
'callee': 'fastlite.Database',
'kind': 'static',
'confidence': 1.0},
{'caller': 'litesearch.core.search',
'callee': 'fastcore.all.patch',
'kind': 'static',
'confidence': 1.0},
{'caller': 'litesearch.core.search',
'callee': 'fastcore.all.ifnone',
'kind': 'static',
'confidence': 1.0}],
{'litesearch.core.str': {'node': 'litesearch.core.str',
'flavor': 'attribute',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core._dtype_suffix.str': {'node': 'litesearch.core._dtype_suffix.str',
'flavor': 'attribute',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core._in.str': {'node': 'litesearch.core._in.str',
'flavor': 'attribute',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core._slug.str': {'node': 'litesearch.core._slug.str',
'flavor': 'attribute',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core.embed_chunk.str': {'node': 'litesearch.core.embed_chunk.str',
'flavor': 'attribute',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core.embed_chunk.lambda.0.str': {'node': 'litesearch.core.embed_chunk.lambda.0.str',
'flavor': 'attribute',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core.process_content.str': {'node': 'litesearch.core.process_content.str',
'flavor': 'attribute',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core.get_store.str': {'node': 'litesearch.core.get_store.str',
'flavor': 'attribute',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core._register_ann.str': {'node': 'litesearch.core._register_ann.str',
'flavor': 'attribute',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core.ann_indices.str': {'node': 'litesearch.core.ann_indices.str',
'flavor': 'attribute',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core._ann_meta.str': {'node': 'litesearch.core._ann_meta.str',
'flavor': 'attribute',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core.get_index.str': {'node': 'litesearch.core.get_index.str',
'flavor': 'attribute',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core._save_index.str': {'node': 'litesearch.core._save_index.str',
'flavor': 'attribute',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core.fts_search.str': {'node': 'litesearch.core.fts_search.str',
'flavor': 'attribute',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core.vec_search.str': {'node': 'litesearch.core.vec_search.str',
'flavor': 'attribute',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core.vec_search.listcomp.0.str': {'node': 'litesearch.core.vec_search.listcomp.0.str',
'flavor': 'attribute',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core._rid.str': {'node': 'litesearch.core._rid.str',
'flavor': 'attribute',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core.ann_search.str': {'node': 'litesearch.core.ann_search.str',
'flavor': 'attribute',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core.ann_search.listcomp.0.str': {'node': 'litesearch.core.ann_search.listcomp.0.str',
'flavor': 'attribute',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core.ann_search.lambda.0.str': {'node': 'litesearch.core.ann_search.lambda.0.str',
'flavor': 'attribute',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core._idx_remove.str': {'node': 'litesearch.core._idx_remove.str',
'flavor': 'attribute',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core._sync_index.str': {'node': 'litesearch.core._sync_index.str',
'flavor': 'attribute',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core._sync_index.lambda.0.str': {'node': 'litesearch.core._sync_index.lambda.0.str',
'flavor': 'attribute',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core.sync.str': {'node': 'litesearch.core.sync.str',
'flavor': 'attribute',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core.sync.lambda.0.str': {'node': 'litesearch.core.sync.lambda.0.str',
'flavor': 'attribute',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core.sync.dictcomp.0.str': {'node': 'litesearch.core.sync.dictcomp.0.str',
'flavor': 'attribute',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core.rebuild_index.str': {'node': 'litesearch.core.rebuild_index.str',
'flavor': 'attribute',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core.rebuild_index.lambda.0.str': {'node': 'litesearch.core.rebuild_index.lambda.0.str',
'flavor': 'attribute',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core.rrf_merge.str': {'node': 'litesearch.core.rrf_merge.str',
'flavor': 'attribute',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core.rrf_merge.lambda.0.str': {'node': 'litesearch.core.rrf_merge.lambda.0.str',
'flavor': 'attribute',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core.database.str': {'node': 'litesearch.core.database.str',
'flavor': 'attribute',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core._get_reranker.str': {'node': 'litesearch.core._get_reranker.str',
'flavor': 'attribute',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core.rerank_hits.str': {'node': 'litesearch.core.rerank_hits.str',
'flavor': 'attribute',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core.rerank_hits.listcomp.0.str': {'node': 'litesearch.core.rerank_hits.listcomp.0.str',
'flavor': 'attribute',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core.rerank_hits.listcomp.1.str': {'node': 'litesearch.core.rerank_hits.listcomp.1.str',
'flavor': 'attribute',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core.search.str': {'node': 'litesearch.core.search.str',
'flavor': 'attribute',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core.search.lambda.0.str': {'node': 'litesearch.core.search.lambda.0.str',
'flavor': 'attribute',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core.__all__': {'node': 'litesearch.core.__all__',
'flavor': 'name',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'fastcore.all.Path': {'node': 'fastcore.all.Path',
'flavor': 'importeditem',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'fastcore.all.Generator': {'node': 'fastcore.all.Generator',
'flavor': 'importeditem',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'fastcore.all.patch': {'node': 'fastcore.all.patch',
'flavor': 'importeditem',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'fastcore.all.merge': {'node': 'fastcore.all.merge',
'flavor': 'importeditem',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'fastcore.all.ifnone': {'node': 'fastcore.all.ifnone',
'flavor': 'importeditem',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'fastcore.all.first': {'node': 'fastcore.all.first',
'flavor': 'importeditem',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'fastcore.all.L': {'node': 'fastcore.all.L',
'flavor': 'importeditem',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'fastcore.all.filter_keys': {'node': 'fastcore.all.filter_keys',
'flavor': 'importeditem',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'fastcore.all.not_': {'node': 'fastcore.all.not_',
'flavor': 'importeditem',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'fastcore.all.in_': {'node': 'fastcore.all.in_',
'flavor': 'importeditem',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'fastcore.all.parallel': {'node': 'fastcore.all.parallel',
'flavor': 'importeditem',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'fastlite.Database': {'node': 'fastlite.Database',
'flavor': 'importeditem',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'apswutils.db.Table': {'node': 'apswutils.db.Table',
'flavor': 'importeditem',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'apswutils.utils.cursor_row2dict': {'node': 'apswutils.utils.cursor_row2dict',
'flavor': 'importeditem',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'apswutils.utils.hash_record': {'node': 'apswutils.utils.hash_record',
'flavor': 'importeditem',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'numpy.int8': {'node': 'numpy.int8',
'flavor': 'attribute',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'numpy.float16': {'node': 'numpy.float16',
'flavor': 'attribute',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'numpy.float64': {'node': 'numpy.float64',
'flavor': 'attribute',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'numpy.float32': {'node': 'numpy.float32',
'flavor': 'attribute',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core._dtype_suffixes': {'node': 'litesearch.core._dtype_suffixes',
'flavor': 'name',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core._dtype_suffix': {'node': 'litesearch.core._dtype_suffix',
'flavor': 'function',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core._dtype_suffix.^^^argument^^^': {'node': 'litesearch.core._dtype_suffix.^^^argument^^^',
'flavor': 'unspecified',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core._in.^^^argument^^^': {'node': 'litesearch.core._in.^^^argument^^^',
'flavor': 'unspecified',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core._slug.^^^argument^^^': {'node': 'litesearch.core._slug.^^^argument^^^',
'flavor': 'unspecified',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core.embed_chunk.^^^argument^^^': {'node': 'litesearch.core.embed_chunk.^^^argument^^^',
'flavor': 'unspecified',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core.embed_chunk.lambda.0.^^^argument^^^': {'node': 'litesearch.core.embed_chunk.lambda.0.^^^argument^^^',
'flavor': 'unspecified',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core.process_content.^^^argument^^^': {'node': 'litesearch.core.process_content.^^^argument^^^',
'flavor': 'unspecified',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core.get_store.^^^argument^^^': {'node': 'litesearch.core.get_store.^^^argument^^^',
'flavor': 'unspecified',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core._register_ann.^^^argument^^^': {'node': 'litesearch.core._register_ann.^^^argument^^^',
'flavor': 'unspecified',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core.ann_indices.^^^argument^^^': {'node': 'litesearch.core.ann_indices.^^^argument^^^',
'flavor': 'unspecified',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core._ann_meta.^^^argument^^^': {'node': 'litesearch.core._ann_meta.^^^argument^^^',
'flavor': 'unspecified',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core.get_index.^^^argument^^^': {'node': 'litesearch.core.get_index.^^^argument^^^',
'flavor': 'unspecified',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core._save_index.^^^argument^^^': {'node': 'litesearch.core._save_index.^^^argument^^^',
'flavor': 'unspecified',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core.fts_search.^^^argument^^^': {'node': 'litesearch.core.fts_search.^^^argument^^^',
'flavor': 'unspecified',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core.vec_search.^^^argument^^^': {'node': 'litesearch.core.vec_search.^^^argument^^^',
'flavor': 'unspecified',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core._rid.^^^argument^^^': {'node': 'litesearch.core._rid.^^^argument^^^',
'flavor': 'unspecified',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core.ann_search.^^^argument^^^': {'node': 'litesearch.core.ann_search.^^^argument^^^',
'flavor': 'unspecified',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core.ann_search.lambda.0.^^^argument^^^': {'node': 'litesearch.core.ann_search.lambda.0.^^^argument^^^',
'flavor': 'unspecified',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core._idx_remove.^^^argument^^^': {'node': 'litesearch.core._idx_remove.^^^argument^^^',
'flavor': 'unspecified',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core._sync_index.^^^argument^^^': {'node': 'litesearch.core._sync_index.^^^argument^^^',
'flavor': 'unspecified',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core._sync_index.lambda.0.^^^argument^^^': {'node': 'litesearch.core._sync_index.lambda.0.^^^argument^^^',
'flavor': 'unspecified',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core.sync.^^^argument^^^': {'node': 'litesearch.core.sync.^^^argument^^^',
'flavor': 'unspecified',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core.sync.lambda.0.^^^argument^^^': {'node': 'litesearch.core.sync.lambda.0.^^^argument^^^',
'flavor': 'unspecified',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core.rebuild_index.^^^argument^^^': {'node': 'litesearch.core.rebuild_index.^^^argument^^^',
'flavor': 'unspecified',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core.rebuild_index.lambda.0.^^^argument^^^': {'node': 'litesearch.core.rebuild_index.lambda.0.^^^argument^^^',
'flavor': 'unspecified',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core.rrf_merge.^^^argument^^^': {'node': 'litesearch.core.rrf_merge.^^^argument^^^',
'flavor': 'unspecified',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core.rrf_merge.lambda.0.^^^argument^^^': {'node': 'litesearch.core.rrf_merge.lambda.0.^^^argument^^^',
'flavor': 'unspecified',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core.database.^^^argument^^^': {'node': 'litesearch.core.database.^^^argument^^^',
'flavor': 'unspecified',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core._get_reranker.^^^argument^^^': {'node': 'litesearch.core._get_reranker.^^^argument^^^',
'flavor': 'unspecified',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core.rerank_hits.^^^argument^^^': {'node': 'litesearch.core.rerank_hits.^^^argument^^^',
'flavor': 'unspecified',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core.search.^^^argument^^^': {'node': 'litesearch.core.search.^^^argument^^^',
'flavor': 'unspecified',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core.search.lambda.0.^^^argument^^^': {'node': 'litesearch.core.search.lambda.0.^^^argument^^^',
'flavor': 'unspecified',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core.search.lambda.1.^^^argument^^^': {'node': 'litesearch.core.search.lambda.1.^^^argument^^^',
'flavor': 'unspecified',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core.search.lambda.2.^^^argument^^^': {'node': 'litesearch.core.search.lambda.2.^^^argument^^^',
'flavor': 'unspecified',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core._usearch_metric': {'node': 'litesearch.core._usearch_metric',
'flavor': 'name',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core._np_dtype': {'node': 'litesearch.core._np_dtype',
'flavor': 'name',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core._in': {'node': 'litesearch.core._in',
'flavor': 'function',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'str.join': {'node': 'str.join',
'flavor': 'attribute',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core._slug': {'node': 'litesearch.core._slug',
'flavor': 'function',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core._slug.NoneType': {'node': 'litesearch.core._slug.NoneType',
'flavor': 'attribute',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core.NoneType': {'node': 'litesearch.core.NoneType',
'flavor': 'attribute',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core._register_ann.NoneType': {'node': 'litesearch.core._register_ann.NoneType',
'flavor': 'attribute',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core._ann_meta.NoneType': {'node': 'litesearch.core._ann_meta.NoneType',
'flavor': 'attribute',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core.fts_search.NoneType': {'node': 'litesearch.core.fts_search.NoneType',
'flavor': 'attribute',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core.vec_search.NoneType': {'node': 'litesearch.core.vec_search.NoneType',
'flavor': 'attribute',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core.sync.setcomp.0.NoneType': {'node': 'litesearch.core.sync.setcomp.0.NoneType',
'flavor': 'attribute',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core.rebuild_index.NoneType': {'node': 'litesearch.core.rebuild_index.NoneType',
'flavor': 'attribute',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core.search.NoneType': {'node': 'litesearch.core.search.NoneType',
'flavor': 'attribute',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core.embed_chunk': {'node': 'litesearch.core.embed_chunk',
'flavor': 'function',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core.embed_chunk.lambda.0': {'node': 'litesearch.core.embed_chunk.lambda.0',
'flavor': 'scope',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core.ann_search.lambda.0': {'node': 'litesearch.core.ann_search.lambda.0',
'flavor': 'scope',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core._sync_index.lambda.0': {'node': 'litesearch.core._sync_index.lambda.0',
'flavor': 'scope',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core.sync.lambda.0': {'node': 'litesearch.core.sync.lambda.0',
'flavor': 'scope',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core.rebuild_index.lambda.0': {'node': 'litesearch.core.rebuild_index.lambda.0',
'flavor': 'scope',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core.rrf_merge.lambda.0': {'node': 'litesearch.core.rrf_merge.lambda.0',
'flavor': 'scope',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core.search.lambda.0': {'node': 'litesearch.core.search.lambda.0',
'flavor': 'scope',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core.embed_chunk.lambda.0.^^^argument^^^.get': {'node': 'litesearch.core.embed_chunk.lambda.0.^^^argument^^^.get',
'flavor': 'attribute',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core.sync.lambda.0.^^^argument^^^.get': {'node': 'litesearch.core.sync.lambda.0.^^^argument^^^.get',
'flavor': 'attribute',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'fastcore.all.L.get': {'node': 'fastcore.all.L.get',
'flavor': 'attribute',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'fastcore.all.L.itemgot': {'node': 'fastcore.all.L.itemgot',
'flavor': 'attribute',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'*.zip.__iter__': {'node': '*.zip.__iter__',
'flavor': 'method',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core.get_index.str.__iter__': {'node': 'litesearch.core.get_index.str.__iter__',
'flavor': 'method',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core.NoneType.__iter__': {'node': 'litesearch.core.NoneType.__iter__',
'flavor': 'method',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core.ann_search.^^^argument^^^.db.__iter__': {'node': 'litesearch.core.ann_search.^^^argument^^^.db.__iter__',
'flavor': 'method',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core._idx_remove.^^^argument^^^.__iter__': {'node': 'litesearch.core._idx_remove.^^^argument^^^.__iter__',
'flavor': 'method',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'fastcore.all.L.__iter__': {'node': 'fastcore.all.L.__iter__',
'flavor': 'method',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'fastcore.all.L.itemgot.__iter__': {'node': 'fastcore.all.L.itemgot.__iter__',
'flavor': 'method',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'*.enumerate.__iter__': {'node': '*.enumerate.__iter__',
'flavor': 'method',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core._get_reranker.__iter__': {'node': 'litesearch.core._get_reranker.__iter__',
'flavor': 'method',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'*.zip.__next__': {'node': '*.zip.__next__',
'flavor': 'method',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core.get_index.str.__next__': {'node': 'litesearch.core.get_index.str.__next__',
'flavor': 'method',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core.NoneType.__next__': {'node': 'litesearch.core.NoneType.__next__',
'flavor': 'method',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core.ann_search.^^^argument^^^.db.__next__': {'node': 'litesearch.core.ann_search.^^^argument^^^.db.__next__',
'flavor': 'method',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core._idx_remove.^^^argument^^^.__next__': {'node': 'litesearch.core._idx_remove.^^^argument^^^.__next__',
'flavor': 'method',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'fastcore.all.L.__next__': {'node': 'fastcore.all.L.__next__',
'flavor': 'method',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'fastcore.all.L.itemgot.__next__': {'node': 'fastcore.all.L.itemgot.__next__',
'flavor': 'method',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'*.enumerate.__next__': {'node': '*.enumerate.__next__',
'flavor': 'method',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core._get_reranker.__next__': {'node': 'litesearch.core._get_reranker.__next__',
'flavor': 'method',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'numpy.asarray': {'node': 'numpy.asarray',
'flavor': 'attribute',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core.process_content': {'node': 'litesearch.core.process_content',
'flavor': 'function',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core.bool': {'node': 'litesearch.core.bool',
'flavor': 'attribute',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core.process_content.bool': {'node': 'litesearch.core.process_content.bool',
'flavor': 'attribute',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core.get_store.bool': {'node': 'litesearch.core.get_store.bool',
'flavor': 'attribute',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core._register_ann.bool': {'node': 'litesearch.core._register_ann.bool',
'flavor': 'attribute',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core.rebuild_index.bool': {'node': 'litesearch.core.rebuild_index.bool',
'flavor': 'attribute',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core.rrf_merge.bool': {'node': 'litesearch.core.rrf_merge.bool',
'flavor': 'attribute',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core.database.bool': {'node': 'litesearch.core.database.bool',
'flavor': 'attribute',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core.search.bool': {'node': 'litesearch.core.search.bool',
'flavor': 'attribute',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core.process_content.^^^argument^^^.insert_all': {'node': 'litesearch.core.process_content.^^^argument^^^.insert_all',
'flavor': 'attribute',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core.get_store': {'node': 'litesearch.core.get_store',
'flavor': 'function',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core.int': {'node': 'litesearch.core.int',
'flavor': 'attribute',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core.vec_search.int': {'node': 'litesearch.core.vec_search.int',
'flavor': 'attribute',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core.ann_search.int': {'node': 'litesearch.core.ann_search.int',
'flavor': 'attribute',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core._sync_index.int': {'node': 'litesearch.core._sync_index.int',
'flavor': 'attribute',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core.rebuild_index.int': {'node': 'litesearch.core.rebuild_index.int',
'flavor': 'attribute',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core.search.int': {'node': 'litesearch.core.search.int',
'flavor': 'attribute',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core.ann_search.lambda.0.float': {'node': 'litesearch.core.ann_search.lambda.0.float',
'flavor': 'attribute',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core.rrf_merge.float': {'node': 'litesearch.core.rrf_merge.float',
'flavor': 'attribute',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core.get_store.^^^argument^^^.t': {'node': 'litesearch.core.get_store.^^^argument^^^.t',
'flavor': 'attribute',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core._register_ann.^^^argument^^^.t': {'node': 'litesearch.core._register_ann.^^^argument^^^.t',
'flavor': 'attribute',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core._ann_meta.^^^argument^^^.t': {'node': 'litesearch.core._ann_meta.^^^argument^^^.t',
'flavor': 'attribute',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core.search.^^^argument^^^.t': {'node': 'litesearch.core.search.^^^argument^^^.t',
'flavor': 'attribute',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core.get_store.^^^argument^^^._register_ann': {'node': 'litesearch.core.get_store.^^^argument^^^._register_ann',
'flavor': 'attribute',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core._register_ann': {'node': 'litesearch.core._register_ann',
'flavor': 'function',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core._register_ann.^^^argument^^^.conn': {'node': 'litesearch.core._register_ann.^^^argument^^^.conn',
'flavor': 'attribute',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'fastlite.Database.conn': {'node': 'fastlite.Database.conn',
'flavor': 'attribute',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core.ann_indices': {'node': 'litesearch.core.ann_indices',
'flavor': 'function',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core.get_index.^^^argument^^^.ann_indices': {'node': 'litesearch.core.get_index.^^^argument^^^.ann_indices',
'flavor': 'attribute',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core._save_index.^^^argument^^^.ann_indices': {'node': 'litesearch.core._save_index.^^^argument^^^.ann_indices',
'flavor': 'attribute',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core.ann_indices.^^^argument^^^._ann_indices': {'node': 'litesearch.core.ann_indices.^^^argument^^^._ann_indices',
'flavor': 'attribute',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core._ann_meta': {'node': 'litesearch.core._ann_meta',
'flavor': 'function',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core.get_index.^^^argument^^^._ann_meta': {'node': 'litesearch.core.get_index.^^^argument^^^._ann_meta',
'flavor': 'attribute',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core._save_index.^^^argument^^^._ann_meta': {'node': 'litesearch.core._save_index.^^^argument^^^._ann_meta',
'flavor': 'attribute',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core.get_index': {'node': 'litesearch.core.get_index',
'flavor': 'function',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'usearch.index.Index': {'node': 'usearch.index.Index',
'flavor': 'importeditem',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core.get_index.dictcomp.0': {'node': 'litesearch.core.get_index.dictcomp.0',
'flavor': 'scope',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core.sync.dictcomp.0': {'node': 'litesearch.core.sync.dictcomp.0',
'flavor': 'scope',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'usearch.index.Index.load': {'node': 'usearch.index.Index.load',
'flavor': 'attribute',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core._save_index': {'node': 'litesearch.core._save_index',
'flavor': 'function',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core.fts_search': {'node': 'litesearch.core.fts_search',
'flavor': 'function',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core.fts_search.^^^argument^^^.db': {'node': 'litesearch.core.fts_search.^^^argument^^^.db',
'flavor': 'attribute',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core.vec_search.^^^argument^^^.db': {'node': 'litesearch.core.vec_search.^^^argument^^^.db',
'flavor': 'attribute',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core.ann_search.^^^argument^^^.db': {'node': 'litesearch.core.ann_search.^^^argument^^^.db',
'flavor': 'attribute',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core._sync_index.^^^argument^^^.db': {'node': 'litesearch.core._sync_index.^^^argument^^^.db',
'flavor': 'attribute',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core.sync.^^^argument^^^.db': {'node': 'litesearch.core.sync.^^^argument^^^.db',
'flavor': 'attribute',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core.rebuild_index.^^^argument^^^.db': {'node': 'litesearch.core.rebuild_index.^^^argument^^^.db',
'flavor': 'attribute',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core.fts_search.^^^argument^^^.search_sql': {'node': 'litesearch.core.fts_search.^^^argument^^^.search_sql',
'flavor': 'attribute',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core.vec_search': {'node': 'litesearch.core.vec_search',
'flavor': 'function',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core.vec_search.listcomp.0': {'node': 'litesearch.core.vec_search.listcomp.0',
'flavor': 'scope',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core.ann_search.listcomp.0': {'node': 'litesearch.core.ann_search.listcomp.0',
'flavor': 'scope',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core._idx_remove.listcomp.0': {'node': 'litesearch.core._idx_remove.listcomp.0',
'flavor': 'scope',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core._sync_index.listcomp.0': {'node': 'litesearch.core._sync_index.listcomp.0',
'flavor': 'scope',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core.rebuild_index.listcomp.0': {'node': 'litesearch.core.rebuild_index.listcomp.0',
'flavor': 'scope',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core.rerank_hits.listcomp.0': {'node': 'litesearch.core.rerank_hits.listcomp.0',
'flavor': 'scope',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core.vec_search.^^^argument^^^.name': {'node': 'litesearch.core.vec_search.^^^argument^^^.name',
'flavor': 'attribute',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core.ann_search.^^^argument^^^.name': {'node': 'litesearch.core.ann_search.^^^argument^^^.name',
'flavor': 'attribute',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core._sync_index.^^^argument^^^.name': {'node': 'litesearch.core._sync_index.^^^argument^^^.name',
'flavor': 'attribute',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core.sync.^^^argument^^^.name': {'node': 'litesearch.core.sync.^^^argument^^^.name',
'flavor': 'attribute',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core.rebuild_index.^^^argument^^^.name': {'node': 'litesearch.core.rebuild_index.^^^argument^^^.name',
'flavor': 'attribute',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core._rid': {'node': 'litesearch.core._rid',
'flavor': 'function',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core.ann_search': {'node': 'litesearch.core.ann_search',
'flavor': 'function',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core.ann_search.^^^argument^^^.db.size': {'node': 'litesearch.core.ann_search.^^^argument^^^.db.size',
'flavor': 'attribute',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core.rebuild_index.^^^argument^^^.db.size': {'node': 'litesearch.core.rebuild_index.^^^argument^^^.db.size',
'flavor': 'attribute',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'numpy.frombuffer': {'node': 'numpy.frombuffer',
'flavor': 'attribute',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core.ann_search.^^^argument^^^.db.search': {'node': 'litesearch.core.ann_search.^^^argument^^^.db.search',
'flavor': 'attribute',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core.search': {'node': 'litesearch.core.search',
'flavor': 'function',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core.ann_search.^^^argument^^^.db.search.keys': {'node': 'litesearch.core.ann_search.^^^argument^^^.db.search.keys',
'flavor': 'attribute',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core.sync.dictcomp.0.keys': {'node': 'litesearch.core.sync.dictcomp.0.keys',
'flavor': 'attribute',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'numpy.atleast_1d': {'node': 'numpy.atleast_1d',
'flavor': 'attribute',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core.ann_search.^^^argument^^^.db.search.distances': {'node': 'litesearch.core.ann_search.^^^argument^^^.db.search.distances',
'flavor': 'attribute',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core._idx_remove': {'node': 'litesearch.core._idx_remove',
'flavor': 'function',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core._sync_index.^^^argument^^^._idx_remove': {'node': 'litesearch.core._sync_index.^^^argument^^^._idx_remove',
'flavor': 'attribute',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core._idx_remove.^^^argument^^^.contains': {'node': 'litesearch.core._idx_remove.^^^argument^^^.contains',
'flavor': 'attribute',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'numpy.int64': {'node': 'numpy.int64',
'flavor': 'attribute',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'numpy.array': {'node': 'numpy.array',
'flavor': 'attribute',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core._idx_remove.^^^argument^^^.remove': {'node': 'litesearch.core._idx_remove.^^^argument^^^.remove',
'flavor': 'attribute',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core._sync_index': {'node': 'litesearch.core._sync_index',
'flavor': 'function',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core.sync.^^^argument^^^._sync_index': {'node': 'litesearch.core.sync.^^^argument^^^._sync_index',
'flavor': 'attribute',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'numpy.stack': {'node': 'numpy.stack',
'flavor': 'attribute',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core._sync_index.^^^argument^^^.db.add': {'node': 'litesearch.core._sync_index.^^^argument^^^.db.add',
'flavor': 'attribute',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core.rebuild_index.^^^argument^^^.db.add': {'node': 'litesearch.core.rebuild_index.^^^argument^^^.db.add',
'flavor': 'attribute',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core.sync': {'node': 'litesearch.core.sync',
'flavor': 'function',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core.sync.setcomp.0': {'node': 'litesearch.core.sync.setcomp.0',
'flavor': 'scope',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core.sync.^^^argument^^^.delete_where': {'node': 'litesearch.core.sync.^^^argument^^^.delete_where',
'flavor': 'attribute',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'fastcore.all.filter_keys.values': {'node': 'fastcore.all.filter_keys.values',
'flavor': 'attribute',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core.rebuild_index': {'node': 'litesearch.core.rebuild_index',
'flavor': 'function',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core.rebuild_index.^^^argument^^^.db.reset': {'node': 'litesearch.core.rebuild_index.^^^argument^^^.db.reset',
'flavor': 'attribute',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core.rrf_merge': {'node': 'litesearch.core.rrf_merge',
'flavor': 'function',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core.database': {'node': 'litesearch.core.database',
'flavor': 'function',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'fastlite.Database.enable_wal': {'node': 'fastlite.Database.enable_wal',
'flavor': 'attribute',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'usearch.sqlite_path': {'node': 'usearch.sqlite_path',
'flavor': 'importeditem',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core._RERANKERS': {'node': 'litesearch.core._RERANKERS',
'flavor': 'name',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core._get_reranker': {'node': 'litesearch.core._get_reranker',
'flavor': 'function',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'flashrank.Ranker': {'node': 'flashrank.Ranker',
'flavor': 'importeditem',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core.rerank_hits': {'node': 'litesearch.core.rerank_hits',
'flavor': 'function',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'flashrank.RerankRequest': {'node': 'flashrank.RerankRequest',
'flavor': 'importeditem',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core.rerank_hits.listcomp.1': {'node': 'litesearch.core.rerank_hits.listcomp.1',
'flavor': 'scope',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core.search.^^^argument^^^.strip': {'node': 'litesearch.core.search.^^^argument^^^.strip',
'flavor': 'attribute',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core.search.lambda.1': {'node': 'litesearch.core.search.lambda.1',
'flavor': 'scope',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'},
'litesearch.core.search.lambda.2': {'node': 'litesearch.core.search.lambda.2',
'flavor': 'scope',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py'}})
CodeGraph.from_sources
def from_sources(
sources:dict, chunk_size:int=50
):Build from {module_name: source_str}.
cg.db['graph_edges'].insert_all([
{'caller':'A','callee':'B','kind':'static','confidence':1.0},
{'caller':'B','callee':'C','kind':'static','confidence':1.0},
{'caller':'A','callee':'C','kind':'static','confidence':1.0},
])
pr = _pagerank(cg.db)
print(pr)
assert 'C' in pr, "C should be in pagerank"
assert pr['C'] > pr['A'], f"C (most linked-to) should rank higher than A: {pr}"
print("pagerank ok:", pr){'A': 0.05000000000000001, 'B': 0.07125000000000001, 'C': 0.13181250000000003}
pagerank ok: {'A': 0.05000000000000001, 'B': 0.07125000000000001, 'C': 0.13181250000000003}
CodeGraph(':memory:').from_sources({'mod': 'def foo(): pass\ndef bar(): foo()\n'}).db.t.graph_nodes()[{'node': 'mod.foo',
'flavor': 'function',
'file': 'mod',
'pagerank': 0.06938,
'in_degree': 1,
'out_degree': 0},
{'node': 'mod.foo.^^^argument^^^',
'flavor': 'unspecified',
'file': 'mod',
'pagerank': 0.0375,
'in_degree': 0,
'out_degree': 0},
{'node': 'mod.bar.^^^argument^^^',
'flavor': 'unspecified',
'file': 'mod',
'pagerank': 0.0375,
'in_degree': 0,
'out_degree': 0},
{'node': 'mod.bar',
'flavor': 'function',
'file': 'mod',
'pagerank': 0.0375,
'in_degree': 0,
'out_degree': 1}]
_src = '''
import functools
from fastcore.all import bind
fasthtml_app = partial(create_app, debug=True)
wrapped = functools.partial(handler, extra=1)
bound_fn = bind(base_fn, 42)
plain = lambda x: x + 1
not_a_fn = {'key': 'value'}
'''
_nod = _lambda_nodes(sources={'mymod': _src})
assert 'mymod.fasthtml_app' in _nod, f'partial() not indexed: {list(_nod)}'
assert 'mymod.wrapped' in _nod, 'functools.partial() not indexed'
assert 'mymod.bound_fn' in _nod, 'bind() not indexed'
assert 'mymod.plain' in _nod, 'lambda still indexed'
assert 'mymod.not_a_fn' not in _nod, 'dict wrongly indexed'
assert all(v['flavor'] == 'function' for v in _nod.values())
print('_lambda_nodes partial/bind: all assertions pass')_lambda_nodes partial/bind: all assertions pass
CodeGraph.from_pkg
def from_pkg(
pkg:str, path:pathlib.Path | str='.', recursive:bool=True, maxdepth:int=None, symlinks:bool=True,
file_glob:str=None, file_re:str=None, folder_re:str=None, skip_file_glob:str=None, skip_file_re:str=None,
skip_folder_re:str=None, func:callable=walk_join, ret_folders:bool=False, sort:bool=True, types:str | list=None,
exts:str | list=None
)->CodeGraph:Build from an installed package. Uses pyan3 on the package source files.
CodeGraph.from_dir
def from_dir(
dir:str | pathlib.Path, path:pathlib.Path | str='.', recursive:bool=True, maxdepth:int=None, symlinks:bool=True,
file_glob:str=None, file_re:str=None, folder_re:str=None, skip_file_glob:str=None, skip_file_re:str=None,
skip_folder_re:str=None, func:callable=walk_join, ret_folders:bool=False, sort:bool=True, types:str | list=None,
exts:str | list=None
)->CodeGraph:Build from .py files under path — pyan reads files directly.
CodeGraph.process_files
def process_files(
files, # list of .py file paths to analyse
root:NoneType=None, # package root; auto-detected via __init__.py walk if None
sz:int=50, # max files per pyan3 pass; reduce for very large packages
)->CodeGraph:Build call-graph edges for the given source files and recompute centrality.
_g = CodeGraph(':memory:')
_g.gn.insert({'node':'litesearch.core.search','flavor':'function','file':'','pagerank':0.,'in_degree':0,'out_degree':0})
_g.pa.insert({'caller':'mymod.env_context','method':'search','pkgs':'litesearch'})
_g.resolve_attr_calls()
_edges = list(_g.ge(where="kind='attr_call'"))
test_eq(len(_edges), 1)
test_eq(_edges[0]['caller'], 'mymod.env_context')
test_eq(_edges[0]['callee'], 'litesearch.core.search')
test_eq(_edges[0]['confidence'], 0.7)
# idempotent
_g.resolve_attr_calls()
test_eq(len(list(_g.ge(where="kind='attr_call'"))), 1)
_g.ge(where="kind='attr_call'")[{'caller': 'mymod.env_context',
'callee': 'litesearch.core.search',
'kind': 'attr_call',
'confidence': 0.7}]
_g2 = CodeGraph(':memory:')
_g2.gn.insert_all([{'node':'p1.mod.search','flavor':'function','file':'','pagerank':0.,'in_degree':0,'out_degree':0},
{'node':'p2.mod.search','flavor':'function','file':'','pagerank':0.,'in_degree':0,'out_degree':0}])
_g2.pa.insert({'caller':'mymod.f','method':'search','pkgs':'p1,p2'})
_g2.resolve_attr_calls()
test_eq(len(_g2.ge()), 1)_g3 = CodeGraph(':memory:')
_g3.gn.insert({'node':'other.core.search','flavor':'function','file':'','pagerank':0.,'in_degree':0,'out_degree':0})
_g3.pa.insert({'caller':'mymod.f','method':'search','pkgs':'litesearch'})
_g3.resolve_attr_calls()
test_eq(len(list(_g3.ge())), 0)cg=CodeGraph(':memory:')cg.from_pkg('litesearch').from_pkg('fastlite').from_pkg('apswutils').from_pkg('fastcore')<__main__.CodeGraph>
# eval: false
cg.from_pkg('protobuf')<__main__.CodeGraph>
cg.gn(select='*', where='node like "%get_store%"')[{'node': 'litesearch.core.get_store.str',
'flavor': 'attribute',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py',
'pagerank': 0.00015,
'in_degree': 0,
'out_degree': 0},
{'node': 'litesearch.core.get_store.^^^argument^^^',
'flavor': 'unspecified',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py',
'pagerank': 0.00015,
'in_degree': 0,
'out_degree': 0},
{'node': 'litesearch.core.get_store.bool',
'flavor': 'attribute',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py',
'pagerank': 0.00015,
'in_degree': 0,
'out_degree': 0},
{'node': 'litesearch.core.get_store',
'flavor': 'function',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py',
'pagerank': 0.00017,
'in_degree': 1,
'out_degree': 3},
{'node': 'litesearch.core.get_store.^^^argument^^^.t',
'flavor': 'attribute',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py',
'pagerank': 0.00015,
'in_degree': 0,
'out_degree': 0},
{'node': 'litesearch.core.get_store.^^^argument^^^._register_ann',
'flavor': 'attribute',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py',
'pagerank': 0.00015,
'in_degree': 0,
'out_degree': 0}]
cg.from_dir('../kosha')<__main__.CodeGraph>
cg.db.t.graph_nodes.count14165
cg.gn('node like "%emb_doc%"')[{'node': 'kosha.core.process_env.^^^argument^^^.emb_doc',
'flavor': 'attribute',
'file': '../kosha/core.py',
'pagerank': 9e-05,
'in_degree': 0,
'out_degree': 0},
{'node': 'kosha.core.update_pkg.^^^argument^^^.emb_doc',
'flavor': 'attribute',
'file': '../kosha/core.py',
'pagerank': 9e-05,
'in_degree': 0,
'out_degree': 0},
{'node': 'kosha.core.process_repo.^^^argument^^^.emb_doc',
'flavor': 'attribute',
'file': '../kosha/core.py',
'pagerank': 9e-05,
'in_degree': 0,
'out_degree': 0},
{'node': 'kosha.core.update_repo.^^^argument^^^.emb_doc',
'flavor': 'attribute',
'file': '../kosha/core.py',
'pagerank': 9e-05,
'in_degree': 0,
'out_degree': 0}]
CodeGraph.node_info
def node_info(
node:str, # fully-qualified node name
with_kind:bool=False, # include edge kind in callers/callees tuples
)->dict:Full node record: graph_nodes row merged with callers, callees, and co-dispatch peers.
CodeGraph.edge_kinds
def edge_kinds()->dict:Count of each edge kind in the graph (static, decorator, patch, registration, etc.).
CodeGraph.short_paths
def short_paths(
nodes, # iterable of fully-qualified node names
k:int=10, # consider only the first k nodes
)->L:Shortest paths between all pairs in top-k nodes — one BFS per source node.
CodeGraph.short_path
def short_path(
src:str, # fully-qualified source node name
tgt:str, # fully-qualified target node name
)->L:Shortest path from src to tgt via BFS. Returns L of node names or empty L.
CodeGraph.ranked
def ranked(
k:int=10, # number of top nodes to return
module:str=None, # optional module prefix filter (e.g. 'fastcore.basics')
)->L:Top-k nodes by pagerank, optionally filtered to a module prefix.
CodeGraph.co_dispatched
def co_dispatched(
node:str, # fully-qualified node name
)->L:Nodes registered in the same dispatch group as node (route list, handler table, etc.).
CodeGraph.neighbors
def neighbors(
n:str, # fully-qualified node name
depth:int=1, # number of hops to expand
)->L:callers + callees up to depth hops.
CodeGraph.callees
def callees(
n:str, # fully-qualified node name
with_kind:bool=False, # if True, return (callee, edge_kind) tuples instead of plain names
)->L:All nodes called by n, optionally with edge kind.
CodeGraph.callers
def callers(
n:str, # fully-qualified node name (e.g. 'mymod.foo')
with_kind:bool=False, # if True, return (caller, edge_kind) tuples instead of plain names
)->L:All nodes that call n, optionally with edge kind.
CodeGraph.node_infos
def node_infos(
nodes, # iterable of fully-qualified node names
with_kind:bool=False, # include edge kind in callers/callees tuples
)->dict:Batched node_info: {node: graph_nodes row + callers, callees, co_dispatched}. One IN-query per relation instead of per-node.
from fastcore.test import test_eq
# node_infos (batched) must match node_info (per-node) exactly
_tg = CodeGraph(':memory:').from_sources({'m': 'def a(): b()\ndef b(): c()\ndef c(): pass\n'})
_ns = L(_tg.gn(select='node')).attrgot('node')
_bat = _tg.node_infos(_ns)
for n in _ns:
_si = _tg.node_info(n)
test_eq(set(_bat[n]['callers']), set(_si['callers']))
test_eq(set(_bat[n]['callees']), set(_si['callees']))
test_eq(set(_bat[n]['co_dispatched']), set(_si['co_dispatched']))
test_eq(_tg.node_infos([]), {})
print('node_infos == node_info OK')█
|----------------------------------------| 0.00% [0/1 00:00<?]
|████████████████████████████████████████| 100.00% [1/1 00:00<00:00]
node_infos == node_info OK
cg.db.t.graph_edges(where='caller like "%apswutils.db.Table.insert_all%" and callee like "%insert_chunk%"')[{'caller': 'apswutils.db.Table.insert_all',
'callee': 'apswutils.db.Table.insert_chunk',
'kind': 'static',
'confidence': 1.0}]
to_date_co = cg.co_dispatched('fastcore.basics.to_date')
assert all('fastcore' in n for n in to_date_co), \
f"fastcore.basics.to_date co_dispatched leaked into httpx: {to_date_co}"
assert len(to_date_co) > 0, "fastcore.basics.to_date should have co_dispatched peers"
print("co_dispatched cross-package isolation ok:", to_date_co)co_dispatched cross-package isolation ok: ['fastcore.basics.to_bool', 'fastcore.basics.to_int', 'fastcore.basics.to_float']
cg.node_info('fastcore.basics.to_date'){'node': 'fastcore.basics.to_date',
'flavor': 'function',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/fastcore/basics.py',
'pagerank': 3e-05,
'in_degree': 0,
'out_degree': 2,
'callers': [],
'callees': ['fastcore.basics._typeerr', 'fastcore.basics.str2date'],
'co_dispatched': ['fastcore.basics.to_bool', 'fastcore.basics.to_int', 'fastcore.basics.to_float']}
n = cg.db.t.graph_nodes(where='node like "%core.env_context"')[0]['node']
cg.node_info(n){'node': 'kosha.core.env_context',
'flavor': 'function',
'file': '../kosha/core.py',
'pagerank': 0.00469,
'in_degree': 2,
'out_degree': 7,
'callers': ['kosha.cli', 'kosha.core.Kosha'],
'callees': ['fastcore.all.L', 'fastcore.all.patch', 'fastcore.all.true', 'kosha.core.Kosha', 'kosha.core.filt2wh', 'kosha.core.parseq', 'litesearch.core.ann_search.^^^argument^^^.db.search'],
'co_dispatched': []}
cg.short_path('kosha.graph.context', 'litesearch.core.search')[]
path = cg.short_path('apswutils.db.Table.upsert', 'apswutils.db.Table.insert_chunk')
assert path[0] == 'apswutils.db.Table.upsert', f"wrong start: {path}"
assert path[-1] == 'apswutils.db.Table.insert_chunk', f"wrong end: {path}"
assert len(path) >= 2, f"path too short: {path}"
assert cg.short_path('apswutils.db.Table.upsert', 'apswutils.db.Table.upsert') == L(['apswutils.db.Table.upsert']), "src==tgt should return [src]"
assert cg.short_path('apswutils.db.Table.upsert', 'no.such.node') == L(), "missing tgt should return empty"
print("short_path ok:", path)short_path ok: ['apswutils.db.Table.upsert', 'apswutils.db.Table.upsert_all', 'apswutils.db.Table.insert_all', 'apswutils.db.Table.insert_chunk']
cg.ranked(5, module='litesearch')[{'node': 'litesearch.core._register_ann', 'pagerank': 0.01364}, {'node': 'litesearch.core.fts_search', 'pagerank': 0.01364}, {'node': 'litesearch.core.vec_search', 'pagerank': 0.01364}, {'node': 'litesearch.core.ann_search', 'pagerank': 0.01364}, {'node': 'litesearch.core._sync_index', 'pagerank': 0.01364}]
cg.callers('litesearch.data.kw')['litesearch.core.embed_chunk', 'litesearch.core.process_content', 'litesearch.core.get_store', 'litesearch.core.database', 'litesearch.data.pdf_markdown', 'litesearch.data.pdf_markdown.lambda.0', 'litesearch.data.ocr_parse', 'litesearch.data.pkg2chunks', 'litesearch.data.pre', 'litesearch.utils.FastEncode.encode', 'litesearch.utils.FastEncode.encode.lambda.0', 'litesearch.utils.FastEncode.encode_document', 'litesearch.utils.FastEncode.encode_query', 'litesearch.utils.AutoLateChunkFastEncode.encode_auto', 'litesearch.utils.doc_encoder._', 'litesearch.utils.query_encoder._', 'litesearch.utils.FastEncodeImage.embed', 'litesearch.utils.FastEncodeImage.embed.lambda.0', 'litesearch.utils.FastEncodeMultimodal.encode_text', 'litesearch.utils.FastEncodeMultimodal.encode_image', 'litesearch.utils.encode_pdf_texts']
CodeGraph.file2nodes
def file2nodes(
path:str
)->set:Return set of node names whose file column matches path.
g_drop = CodeGraph(':memory:')
g_drop.db.t.graph_nodes.insert_all([
{'node':'mod.foo','flavor':'function','file':'/proj/mod.py'},
{'node':'mod.bar','flavor':'function','file':'/proj/mod.py'},
])
g_drop.db.t.graph_edges.insert({'caller':'mod.foo','callee':'mod.bar','kind':'static','confidence':1.0})
assert g_drop.file2nodes('/proj/mod.py') == {'mod.foo','mod.bar'}
g_drop._drop_file('/proj/mod.py')
assert g_drop.file2nodes('/proj/mod.py') == set()
assert not list(g_drop.db.execute("SELECT * FROM graph_edges"))
print("_drop_file + _nodes_for_file ok")_drop_file + _nodes_for_file ok
CodeGraph.sync
def sync(
dir:NoneType=None, pkgs:NoneType=None, force:bool=False
)->CodeGraph:Incremental sync: from_dir per dir, from_pkg per pkg; manage file_index. Centrality recomputed once at the end.
CodeGraph.sync_pkgs
def sync_pkgs(
pkgs:list
)->CodeGraph:Incremental sync for packages: drop missing files, update changed files, add new files.
CodeGraph.sync_dir
def sync_dir(
dir:str | pathlib.Path, force:bool=False
)->CodeGraph:Incremental sync for a directory: drop missing files, update changed files, add new files.
import tempfile, timewith tempfile.TemporaryDirectory() as tmp:
pa, pb = Path(f'{tmp}/a.py'), Path(f'{tmp}/b.py')
pa.write_text('def foo(): pass\n'); pb.write_text('def bar(): pass\n')
g = CodeGraph(':memory:')
g.sync(dir=tmp)
fi = {r['path']: r['last_analyzed_at'] for r in g.db.t.file_index.rows}
assert str(pa) in fi and str(pb) in fi, fi
# Modify b.py — mtime changes
time.sleep(0.01)
pb.write_text('def bar(): return 42\n')
pb.touch() # ensure mtime update
g.sync(dir=tmp)
fi2 = {r['path']: r['last_analyzed_at'] for r in g.db.t.file_index.rows}
assert fi2[str(pa)] == fi[str(pa)], f"a.py should not be reprocessed: {fi2}"
assert fi2[str(pb)] != fi[str(pb)], f"b.py should be reprocessed: {fi2}"
# Delete a.py — should be removed from file_index
pa.unlink()
g.sync(dir=tmp)
fi3 = {r['path'] for r in g.db.t.file_index.rows}
assert str(pa) not in fi3, f"a.py should be removed: {fi3}"
print("sync incremental ok, remaining files:", fi3)
# add packages to codegraph
g.sync(pkgs=['httpx', 'fastcore'])
assert len(g.gn(where='node like "httpx.%"')) > 0, "httpx nodes should be in graph"
assert len(g.gn(where='node like "fastcore.%"')) > 0, "fastcore nodes should be in graph"sync incremental ok, remaining files: {'/var/folders/kg/9vdw4mdd1fs58svgh4k1qhr09x7dqh/T/tmp76wzzi0w/b.py'}
loading code graph for packages: 0%| | 0/2 [00:00<?, ?pkg/s]
loading code graph for packages: 50%|█████ | 1/2 [00:00<00:00, 1.58pkg/s]
loading code graph for packages: 100%|██████████| 2/2 [00:01<00:00, 1.05pkg/s]
Kosha.short_paths
def short_paths():Shortest paths helper: shortest paths between all pairs in top-k nodes.
Kosha.short_path
def short_path():Shortest path helper: shortest path between two nodes.
Kosha.neighbors
def neighbors():Neighbors helper: callers + callees up to depth hops.
Kosha.ni
def ni():Node info helper: graph_nodes row + callers, callees, co-dispatched nodes.
Kosha.ge
def ge():graph_edges table for direct queries.
Kosha.gn
def gn():graph_nodes table for direct queries.
Kosha.graphdb
def graphdb():Underlying graph.db database for direct queries.
Kosha.graph
def graph()->CodeGraph:code graph for this kosha instance (memoized — opens graph.db once per Kosha instance).
Kosha.public_api
def public_api(
pkg:str, # package or module to index (e.g. 'kosha', 'litesearch.data')
meta_cols:str='mod_name,docstring', # metadata keys to extract
limit:int=200, # max names to return
)->L:Return public API: all public_api=1 entries + @patch-derived methods from the call graph from env and repo stores.
k=Kosha()
api = k.public_api('kosha')
names = {r['mod_name'] for r in api}
assert any('sync' in n for n in names), f"patched 'sync' missing from public_api: {names}"/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/tqdm/auto.py:21: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html
from .autonotebook import tqdm as notebook_tqdm
api_httpx = k.public_api('httpx')
assert len(api_httpx) > 0, 'httpx __all__-based entries should still be returned'
print('public_api patch-aware ok | kosha:', len(api), '| httpx:', len(api_httpx))
print('kosha sample:', sorted(names)[:8])public_api patch-aware ok | kosha: 59 | httpx: 155
kosha sample: ['kosha.core._is_pkg_ingested', 'kosha.core.awatch_repo', 'kosha.core.env_context', 'kosha.core.nuke', 'kosha.core.pkg_context', 'kosha.core.pkgs2consider', 'kosha.core.pkgs_in_env', 'kosha.core.process_env']
k.public_api('litesearch.data')[:3][{'mod_name': 'litesearch.cli.install', 'docstring': 'Install SKILL.md to .agents/, .claude/, .Codex/ skill directories.'}, {'mod_name': 'litesearch.cli.main', 'docstring': None}, {'mod_name': 'litesearch.core.rrf_merge', 'docstring': 'Reciprocal Rank Fusion: merges FTS and vector results. Items in both lists score highest.'}]
k.public_api('fastlite', meta_cols='mod_name')[{'mod_name': 'fastlite.core.t'}, {'mod_name': 'fastlite.core.c'}, {'mod_name': 'fastlite.core.c'}, {'mod_name': 'fastlite.core.__str__'}, {'mod_name': 'fastlite.core.__str__'}, {'mod_name': 'fastlite.core.q'}, {'mod_name': 'fastlite.core.all_dcs'}, {'mod_name': 'fastlite.core.create_mod'}, {'mod_name': 'fastlite.core.link_dcs'}, {'mod_name': 'fastlite.core.__call__'}, {'mod_name': 'fastlite.core.selectone'}, {'mod_name': 'fastlite.core.set_classes'}, {'mod_name': 'fastlite.core.get_tables'}, {'mod_name': 'fastlite.core.v'}, {'mod_name': 'fastlite.core.get_typ'}, {'mod_name': 'fastlite.core.create'}, {'mod_name': 'fastlite.core.import_file'}, {'mod_name': 'fastlite.core.diagram'}, {'mod_name': 'fastlite.kw.MissingPrimaryKey'}, {'mod_name': 'fastlite.kw.database'}, {'mod_name': 'fastlite.kw.xtra'}, {'mod_name': 'fastlite.kw.get_last'}, {'mod_name': 'fastlite.kw.ids_and_rows_where'}, {'mod_name': 'fastlite.kw.get'}, {'mod_name': 'fastlite.kw.__getitem__'}, {'mod_name': 'fastlite.kw.create'}, {'mod_name': 'fastlite.kw.transform'}, {'mod_name': 'fastlite.kw.transform_sql'}, {'mod_name': 'fastlite.kw.update'}, {'mod_name': 'fastlite.kw.insert_all'}, {'mod_name': 'fastlite.kw.insert'}, {'mod_name': 'fastlite.kw.upsert'}, {'mod_name': 'fastlite.kw.lookup'}]
k.ni('fastlite.kw.database'){'node': 'fastlite.kw.database',
'flavor': 'function',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/fastlite/kw.py',
'pagerank': 1e-05,
'in_degree': 0,
'out_degree': 18,
'callers': [],
'callees': ['typing.Any', 'apsw.Connection', 'apswutils.db.Database', 'typing.Any', 'apsw.Connection', 'apswutils.db.Database', 'apswutils.db.Database', 'typing.Any', 'apsw.Connection', 'apswutils.db.Database', 'typing.Any', 'apsw.Connection', 'apsw.Connection', 'typing.Any', 'apswutils.db.Database', 'apswutils.db.Database', 'apsw.Connection', 'typing.Any'],
'co_dispatched': []}
Kosha.status
def status(
pyproject:bool=True, depth:int=1
)->dict:Index freshness: file/pkg/node counts and stale file count.
rank_results
def rank_results(
results, query, soft_pkgs:NoneType=None, top_k:NoneType=None, penalise_paths:bool=True
)->L:Rerank result dicts: query boosts + soft-package boost + semble-style path penalties.
is_symbol_query
def is_symbol_query(
query:str
)->bool:True if the query looks like a bare symbol or namespace-qualified identifier.
from fastcore.test import test_eq, test_fail
# is_symbol_query: symbols vs NL
for s in ['Client','Sinatra::Base','_private','StateManager','foo.bar']: assert is_symbol_query(s), s
for s in ['session','merge dicts','extract bytes from image']: assert not is_symbol_query(s), s
# path penalties: tests/__init__/examples/.d.ts penalised, plain source not
assert _file_penalty('kosha/core.py') == 1.0
assert _file_penalty('tests/test_core.py') < 1.0
assert _file_penalty('pkg/__init__.py') == _MODERATE_PENALTY
assert _file_penalty('examples/demo.py') == _STRONG_PENALTY
assert _file_penalty('types/foo.d.ts') == _MILD_PENALTY
def _r(content='x', path='a.py', pkg=None, rrf=0.01, **kw):
md = {'path': path, 'package': pkg}
return dict(content=content, metadata=md, path=path, _rrf_score=rrf, **kw)
# package boost: fastcore ranked above equal-base non-fastcore, but non-fastcore still present
res = [_r('a', 'other.py', pkg='numpy', rrf=0.01), _r('b', 'fc.py', pkg='fastcore', rrf=0.01)]
ranked = rank_results(res, 'extract bytes', soft_pkgs={'fastcore'})
test_eq(len(ranked), 2)
test_eq(_rk_pkg(ranked[0]), 'fastcore')
# empty / no-crash
test_eq(rank_results([], 'q'), L())
test_eq(len(rank_results([_r()], '')), 1)
print('ranking tests passed')ranking tests passed
Kosha.context
def context(
q:str, # query with optional key:value filters
limit:int=50, repo:bool=True, env:bool=True, graph:bool=True, boost:bool=True,
compact:bool=False, # return slim dicts (mod_name, signature, docstring, lineno) instead of full chunks
columns:str='content,metadata', sys_wide:bool=True, **kw
)->L: # forwarded to env_context / repo_contextFan-out semantic search: parse filters, run repo + env searches, merge with chained RRF, then rerank.
Kosha.sync
def sync(
pkgs:NoneType=None, # list of package names to sync (e.g. ['httpx', 'fastcore']); if None, sync all env packages
dir:NoneType=None, # directory to sync; if None, sync all of root
verbose:bool=True, # print progress messages
in_parallel:bool=True, # run repo, env, and graph sync in parallel; also fans env packages out across threads
force:bool=False, # ignore file mtimes and reprocess all files
sync_graph:bool=False, # whether to force graph recomputation even if no files changed; ignored if force=True
pyproject:bool=True, # if True, auto-detect env packages from pyproject.toml; if False, use pkgs argument as-is
depth:int=1, # depth for pyproject env package detection; ignored if pyproject=False
embed:bool=True, # whether to embed
)->Kosha:Sync code store, env store, and code graph. Runs in a daemon thread by default.
k = Kosha()k.gn(select='*', where='node like "%get_store"')[{'node': 'litesearch.core.get_store',
'flavor': 'function',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/litesearch/core.py',
'pagerank': 0.00488,
'in_degree': 1,
'out_degree': 48}]
k.status(){'files': 4,
'packages': 145,
'graph_nodes': 109201,
'stale_files': 4,
'stale_pkgs': {},
'new_files': 0}
k.sync()Syncing code graph for dir=/Users/71293/code/personal/orgs/kosha, pkgs=all env packages, graph sync = False
No packages to load.
syncing files [Path('/Users/71293/code/personal/orgs/kosha/kosha/cli.py'), Path('/Users/71293/code/personal/orgs/kosha/kosha/core.py'), Path('/Users/71293/code/personal/orgs/kosha/kosha/graph.py'), Path('/Users/71293/code/personal/orgs/kosha/kosha/mcp.py')] .....
parse files from /Users/71293/code/personal/orgs/kosha: 100%|██████████| 4/4 [00:00<00:00, 40.72it/s]
{'changed': 8, 'same': 146, 'removed': 8}
synced repo
[None, None, None]
'fossick' in env_pkg_versions()False
first(k.context('how do I merge dicts package:fastcore path:basics', limit=1, graph=False, compact=False)){ '_dist': np.float32(0.3338333),
'_rrf_score': 0.016666666666666666,
'_score': 0.030000000000000002,
'_source': 'env',
'_src_id': 'env:2908',
'content': 'def merge(*ds):\n'
' "Merge all dictionaries in `ds`"\n'
' return {k:v for d in ds if d is not None for k,v in '
'd.items()}',
'metadata': { 'docstring': 'Merge all dictionaries in `ds`',
'end_lineno': 662,
'lang': '.py',
'lineno': 660,
'mod_name': 'fastcore.basics.merge',
'name': 'merge',
'package': 'fastcore',
'path': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/fastcore/basics.py',
'public_api': True,
'type': 'FunctionDef',
'uploaded_at': 1784759792.1085885,
'version': '2.1.5'},
'rowid': 2908}Kosha.api_call_paths
def api_call_paths(
from_pkg:str, # package whose public API is the call source
to_pkg:str, # package whose public API is the call target
k:int=15, # top-k API nodes per package to consider
)->dict:Shortest call-graph paths from from_pkg public API nodes to to_pkg public API nodes.
Kosha.top_nodes
def top_nodes(
pkg:str, k:int=5
)->L:Top-k public API nodes for pkg ranked by pagerank in the code graph.
Kosha.dep_stack
def dep_stack(
seeds:list=None, depth:int=1, no_sys_pkg:bool=True, allow:list=None
)->list:BFS over pkg_deps, ordered by coupling strength.
is_sys_pkg
def is_sys_pkg(
pkg:str
)->bool:Return True if pkg is a system-wide package (e.g. in site-packages), False if likely user code.
rows = list(k.envdb.t.pkg_deps(where='from_pkg="fastlite"'))
assert rows, 'pkg_deps should have rows after update_pkg'
assert any(r['to_pkg'] in ('fastcore','fastlite') for r in rows), f'expected fastcore/fastlite: {rows[:3]}'
print('pkg_deps via update_pkg ok:', rows[:3])pkg_deps via update_pkg ok: [{'from_pkg': 'fastlite', 'to_pkg': 'apsw', 'n_modules': 1}, {'from_pkg': 'fastlite', 'to_pkg': 'apswutils', 'n_modules': 2}, {'from_pkg': 'fastlite', 'to_pkg': 'dataclasses', 'n_modules': 2}]
layers = k.dep_stack(['fastlite'])
print(layers)
print('-------------------------------------------------')
stack = L(layers).flatten()
assert 'fastcore' in stack, f'fastcore should be in dep_stack: {stack}'
print('_dep_stack ok:', stack)[['fastlite'], {'fastcore', 'apswutils', 'apsw'}]
-------------------------------------------------
_dep_stack ok: ['fastlite', 'fastcore', 'apswutils', 'apsw']
k.dep_stack(['fastlite'], allow=['fastcore'])[['fastlite'], {'fastcore'}]
k.api_call_paths('fastlite', 'apswutils'){'apswutils.utils.rows_from_file': ['fastlite.core.import_file', 'apswutils.utils.rows_from_file'],
'apswutils.utils.TypeTracker': ['fastlite.core.import_file', 'apswutils.utils.TypeTracker']}
k.context('payments page monsterui fasthtml', repo=False)[0]{ '_dist': np.float32(0.5530824),
'_rrf_score': 0.016666666666666666,
'_score': 0.024289017842133262,
'_source': 'env',
'_src_id': 'env:1854',
'callees': ['fasthtml.xtend.Titled', 'fasthtml.xtend.A', 'fasthtml.svg.PathFT.A', 'fasthtml.xtend.Titled', 'fasthtml.xtend.A', 'fasthtml.svg.PathFT.A', 'fasthtml.svg.PathFT.A', 'fasthtml.xtend.A', 'fasthtml.xtend.Titled', 'fasthtml.xtend.Titled', 'fasthtml.svg.PathFT.A', 'fasthtml.xtend.A', 'fasthtml.xtend.Titled', 'fasthtml.svg.PathFT.A', 'fasthtml.xtend.A', 'fasthtml.xtend.A', 'fasthtml.xtend.Titled', 'fasthtml.svg.PathFT.A'],
'callers': [],
'co_dispatched': [],
'content': 'def account_management(sess):\n'
" user_email = sess['auth']\n"
' user_payments = payments("email=?", (user_email,))\n'
' # Create table rows for each payment\n'
' payment_rows = []\n'
' for payment in user_payments:\n'
' action_button = ""\n'
" if payment.payment_status == 'paid':\n"
' action_button = Button("Request Refund", '
'hx_post=f"/refund?checkout_sid={payment.checkout_session_id}",hx_target="#refund-status")\n'
" elif payment.payment_status == 'refunded': action_button "
'= "Refunded"\n'
' \n'
' # Add row to table\n'
' payment_rows.append(\n'
' Tr(*map(Td, (payment.created_at, payment.amount, '
'payment.payment_status, action_button))))\n'
' \n'
' # Create payment history table\n'
' payment_history = Table(\n'
' Thead(Tr(*map(Th, ("Date", "Amount", "Status", '
'"Action")))),\n'
' Tbody(*payment_rows))\n'
' \n'
' return Titled(\n'
' "Account Management",\n'
' Div(H2(f"Account: {user_email}"),\n'
' H3("Payment History"),\n'
' payment_history,\n'
' Div(id="refund-status"), # Target for refund status '
'messages\n'
' A("Back to Home", href="/")))',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/fasthtml/stripe_otp.py',
'flavor': 'function',
'in_degree': 0,
'metadata': { 'docstring': None,
'end_lineno': 211,
'lang': '.py',
'lineno': 185,
'mod_name': 'fasthtml.stripe_otp.account_management',
'name': 'account_management',
'package': 'python-fasthtml',
'path': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/fasthtml/stripe_otp.py',
'public_api': True,
'type': 'FunctionDef',
'uploaded_at': 1784506465.2619212,
'version': '0.14.9'},
'node': 'fasthtml.stripe_otp.account_management',
'out_degree': 18,
'pagerank': 1e-05,
'rowid': 1854}k.context('payments page package:python-fasthtml')[0]{ '_dist': np.float32(0.33909822),
'_rrf_score': 0.01639344262295082,
'_score': 0.02959016393442623,
'_source': 'env',
'_src_id': 'env:1851',
'callees': ['fasthtml.xtend.Titled', 'fasthtml.svg.PathFT.A', 'fasthtml.xtend.A', 'fasthtml.svg.PathFT.A', 'fasthtml.xtend.A', 'fasthtml.xtend.Titled', 'fasthtml.xtend.A', 'fasthtml.svg.PathFT.A', 'fasthtml.xtend.Titled', 'fasthtml.xtend.Titled', 'fasthtml.svg.PathFT.A', 'fasthtml.xtend.A', 'fasthtml.xtend.A', 'fasthtml.xtend.Titled', 'fasthtml.svg.PathFT.A', 'fasthtml.xtend.A', 'fasthtml.xtend.Titled', 'fasthtml.svg.PathFT.A'],
'callers': [],
'co_dispatched': [],
'content': 'def success(sess, checkout_sid:str): \n'
' # Get payment record from database (saved in the webhook)\n'
' payment = payments[checkout_sid]\n'
'\n'
" if not payment or payment.payment_status != 'paid': \n"
' return Titled("Error", P("Payment not found"))\n'
'\n'
' return Titled(\n'
' "Success",\n'
' Div(H2("Payment Successful!"),\n'
' P(f"Thank you for your purchase, '
'{sess[\'auth\']}"),\n'
' P(f"Amount Paid: ${payment.amount / 100:.2f}"),\n'
' P(f"Status: {payment.payment_status}"),\n'
' P(f"Transaction ID: '
'{payment.checkout_session_id}"),\n'
' A("Back to Home", href="/")))',
'file': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/fasthtml/stripe_otp.py',
'flavor': 'function',
'in_degree': 0,
'metadata': { 'docstring': None,
'end_lineno': 147,
'lang': '.py',
'lineno': 133,
'mod_name': 'fasthtml.stripe_otp.success',
'name': 'success',
'package': 'python-fasthtml',
'path': '/Users/71293/code/personal/orgs/kosha/.venv/lib/python3.13/site-packages/fasthtml/stripe_otp.py',
'public_api': True,
'type': 'FunctionDef',
'uploaded_at': 1784506465.2619212,
'version': '0.14.9'},
'node': 'fasthtml.stripe_otp.success',
'out_degree': 18,
'pagerank': 1e-05,
'rowid': 1851}k.context('fetch a page using broswer session package:fossick', repo=False)[]
k.update_pkgs(['fossick'])Kosha.where_to_add
def where_to_add(
description:str, limit:int=5, repo:bool=True, env:bool=True, graph:bool=True, boost:bool=True,
compact:bool=False, columns:str='content,metadata', sys_wide:bool=True
)->L:Likely insertion points for new code: file + line from top context results + co_dispatched peers.
pts = k.where_to_add('add a new way to search codebase', limit=3)
assert isinstance(pts, L)
if pts:
assert all(k in pts[0] for k in ('node','path','insert_after','co_dispatched','pagerank'))
print('where_to_add ok:', pts[0]['path'], 'line', pts[0]['insert_after'])
else: print('where_to_add ok: no results (index may be empty)')where_to_add ok: /Users/71293/code/personal/orgs/kosha/kosha/graph.py line 749