Purpose: Rule-based expert system for analyzing GNN models and generating research hypotheses.
Pipeline Step: Step 19: Research tools (19_research.py)
Category: Research / Experimental Analysis
Status: ✅ Production Ready
Version: 1.6.0
Last Updated: 2026-04-16
- Advanced research analysis and experimentation
- Research methodology implementation and validation
- Experimental feature development and testing
- Research data collection and analysis
- Publication and documentation support
- Research collaboration tools
- Rule-Based Hypothesis Generation: Uses static analysis heuristics to suggest model improvements.
- Complexity Analysis: Detects high-dimensional matrices (>10 dims) to suggest reduction techniques.
- Structural Diagnostics: Analyzes variable-to-connection ratios to identify sparse causal structures.
- Automated Reporting: Generates markdown reports justifying every hypothesis with discovered evidence.
process_research(target_dir: Path, output_dir: Path, verbose: bool = False, logger: Optional[logging.Logger] = None, **kwargs) -> bool
Description: Main research processing function called by orchestrator (19_research.py). Performs rule-based hypothesis generation and research analysis.
Parameters:
target_dir(Path): Directory containing research data (GNN files)output_dir(Path): Output directory for research resultsverbose(bool): Enable verbose logging (default: False)logger(Optional[logging.Logger]): Logger instance (default: None)analysis_type(str, optional): Type of analysis ("comprehensive", "statistical", "experimental") (default: "comprehensive")generate_hypotheses(bool, optional): Generate research hypotheses (default: True)**kwargs: Additional research options
Returns: bool - True if research processing succeeded, False otherwise
Example:
from research import process_research
from pathlib import Path
import logging
logger = logging.getLogger(__name__)
success = process_research(
target_dir=Path("input/gnn_files"),
output_dir=Path("output/19_research_output"),
logger=logger,
verbose=True,
analysis_type="comprehensive"
)generate_rule_based_hypotheses(content: str, model_name: str, output_dir: Path, logger: logging.Logger) -> Tuple[List[Dict], str]
Description: Core rule-based hypothesis generation engine. Analyzes GNN model content, detects complexity patterns, structural diagnostics, and generates evidence-backed hypotheses.
Parameters:
content(str): Raw GNN file contentmodel_name(str): Name of the model being analyzedoutput_dir(Path): Output directory for reportslogger(logging.Logger): Logger instance
Returns: Tuple[List[Dict], str] - (hypotheses list, markdown report)
Description: Detect the model family (e.g., POMDP, MDP, continuous, mixed) from GNN content.
Description: Extract state space dimensions from variables in GNN content.
Description: Count connections by type (directed, undirected) in GNN content.
numpy- Numerical computationspandas- Data analysismatplotlib- Research visualization
scipy- Advanced statistical analysisscikit-learn- Machine learning research toolsjupyter- Interactive research notebooks
utils.pipeline_template- Pipeline utilities
RESEARCH_CONFIG = {
'analysis_types': ['statistical', 'experimental', 'comparative'],
'output_formats': ['markdown', 'html', 'pdf'],
'visualization_style': 'publication',
'statistical_significance': 0.05,
'include_methodology': True
}from research.processor import process_research
success = process_research(
target_dir="research_data/",
output_dir="output/19_research_output",
analysis_type="comprehensive"
)from research.processor import generate_rule_based_hypotheses
hypotheses, report = generate_rule_based_hypotheses(
content=gnn_content,
model_name="my_model",
output_dir=Path("output/19_research_output"),
logger=logger
)from research.processor import detect_model_family
family = detect_model_family(gnn_content)
print(f"Model family: {family}") # e.g., "POMDP"research_analysis_report.md- Comprehensive research reportresearch_data_analysis.json- Detailed analysis resultsresearch_visualizations/- Research visualizationsresearch_summary.json- Research summary
output/19_research_output/
├── research_analysis_report.md
├── research_data_analysis.json
├── research_visualizations/
│ ├── statistical_plots.png
│ └── experimental_results.png
└── research_summary.json
- Duration: Variable (depends on research complexity)
- Memory: ~50-200MB for complex analyses
- Status: ✅ Production Ready
- Statistical Analysis: 1-5 minutes
- Experimental Analysis: 5-30 minutes
- Report Generation: < 1 minute
- Visualization: 30 seconds - 2 minutes
- Data Quality Issues: Invalid or insufficient research data
- Analysis Failures: Statistical or computational errors
- Visualization Errors: Plot generation failures
- Report Generation: Documentation creation errors
- Data Cleaning: Automatic data quality improvement
- Analysis Recovery: Alternative analysis methods
- Visualization Recovery: Simplified visualizations
- Report Recovery: Error-aware report generation
- Script:
19_research.py(Step 19) - Function:
process_research()
utils.pipeline_template- Pipeline utilities
- Research-specific applications
tests.test_research_*- Research tests
Research Data → Analysis → Visualization → Report Generation → Publication
src/tests/research/test_research_overall.py- Module-level testssrc/tests/research/test_research_functional.py- Functional tests
Measure on demand:
uv run --extra dev python -m pytest src/tests/test_research*.py \
--cov=src/research --cov-report=term-missing- Research analysis with various data types
- Report generation and formatting
- Visualization creation
- Error handling and recovery
research.analyze_data- Perform research analysisresearch.generate_report- Generate research reportsresearch.create_visualization- Create research visualizationsresearch.validate_methodology- Validate research methodology
@mcp_tool("research.analyze_data")
def analyze_research_data_tool(data, analysis_type="comprehensive"):
"""Perform research analysis on data"""
# Implementationsrc/research/mcp.py- MCP tool registrations
Symptom: Research analysis completes but no hypotheses generated
Cause: Model structure doesn't match rule patterns or analysis incomplete
Solution:
- Verify GNN model has complete structure
- Check that model has variables and connections
- Use
--verboseflag for detailed analysis logs - Review rule-based analysis patterns
Symptom: Analysis succeeds but report generation errors
Cause: Report template issues or output format problems
Solution:
- Check output directory permissions
- Verify report format is supported
- Review report template structure
- Use default markdown format if issues persist
Features:
- Rule-based hypothesis generation
- Complexity analysis
- Structural diagnostics
- Automated reporting
Known Issues:
- None currently
- Next Version: Enhanced hypothesis generation
- Future: Machine learning-based hypothesis generation
Last Updated: 2026-04-16 Maintainer: GNN Pipeline Team Status: ✅ Production Ready Version: 1.6.0 Architecture Compliance: ✅ 100% Thin Orchestrator Pattern