|
17 | 17 | RiskParityOptimizer, |
18 | 18 | ) |
19 | 19 |
|
| 20 | +__all__ = [ |
| 21 | + # Optimization |
| 22 | + "PortfolioOptimizer", |
| 23 | + "BlackLittermanOptimizer", |
| 24 | + "RiskParityOptimizer", |
| 25 | + "HierarchicalRiskParityOptimizer", |
| 26 | + "FactorModelOptimizer", |
| 27 | + "OptimizationResult", |
| 28 | +] |
| 29 | + |
| 30 | +# Risk Management |
20 | 31 | try: |
21 | | - from .risk_management import RiskManager, RiskMetrics, StressTester, VaRCalculator # noqa: F401 |
| 32 | + from .risk_management import ( # noqa: F401 |
| 33 | + RiskManager, |
| 34 | + RiskMetrics, |
| 35 | + StressTester, |
| 36 | + VaRCalculator, |
| 37 | + ) |
22 | 38 |
|
| 39 | + __all__.extend(["RiskManager", "VaRCalculator", "StressTester", "RiskMetrics"]) |
23 | 40 | RISK_MANAGEMENT_AVAILABLE = True |
24 | 41 | except ImportError: |
25 | 42 | RISK_MANAGEMENT_AVAILABLE = False |
26 | 43 |
|
| 44 | +# Performance Analysis |
27 | 45 | try: |
28 | | - from .performance import AttributionAnalyzer, FactorAnalyzer, PerformanceAnalyzer # noqa: F401 |
| 46 | + from .performance import ( # noqa: F401 |
| 47 | + AttributionAnalyzer, |
| 48 | + FactorAnalyzer, |
| 49 | + PerformanceAnalyzer, |
| 50 | + ) |
29 | 51 |
|
| 52 | + __all__.extend(["PerformanceAnalyzer", "AttributionAnalyzer", "FactorAnalyzer"]) |
30 | 53 | PERFORMANCE_AVAILABLE = True |
31 | 54 | except ImportError: |
32 | 55 | PERFORMANCE_AVAILABLE = False |
33 | 56 |
|
| 57 | +# Transaction Costs |
34 | 58 | try: |
35 | 59 | from .transaction_costs import ( # noqa: F401 |
36 | 60 | LinearImpactModel, |
|
39 | 63 | TransactionCostOptimizer, |
40 | 64 | ) |
41 | 65 |
|
| 66 | + __all__.extend( |
| 67 | + [ |
| 68 | + "TransactionCostOptimizer", |
| 69 | + "TaxLossHarvester", |
| 70 | + "LinearImpactModel", |
| 71 | + "SquareRootImpactModel", |
| 72 | + ] |
| 73 | + ) |
42 | 74 | TRANSACTION_COSTS_AVAILABLE = True |
43 | 75 | except ImportError: |
44 | 76 | TRANSACTION_COSTS_AVAILABLE = False |
45 | 77 |
|
| 78 | +# Rebalancing |
46 | 79 | try: |
47 | 80 | from .rebalancing import ( # noqa: F401 |
48 | 81 | CalendarRebalancer, |
|
51 | 84 | ThresholdRebalancer, |
52 | 85 | ) |
53 | 86 |
|
54 | | - REBALANCING_AVAILABLE = True |
55 | | -except ImportError: |
56 | | - REBALANCING_AVAILABLE = False |
57 | | - |
58 | | -__all__ = [ |
59 | | - # Optimization |
60 | | - "PortfolioOptimizer", |
61 | | - "BlackLittermanOptimizer", |
62 | | - "RiskParityOptimizer", |
63 | | - "HierarchicalRiskParityOptimizer", |
64 | | - "FactorModelOptimizer", |
65 | | - "OptimizationResult", |
66 | | -] |
67 | | - |
68 | | -# Add available modules to __all__ |
69 | | -if RISK_MANAGEMENT_AVAILABLE: |
70 | | - __all__.extend(["RiskManager", "VaRCalculator", "StressTester", "RiskMetrics"]) |
71 | | - |
72 | | -if PERFORMANCE_AVAILABLE: |
73 | | - __all__.extend(["PerformanceAnalyzer", "AttributionAnalyzer", "FactorAnalyzer"]) |
74 | | - |
75 | | -if TRANSACTION_COSTS_AVAILABLE: |
76 | | - __all__.extend( |
77 | | - [ |
78 | | - "TransactionCostOptimizer", |
79 | | - "TaxLossHarvester", |
80 | | - "LinearImpactModel", |
81 | | - "SquareRootImpactModel", |
82 | | - ] |
83 | | - ) |
84 | | - |
85 | | -if REBALANCING_AVAILABLE: |
86 | 87 | __all__.extend( |
87 | 88 | ["Rebalancer", "CalendarRebalancer", "ThresholdRebalancer", "OptimalRebalancer"] |
88 | 89 | ) |
| 90 | + REBALANCING_AVAILABLE = True |
| 91 | +except ImportError: |
| 92 | + REBALANCING_AVAILABLE = False |
0 commit comments