Troubleshooting Guideο
This guide helps diagnose and resolve common issues encountered when using or developing the homodyne package.
Installation Issuesο
Import Errors
Problem: ModuleNotFoundError when importing homodyne
>>> import homodyne
ModuleNotFoundError: No module named 'homodyne'
Solution:
# Check installation
pip list | grep homodyne
# Reinstall if missing
pip install -e .
# For development install
pip install -e .[dev]
Dependency Conflicts
Problem: Version conflicts with NumPy, SciPy, or other dependencies
Solution:
# Create fresh environment
conda create -n homodyne-env python=3.12
conda activate homodyne-env
# Install dependencies step by step
pip install numpy scipy matplotlib
pip install numba
pip install -e .
Configuration Issuesο
Invalid JSON Syntax
Problem: JSON parsing errors in configuration files
json.decoder.JSONDecodeError: Expecting ',' delimiter
Solution:
# Validate JSON syntax
python -m json.tool my_config.json
# Check for common issues:
# - Missing commas
# - Trailing commas
# - Unquoted strings
# - Comments (not allowed in JSON)
Missing Required Fields
Problem: Configuration validation errors
ConfigurationError: Required field 'analysis_settings' not found
Solution:
# Use configuration validation
from homodyne import ConfigManager
from homodyne.utils import ConfigurationError
try:
config = ConfigManager("my_config.json")
config.validate()
except ConfigurationError as e:
print(f"Configuration error: {e}")
# Fix the configuration file based on error message
File Path Issues
Problem: File not found errors
FileNotFoundError: [Errno 2] No such file or directory: 'data/my_data.h5'
Solution:
import os
# Check if file exists
data_file = "data/my_data.h5"
if not os.path.exists(data_file):
print(f"File not found: {data_file}")
print(f"Current directory: {os.getcwd()}")
print(f"Available files: {os.listdir('.')}")
# Use absolute paths when possible
data_file = os.path.abspath("data/my_data.h5")
Data Loading Issuesο
HDF5 Format Problems
Problem: HDF5 file loading errors
OSError: Unable to open file (file signature not found)
Solution:
import h5py
# Check file integrity
try:
with h5py.File("data.h5", 'r') as f:
print("Available datasets:", list(f.keys()))
except OSError as e:
print(f"HDF5 error: {e}")
# File may be corrupted or not HDF5 format
Data Shape Mismatches
Problem: Unexpected data dimensions
ValueError: Expected 2D array, got 1D array
Solution:
import numpy as np
# Check data shape
data = np.load("my_data.npz")
print("Data shape:", data['correlation_data'].shape)
print("Expected shape: (n_time_points, n_angles)")
# Reshape if needed
if data.ndim == 1:
data = data.reshape(-1, 1) # Single angle
Missing Dataset Keys
Problem: Required datasets not found in file
KeyError: 'tau' not found in data file
Solution:
# Check available keys
with np.load("data.npz") as data:
print("Available keys:", list(data.keys()))
# Expected keys: 'tau', 'g1', 'q', 'phi_angles'
Optimization Issuesο
Convergence Failures
Problem: Optimization doesnβt converge
OptimizationWarning: Optimization terminated unsuccessfully
Diagnosis:
# Check optimization result details
from homodyne.optimization.classical import ClassicalOptimizer
optimizer = ClassicalOptimizer(core, config)
params, result = optimizer.run_classical_optimization_optimized(
phi_angles=phi_angles, c2_experimental=c2_data)
print(f"Success: {result.success}")
print(f"Message: {result.message}")
print(f"Function evaluations: {result.nfev}")
print(f"Final chi-squared: {result.chi_squared}")
Solutions:
Better initial parameters:
# Try different starting points
config["initial_parameters"]["values"] = [800, -0.3, 150]
Check optimization method options:
# Nelder-Mead is the only supported classical optimization method
config["optimization_config"]["classical_optimization"]["methods"] = ["Nelder-Mead"]
config["optimization_config"]["classical_optimization"]["method_options"]["Nelder-Mead"]["maxiter"] = 1000
Looser tolerances:
config["optimization_config"]["classical"]["tolerance"] = 1e-4
Poor Fit Quality
Problem: High chi-squared values indicating poor fits
Diagnosis:
# Plot fit to visualize issues
from homodyne.utils import plot_fit_results
fig = plot_fit_results(
experimental_data,
fitted_data,
parameters=result.x,
chi_squared=result.fun
)
fig.show()
Solutions:
Check data quality: Ensure experimental data is clean
Verify model choice: Try different analysis modes
Parameter bounds: Ensure bounds are reasonable
Data preprocessing: Apply filtering or smoothing if appropriate
Parameter Bounds Violations
Problem: Parameters hitting optimization bounds
Warning: Parameter D0 at upper bound (10000)
Solution:
# Adjust parameter bounds
config["parameter_space"]["bounds"] = [
{"name": "D0", "min": 100, "max": 50000}, # Increased upper bound
{"name": "alpha", "min": -2.0, "max": 0.0},
{"name": "D_offset", "min": 0, "max": 2000}
]
Convergence Diagnostics
Warning: R-hat values > 1.1 detected
Diagnosis:
# Check convergence diagnostics
if rhat > 1.1:
print(f"β οΈ {param}: RΜ = {rhat:.3f} (poor convergence)")
else:
print(f"β
{param}: RΜ = {rhat:.3f} (good convergence)")
Solutions:
Increase tuning steps:
More chains:
Better initialization:
# Run classical optimization first to get good starting point
from homodyne.optimization.classical import ClassicalOptimizer
optimizer = ClassicalOptimizer(core, config)
params, classical_result = optimizer.run_classical_optimization_optimized(
phi_angles=phi_angles, c2_experimental=c2_data)
Divergences
Warning: 150 divergences encountered
Solutions:
Increase target acceptance:
Increase max tree depth:
Better parameterization: Check if model is well-conditioned
Solutions:
Reduce sample size:
Fewer chains:
Enable thinning:
Performance Issuesο
Slow Analysis
Problem: Analysis taking too long
Solutions:
Enable angle filtering:
config["analysis_settings"]["enable_angle_filtering"] = True
config["analysis_settings"]["angle_filter_ranges"] = [[-5, 5], [175, 185]]
Use float32:
config["performance_settings"]["data_type"] = "float32"
Optimize thread usage:
config["performance_settings"]["num_threads"] = 4 # Match CPU cores
Enable JIT compilation:
config["performance_settings"]["enable_jit"] = True
Memory Usage
Problem: Excessive memory consumption
Diagnosis:
import psutil
process = psutil.Process()
memory_mb = process.memory_info().rss / 1024**2
print(f"Current memory usage: {memory_mb:.1f} MB")
Solutions:
Use chunked processing:
config["performance_settings"]["chunked_processing"] = True
config["performance_settings"]["chunk_size"] = 1000
Reduce precision:
config["performance_settings"]["data_type"] = "float32"
Set memory limit:
config["performance_settings"]["memory_limit_gb"] = 8
Model-Specific Issuesο
Isotropic Mode Issues
Problem: Warnings about angle filtering in isotropic mode
Warning: Angle filtering enabled but static_isotropic mode detected
Solution: This is expected behavior - angle filtering is automatically disabled in isotropic mode.
Flow Mode Parameter Issues
Problem: Flow parameters giving unrealistic values
Solutions:
Check if flow is actually present in your system
Start with static anisotropic to get baseline parameters
Use realistic bounds for flow parameters:
flow_bounds = [
{"name": "gamma_dot_t0", "min": 0.1, "max": 100},
{"name": "beta", "min": -1.0, "max": 1.0},
{"name": "gamma_dot_t_offset", "min": 0, "max": 10}
]
Development Issuesο
Test Failures
Problem: Tests failing during development
Diagnosis:
# Run specific test with verbose output
pytest homodyne/tests/test_specific.py::test_function -v -s
# Run with debugging
pytest homodyne/tests/test_specific.py --pdb
Common Solutions:
Update test data if model changes
Check numerical tolerances in assertions
Verify fixtures are properly set up
Update dependencies if needed
Documentation Build Issues
Problem: Sphinx documentation build failures
# Build with verbose output
cd docs/
make clean
make html SPHINXOPTS="-v"
Common fixes:
Install doc dependencies:
pip install -e .[docs]Check RST syntax in documentation files
Verify import paths in API documentation
Update Sphinx configuration if needed
Getting Helpο
Information to Provide
When seeking help, include:
Version information:
import homodyne
import numpy
import scipy
print(f"Homodyne: {homodyne.__version__}")
print(f"NumPy: {numpy.__version__}")
print(f"SciPy: {scipy.__version__}")
System information:
import platform
print(f"Python: {platform.python_version()}")
print(f"System: {platform.system()} {platform.release()}")
Error messages: Full traceback
Configuration file: Minimal example that reproduces issue
Data characteristics: Size, format, analysis mode
Resources
GitHub Issues: https://github.com/imewei/homodyne/issues
Documentation: This documentation site
Examples: Check the examples directory in the repository