coltrace 0.1.0.dev6__tar.gz → 0.1.0.dev7__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {coltrace-0.1.0.dev6/src/coltrace.egg-info → coltrace-0.1.0.dev7}/PKG-INFO +47 -22
- {coltrace-0.1.0.dev6 → coltrace-0.1.0.dev7}/README.md +307 -282
- {coltrace-0.1.0.dev6 → coltrace-0.1.0.dev7}/docs/backlog.md +85 -71
- coltrace-0.1.0.dev7/docs/compatibility-checkpoint.md +159 -0
- {coltrace-0.1.0.dev6 → coltrace-0.1.0.dev7}/docs/decisions.md +76 -61
- {coltrace-0.1.0.dev6 → coltrace-0.1.0.dev7}/docs/lineage-json.md +248 -223
- coltrace-0.1.0.dev7/docs/supported-patterns.md +440 -0
- {coltrace-0.1.0.dev6 → coltrace-0.1.0.dev7}/docs/troubleshooting.md +131 -93
- coltrace-0.1.0.dev7/examples/databricks_project/README.md +33 -0
- coltrace-0.1.0.dev7/examples/databricks_project/main_orchestrator.py +29 -0
- coltrace-0.1.0.dev7/examples/databricks_project/pipeline_a/extract/__init__.py +0 -0
- coltrace-0.1.0.dev7/examples/databricks_project/pipeline_a/extract/primary_extract.py +26 -0
- coltrace-0.1.0.dev7/examples/databricks_project/pipeline_a/main_orchestrator.py +25 -0
- coltrace-0.1.0.dev7/examples/databricks_project/pipeline_a/publish/__init__.py +0 -0
- coltrace-0.1.0.dev7/examples/databricks_project/pipeline_a/publish/serialize_webapp.py +19 -0
- coltrace-0.1.0.dev7/examples/databricks_project/pipeline_a/transform/__init__.py +0 -0
- coltrace-0.1.0.dev7/examples/databricks_project/pipeline_a/transform/priority_rank.py +21 -0
- coltrace-0.1.0.dev7/examples/databricks_project/shared/__init__.py +0 -0
- coltrace-0.1.0.dev7/examples/databricks_project/shared/config.py +8 -0
- coltrace-0.1.0.dev7/examples/databricks_project/shared/token_tracker.py +20 -0
- coltrace-0.1.0.dev7/examples/databricks_project/shared/warehouse.py +22 -0
- {coltrace-0.1.0.dev6 → coltrace-0.1.0.dev7}/examples/notebook_cell.py +168 -159
- {coltrace-0.1.0.dev6 → coltrace-0.1.0.dev7}/pyproject.toml +54 -48
- {coltrace-0.1.0.dev6 → coltrace-0.1.0.dev7}/src/coltrace/__init__.py +22 -22
- coltrace-0.1.0.dev7/src/coltrace/analysis.py +7974 -0
- {coltrace-0.1.0.dev6 → coltrace-0.1.0.dev7}/src/coltrace/cli.py +717 -710
- {coltrace-0.1.0.dev6 → coltrace-0.1.0.dev7}/src/coltrace/compatibility.py +251 -172
- {coltrace-0.1.0.dev6 → coltrace-0.1.0.dev7}/src/coltrace/exporters.py +711 -705
- {coltrace-0.1.0.dev6 → coltrace-0.1.0.dev7}/src/coltrace/journey.py +628 -587
- {coltrace-0.1.0.dev6 → coltrace-0.1.0.dev7}/src/coltrace/lineage_models.py +115 -115
- {coltrace-0.1.0.dev6 → coltrace-0.1.0.dev7}/src/coltrace/models.py +92 -92
- coltrace-0.1.0.dev7/src/coltrace/notebooks.py +253 -0
- coltrace-0.1.0.dev7/src/coltrace/pandas_api.py +1052 -0
- coltrace-0.1.0.dev7/src/coltrace/py.typed +0 -0
- {coltrace-0.1.0.dev6 → coltrace-0.1.0.dev7}/src/coltrace/scanner.py +412 -288
- {coltrace-0.1.0.dev6 → coltrace-0.1.0.dev7/src/coltrace.egg-info}/PKG-INFO +47 -22
- {coltrace-0.1.0.dev6 → coltrace-0.1.0.dev7}/src/coltrace.egg-info/SOURCES.txt +21 -0
- {coltrace-0.1.0.dev6 → coltrace-0.1.0.dev7}/tests/integration/test_conditional_flow.py +354 -332
- coltrace-0.1.0.dev7/tests/integration/test_databricks_example.py +131 -0
- {coltrace-0.1.0.dev6 → coltrace-0.1.0.dev7}/tests/integration/test_lineage_acceptance.py +303 -253
- {coltrace-0.1.0.dev6 → coltrace-0.1.0.dev7}/tests/integration/test_notebook_reporting.py +78 -77
- {coltrace-0.1.0.dev6 → coltrace-0.1.0.dev7}/tests/integration/test_pandas_boundaries.py +328 -328
- coltrace-0.1.0.dev7/tests/integration/test_production_patterns.py +293 -0
- coltrace-0.1.0.dev7/tests/integration/test_project_compatibility.py +458 -0
- coltrace-0.1.0.dev7/tests/integration/test_public_project_patterns.py +285 -0
- {coltrace-0.1.0.dev6 → coltrace-0.1.0.dev7}/tests/unit/test_analysis.py +498 -463
- {coltrace-0.1.0.dev6 → coltrace-0.1.0.dev7}/tests/unit/test_compatibility.py +1 -1
- {coltrace-0.1.0.dev6 → coltrace-0.1.0.dev7}/tests/unit/test_exporters.py +286 -286
- coltrace-0.1.0.dev7/tests/unit/test_notebooks.py +91 -0
- {coltrace-0.1.0.dev6 → coltrace-0.1.0.dev7}/tests/unit/test_source_models.py +283 -283
- coltrace-0.1.0.dev6/docs/compatibility-checkpoint.md +0 -88
- coltrace-0.1.0.dev6/docs/supported-patterns.md +0 -257
- coltrace-0.1.0.dev6/src/coltrace/analysis.py +0 -3805
- {coltrace-0.1.0.dev6 → coltrace-0.1.0.dev7}/LICENSE +0 -0
- {coltrace-0.1.0.dev6 → coltrace-0.1.0.dev7}/MANIFEST.in +0 -0
- {coltrace-0.1.0.dev6 → coltrace-0.1.0.dev7}/docs/accuracy.md +0 -0
- {coltrace-0.1.0.dev6 → coltrace-0.1.0.dev7}/docs/architecture.md +0 -0
- {coltrace-0.1.0.dev6 → coltrace-0.1.0.dev7}/docs/column-history.md +0 -0
- {coltrace-0.1.0.dev6 → coltrace-0.1.0.dev7}/docs/column-journey-checkpoint.md +0 -0
- {coltrace-0.1.0.dev6 → coltrace-0.1.0.dev7}/docs/database-patterns.md +0 -0
- {coltrace-0.1.0.dev6 → coltrace-0.1.0.dev7}/docs/database-sources.md +0 -0
- {coltrace-0.1.0.dev6 → coltrace-0.1.0.dev7}/docs/discovery-json.md +0 -0
- {coltrace-0.1.0.dev6 → coltrace-0.1.0.dev7}/docs/graph-workspace-checkpoint.md +0 -0
- {coltrace-0.1.0.dev6 → coltrace-0.1.0.dev7}/docs/history-checkpoint.md +0 -0
- {coltrace-0.1.0.dev6 → coltrace-0.1.0.dev7}/docs/mvp-checkpoint.md +0 -0
- {coltrace-0.1.0.dev6 → coltrace-0.1.0.dev7}/docs/nlp-checkpoint.md +0 -0
- {coltrace-0.1.0.dev6 → coltrace-0.1.0.dev7}/docs/other-column-checkpoint.md +0 -0
- {coltrace-0.1.0.dev6 → coltrace-0.1.0.dev7}/docs/pandas-sources-proposal.md +0 -0
- {coltrace-0.1.0.dev6 → coltrace-0.1.0.dev7}/docs/phase-1.md +0 -0
- {coltrace-0.1.0.dev6 → coltrace-0.1.0.dev7}/docs/read-capture.md +0 -0
- {coltrace-0.1.0.dev6 → coltrace-0.1.0.dev7}/docs/source-checkpoint.md +0 -0
- {coltrace-0.1.0.dev6 → coltrace-0.1.0.dev7}/examples/database_pipeline/README.md +0 -0
- {coltrace-0.1.0.dev6 → coltrace-0.1.0.dev7}/examples/database_pipeline/build_query.py +0 -0
- {coltrace-0.1.0.dev6 → coltrace-0.1.0.dev7}/examples/database_pipeline/pipeline.py +0 -0
- {coltrace-0.1.0.dev6 → coltrace-0.1.0.dev7}/examples/database_pipeline/pyproject.toml +0 -0
- /coltrace-0.1.0.dev6/src/coltrace/py.typed → /coltrace-0.1.0.dev7/examples/databricks_project/pipeline_a/__init__.py +0 -0
- {coltrace-0.1.0.dev6 → coltrace-0.1.0.dev7}/examples/pricing_pipeline/extract/prices.py +0 -0
- {coltrace-0.1.0.dev6 → coltrace-0.1.0.dev7}/examples/pricing_pipeline/features/pricing.py +0 -0
- {coltrace-0.1.0.dev6 → coltrace-0.1.0.dev7}/examples/pricing_pipeline/pipeline.py +0 -0
- {coltrace-0.1.0.dev6 → coltrace-0.1.0.dev7}/examples/pricing_pipeline/transform/pricing.py +0 -0
- {coltrace-0.1.0.dev6 → coltrace-0.1.0.dev7}/examples/read_capture/README.md +0 -0
- {coltrace-0.1.0.dev6 → coltrace-0.1.0.dev7}/examples/read_capture/project/input.csv +0 -0
- {coltrace-0.1.0.dev6 → coltrace-0.1.0.dev7}/examples/read_capture/project/pipeline.py +0 -0
- {coltrace-0.1.0.dev6 → coltrace-0.1.0.dev7}/examples/read_capture/run_capture.py +0 -0
- {coltrace-0.1.0.dev6 → coltrace-0.1.0.dev7}/examples/robustness_pipeline/README.md +0 -0
- {coltrace-0.1.0.dev6 → coltrace-0.1.0.dev7}/examples/robustness_pipeline/extract.py +0 -0
- {coltrace-0.1.0.dev6 → coltrace-0.1.0.dev7}/examples/robustness_pipeline/pipeline.py +0 -0
- {coltrace-0.1.0.dev6 → coltrace-0.1.0.dev7}/examples/robustness_pipeline/transform.py +0 -0
- {coltrace-0.1.0.dev6 → coltrace-0.1.0.dev7}/examples/sample_pipeline/prices.py +0 -0
- {coltrace-0.1.0.dev6 → coltrace-0.1.0.dev7}/examples/text_pipeline/README.md +0 -0
- {coltrace-0.1.0.dev6 → coltrace-0.1.0.dev7}/examples/text_pipeline/pipeline.py +0 -0
- {coltrace-0.1.0.dev6 → coltrace-0.1.0.dev7}/examples/text_pipeline/processing.py +0 -0
- {coltrace-0.1.0.dev6 → coltrace-0.1.0.dev7}/examples/text_pipeline/readers.py +0 -0
- {coltrace-0.1.0.dev6 → coltrace-0.1.0.dev7}/examples/text_pipeline/text.py +0 -0
- {coltrace-0.1.0.dev6 → coltrace-0.1.0.dev7}/setup.cfg +0 -0
- {coltrace-0.1.0.dev6 → coltrace-0.1.0.dev7}/src/coltrace/__main__.py +0 -0
- {coltrace-0.1.0.dev6 → coltrace-0.1.0.dev7}/src/coltrace/callbacks.py +0 -0
- {coltrace-0.1.0.dev6 → coltrace-0.1.0.dev7}/src/coltrace/capture.py +0 -0
- {coltrace-0.1.0.dev6 → coltrace-0.1.0.dev7}/src/coltrace/collector.py +0 -0
- {coltrace-0.1.0.dev6 → coltrace-0.1.0.dev7}/src/coltrace/graph.py +0 -0
- {coltrace-0.1.0.dev6 → coltrace-0.1.0.dev7}/src/coltrace/history.py +0 -0
- {coltrace-0.1.0.dev6 → coltrace-0.1.0.dev7}/src/coltrace/nosql_sources.py +0 -0
- {coltrace-0.1.0.dev6 → coltrace-0.1.0.dev7}/src/coltrace/source_models.py +0 -0
- {coltrace-0.1.0.dev6 → coltrace-0.1.0.dev7}/src/coltrace/source_readers.py +0 -0
- {coltrace-0.1.0.dev6 → coltrace-0.1.0.dev7}/src/coltrace/sql_sources.py +0 -0
- {coltrace-0.1.0.dev6 → coltrace-0.1.0.dev7}/src/coltrace/templates/graph.html +0 -0
- {coltrace-0.1.0.dev6 → coltrace-0.1.0.dev7}/src/coltrace/visual_layout.py +0 -0
- {coltrace-0.1.0.dev6 → coltrace-0.1.0.dev7}/src/coltrace.egg-info/dependency_links.txt +0 -0
- {coltrace-0.1.0.dev6 → coltrace-0.1.0.dev7}/src/coltrace.egg-info/entry_points.txt +0 -0
- {coltrace-0.1.0.dev6 → coltrace-0.1.0.dev7}/src/coltrace.egg-info/requires.txt +0 -0
- {coltrace-0.1.0.dev6 → coltrace-0.1.0.dev7}/src/coltrace.egg-info/top_level.txt +0 -0
- {coltrace-0.1.0.dev6 → coltrace-0.1.0.dev7}/tests/fixtures/sample_pipeline/extract/prices.py +0 -0
- {coltrace-0.1.0.dev6 → coltrace-0.1.0.dev7}/tests/fixtures/sample_pipeline/features/pricing.py +0 -0
- {coltrace-0.1.0.dev6 → coltrace-0.1.0.dev7}/tests/fixtures/sample_pipeline/pipeline.py +0 -0
- {coltrace-0.1.0.dev6 → coltrace-0.1.0.dev7}/tests/fixtures/sample_pipeline/transform/pricing.py +0 -0
- {coltrace-0.1.0.dev6 → coltrace-0.1.0.dev7}/tests/integration/test_annotation_effects.py +0 -0
- {coltrace-0.1.0.dev6 → coltrace-0.1.0.dev7}/tests/integration/test_callback_roles.py +0 -0
- {coltrace-0.1.0.dev6 → coltrace-0.1.0.dev7}/tests/integration/test_capture_workflow.py +0 -0
- {coltrace-0.1.0.dev6 → coltrace-0.1.0.dev7}/tests/integration/test_cli.py +0 -0
- {coltrace-0.1.0.dev6 → coltrace-0.1.0.dev7}/tests/integration/test_column_story.py +0 -0
- {coltrace-0.1.0.dev6 → coltrace-0.1.0.dev7}/tests/integration/test_compatibility_cli.py +0 -0
- {coltrace-0.1.0.dev6 → coltrace-0.1.0.dev7}/tests/integration/test_database_sources.py +0 -0
- {coltrace-0.1.0.dev6 → coltrace-0.1.0.dev7}/tests/integration/test_journey_boundaries.py +0 -0
- {coltrace-0.1.0.dev6 → coltrace-0.1.0.dev7}/tests/integration/test_nosql_extraction.py +0 -0
- {coltrace-0.1.0.dev6 → coltrace-0.1.0.dev7}/tests/integration/test_other_column_stories.py +0 -0
- {coltrace-0.1.0.dev6 → coltrace-0.1.0.dev7}/tests/integration/test_pandas_observation.py +0 -0
- {coltrace-0.1.0.dev6 → coltrace-0.1.0.dev7}/tests/integration/test_reader_inventory.py +0 -0
- {coltrace-0.1.0.dev6 → coltrace-0.1.0.dev7}/tests/integration/test_resolution_boundaries.py +0 -0
- {coltrace-0.1.0.dev6 → coltrace-0.1.0.dev7}/tests/integration/test_scan_project.py +0 -0
- {coltrace-0.1.0.dev6 → coltrace-0.1.0.dev7}/tests/integration/test_source_config.py +0 -0
- {coltrace-0.1.0.dev6 → coltrace-0.1.0.dev7}/tests/integration/test_source_precision.py +0 -0
- {coltrace-0.1.0.dev6 → coltrace-0.1.0.dev7}/tests/integration/test_sql_reader_boundaries.py +0 -0
- {coltrace-0.1.0.dev6 → coltrace-0.1.0.dev7}/tests/integration/test_text_pipeline.py +0 -0
- {coltrace-0.1.0.dev6 → coltrace-0.1.0.dev7}/tests/unit/test_callbacks.py +0 -0
- {coltrace-0.1.0.dev6 → coltrace-0.1.0.dev7}/tests/unit/test_collector.py +0 -0
- {coltrace-0.1.0.dev6 → coltrace-0.1.0.dev7}/tests/unit/test_graph.py +0 -0
- {coltrace-0.1.0.dev6 → coltrace-0.1.0.dev7}/tests/unit/test_graph_workspace.py +0 -0
- {coltrace-0.1.0.dev6 → coltrace-0.1.0.dev7}/tests/unit/test_history.py +0 -0
- {coltrace-0.1.0.dev6 → coltrace-0.1.0.dev7}/tests/unit/test_journey.py +0 -0
- {coltrace-0.1.0.dev6 → coltrace-0.1.0.dev7}/tests/unit/test_nosql_sources.py +0 -0
- {coltrace-0.1.0.dev6 → coltrace-0.1.0.dev7}/tests/unit/test_read_capture.py +0 -0
- {coltrace-0.1.0.dev6 → coltrace-0.1.0.dev7}/tests/unit/test_scanner.py +0 -0
- {coltrace-0.1.0.dev6 → coltrace-0.1.0.dev7}/tests/unit/test_source_presentation.py +0 -0
- {coltrace-0.1.0.dev6 → coltrace-0.1.0.dev7}/tests/unit/test_sql_sources.py +0 -0
- {coltrace-0.1.0.dev6 → coltrace-0.1.0.dev7}/tests/unit/test_visual_layout.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: coltrace
|
|
3
|
-
Version: 0.1.0.
|
|
3
|
+
Version: 0.1.0.dev7
|
|
4
4
|
Summary: Static Pandas column lineage, impact analysis, and local dependency graphs
|
|
5
5
|
Author: Cristiano Diniz
|
|
6
6
|
License-Expression: MIT
|
|
@@ -32,7 +32,7 @@ column versions across direct function calls. Static scanning never imports or
|
|
|
32
32
|
executes the project or reads its input data. Optional read capture observes
|
|
33
33
|
column labels while you explicitly execute your own pipeline.
|
|
34
34
|
|
|
35
|
-
**Development preview: `0.1.0.
|
|
35
|
+
**Development preview: `0.1.0.dev7`.** The supported subset is deliberately small.
|
|
36
36
|
Unsupported operations produce diagnostics and may interrupt lineage. A graph
|
|
37
37
|
with no edge is not proof that a dependency does not exist.
|
|
38
38
|
|
|
@@ -91,22 +91,37 @@ See [database source usage](docs/database-sources.md), the
|
|
|
91
91
|
[executable capture example](examples/read_capture/README.md).
|
|
92
92
|
The [source checkpoint](docs/source-checkpoint.md) records validation and limits.
|
|
93
93
|
|
|
94
|
-
##
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
94
|
+
## Notebook projects and common Python structure
|
|
95
|
+
|
|
96
|
+
Databricks notebook source (`# Databricks notebook source`, `# COMMAND ----------`,
|
|
97
|
+
`# MAGIC`) and raw magics such as `%pip` are parsed with the magics neutralized
|
|
98
|
+
in place. `%run ./child` includes the child notebook in the caller's namespace,
|
|
99
|
+
statically. Nothing is executed. `.ipynb` files and live cells are not inputs.
|
|
100
|
+
|
|
101
|
+
Branches, `try` blocks, loops and early returns are joined: a column that may
|
|
102
|
+
hold different values after alternative paths gets an inferred merge version
|
|
103
|
+
reading each possibility, so lineage continues without being claimed as
|
|
104
|
+
confirmed. Loops over configured label collections (`for c in COLS`) are
|
|
105
|
+
unrolled exactly. Classes, nested functions and closures, decorators,
|
|
106
|
+
`*args/**kwargs`, `+=`, unpacking, comprehensions and ternaries are interpreted
|
|
107
|
+
rather than erasing state.
|
|
108
|
+
|
|
109
|
+
A documented catalog of Pandas/NumPy semantics covers common Series methods and
|
|
110
|
+
accessors, `np.where`/`pd.to_numeric`-style functions, row-selecting DataFrame
|
|
111
|
+
methods (`sort_values`, `head`, `reset_index`, `query`, …), whole-frame value
|
|
112
|
+
methods (`fillna`, `astype`, …), partial `.loc[mask, col]` updates and
|
|
113
|
+
`merge`/`concat` (inferred). When data enters through an injected helper such as
|
|
114
|
+
`run_query(sql)`, ColTrace follows the closure when possible; otherwise, a result
|
|
115
|
+
used as a DataFrame becomes an inferred frame whose SQL SELECT list seeds its
|
|
116
|
+
columns, and the scan suggests a source contract to confirm it.
|
|
117
|
+
|
|
118
|
+
See the [compatibility checkpoint](docs/compatibility-checkpoint.md), the
|
|
119
|
+
[Databricks-style example](examples/databricks_project/README.md) and the
|
|
106
120
|
[multi-module example](examples/robustness_pipeline/README.md).
|
|
107
121
|
|
|
108
122
|
Notebook output separates discovered files from modeled frames/columns, shows
|
|
109
|
-
configuration and versions, prints errors first,
|
|
123
|
+
configuration and versions, prints errors first, separates informational notes
|
|
124
|
+
(inferences) from warnings, and saves full diagnostics outside the analyzed tree
|
|
110
125
|
before attempting column selection. Listed static labels are not runtime
|
|
111
126
|
`df.columns`. Capture remains opt-in.
|
|
112
127
|
|
|
@@ -209,17 +224,22 @@ the shortest eligible distance, so a node reached both ways appears as direct.
|
|
|
209
224
|
| SQL-to-Pandas extraction | Bounded SQL projections, aliases, expressions and helpers; documented readers/conversions or explicit contracts |
|
|
210
225
|
| MongoDB / DynamoDB extraction | Literal projections and bounded Mongo expressions; candidate fields stay partial without observed schema |
|
|
211
226
|
| Literal dictionary `DataFrame` construction | String column keys and literal values |
|
|
212
|
-
| `frame["column"]`, `frame.loc[:, "column"]` |
|
|
213
|
-
| `frame["c"] = frame["a"] + frame["b"]` | Arithmetic, scalar constants, temporary values, versions |
|
|
227
|
+
| `frame["column"]`, `frame.loc[:, "column"]` | Literal or statically known labels (`for c in COLS`, f-strings) |
|
|
228
|
+
| `frame["c"] = frame["a"] + frame["b"]` | Arithmetic, masks, ternaries, scalar constants, temporary values, versions |
|
|
214
229
|
| `alias = frame` | Same abstract object and shared mutation |
|
|
215
230
|
| `copy(deep=True)`, `head(n)`, `shape` | Bounded independent copies, row previews and immutable metadata observations |
|
|
216
|
-
|
|
|
231
|
+
| Conditional/exception/context/loop blocks, early returns | Separate inferred paths joined with inferred merge versions |
|
|
232
|
+
| Databricks notebook source, `%pip`, `%run` | Magics neutralized; `%run` included statically in the caller namespace |
|
|
233
|
+
| Series/DataFrame/NumPy catalog | Documented derivations, row selections, value methods, exports; see the subset |
|
|
234
|
+
| `merge`, `join`, `concat` | Inferred frame whose columns may come from any input |
|
|
235
|
+
| Classes, closures, decorators, unpacking | Interpreted; decorators assumed transparent (inferred) |
|
|
236
|
+
| Injected `run_query(sql)` helpers | Followed through closures, or inferred from DataFrame use with SQL columns |
|
|
217
237
|
| `rename(columns={"old": "new"})` | Literal, non-colliding map; new DataFrame, or shared mutation with `inplace=True` |
|
|
218
238
|
| `assign(b=lambda x: x["a"] * 2)` | Sequential simple lambdas; eager arguments use their original scope |
|
|
219
239
|
| `Series.apply(clean_text)` | Resolved scalar callbacks; bounded summaries and inferred evidence |
|
|
220
240
|
| `frame[["a", "b"]] = DataFrame(results.tolist(), index=frame.index)` | Fixed callback output width and matching source index |
|
|
221
241
|
| `dropna`, literal projection, boolean row filters | Preserve value lineage; predicate consumption tracked separately |
|
|
222
|
-
| `to_parquet
|
|
242
|
+
| `to_parquet`, `to_csv`, `to_excel`, `to_dict`, … | Located export/serialization consumption |
|
|
223
243
|
| Direct synchronous function calls | Explicit arguments/returns, bounded acyclic contexts and explicit imports |
|
|
224
244
|
| Annotated, uncalled functions | Separate inferred templates, not evidence of pipeline connections |
|
|
225
245
|
|
|
@@ -268,7 +288,7 @@ print(report.to_json())
|
|
|
268
288
|
|
|
269
289
|
The earlier `scan_project` API remains available for raw occurrences and receiver
|
|
270
290
|
evidence. Its discovery report (`0.1`) is a different format from the lineage
|
|
271
|
-
snapshot (`0.
|
|
291
|
+
snapshot (`0.5`). See [discovery JSON](docs/discovery-json.md) and
|
|
272
292
|
[lineage JSON](docs/lineage-json.md). Public facts are dataclasses; their serialized
|
|
273
293
|
form is independent of NetworkX and contains no AST or executable objects.
|
|
274
294
|
|
|
@@ -283,8 +303,13 @@ exclude = ["generated", "legacy/*.py", "*_test.py"]
|
|
|
283
303
|
|
|
284
304
|
Glob patterns match case-sensitive, project-relative POSIX paths. Patterns with
|
|
285
305
|
no `/` also match individual path components. Built-in exclusions cover `.venv`,
|
|
286
|
-
`venv`, `.git`, `__pycache__`, `.coltrace`,
|
|
287
|
-
`dist`. Linked files/directories
|
|
306
|
+
`venv`, `.git`, `__pycache__`, `.coltrace`, `.ipynb_checkpoints`, `node_modules`,
|
|
307
|
+
tox/nox and pytest/mypy/Ruff caches, `build`, and `dist`. Linked files/directories
|
|
308
|
+
and Windows reparse points are skipped. A `.coltraceignore` file at the analyzed
|
|
309
|
+
root uses gitignore syntax (root-level subset, including `!` negation). The root
|
|
310
|
+
`.gitignore` is also applied unless `respect_gitignore = false` is set.
|
|
311
|
+
`observers = ["notify_team", "client.*"]` declares project helpers that only read
|
|
312
|
+
the DataFrames they receive, so they do not interrupt lineage.
|
|
288
313
|
`ScanConfig(exclude=("generated",))` overrides TOML settings and extends built-ins.
|
|
289
314
|
|
|
290
315
|
## Development
|