isalgraph 0.1.0__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.
- isalgraph-0.1.0/.claude/CLAUDE.md +231 -0
- isalgraph-0.1.0/.claude/hooks/compact-context.sh +48 -0
- isalgraph-0.1.0/.claude/settings.json +81 -0
- isalgraph-0.1.0/.gitattributes +2 -0
- isalgraph-0.1.0/.gitignore +217 -0
- isalgraph-0.1.0/LICENSE +21 -0
- isalgraph-0.1.0/PKG-INFO +298 -0
- isalgraph-0.1.0/README.md +241 -0
- isalgraph-0.1.0/assets/fig_message_length_scatter_log.png +0 -0
- isalgraph-0.1.0/assets/fig_shortest_path_comparison.png +0 -0
- isalgraph-0.1.0/assets/graphical_abstract_agent_instructions_v2.md +460 -0
- isalgraph-0.1.0/assets/graphical_abtract.pdf +0 -0
- isalgraph-0.1.0/assets/graphical_abtract.svg +3931 -0
- isalgraph-0.1.0/assets/locality_proof.png +0 -0
- isalgraph-0.1.0/assets/og-card.png +0 -0
- isalgraph-0.1.0/benchmarks/plotting_styles.py +579 -0
- isalgraph-0.1.0/benchmarks/real_data/eval_computational/__init__.py +1 -0
- isalgraph-0.1.0/benchmarks/real_data/eval_computational/eval_computational.py +1533 -0
- isalgraph-0.1.0/benchmarks/real_data/eval_computational/timing_utils.py +193 -0
- isalgraph-0.1.0/benchmarks/real_data/eval_correlation/README.md +50 -0
- isalgraph-0.1.0/benchmarks/real_data/eval_correlation/__init__.py +1 -0
- isalgraph-0.1.0/benchmarks/real_data/eval_correlation/correlation_metrics.py +472 -0
- isalgraph-0.1.0/benchmarks/real_data/eval_correlation/eval_correlation.py +1595 -0
- isalgraph-0.1.0/benchmarks/real_data/eval_embedding/__init__.py +1 -0
- isalgraph-0.1.0/benchmarks/real_data/eval_embedding/embedding_methods.py +472 -0
- isalgraph-0.1.0/benchmarks/real_data/eval_embedding/eval_embedding.py +1091 -0
- isalgraph-0.1.0/benchmarks/real_data/eval_encoding/__init__.py +1 -0
- isalgraph-0.1.0/benchmarks/real_data/eval_encoding/compute_synthetic_ged.py +360 -0
- isalgraph-0.1.0/benchmarks/real_data/eval_encoding/eval_encoding.py +1355 -0
- isalgraph-0.1.0/benchmarks/real_data/eval_encoding/synthetic_generator.py +284 -0
- isalgraph-0.1.0/benchmarks/real_data/eval_message_length/__init__.py +1 -0
- isalgraph-0.1.0/benchmarks/real_data/eval_message_length/eval_message_length.py +691 -0
- isalgraph-0.1.0/benchmarks/real_data/eval_message_length/message_length_computer.py +225 -0
- isalgraph-0.1.0/benchmarks/real_data/eval_setup/README.md +76 -0
- isalgraph-0.1.0/benchmarks/real_data/eval_setup/__init__.py +1 -0
- isalgraph-0.1.0/benchmarks/real_data/eval_setup/canonical_computer.py +403 -0
- isalgraph-0.1.0/benchmarks/real_data/eval_setup/dataset_filter.py +178 -0
- isalgraph-0.1.0/benchmarks/real_data/eval_setup/eval_setup.py +651 -0
- isalgraph-0.1.0/benchmarks/real_data/eval_setup/ged_computer.py +262 -0
- isalgraph-0.1.0/benchmarks/real_data/eval_setup/generate_greedy_single.py +168 -0
- isalgraph-0.1.0/benchmarks/real_data/eval_setup/graphedx_loader.py +179 -0
- isalgraph-0.1.0/benchmarks/real_data/eval_setup/greedy_single_computer.py +135 -0
- isalgraph-0.1.0/benchmarks/real_data/eval_setup/iam_letter_loader.py +168 -0
- isalgraph-0.1.0/benchmarks/real_data/eval_setup/levenshtein_computer.py +164 -0
- isalgraph-0.1.0/benchmarks/real_data/eval_setup/method_comparator.py +181 -0
- isalgraph-0.1.0/benchmarks/real_data/eval_setup/pruned_exhaustive_computer.py +143 -0
- isalgraph-0.1.0/benchmarks/real_data/eval_setup/validator.py +481 -0
- isalgraph-0.1.0/benchmarks/real_data/eval_setup/wl_kernel_computer.py +212 -0
- isalgraph-0.1.0/benchmarks/real_data/eval_visualizations/__init__.py +1 -0
- isalgraph-0.1.0/benchmarks/real_data/eval_visualizations/cdll_drawing.py +197 -0
- isalgraph-0.1.0/benchmarks/real_data/eval_visualizations/composite_method_tradeoff.py +1545 -0
- isalgraph-0.1.0/benchmarks/real_data/eval_visualizations/embedding_loader.py +210 -0
- isalgraph-0.1.0/benchmarks/real_data/eval_visualizations/example_selector.py +177 -0
- isalgraph-0.1.0/benchmarks/real_data/eval_visualizations/fig_empirical_complexity.py +790 -0
- isalgraph-0.1.0/benchmarks/real_data/eval_visualizations/fig_message_length.py +944 -0
- isalgraph-0.1.0/benchmarks/real_data/eval_visualizations/generate_computational_figures.py +1064 -0
- isalgraph-0.1.0/benchmarks/real_data/eval_visualizations/generate_correlation_figures.py +112 -0
- isalgraph-0.1.0/benchmarks/real_data/eval_visualizations/generate_embedding_figures.py +92 -0
- isalgraph-0.1.0/benchmarks/real_data/eval_visualizations/generate_encoding_figures.py +901 -0
- isalgraph-0.1.0/benchmarks/real_data/eval_visualizations/generate_illustrative_figures.py +986 -0
- isalgraph-0.1.0/benchmarks/real_data/eval_visualizations/graph_drawing.py +113 -0
- isalgraph-0.1.0/benchmarks/real_data/eval_visualizations/graph_loader.py +45 -0
- isalgraph-0.1.0/benchmarks/real_data/eval_visualizations/graphical_abstract/__init__.py +12 -0
- isalgraph-0.1.0/benchmarks/real_data/eval_visualizations/graphical_abstract/compose_graphical_abstract.py +205 -0
- isalgraph-0.1.0/benchmarks/real_data/eval_visualizations/graphical_abstract/locality_proof.py +395 -0
- isalgraph-0.1.0/benchmarks/real_data/eval_visualizations/graphical_abstract/panel_a_encoding.py +566 -0
- isalgraph-0.1.0/benchmarks/real_data/eval_visualizations/graphical_abstract/panel_b_results.py +693 -0
- isalgraph-0.1.0/benchmarks/real_data/eval_visualizations/illustrative/__init__.py +1 -0
- isalgraph-0.1.0/benchmarks/real_data/eval_visualizations/illustrative/algorithm_figures.py +1317 -0
- isalgraph-0.1.0/benchmarks/real_data/eval_visualizations/illustrative/shortest_path_comparison.py +880 -0
- isalgraph-0.1.0/benchmarks/real_data/eval_visualizations/illustrative/topology_and_complexity.py +1372 -0
- isalgraph-0.1.0/benchmarks/real_data/eval_visualizations/individual_figures/__init__.py +1 -0
- isalgraph-0.1.0/benchmarks/real_data/eval_visualizations/individual_figures/correlation_examples.py +568 -0
- isalgraph-0.1.0/benchmarks/real_data/eval_visualizations/individual_figures/derived_examples.py +414 -0
- isalgraph-0.1.0/benchmarks/real_data/eval_visualizations/individual_figures/embedding_examples.py +619 -0
- isalgraph-0.1.0/benchmarks/real_data/eval_visualizations/population_figures/__init__.py +1 -0
- isalgraph-0.1.0/benchmarks/real_data/eval_visualizations/population_figures/central_heatmap.py +814 -0
- isalgraph-0.1.0/benchmarks/real_data/eval_visualizations/population_figures/correlation_figures.py +600 -0
- isalgraph-0.1.0/benchmarks/real_data/eval_visualizations/population_figures/derived_figures.py +650 -0
- isalgraph-0.1.0/benchmarks/real_data/eval_visualizations/population_figures/embedding_figures.py +452 -0
- isalgraph-0.1.0/benchmarks/real_data/eval_visualizations/result_loader.py +214 -0
- isalgraph-0.1.0/benchmarks/real_data/eval_visualizations/string_alignment.py +177 -0
- isalgraph-0.1.0/benchmarks/real_data/eval_visualizations/table_generator.py +163 -0
- isalgraph-0.1.0/benchmarks/real_data/eval_visualizations/table_performance_summary.py +412 -0
- isalgraph-0.1.0/benchmarks/synthetic_data/alphabet_entropy/alphabet_entropy.py +962 -0
- isalgraph-0.1.0/benchmarks/synthetic_data/canonical_invariance/README.md +65 -0
- isalgraph-0.1.0/benchmarks/synthetic_data/canonical_invariance/canonical_invariance.py +1385 -0
- isalgraph-0.1.0/benchmarks/synthetic_data/greedy_optimality_gap/greedy_optimality_gap.py +944 -0
- isalgraph-0.1.0/benchmarks/synthetic_data/levenshtein_vs_ged/README.md +72 -0
- isalgraph-0.1.0/benchmarks/synthetic_data/levenshtein_vs_ged/levenshtein_vs_ged.py +1119 -0
- isalgraph-0.1.0/benchmarks/synthetic_data/random_roundtrip/README.md +67 -0
- isalgraph-0.1.0/benchmarks/synthetic_data/random_roundtrip/random_roundtrip.py +1187 -0
- isalgraph-0.1.0/benchmarks/synthetic_data/roundtrip_fixed_point/roundtrip_fixed_point.py +913 -0
- isalgraph-0.1.0/benchmarks/synthetic_data/starting_node_sensitivity/starting_node_sensitivity.py +903 -0
- isalgraph-0.1.0/benchmarks/synthetic_data/string_length_analysis/README.md +70 -0
- isalgraph-0.1.0/benchmarks/synthetic_data/string_length_analysis/string_length_analysis.py +941 -0
- isalgraph-0.1.0/benchmarks/synthetic_data/string_pipeline/string_pipeline.py +1173 -0
- isalgraph-0.1.0/docs/.nojekyll +0 -0
- isalgraph-0.1.0/docs/PROGRESS.md +51 -0
- isalgraph-0.1.0/docs/benchmarks.html +171 -0
- isalgraph-0.1.0/docs/css/benchmarks.css +259 -0
- isalgraph-0.1.0/docs/css/components.css +351 -0
- isalgraph-0.1.0/docs/css/explorer.css +476 -0
- isalgraph-0.1.0/docs/css/footer.css +88 -0
- isalgraph-0.1.0/docs/css/how-it-works.css +217 -0
- isalgraph-0.1.0/docs/css/index.css +269 -0
- isalgraph-0.1.0/docs/css/layout.css +80 -0
- isalgraph-0.1.0/docs/css/math.css +421 -0
- isalgraph-0.1.0/docs/css/nav.css +324 -0
- isalgraph-0.1.0/docs/css/playground.css +279 -0
- isalgraph-0.1.0/docs/css/publications.css +100 -0
- isalgraph-0.1.0/docs/css/reset.css +104 -0
- isalgraph-0.1.0/docs/css/team.css +160 -0
- isalgraph-0.1.0/docs/css/typography.css +66 -0
- isalgraph-0.1.0/docs/css/variables.css +110 -0
- isalgraph-0.1.0/docs/data/publications.csv +29 -0
- isalgraph-0.1.0/docs/data/team.csv +3 -0
- isalgraph-0.1.0/docs/explorer.html +213 -0
- isalgraph-0.1.0/docs/favicon.svg +5 -0
- isalgraph-0.1.0/docs/how-it-works.html +485 -0
- isalgraph-0.1.0/docs/images/EzequielLopez-sm.png +0 -0
- isalgraph-0.1.0/docs/images/EzequielLopez.png +0 -0
- isalgraph-0.1.0/docs/images/MarioPascual-sm.jpg +0 -0
- isalgraph-0.1.0/docs/images/MarioPascual.jpg +0 -0
- isalgraph-0.1.0/docs/images/icai-optimized.png +0 -0
- isalgraph-0.1.0/docs/images/icai.png +0 -0
- isalgraph-0.1.0/docs/images/og-card.png +0 -0
- isalgraph-0.1.0/docs/index.html +260 -0
- isalgraph-0.1.0/docs/js/benchmarks/benchmarks-controller.js +302 -0
- isalgraph-0.1.0/docs/js/benchmarks/benchmarks-data.js +432 -0
- isalgraph-0.1.0/docs/js/components.js +170 -0
- isalgraph-0.1.0/docs/js/core/alphabet.js +38 -0
- isalgraph-0.1.0/docs/js/core/cdll.js +185 -0
- isalgraph-0.1.0/docs/js/core/g2s.js +358 -0
- isalgraph-0.1.0/docs/js/core/s2g.js +177 -0
- isalgraph-0.1.0/docs/js/core/sparse-graph.js +258 -0
- isalgraph-0.1.0/docs/js/data-loader.js +351 -0
- isalgraph-0.1.0/docs/js/explorer/explorer-controller.js +427 -0
- isalgraph-0.1.0/docs/js/explorer/levenshtein.js +239 -0
- isalgraph-0.1.0/docs/js/math/math-animations.js +550 -0
- isalgraph-0.1.0/docs/js/playground/playground-controller.js +672 -0
- isalgraph-0.1.0/docs/js/publications.js +42 -0
- isalgraph-0.1.0/docs/js/theme.js +33 -0
- isalgraph-0.1.0/docs/js/viz/cdll-renderer.js +153 -0
- isalgraph-0.1.0/docs/js/viz/graph-renderer.js +162 -0
- isalgraph-0.1.0/docs/js/viz/hero-animation.js +245 -0
- isalgraph-0.1.0/docs/js/viz/step-player.js +157 -0
- isalgraph-0.1.0/docs/math.html +723 -0
- isalgraph-0.1.0/docs/original_code_and_files/IsalGraph4feb2026c/IsalGraph/.idea/workspace.xml +90 -0
- isalgraph-0.1.0/docs/playground.html +294 -0
- isalgraph-0.1.0/docs/publications.html +65 -0
- isalgraph-0.1.0/docs/team.html +109 -0
- isalgraph-0.1.0/experiments/paper_pipeline/config.yaml +113 -0
- isalgraph-0.1.0/experiments/paper_pipeline/generate_figures.py +432 -0
- isalgraph-0.1.0/experiments/paper_pipeline/launch.sh +536 -0
- isalgraph-0.1.0/experiments/paper_pipeline/workers/step1_eval_setup.sh +82 -0
- isalgraph-0.1.0/experiments/paper_pipeline/workers/step2a_eval_correlation.sh +73 -0
- isalgraph-0.1.0/experiments/paper_pipeline/workers/step2b_eval_computational.sh +58 -0
- isalgraph-0.1.0/experiments/paper_pipeline/workers/step2c_eval_encoding.sh +57 -0
- isalgraph-0.1.0/experiments/paper_pipeline/workers/step2d_eval_message_length.sh +74 -0
- isalgraph-0.1.0/experiments/paper_pipeline/workers/step3a_algorithm_figures.sh +31 -0
- isalgraph-0.1.0/experiments/paper_pipeline/workers/step3b_topology_figs.sh +57 -0
- isalgraph-0.1.0/experiments/paper_pipeline/workers/step4_generate_figures.sh +31 -0
- isalgraph-0.1.0/pyproject.toml +121 -0
- isalgraph-0.1.0/scripts/scaffold.sh +215 -0
- isalgraph-0.1.0/setup.cfg +4 -0
- isalgraph-0.1.0/slurm/config.yaml +153 -0
- isalgraph-0.1.0/slurm/launch.sh +163 -0
- isalgraph-0.1.0/slurm/workers/alphabet_entropy_login.sh +31 -0
- isalgraph-0.1.0/slurm/workers/alphabet_entropy_slurm.sh +50 -0
- isalgraph-0.1.0/slurm/workers/canonical_invariance_login.sh +23 -0
- isalgraph-0.1.0/slurm/workers/canonical_invariance_slurm.sh +54 -0
- isalgraph-0.1.0/slurm/workers/eval_computational_login.sh +69 -0
- isalgraph-0.1.0/slurm/workers/eval_computational_slurm.sh +51 -0
- isalgraph-0.1.0/slurm/workers/eval_correlation_login.sh +50 -0
- isalgraph-0.1.0/slurm/workers/eval_correlation_slurm.sh +49 -0
- isalgraph-0.1.0/slurm/workers/eval_embedding_login.sh +54 -0
- isalgraph-0.1.0/slurm/workers/eval_embedding_slurm.sh +54 -0
- isalgraph-0.1.0/slurm/workers/eval_encoding_slurm.sh +59 -0
- isalgraph-0.1.0/slurm/workers/eval_setup_login.sh +45 -0
- isalgraph-0.1.0/slurm/workers/eval_setup_slurm.sh +50 -0
- isalgraph-0.1.0/slurm/workers/greedy_optimality_gap_login.sh +31 -0
- isalgraph-0.1.0/slurm/workers/greedy_optimality_gap_slurm.sh +50 -0
- isalgraph-0.1.0/slurm/workers/levenshtein_vs_ged_login.sh +23 -0
- isalgraph-0.1.0/slurm/workers/levenshtein_vs_ged_slurm.sh +54 -0
- isalgraph-0.1.0/slurm/workers/random_roundtrip_login.sh +29 -0
- isalgraph-0.1.0/slurm/workers/random_roundtrip_slurm.sh +63 -0
- isalgraph-0.1.0/slurm/workers/roundtrip_fixed_point_login.sh +31 -0
- isalgraph-0.1.0/slurm/workers/roundtrip_fixed_point_slurm.sh +50 -0
- isalgraph-0.1.0/slurm/workers/starting_node_sensitivity_login.sh +29 -0
- isalgraph-0.1.0/slurm/workers/starting_node_sensitivity_slurm.sh +50 -0
- isalgraph-0.1.0/slurm/workers/string_length_analysis_login.sh +24 -0
- isalgraph-0.1.0/slurm/workers/string_length_analysis_slurm.sh +50 -0
- isalgraph-0.1.0/slurm/workers/topology_complexity_figs_login.sh +37 -0
- isalgraph-0.1.0/slurm/workers/topology_complexity_figs_slurm.sh +52 -0
- isalgraph-0.1.0/src/isalgraph/__init__.py +26 -0
- isalgraph-0.1.0/src/isalgraph/adapters/__init__.py +1 -0
- isalgraph-0.1.0/src/isalgraph/adapters/base.py +68 -0
- isalgraph-0.1.0/src/isalgraph/adapters/igraph_adapter.py +43 -0
- isalgraph-0.1.0/src/isalgraph/adapters/networkx_adapter.py +65 -0
- isalgraph-0.1.0/src/isalgraph/adapters/pyg_adapter.py +68 -0
- isalgraph-0.1.0/src/isalgraph/core/README.md +673 -0
- isalgraph-0.1.0/src/isalgraph/core/__init__.py +27 -0
- isalgraph-0.1.0/src/isalgraph/core/algorithms/__init__.py +24 -0
- isalgraph-0.1.0/src/isalgraph/core/algorithms/base.py +52 -0
- isalgraph-0.1.0/src/isalgraph/core/algorithms/exhaustive.py +49 -0
- isalgraph-0.1.0/src/isalgraph/core/algorithms/greedy_min.py +69 -0
- isalgraph-0.1.0/src/isalgraph/core/algorithms/greedy_single.py +62 -0
- isalgraph-0.1.0/src/isalgraph/core/algorithms/pruned_exhaustive.py +49 -0
- isalgraph-0.1.0/src/isalgraph/core/canonical.py +350 -0
- isalgraph-0.1.0/src/isalgraph/core/canonical_pruned.py +365 -0
- isalgraph-0.1.0/src/isalgraph/core/cdll.py +129 -0
- isalgraph-0.1.0/src/isalgraph/core/graph_to_string.py +340 -0
- isalgraph-0.1.0/src/isalgraph/core/sparse_graph.py +209 -0
- isalgraph-0.1.0/src/isalgraph/core/string_to_graph.py +195 -0
- isalgraph-0.1.0/src/isalgraph/errors.py +17 -0
- isalgraph-0.1.0/src/isalgraph/py.typed +0 -0
- isalgraph-0.1.0/src/isalgraph/types.py +28 -0
- isalgraph-0.1.0/src/isalgraph.egg-info/PKG-INFO +298 -0
- isalgraph-0.1.0/src/isalgraph.egg-info/SOURCES.txt +264 -0
- isalgraph-0.1.0/src/isalgraph.egg-info/dependency_links.txt +1 -0
- isalgraph-0.1.0/src/isalgraph.egg-info/requires.txt +37 -0
- isalgraph-0.1.0/src/isalgraph.egg-info/top_level.txt +1 -0
- isalgraph-0.1.0/tests/conftest.py +69 -0
- isalgraph-0.1.0/tests/eval_validation/__init__.py +0 -0
- isalgraph-0.1.0/tests/eval_validation/conftest.py +130 -0
- isalgraph-0.1.0/tests/eval_validation/test_canonical_fixedpoint.py +109 -0
- isalgraph-0.1.0/tests/eval_validation/test_canonical_properties.py +136 -0
- isalgraph-0.1.0/tests/eval_validation/test_metric_properties.py +136 -0
- isalgraph-0.1.0/tests/eval_validation/test_reconstruction.py +106 -0
- isalgraph-0.1.0/tests/eval_validation/test_roundtrip_isomorphism.py +140 -0
- isalgraph-0.1.0/tests/eval_validation/test_string_validity.py +104 -0
- isalgraph-0.1.0/tests/eval_validation/test_wl_kernel_properties.py +140 -0
- isalgraph-0.1.0/tests/integration/test_canonical_networkx.py +91 -0
- isalgraph-0.1.0/tests/integration/test_igraph_adapter.py +76 -0
- isalgraph-0.1.0/tests/integration/test_networkx_adapter.py +206 -0
- isalgraph-0.1.0/tests/integration/test_pipeline_imports.py +165 -0
- isalgraph-0.1.0/tests/integration/test_pyg_adapter.py +383 -0
- isalgraph-0.1.0/tests/property/test_pruned_canonical_property.py +81 -0
- isalgraph-0.1.0/tests/property/test_roundtrip_property.py +66 -0
- isalgraph-0.1.0/tests/unit/test_algorithms.py +347 -0
- isalgraph-0.1.0/tests/unit/test_canonical.py +432 -0
- isalgraph-0.1.0/tests/unit/test_canonical_pruned.py +441 -0
- isalgraph-0.1.0/tests/unit/test_cdll.py +138 -0
- isalgraph-0.1.0/tests/unit/test_errors.py +46 -0
- isalgraph-0.1.0/tests/unit/test_graph_to_string.py +168 -0
- isalgraph-0.1.0/tests/unit/test_message_length.py +405 -0
- isalgraph-0.1.0/tests/unit/test_roundtrip.py +230 -0
- isalgraph-0.1.0/tests/unit/test_sparse_graph.py +287 -0
- isalgraph-0.1.0/tests/unit/test_string_to_graph.py +163 -0
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
# CLAUDE.md -- IsalGraph
|
|
2
|
+
|
|
3
|
+
## Project Identity
|
|
4
|
+
|
|
5
|
+
**IsalGraph**: Representation of graph structure as instruction strings.
|
|
6
|
+
Authors: Ezequiel Lopez-Rubio (supervisor), Mario Pascual Gonzalez (PhD student).
|
|
7
|
+
University of Malaga. Extends IsalChem (molecular graphs) to arbitrary graphs
|
|
8
|
+
with unlabeled, indistinguishable nodes and no degree restrictions.
|
|
9
|
+
|
|
10
|
+
> For full mathematical foundation, architecture, and adapter design:
|
|
11
|
+
> read `src/isalgraph/core/README.md`.
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## Scientific Mindset
|
|
16
|
+
|
|
17
|
+
- Approach every task as a world-class deep learning scientist: think step by step,
|
|
18
|
+
reason, and justify decisions with literature references and mathematical rigor.
|
|
19
|
+
- Do NOT please the user. If something won't work, has theoretical flaws, or is
|
|
20
|
+
scientifically incorrect -- say so. We are doing serious research.
|
|
21
|
+
- Be proactive and creative. If a task sparks a connection to another concept,
|
|
22
|
+
report it to the user if it could enhance the research.
|
|
23
|
+
- When generating plans for local agents, ensure: (1) the agent has access to
|
|
24
|
+
local code and will know the implementation; (2) provide theoretical background
|
|
25
|
+
so the agent can validate; (3) deliver testable results from code being
|
|
26
|
+
implemented; (4) respect strict folder and code organization for maintainability.
|
|
27
|
+
- Prioritize correctness over speed. Every algorithm must be mathematically justified.
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## Environment
|
|
32
|
+
|
|
33
|
+
- **Conda env**: `isalgraph` (activate: `conda activate isalgraph`)
|
|
34
|
+
- **Python**: `~/.conda/envs/isalgraph/bin/python`
|
|
35
|
+
|
|
36
|
+
| Command | Purpose |
|
|
37
|
+
|---------|---------|
|
|
38
|
+
| `python -m pytest tests/unit/ -v` | Unit tests (fast, no external deps) |
|
|
39
|
+
| `python -m pytest tests/integration/ -v` | Integration tests (networkx, igraph) |
|
|
40
|
+
| `python -m pytest tests/property/ -v` | Property-based tests (hypothesis) |
|
|
41
|
+
| `python -m pytest tests/ -v --cov=isalgraph` | Full suite with coverage |
|
|
42
|
+
| `python -m ruff check --fix src/ tests/` | Lint + autofix |
|
|
43
|
+
| `python -m ruff format src/ tests/` | Format |
|
|
44
|
+
| `python -m mypy src/isalgraph/` | Type checking (strict) |
|
|
45
|
+
| `python -m pip install -e ".[dev]"` | Install in dev mode |
|
|
46
|
+
|
|
47
|
+
---
|
|
48
|
+
|
|
49
|
+
## Architecture Overview
|
|
50
|
+
|
|
51
|
+
### Instruction Set (alphabet Sigma = {N,n,P,p,V,v,C,c,W})
|
|
52
|
+
|
|
53
|
+
| Instr | Semantics |
|
|
54
|
+
|-------|-----------|
|
|
55
|
+
| `N/P` | Move primary pointer next/prev in CDLL |
|
|
56
|
+
| `n/p` | Move secondary pointer next/prev in CDLL |
|
|
57
|
+
| `V` | New node + edge from primary's graph node, insert into CDLL after primary |
|
|
58
|
+
| `v` | New node + edge from secondary's graph node, insert into CDLL after secondary |
|
|
59
|
+
| `C` | Edge from primary's graph node to secondary's graph node |
|
|
60
|
+
| `c` | Edge from secondary's graph node to primary's graph node |
|
|
61
|
+
| `W` | No-op |
|
|
62
|
+
|
|
63
|
+
### Core Data Structures
|
|
64
|
+
|
|
65
|
+
- **SparseGraph**: Adjacency-set representation. Nodes are contiguous integer IDs.
|
|
66
|
+
- **CDLL**: Array-backed circular doubly linked list. Nodes have internal indices
|
|
67
|
+
(from free list) and store graph node indices as `_data` payloads.
|
|
68
|
+
- **Two pointers** (primary, secondary): These are CDLL node indices, NOT graph
|
|
69
|
+
node indices. Use `cdll.get_value(ptr)` to get the graph node.
|
|
70
|
+
|
|
71
|
+
### Dependency Layering
|
|
72
|
+
|
|
73
|
+
```
|
|
74
|
+
experiments/ benchmarks/ -> anything (torch, matplotlib, ...)
|
|
75
|
+
isalgraph.adapters -> optional: networkx, igraph, pyg
|
|
76
|
+
isalgraph.core -> ZERO external deps (stdlib only)
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
### Key Modules
|
|
80
|
+
|
|
81
|
+
```
|
|
82
|
+
src/isalgraph/core/cdll.py CircularDoublyLinkedList
|
|
83
|
+
src/isalgraph/core/sparse_graph.py SparseGraph
|
|
84
|
+
src/isalgraph/core/string_to_graph.py StringToGraph converter
|
|
85
|
+
src/isalgraph/core/graph_to_string.py GraphToString converter
|
|
86
|
+
src/isalgraph/core/canonical.py Canonical string (Phase 3)
|
|
87
|
+
src/isalgraph/adapters/ NetworkX, igraph, PyG bridges
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
---
|
|
91
|
+
|
|
92
|
+
## Critical Invariants and Known Bugs
|
|
93
|
+
|
|
94
|
+
### Invariants (violating these causes silent corruption)
|
|
95
|
+
|
|
96
|
+
1. **CDLL indices != graph node indices.** Pointers are CDLL node indices.
|
|
97
|
+
To get graph node: `cdll.get_value(pointer)`. NEVER conflate them.
|
|
98
|
+
2. **`insert_after(cdll_node, graph_node)`** -- first arg is CDLL index, second is payload.
|
|
99
|
+
3. **`SparseGraph.add_edge(source, target)`** -- both args are graph node indices.
|
|
100
|
+
4. **Pointer immobility on V/v.** The pointer does NOT advance after V/v insertion.
|
|
101
|
+
5. **`generate_pairs_sorted_by_sum`** must sort by `|a|+|b|` (total displacement cost),
|
|
102
|
+
not `a+b` (algebraic sum). The number of movement instructions emitted is `|a|+|b|`.
|
|
103
|
+
|
|
104
|
+
### Known Bugs in Original Code (docs/original_code_and_files/)
|
|
105
|
+
|
|
106
|
+
1. `SparseGraph.__init__`: `_edge_count = 1` -- should be 0.
|
|
107
|
+
2. `generate_pairs_sorted_by_sum`: sorts by `a+b`, should sort by `|a|+|b|`.
|
|
108
|
+
3. `GraphToString.run()` while loop: uses `and` -- should be `or`
|
|
109
|
+
(continue while nodes OR edges remain uninserted).
|
|
110
|
+
4. `GraphToString.run()`: pointers not updated after emitting N/P/n/p instructions.
|
|
111
|
+
5. `GraphToString.run()`: debug `print()` statement left in main loop.
|
|
112
|
+
|
|
113
|
+
---
|
|
114
|
+
|
|
115
|
+
## Code Organization Rules
|
|
116
|
+
|
|
117
|
+
### Dependency Rules (strictly enforced)
|
|
118
|
+
|
|
119
|
+
- `isalgraph.core`: ZERO external deps. Only Python stdlib + typing.
|
|
120
|
+
- `isalgraph.adapters`: optional deps. Each adapter imports its library independently.
|
|
121
|
+
- `experiments/`, `benchmarks/`: may use anything (torch, matplotlib, pptx, etc.)
|
|
122
|
+
|
|
123
|
+
### Coding Conventions
|
|
124
|
+
|
|
125
|
+
- Full type annotations on ALL function signatures.
|
|
126
|
+
- Google-style docstrings on all public functions and classes.
|
|
127
|
+
- `__slots__` on performance-critical data structures (CDLL, SparseGraph).
|
|
128
|
+
- No `print()` for diagnostics -- use `logging` or raise exceptions.
|
|
129
|
+
- All files under `src/isalgraph/` must pass `ruff check` and `mypy --strict`.
|
|
130
|
+
|
|
131
|
+
### Migration Reference
|
|
132
|
+
|
|
133
|
+
Original code is preserved read-only at `docs/original_code_and_files/`.
|
|
134
|
+
Migration table: see `docs/ISALGRAPH_AGENT_CONTEXT.md` Section 4.4.
|
|
135
|
+
All internal imports must use package paths: `from isalgraph.core.sparse_graph import SparseGraph`.
|
|
136
|
+
|
|
137
|
+
---
|
|
138
|
+
|
|
139
|
+
## Mathematical Foundation (brief)
|
|
140
|
+
|
|
141
|
+
**Round-trip property**: For any valid IsalGraph string w,
|
|
142
|
+
`S2G(w)` is isomorphic to `S2G(G2S(S2G(w), v0))`.
|
|
143
|
+
|
|
144
|
+
**Canonical string**: `w*_G = lexmin{ w in argmin_{v in V} |G2S(G, v)| }`.
|
|
145
|
+
This is a complete graph invariant: `w*_G = w*_H` iff `G ~ H`.
|
|
146
|
+
|
|
147
|
+
**Graph distance**: `Levenshtein(w*_G, w*_H)` approximates graph edit distance.
|
|
148
|
+
|
|
149
|
+
Full details: `src/isalgraph/core/README.md`
|
|
150
|
+
|
|
151
|
+
---
|
|
152
|
+
|
|
153
|
+
## Scientific Development Protocol
|
|
154
|
+
|
|
155
|
+
### 1. Evidence-Grounded Changes
|
|
156
|
+
- Every non-trivial decision must cite: a paper, a mathematical justification, or empirical data.
|
|
157
|
+
- "I think this is better" is not valid. "This reduces variance because [formula/reference]" is.
|
|
158
|
+
- When proposing architectural or methodological changes, state the expected effect and why.
|
|
159
|
+
- If no evidence exists, flag it explicitly as a hypothesis and propose a way to test it.
|
|
160
|
+
|
|
161
|
+
### 2. Research Workflow: Plan → Test → Analyze → Fix
|
|
162
|
+
**Planning phase:**
|
|
163
|
+
- Break the task into checkable items in `tasks/todo.md`.
|
|
164
|
+
- For each item, annotate: objective, success metric, and relevant references.
|
|
165
|
+
- Proactively flag: "Based on [paper/method], we could also try X — want me to include it?"
|
|
166
|
+
- Write specs before code. Ambiguity in spec = ambiguity in results.
|
|
167
|
+
|
|
168
|
+
**Testing phase:**
|
|
169
|
+
- Define quantitative success criteria before running anything.
|
|
170
|
+
- Log all hyperparameters, seeds, and environment details (reproducibility is non-negotiable).
|
|
171
|
+
- Use controlled comparisons: change one variable at a time unless explicitly doing ablations.
|
|
172
|
+
- When I report a bug, don't start by trying to fix it. Instead, start by writing a test that reproduces the bug. Then, have subagents try to fix the bug and prove it with a passing test.
|
|
173
|
+
|
|
174
|
+
**Analysis phase:**
|
|
175
|
+
- Be proactive: if results reveal an anomaly or improvement opportunity, report it with evidence.
|
|
176
|
+
- Propose fixes or enhancements with: (a) what you found, (b) why it matters, (c) what to do.
|
|
177
|
+
- Always compute and report: mean, std, confidence intervals or statistical tests where applicable.
|
|
178
|
+
- Distinguish between statistically significant and practically significant differences.
|
|
179
|
+
- If a metric degrades, investigate root cause before proposing a fix.
|
|
180
|
+
|
|
181
|
+
**Fixing phase:**
|
|
182
|
+
- Fixes must reference what the analysis revealed. No blind patches.
|
|
183
|
+
- After fixing, re-run the relevant test to confirm the fix and check for regressions.
|
|
184
|
+
- Update `docs/tasks/lessons.md` or task-specific file with the failure mode and the corrective pattern.
|
|
185
|
+
|
|
186
|
+
### 3. Interdisciplinary Rigor (CS × AI × Biomedicine)
|
|
187
|
+
- Code changes: justify with computational complexity, memory, or convergence arguments.
|
|
188
|
+
- Model changes: justify with loss landscape, gradient dynamics, or information-theoretic reasoning.
|
|
189
|
+
- Clinical/biomedical changes: justify with domain constraints (e.g., anatomical priors, acquisition physics, class imbalance in rare pathologies).
|
|
190
|
+
- When in doubt about clinical validity, flag it — do not assume.
|
|
191
|
+
|
|
192
|
+
### 4. Proactive Scientific Agent Behavior
|
|
193
|
+
- During planning and analysis: if you identify a method, paper, or trick that could improve the current approach, **propose it immediately** with a one-line rationale.
|
|
194
|
+
- Suggest ablations or controls the user may not have considered.
|
|
195
|
+
- If a result contradicts expectations, form a hypothesis and propose a diagnostic experiment.
|
|
196
|
+
- Never silently ignore warnings, NaNs, or unexpected distributions — investigate and report.
|
|
197
|
+
|
|
198
|
+
### 5. Code & Experiment Standards
|
|
199
|
+
- All functions: typed, documented (docstring, no usage examples), brief inline comments.
|
|
200
|
+
- Prefer libraries over custom implementations. Cite the library and version.
|
|
201
|
+
- Logging over print. Use `logging` module with appropriate levels.
|
|
202
|
+
- Atomic functions, low cyclomatic complexity, OOP with dataclasses where appropriate.
|
|
203
|
+
- Experiment configs: use YAML/JSON, never hardcode hyperparameters in scripts.
|
|
204
|
+
- Random seeds must be set and logged. Results must be reproducible.
|
|
205
|
+
|
|
206
|
+
### 6. Communication Standards
|
|
207
|
+
- When reporting results: tables > prose. Include units, dataset split, and N.
|
|
208
|
+
- When proposing changes: state the current state, the proposed change, and the expected delta.
|
|
209
|
+
- When uncertain: quantify uncertainty. "This might work" → "This has ~X% chance based on [reasoning]."
|
|
210
|
+
- Use LaTeX notation for any mathematical expression in documentation or comments.
|
|
211
|
+
|
|
212
|
+
### 7. Verification & Self-Correction
|
|
213
|
+
- Never mark a task done without quantitative evidence it works.
|
|
214
|
+
- After any correction from the user: update `docs/tasks/lessons.md` or task-specific file with the pattern.
|
|
215
|
+
- Challenge your own proposals before presenting them. Ask: "What could go wrong?"
|
|
216
|
+
- If a subagent is used, verify its output — trust but verify.
|
|
217
|
+
|
|
218
|
+
---
|
|
219
|
+
|
|
220
|
+
## Key References
|
|
221
|
+
|
|
222
|
+
- Lopez-Rubio (2025). arXiv:2512.10429v2. `docs/references/2512_10429v2.pdf`
|
|
223
|
+
- Design notes: `docs/references/Idea.pdf`
|
|
224
|
+
- You et al. (2018). GraphRNN. ICML.
|
|
225
|
+
- Fey & Lenssen (2019). PyTorch Geometric. ICLR Workshop.
|
|
226
|
+
|
|
227
|
+
## Detailed Specifications
|
|
228
|
+
|
|
229
|
+
- @src/isalgraph/core/README.md -- Full math, architecture
|
|
230
|
+
- @docs/DEVELOPMENT.md -- Development workflow, testing, commands
|
|
231
|
+
- Save every output in `media/mpascual/Sandisk2TB/research/isalgraph`
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# Compaction recovery hook -- re-injects critical context after /compact
|
|
3
|
+
|
|
4
|
+
cat <<'CONTEXT'
|
|
5
|
+
=== ISALGRAPH COMPACTION RECOVERY ===
|
|
6
|
+
|
|
7
|
+
INSTRUCTION SET: {N,n,P,p,V,v,C,c,W}
|
|
8
|
+
N/P: move primary pointer next/prev in CDLL
|
|
9
|
+
n/p: move secondary pointer next/prev in CDLL
|
|
10
|
+
V/v: insert new vertex + edge from primary/secondary, insert into CDLL after pointer
|
|
11
|
+
C/c: connect primary->secondary / secondary->primary
|
|
12
|
+
W: no-op
|
|
13
|
+
|
|
14
|
+
CRITICAL INVARIANT:
|
|
15
|
+
Pointers are CDLL node indices, NOT graph node indices.
|
|
16
|
+
To get graph node: cdll.get_value(pointer)
|
|
17
|
+
NEVER pass pointer directly to SparseGraph.add_edge()
|
|
18
|
+
Pointer does NOT move after V/v instruction.
|
|
19
|
+
|
|
20
|
+
KNOWN BUGS IN ORIGINAL CODE (documented, not yet fixed):
|
|
21
|
+
1. SparseGraph._edge_count initialized to 1 (should be 0)
|
|
22
|
+
2. generate_pairs_sorted_by_sum: sorts by a+b, should sort by |a|+|b|
|
|
23
|
+
3. GraphToString while loop: uses AND (should be OR for nodes/edges remaining)
|
|
24
|
+
4. GraphToString: pointers not updated after emitting movement instructions
|
|
25
|
+
5. Debug print() left in GraphToString main loop
|
|
26
|
+
|
|
27
|
+
DEPENDENCY RULE:
|
|
28
|
+
isalgraph.core = ZERO external deps (stdlib only)
|
|
29
|
+
isalgraph.adapters = optional (networkx, igraph, pyg)
|
|
30
|
+
|
|
31
|
+
ENVIRONMENT:
|
|
32
|
+
Conda env: isalgraph
|
|
33
|
+
Tests: python -m pytest tests/ -v
|
|
34
|
+
Lint: python -m ruff check src/ tests/
|
|
35
|
+
Types: python -m mypy src/isalgraph/
|
|
36
|
+
|
|
37
|
+
ROUND-TRIP PROPERTY:
|
|
38
|
+
S2G(w) ~ S2G(G2S(S2G(w), v0)) for all valid strings w
|
|
39
|
+
~ denotes graph isomorphism
|
|
40
|
+
|
|
41
|
+
KEY FILES:
|
|
42
|
+
src/isalgraph/core/ -- Core implementation (zero deps)
|
|
43
|
+
docs/ISALGRAPH_AGENT_CONTEXT.md -- Full mathematical + architectural spec (583 lines)
|
|
44
|
+
docs/references/ -- Preprint + design notes PDFs
|
|
45
|
+
.claude/CLAUDE.md -- Project hub (<200 lines)
|
|
46
|
+
|
|
47
|
+
=== END COMPACTION RECOVERY ===
|
|
48
|
+
CONTEXT
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
{
|
|
2
|
+
"permissions": {
|
|
3
|
+
"allow": [
|
|
4
|
+
"Bash(*)",
|
|
5
|
+
"Read(*)",
|
|
6
|
+
"Write(*)",
|
|
7
|
+
"Edit(*)",
|
|
8
|
+
"MultiEdit(*)",
|
|
9
|
+
"Glob(*)",
|
|
10
|
+
"Grep(*)",
|
|
11
|
+
"Task(*)",
|
|
12
|
+
"WebFetch(*)",
|
|
13
|
+
"WebSearch(*)",
|
|
14
|
+
"NotebookEdit(*)"
|
|
15
|
+
],
|
|
16
|
+
"deny": [
|
|
17
|
+
"Bash(git push --force*)",
|
|
18
|
+
"Bash(git push -f*)",
|
|
19
|
+
"Bash(git reset --hard*)",
|
|
20
|
+
"Bash(git clean -f*)",
|
|
21
|
+
"Bash(git branch -D*)",
|
|
22
|
+
"Bash(> /dev/*)",
|
|
23
|
+
"Bash(dd if=*)",
|
|
24
|
+
"Bash(mkfs*)",
|
|
25
|
+
"Bash(kill -9*)",
|
|
26
|
+
"Bash(killall*)",
|
|
27
|
+
"Bash(pkill*)",
|
|
28
|
+
"Bash(chmod 777*)",
|
|
29
|
+
"Bash(curl*|*sh)",
|
|
30
|
+
"Bash(wget*|*sh)",
|
|
31
|
+
"Edit(docs/original_code_and_files/**)",
|
|
32
|
+
"Write(docs/original_code_and_files/**)"
|
|
33
|
+
]
|
|
34
|
+
},
|
|
35
|
+
"hooks": {
|
|
36
|
+
"PostToolUse": [
|
|
37
|
+
{
|
|
38
|
+
"matcher": "Edit|Write|MultiEdit",
|
|
39
|
+
"hooks": [
|
|
40
|
+
{
|
|
41
|
+
"type": "command",
|
|
42
|
+
"command": "jq -r '.tool_input.file_path // .tool_input.path // \"\"' | { read file_path; if echo \"$file_path\" | grep -qE '\\.py$'; then ~/.conda/envs/isalgraph/bin/python -m ruff check --fix \"$file_path\" 2>/dev/null; ~/.conda/envs/isalgraph/bin/python -m ruff format \"$file_path\" 2>/dev/null; fi; }"
|
|
43
|
+
}
|
|
44
|
+
]
|
|
45
|
+
}
|
|
46
|
+
],
|
|
47
|
+
"PreToolUse": [
|
|
48
|
+
{
|
|
49
|
+
"matcher": "Write|Edit",
|
|
50
|
+
"hooks": [
|
|
51
|
+
{
|
|
52
|
+
"type": "command",
|
|
53
|
+
"command": "jq -r '.tool_input.file_path // .tool_input.path // \"\"' | { read file_path; case \"$file_path\" in *.env*|*credentials*|*secret*) echo 'BLOCKED: sensitive file' >&2; exit 2;; esac; }"
|
|
54
|
+
}
|
|
55
|
+
]
|
|
56
|
+
}
|
|
57
|
+
],
|
|
58
|
+
"Notification": [
|
|
59
|
+
{
|
|
60
|
+
"matcher": "",
|
|
61
|
+
"hooks": [
|
|
62
|
+
{
|
|
63
|
+
"type": "command",
|
|
64
|
+
"command": "notify-send --app-name='Claude Code' --icon=dialog-information 'IsalGraph Task Complete' \"$(jq -r '.notification // \"Task finished\"')\" 2>/dev/null; (paplay /usr/share/sounds/freedesktop/stereo/window-attention.oga 2>/dev/null || canberra-gtk-play -i complete 2>/dev/null) &"
|
|
65
|
+
}
|
|
66
|
+
]
|
|
67
|
+
}
|
|
68
|
+
],
|
|
69
|
+
"SessionStart": [
|
|
70
|
+
{
|
|
71
|
+
"matcher": "compact",
|
|
72
|
+
"hooks": [
|
|
73
|
+
{
|
|
74
|
+
"type": "command",
|
|
75
|
+
"command": "bash .claude/hooks/compact-context.sh"
|
|
76
|
+
}
|
|
77
|
+
]
|
|
78
|
+
}
|
|
79
|
+
]
|
|
80
|
+
}
|
|
81
|
+
}
|
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
WEBSITE_SPEC.md
|
|
2
|
+
|
|
3
|
+
# Byte-compiled / optimized / DLL files
|
|
4
|
+
__pycache__/
|
|
5
|
+
*.py[codz]
|
|
6
|
+
*$py.class
|
|
7
|
+
|
|
8
|
+
# C extensions
|
|
9
|
+
*.so
|
|
10
|
+
|
|
11
|
+
.mypy_cache/
|
|
12
|
+
.pytest_cache/
|
|
13
|
+
.ruff_cache/
|
|
14
|
+
|
|
15
|
+
# Distribution / packaging
|
|
16
|
+
.Python
|
|
17
|
+
build/
|
|
18
|
+
develop-eggs/
|
|
19
|
+
dist/
|
|
20
|
+
downloads/
|
|
21
|
+
eggs/
|
|
22
|
+
.eggs/
|
|
23
|
+
lib/
|
|
24
|
+
lib64/
|
|
25
|
+
parts/
|
|
26
|
+
sdist/
|
|
27
|
+
var/
|
|
28
|
+
wheels/
|
|
29
|
+
share/python-wheels/
|
|
30
|
+
*.egg-info/
|
|
31
|
+
.installed.cfg
|
|
32
|
+
*.egg
|
|
33
|
+
MANIFEST
|
|
34
|
+
|
|
35
|
+
# PyInstaller
|
|
36
|
+
# Usually these files are written by a python script from a template
|
|
37
|
+
# before PyInstaller builds the exe, so as to inject date/other infos into it.
|
|
38
|
+
*.manifest
|
|
39
|
+
*.spec
|
|
40
|
+
|
|
41
|
+
# Installer logs
|
|
42
|
+
pip-log.txt
|
|
43
|
+
pip-delete-this-directory.txt
|
|
44
|
+
|
|
45
|
+
# Unit test / coverage reports
|
|
46
|
+
htmlcov/
|
|
47
|
+
.tox/
|
|
48
|
+
.nox/
|
|
49
|
+
.coverage
|
|
50
|
+
.coverage.*
|
|
51
|
+
.cache
|
|
52
|
+
nosetests.xml
|
|
53
|
+
coverage.xml
|
|
54
|
+
*.cover
|
|
55
|
+
*.py.cover
|
|
56
|
+
.hypothesis/
|
|
57
|
+
.pytest_cache/
|
|
58
|
+
.ruff_cache/
|
|
59
|
+
cover/
|
|
60
|
+
|
|
61
|
+
# Translations
|
|
62
|
+
*.mo
|
|
63
|
+
*.pot
|
|
64
|
+
|
|
65
|
+
# Django stuff:
|
|
66
|
+
*.log
|
|
67
|
+
local_settings.py
|
|
68
|
+
db.sqlite3
|
|
69
|
+
db.sqlite3-journal
|
|
70
|
+
|
|
71
|
+
# Flask stuff:
|
|
72
|
+
instance/
|
|
73
|
+
.webassets-cache
|
|
74
|
+
|
|
75
|
+
# Scrapy stuff:
|
|
76
|
+
.scrapy
|
|
77
|
+
|
|
78
|
+
# Sphinx documentation
|
|
79
|
+
docs/_build/
|
|
80
|
+
|
|
81
|
+
# PyBuilder
|
|
82
|
+
.pybuilder/
|
|
83
|
+
target/
|
|
84
|
+
|
|
85
|
+
# Jupyter Notebook
|
|
86
|
+
.ipynb_checkpoints
|
|
87
|
+
|
|
88
|
+
# IPython
|
|
89
|
+
profile_default/
|
|
90
|
+
ipython_config.py
|
|
91
|
+
|
|
92
|
+
# pyenv
|
|
93
|
+
# For a library or package, you might want to ignore these files since the code is
|
|
94
|
+
# intended to run in multiple environments; otherwise, check them in:
|
|
95
|
+
# .python-version
|
|
96
|
+
|
|
97
|
+
# pipenv
|
|
98
|
+
# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
|
|
99
|
+
# However, in case of collaboration, if having platform-specific dependencies or dependencies
|
|
100
|
+
# having no cross-platform support, pipenv may install dependencies that don't work, or not
|
|
101
|
+
# install all needed dependencies.
|
|
102
|
+
#Pipfile.lock
|
|
103
|
+
|
|
104
|
+
# UV
|
|
105
|
+
# Similar to Pipfile.lock, it is generally recommended to include uv.lock in version control.
|
|
106
|
+
# This is especially recommended for binary packages to ensure reproducibility, and is more
|
|
107
|
+
# commonly ignored for libraries.
|
|
108
|
+
#uv.lock
|
|
109
|
+
|
|
110
|
+
# poetry
|
|
111
|
+
# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
|
|
112
|
+
# This is especially recommended for binary packages to ensure reproducibility, and is more
|
|
113
|
+
# commonly ignored for libraries.
|
|
114
|
+
# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
|
|
115
|
+
#poetry.lock
|
|
116
|
+
#poetry.toml
|
|
117
|
+
|
|
118
|
+
# pdm
|
|
119
|
+
# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
|
|
120
|
+
# pdm recommends including project-wide configuration in pdm.toml, but excluding .pdm-python.
|
|
121
|
+
# https://pdm-project.org/en/latest/usage/project/#working-with-version-control
|
|
122
|
+
#pdm.lock
|
|
123
|
+
#pdm.toml
|
|
124
|
+
.pdm-python
|
|
125
|
+
.pdm-build/
|
|
126
|
+
|
|
127
|
+
# pixi
|
|
128
|
+
# Similar to Pipfile.lock, it is generally recommended to include pixi.lock in version control.
|
|
129
|
+
#pixi.lock
|
|
130
|
+
# Pixi creates a virtual environment in the .pixi directory, just like venv module creates one
|
|
131
|
+
# in the .venv directory. It is recommended not to include this directory in version control.
|
|
132
|
+
.pixi
|
|
133
|
+
|
|
134
|
+
# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
|
|
135
|
+
__pypackages__/
|
|
136
|
+
|
|
137
|
+
# Celery stuff
|
|
138
|
+
celerybeat-schedule
|
|
139
|
+
celerybeat.pid
|
|
140
|
+
|
|
141
|
+
# SageMath parsed files
|
|
142
|
+
*.sage.py
|
|
143
|
+
|
|
144
|
+
# Environments
|
|
145
|
+
.env
|
|
146
|
+
.envrc
|
|
147
|
+
.venv
|
|
148
|
+
env/
|
|
149
|
+
venv/
|
|
150
|
+
ENV/
|
|
151
|
+
env.bak/
|
|
152
|
+
venv.bak/
|
|
153
|
+
|
|
154
|
+
# Spyder project settings
|
|
155
|
+
.spyderproject
|
|
156
|
+
.spyproject
|
|
157
|
+
|
|
158
|
+
# Rope project settings
|
|
159
|
+
.ropeproject
|
|
160
|
+
|
|
161
|
+
# mkdocs documentation
|
|
162
|
+
/site
|
|
163
|
+
|
|
164
|
+
# mypy
|
|
165
|
+
.mypy_cache/
|
|
166
|
+
.dmypy.json
|
|
167
|
+
dmypy.json
|
|
168
|
+
|
|
169
|
+
# Pyre type checker
|
|
170
|
+
.pyre/
|
|
171
|
+
|
|
172
|
+
# pytype static type analyzer
|
|
173
|
+
.pytype/
|
|
174
|
+
|
|
175
|
+
# Cython debug symbols
|
|
176
|
+
cython_debug/
|
|
177
|
+
|
|
178
|
+
# PyCharm
|
|
179
|
+
# JetBrains specific template is maintained in a separate JetBrains.gitignore that can
|
|
180
|
+
# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
|
|
181
|
+
# and can be added to the global gitignore or merged into this file. For a more nuclear
|
|
182
|
+
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
|
|
183
|
+
#.idea/
|
|
184
|
+
|
|
185
|
+
# Abstra
|
|
186
|
+
# Abstra is an AI-powered process automation framework.
|
|
187
|
+
# Ignore directories containing user credentials, local state, and settings.
|
|
188
|
+
# Learn more at https://abstra.io/docs
|
|
189
|
+
.abstra/
|
|
190
|
+
|
|
191
|
+
# Visual Studio Code
|
|
192
|
+
# Visual Studio Code specific template is maintained in a separate VisualStudioCode.gitignore
|
|
193
|
+
# that can be found at https://github.com/github/gitignore/blob/main/Global/VisualStudioCode.gitignore
|
|
194
|
+
# and can be added to the global gitignore or merged into this file. However, if you prefer,
|
|
195
|
+
# you could uncomment the following to ignore the entire vscode folder
|
|
196
|
+
# .vscode/
|
|
197
|
+
|
|
198
|
+
# Ruff stuff:
|
|
199
|
+
.ruff_cache/
|
|
200
|
+
|
|
201
|
+
# PyPI configuration file
|
|
202
|
+
.pypirc
|
|
203
|
+
|
|
204
|
+
# Cursor
|
|
205
|
+
# Cursor is an AI-powered code editor. `.cursorignore` specifies files/directories to
|
|
206
|
+
# exclude from AI features like autocomplete and code analysis. Recommended for sensitive data
|
|
207
|
+
# refer to https://docs.cursor.com/context/ignore-files
|
|
208
|
+
.cursorignore
|
|
209
|
+
.cursorindexingignore
|
|
210
|
+
|
|
211
|
+
# Marimo
|
|
212
|
+
marimo/_static/
|
|
213
|
+
marimo/_lsp/
|
|
214
|
+
__marimo__/
|
|
215
|
+
|
|
216
|
+
# Pipeline run outputs
|
|
217
|
+
runs/
|
isalgraph-0.1.0/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Ezequiel Lopez-Rubio, Mario Pascual Gonzalez
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|