import numpy as np import time import pandas as pd from cvxpy_engine import CVXPYOptimizationEngine from core_types import ForecastResult, CovarianceResult def run_perf(): n = 200 np.random.seed(42) rets = np.random.randn(1000, n) * 0.01 df = pd.DataFrame(rets) Sigma = df.cov() fr = ForecastResult( expected_returns=pd.Series(df.mean() * 252), covariance_result=CovarianceResult(Sigma, df.corr(), pd.Series(df.std())), betas=pd.Series(np.ones(n)), garch_info={}, js_alpha=0.0, capm_rets=pd.Series(np.ones(n)), ff_betas=pd.DataFrame(), periods=252, historical_returns=pd.Series(df.mean() * 252) ) cfg = {"risk_free_rate": 0.04, "gross_leverage_cap": 1.0, "sector_limit": 0.35, "single_asset_max": 0.40, "tc_volume_profile": 0.10} state = type('obj', (object,), {'current_weights': np.zeros(n), 'total_capital': 1000000.0})() start = time.time() for i in range(5): engine = CVXPYOptimizationEngine( forecast=fr, state=state, cfg=cfg, tickers=list(range(n)), n=n, macro={}, spread_map={}, risk_input=5.0, risk_factor=1.0, capital=1_000_000.0, adv_proxy=50_000_000.0, safe_min=0.0, asset_max=0.4, sector_limit=0.35, allow_shorts=False, durations=np.zeros(n), b_min=0.0, b_max=0.0, has_basis=False, max_turnover=1.0, stability_spreads=np.zeros(n), stab_lambda=0.0 ) engine.setup_data() engine.solve(use_beta=False, use_dur=False, use_factors=False, is_deep_relaxation=False, cur_min=0.0, cur_max=0.4, cur_sec=0.35, cur_turn=1.0) print(f"Total time 5 iterations n={n}: {time.time() - start:.3f}s") if __name__ == "__main__": run_perf()