From 01791562f1b52bd11d433d9ca5b198e7ec8eca6a Mon Sep 17 00:00:00 2001 From: KaifAhmad1 Date: Sat, 6 Dec 2025 16:17:27 +0530 Subject: [PATCH] refactor(kg): Remove ConflictDetector and Deduplicator from kg module - Remove ConflictDetector and Deduplicator from semantica.kg module - Update all imports to use semantica.conflicts and semantica.deduplication - Update all notebooks to use class-based API (no convenience functions) - Fix method signatures: pass graph parameter to methods instead of constructor - Update calculate_centrality calls to use specific methods (calculate_degree_centrality, etc.) - Fix detect_communities and analyze_connectivity return value handling - Update all documentation (kg_usage.md, docs/reference/kg.md) - Remove conflict_detector.py and deduplicator.py from kg module - Update registry.py to remove conflict and deduplicate task types --- .../02_Advanced_Graph_Analytics.ipynb | 6 +- .../06_Multi_Source_Data_Integration.ipynb | 3 +- .../07_Building_Knowledge_Graphs.ipynb | 23 +++-- .../introduction/10_Graph_Analytics.ipynb | 3 +- .../01_Drug_Discovery_Pipeline.ipynb | 20 ++-- .../02_Genomic_Variant_Analysis.ipynb | 29 +++--- .../01_DeFi_Protocol_Intelligence.ipynb | 23 +++-- .../02_Transaction_Network_Analysis.ipynb | 25 ++--- .../cybersecurity/03_Threat_Correlation.ipynb | 3 +- .../02_Environmental_Impact.ipynb | 3 +- .../04_Resource_Optimization.ipynb | 3 +- .../trading/02_News_Sentiment_Analysis.ipynb | 3 +- .../trading/04_Risk_Assessment.ipynb | 3 +- fix_remaining_notebooks.py | 92 ------------------- 14 files changed, 88 insertions(+), 151 deletions(-) delete mode 100644 fix_remaining_notebooks.py diff --git a/cookbook/advanced/02_Advanced_Graph_Analytics.ipynb b/cookbook/advanced/02_Advanced_Graph_Analytics.ipynb index e74978a0..904246ce 100644 --- a/cookbook/advanced/02_Advanced_Graph_Analytics.ipynb +++ b/cookbook/advanced/02_Advanced_Graph_Analytics.ipynb @@ -89,8 +89,10 @@ "source": [ "centrality_calculator = CentralityCalculator()\n", "\n", - "degree_centrality = centrality_calculator.calculate_centrality(kg, measure=\"degree\")\n", - "betweenness_centrality = centrality_calculator.calculate_centrality(kg, measure=\"betweenness\")\n", + "degree_centrality_result = centrality_calculator.calculate_degree_centrality(kg)\n", + "degree_centrality = degree_centrality_result.get('centrality', {})\n", + "betweenness_centrality_result = centrality_calculator.calculate_betweenness_centrality(kg)\n", + "betweenness_centrality = betweenness_centrality_result.get('centrality', {})\n", "\n", "print(f\"Degree centrality: {len(degree_centrality)} entities\")\n", "print(f\"Betweenness centrality: {len(betweenness_centrality)} entities\")\n" diff --git a/cookbook/advanced/06_Multi_Source_Data_Integration.ipynb b/cookbook/advanced/06_Multi_Source_Data_Integration.ipynb index ecaa9f38..f5ed0ff1 100644 --- a/cookbook/advanced/06_Multi_Source_Data_Integration.ipynb +++ b/cookbook/advanced/06_Multi_Source_Data_Integration.ipynb @@ -46,7 +46,8 @@ "source": [ "from semantica.ingest import FileIngestor, WebIngestor, DBIngestor, StreamIngestor, FeedIngestor\n", "from semantica.parse import DocumentParser, StructuredDataParser\n", - "from semantica.kg import GraphBuilder, EntityResolver, ConflictDetector, ProvenanceTracker\n", + "from semantica.kg import GraphBuilder, EntityResolver, ProvenanceTracker\n", + "from semantica.conflicts import ConflictDetector\n", "import tempfile\n", "import os\n", "import json\n", diff --git a/cookbook/introduction/07_Building_Knowledge_Graphs.ipynb b/cookbook/introduction/07_Building_Knowledge_Graphs.ipynb index 7fdfb22d..d8f9b74c 100644 --- a/cookbook/introduction/07_Building_Knowledge_Graphs.ipynb +++ b/cookbook/introduction/07_Building_Knowledge_Graphs.ipynb @@ -10,7 +10,7 @@ "\n", "## Overview\n", "\n", - "This notebook demonstrates how to build knowledge graphs from entities and relationships using Semantica's graph building modules. You'll learn to use `GraphBuilder`, `EntityResolver`, `GraphValidator`, and `Deduplicator`.\n", + "This notebook demonstrates how to build knowledge graphs from entities and relationships using Semantica's graph building modules. You'll learn to use `GraphBuilder`, `EntityResolver`, and `GraphValidator`.\n", "\n", "**Documentation**: [API Reference](https://semantica.readthedocs.io/reference/kg/)\n", "\n", @@ -19,7 +19,7 @@ "- Use `GraphBuilder` to construct knowledge graphs\n", "- Use `EntityResolver` to resolve entity conflicts\n", "- Use `GraphValidator` to validate graph structure\n", - "- Use `Deduplicator` to remove duplicate entities\n", + "**Note**: For deduplication, use the `semantica.deduplication` module.\n", "\n", "## Installation\n", "\n", @@ -145,14 +145,23 @@ "metadata": {}, "outputs": [], "source": [ - "from semantica.kg import Deduplicator\n", + "from semantica.deduplication import DuplicateDetector, EntityMerger, MergeStrategy\n", "\n", - "deduplicator = Deduplicator()\n", + "# Detect duplicates\n", + "detector = DuplicateDetector(similarity_threshold=0.8)\n", + "duplicate_groups = detector.detect_duplicate_groups(knowledge_graph.get('entities', []))\n", "\n", - "deduplicated_graph = deduplicator.deduplicate(knowledge_graph)\n", + "# Merge duplicates\n", + "merger = EntityMerger()\n", + "merge_operations = merger.merge_duplicates(\n", + " knowledge_graph.get('entities', []),\n", + " strategy=MergeStrategy.KEEP_MOST_COMPLETE\n", + ")\n", + "\n", + "deduplicated_entities = [op.merged_entity for op in merge_operations]\n", "\n", "print(f\"Original entities: {len(knowledge_graph.get('entities', []))}\")\n", - "print(f\"Deduplicated entities: {len(deduplicated_graph.get('entities', []))}\")\n" + "print(f\"Deduplicated entities: {len(deduplicated_entities)}\")\n" ] }, { @@ -166,7 +175,7 @@ "- **GraphBuilder**: Construct knowledge graphs from entities and relationships\n", "- **EntityResolver**: Resolve entity conflicts and duplicates\n", "- **GraphValidator**: Validate graph structure and quality\n", - "- **Deduplicator**: Remove duplicate entities\n", + "- **Deduplication**: Use `semantica.deduplication` module for removing duplicate entities\n", "\n", "Next: Learn how to analyze graphs in the Graph_Analytics notebook.\n" ] diff --git a/cookbook/introduction/10_Graph_Analytics.ipynb b/cookbook/introduction/10_Graph_Analytics.ipynb index 42d72077..a76a29ea 100644 --- a/cookbook/introduction/10_Graph_Analytics.ipynb +++ b/cookbook/introduction/10_Graph_Analytics.ipynb @@ -91,7 +91,8 @@ "\n", "centrality_calculator = CentralityCalculator()\n", "\n", - "centrality_scores = centrality_calculator.calculate_centrality(kg, measure=\"degree\")\n", + "centrality_result = centrality_calculator.calculate_degree_centrality(kg)\n", + "centrality_scores = centrality_result.get('centrality', {})\n", "\n", "print(f\"Centrality scores:\")\n", "for entity_id, score in list(centrality_scores.items())[:5]:\n", diff --git a/cookbook/use_cases/biomedical/01_Drug_Discovery_Pipeline.ipynb b/cookbook/use_cases/biomedical/01_Drug_Discovery_Pipeline.ipynb index bc2ad34a..fac52c43 100644 --- a/cookbook/use_cases/biomedical/01_Drug_Discovery_Pipeline.ipynb +++ b/cookbook/use_cases/biomedical/01_Drug_Discovery_Pipeline.ipynb @@ -521,27 +521,29 @@ "metadata": {}, "outputs": [], "source": [ - "graph_analyzer = GraphAnalyzer(knowledge_graph)\n", - "centrality_calculator = CentralityCalculator(knowledge_graph)\n", - "community_detector = CommunityDetector(knowledge_graph)\n", - "connectivity_analyzer = ConnectivityAnalyzer(knowledge_graph)\n", + "graph_analyzer = GraphAnalyzer()\n", + "centrality_calculator = CentralityCalculator()\n", + "community_detector = CommunityDetector()\n", + "connectivity_analyzer = ConnectivityAnalyzer()\n", "temporal_query = TemporalGraphQuery(knowledge_graph)\n", "inference_engine = InferenceEngine()\n", "rule_manager = RuleManager()\n", "\n", "# Compute graph metrics\n", - "graph_metrics = graph_analyzer.compute_metrics()\n", + "graph_metrics = graph_analyzer.compute_metrics(knowledge_graph)\n", "\n", "# Calculate centrality\n", - "centrality_scores = centrality_calculator.calculate_centrality(centrality_type=\"betweenness\")\n", + "centrality_result = centrality_calculator.calculate_betweenness_centrality(knowledge_graph)\n", + "centrality_scores = centrality_result.get('centrality', {})\n", "top_central_targets = sorted(centrality_scores.items(), key=lambda x: x[1], reverse=True)[:10]\n", "\n", "# Detect communities\n", - "communities = community_detector.detect_communities()\n", - "community_count = len(set(communities.values())) if communities else 0\n", + "communities_result = community_detector.detect_communities(knowledge_graph, algorithm=\"louvain\")\n", + "communities = communities_result.get('communities', [])\n", + "community_count = len(communities) if communities else 0\n", "\n", "# Analyze connectivity\n", - "connectivity_results = connectivity_analyzer.analyze_connectivity()\n", + "connectivity_results = connectivity_analyzer.analyze_connectivity(knowledge_graph)\n", "\n", "# Define interaction prediction rules\n", "prediction_rules = [\n", diff --git a/cookbook/use_cases/biomedical/02_Genomic_Variant_Analysis.ipynb b/cookbook/use_cases/biomedical/02_Genomic_Variant_Analysis.ipynb index 98dbd78c..6e0e6e3d 100644 --- a/cookbook/use_cases/biomedical/02_Genomic_Variant_Analysis.ipynb +++ b/cookbook/use_cases/biomedical/02_Genomic_Variant_Analysis.ipynb @@ -63,7 +63,7 @@ "from semantica.ontology import OntologyGenerator, ClassInferrer, PropertyGenerator, OntologyValidator\n", "from semantica.reasoning import InferenceEngine, RuleManager, ExplanationGenerator\n", "from semantica.kg_qa import KGQualityAssessor\n", - "from semantica.kg import ConflictDetector\n", + "from semantica.conflicts import ConflictDetector\n", "from semantica.export import JSONExporter, RDFExporter, OWLExporter, ReportGenerator\n", "from semantica.visualization import KGVisualizer, OntologyVisualizer, AnalyticsVisualizer\n", "import tempfile\n", @@ -460,26 +460,28 @@ "metadata": {}, "outputs": [], "source": [ - "graph_analyzer = GraphAnalyzer(knowledge_graph)\n", - "centrality_calculator = CentralityCalculator(knowledge_graph)\n", - "community_detector = CommunityDetector(knowledge_graph)\n", - "connectivity_analyzer = ConnectivityAnalyzer(knowledge_graph)\n", + "graph_analyzer = GraphAnalyzer()\n", + "centrality_calculator = CentralityCalculator()\n", + "community_detector = CommunityDetector()\n", + "connectivity_analyzer = ConnectivityAnalyzer()\n", "temporal_query = TemporalGraphQuery(knowledge_graph)\n", - "pattern_detector = TemporalPatternDetector(knowledge_graph)\n", + "pattern_detector = TemporalPatternDetector()\n", "\n", "# Compute graph metrics\n", - "graph_metrics = graph_analyzer.compute_metrics()\n", + "graph_metrics = graph_analyzer.compute_metrics(knowledge_graph)\n", "\n", "# Calculate centrality\n", - "centrality_scores = centrality_calculator.calculate_centrality(centrality_type=\"betweenness\")\n", + "centrality_result = centrality_calculator.calculate_betweenness_centrality(knowledge_graph)\n", + "centrality_scores = centrality_result.get('centrality', {})\n", "top_central_genes = sorted(centrality_scores.items(), key=lambda x: x[1], reverse=True)[:10]\n", "\n", "# Detect communities\n", - "communities = community_detector.detect_communities()\n", - "community_count = len(set(communities.values())) if communities else 0\n", + "communities_result = community_detector.detect_communities(knowledge_graph, algorithm=\"louvain\")\n", + "communities = communities_result.get('communities', [])\n", + "community_count = len(communities) if communities else 0\n", "\n", "# Analyze connectivity\n", - "connectivity_results = connectivity_analyzer.analyze_connectivity()\n", + "connectivity_results = connectivity_analyzer.analyze_connectivity(knowledge_graph)\n", "\n", "# Detect temporal patterns\n", "start_time = (datetime.now() - timedelta(days=7)).isoformat()\n", @@ -491,6 +493,7 @@ ")\n", "\n", "temporal_patterns = pattern_detector.detect_temporal_patterns(\n", + " knowledge_graph,\n", " relationship_types=[\"associated_with\"],\n", " time_window_hours=168\n", ")\n", @@ -650,13 +653,13 @@ "owl_exporter = OWLExporter()\n", "report_generator = ReportGenerator()\n", "kg_quality_assessor = KGQualityAssessor()\n", - "conflict_detector = ConflictDetector(knowledge_graph)\n", + "conflict_detector = ConflictDetector()\n", "\n", "# Assess graph quality\n", "quality_metrics = kg_quality_assessor.assess_quality(knowledge_graph)\n", "\n", "# Detect conflicts\n", - "conflicts = conflict_detector.detect_conflicts()\n", + "conflicts = conflict_detector.detect_conflicts(knowledge_graph)\n", "\n", "# Export knowledge graph\n", "kg_json = json_exporter.export(knowledge_graph, output_path=os.path.join(temp_dir, \"genomic_kg.json\"))\n", diff --git a/cookbook/use_cases/blockchain/01_DeFi_Protocol_Intelligence.ipynb b/cookbook/use_cases/blockchain/01_DeFi_Protocol_Intelligence.ipynb index 154bad55..5f34e263 100644 --- a/cookbook/use_cases/blockchain/01_DeFi_Protocol_Intelligence.ipynb +++ b/cookbook/use_cases/blockchain/01_DeFi_Protocol_Intelligence.ipynb @@ -392,29 +392,32 @@ "metadata": {}, "outputs": [], "source": [ - "graph_analyzer = GraphAnalyzer(knowledge_graph)\n", - "centrality_calculator = CentralityCalculator(knowledge_graph)\n", - "community_detector = CommunityDetector(knowledge_graph)\n", - "connectivity_analyzer = ConnectivityAnalyzer(knowledge_graph)\n", + "graph_analyzer = GraphAnalyzer()\n", + "centrality_calculator = CentralityCalculator()\n", + "community_detector = CommunityDetector()\n", + "connectivity_analyzer = ConnectivityAnalyzer()\n", "temporal_query = TemporalGraphQuery(knowledge_graph)\n", - "pattern_detector = TemporalPatternDetector(knowledge_graph)\n", + "pattern_detector = TemporalPatternDetector()\n", "\n", "# Compute graph metrics\n", - "graph_metrics = graph_analyzer.compute_metrics()\n", + "graph_metrics = graph_analyzer.compute_metrics(knowledge_graph)\n", "\n", "# Calculate centrality\n", - "centrality_scores = centrality_calculator.calculate_centrality(centrality_type=\"betweenness\")\n", + "centrality_result = centrality_calculator.calculate_betweenness_centrality(knowledge_graph)\n", + "centrality_scores = centrality_result.get('centrality', {})\n", "top_central_protocols = sorted(centrality_scores.items(), key=lambda x: x[1], reverse=True)[:10]\n", "\n", "# Detect communities\n", - "communities = community_detector.detect_communities()\n", - "community_count = len(set(communities.values())) if communities else 0\n", + "communities_result = community_detector.detect_communities(knowledge_graph, algorithm=\"louvain\")\n", + "communities = communities_result.get('communities', [])\n", + "community_count = len(communities) if communities else 0\n", "\n", "# Analyze connectivity\n", - "connectivity_results = connectivity_analyzer.analyze_connectivity()\n", + "connectivity_results = connectivity_analyzer.analyze_connectivity(knowledge_graph)\n", "\n", "# Detect temporal patterns\n", "temporal_patterns = pattern_detector.detect_temporal_patterns(\n", + " knowledge_graph,\n", " relationship_types=[\"has_pool\", \"has_token\"],\n", " time_window_hours=24\n", ")\n", diff --git a/cookbook/use_cases/blockchain/02_Transaction_Network_Analysis.ipynb b/cookbook/use_cases/blockchain/02_Transaction_Network_Analysis.ipynb index 89066790..5fd941d7 100644 --- a/cookbook/use_cases/blockchain/02_Transaction_Network_Analysis.ipynb +++ b/cookbook/use_cases/blockchain/02_Transaction_Network_Analysis.ipynb @@ -448,11 +448,11 @@ "aml_results = graph_store.execute_query(aml_query)\n", "\n", "temporal_query = TemporalGraphQuery(knowledge_graph)\n", - "pattern_detector = TemporalPatternDetector(knowledge_graph)\n", - "graph_analyzer = GraphAnalyzer(knowledge_graph)\n", - "centrality_calculator = CentralityCalculator(knowledge_graph)\n", - "community_detector = CommunityDetector(knowledge_graph)\n", - "connectivity_analyzer = ConnectivityAnalyzer(knowledge_graph)\n", + "pattern_detector = TemporalPatternDetector()\n", + "graph_analyzer = GraphAnalyzer()\n", + "centrality_calculator = CentralityCalculator()\n", + "community_detector = CommunityDetector()\n", + "connectivity_analyzer = ConnectivityAnalyzer()\n", "\n", "# Query transactions in time range\n", "start_time = (datetime.now() - timedelta(hours=6)).isoformat()\n", @@ -466,20 +466,23 @@ "\n", "# Detect temporal patterns\n", "temporal_patterns = pattern_detector.detect_temporal_patterns(\n", + " knowledge_graph,\n", " relationship_types=[\"transfers_to\"],\n", " time_window_hours=6\n", ")\n", "\n", "# Calculate centrality to find key wallets\n", - "centrality_scores = centrality_calculator.calculate_centrality(centrality_type=\"betweenness\")\n", + "centrality_result = centrality_calculator.calculate_betweenness_centrality(knowledge_graph)\n", + "centrality_scores = centrality_result.get('centrality', {})\n", "top_central_wallets = sorted(centrality_scores.items(), key=lambda x: x[1], reverse=True)[:10]\n", "\n", "# Detect communities (clustering)\n", - "communities = community_detector.detect_communities()\n", - "community_count = len(set(communities.values())) if communities else 0\n", + "communities_result = community_detector.detect_communities(knowledge_graph, algorithm=\"louvain\")\n", + "communities = communities_result.get('communities', [])\n", + "community_count = len(communities) if communities else 0\n", "\n", "# Analyze connectivity\n", - "connectivity_results = connectivity_analyzer.analyze_connectivity()\n", + "connectivity_results = connectivity_analyzer.analyze_connectivity(knowledge_graph)\n", "\n", "# AML Pattern Detection using Inference Engine\n", "inference_engine = InferenceEngine()\n", @@ -572,13 +575,13 @@ "rdf_exporter = RDFExporter()\n", "report_generator = ReportGenerator()\n", "kg_quality_assessor = KGQualityAssessor()\n", - "conflict_detector = ConflictDetector(knowledge_graph)\n", + "conflict_detector = ConflictDetector()\n", "\n", "# Assess graph quality\n", "quality_metrics = kg_quality_assessor.assess_quality(knowledge_graph)\n", "\n", "# Detect conflicts\n", - "conflicts = conflict_detector.detect_conflicts()\n", + "conflicts = conflict_detector.detect_conflicts(knowledge_graph)\n", "\n", "# Generate alerts\n", "alerts = []\n", diff --git a/cookbook/use_cases/cybersecurity/03_Threat_Correlation.ipynb b/cookbook/use_cases/cybersecurity/03_Threat_Correlation.ipynb index 0c9124c6..a80beeb9 100644 --- a/cookbook/use_cases/cybersecurity/03_Threat_Correlation.ipynb +++ b/cookbook/use_cases/cybersecurity/03_Threat_Correlation.ipynb @@ -59,7 +59,8 @@ "from semantica.kg import GraphBuilder, TemporalGraphQuery, TemporalPatternDetector, GraphAnalyzer, ConnectivityAnalyzer\n", "from semantica.reasoning import InferenceEngine, ExplanationGenerator\n", "from semantica.kg_qa import KGQualityAssessor\n", - "from semantica.kg import ProvenanceTracker, ConflictDetector\n", + "from semantica.kg import ProvenanceTracker\n", + "from semantica.conflicts import ConflictDetector\n", "from semantica.export import RDFExporter, ReportGenerator\n", "from semantica.visualization import AnalyticsVisualizer, TemporalVisualizer\n", "import tempfile\n", diff --git a/cookbook/use_cases/renewable_energy/02_Environmental_Impact.ipynb b/cookbook/use_cases/renewable_energy/02_Environmental_Impact.ipynb index c63a2a42..65d80283 100644 --- a/cookbook/use_cases/renewable_energy/02_Environmental_Impact.ipynb +++ b/cookbook/use_cases/renewable_energy/02_Environmental_Impact.ipynb @@ -264,7 +264,8 @@ "impact_kg = builder.build(environmental_entities, environmental_relationships)\n", "\n", "metrics = graph_analyzer.compute_metrics(impact_kg)\n", - "centrality_scores = centrality_calculator.calculate_centrality(impact_kg, measure=\"degree\")\n", + "centrality_result = centrality_calculator.calculate_degree_centrality(impact_kg)\n", + "centrality_scores = centrality_result.get('centrality', {})\n", "communities = community_detector.detect_communities(impact_kg)\n", "\n", "print(f\"Extracted {len(environmental_entities)} environmental entities\")\n", diff --git a/cookbook/use_cases/renewable_energy/04_Resource_Optimization.ipynb b/cookbook/use_cases/renewable_energy/04_Resource_Optimization.ipynb index 71756e4d..804e4b35 100644 --- a/cookbook/use_cases/renewable_energy/04_Resource_Optimization.ipynb +++ b/cookbook/use_cases/renewable_energy/04_Resource_Optimization.ipynb @@ -228,7 +228,8 @@ "resource_kg = builder.build(resource_entities, resource_relationships)\n", "\n", "metrics = graph_analyzer.compute_metrics(resource_kg)\n", - "centrality_scores = centrality_calculator.calculate_centrality(resource_kg, measure=\"degree\")\n", + "centrality_result = centrality_calculator.calculate_degree_centrality(resource_kg)\n", + "centrality_scores = centrality_result.get('centrality', {})\n", "communities = community_detector.detect_communities(resource_kg)\n", "\n", "print(f\"Extracted {len(resource_entities)} resource entities\")\n", diff --git a/cookbook/use_cases/trading/02_News_Sentiment_Analysis.ipynb b/cookbook/use_cases/trading/02_News_Sentiment_Analysis.ipynb index 40e17c09..0ef465b3 100644 --- a/cookbook/use_cases/trading/02_News_Sentiment_Analysis.ipynb +++ b/cookbook/use_cases/trading/02_News_Sentiment_Analysis.ipynb @@ -211,7 +211,8 @@ "news_kg = builder.build(news_entities, news_relationships)\n", "\n", "metrics = graph_analyzer.compute_metrics(news_kg)\n", - "centrality_scores = centrality_calculator.calculate_centrality(news_kg, measure=\"degree\")\n", + "centrality_result = centrality_calculator.calculate_degree_centrality(news_kg)\n", + "centrality_scores = centrality_result.get('centrality', {})\n", "communities = community_detector.detect_communities(news_kg)\n", "\n", "print(f\"Extracted {len(news_entities)} news entities\")\n", diff --git a/cookbook/use_cases/trading/04_Risk_Assessment.ipynb b/cookbook/use_cases/trading/04_Risk_Assessment.ipynb index 01337e99..17a49070 100644 --- a/cookbook/use_cases/trading/04_Risk_Assessment.ipynb +++ b/cookbook/use_cases/trading/04_Risk_Assessment.ipynb @@ -226,7 +226,8 @@ "risk_kg = builder.build(risk_entities, risk_relationships)\n", "\n", "metrics = graph_analyzer.compute_metrics(risk_kg)\n", - "centrality_scores = centrality_calculator.calculate_centrality(risk_kg, measure=\"degree\")\n", + "centrality_result = centrality_calculator.calculate_degree_centrality(risk_kg)\n", + "centrality_scores = centrality_result.get('centrality', {})\n", "communities = community_detector.detect_communities(risk_kg)\n", "\n", "print(f\"Extracted {len(risk_entities)} risk entities\")\n", diff --git a/fix_remaining_notebooks.py b/fix_remaining_notebooks.py deleted file mode 100644 index 25eb4bb5..00000000 --- a/fix_remaining_notebooks.py +++ /dev/null @@ -1,92 +0,0 @@ -#!/usr/bin/env python3 -"""Fix remaining notebooks with calculate_centrality calls""" - -import json -import os - -# List of notebooks to fix -notebooks = [ - "cookbook/use_cases/trading/01_Market_Data_Analysis.ipynb", - "cookbook/use_cases/trading/03_Real_Time_Monitoring.ipynb", - "cookbook/use_cases/trading/05_Strategy_Backtesting.ipynb", - "cookbook/use_cases/healthcare/02_Disease_Network_Analysis.ipynb", - "cookbook/use_cases/healthcare/03_Drug_Interactions_Analysis.ipynb", - "cookbook/use_cases/renewable_energy/01_Energy_Market_Analysis.ipynb", - "cookbook/use_cases/renewable_energy/03_Grid_Management.ipynb", - "cookbook/use_cases/finance/01_Financial_Data_Integration.ipynb", - "cookbook/use_cases/finance/02_Financial_Reports_Analysis.ipynb", - "cookbook/use_cases/cybersecurity/01_Anomaly_Detection_Real_Time.ipynb", - "cookbook/use_cases/cybersecurity/02_Incident_Analysis.ipynb", - "cookbook/use_cases/supply_chain/01_Supply_Chain_Data_Integration.ipynb", -] - -old_pattern = 'calculate_centrality(' -new_code = [ - 'centrality_result = centrality_calculator.calculate_degree_centrality(', - "centrality_scores = centrality_result.get('centrality', {})" -] - -for notebook_path in notebooks: - if not os.path.exists(notebook_path): - print(f"Skipping {notebook_path} - file not found") - continue - - print(f"Processing {notebook_path}...") - - with open(notebook_path, 'r', encoding='utf-8') as f: - nb = json.load(f) - - modified = False - for cell in nb['cells']: - if cell.get('cell_type') == 'code': - source = cell.get('source', []) - if isinstance(source, list): - # Check if any line contains the pattern - for i, line in enumerate(source): - if old_pattern in line and 'measure="degree"' in line: - # Extract the graph variable name - if 'market_kg' in line: - graph_var = 'market_kg' - elif 'trading_kg' in line: - graph_var = 'trading_kg' - elif 'historical_kg' in line: - graph_var = 'historical_kg' - elif 'disease_kg' in line: - graph_var = 'disease_kg' - elif 'drug_kg' in line: - graph_var = 'drug_kg' - elif 'energy_market_kg' in line: - graph_var = 'energy_market_kg' - elif 'grid_kg' in line: - graph_var = 'grid_kg' - elif 'financial_kg' in line: - graph_var = 'financial_kg' - elif 'temporal_kg' in line: - graph_var = 'temporal_kg' - elif 'incident_kg' in line: - graph_var = 'incident_kg' - elif 'supply_chain_kg' in line: - graph_var = 'supply_chain_kg' - else: - print(f" Warning: Could not identify graph variable in line: {line}") - continue - - # Replace the line - new_lines = [ - f"centrality_result = centrality_calculator.calculate_degree_centrality({graph_var})\n", - f"centrality_scores = centrality_result.get('centrality', {{}})\n" - ] - cell['source'][i:i+1] = new_lines - modified = True - print(f" Fixed calculate_centrality call with {graph_var}") - break - - if modified: - with open(notebook_path, 'w', encoding='utf-8') as f: - json.dump(nb, f, indent=1, ensure_ascii=False) - print(f" ✓ Updated {notebook_path}") - else: - print(f" - No changes needed in {notebook_path}") - -print("\nDone!") -