"""
GCONCORD: Unified CONCORD Package for Sparse Precision Matrix Estimation

A modern C++ implementation with Python bindings that unifies multiple CONCORD
algorithm variants for graphical model selection.

Algorithms available:
- Coordinate Descent: concordC, concordC2, concordC3
- ISTA: Iterative Shrinkage-Thresholding Algorithm  
- Symmetric Lasso: symlassoC, symlassoC2

Usage:
    import gconcord as gc
    
    # Basic usage with automatic algorithm selection
    result = gc.concord(S, lambda_param=0.1)
    
    # Symmetric Lasso
    result = gc.symlasso(S, lambda_param=0.1)
    
    # Backward compatibility
    omega, hist = gc.ccista(S, lambda1=0.1)
"""

__version__ = "1.0.2"
__author__ = "CONCORD Development Team"

# Import C++ bindings
try:
    from ._gconcord import *
    _cpp_available = True
except ImportError as e:
    _cpp_available = False
    import warnings
    warnings.warn(f"C++ bindings not available: {e}. Only pure Python functionality will work.")

# Import Python interface
from .core import concord, symlasso, ccista

# Define public API
__all__ = [
    # Main functions
    'concord',
    'symlasso', 
    'ccista',  # Backward compatibility
    
    # C++ classes (if available)
    'ConcordSolver',
    'ConcordOptions', 
    'ConcordResult',
    'Algorithm',
    
    # Utility
    '_cpp_available',
    '__version__'
]

# Only export C++ classes if bindings are available
if not _cpp_available:
    __all__ = ['concord', 'symlasso', 'ccista', '_cpp_available', '__version__']