diff --git a/.ewma_cache/ewma_2a3bde2d62c4d6db8dc560b4acaddb24.pkl b/.ewma_cache/ewma_2a3bde2d62c4d6db8dc560b4acaddb24.pkl
new file mode 100644
index 0000000000000000000000000000000000000000..ca28ee062f34fb607208208c36c974b4106f47a5
--- /dev/null
+++ b/.ewma_cache/ewma_2a3bde2d62c4d6db8dc560b4acaddb24.pkl
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b7ff0d414b032f5a6b980fc72ceee5fa3bcf36e705c3aa70b6af550faf33b919
+size 13798931
diff --git a/.ewma_cache/ewma_347d940feb2b00b04af6c9180df77557.pkl b/.ewma_cache/ewma_347d940feb2b00b04af6c9180df77557.pkl
new file mode 100644
index 0000000000000000000000000000000000000000..e9067e7d5b322ea3d579bb1f5358110efb0f06b2
--- /dev/null
+++ b/.ewma_cache/ewma_347d940feb2b00b04af6c9180df77557.pkl
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ce6a89e27de88f5507855dea03fa1f815408ff1eab0ab3f9ecc9cdc195693015
+size 6664376
diff --git a/.ewma_cache/ewma_ab4d74e61dbbcf7c02c6a74cb2075915.pkl b/.ewma_cache/ewma_ab4d74e61dbbcf7c02c6a74cb2075915.pkl
new file mode 100644
index 0000000000000000000000000000000000000000..8868b8d7f609e196c4e2f983f8280f608856d9e0
--- /dev/null
+++ b/.ewma_cache/ewma_ab4d74e61dbbcf7c02c6a74cb2075915.pkl
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ce8d2cc70aac8277f34bdf56ad87f0e891c555ee5bf32da7a90ebf5b68bb00ef
+size 225005
diff --git a/.ewma_cache/ewma_af4f3cdbf90f703c69fbfa006f564081.pkl b/.ewma_cache/ewma_af4f3cdbf90f703c69fbfa006f564081.pkl
new file mode 100644
index 0000000000000000000000000000000000000000..8b3cfb01aa4b9d71c15e3149e168b8d3576cd52a
--- /dev/null
+++ b/.ewma_cache/ewma_af4f3cdbf90f703c69fbfa006f564081.pkl
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:02bc78ae927494382680fa1a26f0a5a5172d29d12b8e002d468513e4c88d2514
+size 13793437
diff --git a/.ewma_cache/ewma_b6a39b8eb59fefc56debeb266c6c979c.pkl b/.ewma_cache/ewma_b6a39b8eb59fefc56debeb266c6c979c.pkl
new file mode 100644
index 0000000000000000000000000000000000000000..37ce3683ceafb43ec500c84e99c79ee8580bb298
--- /dev/null
+++ b/.ewma_cache/ewma_b6a39b8eb59fefc56debeb266c6c979c.pkl
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:979b3083bbe4496f3c4b2a90398d514e020e49d902f7edeaf240c15132ce6608
+size 24599
diff --git a/.ewma_cache/ewma_dbc604dd54e73be913b457a2d0fdd7ab.pkl b/.ewma_cache/ewma_dbc604dd54e73be913b457a2d0fdd7ab.pkl
new file mode 100644
index 0000000000000000000000000000000000000000..18bc8304306eb36c1b2ea4c7ce894b862be500e8
--- /dev/null
+++ b/.ewma_cache/ewma_dbc604dd54e73be913b457a2d0fdd7ab.pkl
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d05933e44704eb825a478bceb210cbb89844e75f038c366ccec3a05fde6f9148
+size 117176
diff --git a/.gitattributes b/.gitattributes
index ec7dec364e2ee1653c5f4e8bfdc2ada85cdc216b..891f363308a9b94524bf0b6c8edbb830e797aafe 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -1,2 +1 @@
-*.pkl filter=lfs diff=lfs merge=lfs -text
-profile_stats filter=lfs diff=lfs merge=lfs -text
+*.pkl filter=lfs diff=lfs merge=lfs -text
diff --git a/.hypothesis/.gitignore b/.hypothesis/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..6c2447b27c974ecac3f86af9f6acc67171299c7c
--- /dev/null
+++ b/.hypothesis/.gitignore
@@ -0,0 +1,9 @@
+# This .gitignore file was automatically created by Hypothesis. Hypothesis gitignores
+# .hypothesis by default, because we generally recommend that .hypothesis not be checked
+# into version control.
+#
+# If you *would* like to check .hypothesis into version control, you should delete this
+# file. Hypothesis will not re-create this .gitignore unless .hypothesis is deleted (and
+# if it does, that's a bug - please report it!)
+
+*
diff --git a/.hypothesis/constants/00c71e2f209412b3 b/.hypothesis/constants/00c71e2f209412b3
new file mode 100644
index 0000000000000000000000000000000000000000..62579c6874ed65d5bc1181502ba6e783a9b0ac62
--- /dev/null
+++ b/.hypothesis/constants/00c71e2f209412b3
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\config_schema.py
+# hypothesis_version: 6.155.1
+
+[-5.0, -1.0, 0.0, 0.001, 0.01, 0.015, 0.04, 0.05, 0.1, 0.2, 0.35, 0.4, 0.5, 0.95, 0.999, 1.0, 2.0, 2.5, 3.0, 5.0, 10.0, 20.0, 25.0, 50.0, 100, 252, 365, 366, 756, 2000, 100000, '$', '.e2e_cache', '1950-01-03', '1971-02-05', '1974-12-31', '1977-01-03', 'AAPL', 'AGG', 'Bonds & Rates', 'Commodities', 'Core Equities', 'Crypto Proxies', 'DIA', 'Defensive/Value', 'EEM', 'EFA', 'ES', 'ETHE', 'FBTC', 'GC=F', 'GLD', 'IBIT', 'IEF', 'IWM', 'International', 'JNJ', 'KO', 'MES', 'MSFT', 'MSTR', 'NVDA', 'PDBC', 'PG', 'QQQ', 'SHY', 'SLV', 'SPY', 'TLT', 'TSLA', 'Tech & Growth', 'USO', 'VEA', 'VWO', 'XLP', '^GSPC', '^IXIC', '^TNX', '^TYX', '^VIX', '_', '__pydantic_extra__', 'after', 'allow', 'beta_hedge', 'daily', 'extra', 'is_yield', 'overlap_days', 'proxy', 'proxy_start', 'spo']
\ No newline at end of file
diff --git a/.hypothesis/constants/015adbc8972a83b4 b/.hypothesis/constants/015adbc8972a83b4
new file mode 100644
index 0000000000000000000000000000000000000000..4f3cee5a7703b0384368de4be89d164742c36849
--- /dev/null
+++ b/.hypothesis/constants/015adbc8972a83b4
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\core_types.py
+# hypothesis_version: 6.155.1
+
+[0.0, 1e-08, 1e-06, 0.001, 0.04, 0.1, 0.15, 0.2, 0.35, 0.4, 0.5, 0.95, 1.0, 1000000.0, 50000000.0, 252, 366, '$', 'CovarianceResult', 'ForecastResult', 'FuturesContract', 'FuturesOverlayResult', 'LotManager', 'ModelReturnForecast', 'OptimizationContext', 'OptimizationParams', 'OptimizationResult', 'PortfolioState', 'ReportData', 'SPY', 'TaxLot', 'ValidationResult', '^IRX', '^TNX', '^VIX', '_global_ewm_cov', '_risk_factor', '_stochastic', '_trading_periods', 'allocation_engine', 'allow_short', 'avg_cost', 'capital', 'current_weights_raw', 'equity', 'ff_enabled', 'fifo', 'hifo', 'lt_days', 'lt_first', 'model', 'overlay_enabled', 'purchase_date', 'rebalance_freq', 'risk', 'risk_free', 'shares', 'short_term_rate', 'spreads_enabled', 'tax_enabled', 'tax_rate_lt', 'tax_rate_st', 'tickers', 'volatility', 'volatility_target']
\ No newline at end of file
diff --git a/.hypothesis/constants/01ba1e4d1ed9ce4b b/.hypothesis/constants/01ba1e4d1ed9ce4b
new file mode 100644
index 0000000000000000000000000000000000000000..c05c91162a49e48c298ff243322b87ba82bbe423
--- /dev/null
+++ b/.hypothesis/constants/01ba1e4d1ed9ce4b
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\config.py
+# hypothesis_version: 6.155.1
+
+[-5.0, -1.0, 0.0, 0.0003, 0.0004, 0.0005, 0.0006, 0.0008, 0.001, 0.0025, 0.01, 0.015, 0.04, 0.05, 0.1, 0.2, 0.35, 0.4, 0.5, 0.95, 0.999, 1.0, 2.0, 2.5, 3.0, 5.0, 10.0, 20.0, 25.0, 50.0, 50000000.0, 100, 252, 365, 366, 756, 1024, 5000, 100000, '\x1b[0m', '\x1b[1m', '\x1b[2m', '\x1b[35m', '\x1b[36m', '\x1b[4m', '\x1b[91m', '\x1b[92m', '\x1b[93m', '\x1b[94m', '\x1b[95m', '\x1b[96m', '$', '&', '.e2e_cache', '/', '1950-01-03', '1971-02-05', '1974-12-31', '1977-01-03', 'AAPL', 'AGG', 'Bonds', 'Bonds & Rates', 'Commodities', 'Commodity', 'Core Equities', 'Crypto', 'Crypto Proxies', 'DIA', 'Defensive', 'Defensive/Value', 'EEM', 'EFA', 'ES', 'ETHE', 'FBTC', 'GC=F', 'GLD', 'IBIT', 'IEF', 'IWM', 'Index', 'International', 'JNJ', 'KO', 'MES', 'MSFT', 'MSTR', 'NVDA', 'Other', 'PDBC', 'PG', 'QQQ', 'SHY', 'SLV', 'SPY', 'TLT', 'TSLA', 'Tech', 'Tech & Growth', 'USO', 'VEA', 'VWO', 'XLP', '^GSPC', '^IXIC', '^TNX', '^TYX', '^VIX', '_', '__pydantic_extra__', 'after', 'allow', 'beta_hedge', 'cmdstanpy', 'daily', 'engine.log', 'exc_info', 'extra', 'funcName', 'is_yield', 'level', 'lineNo', 'matplotlib', 'message', 'module', 'name', 'output', 'overlap_days', 'portfolio_engine', 'portfolio_state.json', 'proxy', 'proxy_start', 'r', 'spo', 'timestamp', 'utf-8', 'w', 'yfinance', '—']
\ No newline at end of file
diff --git a/.hypothesis/constants/0467a1de179f7542 b/.hypothesis/constants/0467a1de179f7542
new file mode 100644
index 0000000000000000000000000000000000000000..432ca2e50b0edf5df1b6a1c01bef85e023b43750
--- /dev/null
+++ b/.hypothesis/constants/0467a1de179f7542
@@ -0,0 +1,4 @@
+# file: d:\portfolio engine\engine\data_repository.py
+# hypothesis_version: 6.155.1
+
+[-0.99, 0.0, 0.05, 0.2, 15.0, 100, 252, 504, '$', '%s', ',', '.AS', '.AT', '.AX', '.DE', '.L', '.MC', '.MI', '.PA', '.SW', '.T', '.TO', '?', 'AUD', 'CAD', 'CHF', 'EUR', 'GBP', 'JPY', 'SPY', 'USD', '^IRX', '^TNX', '^VIX', '_trading_periods', '_use_saved_basis', 'all', 'benchmarks', 'close_price', 'currency_symbol', 'daily', 'data_history_years', 'date', 'equity', 'last', 'model_dump', 'monthly', 'portfolio_engine', 'return_frequency', 'risk_free', 'risk_free_rate', 'sector_map', 'sqlite', 'ticker', 'volatility', '£', '¥', '€']
\ No newline at end of file
diff --git a/.hypothesis/constants/07e566914c051c16 b/.hypothesis/constants/07e566914c051c16
new file mode 100644
index 0000000000000000000000000000000000000000..23bfdad3fd1d62aca1bbe4f6f77fa73b8cedac27
--- /dev/null
+++ b/.hypothesis/constants/07e566914c051c16
@@ -0,0 +1,4 @@
+# file: d:\portfolio engine\engine\exports.py
+# hypothesis_version: 6.155.1
+
+[0.0, 0.0008, 0.001, 1.0, 100, 10000, '#D7E4BC', 'Alloc_$', 'Ann_Vol_%', 'Beta', 'CASH', 'Component_CVaR_%', 'Direction', 'EntryDrag_%', 'Exp_Return_%', 'Factor', 'Factor Exposures', 'HalfSpread_bp', 'LONG', 'Marginal_VaR_%', 'Portfolio_Exposure', 'Price', 'SHORT', 'Shares', 'Tax_If_Sold_$', 'Ticker', 'Unrealised_Gain_$', 'Weight_%', 'Weights', 'bold', 'border', 'fg_color', 'portfolio_report.pdf', 'tax_if_sold', 'text_wrap', 'top', 'transaction_cost', 'unreal_gain', 'valign', 'wkhtmltopdf', 'xlsxwriter']
\ No newline at end of file
diff --git a/.hypothesis/constants/086625a5bb6a0506 b/.hypothesis/constants/086625a5bb6a0506
new file mode 100644
index 0000000000000000000000000000000000000000..fa999d3056bdacf0ebc79f236dada0a631a5bcc6
--- /dev/null
+++ b/.hypothesis/constants/086625a5bb6a0506
@@ -0,0 +1,4 @@
+# file: d:\portfolio engine\engine\report_data.py
+# hypothesis_version: 6.155.1
+
+[0.0, 0.0001, 0.01, 0.04, 0.95, 1.0, 252, '#3fb950', '#56d364', '#58a6ff', '#79c0ff', '#bc8cff', '#d2a8ff', '#e3b341', '#f0883e', '#f85149', '#ff7b72', '#ffa657', '$', '%Y-%m-%d', 'BULL', 'Benchmark', 'CASH', 'Custom', 'Mean-Variance', '_risk_measure', 'ai_sentiment', 'allow_shorts', 'ann_ret', 'ann_vol', 'bench_html', 'benchmarks', 'beta', 'beta_trans', 'block', 'bt', 'calmar', 'capital', 'chart_data_script', 'cjs_tag', 'constraint_diag_html', 'cov_mat', 'curr', 'currency_symbol', 'curve_col', 'curve_inverted', 'cvar_enabled', 'cvar_garch_html', 'data_alerts_html', 'dd_days', 'disable_whatif', 'display_oos_chart', 'engine_id', 'equity', 'exp_ret', 'exp_rets', 'exp_sr', 'exp_vol', 'feature_importances', 'fixed_income_html', 'friction_paid', 'friction_rate', 'garch_enabled', 'gross_lev', 'has_curr', 'hist_calmar_trans', 'hist_cdar_trans', 'hist_cvar_trans', 'hist_mad_trans', 'hist_maxdd_trans', 'hist_ret_trans', 'hist_semi_trans', 'hist_sortino_trans', 'hist_sr_trans', 'hist_treynor_trans', 'hist_vol_trans', 'ignore', 'jacobian', 'js_alpha', 'leverage_html', 'long_e', 'max_dd', 'model_badge', 'model_id', 'model_name', 'name', 'narrative', 'none', 'oos_dates', 'oos_section', 'overlay_html', 'port_yield', 'rc_ds', 'rc_html', 'resiliency_html', 'ret_trans', 'rfr', 'rfr_raw', 'risk_attr_html', 'risk_free_rate', 'sharpe', 'short_e', 'show_bl_shift', 'show_ef', 'show_factors', 'show_ml_stats', 'show_whatif', 'single_asset_min', 'sortino', 'spy_trend', 'sr_trans', 'table_rows', 'tax_html', 'tnx_label', 'trading_days', 'trend_col', 'treynor_trans', 'validation_html', 'vix_col', 'vix_high', 'vix_label', 'vol_trans', 'w_risky', 'warn_html', 'whatif_html', '—']
\ No newline at end of file
diff --git a/.hypothesis/constants/09238270fadc90e7 b/.hypothesis/constants/09238270fadc90e7
new file mode 100644
index 0000000000000000000000000000000000000000..dcd352c439f753e6656ee748830500e6b4971205
--- /dev/null
+++ b/.hypothesis/constants/09238270fadc90e7
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\report_builders\html_diagnostics.py
+# hypothesis_version: 6.155.1
+
+['#d29922', '#f85149', 'Critical', 'Universe too small', 'Warning', 'display_constraints', 'relaxation_log']
\ No newline at end of file
diff --git a/.hypothesis/constants/0a5b57ddad2e49ad b/.hypothesis/constants/0a5b57ddad2e49ad
new file mode 100644
index 0000000000000000000000000000000000000000..69474f356573ec32d76b0ed93bea05b2104770ab
--- /dev/null
+++ b/.hypothesis/constants/0a5b57ddad2e49ad
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\config_io.py
+# hypothesis_version: 6.155.1
+
+['&', '/', '_', 'constraints.json', 'r', 'utf-8', 'w']
\ No newline at end of file
diff --git a/.hypothesis/constants/0d00c8d264a2a9d8 b/.hypothesis/constants/0d00c8d264a2a9d8
new file mode 100644
index 0000000000000000000000000000000000000000..2914603faad7320a280818d540b9f418ff8ea2a5
--- /dev/null
+++ b/.hypothesis/constants/0d00c8d264a2a9d8
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\diagnostics.py
+# hypothesis_version: 6.155.1
+
+[500, 'details', 'diagnostics', 'flag', 'flags', 'last_updated', 'task_id', 'timestamp', 'w', 'wealth_engine']
\ No newline at end of file
diff --git a/.hypothesis/constants/0e20241b930a521c b/.hypothesis/constants/0e20241b930a521c
new file mode 100644
index 0000000000000000000000000000000000000000..91febf7f43928f994d02bc12636bc78d2b5411e8
--- /dev/null
+++ b/.hypothesis/constants/0e20241b930a521c
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\safety.py
+# hypothesis_version: 6.155.1
+
+[0.0, 0.05, 0.15, 0.8, 8000, 'CASH', 'GlobalCircuitBreaker', 'RiskMonitor', 'contracts', 'current_weights', 'inf', 'is_halted', 'margin_requirement', 'peak_value', 'portfolio_value_usd', 'r', 'start_metrics_server', 'w']
\ No newline at end of file
diff --git a/.hypothesis/constants/0ec3fc1721fb4697 b/.hypothesis/constants/0ec3fc1721fb4697
new file mode 100644
index 0000000000000000000000000000000000000000..39d8f29fbd7aa42b3f104a0dd9d67532e80f7daa
--- /dev/null
+++ b/.hypothesis/constants/0ec3fc1721fb4697
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\e2e_forecast_model.py
+# hypothesis_version: 6.155.1
+
+[0.0, 1e-08, 1e-06, 0.0001, 0.001, 0.04, 0.1, 0.2, 1.0, 3.0, 100, 126, 252, 5000, 'SCS', 'cpu', 'eps', 'max_iters', 'nan', 'ret', 'solve_method', 'spo', 'target', 'train_loss', 'val_loss', 'val_sharpe']
\ No newline at end of file
diff --git a/.hypothesis/constants/11295f8cfe167f9d b/.hypothesis/constants/11295f8cfe167f9d
new file mode 100644
index 0000000000000000000000000000000000000000..47b9d432b97897918b47e5cbe0f5980121a1c2ed
--- /dev/null
+++ b/.hypothesis/constants/11295f8cfe167f9d
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\analytics.py
+# hypothesis_version: 6.155.1
+
+[-0.55, -0.33, -0.25, -0.2, -0.15, -0.1, -0.04, -0.015, -0.01, 0.0, 1e-06, 0.0001, 0.0008, 0.001, 0.01, 0.015, 0.04, 0.1, 0.25, 0.4, 0.95, 1.0, 2.0, 20.0, 252.0, 50000000.0, -200, 100, 200, 252, ' & ', 'BEAR', 'BULL', 'CASH', 'CHOP', 'No Shock', 'SPY', 'UNKNOWN', '^IRX', '^TNX', '^VIX', 'allow_short', 'ann_ret', 'ann_rets', 'ann_vol', 'benchmarks', 'calmar', 'curve_inverted', 'dd_days', 'default_adv_proxy', 'equity', 'friction_paid', 'friction_rate', 'gain_fractions', 'ignore', 'impact', 'impact_paid', 'is_historical', 'jacobian', 'max', 'max_dd', 'max_dd_date', 'min', 'name', 'optimal', 'optimizer_failures', 'rate_shift', 'report', 'risk_free', 'rolling_sharpe', 'scenario', 'sharpe', 'short_term_rate', 'sortino', 'spread', 'spy_drop', 'spy_trend', 'tax_enabled', 'tax_paid', 'tax_rates', 'tc_volume_profile', 'tickers', 'tnx_val', 'total_ret', 'transaction_cost', 'trigger', 'vix_high', 'vix_val', 'volatility']
\ No newline at end of file
diff --git a/.hypothesis/constants/13397a93bcddcc8d b/.hypothesis/constants/13397a93bcddcc8d
new file mode 100644
index 0000000000000000000000000000000000000000..531ccef6f0e86533a8c25a4332d9a4b66b47ac61
--- /dev/null
+++ b/.hypothesis/constants/13397a93bcddcc8d
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\database.py
+# hypothesis_version: 6.155.1
+
+[1.0, 3600, 10000, 'DATABASE_URL', '__main__', 'append', 'asset_fundamentals', 'audit_log', 'backtest_history', 'connect_timeout', 'daily_prices', 'daily_yields', 'date', 'finance_data.db', 'saved_portfolios', 'sqlite', 'stitch_metadata', 'ticker', 'user_memory', 'webhook_configs']
\ No newline at end of file
diff --git a/.hypothesis/constants/139a07a020d17f2e b/.hypothesis/constants/139a07a020d17f2e
new file mode 100644
index 0000000000000000000000000000000000000000..14e742e677f680a4587da2cdd507566802322c24
--- /dev/null
+++ b/.hypothesis/constants/139a07a020d17f2e
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\models.py
+# hypothesis_version: 6.155.1
+
+[-0.5, -0.02, 0.0, 1e-12, 1e-08, 0.0001, 0.001, 0.01, 0.015, 0.02, 0.03, 0.04, 0.045, 0.05, 0.06, 0.08, 0.1, 0.2, 0.25, 0.3, 0.5, 0.6, 0.7, 0.75, 0.8, 0.85, 0.94, 0.95, 0.99, 0.999, 1.0, 1.0001, 1.5, 2.0, 2.5, 5.0, 10.0, 100.0, 365.25, 1000.0, 10000.0, 100, 127, 252, 256, 1024, 3600, 5000, '1', 'AR', 'GARCH', 'HML', 'MOM', 'Mkt-RF', 'NaN in forecast', 'OMP_NUM_THREADS', 'POOLED_MODEL', 'SMB', 'Zero', 'alpha', 'alpha[1]', 'beta', 'beta[1]', 'const', 'cpu', 'cuda', 'garch_ann_vol', 'hist', 'hist_ann_vol', 'ignore', 'local linear trend', 'marchenko_pastur', 'market_caps', 'maturity', 'median', 'modified_duration', 'normal', 'off', 'origin', 'persistence', 'ret', 'scale', 'spot', 'target', 'wigner_semicircle']
\ No newline at end of file
diff --git a/.hypothesis/constants/1562891fb28d1032 b/.hypothesis/constants/1562891fb28d1032
new file mode 100644
index 0000000000000000000000000000000000000000..cd6719e076ecbfd76c0ceca6ec111aef93c9fbc3
--- /dev/null
+++ b/.hypothesis/constants/1562891fb28d1032
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\constants.py
+# hypothesis_version: 6.155.1
+
+[0.0003, 0.0004, 0.0005, 0.0006, 0.0008, 0.0025, 0.05, 50000000.0, '\x1b[0m', '\x1b[1m', '\x1b[2m', '\x1b[35m', '\x1b[36m', '\x1b[4m', '\x1b[91m', '\x1b[92m', '\x1b[93m', '\x1b[94m', '\x1b[95m', '\x1b[96m', '7f8a9e2c4b5d6f1a', 'Bonds', 'Commodity', 'Crypto', 'Defensive', 'Index', 'International', 'MASTER_KEY', 'Other', 'Tech', 'access_keys.json', 'output', 'portfolio_state.json', '—']
\ No newline at end of file
diff --git a/.hypothesis/constants/15acf8fb0390c682 b/.hypothesis/constants/15acf8fb0390c682
new file mode 100644
index 0000000000000000000000000000000000000000..c729ff1aeca81e70826c40884a066e619f7e62a0
--- /dev/null
+++ b/.hypothesis/constants/15acf8fb0390c682
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\alternative_data.py
+# hypothesis_version: 6.155.1
+
+[0.0, 1.0, 5.0, 'ignore', 'impliedVolatility', 'iv_skew', 'openInterest', 'put_call_ratio', 'volume']
\ No newline at end of file
diff --git a/.hypothesis/constants/162fa2027b56a160 b/.hypothesis/constants/162fa2027b56a160
new file mode 100644
index 0000000000000000000000000000000000000000..6e396a2c4f402ccbb21b9cdc53b6bedff6e799af
--- /dev/null
+++ b/.hypothesis/constants/162fa2027b56a160
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\report_builders\html_validation.py
+# hypothesis_version: 6.155.1
+
+[0.0, 0.05, 1.0, '#3fb950', '#e3b341', '#f85149', '', 'Model 2', 'Naive Mean', 'diagnostic', 'independence', 'overall_pass', 'p_value', 'significant', 'winner']
\ No newline at end of file
diff --git a/.hypothesis/constants/1a72af83c9561bd8 b/.hypothesis/constants/1a72af83c9561bd8
new file mode 100644
index 0000000000000000000000000000000000000000..4f75aaab82b610a748548c453c9cfaa29f22ddcd
--- /dev/null
+++ b/.hypothesis/constants/1a72af83c9561bd8
@@ -0,0 +1,4 @@
+# file: d:\portfolio engine\engine\regime_detection.py
+# hypothesis_version: 6.155.1
+
+[0.0, 1e-08, 1e-06, 0.4, 0.6, 0.85, 1.0, 1.5, 2.0, 5.0, 7.5, 13.0, 25.0, 35.0, 100.0, 10000.0, 100, 120, 126, 252, 1008, 'FIGARCH', 'GARCH', 'Normal / Chop', 'Unknown', 'Zero', 'all', 'avg_correlation', 'current_regime', 'd', 'details', 'diag', 'ignore', 'is_high_corr', 'is_high_vol', 'is_long_memory_crash', 'latest_corr_matrix', 'off', 'ordered_vols', 'regime_vols', 'severity_score', 'state_sequence', 'state_series', 'transition_matrix']
\ No newline at end of file
diff --git a/.hypothesis/constants/1bb763679dbc1d45 b/.hypothesis/constants/1bb763679dbc1d45
new file mode 100644
index 0000000000000000000000000000000000000000..cd53f0d7d60ffcafa2270fea0fbbb5f231d03c9b
--- /dev/null
+++ b/.hypothesis/constants/1bb763679dbc1d45
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\report_html.py
+# hypothesis_version: 6.155.1
+
+['$', 'J', 'cov', 'cov_mat', 'curr', 'disable_whatif', 'exp_rets', 'jacobian', 'mu', 'n', 'report_template.html', 'rfr', 'rfr_raw', 'tickers', 'w', 'w_risky', 'whatif_html']
\ No newline at end of file
diff --git a/.hypothesis/constants/1e57bc8935f369eb b/.hypothesis/constants/1e57bc8935f369eb
new file mode 100644
index 0000000000000000000000000000000000000000..543580eec8f4abf19508736192399be1df4c867c
--- /dev/null
+++ b/.hypothesis/constants/1e57bc8935f369eb
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\solver.py
+# hypothesis_version: 6.155.1
+
+[-1.0, -0.005, 0.0, 1e-08, 0.0001, 0.0005, 0.0008, 0.001, 0.005, 0.04, 0.1, 0.2, 0.3, 0.4, 0.5, 0.7, 0.85, 0.9, 0.95, 1.0, 1.05, 1.1, 1.3, 1.5, 1.8, 2.0, 3.0, 5.0, 100.0, 365.25, 100000.0, 50000000.0, 128, 150, 252, 3600, 'CASH', 'Custom', 'b_max', 'b_min', 'binding_constraints', 'bond_metadata', 'capm_rets', 'coupon', 'cov_mat', 'cvar', 'cvar_alpha', 'cvar_enabled', 'cvar_lambda', 'default_adv_proxy', 'display_constraints', 'ef_curve', 'engine_id', 'exp_rets', 'face', 'feature_importances', 'ff_betas', 'freq', 'garch_info', 'gross_leverage_cap', 'hist_rets', 'hmm_regime', 'ignore', 'js_alpha', 'lw_alpha', 'maturity', 'max_turnover', 'model_id', 'modified_duration', 'name', 'portfolio_duration', 'pre_tax_rets', 'relaxation_log', 'rets', 'risk_contributions', 'risk_free_rate', 'sector_limit', 'sector_map', 'severity_score', 'single_asset_max', 'single_asset_min', 'tax_enabled', 'tax_rate', 'tax_rate_lt', 'transaction_cost', 'vols']
\ No newline at end of file
diff --git a/.hypothesis/constants/1f9e1d5c1261fbc8 b/.hypothesis/constants/1f9e1d5c1261fbc8
new file mode 100644
index 0000000000000000000000000000000000000000..31ea790f6c5458fb999aa0aff11ac52be9041ac7
--- /dev/null
+++ b/.hypothesis/constants/1f9e1d5c1261fbc8
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\futures_overlay.py
+# hypothesis_version: 6.155.1
+
+[0.0, 0.0001, 0.2, 0.8, 1.0, 50.0, 4000.0, 12000.0, 200000.0, 'CASH', 'ES=F', 'beta_hedge', 'futures_target_beta', 'futures_universe', 'hedge', 'ignore', 'leverage', 'overlay_mode']
\ No newline at end of file
diff --git a/.hypothesis/constants/20a4056c1aa675a5 b/.hypothesis/constants/20a4056c1aa675a5
new file mode 100644
index 0000000000000000000000000000000000000000..d81aa0fd298c66c134ed86b5e43af51a62d7c24b
--- /dev/null
+++ b/.hypothesis/constants/20a4056c1aa675a5
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\data.py
+# hypothesis_version: 6.155.1
+
+[-99.99, -0.999, 0.0, 1e-08, 0.04, 0.1, 0.35, 0.5, 100.0, 365.25, -999, 100, 127, 200, 252, 360, 365, 3650, 5000, '%Y%m%d', '%Y-%m-%d', ',', '.', '.CSV', '.csv', '1950-01-03', '1971-02-05', '1974-12-31', '1977-01-03', '1980-01-01', '5factor', 'Adj Close', 'B', 'BAMLH0A0HYM2', 'CMA', 'Close', 'FRED_API_KEY', 'GC=F', 'GLD', 'HML', 'HYG', 'IEF', 'M', 'ME', 'MOM', 'Mkt-RF', 'NaN', 'Price', 'QQQ', 'RMW', 'SMB', 'SPY', 'TLT', '^GSPC', '^IRX', '^IXIC', '^TNX', '^TYX', '^VIX', 'all', 'beta_63d', 'bond_metadata', 'close_price', 'cma_21d', 'coerce', 'coupon', 'date', 'equity', 'extended_history', 'face', 'freq', 'hml_21d', 'inner', 'is_yield', 'latin-1', 'linear', 'maturity', 'max_date', 'mkt_rf_21d', 'mom', 'mom_1m', 'mom_3m', 'mom_6m', 'momentum', 'nan', 'observations', 'overlap_days', 'proxy', 'proxy_mappings', 'proxy_start', 'ret', 'rev_5d', 'risk_free', 'rmw_21d', 'smb_21d', 'spread', 'sum', 'target', 'ticker', 'tickers', 'value', 'vol_21d', 'volatility', 'yield_pct']
\ No newline at end of file
diff --git a/.hypothesis/constants/243cd6b433aeac41 b/.hypothesis/constants/243cd6b433aeac41
new file mode 100644
index 0000000000000000000000000000000000000000..2130bf4e6ff0047c9c21ae1c4f0cfd0efe949c21
--- /dev/null
+++ b/.hypothesis/constants/243cd6b433aeac41
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\cvxpy_engine.py
+# hypothesis_version: 6.155.1
+
+[-1.0, 0.0, 1e-08, 1e-06, 1e-05, 0.0001, 0.0005, 0.0008, 0.001, 0.03, 0.05, 0.07, 0.09, 0.1, 0.12, 0.15, 0.18, 0.2, 0.21, 0.24, 0.28, 0.3, 0.5, 0.8, 0.95, 0.99, 0.999, 1.0, 1.5, 2.0, 3.0, 10.0, 50.0, 100.0, 100000, 'Base', 'CASH', 'CDaR', 'CVaR', 'DW Nonneg', 'Drop Beta', 'Drop Duration', 'Drop Factors', 'Duration', 'Fully Invested', 'Gross Leverage Cap', 'HML', 'MAD', 'Market Impact SOCP', 'Max Loss', 'Mean-Variance', 'Relax Sector Caps', 'Remove Min Weights', 'Remove Turnover', 'SMB', 'Sell Volume Tracking', 'Sell W Nonneg', 'Semi-Variance', 'Short W Nonneg', 'Unconstrained', 'Weights are None', 'Widen Beta', '_e2e_warm_start', '_risk_measure', 'baseline_risk_factor', 'cvar_alpha', 'cvar_enabled', 'cvar_lambda', 'details', 'dual_value', 'eps_abs', 'eps_gap', 'eps_rel', 'factor_neutrality', 'garch_info', 'gross_leverage_cap', 'hmm_regime', 'ignore', 'max_duration', 'max_iter', 'min_duration', 'risk_budgeting', 'risk_free_rate', 'scale', 'sector_map', 'severity_score', 'short_borrow_cost', 'state_sequence', 'tc_volume_profile', 'transaction_cost', 'warm_start']
\ No newline at end of file
diff --git a/.hypothesis/constants/25808bb2bc917469 b/.hypothesis/constants/25808bb2bc917469
new file mode 100644
index 0000000000000000000000000000000000000000..582a0dcfef0f9f974e5581463706829c107758cc
--- /dev/null
+++ b/.hypothesis/constants/25808bb2bc917469
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\report_data.py
+# hypothesis_version: 6.155.1
+
+[0.0, 0.0001, 0.01, 0.04, 0.95, 1.0, 252, '#3fb950', '#56d364', '#58a6ff', '#79c0ff', '#bc8cff', '#d2a8ff', '#e3b341', '#f0883e', '#f85149', '#ff7b72', '#ffa657', '$', '%Y-%m-%d', 'BULL', 'Benchmark', 'CASH', 'Custom', 'Mean-Variance', '_risk_measure', 'allow_shorts', 'ann_ret', 'ann_vol', 'bench_html', 'benchmarks', 'beta', 'beta_trans', 'block', 'bt', 'calmar', 'capital', 'chart_data_script', 'cjs_tag', 'constraint_diag_html', 'cov_mat', 'curr', 'currency_symbol', 'curve_col', 'curve_inverted', 'cvar_enabled', 'cvar_garch_html', 'data_alerts_html', 'dd_days', 'disable_whatif', 'display_oos_chart', 'engine_id', 'equity', 'exp_ret', 'exp_rets', 'exp_sr', 'exp_vol', 'fixed_income_html', 'friction_paid', 'friction_rate', 'garch_enabled', 'gross_lev', 'has_curr', 'hist_calmar_trans', 'hist_cdar_trans', 'hist_cvar_trans', 'hist_mad_trans', 'hist_maxdd_trans', 'hist_ret_trans', 'hist_semi_trans', 'hist_sortino_trans', 'hist_sr_trans', 'hist_treynor_trans', 'hist_vol_trans', 'ignore', 'jacobian', 'js_alpha', 'leverage_html', 'long_e', 'max_dd', 'model_badge', 'model_id', 'model_name', 'name', 'narrative', 'none', 'oos_dates', 'oos_section', 'overlay_html', 'port_yield', 'rc_ds', 'rc_html', 'resiliency_html', 'ret_trans', 'rfr', 'rfr_raw', 'risk_attr_html', 'risk_free_rate', 'sharpe', 'short_e', 'show_bl_shift', 'show_ef', 'show_factors', 'show_ml_stats', 'show_whatif', 'single_asset_min', 'sortino', 'spy_trend', 'sr_trans', 'table_rows', 'tax_html', 'tnx_label', 'trading_days', 'trend_col', 'treynor_trans', 'validation_html', 'vix_col', 'vix_high', 'vix_label', 'vol_trans', 'w_risky', 'warn_html', 'whatif_html', '—']
\ No newline at end of file
diff --git a/.hypothesis/constants/25f6c3bb2fc4a8c7 b/.hypothesis/constants/25f6c3bb2fc4a8c7
new file mode 100644
index 0000000000000000000000000000000000000000..a765993a82defcb6752ab1127fdec4f806d0d589
--- /dev/null
+++ b/.hypothesis/constants/25f6c3bb2fc4a8c7
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\forecast_generation.py
+# hypothesis_version: 6.155.1
+
+[0.0, 0.005, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.45, 0.5, 0.7, 1.0, 2.0, 365.25, 126, 252, 'HF_TOKEN', '_trading_periods', 'ai_sentiment', 'alpha', 'anova_enabled', 'betas', 'bond_metadata', 'factor_exposures', 'feature_importances', 'garch_enabled', 'hmm_regime', 'incremental_cov', 'is_high_vol', 'risk_free_rate', 'sentiment', 'severity_score', 'state_series', 'use_fast_ewm_cov']
\ No newline at end of file
diff --git a/.hypothesis/constants/267362902d4a9f51 b/.hypothesis/constants/267362902d4a9f51
new file mode 100644
index 0000000000000000000000000000000000000000..0807336b2cb4675e9ebe9bfc5a6982f783e0030e
--- /dev/null
+++ b/.hypothesis/constants/267362902d4a9f51
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\cvxpy_engine.py
+# hypothesis_version: 6.155.1
+
+[-1.0, 0.0, 1e-08, 1e-06, 1e-05, 0.0001, 0.0005, 0.0008, 0.001, 0.03, 0.05, 0.07, 0.09, 0.1, 0.12, 0.15, 0.18, 0.2, 0.21, 0.24, 0.28, 0.3, 0.5, 0.8, 0.95, 0.99, 0.999, 1.0, 1.5, 2.0, 3.0, 10.0, 50.0, 100.0, 100000, 'Base', 'CASH', 'CDaR', 'CVaR', 'DW Nonneg', 'Drop Beta', 'Drop Duration', 'Drop Factors', 'Duration', 'Fully Invested', 'Gross Leverage Cap', 'HML', 'MAD', 'Market Impact SOCP', 'Max Loss', 'Mean-Variance', 'Relax Sector Caps', 'Remove Min Weights', 'Remove Turnover', 'SMB', 'Sell Volume Tracking', 'Sell W Nonneg', 'Semi-Variance', 'Short W Nonneg', 'Unconstrained', 'Weights are None', 'Widen Beta', '_e2e_warm_start', '_risk_measure', 'baseline_risk_factor', 'cvar_alpha', 'cvar_enabled', 'cvar_lambda', 'details', 'dual_value', 'eps_abs', 'eps_gap', 'eps_rel', 'factor_neutrality', 'garch_info', 'gross_leverage_cap', 'hmm_regime', 'ignore', 'max_assets', 'max_duration', 'max_iter', 'min_duration', 'risk_budgeting', 'risk_free_rate', 'scale', 'sector_map', 'severity_score', 'short_borrow_cost', 'state_sequence', 'tc_volume_profile', 'transaction_cost', 'use_fast_ewm_cov', 'warm_start']
\ No newline at end of file
diff --git a/.hypothesis/constants/26df2a364bca776c b/.hypothesis/constants/26df2a364bca776c
new file mode 100644
index 0000000000000000000000000000000000000000..a8c069f0f315101a3a7f47a48da9a1fe546081ef
--- /dev/null
+++ b/.hypothesis/constants/26df2a364bca776c
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\narrative.py
+# hypothesis_version: 6.155.1
+
+[0.0, 252, ')', '', '
', 'Beta Target', 'Max Turnover', 'Momentum trends', 'Single Asset Cap', 'Volatility dynamics', 'Yield/Credit Spreads', '_', 'bear', 'beta', 'binding_constraints', 'bull', 'curve_inverted', 'feature_importances', 'mom', 'neutral', 'spread', 'spy_trend', 'var', 'vix_high', 'vol', 'yield']
\ No newline at end of file
diff --git a/.hypothesis/constants/281b36864b76c723 b/.hypothesis/constants/281b36864b76c723
new file mode 100644
index 0000000000000000000000000000000000000000..cc40e75ed9158a86cd187ef75dda4130fb8b6ec1
--- /dev/null
+++ b/.hypothesis/constants/281b36864b76c723
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\execution.py
+# hypothesis_version: 6.155.1
+
+[-1.0, 0.0, 0.0001, 0.01, 0.015, 0.05, 0.1, 0.15, 0.5, 1.0, 2.5, 3.0, 4.0, 10000.0, 50000000.0, 7497, '%Y%m%d_%H%M%S', '127.0.0.1', 'AUC', 'Action', 'AlgoStrategy', 'ArrivalPx', 'BUY', 'CASH', 'Currency', 'DAY', 'Exchange', 'IB_ARRIVAL', 'LMT', 'LmtPrice', 'MKT', 'MOC', 'OrderType', 'Quantity', 'SELL', 'SMART', 'STK', 'SecType', 'Symbol', 'TWAP', 'TimeInForce', 'Twap', 'USD', 'VWAP', 'Vwap', 'adv', 'aggressive', 'base_price', 'broker', 'close', 'current_weights', 'daily', 'db', 'diff', 'drift_only', 'execution_price', 'filled_val', 'high', 'impact_decimal', 'intended_val', 'items', 'low', 'monthly', 'open', 'quarterly', 'slippage_bps', 'twap', 'volatility', 'vwap', 'w', 'weekly', 'y']
\ No newline at end of file
diff --git a/.hypothesis/constants/2b0f289b8c84c050 b/.hypothesis/constants/2b0f289b8c84c050
new file mode 100644
index 0000000000000000000000000000000000000000..72c21b2f58c2717e936f697593f6deec4c83c758
--- /dev/null
+++ b/.hypothesis/constants/2b0f289b8c84c050
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\data_repository.py
+# hypothesis_version: 6.155.1
+
+[-0.99, 0.0, 0.05, 15.0, 100, 252, '%s', ',', '?', 'SPY', '^IRX', '^TNX', '^VIX', '_trading_periods', '_use_saved_basis', 'all', 'benchmarks', 'close_price', 'daily', 'data_history_years', 'date', 'equity', 'last', 'model_dump', 'monthly', 'portfolio_engine', 'return_frequency', 'risk_free', 'risk_free_rate', 'sector_map', 'sqlite', 'ticker', 'volatility']
\ No newline at end of file
diff --git a/.hypothesis/constants/2c6b1acedbec8786 b/.hypothesis/constants/2c6b1acedbec8786
new file mode 100644
index 0000000000000000000000000000000000000000..12ebdbad34d38c8f3c6af64290b1a47d15fe75bc
--- /dev/null
+++ b/.hypothesis/constants/2c6b1acedbec8786
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\risk_attribution.py
+# hypothesis_version: 6.155.1
+
+[-1.0, 0.0, 1e-08, 0.0001, 0.3, 0.5, 0.95, 1.0, 100.0, 'alpha', 'explained_return', 'factor_contributions', 'ignore', 'total_return']
\ No newline at end of file
diff --git a/.hypothesis/constants/2cbc234a8598ee42 b/.hypothesis/constants/2cbc234a8598ee42
new file mode 100644
index 0000000000000000000000000000000000000000..d8aab007ea0a2d3b719d51d2c12cab86f58985e2
--- /dev/null
+++ b/.hypothesis/constants/2cbc234a8598ee42
@@ -0,0 +1,4 @@
+# file: d:\portfolio engine\engine\safety.py
+# hypothesis_version: 6.155.1
+
+[0.0, 0.05, 0.15, 0.8, 8000, 'CASH', 'GlobalCircuitBreaker', 'RiskMonitor', 'contracts', 'current_weights', 'inf', 'is_halted', 'items', 'margin_requirement', 'peak_value', 'portfolio_value_usd', 'r', 'start_metrics_server', 'w']
\ No newline at end of file
diff --git a/.hypothesis/constants/2e3e216dfb3d8e4d b/.hypothesis/constants/2e3e216dfb3d8e4d
new file mode 100644
index 0000000000000000000000000000000000000000..f39fccba356c99d494638085a53f1c088b28350a
--- /dev/null
+++ b/.hypothesis/constants/2e3e216dfb3d8e4d
@@ -0,0 +1,4 @@
+# file: d:\portfolio engine\engine\utils\metrics.py
+# hypothesis_version: 6.155.1
+
+[0.0, 0.0001, 0.0008, 'CASH', 'gross_lev', 'ignore', 'long_e', 'port_duration', 'port_yield', 'short_e']
\ No newline at end of file
diff --git a/.hypothesis/constants/2ee87ba1426ef838 b/.hypothesis/constants/2ee87ba1426ef838
new file mode 100644
index 0000000000000000000000000000000000000000..b8217af38268b79eddf278de78ed6d894ccaf3b4
--- /dev/null
+++ b/.hypothesis/constants/2ee87ba1426ef838
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\chart_data.py
+# hypothesis_version: 6.155.1
+
+[250, 'last']
\ No newline at end of file
diff --git a/.hypothesis/constants/314fcac4a2f179e2 b/.hypothesis/constants/314fcac4a2f179e2
new file mode 100644
index 0000000000000000000000000000000000000000..b23e29bcf41fc8d2bc2500a48a43c6f950c176b0
--- /dev/null
+++ b/.hypothesis/constants/314fcac4a2f179e2
@@ -0,0 +1,4 @@
+# file: d:\portfolio engine\engine\database.py
+# hypothesis_version: 6.155.1
+
+[1.0, 3600, 10000, 'DATABASE_URL', '__main__', 'append', 'asset_fundamentals', 'audit_log', 'backtest_history', 'daily_prices', 'daily_yields', 'date', 'finance_data.db', 'saved_portfolios', 'sqlite', 'stitch_metadata', 'ticker', 'user_memory', 'webhook_configs']
\ No newline at end of file
diff --git a/.hypothesis/constants/338b8e5c6cd0fbeb b/.hypothesis/constants/338b8e5c6cd0fbeb
new file mode 100644
index 0000000000000000000000000000000000000000..cd53f0d7d60ffcafa2270fea0fbbb5f231d03c9b
--- /dev/null
+++ b/.hypothesis/constants/338b8e5c6cd0fbeb
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\report_html.py
+# hypothesis_version: 6.155.1
+
+['$', 'J', 'cov', 'cov_mat', 'curr', 'disable_whatif', 'exp_rets', 'jacobian', 'mu', 'n', 'report_template.html', 'rfr', 'rfr_raw', 'tickers', 'w', 'w_risky', 'whatif_html']
\ No newline at end of file
diff --git a/.hypothesis/constants/348e26a70db1d761 b/.hypothesis/constants/348e26a70db1d761
new file mode 100644
index 0000000000000000000000000000000000000000..a13ec728f02ae8c739091593a21bf064d3c75c9c
--- /dev/null
+++ b/.hypothesis/constants/348e26a70db1d761
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\forecast_generation.py
+# hypothesis_version: 6.155.1
+
+[0.0, 0.005, 0.02, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.45, 0.5, 0.7, 1.0, 2.0, 365.25, 126, 252, 'HF_TOKEN', '_trading_periods', 'ai_sentiment', 'alpha', 'anova_enabled', 'betas', 'bond_metadata', 'factor_exposures', 'fcf_yield', 'feature_importances', 'garch_enabled', 'hmm_regime', 'implied_volatility', 'incremental_cov', 'is_high_vol', 'pe_ratio', 'risk_free_rate', 'sentiment', 'severity_score', 'state_series', 'use_fast_ewm_cov']
\ No newline at end of file
diff --git a/.hypothesis/constants/353d619262b55d95 b/.hypothesis/constants/353d619262b55d95
new file mode 100644
index 0000000000000000000000000000000000000000..5bdabdccbad6f9af339fa5abbd8332baeb843e93
--- /dev/null
+++ b/.hypothesis/constants/353d619262b55d95
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\math_utils.py
+# hypothesis_version: 6.155.1
+
+[0.0, 1e-08, 0.05, 1.645, 'columns', 'values']
\ No newline at end of file
diff --git a/.hypothesis/constants/384f54732a3f3fc7 b/.hypothesis/constants/384f54732a3f3fc7
new file mode 100644
index 0000000000000000000000000000000000000000..5b4683cdd4fea56f5abc041df71a091cd6dd467f
--- /dev/null
+++ b/.hypothesis/constants/384f54732a3f3fc7
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\overlay_analytics.py
+# hypothesis_version: 6.155.1
+
+[0.0, 1.0, 252, 'Daily_Futures_PnL', 'Equity_NAV', 'Futures_PnL', 'Margin_Buffer', 'Margin_Call', 'Total_NAV', 'Total_Return', 'hybrid_ann_return', 'hybrid_ann_vol', 'hybrid_cum_return', 'hybrid_max_drawdown', 'hybrid_sharpe']
\ No newline at end of file
diff --git a/.hypothesis/constants/394ec4affdcc559b b/.hypothesis/constants/394ec4affdcc559b
new file mode 100644
index 0000000000000000000000000000000000000000..dc8683b1a5baedaf09ed0b4fae6525629fa6c8c3
--- /dev/null
+++ b/.hypothesis/constants/394ec4affdcc559b
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\safety.py
+# hypothesis_version: 6.155.1
+
+[0.0, 0.05, 0.15, 0.8, 8000, 'CASH', 'GlobalCircuitBreaker', 'RiskMonitor', 'contracts', 'current_weights', 'inf', 'is_halted', 'items', 'margin_requirement', 'peak_value', 'portfolio_value_usd', 'r', 'start_metrics_server', 'w']
\ No newline at end of file
diff --git a/.hypothesis/constants/3aaeb719ea34a9c5 b/.hypothesis/constants/3aaeb719ea34a9c5
new file mode 100644
index 0000000000000000000000000000000000000000..b13c9b59fc62eccad7950a956e0f63266794d54e
--- /dev/null
+++ b/.hypothesis/constants/3aaeb719ea34a9c5
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\constants.py
+# hypothesis_version: 6.155.1
+
+[0.0003, 0.0004, 0.0005, 0.0006, 0.0008, 0.0025, 0.05, 50000000.0, '\x1b[0m', '\x1b[1m', '\x1b[2m', '\x1b[35m', '\x1b[36m', '\x1b[4m', '\x1b[91m', '\x1b[92m', '\x1b[93m', '\x1b[94m', '\x1b[95m', '\x1b[96m', 'Bonds', 'Commodity', 'Crypto', 'Defensive', 'Index', 'International', 'Ir_yad', 'MASTER_KEY', 'Other', 'Tech', 'access_keys.json', 'output', 'portfolio_state.json', '—']
\ No newline at end of file
diff --git a/.hypothesis/constants/3ae978d1219fc9a6 b/.hypothesis/constants/3ae978d1219fc9a6
new file mode 100644
index 0000000000000000000000000000000000000000..578a094c353da6dda776ea7e806c9ccf450e3b88
--- /dev/null
+++ b/.hypothesis/constants/3ae978d1219fc9a6
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\access_manager.py
+# hypothesis_version: 6.155.1
+
+['OTK-', 'REDIS_URL', 'Unknown', 'access.log', 'access_keys', 'created_at', 'expires_at', 'otk', 'r', 'revoked', 'used_at', 'used_by_ip', 'utf-8', 'w', 'wealth_access']
\ No newline at end of file
diff --git a/.hypothesis/constants/3bbad88c5cecb330 b/.hypothesis/constants/3bbad88c5cecb330
new file mode 100644
index 0000000000000000000000000000000000000000..5b92d700d772328d3c93671b39715f524fab990d
--- /dev/null
+++ b/.hypothesis/constants/3bbad88c5cecb330
@@ -0,0 +1,4 @@
+# file: d:\portfolio engine\engine\report.py
+# hypothesis_version: 6.155.1
+
+['%Y-%m-%d %H:%M', 'chart.umd.min.js', 'timestamp', 'utf-8', 'w']
\ No newline at end of file
diff --git a/.hypothesis/constants/3cbf12a7c09d3333 b/.hypothesis/constants/3cbf12a7c09d3333
new file mode 100644
index 0000000000000000000000000000000000000000..1cf8f94889c7caf8ddcc7409296007d7a5154bac
--- /dev/null
+++ b/.hypothesis/constants/3cbf12a7c09d3333
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\data.py
+# hypothesis_version: 6.155.1
+
+[-99.99, -0.999, 0.0, 1e-08, 0.04, 0.1, 0.35, 0.5, 1.0, 100.0, 365.25, -999, 100, 127, 200, 252, 360, 365, 3650, 5000, '%Y%m%d', '%Y-%m-%d', ',', '.', '.CSV', '.csv', '1950-01-03', '1971-02-05', '1974-12-31', '1977-01-03', '1980-01-01', '5d', '5factor', '=X', 'Adj Close', 'B', 'BAMLH0A0HYM2', 'CMA', 'Close', 'FRED_API_KEY', 'GC=F', 'GLD', 'HML', 'HYG', 'IEF', 'M', 'ME', 'MOM', 'Mkt-RF', 'NaN', 'Price', 'QQQ', 'RMW', 'SMB', 'SPY', 'TLT', '^', '^GSPC', '^IRX', '^IXIC', '^TNX', '^TYX', '^VIX', 'all', 'beta_63d', 'bond_metadata', 'close_price', 'cma_21d', 'coerce', 'coupon', 'date', 'dead_tickers', 'equity', 'extended_history', 'face', 'freq', 'hml_21d', 'inner', 'is_yield', 'iv_skew', 'latin-1', 'linear', 'maturity', 'max_date', 'mkt_rf_21d', 'mom', 'mom_1m', 'mom_3m', 'mom_6m', 'momentum', 'nan', 'observations', 'overlap_days', 'proxy', 'proxy_mappings', 'proxy_start', 'put_call_ratio', 'ret', 'rev_5d', 'risk_free', 'rmw_21d', 'smb_21d', 'spread', 'stooq', 'sum', 'target', 'ticker', 'tickers', 'value', 'vol_21d', 'volatility', 'yield_pct']
\ No newline at end of file
diff --git a/.hypothesis/constants/3d84354a09f6af21 b/.hypothesis/constants/3d84354a09f6af21
new file mode 100644
index 0000000000000000000000000000000000000000..0ff969ab097c3c9259d8c953f5825b4f7f9f0368
--- /dev/null
+++ b/.hypothesis/constants/3d84354a09f6af21
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\config.py
+# hypothesis_version: 6.155.1
+
+[-5.0, -1.0, 0.0, 0.0003, 0.0004, 0.0005, 0.0006, 0.0008, 0.001, 0.0025, 0.01, 0.015, 0.04, 0.05, 0.1, 0.2, 0.35, 0.4, 0.5, 0.95, 0.999, 1.0, 2.0, 2.5, 3.0, 5.0, 10.0, 20.0, 25.0, 50.0, 50000000.0, 100, 252, 365, 366, 756, 1024, 5000, 100000, '\x1b[0m', '\x1b[1m', '\x1b[2m', '\x1b[35m', '\x1b[36m', '\x1b[4m', '\x1b[91m', '\x1b[92m', '\x1b[93m', '\x1b[94m', '\x1b[95m', '\x1b[96m', '$', '&', '.e2e_cache', '/', '1950-01-03', '1971-02-05', '1974-12-31', '1977-01-03', 'AAPL', 'AGG', 'Bonds', 'Bonds & Rates', 'Commodities', 'Commodity', 'Core Equities', 'Crypto', 'Crypto Proxies', 'DIA', 'Defensive', 'Defensive/Value', 'EEM', 'EFA', 'ES', 'ETHE', 'FBTC', 'GC=F', 'GLD', 'IBIT', 'IEF', 'IWM', 'Index', 'International', 'JNJ', 'KO', 'MES', 'MSFT', 'MSTR', 'NVDA', 'Other', 'PDBC', 'PG', 'QQQ', 'SHY', 'SLV', 'SPY', 'TLT', 'TSLA', 'Tech', 'Tech & Growth', 'USO', 'VEA', 'VWO', 'XLP', '^GSPC', '^IXIC', '^TNX', '^TYX', '^VIX', '_', '__pydantic_extra__', 'after', 'allow', 'beta_hedge', 'cmdstanpy', 'constraints.json', 'daily', 'engine.log', 'exc_info', 'extra', 'funcName', 'is_yield', 'level', 'lineNo', 'matplotlib', 'message', 'module', 'name', 'output', 'overlap_days', 'portfolio_engine', 'portfolio_state.json', 'proxy', 'proxy_start', 'r', 'spo', 'timestamp', 'utf-8', 'w', 'yfinance', '—']
\ No newline at end of file
diff --git a/.hypothesis/constants/3da54523cde4ac01 b/.hypothesis/constants/3da54523cde4ac01
new file mode 100644
index 0000000000000000000000000000000000000000..804153f892a08cadef0c359dc6b5b9509300e368
--- /dev/null
+++ b/.hypothesis/constants/3da54523cde4ac01
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\report_chart.py
+# hypothesis_version: 6.155.1
+
+[0.0, 0.1, 0.8, 1.0, 1.2, 1.4, 1.5, 1.8, 100, 150, '#3fb950', '#58a6ff', '#8b949e', '#c084fc', '#f0883e', '#f85149', '%Y-%m-%d', 'CASH', 'Cash Benchmark', 'Current %', 'Current 25th', 'Current 5th', 'Current 75th', 'Current 95th', 'Current Median', 'Current Portfolio', 'Net %', 'Other', 'Portfolio (OOS)', 'Target %', 'Target 25th', 'Target 5th', 'Target 75th', 'Target 95th', 'Target Median', 'Target Portfolio', 'backgroundColor', 'bl_ds', 'bl_labels', 'borderColor', 'borderDash', 'borderRadius', 'borderWidth', 'bt', 'capm_rets', 'circle', 'curr_mc_ds', 'currency', 'data', 'dates', 'ef_curve', 'ef_ds', 'eq_dates', 'eq_ds', 'ff_betas', 'ff_ds', 'ff_labels', 'ffill', 'fill', 'has_curr_mc', 'ignore', 'label', 'mc', 'mc_dates', 'mc_ds', 'oos_dates', 'oos_ds', 'pointRadius', 'pointStyle', 'rectRot', 'rets', 'rgba(248,81,73,0.25)', 'rgba(248,81,73,0.45)', 'rgba(248,81,73,0.5)', 'rgba(63,185,80,0.25)', 'rgba(63,185,80,0.45)', 'rgba(63,185,80,0.5)', 'sec_ds', 'sec_labels', 'sector_map', 'showLine', 'tension', 'vols', 'x', 'y']
\ No newline at end of file
diff --git a/.hypothesis/constants/3f64439f96517cad b/.hypothesis/constants/3f64439f96517cad
new file mode 100644
index 0000000000000000000000000000000000000000..af61036c4696cf1478e6da3420a39a7c738abde2
--- /dev/null
+++ b/.hypothesis/constants/3f64439f96517cad
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\forecast_generation.py
+# hypothesis_version: 6.155.1
+
+[0.0, 0.005, 0.05, 0.15, 0.25, 0.3, 0.45, 0.5, 0.7, 1.0, 2.0, 365.25, 126, 252, '_trading_periods', 'alpha', 'anova_enabled', 'betas', 'bond_metadata', 'factor_exposures', 'feature_importances', 'garch_enabled', 'hmm_regime', 'incremental_cov', 'risk_free_rate', 'severity_score', 'use_fast_ewm_cov']
\ No newline at end of file
diff --git a/.hypothesis/constants/3f863d8fca21d7e5 b/.hypothesis/constants/3f863d8fca21d7e5
new file mode 100644
index 0000000000000000000000000000000000000000..b836cfcf0014793be9acf02d9e03a43e9fc6d1a3
--- /dev/null
+++ b/.hypothesis/constants/3f863d8fca21d7e5
@@ -0,0 +1,4 @@
+# file: d:\portfolio engine\engine\core_engine.py
+# hypothesis_version: 6.155.1
+
+[-0.3, 0.0, 0.0001, 0.0008, 0.001, 0.01, 0.015, 0.05, 0.1, 0.15, 0.2, 0.3, 0.35, 0.5, 0.95, 1.0, 1.5, 2.0, 3.0, 5.0, 7.5, 10.0, 15.0, 25.0, 100000.0, 252, '%', '%Y-%m-%d', ',', ', ', '2008-09-01', '2009-03-01', '2020-02-20', '2020-03-23', '2022-01-01', '2022-12-31', 'AAPL', 'AGG', 'Bonds & Rates', 'CASH', 'CORE_ENGINE_FATAL', 'Core Equities', 'DIA', 'GLD', 'HF_TOKEN', 'IEF', 'IWM', 'MAE', 'MSFT', 'Model 1', 'NVDA', 'Naive Mean', 'None', 'Other', 'QQQ', 'RFR_PROXY', 'SHY', 'SPY', 'TLT', 'TSLA', 'Tech & Growth', 'VIX_PROXY', '_', '__main__', '_metadata', '_risk_factor', '_risk_input', '_serve', '_stab_lambda', '_stability_spreads', '_use_saved_basis', 'adjusted_input', 'ai_sentiment', 'allocation_engine', 'avg_cost', 'bench_rets', 'beta', 'bt', 'capital', 'cfg_overrides', 'clear', 'cls', 'cov_mat', 'currency_symbol', 'current_weights_raw', 'custom_constraints', 'cvar_95', 'cvar_99', 'cvar_alpha', 'cvar_enabled', 'disclaimer', 'dynamic_risk', 'ef_curve', 'efficient_frontier', 'eq_bench', 'exp_ret', 'exp_sr', 'exp_vol', 'expected_returns', 'export_excel', 'feature_importances', 'ff_betas', 'garch_enabled', 'gross_leverage_cap', 'hmm_regime', 'ignore', 'last_generated', 'last_updated', 'marginal_var', 'max_dd', 'mc', 'model', 'nt', 'original_input', 'prices', 'purchase_date', 'raw', 'rets', 'returns_df', 'rfr_bench', 'risk_factor', 'risk_input', 'sector_map', 'shares', 'short_borrow_cost', 'single_asset_min', 'spread', 'stats', 'stress_2008', 'stress_2022', 'stress_covid', 'target_weights', 'tax_enabled', 'tax_rate_lt', 'tax_rate_st', 'tickers', 'to_dict', 'universe_categories', 'utf-8', 'vix_val', 'vol_bench', 'volatility', 'vols', 'w', 'winner', 'with_futures']
\ No newline at end of file
diff --git a/.hypothesis/constants/4042d2a45af1a886 b/.hypothesis/constants/4042d2a45af1a886
new file mode 100644
index 0000000000000000000000000000000000000000..f09cc81021e99d97816ad142a200efffd7eb2fb5
--- /dev/null
+++ b/.hypothesis/constants/4042d2a45af1a886
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\bl_bridge.py
+# hypothesis_version: 6.155.1
+
+[0.0, 1e-08, 0.01, 0.02, 0.05, 0.1, 0.2, 0.5, 1.0, 252.0, 126, 252, 10000, 'USD']
\ No newline at end of file
diff --git a/.hypothesis/constants/42c8d425e442f6c4 b/.hypothesis/constants/42c8d425e442f6c4
new file mode 100644
index 0000000000000000000000000000000000000000..2fc523ecafc5c44adff66c90b3ee552dcbf27284
--- /dev/null
+++ b/.hypothesis/constants/42c8d425e442f6c4
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\table_builder.py
+# hypothesis_version: 6.155.1
+
+[0.0001, '#3fb950', '#f85149', 'Current', 'Target', 'green', 'red']
\ No newline at end of file
diff --git a/.hypothesis/constants/43ed7242daa802c1 b/.hypothesis/constants/43ed7242daa802c1
new file mode 100644
index 0000000000000000000000000000000000000000..f3072f9ba178fd7804a9d49cbb4286e60ddf58be
--- /dev/null
+++ b/.hypothesis/constants/43ed7242daa802c1
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\analytics.py
+# hypothesis_version: 6.155.1
+
+[-0.55, -0.33, -0.25, -0.2, -0.15, -0.1, -0.04, -0.015, -0.01, 0.0, 1e-06, 0.0001, 0.0008, 0.001, 0.01, 0.015, 0.04, 0.1, 0.25, 0.4, 0.95, 1.0, 2.0, 20.0, 252.0, 50000000.0, -200, 100, 200, 252, ' & ', 'BEAR', 'BULL', 'CASH', 'CHOP', 'No Shock', 'SPY', 'UNKNOWN', '^IRX', '^TNX', '^VIX', 'allow_short', 'ann_ret', 'ann_rets', 'ann_vol', 'benchmarks', 'calmar', 'curve_inverted', 'cvar_95', 'dd_days', 'default_adv_proxy', 'down_capture', 'equity', 'friction_paid', 'friction_rate', 'gain_fractions', 'ignore', 'impact', 'impact_paid', 'is_historical', 'jacobian', 'max', 'max_dd', 'max_dd_date', 'min', 'name', 'optimal', 'optimizer_failures', 'rate_shift', 'report', 'risk_free', 'rolling_sharpe', 'scenario', 'sharpe', 'short_term_rate', 'sortino', 'spread', 'spy_drop', 'spy_trend', 'tax_enabled', 'tax_paid', 'tax_rates', 'tc_volume_profile', 'tickers', 'tnx_val', 'total_ret', 'transaction_cost', 'trigger', 'up_capture', 'vix_high', 'vix_val', 'volatility']
\ No newline at end of file
diff --git a/.hypothesis/constants/4415fd15729e3549 b/.hypothesis/constants/4415fd15729e3549
new file mode 100644
index 0000000000000000000000000000000000000000..925cf30933eb3f12b0d2ba8850a5da269c39bbde
--- /dev/null
+++ b/.hypothesis/constants/4415fd15729e3549
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\config_schema.py
+# hypothesis_version: 6.155.1
+
+[-5.0, -1.0, 0.0, 0.001, 0.01, 0.015, 0.04, 0.05, 0.1, 0.2, 0.35, 0.4, 0.5, 0.95, 0.999, 1.0, 2.0, 2.5, 3.0, 5.0, 10.0, 20.0, 25.0, 50.0, 100, 252, 365, 366, 756, 2000, 100000, '$', '.e2e_cache', '1950-01-03', '1971-02-05', '1974-12-31', '1977-01-03', 'AAPL', 'AGG', 'BTC-USD', 'Bonds & Rates', 'Commodities', 'Core Equities', 'Crypto', 'Crypto Proxies', 'DIA', 'Defensive/Value', 'EEM', 'EFA', 'ES', 'ETH-USD', 'ETHE', 'FBTC', 'GC=F', 'GLD', 'IBIT', 'IEF', 'IWM', 'International', 'JNJ', 'KO', 'MES', 'MSFT', 'MSTR', 'NVDA', 'PDBC', 'PG', 'QQQ', 'SHY', 'SLV', 'SPY', 'TLT', 'TSLA', 'Tech & Growth', 'USO', 'VEA', 'VWO', 'XLP', '^GSPC', '^IXIC', '^TNX', '^TYX', '^VIX', '_', '__pydantic_extra__', 'after', 'allow', 'beta_hedge', 'daily', 'extra', 'is_yield', 'overlap_days', 'proxy', 'proxy_start', 'spo']
\ No newline at end of file
diff --git a/.hypothesis/constants/46b404830a01800a b/.hypothesis/constants/46b404830a01800a
new file mode 100644
index 0000000000000000000000000000000000000000..e5f37efc6ed2f56e71b4b7e96ebbc17ae6296d31
--- /dev/null
+++ b/.hypothesis/constants/46b404830a01800a
@@ -0,0 +1,4 @@
+# file: d:\portfolio engine\engine\narrative.py
+# hypothesis_version: 6.155.1
+
+[0.0, 0.3, 252, '#3fb950', '#f85149', ')', '
', '', '', 'Bearish', 'Beta Target', 'Bullish', 'Max Turnover', 'Momentum trends', 'Single Asset Cap', 'Volatility dynamics', 'Yield/Credit Spreads', '_', 'ai_sentiment', 'bear', 'beta', 'binding_constraints', 'bull', 'curve_inverted', 'feature_importances', 'mom', 'neutral', 'sentiment', 'spread', 'spy_trend', 'var', 'vix_high', 'vol', 'yield']
\ No newline at end of file
diff --git a/.hypothesis/constants/49977dc079978a5e b/.hypothesis/constants/49977dc079978a5e
new file mode 100644
index 0000000000000000000000000000000000000000..4f3cee5a7703b0384368de4be89d164742c36849
--- /dev/null
+++ b/.hypothesis/constants/49977dc079978a5e
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\core_types.py
+# hypothesis_version: 6.155.1
+
+[0.0, 1e-08, 1e-06, 0.001, 0.04, 0.1, 0.15, 0.2, 0.35, 0.4, 0.5, 0.95, 1.0, 1000000.0, 50000000.0, 252, 366, '$', 'CovarianceResult', 'ForecastResult', 'FuturesContract', 'FuturesOverlayResult', 'LotManager', 'ModelReturnForecast', 'OptimizationContext', 'OptimizationParams', 'OptimizationResult', 'PortfolioState', 'ReportData', 'SPY', 'TaxLot', 'ValidationResult', '^IRX', '^TNX', '^VIX', '_global_ewm_cov', '_risk_factor', '_stochastic', '_trading_periods', 'allocation_engine', 'allow_short', 'avg_cost', 'capital', 'current_weights_raw', 'equity', 'ff_enabled', 'fifo', 'hifo', 'lt_days', 'lt_first', 'model', 'overlay_enabled', 'purchase_date', 'rebalance_freq', 'risk', 'risk_free', 'shares', 'short_term_rate', 'spreads_enabled', 'tax_enabled', 'tax_rate_lt', 'tax_rate_st', 'tickers', 'volatility', 'volatility_target']
\ No newline at end of file
diff --git a/.hypothesis/constants/4cbd949656f8f2c2 b/.hypothesis/constants/4cbd949656f8f2c2
new file mode 100644
index 0000000000000000000000000000000000000000..306d7d8d125455f7961b21896c94d57146730d3b
--- /dev/null
+++ b/.hypothesis/constants/4cbd949656f8f2c2
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\forecast_generation.py
+# hypothesis_version: 6.155.1
+
+[0.0, 0.005, 0.05, 0.15, 0.25, 0.3, 0.45, 0.5, 0.7, 1.0, 2.0, 365.25, 126, 252, '_trading_periods', 'anova_enabled', 'bond_metadata', 'feature_importances', 'garch_enabled', 'hmm_regime', 'incremental_cov', 'risk_free_rate', 'severity_score', 'use_fast_ewm_cov']
\ No newline at end of file
diff --git a/.hypothesis/constants/4f76f739885ba0d5 b/.hypothesis/constants/4f76f739885ba0d5
new file mode 100644
index 0000000000000000000000000000000000000000..a1608c6ee29689ce7c306f42f59b6fc85887599a
--- /dev/null
+++ b/.hypothesis/constants/4f76f739885ba0d5
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\execution.py
+# hypothesis_version: 6.155.1
+
+[-1.0, 0.0, 0.0001, 0.01, 0.015, 0.05, 0.1, 0.15, 0.5, 1.0, 4.0, 10000.0, 50000000.0, 7497, '%Y%m%d_%H%M%S', '127.0.0.1', 'AUC', 'Action', 'AlgoStrategy', 'ArrivalPx', 'BUY', 'CASH', 'Currency', 'DAY', 'Exchange', 'IB_ARRIVAL', 'LMT', 'LmtPrice', 'MKT', 'MOC', 'OrderType', 'Quantity', 'SELL', 'SMART', 'STK', 'SecType', 'Symbol', 'TWAP', 'TimeInForce', 'Twap', 'USD', 'VWAP', 'Vwap', 'adv', 'aggressive', 'base_price', 'broker', 'close', 'daily', 'db', 'diff', 'drift_only', 'execution_price', 'filled_val', 'high', 'impact_decimal', 'intended_val', 'low', 'monthly', 'open', 'quarterly', 'slippage_bps', 'twap', 'volatility', 'vwap', 'w', 'weekly', 'y']
\ No newline at end of file
diff --git a/.hypothesis/constants/4fc9a5bf4692b866 b/.hypothesis/constants/4fc9a5bf4692b866
new file mode 100644
index 0000000000000000000000000000000000000000..dabd69d952beb3697cc43c8c070df3f58aedef1d
--- /dev/null
+++ b/.hypothesis/constants/4fc9a5bf4692b866
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\report.py
+# hypothesis_version: 6.155.1
+
+['%Y-%m-%d %H:%M', '.html', '.pdf', 'chart.umd.min.js', 'timestamp', 'utf-8', 'w']
\ No newline at end of file
diff --git a/.hypothesis/constants/517be8d1944036bf b/.hypothesis/constants/517be8d1944036bf
new file mode 100644
index 0000000000000000000000000000000000000000..d721d7da17dbcd0250f48a83c614ff4865ae1cdf
--- /dev/null
+++ b/.hypothesis/constants/517be8d1944036bf
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\report_builders\html_resiliency.py
+# hypothesis_version: 6.155.1
+
+[-0.05, -0.01, 0.01, 0.15, '#3fb950', '#e3b341', '#f85149', 'impact', 'max', 'min', 'report', 'spread']
\ No newline at end of file
diff --git a/.hypothesis/constants/536f91ea56591f7b b/.hypothesis/constants/536f91ea56591f7b
new file mode 100644
index 0000000000000000000000000000000000000000..cfa698bf39aae5c950d16ee2732a3a6594d657b1
--- /dev/null
+++ b/.hypothesis/constants/536f91ea56591f7b
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\backtest.py
+# hypothesis_version: 6.155.1
+
+[-1e-05, 0.0, 1e-12, 1e-09, 1e-08, 1e-06, 1e-05, 0.0001, 0.0008, 0.001, 0.04, 0.2, 0.35, 0.5, 1.0, 3.0, 50000000.0, 126, 252, 366, 1260, 5000, '%Y-%m-%d', 'CASH', '_risk_factor', '_risk_input', 'cash_weight', 'dates', 'default_adv_proxy', 'ffill', 'hifo', 'hmm_regime', 'ignore', 'lt_days', 'monte_carlo_sims', 'monte_carlo_years', 'risk_free_rate', 'severity_score', 'tax_enabled', 'tax_rate_lt', 'tax_rate_st', 'transaction_cost']
\ No newline at end of file
diff --git a/.hypothesis/constants/53d7044742396ffe b/.hypothesis/constants/53d7044742396ffe
new file mode 100644
index 0000000000000000000000000000000000000000..29ee96dcd85c874b9058ab9a1fdaa7aa8dab75e8
--- /dev/null
+++ b/.hypothesis/constants/53d7044742396ffe
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\core_engine.py
+# hypothesis_version: 6.155.1
+
+[-0.3, 0.0, 0.0001, 0.0008, 0.001, 0.01, 0.015, 0.05, 0.1, 0.15, 0.2, 0.3, 0.35, 0.5, 0.95, 1.0, 1.5, 2.0, 3.0, 5.0, 7.5, 10.0, 15.0, 25.0, 100000.0, 252, 1260, '%', '%Y-%m-%d', ',', ', ', '2008-09-01', '2009-03-01', '2020-02-20', '2020-03-23', '2022-01-01', '2022-12-31', 'AAPL', 'AGG', 'Annualized Return', 'Bonds & Rates', 'CASH', 'CORE_ENGINE_FATAL', 'Core Equities', 'DIA', 'GLD', 'HF_TOKEN', 'IEF', 'IWM', 'MAE', 'MSFT', 'Model 1', 'NVDA', 'Naive Mean', 'None', 'Other', 'QQQ', 'RFR_PROXY', 'SHY', 'SPY', 'Sharpe Ratio', 'TLT', 'TSLA', 'Tech & Growth', 'VIX_PROXY', '_', '__main__', '_metadata', '_risk_factor', '_risk_input', '_serve', '_stab_lambda', '_stability_spreads', '_use_saved_basis', 'adjusted_input', 'ai_sentiment', 'allocation_engine', 'avg_cost', 'bench_rets', 'beta', 'bt', 'bt_stats', 'capital', 'cfg_overrides', 'clear', 'cls', 'cov_mat', 'currency_symbol', 'current_weights_raw', 'custom_constraints', 'cvar_95', 'cvar_99', 'cvar_alpha', 'cvar_enabled', 'disclaimer', 'dynamic_risk', 'ef_curve', 'efficient_frontier', 'eq_bench', 'exp_ret', 'exp_sr', 'exp_vol', 'expected_returns', 'export_excel', 'feature_importances', 'ff_betas', 'fixed_weights', 'garch_enabled', 'gross_leverage_cap', 'hmm_regime', 'ignore', 'last_generated', 'last_updated', 'marginal_var', 'max_dd', 'mc', 'model', 'nt', 'original_input', 'prices', 'purchase_date', 'raw', 'rets', 'returns_df', 'rfr_bench', 'risk_factor', 'risk_input', 'sector_map', 'shares', 'short_borrow_cost', 'single_asset_min', 'spread', 'sr', 'stats', 'stress_2008', 'stress_2022', 'stress_covid', 'target_weights', 'tax_enabled', 'tax_rate_lt', 'tax_rate_st', 'tickers', 'to_dict', 'universe_categories', 'utf-8', 'vix_val', 'vol_bench', 'volatility', 'vols', 'w', 'winner', 'with_futures']
\ No newline at end of file
diff --git a/.hypothesis/constants/554515e555a2ec2c b/.hypothesis/constants/554515e555a2ec2c
new file mode 100644
index 0000000000000000000000000000000000000000..c56a9b80271ddcd3d244f33e02c314b4bac204a4
--- /dev/null
+++ b/.hypothesis/constants/554515e555a2ec2c
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\report_builders\html_validation.py
+# hypothesis_version: 6.155.1
+
+[0.0, '#3fb950', '#e3b341', '#f85149', '', 'Model 1', 'diagnostic', 'independence', 'overall_pass', 'p_value', 'significant', 'winner']
\ No newline at end of file
diff --git a/.hypothesis/constants/5572543ace0f412f b/.hypothesis/constants/5572543ace0f412f
new file mode 100644
index 0000000000000000000000000000000000000000..42c60a43326d4d1367f23cf2289894e0d9d7895a
--- /dev/null
+++ b/.hypothesis/constants/5572543ace0f412f
@@ -0,0 +1,4 @@
+# file: d:\portfolio engine\engine\backtest.py
+# hypothesis_version: 6.155.1
+
+[-1e-05, 0.0, 1e-12, 1e-09, 1e-08, 1e-06, 1e-05, 0.0001, 0.0008, 0.001, 0.04, 0.2, 0.35, 0.5, 1.0, 3.0, 10.0, 100000.0, 50000000.0, 126, 252, 366, 1000, 1260, 5000, '%Y-%m-%d', 'CASH', '_risk_factor', '_risk_input', 'cash_weight', 'dates', 'default_adv_proxy', 'ffill', 'hifo', 'hmm_regime', 'ignore', 'lt_days', 'monte_carlo_sims', 'monte_carlo_years', 'risk_free_rate', 'severity_score', 'tax_enabled', 'tax_rate_lt', 'tax_rate_st', 'transaction_cost']
\ No newline at end of file
diff --git a/.hypothesis/constants/58b219998e373067 b/.hypothesis/constants/58b219998e373067
new file mode 100644
index 0000000000000000000000000000000000000000..2130bf4e6ff0047c9c21ae1c4f0cfd0efe949c21
--- /dev/null
+++ b/.hypothesis/constants/58b219998e373067
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\cvxpy_engine.py
+# hypothesis_version: 6.155.1
+
+[-1.0, 0.0, 1e-08, 1e-06, 1e-05, 0.0001, 0.0005, 0.0008, 0.001, 0.03, 0.05, 0.07, 0.09, 0.1, 0.12, 0.15, 0.18, 0.2, 0.21, 0.24, 0.28, 0.3, 0.5, 0.8, 0.95, 0.99, 0.999, 1.0, 1.5, 2.0, 3.0, 10.0, 50.0, 100.0, 100000, 'Base', 'CASH', 'CDaR', 'CVaR', 'DW Nonneg', 'Drop Beta', 'Drop Duration', 'Drop Factors', 'Duration', 'Fully Invested', 'Gross Leverage Cap', 'HML', 'MAD', 'Market Impact SOCP', 'Max Loss', 'Mean-Variance', 'Relax Sector Caps', 'Remove Min Weights', 'Remove Turnover', 'SMB', 'Sell Volume Tracking', 'Sell W Nonneg', 'Semi-Variance', 'Short W Nonneg', 'Unconstrained', 'Weights are None', 'Widen Beta', '_e2e_warm_start', '_risk_measure', 'baseline_risk_factor', 'cvar_alpha', 'cvar_enabled', 'cvar_lambda', 'details', 'dual_value', 'eps_abs', 'eps_gap', 'eps_rel', 'factor_neutrality', 'garch_info', 'gross_leverage_cap', 'hmm_regime', 'ignore', 'max_duration', 'max_iter', 'min_duration', 'risk_budgeting', 'risk_free_rate', 'scale', 'sector_map', 'severity_score', 'short_borrow_cost', 'state_sequence', 'tc_volume_profile', 'transaction_cost', 'warm_start']
\ No newline at end of file
diff --git a/.hypothesis/constants/58c36c273873490a b/.hypothesis/constants/58c36c273873490a
new file mode 100644
index 0000000000000000000000000000000000000000..0ac8377d34d43fbe1da82adcbcdd0688febf2e74
--- /dev/null
+++ b/.hypothesis/constants/58c36c273873490a
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\models.py
+# hypothesis_version: 6.155.1
+
+[-0.5, -0.02, 0.0, 1e-12, 1e-08, 0.0001, 0.001, 0.01, 0.015, 0.02, 0.03, 0.04, 0.045, 0.05, 0.06, 0.08, 0.1, 0.2, 0.25, 0.3, 0.5, 0.6, 0.7, 0.75, 0.8, 0.85, 0.9, 0.94, 0.95, 0.99, 0.999, 1.0, 1.0001, 1.5, 2.0, 2.5, 5.0, 10.0, 100.0, 365.25, 1000.0, 10000.0, 100, 127, 252, 256, 1024, 3600, 5000, '1', 'AR', 'GARCH', 'HML', 'MOM', 'Mkt-RF', 'NaN in forecast', 'OMP_NUM_THREADS', 'SMB', 'Zero', 'alpha', 'alpha[1]', 'beta', 'beta[1]', 'const', 'garch_ann_vol', 'hist', 'hist_ann_vol', 'ignore', 'local linear trend', 'marchenko_pastur', 'market_caps', 'maturity', 'median', 'modified_duration', 'normal', 'off', 'origin', 'persistence', 'ret', 'scale', 'spot', 'target', 'wigner_semicircle']
\ No newline at end of file
diff --git a/.hypothesis/constants/5968250419c1885d b/.hypothesis/constants/5968250419c1885d
new file mode 100644
index 0000000000000000000000000000000000000000..306d7d8d125455f7961b21896c94d57146730d3b
--- /dev/null
+++ b/.hypothesis/constants/5968250419c1885d
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\forecast_generation.py
+# hypothesis_version: 6.155.1
+
+[0.0, 0.005, 0.05, 0.15, 0.25, 0.3, 0.45, 0.5, 0.7, 1.0, 2.0, 365.25, 126, 252, '_trading_periods', 'anova_enabled', 'bond_metadata', 'feature_importances', 'garch_enabled', 'hmm_regime', 'incremental_cov', 'risk_free_rate', 'severity_score', 'use_fast_ewm_cov']
\ No newline at end of file
diff --git a/.hypothesis/constants/59a34872737ed061 b/.hypothesis/constants/59a34872737ed061
new file mode 100644
index 0000000000000000000000000000000000000000..396ccd52b9e05526aa7a2e04fce5edeb554b4d85
--- /dev/null
+++ b/.hypothesis/constants/59a34872737ed061
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\backtest.py
+# hypothesis_version: 6.155.1
+
+[-1e-05, 0.0, 1e-12, 1e-09, 1e-08, 1e-06, 1e-05, 0.0001, 0.0008, 0.001, 0.04, 0.2, 0.35, 0.5, 1.0, 3.0, 50000000.0, 126, 252, 366, 1000, 1260, 5000, '%Y-%m-%d', 'CASH', '_risk_factor', '_risk_input', 'cash_weight', 'dates', 'default_adv_proxy', 'ffill', 'hifo', 'hmm_regime', 'ignore', 'lt_days', 'monte_carlo_sims', 'monte_carlo_years', 'risk_free_rate', 'severity_score', 'tax_enabled', 'tax_rate_lt', 'tax_rate_st', 'transaction_cost']
\ No newline at end of file
diff --git a/.hypothesis/constants/5aadbbc9e2aa82a8 b/.hypothesis/constants/5aadbbc9e2aa82a8
new file mode 100644
index 0000000000000000000000000000000000000000..38099a806b4a95302b824769183b8f58d46a58ee
--- /dev/null
+++ b/.hypothesis/constants/5aadbbc9e2aa82a8
@@ -0,0 +1,4 @@
+# file: d:\portfolio engine\engine\futures_overlay.py
+# hypothesis_version: 6.155.1
+
+[0.0, 0.0001, 0.2, 0.8, 1.0, 50.0, 4000.0, 12000.0, 200000.0, 'CASH', 'ES=F', 'beta_hedge', 'futures_target_beta', 'futures_universe', 'hedge', 'ignore', 'leverage', 'overlay_mode']
\ No newline at end of file
diff --git a/.hypothesis/constants/5b26b9d3d7ceb699 b/.hypothesis/constants/5b26b9d3d7ceb699
new file mode 100644
index 0000000000000000000000000000000000000000..f14c1d560162b73cfa8afca7871ff8f49042fba5
--- /dev/null
+++ b/.hypothesis/constants/5b26b9d3d7ceb699
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\math_utils.py
+# hypothesis_version: 6.155.1
+
+['columns', 'values']
\ No newline at end of file
diff --git a/.hypothesis/constants/5ca22c900ea9d2bc b/.hypothesis/constants/5ca22c900ea9d2bc
new file mode 100644
index 0000000000000000000000000000000000000000..3ef608e641fca0c25652f469672de25c531cd305
--- /dev/null
+++ b/.hypothesis/constants/5ca22c900ea9d2bc
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\data_repository.py
+# hypothesis_version: 6.155.1
+
+[-0.99, 0.0, 0.05, 100, 252, '%s', ',', '?', 'SPY', '^IRX', '^TNX', '^VIX', '_trading_periods', '_use_saved_basis', 'all', 'benchmarks', 'close_price', 'daily', 'date', 'equity', 'last', 'monthly', 'portfolio_engine', 'return_frequency', 'risk_free', 'risk_free_rate', 'sector_map', 'sqlite', 'ticker', 'volatility']
\ No newline at end of file
diff --git a/.hypothesis/constants/614a524dbdad682f b/.hypothesis/constants/614a524dbdad682f
new file mode 100644
index 0000000000000000000000000000000000000000..09cd62042fd1c1443e4a8ed82093894b1375435a
--- /dev/null
+++ b/.hypothesis/constants/614a524dbdad682f
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\dl_models.py
+# hypothesis_version: 6.155.1
+
+[0.0, 0.0001, 0.001, 0.1, 0.5, 0.8, 1.0, 10000.0, 256, 5000, 'cpu', 'cuda', 'ignore', 'inf', 'min', 'pe', 'portfolio_engine', 'ret', 'target']
\ No newline at end of file
diff --git a/.hypothesis/constants/63927d5a7446e5e5 b/.hypothesis/constants/63927d5a7446e5e5
new file mode 100644
index 0000000000000000000000000000000000000000..b13b22be763d9cb0f5513e312d2a044840add241
--- /dev/null
+++ b/.hypothesis/constants/63927d5a7446e5e5
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\fixed_income.py
+# hypothesis_version: 6.155.1
+
+[-0.99, 0.0, 0.04, 0.5, 10.0, 'Bonds', 'CORP_', 'HYG', 'JNK', 'LQD', 'TBILL', 'US_T', 'VCIT', '^[0-9A-Z]{9}$', 'bond_metadata', 'convexity', 'forward', 'macaulay_duration', 'modified_duration', 'natural', 'sector_map', 'spot', 'spread']
\ No newline at end of file
diff --git a/.hypothesis/constants/63d5ed33b3bdf35a b/.hypothesis/constants/63d5ed33b3bdf35a
new file mode 100644
index 0000000000000000000000000000000000000000..3eb7711707a6940f7380d61d6a6faf700e77b033
--- /dev/null
+++ b/.hypothesis/constants/63d5ed33b3bdf35a
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\config.py
+# hypothesis_version: 6.155.1
+
+['7f8a9e2c4b5d6f1a', 'MASTER_KEY']
\ No newline at end of file
diff --git a/.hypothesis/constants/642e6d058113d08b b/.hypothesis/constants/642e6d058113d08b
new file mode 100644
index 0000000000000000000000000000000000000000..817ae711f82fb3c40d484142ac454e6efe6c13be
--- /dev/null
+++ b/.hypothesis/constants/642e6d058113d08b
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\report_builders\html_diagnostics.py
+# hypothesis_version: 6.155.1
+
+['#d29922', '#f85149', 'Critical', 'Warning', 'display_constraints', 'relaxation_log']
\ No newline at end of file
diff --git a/.hypothesis/constants/6527d1b3a135da38 b/.hypothesis/constants/6527d1b3a135da38
new file mode 100644
index 0000000000000000000000000000000000000000..1b35c5b486ccb03e1c81e8c7374c753d91cc9140
--- /dev/null
+++ b/.hypothesis/constants/6527d1b3a135da38
@@ -0,0 +1,4 @@
+# file: d:\portfolio engine\engine\e2e_forecast_model.py
+# hypothesis_version: 6.155.1
+
+[0.0, 1e-08, 1e-06, 0.0001, 0.001, 0.04, 0.1, 0.2, 1.0, 3.0, 100, 126, 252, 5000, 'SCS', 'cpu', 'eps', 'max_iters', 'nan', 'ret', 'solve_method', 'spo', 'target', 'train_loss', 'val_loss', 'val_sharpe']
\ No newline at end of file
diff --git a/.hypothesis/constants/655c0180fb914669 b/.hypothesis/constants/655c0180fb914669
new file mode 100644
index 0000000000000000000000000000000000000000..da440bdeb2bf678ad5259a4629f22414ae455a86
--- /dev/null
+++ b/.hypothesis/constants/655c0180fb914669
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\data.py
+# hypothesis_version: 6.155.1
+
+[-99.99, -0.999, 0.0, 1e-08, 0.04, 0.1, 0.35, 0.5, 1.0, 100.0, 365.25, -999, 100, 127, 200, 252, 360, 365, 3650, 5000, '%Y%m%d', '%Y-%m-%d', ',', '.', '.CSV', '.csv', '1950-01-03', '1971-02-05', '1974-12-31', '1977-01-03', '1980-01-01', '5factor', 'Adj Close', 'B', 'BAMLH0A0HYM2', 'CMA', 'Close', 'FRED_API_KEY', 'GC=F', 'GLD', 'HML', 'HYG', 'IEF', 'M', 'ME', 'MOM', 'Mkt-RF', 'NaN', 'Price', 'QQQ', 'RMW', 'SMB', 'SPY', 'TLT', '^GSPC', '^IRX', '^IXIC', '^TNX', '^TYX', '^VIX', 'all', 'beta_63d', 'bond_metadata', 'close_price', 'cma_21d', 'coerce', 'coupon', 'date', 'dead_tickers', 'equity', 'extended_history', 'face', 'freq', 'hml_21d', 'inner', 'is_yield', 'iv_skew', 'latin-1', 'linear', 'maturity', 'max_date', 'mkt_rf_21d', 'mom', 'mom_1m', 'mom_3m', 'mom_6m', 'momentum', 'nan', 'observations', 'overlap_days', 'proxy', 'proxy_mappings', 'proxy_start', 'put_call_ratio', 'ret', 'rev_5d', 'risk_free', 'rmw_21d', 'smb_21d', 'spread', 'sum', 'target', 'ticker', 'tickers', 'value', 'vol_21d', 'volatility', 'yield_pct']
\ No newline at end of file
diff --git a/.hypothesis/constants/65dc44859cfeb115 b/.hypothesis/constants/65dc44859cfeb115
new file mode 100644
index 0000000000000000000000000000000000000000..da440bdeb2bf678ad5259a4629f22414ae455a86
--- /dev/null
+++ b/.hypothesis/constants/65dc44859cfeb115
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\data.py
+# hypothesis_version: 6.155.1
+
+[-99.99, -0.999, 0.0, 1e-08, 0.04, 0.1, 0.35, 0.5, 1.0, 100.0, 365.25, -999, 100, 127, 200, 252, 360, 365, 3650, 5000, '%Y%m%d', '%Y-%m-%d', ',', '.', '.CSV', '.csv', '1950-01-03', '1971-02-05', '1974-12-31', '1977-01-03', '1980-01-01', '5factor', 'Adj Close', 'B', 'BAMLH0A0HYM2', 'CMA', 'Close', 'FRED_API_KEY', 'GC=F', 'GLD', 'HML', 'HYG', 'IEF', 'M', 'ME', 'MOM', 'Mkt-RF', 'NaN', 'Price', 'QQQ', 'RMW', 'SMB', 'SPY', 'TLT', '^GSPC', '^IRX', '^IXIC', '^TNX', '^TYX', '^VIX', 'all', 'beta_63d', 'bond_metadata', 'close_price', 'cma_21d', 'coerce', 'coupon', 'date', 'dead_tickers', 'equity', 'extended_history', 'face', 'freq', 'hml_21d', 'inner', 'is_yield', 'iv_skew', 'latin-1', 'linear', 'maturity', 'max_date', 'mkt_rf_21d', 'mom', 'mom_1m', 'mom_3m', 'mom_6m', 'momentum', 'nan', 'observations', 'overlap_days', 'proxy', 'proxy_mappings', 'proxy_start', 'put_call_ratio', 'ret', 'rev_5d', 'risk_free', 'rmw_21d', 'smb_21d', 'spread', 'sum', 'target', 'ticker', 'tickers', 'value', 'vol_21d', 'volatility', 'yield_pct']
\ No newline at end of file
diff --git a/.hypothesis/constants/6974b3725851c255 b/.hypothesis/constants/6974b3725851c255
new file mode 100644
index 0000000000000000000000000000000000000000..d6cf93403502abaeffc160b356236a424db0db7e
--- /dev/null
+++ b/.hypothesis/constants/6974b3725851c255
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\backtest.py
+# hypothesis_version: 6.155.1
+
+[-1e-05, 0.0, 1e-12, 1e-09, 1e-08, 1e-06, 1e-05, 0.0001, 0.0008, 0.001, 0.04, 0.2, 0.35, 0.5, 1.0, 3.0, 10.0, 100000.0, 50000000.0, 126, 252, 366, 1260, 5000, 25000000, '%Y-%m-%d', 'CASH', '_risk_factor', '_risk_input', 'cash_weight', 'dates', 'default_adv_proxy', 'ffill', 'hifo', 'hmm_regime', 'ignore', 'lt_days', 'monte_carlo_sims', 'monte_carlo_years', 'risk_free_rate', 'severity_score', 'tax_enabled', 'tax_rate_lt', 'tax_rate_st', 'transaction_cost']
\ No newline at end of file
diff --git a/.hypothesis/constants/6d75efa8482c6891 b/.hypothesis/constants/6d75efa8482c6891
new file mode 100644
index 0000000000000000000000000000000000000000..b062b1a1439478076933ac24ebcc8ad048d88543
--- /dev/null
+++ b/.hypothesis/constants/6d75efa8482c6891
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\config_schema.py
+# hypothesis_version: 6.155.1
+
+[-5.0, -1.0, 0.0, 0.001, 0.01, 0.015, 0.04, 0.05, 0.1, 0.2, 0.35, 0.4, 0.5, 0.95, 0.999, 1.0, 2.0, 2.5, 3.0, 5.0, 10.0, 15.0, 20.0, 25.0, 50.0, 100, 252, 365, 366, 756, 5000, 100000, '$', '.e2e_cache', '1950-01-03', '1971-02-05', '1974-12-31', '1977-01-03', 'AAPL', 'AGG', 'BTC-USD', 'Bonds & Rates', 'Commodities', 'Core Equities', 'Crypto', 'Crypto Proxies', 'DIA', 'Defensive/Value', 'EEM', 'EFA', 'ES', 'ETH-USD', 'ETHE', 'FBTC', 'GC=F', 'GLD', 'IBIT', 'IEF', 'IWM', 'International', 'JNJ', 'KO', 'MES', 'MSFT', 'MSTR', 'NVDA', 'PDBC', 'PG', 'QQQ', 'SHY', 'SLV', 'SPY', 'TLT', 'TSLA', 'Tech & Growth', 'USO', 'VEA', 'VWO', 'XLP', '^GSPC', '^IXIC', '^TNX', '^TYX', '^VIX', '_', '__pydantic_extra__', 'after', 'allow', 'beta_hedge', 'daily', 'extra', 'is_yield', 'overlap_days', 'proxy', 'proxy_start', 'spo']
\ No newline at end of file
diff --git a/.hypothesis/constants/6e12ddb577ad9aa8 b/.hypothesis/constants/6e12ddb577ad9aa8
new file mode 100644
index 0000000000000000000000000000000000000000..af289d5cbbb800392a9474a925d1ea952e3710ec
--- /dev/null
+++ b/.hypothesis/constants/6e12ddb577ad9aa8
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\database.py
+# hypothesis_version: 6.155.1
+
+[1.0, 3600, 10000, 'DATABASE_URL', '__main__', 'append', 'audit_log', 'daily_prices', 'daily_yields', 'date', 'finance_data.db', 'sqlite', 'stitch_metadata', 'ticker']
\ No newline at end of file
diff --git a/.hypothesis/constants/7023cfda0e7105f4 b/.hypothesis/constants/7023cfda0e7105f4
new file mode 100644
index 0000000000000000000000000000000000000000..c1ea7592a2bdb902c2a41957727beb2a414327b2
--- /dev/null
+++ b/.hypothesis/constants/7023cfda0e7105f4
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\report_builders\html_fixed_income.py
+# hypothesis_version: 6.155.1
+
+[0.0, 0.001, 0.01, 100, 'bond_metadata', 'coupon', 'modified_duration', 'portfolio_duration']
\ No newline at end of file
diff --git a/.hypothesis/constants/70aae1876cb6fd5d b/.hypothesis/constants/70aae1876cb6fd5d
new file mode 100644
index 0000000000000000000000000000000000000000..4c50ffb70b35102bef37808d1125c18464a78ab2
--- /dev/null
+++ b/.hypothesis/constants/70aae1876cb6fd5d
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\report_builders\html_risk.py
+# hypothesis_version: 6.155.1
+
+[-0.15, 0.0, 0.001, 0.5, 0.9, 0.95, 1.0, 1.15, 100.0, 100, '#3fb950', '#8b949e', '#e3b341', '#f85149', '', '
', 'CASH', 'Calmar Ratio', 'Downside Capture', 'Max Drawdown', 'Risk Contrib %', 'Sortino Ratio', 'Upside Capture', 'Weight %', 'XGBoost', 'alpha', 'backgroundColor', 'borderRadius', 'calmar', 'cvar_alpha', 'cvar_enabled', 'data', 'down_capture', 'factor_contributions', 'garch_ann_vol', 'garch_enabled', 'garch_info', 'hist_ann_vol', 'items', 'label', 'max_dd', 'name', 'rc_ds', 'rc_labels', 'rgba(88,166,255,0.4)', 'risk_contributions', 'sortino', 'total_return', 'up_capture', '≈ Normal', '▲ Elevated', '▼ Compressed']
\ No newline at end of file
diff --git a/.hypothesis/constants/7215f21bf9dc922d b/.hypothesis/constants/7215f21bf9dc922d
new file mode 100644
index 0000000000000000000000000000000000000000..14e742e677f680a4587da2cdd507566802322c24
--- /dev/null
+++ b/.hypothesis/constants/7215f21bf9dc922d
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\models.py
+# hypothesis_version: 6.155.1
+
+[-0.5, -0.02, 0.0, 1e-12, 1e-08, 0.0001, 0.001, 0.01, 0.015, 0.02, 0.03, 0.04, 0.045, 0.05, 0.06, 0.08, 0.1, 0.2, 0.25, 0.3, 0.5, 0.6, 0.7, 0.75, 0.8, 0.85, 0.94, 0.95, 0.99, 0.999, 1.0, 1.0001, 1.5, 2.0, 2.5, 5.0, 10.0, 100.0, 365.25, 1000.0, 10000.0, 100, 127, 252, 256, 1024, 3600, 5000, '1', 'AR', 'GARCH', 'HML', 'MOM', 'Mkt-RF', 'NaN in forecast', 'OMP_NUM_THREADS', 'POOLED_MODEL', 'SMB', 'Zero', 'alpha', 'alpha[1]', 'beta', 'beta[1]', 'const', 'cpu', 'cuda', 'garch_ann_vol', 'hist', 'hist_ann_vol', 'ignore', 'local linear trend', 'marchenko_pastur', 'market_caps', 'maturity', 'median', 'modified_duration', 'normal', 'off', 'origin', 'persistence', 'ret', 'scale', 'spot', 'target', 'wigner_semicircle']
\ No newline at end of file
diff --git a/.hypothesis/constants/78c20daa75db8512 b/.hypothesis/constants/78c20daa75db8512
new file mode 100644
index 0000000000000000000000000000000000000000..73d49a478a6351fff7f0b64d2d4a86eb25474edc
--- /dev/null
+++ b/.hypothesis/constants/78c20daa75db8512
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\cvxpy_engine.py
+# hypothesis_version: 6.155.1
+
+[-1.0, 0.0, 1e-08, 1e-06, 1e-05, 0.0001, 0.0005, 0.0008, 0.001, 0.03, 0.05, 0.07, 0.09, 0.1, 0.12, 0.15, 0.18, 0.2, 0.21, 0.24, 0.28, 0.3, 0.5, 0.8, 0.95, 0.99, 0.999, 1.0, 1.01, 1.5, 2.0, 3.0, 10.0, 50.0, 100.0, 1000.0, 100000, ':', 'Base', 'CASH', 'CDaR', 'CVaR', 'DW Nonneg', 'Drop Beta', 'Drop Duration', 'Drop Factors', 'Duration', 'Fully Invested', 'Gross Leverage Cap', 'HML', 'MAD', 'Market Impact SOCP', 'Max Loss', 'Mean-Variance', 'Relax Sector Caps', 'Remove Min Weights', 'Remove Turnover', 'SMB', 'Sector:', 'Sell Volume Tracking', 'Sell W Nonneg', 'Semi-Variance', 'Short W Nonneg', 'Unconstrained', 'Weights are None', 'Widen Beta', '_e2e_warm_start', '_risk_measure', 'asset', 'baseline_risk_factor', 'custom_constraints', 'cvar_alpha', 'cvar_enabled', 'cvar_lambda', 'details', 'direction', 'dual_value', 'eps_abs', 'eps_gap', 'eps_rel', 'factor_neutrality', 'garch_info', 'gross_leverage_cap', 'hmm_regime', 'ignore', 'l2_reg', 'limit', 'max', 'max_assets', 'max_duration', 'max_iter', 'min', 'min_duration', 'risk_budgeting', 'risk_free_rate', 'scale', 'sector_map', 'severity_score', 'short_borrow_cost', 'state_sequence', 'tc_volume_profile', 'transaction_cost', 'use_fast_ewm_cov', 'warm_start']
\ No newline at end of file
diff --git a/.hypothesis/constants/78d935f6ff3f443c b/.hypothesis/constants/78d935f6ff3f443c
new file mode 100644
index 0000000000000000000000000000000000000000..6c3d378304d23e9b693893d18aa9f9dbf157e4d8
--- /dev/null
+++ b/.hypothesis/constants/78d935f6ff3f443c
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\erc_engine.py
+# hypothesis_version: 6.155.1
+
+[0.0, 1e-06, 1e-05, 0.5, 5000]
\ No newline at end of file
diff --git a/.hypothesis/constants/791c68eadaaf14f7 b/.hypothesis/constants/791c68eadaaf14f7
new file mode 100644
index 0000000000000000000000000000000000000000..b13c9b59fc62eccad7950a956e0f63266794d54e
--- /dev/null
+++ b/.hypothesis/constants/791c68eadaaf14f7
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\constants.py
+# hypothesis_version: 6.155.1
+
+[0.0003, 0.0004, 0.0005, 0.0006, 0.0008, 0.0025, 0.05, 50000000.0, '\x1b[0m', '\x1b[1m', '\x1b[2m', '\x1b[35m', '\x1b[36m', '\x1b[4m', '\x1b[91m', '\x1b[92m', '\x1b[93m', '\x1b[94m', '\x1b[95m', '\x1b[96m', 'Bonds', 'Commodity', 'Crypto', 'Defensive', 'Index', 'International', 'Ir_yad', 'MASTER_KEY', 'Other', 'Tech', 'access_keys.json', 'output', 'portfolio_state.json', '—']
\ No newline at end of file
diff --git a/.hypothesis/constants/7d8bc6eaec69a36c b/.hypothesis/constants/7d8bc6eaec69a36c
new file mode 100644
index 0000000000000000000000000000000000000000..4f3cee5a7703b0384368de4be89d164742c36849
--- /dev/null
+++ b/.hypothesis/constants/7d8bc6eaec69a36c
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\core_types.py
+# hypothesis_version: 6.155.1
+
+[0.0, 1e-08, 1e-06, 0.001, 0.04, 0.1, 0.15, 0.2, 0.35, 0.4, 0.5, 0.95, 1.0, 1000000.0, 50000000.0, 252, 366, '$', 'CovarianceResult', 'ForecastResult', 'FuturesContract', 'FuturesOverlayResult', 'LotManager', 'ModelReturnForecast', 'OptimizationContext', 'OptimizationParams', 'OptimizationResult', 'PortfolioState', 'ReportData', 'SPY', 'TaxLot', 'ValidationResult', '^IRX', '^TNX', '^VIX', '_global_ewm_cov', '_risk_factor', '_stochastic', '_trading_periods', 'allocation_engine', 'allow_short', 'avg_cost', 'capital', 'current_weights_raw', 'equity', 'ff_enabled', 'fifo', 'hifo', 'lt_days', 'lt_first', 'model', 'overlay_enabled', 'purchase_date', 'rebalance_freq', 'risk', 'risk_free', 'shares', 'short_term_rate', 'spreads_enabled', 'tax_enabled', 'tax_rate_lt', 'tax_rate_st', 'tickers', 'volatility', 'volatility_target']
\ No newline at end of file
diff --git a/.hypothesis/constants/7e00f1b32d4ab78e b/.hypothesis/constants/7e00f1b32d4ab78e
new file mode 100644
index 0000000000000000000000000000000000000000..2c95175a94830fdfda3b665300fcc5c8ce002e7f
--- /dev/null
+++ b/.hypothesis/constants/7e00f1b32d4ab78e
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\config_schema.py
+# hypothesis_version: 6.155.1
+
+[-5.0, -1.0, 0.0, 0.001, 0.01, 0.015, 0.04, 0.05, 0.1, 0.2, 0.35, 0.4, 0.5, 0.95, 0.999, 1.0, 2.0, 2.5, 3.0, 5.0, 10.0, 15.0, 20.0, 25.0, 50.0, 100, 252, 365, 366, 756, 10000, 100000, '$', '.e2e_cache', '1950-01-03', '1971-02-05', '1974-12-31', '1977-01-03', 'AAPL', 'AGG', 'Bonds & Rates', 'Commodities', 'Core Equities', 'Crypto Proxies', 'DIA', 'Defensive/Value', 'EEM', 'EFA', 'ES', 'ETHE', 'FBTC', 'GC=F', 'GLD', 'IBIT', 'IEF', 'IWM', 'International', 'JNJ', 'KO', 'MES', 'MSFT', 'MSTR', 'NVDA', 'PDBC', 'PG', 'QQQ', 'SHY', 'SLV', 'SPY', 'TLT', 'TSLA', 'Tech & Growth', 'USO', 'VEA', 'VWO', 'XLP', '^GSPC', '^IXIC', '^TNX', '^TYX', '^VIX', '_', '__pydantic_extra__', 'after', 'allow', 'beta_hedge', 'daily', 'extra', 'is_yield', 'overlap_days', 'proxy', 'proxy_start', 'spo']
\ No newline at end of file
diff --git a/.hypothesis/constants/7f5ad2a7b2bc1975 b/.hypothesis/constants/7f5ad2a7b2bc1975
new file mode 100644
index 0000000000000000000000000000000000000000..0a4c056de2ca6fae31d8c092d8919b0620e05d4c
--- /dev/null
+++ b/.hypothesis/constants/7f5ad2a7b2bc1975
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\report_builders\html_risk.py
+# hypothesis_version: 6.155.1
+
+[0.0, 0.001, 0.9, 0.95, 1.0, 1.15, 100.0, 100, '#3fb950', '#e3b341', '#f85149', '', 'CASH', 'Risk Contrib %', 'Weight %', 'XGBoost', 'alpha', 'backgroundColor', 'borderRadius', 'cvar_alpha', 'cvar_enabled', 'data', 'factor_contributions', 'garch_ann_vol', 'garch_enabled', 'garch_info', 'hist_ann_vol', 'items', 'label', 'name', 'rc_ds', 'rc_labels', 'rgba(88,166,255,0.4)', 'risk_contributions', 'total_return', '≈ Normal', '▲ Elevated', '▼ Compressed']
\ No newline at end of file
diff --git a/.hypothesis/constants/810a0e66d41e4118 b/.hypothesis/constants/810a0e66d41e4118
new file mode 100644
index 0000000000000000000000000000000000000000..43751e5ffe04f501670f3a05914e74bfb2a89579
--- /dev/null
+++ b/.hypothesis/constants/810a0e66d41e4118
@@ -0,0 +1,4 @@
+# file: d:\portfolio engine\engine\alternative_data.py
+# hypothesis_version: 6.155.1
+
+[0.0, 2.0, 200, './channel/item', 'Authorization', 'fcf_yield', 'forwardPE', 'freeCashflow', 'ignore', 'impliedVolatility', 'implied_volatility', 'inputs', 'label', 'marketCap', 'negative', 'neutral', 'operatingMargins', 'operating_margin', 'pe_ratio', 'positive', 'score', 'sentiment', 'title', 'trailingPE']
\ No newline at end of file
diff --git a/.hypothesis/constants/81f6db9b0c1d67b6 b/.hypothesis/constants/81f6db9b0c1d67b6
new file mode 100644
index 0000000000000000000000000000000000000000..af61036c4696cf1478e6da3420a39a7c738abde2
--- /dev/null
+++ b/.hypothesis/constants/81f6db9b0c1d67b6
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\forecast_generation.py
+# hypothesis_version: 6.155.1
+
+[0.0, 0.005, 0.05, 0.15, 0.25, 0.3, 0.45, 0.5, 0.7, 1.0, 2.0, 365.25, 126, 252, '_trading_periods', 'alpha', 'anova_enabled', 'betas', 'bond_metadata', 'factor_exposures', 'feature_importances', 'garch_enabled', 'hmm_regime', 'incremental_cov', 'risk_free_rate', 'severity_score', 'use_fast_ewm_cov']
\ No newline at end of file
diff --git a/.hypothesis/constants/87b88c59b9eec06c b/.hypothesis/constants/87b88c59b9eec06c
new file mode 100644
index 0000000000000000000000000000000000000000..9d01cc62303177eb6377e87eb24bc504920f2f8d
--- /dev/null
+++ b/.hypothesis/constants/87b88c59b9eec06c
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\constants.py
+# hypothesis_version: 6.155.1
+
+[0.0003, 0.0004, 0.0005, 0.0006, 0.0008, 0.0025, 0.05, 50000000.0, '\x1b[0m', '\x1b[1m', '\x1b[2m', '\x1b[35m', '\x1b[36m', '\x1b[4m', '\x1b[91m', '\x1b[92m', '\x1b[93m', '\x1b[94m', '\x1b[95m', '\x1b[96m', 'Bonds', 'Commodity', 'Crypto', 'Defensive', 'Index', 'International', 'MASTER_KEY', 'Other', 'QUANT-ALPHA-99', 'Tech', 'access_keys.json', 'output', 'portfolio_state.json', '—']
\ No newline at end of file
diff --git a/.hypothesis/constants/888c7e34c57151a1 b/.hypothesis/constants/888c7e34c57151a1
new file mode 100644
index 0000000000000000000000000000000000000000..f5eb941999df2277012d809e48b93c219fd32949
--- /dev/null
+++ b/.hypothesis/constants/888c7e34c57151a1
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\cvxpy_engine.py
+# hypothesis_version: 6.155.1
+
+[-1.0, 0.0, 1e-08, 1e-06, 1e-05, 0.0001, 0.0005, 0.0008, 0.001, 0.03, 0.05, 0.07, 0.09, 0.1, 0.12, 0.15, 0.18, 0.2, 0.21, 0.24, 0.28, 0.3, 0.5, 0.8, 0.95, 0.99, 0.999, 1.0, 1.5, 2.0, 3.0, 10.0, 50.0, 100.0, 1000.0, 100000, ':', 'Base', 'CASH', 'CDaR', 'CVaR', 'DW Nonneg', 'Drop Beta', 'Drop Duration', 'Drop Factors', 'Duration', 'Fully Invested', 'Gross Leverage Cap', 'HML', 'MAD', 'Market Impact SOCP', 'Max Loss', 'Mean-Variance', 'Relax Sector Caps', 'Remove Min Weights', 'Remove Turnover', 'SMB', 'Sector:', 'Sell Volume Tracking', 'Sell W Nonneg', 'Semi-Variance', 'Short W Nonneg', 'Unconstrained', 'Weights are None', 'Widen Beta', '_e2e_warm_start', '_risk_measure', 'asset', 'baseline_risk_factor', 'custom_constraints', 'cvar_alpha', 'cvar_enabled', 'cvar_lambda', 'details', 'direction', 'dual_value', 'eps_abs', 'eps_gap', 'eps_rel', 'factor_neutrality', 'garch_info', 'gross_leverage_cap', 'hmm_regime', 'ignore', 'limit', 'max', 'max_assets', 'max_duration', 'max_iter', 'min', 'min_duration', 'risk_budgeting', 'risk_free_rate', 'scale', 'sector_map', 'severity_score', 'short_borrow_cost', 'state_sequence', 'tc_volume_profile', 'transaction_cost', 'use_fast_ewm_cov', 'warm_start']
\ No newline at end of file
diff --git a/.hypothesis/constants/8a45e3a273ed9528 b/.hypothesis/constants/8a45e3a273ed9528
new file mode 100644
index 0000000000000000000000000000000000000000..cd53f0d7d60ffcafa2270fea0fbbb5f231d03c9b
--- /dev/null
+++ b/.hypothesis/constants/8a45e3a273ed9528
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\report_html.py
+# hypothesis_version: 6.155.1
+
+['$', 'J', 'cov', 'cov_mat', 'curr', 'disable_whatif', 'exp_rets', 'jacobian', 'mu', 'n', 'report_template.html', 'rfr', 'rfr_raw', 'tickers', 'w', 'w_risky', 'whatif_html']
\ No newline at end of file
diff --git a/.hypothesis/constants/8be687cf189a35f4 b/.hypothesis/constants/8be687cf189a35f4
new file mode 100644
index 0000000000000000000000000000000000000000..e7a9b123861f8cf8877d23a891ca0d0306da4bcd
--- /dev/null
+++ b/.hypothesis/constants/8be687cf189a35f4
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\core_engine.py
+# hypothesis_version: 6.155.1
+
+[-0.3, 0.0, 0.0001, 0.0008, 0.001, 0.01, 0.015, 0.1, 0.15, 0.2, 0.3, 0.35, 0.5, 0.95, 1.0, 1.5, 2.0, 3.0, 5.0, 7.5, 10.0, 15.0, 25.0, 100000.0, 252, '%', '%Y-%m-%d', ',', ', ', 'AAPL', 'AGG', 'Bonds & Rates', 'CASH', 'Core Equities', 'DIA', 'GLD', 'IEF', 'IWM', 'MAE', 'MSFT', 'Model 1', 'NVDA', 'Naive Mean', 'None', 'Other', 'QQQ', 'RFR_PROXY', 'SHY', 'SPY', 'TLT', 'TSLA', 'Tech & Growth', 'VIX_PROXY', '_', '__main__', '_metadata', '_risk_factor', '_risk_input', '_stab_lambda', '_stability_spreads', '_use_saved_basis', 'adjusted_input', 'allocation_engine', 'avg_cost', 'bench_rets', 'beta', 'bt', 'capital', 'cfg_overrides', 'clear', 'cls', 'currency_symbol', 'current_weights_raw', 'cvar_alpha', 'cvar_enabled', 'disclaimer', 'dynamic_risk', 'eq_bench', 'exp_ret', 'exp_sr', 'exp_vol', 'expected_returns', 'export_excel', 'ff_betas', 'garch_enabled', 'gross_leverage_cap', 'hmm_regime', 'ignore', 'last_generated', 'last_updated', 'max_dd', 'mc', 'model', 'nt', 'original_input', 'prices', 'purchase_date', 'raw', 'returns_df', 'rfr_bench', 'risk_factor', 'risk_input', 'sector_map', 'shares', 'short_borrow_cost', 'single_asset_min', 'spread', 'target_weights', 'tax_enabled', 'tax_rate_lt', 'tax_rate_st', 'tickers', 'to_dict', 'universe_categories', 'utf-8', 'vix_val', 'vol_bench', 'volatility', 'w', 'winner', 'with_futures']
\ No newline at end of file
diff --git a/.hypothesis/constants/8e386a75c3c2cb4f b/.hypothesis/constants/8e386a75c3c2cb4f
new file mode 100644
index 0000000000000000000000000000000000000000..13f277fc0b85665d8e6a5e3ff7341b5ce7b9cdf2
--- /dev/null
+++ b/.hypothesis/constants/8e386a75c3c2cb4f
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\core_engine.py
+# hypothesis_version: 6.155.1
+
+[-0.3, 0.0, 0.0001, 0.0008, 0.001, 0.01, 0.015, 0.05, 0.1, 0.15, 0.2, 0.3, 0.35, 0.5, 0.95, 1.0, 1.5, 2.0, 3.0, 5.0, 7.5, 10.0, 15.0, 25.0, 100000.0, 100, 252, '%', '%Y-%m-%d', '%s', ',', ', ', '?', 'AAPL', 'AGG', 'Bonds & Rates', 'CASH', 'Core Equities', 'DIA', 'GLD', 'IEF', 'IWM', 'MAE', 'MSFT', 'Model 1', 'NVDA', 'Naive Mean', 'None', 'Other', 'QQQ', 'RFR_PROXY', 'SHY', 'SPY', 'TLT', 'TSLA', 'Tech & Growth', 'VIX_PROXY', '^IRX', '^TNX', '^VIX', '__main__', '_risk_factor', '_risk_input', '_stab_lambda', '_stability_spreads', '_trading_periods', '_use_saved_basis', 'adjusted_input', 'allocation_engine', 'avg_cost', 'bench_rets', 'benchmarks', 'beta', 'bt', 'capital', 'cfg_overrides', 'clear', 'close_price', 'cls', 'currency_symbol', 'current_weights_raw', 'cvar_alpha', 'cvar_enabled', 'daily', 'date', 'dynamic_risk', 'eq_bench', 'equity', 'exp_ret', 'exp_sr', 'exp_vol', 'expected_returns', 'export_excel', 'ff_betas', 'garch_enabled', 'gross_leverage_cap', 'hmm_regime', 'ignore', 'last', 'last_updated', 'max_dd', 'mc', 'model', 'monthly', 'nt', 'original_input', 'prices', 'purchase_date', 'raw', 'return_frequency', 'returns_df', 'rfr_bench', 'risk_factor', 'risk_free', 'risk_free_rate', 'risk_input', 'sector_map', 'shares', 'short_borrow_cost', 'single_asset_min', 'spread', 'sqlite', 'target_weights', 'tax_enabled', 'tax_rate_lt', 'tax_rate_st', 'ticker', 'tickers', 'universe_categories', 'utf-8', 'vix_val', 'vol_bench', 'volatility', 'w', 'winner', 'with_futures']
\ No newline at end of file
diff --git a/.hypothesis/constants/93a871599e1b3594 b/.hypothesis/constants/93a871599e1b3594
new file mode 100644
index 0000000000000000000000000000000000000000..2f1d343c155fa339f3783fb844b11e76bc787d7d
--- /dev/null
+++ b/.hypothesis/constants/93a871599e1b3594
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\utils\metrics.py
+# hypothesis_version: 6.155.1
+
+[0.0, 0.0001, 0.0008, 'CASH', 'gross_lev', 'ignore', 'long_e', 'port_duration', 'port_yield', 'short_e']
\ No newline at end of file
diff --git a/.hypothesis/constants/9425d689800ca213 b/.hypothesis/constants/9425d689800ca213
new file mode 100644
index 0000000000000000000000000000000000000000..2e0387314c13f86665de456a2698a31bc6f4c939
--- /dev/null
+++ b/.hypothesis/constants/9425d689800ca213
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\app.py
+# hypothesis_version: 6.155.1
+
+[-5.0, -1.0, 0.0, 0.1, 0.15, 0.3, 0.5, 1.0, 2.0, 3.0, 5.0, 7.5, 10.0, 15.0, 25.0, 100.0, 100000.0, 100, 200, 252, 300, 401, 404, 500, 1008, 3600, 8000, 23400, '*', '/', '/admin', '/api/admin/generate', '/api/admin/keys', '/api/admin/revoke', '/api/auth', '/api/chat', '/api/generate', '/api/market_ticker', '/api/ping', '/api/preview', '/api/trace/{task_id}', '/api/traces', '/health', '/main', '/report', '/static', '/ws', '0.0.0.0', '127.0.0.1', '2d', '5d', 'AI response empty.', 'Access Granted', 'Authorization', 'BACKEND_COMPLETE', 'BACKEND_START', 'BTC', 'BTC-USD', 'CASH', 'Cache-Control', 'Close', 'Content-Length', 'Content-Type', 'FATAL_ERROR', 'GC=F', 'GOLD', 'HF_TOKEN', 'Initializing...', 'Invalid Admin Key', 'Math engine finished', 'NASDAQ', 'Portfolio Engine API', 'Report generated.', 'Report not found', 'S&P 500', 'SPY', 'TASK_INIT', 'Task not found', 'Unauthorized', 'VIX', 'X-API-Key', '^GSPC', '^IXIC', '^VIX', '__main__', 'admin.html', 'allocation_engine', 'api_key', 'app:app', 'awake', 'capital', 'change', 'completed', 'custom_constraints', 'data', 'detail', 'efficient_frontier', 'error', 'garch_enabled', 'generated_text', 'healthy', 'index.html', 'inputs', 'key', 'keys', 'live_update', 'login.html', 'max_new_tokens', 'message', 'model', 'name', 'no-store', 'nosniff', 'parameters', 'pnl', 'price', 'prices', 'queued', 'rb', 'response', 'rets', 'return_full_text', 'risk_factor', 'risk_input', 'running', 'shares', 'single_asset_min', 'static', 'status', 'success', 'target_weights', 'task_id', 'tax_enabled', 'temperature', 'tickers', 'timestamp', 'trace', 'type', 'vols', 'weights', '═']
\ No newline at end of file
diff --git a/.hypothesis/constants/95c72cc7a493f4d5 b/.hypothesis/constants/95c72cc7a493f4d5
new file mode 100644
index 0000000000000000000000000000000000000000..e7a9b123861f8cf8877d23a891ca0d0306da4bcd
--- /dev/null
+++ b/.hypothesis/constants/95c72cc7a493f4d5
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\core_engine.py
+# hypothesis_version: 6.155.1
+
+[-0.3, 0.0, 0.0001, 0.0008, 0.001, 0.01, 0.015, 0.1, 0.15, 0.2, 0.3, 0.35, 0.5, 0.95, 1.0, 1.5, 2.0, 3.0, 5.0, 7.5, 10.0, 15.0, 25.0, 100000.0, 252, '%', '%Y-%m-%d', ',', ', ', 'AAPL', 'AGG', 'Bonds & Rates', 'CASH', 'Core Equities', 'DIA', 'GLD', 'IEF', 'IWM', 'MAE', 'MSFT', 'Model 1', 'NVDA', 'Naive Mean', 'None', 'Other', 'QQQ', 'RFR_PROXY', 'SHY', 'SPY', 'TLT', 'TSLA', 'Tech & Growth', 'VIX_PROXY', '_', '__main__', '_metadata', '_risk_factor', '_risk_input', '_stab_lambda', '_stability_spreads', '_use_saved_basis', 'adjusted_input', 'allocation_engine', 'avg_cost', 'bench_rets', 'beta', 'bt', 'capital', 'cfg_overrides', 'clear', 'cls', 'currency_symbol', 'current_weights_raw', 'cvar_alpha', 'cvar_enabled', 'disclaimer', 'dynamic_risk', 'eq_bench', 'exp_ret', 'exp_sr', 'exp_vol', 'expected_returns', 'export_excel', 'ff_betas', 'garch_enabled', 'gross_leverage_cap', 'hmm_regime', 'ignore', 'last_generated', 'last_updated', 'max_dd', 'mc', 'model', 'nt', 'original_input', 'prices', 'purchase_date', 'raw', 'returns_df', 'rfr_bench', 'risk_factor', 'risk_input', 'sector_map', 'shares', 'short_borrow_cost', 'single_asset_min', 'spread', 'target_weights', 'tax_enabled', 'tax_rate_lt', 'tax_rate_st', 'tickers', 'to_dict', 'universe_categories', 'utf-8', 'vix_val', 'vol_bench', 'volatility', 'w', 'winner', 'with_futures']
\ No newline at end of file
diff --git a/.hypothesis/constants/960c5e1eee884d7c b/.hypothesis/constants/960c5e1eee884d7c
new file mode 100644
index 0000000000000000000000000000000000000000..0ac8377d34d43fbe1da82adcbcdd0688febf2e74
--- /dev/null
+++ b/.hypothesis/constants/960c5e1eee884d7c
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\models.py
+# hypothesis_version: 6.155.1
+
+[-0.5, -0.02, 0.0, 1e-12, 1e-08, 0.0001, 0.001, 0.01, 0.015, 0.02, 0.03, 0.04, 0.045, 0.05, 0.06, 0.08, 0.1, 0.2, 0.25, 0.3, 0.5, 0.6, 0.7, 0.75, 0.8, 0.85, 0.9, 0.94, 0.95, 0.99, 0.999, 1.0, 1.0001, 1.5, 2.0, 2.5, 5.0, 10.0, 100.0, 365.25, 1000.0, 10000.0, 100, 127, 252, 256, 1024, 3600, 5000, '1', 'AR', 'GARCH', 'HML', 'MOM', 'Mkt-RF', 'NaN in forecast', 'OMP_NUM_THREADS', 'SMB', 'Zero', 'alpha', 'alpha[1]', 'beta', 'beta[1]', 'const', 'garch_ann_vol', 'hist', 'hist_ann_vol', 'ignore', 'local linear trend', 'marchenko_pastur', 'market_caps', 'maturity', 'median', 'modified_duration', 'normal', 'off', 'origin', 'persistence', 'ret', 'scale', 'spot', 'target', 'wigner_semicircle']
\ No newline at end of file
diff --git a/.hypothesis/constants/98010ca630e0e2fb b/.hypothesis/constants/98010ca630e0e2fb
new file mode 100644
index 0000000000000000000000000000000000000000..2f265e6f4e0874f14617a1a90974e333c9e3df02
--- /dev/null
+++ b/.hypothesis/constants/98010ca630e0e2fb
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\report_builders\html_tax.py
+# hypothesis_version: 6.155.1
+
+[0.0, 0.25, 10000, '#3fb950', '#e3b341', '#f85149', 'pre_tax_rets', 'rate', 'tax_enabled', 'tax_if_sold', 'unreal_gain']
\ No newline at end of file
diff --git a/.hypothesis/constants/985479a76e1cda16 b/.hypothesis/constants/985479a76e1cda16
new file mode 100644
index 0000000000000000000000000000000000000000..029b54573de0dcf9a262096f2cbfcf1a38eb653d
--- /dev/null
+++ b/.hypothesis/constants/985479a76e1cda16
@@ -0,0 +1,4 @@
+# file: d:\portfolio engine\engine\erc_engine.py
+# hypothesis_version: 6.155.1
+
+[0.0, 1e-08, 1e-06, 1e-05, 0.5, 5000]
\ No newline at end of file
diff --git a/.hypothesis/constants/98b6f1c6fc5f80d2 b/.hypothesis/constants/98b6f1c6fc5f80d2
new file mode 100644
index 0000000000000000000000000000000000000000..af289d5cbbb800392a9474a925d1ea952e3710ec
--- /dev/null
+++ b/.hypothesis/constants/98b6f1c6fc5f80d2
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\database.py
+# hypothesis_version: 6.155.1
+
+[1.0, 3600, 10000, 'DATABASE_URL', '__main__', 'append', 'audit_log', 'daily_prices', 'daily_yields', 'date', 'finance_data.db', 'sqlite', 'stitch_metadata', 'ticker']
\ No newline at end of file
diff --git a/.hypothesis/constants/98c46cc1ff601265 b/.hypothesis/constants/98c46cc1ff601265
new file mode 100644
index 0000000000000000000000000000000000000000..fe48ec10fe42dd329f0a1ec3ebd2e39e7838185a
--- /dev/null
+++ b/.hypothesis/constants/98c46cc1ff601265
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\logger.py
+# hypothesis_version: 6.155.1
+
+[1024, 'cmdstanpy', 'engine.log', 'exc_info', 'funcName', 'level', 'lineNo', 'matplotlib', 'message', 'module', 'name', 'portfolio_engine', 'timestamp', 'utf-8', 'yfinance']
\ No newline at end of file
diff --git a/.hypothesis/constants/9a25d031123a9114 b/.hypothesis/constants/9a25d031123a9114
new file mode 100644
index 0000000000000000000000000000000000000000..da440bdeb2bf678ad5259a4629f22414ae455a86
--- /dev/null
+++ b/.hypothesis/constants/9a25d031123a9114
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\data.py
+# hypothesis_version: 6.155.1
+
+[-99.99, -0.999, 0.0, 1e-08, 0.04, 0.1, 0.35, 0.5, 1.0, 100.0, 365.25, -999, 100, 127, 200, 252, 360, 365, 3650, 5000, '%Y%m%d', '%Y-%m-%d', ',', '.', '.CSV', '.csv', '1950-01-03', '1971-02-05', '1974-12-31', '1977-01-03', '1980-01-01', '5factor', 'Adj Close', 'B', 'BAMLH0A0HYM2', 'CMA', 'Close', 'FRED_API_KEY', 'GC=F', 'GLD', 'HML', 'HYG', 'IEF', 'M', 'ME', 'MOM', 'Mkt-RF', 'NaN', 'Price', 'QQQ', 'RMW', 'SMB', 'SPY', 'TLT', '^GSPC', '^IRX', '^IXIC', '^TNX', '^TYX', '^VIX', 'all', 'beta_63d', 'bond_metadata', 'close_price', 'cma_21d', 'coerce', 'coupon', 'date', 'dead_tickers', 'equity', 'extended_history', 'face', 'freq', 'hml_21d', 'inner', 'is_yield', 'iv_skew', 'latin-1', 'linear', 'maturity', 'max_date', 'mkt_rf_21d', 'mom', 'mom_1m', 'mom_3m', 'mom_6m', 'momentum', 'nan', 'observations', 'overlap_days', 'proxy', 'proxy_mappings', 'proxy_start', 'put_call_ratio', 'ret', 'rev_5d', 'risk_free', 'rmw_21d', 'smb_21d', 'spread', 'sum', 'target', 'ticker', 'tickers', 'value', 'vol_21d', 'volatility', 'yield_pct']
\ No newline at end of file
diff --git a/.hypothesis/constants/9ac4604c0c389ad0 b/.hypothesis/constants/9ac4604c0c389ad0
new file mode 100644
index 0000000000000000000000000000000000000000..da440bdeb2bf678ad5259a4629f22414ae455a86
--- /dev/null
+++ b/.hypothesis/constants/9ac4604c0c389ad0
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\data.py
+# hypothesis_version: 6.155.1
+
+[-99.99, -0.999, 0.0, 1e-08, 0.04, 0.1, 0.35, 0.5, 1.0, 100.0, 365.25, -999, 100, 127, 200, 252, 360, 365, 3650, 5000, '%Y%m%d', '%Y-%m-%d', ',', '.', '.CSV', '.csv', '1950-01-03', '1971-02-05', '1974-12-31', '1977-01-03', '1980-01-01', '5factor', 'Adj Close', 'B', 'BAMLH0A0HYM2', 'CMA', 'Close', 'FRED_API_KEY', 'GC=F', 'GLD', 'HML', 'HYG', 'IEF', 'M', 'ME', 'MOM', 'Mkt-RF', 'NaN', 'Price', 'QQQ', 'RMW', 'SMB', 'SPY', 'TLT', '^GSPC', '^IRX', '^IXIC', '^TNX', '^TYX', '^VIX', 'all', 'beta_63d', 'bond_metadata', 'close_price', 'cma_21d', 'coerce', 'coupon', 'date', 'dead_tickers', 'equity', 'extended_history', 'face', 'freq', 'hml_21d', 'inner', 'is_yield', 'iv_skew', 'latin-1', 'linear', 'maturity', 'max_date', 'mkt_rf_21d', 'mom', 'mom_1m', 'mom_3m', 'mom_6m', 'momentum', 'nan', 'observations', 'overlap_days', 'proxy', 'proxy_mappings', 'proxy_start', 'put_call_ratio', 'ret', 'rev_5d', 'risk_free', 'rmw_21d', 'smb_21d', 'spread', 'sum', 'target', 'ticker', 'tickers', 'value', 'vol_21d', 'volatility', 'yield_pct']
\ No newline at end of file
diff --git a/.hypothesis/constants/9dee29a5fc36bc83 b/.hypothesis/constants/9dee29a5fc36bc83
new file mode 100644
index 0000000000000000000000000000000000000000..5bdabdccbad6f9af339fa5abbd8332baeb843e93
--- /dev/null
+++ b/.hypothesis/constants/9dee29a5fc36bc83
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\math_utils.py
+# hypothesis_version: 6.155.1
+
+[0.0, 1e-08, 0.05, 1.645, 'columns', 'values']
\ No newline at end of file
diff --git a/.hypothesis/constants/9e8b68d6b3b08123 b/.hypothesis/constants/9e8b68d6b3b08123
new file mode 100644
index 0000000000000000000000000000000000000000..5a2354469d835627eb49b9c41de3ecae8703e836
--- /dev/null
+++ b/.hypothesis/constants/9e8b68d6b3b08123
@@ -0,0 +1,4 @@
+# file: d:\portfolio engine\engine\report_builders\html_diagnostics.py
+# hypothesis_version: 6.155.1
+
+['#d29922', '#f85149', 'Critical', 'Universe too small', 'Warning', 'display_constraints', 'relaxation_log']
\ No newline at end of file
diff --git a/.hypothesis/constants/a0b70ed05e007f84 b/.hypothesis/constants/a0b70ed05e007f84
new file mode 100644
index 0000000000000000000000000000000000000000..69474f356573ec32d76b0ed93bea05b2104770ab
--- /dev/null
+++ b/.hypothesis/constants/a0b70ed05e007f84
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\config_io.py
+# hypothesis_version: 6.155.1
+
+['&', '/', '_', 'constraints.json', 'r', 'utf-8', 'w']
\ No newline at end of file
diff --git a/.hypothesis/constants/a21e11b96d402bd2 b/.hypothesis/constants/a21e11b96d402bd2
new file mode 100644
index 0000000000000000000000000000000000000000..da440bdeb2bf678ad5259a4629f22414ae455a86
--- /dev/null
+++ b/.hypothesis/constants/a21e11b96d402bd2
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\data.py
+# hypothesis_version: 6.155.1
+
+[-99.99, -0.999, 0.0, 1e-08, 0.04, 0.1, 0.35, 0.5, 1.0, 100.0, 365.25, -999, 100, 127, 200, 252, 360, 365, 3650, 5000, '%Y%m%d', '%Y-%m-%d', ',', '.', '.CSV', '.csv', '1950-01-03', '1971-02-05', '1974-12-31', '1977-01-03', '1980-01-01', '5factor', 'Adj Close', 'B', 'BAMLH0A0HYM2', 'CMA', 'Close', 'FRED_API_KEY', 'GC=F', 'GLD', 'HML', 'HYG', 'IEF', 'M', 'ME', 'MOM', 'Mkt-RF', 'NaN', 'Price', 'QQQ', 'RMW', 'SMB', 'SPY', 'TLT', '^GSPC', '^IRX', '^IXIC', '^TNX', '^TYX', '^VIX', 'all', 'beta_63d', 'bond_metadata', 'close_price', 'cma_21d', 'coerce', 'coupon', 'date', 'dead_tickers', 'equity', 'extended_history', 'face', 'freq', 'hml_21d', 'inner', 'is_yield', 'iv_skew', 'latin-1', 'linear', 'maturity', 'max_date', 'mkt_rf_21d', 'mom', 'mom_1m', 'mom_3m', 'mom_6m', 'momentum', 'nan', 'observations', 'overlap_days', 'proxy', 'proxy_mappings', 'proxy_start', 'put_call_ratio', 'ret', 'rev_5d', 'risk_free', 'rmw_21d', 'smb_21d', 'spread', 'sum', 'target', 'ticker', 'tickers', 'value', 'vol_21d', 'volatility', 'yield_pct']
\ No newline at end of file
diff --git a/.hypothesis/constants/a2c0efa5cdec9eec b/.hypothesis/constants/a2c0efa5cdec9eec
new file mode 100644
index 0000000000000000000000000000000000000000..0ac8377d34d43fbe1da82adcbcdd0688febf2e74
--- /dev/null
+++ b/.hypothesis/constants/a2c0efa5cdec9eec
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\models.py
+# hypothesis_version: 6.155.1
+
+[-0.5, -0.02, 0.0, 1e-12, 1e-08, 0.0001, 0.001, 0.01, 0.015, 0.02, 0.03, 0.04, 0.045, 0.05, 0.06, 0.08, 0.1, 0.2, 0.25, 0.3, 0.5, 0.6, 0.7, 0.75, 0.8, 0.85, 0.9, 0.94, 0.95, 0.99, 0.999, 1.0, 1.0001, 1.5, 2.0, 2.5, 5.0, 10.0, 100.0, 365.25, 1000.0, 10000.0, 100, 127, 252, 256, 1024, 3600, 5000, '1', 'AR', 'GARCH', 'HML', 'MOM', 'Mkt-RF', 'NaN in forecast', 'OMP_NUM_THREADS', 'SMB', 'Zero', 'alpha', 'alpha[1]', 'beta', 'beta[1]', 'const', 'garch_ann_vol', 'hist', 'hist_ann_vol', 'ignore', 'local linear trend', 'marchenko_pastur', 'market_caps', 'maturity', 'median', 'modified_duration', 'normal', 'off', 'origin', 'persistence', 'ret', 'scale', 'spot', 'target', 'wigner_semicircle']
\ No newline at end of file
diff --git a/.hypothesis/constants/a418dd67a9b35a0d b/.hypothesis/constants/a418dd67a9b35a0d
new file mode 100644
index 0000000000000000000000000000000000000000..cf5d6ea250c422f420683154ab444042467a095f
--- /dev/null
+++ b/.hypothesis/constants/a418dd67a9b35a0d
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\validation.py
+# hypothesis_version: 6.155.1
+
+[0.0, 1e-08, 0.05, 0.1, 0.5, 0.5772156649, 0.95, 1.0, 252, 'Inconclusive', 'MAE', 'MSE', 'Model', 'Model 1', 'Model 2', 'RMT NOT BENEFICIAL', 'USE RMT', 'adjusted_benchmark', 'after', 'before', 'benchmark', 'diagnostic', 'hit_rate_actual', 'hit_rate_target', 'independence', 'num_trials', 'obs_sharpe', 'observed_sharpe', 'overall_pass', 'p_value', 'pass', 'prob', 'psr', 'psr_stat', 'recommendation', 'rmt_successful', 'significant', 'stat', 'winner']
\ No newline at end of file
diff --git a/.hypothesis/constants/a520f2435bc0e858 b/.hypothesis/constants/a520f2435bc0e858
new file mode 100644
index 0000000000000000000000000000000000000000..73b6fbb574d335b980f4f8802204ad3827f633e9
--- /dev/null
+++ b/.hypothesis/constants/a520f2435bc0e858
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\cvxpy_engine.py
+# hypothesis_version: 6.155.1
+
+[-1.0, 0.0, 1e-08, 1e-06, 1e-05, 0.0001, 0.0005, 0.0008, 0.001, 0.03, 0.05, 0.07, 0.09, 0.1, 0.12, 0.15, 0.18, 0.2, 0.21, 0.24, 0.28, 0.3, 0.5, 0.8, 0.95, 0.99, 0.999, 1.0, 1.5, 2.0, 3.0, 10.0, 50.0, 100.0, 100000, ':', 'Base', 'CASH', 'CDaR', 'CVaR', 'DW Nonneg', 'Drop Beta', 'Drop Duration', 'Drop Factors', 'Duration', 'Fully Invested', 'Gross Leverage Cap', 'HML', 'MAD', 'Market Impact SOCP', 'Max Loss', 'Mean-Variance', 'Relax Sector Caps', 'Remove Min Weights', 'Remove Turnover', 'SMB', 'Sector:', 'Sell Volume Tracking', 'Sell W Nonneg', 'Semi-Variance', 'Short W Nonneg', 'Unconstrained', 'Weights are None', 'Widen Beta', '_e2e_warm_start', '_risk_measure', 'asset', 'baseline_risk_factor', 'custom_constraints', 'cvar_alpha', 'cvar_enabled', 'cvar_lambda', 'details', 'direction', 'dual_value', 'eps_abs', 'eps_gap', 'eps_rel', 'factor_neutrality', 'garch_info', 'gross_leverage_cap', 'hmm_regime', 'ignore', 'limit', 'max', 'max_assets', 'max_duration', 'max_iter', 'min', 'min_duration', 'risk_budgeting', 'risk_free_rate', 'scale', 'sector_map', 'severity_score', 'short_borrow_cost', 'state_sequence', 'tc_volume_profile', 'transaction_cost', 'use_fast_ewm_cov', 'warm_start']
\ No newline at end of file
diff --git a/.hypothesis/constants/a603ab90ed9e7e01 b/.hypothesis/constants/a603ab90ed9e7e01
new file mode 100644
index 0000000000000000000000000000000000000000..ffb53dd2da146926e60d1a7f3ba5fc23663deb24
--- /dev/null
+++ b/.hypothesis/constants/a603ab90ed9e7e01
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\report_builders\html_performance.py
+# hypothesis_version: 6.155.1
+
+[0.0, 1e-05, 0.1, '', 'ann_ret', 'green', 'red', 'total_ret']
\ No newline at end of file
diff --git a/.hypothesis/constants/aa0cc05008cfc434 b/.hypothesis/constants/aa0cc05008cfc434
new file mode 100644
index 0000000000000000000000000000000000000000..33d5731d5f982847b3ca9e28e92953c87b99d77b
--- /dev/null
+++ b/.hypothesis/constants/aa0cc05008cfc434
@@ -0,0 +1,4 @@
+# file: d:\portfolio engine\engine\report_html.py
+# hypothesis_version: 6.155.1
+
+['$', 'J', 'cov', 'cov_mat', 'curr', 'disable_whatif', 'display_constraints', 'exp_rets', 'jacobian', 'model_info', 'mu', 'n', 'report_template.html', 'rfr', 'rfr_raw', 'tickers', 'w', 'w_risky', 'whatif_html']
\ No newline at end of file
diff --git a/.hypothesis/constants/aada496c9ce6447a b/.hypothesis/constants/aada496c9ce6447a
new file mode 100644
index 0000000000000000000000000000000000000000..6fd9a2b7fc8d707c19ab8aa82b171191862b99ef
--- /dev/null
+++ b/.hypothesis/constants/aada496c9ce6447a
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\regime_detection.py
+# hypothesis_version: 6.155.1
+
+[0.0, 1e-08, 1e-06, 0.4, 0.6, 0.85, 1.0, 1.5, 2.0, 5.0, 7.5, 13.0, 25.0, 35.0, 100.0, 10000.0, 100, 120, 126, 252, 1008, 'FIGARCH', 'GARCH', 'Normal / Chop', 'Unknown', 'Zero', 'all', 'avg_correlation', 'current_regime', 'd', 'details', 'diag', 'ignore', 'is_high_corr', 'is_high_vol', 'is_long_memory_crash', 'latest_corr_matrix', 'off', 'ordered_vols', 'regime_vols', 'severity_score', 'state_sequence', 'transition_matrix']
\ No newline at end of file
diff --git a/.hypothesis/constants/ab1842e32a59343c b/.hypothesis/constants/ab1842e32a59343c
new file mode 100644
index 0000000000000000000000000000000000000000..a1d8d74db7649c12ebe0f3769bb561bd6498731e
--- /dev/null
+++ b/.hypothesis/constants/ab1842e32a59343c
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\constraints.py
+# hypothesis_version: 6.155.1
+
+[0.0, 1e-08, 0.02, 0.95, 0.99, 0.999, 1.0, 3.0, 100.0, 'Other', 'hmm_regime', 'is_high_vol', '─']
\ No newline at end of file
diff --git a/.hypothesis/constants/abd6482b24b9ab15 b/.hypothesis/constants/abd6482b24b9ab15
new file mode 100644
index 0000000000000000000000000000000000000000..9f51e1cd38c2c8855a101df4c0c4a12727fdd356
--- /dev/null
+++ b/.hypothesis/constants/abd6482b24b9ab15
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\config_schema.py
+# hypothesis_version: 6.155.1
+
+[-5.0, -1.0, 0.0, 0.001, 0.01, 0.015, 0.04, 0.05, 0.1, 0.2, 0.35, 0.4, 0.5, 0.95, 0.999, 1.0, 2.0, 2.5, 3.0, 5.0, 10.0, 20.0, 25.0, 50.0, 100, 252, 365, 366, 756, 5000, 100000, '$', '.e2e_cache', '1950-01-03', '1971-02-05', '1974-12-31', '1977-01-03', 'AAPL', 'AGG', 'Bonds & Rates', 'Commodities', 'Core Equities', 'Crypto Proxies', 'DIA', 'Defensive/Value', 'EEM', 'EFA', 'ES', 'ETHE', 'FBTC', 'GC=F', 'GLD', 'IBIT', 'IEF', 'IWM', 'International', 'JNJ', 'KO', 'MES', 'MSFT', 'MSTR', 'NVDA', 'PDBC', 'PG', 'QQQ', 'SHY', 'SLV', 'SPY', 'TLT', 'TSLA', 'Tech & Growth', 'USO', 'VEA', 'VWO', 'XLP', '^GSPC', '^IXIC', '^TNX', '^TYX', '^VIX', '_', '__pydantic_extra__', 'after', 'allow', 'beta_hedge', 'daily', 'extra', 'is_yield', 'overlap_days', 'proxy', 'proxy_start', 'spo']
\ No newline at end of file
diff --git a/.hypothesis/constants/abf4fefb8a0d7bac b/.hypothesis/constants/abf4fefb8a0d7bac
new file mode 100644
index 0000000000000000000000000000000000000000..6613e096e53b5caec553a90ad130fb30f67feeca
--- /dev/null
+++ b/.hypothesis/constants/abf4fefb8a0d7bac
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\alternative_data.py
+# hypothesis_version: 6.155.1
+
+[0.0, 2.0, 200, './channel/item', 'Authorization', 'fcf_yield', 'forwardPE', 'freeCashflow', 'ignore', 'impliedVolatility', 'implied_volatility', 'inputs', 'label', 'marketCap', 'negative', 'neutral', 'operatingMargins', 'operating_margin', 'pe_ratio', 'positive', 'score', 'sentiment', 'title', 'trailingPE']
\ No newline at end of file
diff --git a/.hypothesis/constants/b01309a7450ca14c b/.hypothesis/constants/b01309a7450ca14c
new file mode 100644
index 0000000000000000000000000000000000000000..db0e7302a6c7e15b0ad7e2e65f9e1c67d7221861
--- /dev/null
+++ b/.hypothesis/constants/b01309a7450ca14c
@@ -0,0 +1,4 @@
+# file: d:\portfolio engine\engine\analytics.py
+# hypothesis_version: 6.155.1
+
+[-0.55, -0.33, -0.25, -0.2, -0.15, -0.1, -0.04, -0.015, -0.01, 0.0, 1e-06, 0.0001, 0.0008, 0.001, 0.01, 0.015, 0.04, 0.1, 0.25, 0.4, 0.95, 1.0, 2.0, 20.0, 252.0, 50000000.0, -200, 100, 200, 252, ' & ', 'BEAR', 'BULL', 'CASH', 'CHOP', 'No Shock', 'SPY', 'UNKNOWN', '^IRX', '^TNX', '^VIX', 'allow_short', 'ann_ret', 'ann_rets', 'ann_vol', 'benchmarks', 'calmar', 'curve_inverted', 'cvar_95', 'dd_days', 'default_adv_proxy', 'equity', 'friction_paid', 'friction_rate', 'gain_fractions', 'ignore', 'impact', 'impact_paid', 'is_historical', 'jacobian', 'max', 'max_dd', 'max_dd_date', 'min', 'name', 'optimal', 'optimizer_failures', 'rate_shift', 'report', 'risk_free', 'rolling_sharpe', 'scenario', 'sharpe', 'short_term_rate', 'sortino', 'spread', 'spy_drop', 'spy_trend', 'tax_enabled', 'tax_paid', 'tax_rates', 'tc_volume_profile', 'tickers', 'tnx_val', 'total_ret', 'transaction_cost', 'trigger', 'vix_high', 'vix_val', 'volatility']
\ No newline at end of file
diff --git a/.hypothesis/constants/b17c8500fd8ccae2 b/.hypothesis/constants/b17c8500fd8ccae2
new file mode 100644
index 0000000000000000000000000000000000000000..630214de78eaf43bec6c714a9e962a144c6b80a9
--- /dev/null
+++ b/.hypothesis/constants/b17c8500fd8ccae2
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\hrp_engine.py
+# hypothesis_version: 6.155.1
+
+[-1.0, 0.0, 1e-08, 0.5, 0.9, 1.0, 2.0, 2.5, 'ward']
\ No newline at end of file
diff --git a/.hypothesis/constants/b2823054db4f0e80 b/.hypothesis/constants/b2823054db4f0e80
new file mode 100644
index 0000000000000000000000000000000000000000..0cc0fc66ab94e50d50ea4a20d4c9928f336b34e3
--- /dev/null
+++ b/.hypothesis/constants/b2823054db4f0e80
@@ -0,0 +1,4 @@
+# file: d:\portfolio engine\engine\validation.py
+# hypothesis_version: 6.155.1
+
+[0.0, 1e-08, 0.05, 0.1, 0.5, 0.5772156649, 0.95, 1.0, 252, 'Inconclusive', 'MAE', 'MSE', 'Model', 'Model 1', 'Model 2', 'RMT NOT BENEFICIAL', 'USE RMT', 'adjusted_benchmark', 'after', 'before', 'benchmark', 'diagnostic', 'hit_rate_actual', 'hit_rate_target', 'independence', 'num_trials', 'obs_sharpe', 'observed_sharpe', 'overall_pass', 'p_value', 'pass', 'prob', 'psr', 'psr_stat', 'recommendation', 'rmt_successful', 'significant', 'stat', 'winner']
\ No newline at end of file
diff --git a/.hypothesis/constants/b3061e001b29c5ed b/.hypothesis/constants/b3061e001b29c5ed
new file mode 100644
index 0000000000000000000000000000000000000000..0e7da072a9b5471e4e60330b462b75c3da65d25e
--- /dev/null
+++ b/.hypothesis/constants/b3061e001b29c5ed
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\exports.py
+# hypothesis_version: 6.155.1
+
+[0.0, 0.0008, 0.001, 1.0, 100, 10000, '#D7E4BC', 'Alloc_$', 'Ann_Vol_%', 'Beta', 'CASH', 'Component_CVaR_%', 'Direction', 'EntryDrag_%', 'Exp_Return_%', 'Factor', 'Factor Exposures', 'HalfSpread_bp', 'LONG', 'Marginal_VaR_%', 'Portfolio_Exposure', 'Price', 'SHORT', 'Shares', 'Tax_If_Sold_$', 'Ticker', 'Unrealised_Gain_$', 'Weight_%', 'Weights', 'bold', 'border', 'fg_color', 'portfolio_report.pdf', 'tax_if_sold', 'text_wrap', 'top', 'transaction_cost', 'unreal_gain', 'valign', 'wkhtmltopdf', 'xlsxwriter']
\ No newline at end of file
diff --git a/.hypothesis/constants/b33538a36ff89b13 b/.hypothesis/constants/b33538a36ff89b13
new file mode 100644
index 0000000000000000000000000000000000000000..ee0fe77d5229ce696bb0b5516808538ec09ea648
--- /dev/null
+++ b/.hypothesis/constants/b33538a36ff89b13
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\report_builders\html_tables.py
+# hypothesis_version: 6.155.1
+
+[0.0, 0.0004, 0.0008, 0.001, 0.004, 0.005, 1.0, 100, '#3fb950', '#e3b341', '#f85149', 'CASH']
\ No newline at end of file
diff --git a/.hypothesis/constants/b3fe9c1a0992a42c b/.hypothesis/constants/b3fe9c1a0992a42c
new file mode 100644
index 0000000000000000000000000000000000000000..14e742e677f680a4587da2cdd507566802322c24
--- /dev/null
+++ b/.hypothesis/constants/b3fe9c1a0992a42c
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\models.py
+# hypothesis_version: 6.155.1
+
+[-0.5, -0.02, 0.0, 1e-12, 1e-08, 0.0001, 0.001, 0.01, 0.015, 0.02, 0.03, 0.04, 0.045, 0.05, 0.06, 0.08, 0.1, 0.2, 0.25, 0.3, 0.5, 0.6, 0.7, 0.75, 0.8, 0.85, 0.94, 0.95, 0.99, 0.999, 1.0, 1.0001, 1.5, 2.0, 2.5, 5.0, 10.0, 100.0, 365.25, 1000.0, 10000.0, 100, 127, 252, 256, 1024, 3600, 5000, '1', 'AR', 'GARCH', 'HML', 'MOM', 'Mkt-RF', 'NaN in forecast', 'OMP_NUM_THREADS', 'POOLED_MODEL', 'SMB', 'Zero', 'alpha', 'alpha[1]', 'beta', 'beta[1]', 'const', 'cpu', 'cuda', 'garch_ann_vol', 'hist', 'hist_ann_vol', 'ignore', 'local linear trend', 'marchenko_pastur', 'market_caps', 'maturity', 'median', 'modified_duration', 'normal', 'off', 'origin', 'persistence', 'ret', 'scale', 'spot', 'target', 'wigner_semicircle']
\ No newline at end of file
diff --git a/.hypothesis/constants/b47691ddc3f5f084 b/.hypothesis/constants/b47691ddc3f5f084
new file mode 100644
index 0000000000000000000000000000000000000000..792fcc75fb34f452b5d5ca20965e91fc42cb6db4
--- /dev/null
+++ b/.hypothesis/constants/b47691ddc3f5f084
@@ -0,0 +1,4 @@
+# file: d:\portfolio engine\engine\overlay_analytics.py
+# hypothesis_version: 6.155.1
+
+[0.0, 1.0, 252, 'Daily_Futures_PnL', 'Equity_NAV', 'Futures_PnL', 'Margin_Buffer', 'Margin_Call', 'Total_NAV', 'Total_Return', 'hybrid_ann_return', 'hybrid_ann_vol', 'hybrid_cum_return', 'hybrid_max_drawdown', 'hybrid_sharpe']
\ No newline at end of file
diff --git a/.hypothesis/constants/b62c719f59a5809c b/.hypothesis/constants/b62c719f59a5809c
new file mode 100644
index 0000000000000000000000000000000000000000..1d3852561eb0d5e8fe112e94df6a9988bce08ecc
--- /dev/null
+++ b/.hypothesis/constants/b62c719f59a5809c
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\__init__.py
+# hypothesis_version: 6.155.1
+
+['CovarianceResult', 'ForecastResult', 'LotManager', 'OptimizationResult', 'PortfolioState', 'build_and_optimize', 'load_config', 'solver']
\ No newline at end of file
diff --git a/.hypothesis/constants/b7bb0613c172a39a b/.hypothesis/constants/b7bb0613c172a39a
new file mode 100644
index 0000000000000000000000000000000000000000..537e08e66b4481c20d5b9d06742e6e0e41cb8c28
--- /dev/null
+++ b/.hypothesis/constants/b7bb0613c172a39a
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\cvxpy_engine.py
+# hypothesis_version: 6.155.1
+
+[-1.0, 0.0, 1e-08, 1e-06, 1e-05, 0.0001, 0.0005, 0.0008, 0.001, 0.03, 0.05, 0.07, 0.09, 0.1, 0.12, 0.15, 0.18, 0.2, 0.21, 0.24, 0.28, 0.3, 0.5, 0.8, 0.95, 0.99, 0.999, 1.0, 1.5, 2.0, 3.0, 10.0, 50.0, 100.0, 100000, 'Base', 'CASH', 'CDaR', 'CVaR', 'DW Nonneg', 'Drop Beta', 'Drop Duration', 'Drop Factors', 'Duration', 'Fully Invested', 'Gross Leverage Cap', 'HML', 'MAD', 'Market Impact SOCP', 'Max Loss', 'Mean-Variance', 'Relax Sector Caps', 'Remove Min Weights', 'Remove Turnover', 'SMB', 'Sell Volume Tracking', 'Sell W Nonneg', 'Semi-Variance', 'Short W Nonneg', 'Unconstrained', 'Weights are None', 'Widen Beta', '_e2e_warm_start', '_risk_measure', 'baseline_risk_factor', 'cvar_alpha', 'cvar_enabled', 'cvar_lambda', 'details', 'dual_value', 'eps_abs', 'eps_gap', 'eps_rel', 'factor_neutrality', 'garch_info', 'gross_leverage_cap', 'hmm_regime', 'ignore', 'max_duration', 'max_iter', 'min_duration', 'risk_budgeting', 'risk_free_rate', 'scale', 'sector_map', 'severity_score', 'short_borrow_cost', 'state_sequence', 'tc_volume_profile', 'transaction_cost', 'use_fast_ewm_cov', 'warm_start']
\ No newline at end of file
diff --git a/.hypothesis/constants/b932e247ab546817 b/.hypothesis/constants/b932e247ab546817
new file mode 100644
index 0000000000000000000000000000000000000000..f14c1d560162b73cfa8afca7871ff8f49042fba5
--- /dev/null
+++ b/.hypothesis/constants/b932e247ab546817
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\math_utils.py
+# hypothesis_version: 6.155.1
+
+['columns', 'values']
\ No newline at end of file
diff --git a/.hypothesis/constants/bb56ee10890ecbd7 b/.hypothesis/constants/bb56ee10890ecbd7
new file mode 100644
index 0000000000000000000000000000000000000000..4f3cee5a7703b0384368de4be89d164742c36849
--- /dev/null
+++ b/.hypothesis/constants/bb56ee10890ecbd7
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\core_types.py
+# hypothesis_version: 6.155.1
+
+[0.0, 1e-08, 1e-06, 0.001, 0.04, 0.1, 0.15, 0.2, 0.35, 0.4, 0.5, 0.95, 1.0, 1000000.0, 50000000.0, 252, 366, '$', 'CovarianceResult', 'ForecastResult', 'FuturesContract', 'FuturesOverlayResult', 'LotManager', 'ModelReturnForecast', 'OptimizationContext', 'OptimizationParams', 'OptimizationResult', 'PortfolioState', 'ReportData', 'SPY', 'TaxLot', 'ValidationResult', '^IRX', '^TNX', '^VIX', '_global_ewm_cov', '_risk_factor', '_stochastic', '_trading_periods', 'allocation_engine', 'allow_short', 'avg_cost', 'capital', 'current_weights_raw', 'equity', 'ff_enabled', 'fifo', 'hifo', 'lt_days', 'lt_first', 'model', 'overlay_enabled', 'purchase_date', 'rebalance_freq', 'risk', 'risk_free', 'shares', 'short_term_rate', 'spreads_enabled', 'tax_enabled', 'tax_rate_lt', 'tax_rate_st', 'tickers', 'volatility', 'volatility_target']
\ No newline at end of file
diff --git a/.hypothesis/constants/bcdafd6e08ee98f4 b/.hypothesis/constants/bcdafd6e08ee98f4
new file mode 100644
index 0000000000000000000000000000000000000000..1d3852561eb0d5e8fe112e94df6a9988bce08ecc
--- /dev/null
+++ b/.hypothesis/constants/bcdafd6e08ee98f4
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\__init__.py
+# hypothesis_version: 6.155.1
+
+['CovarianceResult', 'ForecastResult', 'LotManager', 'OptimizationResult', 'PortfolioState', 'build_and_optimize', 'load_config', 'solver']
\ No newline at end of file
diff --git a/.hypothesis/constants/bd0e980b485f6d34 b/.hypothesis/constants/bd0e980b485f6d34
new file mode 100644
index 0000000000000000000000000000000000000000..7776565507cbdb53891b23dcd4d5021d50c4ef64
--- /dev/null
+++ b/.hypothesis/constants/bd0e980b485f6d34
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\solver.py
+# hypothesis_version: 6.155.1
+
+[-1.0, -0.005, 0.0, 1e-08, 0.0005, 0.0008, 0.001, 0.005, 0.04, 0.1, 0.2, 0.3, 0.4, 0.5, 0.7, 0.85, 0.9, 0.95, 1.0, 1.05, 1.1, 1.3, 1.5, 1.8, 2.0, 3.0, 5.0, 100.0, 365.25, 100000.0, 50000000.0, 128, 150, 252, 3600, 'CASH', 'Custom', 'b_max', 'b_min', 'binding_constraints', 'bond_metadata', 'capm_rets', 'coupon', 'cov_mat', 'cvar', 'cvar_alpha', 'cvar_enabled', 'cvar_lambda', 'default_adv_proxy', 'display_constraints', 'ef_curve', 'engine_id', 'exp_rets', 'face', 'feature_importances', 'ff_betas', 'freq', 'garch_info', 'gross_leverage_cap', 'hist_rets', 'hmm_regime', 'ignore', 'js_alpha', 'lw_alpha', 'maturity', 'max_turnover', 'model_id', 'modified_duration', 'name', 'portfolio_duration', 'pre_tax_rets', 'relaxation_log', 'rets', 'risk_contributions', 'risk_free_rate', 'sector_limit', 'sector_map', 'severity_score', 'single_asset_max', 'single_asset_min', 'tax_enabled', 'tax_rate', 'tax_rate_lt', 'transaction_cost', 'vols']
\ No newline at end of file
diff --git a/.hypothesis/constants/bddfb17f676ac8ef b/.hypothesis/constants/bddfb17f676ac8ef
new file mode 100644
index 0000000000000000000000000000000000000000..f39fccba356c99d494638085a53f1c088b28350a
--- /dev/null
+++ b/.hypothesis/constants/bddfb17f676ac8ef
@@ -0,0 +1,4 @@
+# file: d:\portfolio engine\engine\utils\metrics.py
+# hypothesis_version: 6.155.1
+
+[0.0, 0.0001, 0.0008, 'CASH', 'gross_lev', 'ignore', 'long_e', 'port_duration', 'port_yield', 'short_e']
\ No newline at end of file
diff --git a/.hypothesis/constants/be2879be5913564e b/.hypothesis/constants/be2879be5913564e
new file mode 100644
index 0000000000000000000000000000000000000000..ddcfe29c2e4161ec42cbc904ce286de147a31c95
--- /dev/null
+++ b/.hypothesis/constants/be2879be5913564e
@@ -0,0 +1,4 @@
+# file: d:\portfolio engine\engine\report_chart.py
+# hypothesis_version: 6.155.1
+
+[0.0, 0.1, 0.8, 1.0, 1.2, 1.4, 1.5, 1.8, 100, 150, '#3fb950', '#58a6ff', '#8b949e', '#c084fc', '#f0883e', '#f85149', '#fff', '%Y-%m-%d', '-1', 'CASH', 'Cash Benchmark', 'Current %', 'Current 25th', 'Current 5th', 'Current 75th', 'Current 95th', 'Current Median', 'Current Portfolio', 'Net %', 'Other', 'Portfolio (OOS)', 'Target %', 'Target 25th', 'Target 5th', 'Target 75th', 'Target 95th', 'Target Median', 'Target Portfolio', 'backgroundColor', 'bl_ds', 'bl_labels', 'borderColor', 'borderDash', 'borderRadius', 'borderWidth', 'bt', 'capm_rets', 'circle', 'curr_mc_ds', 'currency', 'data', 'dates', 'ef_curve', 'ef_ds', 'eq_dates', 'eq_ds', 'ff_betas', 'ff_ds', 'ff_labels', 'ff_radar_ds', 'ff_radar_labels', 'ffill', 'fill', 'has_curr_mc', 'ignore', 'label', 'mc', 'mc_dates', 'mc_ds', 'oos_dates', 'oos_ds', 'pointBackgroundColor', 'pointBorderColor', 'pointRadius', 'pointStyle', 'rectRot', 'rets', 'rgba(240,136,62,0.1)', 'rgba(248,81,73,0.05)', 'rgba(248,81,73,0.1)', 'rgba(248,81,73,0.25)', 'rgba(248,81,73,0.45)', 'rgba(248,81,73,0.5)', 'rgba(63,185,80,0.05)', 'rgba(63,185,80,0.1)', 'rgba(63,185,80,0.25)', 'rgba(63,185,80,0.45)', 'rgba(63,185,80,0.5)', 'rgba(88,166,255,0.2)', 'sec_ds', 'sec_labels', 'sector_map', 'showLine', 'tension', 'vols', 'x', 'y']
\ No newline at end of file
diff --git a/.hypothesis/constants/c3de0e9b969641f6 b/.hypothesis/constants/c3de0e9b969641f6
new file mode 100644
index 0000000000000000000000000000000000000000..582a0dcfef0f9f974e5581463706829c107758cc
--- /dev/null
+++ b/.hypothesis/constants/c3de0e9b969641f6
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\report_data.py
+# hypothesis_version: 6.155.1
+
+[0.0, 0.0001, 0.01, 0.04, 0.95, 1.0, 252, '#3fb950', '#56d364', '#58a6ff', '#79c0ff', '#bc8cff', '#d2a8ff', '#e3b341', '#f0883e', '#f85149', '#ff7b72', '#ffa657', '$', '%Y-%m-%d', 'BULL', 'Benchmark', 'CASH', 'Custom', 'Mean-Variance', '_risk_measure', 'allow_shorts', 'ann_ret', 'ann_vol', 'bench_html', 'benchmarks', 'beta', 'beta_trans', 'block', 'bt', 'calmar', 'capital', 'chart_data_script', 'cjs_tag', 'constraint_diag_html', 'cov_mat', 'curr', 'currency_symbol', 'curve_col', 'curve_inverted', 'cvar_enabled', 'cvar_garch_html', 'data_alerts_html', 'dd_days', 'disable_whatif', 'display_oos_chart', 'engine_id', 'equity', 'exp_ret', 'exp_rets', 'exp_sr', 'exp_vol', 'fixed_income_html', 'friction_paid', 'friction_rate', 'garch_enabled', 'gross_lev', 'has_curr', 'hist_calmar_trans', 'hist_cdar_trans', 'hist_cvar_trans', 'hist_mad_trans', 'hist_maxdd_trans', 'hist_ret_trans', 'hist_semi_trans', 'hist_sortino_trans', 'hist_sr_trans', 'hist_treynor_trans', 'hist_vol_trans', 'ignore', 'jacobian', 'js_alpha', 'leverage_html', 'long_e', 'max_dd', 'model_badge', 'model_id', 'model_name', 'name', 'narrative', 'none', 'oos_dates', 'oos_section', 'overlay_html', 'port_yield', 'rc_ds', 'rc_html', 'resiliency_html', 'ret_trans', 'rfr', 'rfr_raw', 'risk_attr_html', 'risk_free_rate', 'sharpe', 'short_e', 'show_bl_shift', 'show_ef', 'show_factors', 'show_ml_stats', 'show_whatif', 'single_asset_min', 'sortino', 'spy_trend', 'sr_trans', 'table_rows', 'tax_html', 'tnx_label', 'trading_days', 'trend_col', 'treynor_trans', 'validation_html', 'vix_col', 'vix_high', 'vix_label', 'vol_trans', 'w_risky', 'warn_html', 'whatif_html', '—']
\ No newline at end of file
diff --git a/.hypothesis/constants/c4288edb97451eb9 b/.hypothesis/constants/c4288edb97451eb9
new file mode 100644
index 0000000000000000000000000000000000000000..fa4b0e96f0153f5d7450943f74cbe000fd6ad827
--- /dev/null
+++ b/.hypothesis/constants/c4288edb97451eb9
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\database.py
+# hypothesis_version: 6.155.1
+
+[1.0, 3600, 10000, 'DATABASE_URL', '__main__', 'append', 'audit_log', 'backtest_history', 'daily_prices', 'daily_yields', 'date', 'finance_data.db', 'saved_portfolios', 'sqlite', 'stitch_metadata', 'ticker', 'webhook_configs']
\ No newline at end of file
diff --git a/.hypothesis/constants/c43cd3faf8c5fdaf b/.hypothesis/constants/c43cd3faf8c5fdaf
new file mode 100644
index 0000000000000000000000000000000000000000..0bc1788934a36d1368115b5c7dc90508b8ac2125
--- /dev/null
+++ b/.hypothesis/constants/c43cd3faf8c5fdaf
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\model_visuals.py
+# hypothesis_version: 6.155.1
+
+[0.0001, 100, '#3fb950', '#56d364', '#58a6ff', '#79c0ff', '#d2a8ff', '#f0883e', '#f85149', '#ffa657', 'HML', 'MOM', 'Mkt-RF', 'SMB', 'backgroundColor', 'borderRadius', 'data', 'label']
\ No newline at end of file
diff --git a/.hypothesis/constants/c4ee0d7d073ffa34 b/.hypothesis/constants/c4ee0d7d073ffa34
new file mode 100644
index 0000000000000000000000000000000000000000..306d7d8d125455f7961b21896c94d57146730d3b
--- /dev/null
+++ b/.hypothesis/constants/c4ee0d7d073ffa34
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\forecast_generation.py
+# hypothesis_version: 6.155.1
+
+[0.0, 0.005, 0.05, 0.15, 0.25, 0.3, 0.45, 0.5, 0.7, 1.0, 2.0, 365.25, 126, 252, '_trading_periods', 'anova_enabled', 'bond_metadata', 'feature_importances', 'garch_enabled', 'hmm_regime', 'incremental_cov', 'risk_free_rate', 'severity_score', 'use_fast_ewm_cov']
\ No newline at end of file
diff --git a/.hypothesis/constants/c8143a45243253d0 b/.hypothesis/constants/c8143a45243253d0
new file mode 100644
index 0000000000000000000000000000000000000000..7e67bf3508601c2c16cdf08401d773f5321c490f
--- /dev/null
+++ b/.hypothesis/constants/c8143a45243253d0
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\analytics.py
+# hypothesis_version: 6.155.1
+
+[-0.25, -0.2, -0.15, -0.1, -0.01, 0.0, 1e-06, 0.0001, 0.0008, 0.001, 0.01, 0.015, 0.04, 0.1, 0.25, 0.4, 0.95, 1.0, 2.0, 20.0, 252.0, 50000000.0, -200, 100, 200, 252, ' & ', 'BEAR', 'BULL', 'CASH', 'CHOP', 'No Shock', 'SPY', 'UNKNOWN', '^IRX', '^TNX', '^VIX', 'allow_short', 'ann_ret', 'ann_rets', 'ann_vol', 'benchmarks', 'calmar', 'curve_inverted', 'dd_days', 'default_adv_proxy', 'equity', 'friction_paid', 'friction_rate', 'gain_fractions', 'ignore', 'impact', 'impact_paid', 'is_historical', 'jacobian', 'max', 'max_dd', 'max_dd_date', 'min', 'name', 'optimal', 'optimizer_failures', 'rate_shift', 'report', 'risk_free', 'rolling_sharpe', 'scenario', 'sharpe', 'short_term_rate', 'sortino', 'spread', 'spy_drop', 'spy_trend', 'tax_enabled', 'tax_paid', 'tax_rates', 'tc_volume_profile', 'tickers', 'tnx_val', 'total_ret', 'transaction_cost', 'trigger', 'vix_high', 'vix_val', 'volatility']
\ No newline at end of file
diff --git a/.hypothesis/constants/ca2b00f550736920 b/.hypothesis/constants/ca2b00f550736920
new file mode 100644
index 0000000000000000000000000000000000000000..1d126afb8ed00ff398da9cb721e21c9f37899876
--- /dev/null
+++ b/.hypothesis/constants/ca2b00f550736920
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\data.py
+# hypothesis_version: 6.155.1
+
+[-99.99, -0.999, 0.0, 1e-08, 0.03, 0.04, 0.1, 0.2, 0.35, 0.5, 0.85, 1.0, 20.0, 100.0, 365.25, -999, 100, 127, 200, 252, 360, 365, 3650, 5000, '%Y%m%d', '%Y-%m-%d', ',', '-USD', '.', '.CSV', '.csv', '1950-01-03', '1971-02-05', '1974-12-31', '1977-01-03', '1980-01-01', '5d', '5factor', '=X', 'Adj Close', 'B', 'BAMLH0A0HYM2', 'CMA', 'Close', 'FRED_API_KEY', 'GC=F', 'GLD', 'HML', 'HYG', 'IEF', 'M', 'ME', 'MOM', 'Mkt-RF', 'NaN', 'Price', 'QQQ', 'RMW', 'SMB', 'SPY', 'TLT', '^', '^GSPC', '^IRX', '^IXIC', '^TNX', '^TYX', '^VIX', 'all', 'beta_63d', 'bond_metadata', 'close_price', 'cma_21d', 'coerce', 'coupon', 'date', 'dead_tickers', 'equity', 'extended_history', 'face', 'fcf_yield', 'freq', 'hml_21d', 'implied_volatility', 'inner', 'is_yield', 'latin-1', 'linear', 'maturity', 'max_date', 'mkt_rf_21d', 'mom', 'mom_1m', 'mom_3m', 'mom_6m', 'momentum', 'nan', 'observations', 'operating_margin', 'overlap_days', 'pe_ratio', 'proxy', 'proxy_mappings', 'proxy_start', 'ret', 'rev_5d', 'risk_free', 'rmw_21d', 'smb_21d', 'spread', 'stooq', 'sum', 'target', 'ticker', 'tickers', 'value', 'vol_21d', 'volatility', 'yield_pct']
\ No newline at end of file
diff --git a/.hypothesis/constants/cc254adcb082f870 b/.hypothesis/constants/cc254adcb082f870
new file mode 100644
index 0000000000000000000000000000000000000000..8952fbc3e16c818837d67232f8e19bbb42ccaaf2
--- /dev/null
+++ b/.hypothesis/constants/cc254adcb082f870
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\cvxpy_engine.py
+# hypothesis_version: 6.155.1
+
+[-1.0, 0.0, 1e-08, 1e-06, 0.0001, 0.0005, 0.0008, 0.001, 0.03, 0.05, 0.07, 0.09, 0.1, 0.12, 0.15, 0.18, 0.2, 0.21, 0.24, 0.28, 0.3, 0.5, 0.8, 0.95, 0.99, 0.999, 1.0, 1.01, 1.5, 2.0, 3.0, 10.0, 15.0, 50.0, 100.0, 1000.0, 100, 2500, ':', 'Base', 'CASH', 'CDaR', 'CVaR', 'DW Nonneg', 'Drop Beta', 'Drop Duration', 'Drop Factors', 'Duration', 'Fully Invested', 'Gross Leverage Cap', 'HML', 'MAD', 'Market Impact SOCP', 'Max Loss', 'Mean-Variance', 'Relax Sector Caps', 'Remove Min Weights', 'Remove Turnover', 'SMB', 'Sector:', 'Sell Volume Tracking', 'Sell W Nonneg', 'Semi-Variance', 'Short W Nonneg', 'Unconstrained', 'Weights are None', 'Widen Beta', '_e2e_warm_start', '_risk_measure', 'asset', 'baseline_risk_factor', 'custom_constraints', 'cvar_alpha', 'cvar_enabled', 'cvar_lambda', 'details', 'direction', 'dual_value', 'eps_abs', 'eps_rel', 'factor_neutrality', 'garch_info', 'gross_leverage_cap', 'hmm_regime', 'ignore', 'is_backtest', 'l2_reg', 'limit', 'max', 'max_assets', 'max_duration', 'max_iter', 'max_iters', 'min', 'min_duration', 'risk_budgeting', 'risk_free_rate', 'scale', 'sector_map', 'severity_score', 'short_borrow_cost', 'state_sequence', 'tc_volume_profile', 'time_limit', 'transaction_cost', 'use_fast_ewm_cov', 'warm_start']
\ No newline at end of file
diff --git a/.hypothesis/constants/ce222a499a7052cb b/.hypothesis/constants/ce222a499a7052cb
new file mode 100644
index 0000000000000000000000000000000000000000..b5d8620edd8270daeae32a91154d1a9fde6187f1
--- /dev/null
+++ b/.hypothesis/constants/ce222a499a7052cb
@@ -0,0 +1,4 @@
+# file: d:\portfolio engine\engine\report_builders\html_risk.py
+# hypothesis_version: 6.155.1
+
+[0.0, 0.001, 0.9, 0.95, 1.0, 1.15, 100.0, 100, '#3fb950', '#e3b341', '#f85149', '', '
', 'CASH', 'Risk Contrib %', 'Weight %', 'XGBoost', 'alpha', 'backgroundColor', 'borderRadius', 'cvar_alpha', 'cvar_enabled', 'data', 'factor_contributions', 'garch_ann_vol', 'garch_enabled', 'garch_info', 'hist_ann_vol', 'items', 'label', 'name', 'rc_ds', 'rc_labels', 'rgba(88,166,255,0.4)', 'risk_contributions', 'total_return', '≈ Normal', '▲ Elevated', '▼ Compressed']
\ No newline at end of file
diff --git a/.hypothesis/constants/ceb7bfa3d7c8b04d b/.hypothesis/constants/ceb7bfa3d7c8b04d
new file mode 100644
index 0000000000000000000000000000000000000000..0807336b2cb4675e9ebe9bfc5a6982f783e0030e
--- /dev/null
+++ b/.hypothesis/constants/ceb7bfa3d7c8b04d
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\cvxpy_engine.py
+# hypothesis_version: 6.155.1
+
+[-1.0, 0.0, 1e-08, 1e-06, 1e-05, 0.0001, 0.0005, 0.0008, 0.001, 0.03, 0.05, 0.07, 0.09, 0.1, 0.12, 0.15, 0.18, 0.2, 0.21, 0.24, 0.28, 0.3, 0.5, 0.8, 0.95, 0.99, 0.999, 1.0, 1.5, 2.0, 3.0, 10.0, 50.0, 100.0, 100000, 'Base', 'CASH', 'CDaR', 'CVaR', 'DW Nonneg', 'Drop Beta', 'Drop Duration', 'Drop Factors', 'Duration', 'Fully Invested', 'Gross Leverage Cap', 'HML', 'MAD', 'Market Impact SOCP', 'Max Loss', 'Mean-Variance', 'Relax Sector Caps', 'Remove Min Weights', 'Remove Turnover', 'SMB', 'Sell Volume Tracking', 'Sell W Nonneg', 'Semi-Variance', 'Short W Nonneg', 'Unconstrained', 'Weights are None', 'Widen Beta', '_e2e_warm_start', '_risk_measure', 'baseline_risk_factor', 'cvar_alpha', 'cvar_enabled', 'cvar_lambda', 'details', 'dual_value', 'eps_abs', 'eps_gap', 'eps_rel', 'factor_neutrality', 'garch_info', 'gross_leverage_cap', 'hmm_regime', 'ignore', 'max_assets', 'max_duration', 'max_iter', 'min_duration', 'risk_budgeting', 'risk_free_rate', 'scale', 'sector_map', 'severity_score', 'short_borrow_cost', 'state_sequence', 'tc_volume_profile', 'transaction_cost', 'use_fast_ewm_cov', 'warm_start']
\ No newline at end of file
diff --git a/.hypothesis/constants/ceec83d4461a9176 b/.hypothesis/constants/ceec83d4461a9176
new file mode 100644
index 0000000000000000000000000000000000000000..09cd62042fd1c1443e4a8ed82093894b1375435a
--- /dev/null
+++ b/.hypothesis/constants/ceec83d4461a9176
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\dl_models.py
+# hypothesis_version: 6.155.1
+
+[0.0, 0.0001, 0.001, 0.1, 0.5, 0.8, 1.0, 10000.0, 256, 5000, 'cpu', 'cuda', 'ignore', 'inf', 'min', 'pe', 'portfolio_engine', 'ret', 'target']
\ No newline at end of file
diff --git a/.hypothesis/constants/cf2d3ed168a59615 b/.hypothesis/constants/cf2d3ed168a59615
new file mode 100644
index 0000000000000000000000000000000000000000..6ac96da8f26f1bd14e1d40dfb14e1d76454d42f1
--- /dev/null
+++ b/.hypothesis/constants/cf2d3ed168a59615
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\server.py
+# hypothesis_version: 6.155.1
+
+[200, 404, '127.0.0.1', 'Cache-Control', 'Content-Length', 'Content-Type', 'Report not found', 'no-store', 'nosniff', 'rb', '═']
\ No newline at end of file
diff --git a/.hypothesis/constants/d12ea7645b26ff73 b/.hypothesis/constants/d12ea7645b26ff73
new file mode 100644
index 0000000000000000000000000000000000000000..7099edc20441bdddb8eca055923bcaa70358187b
--- /dev/null
+++ b/.hypothesis/constants/d12ea7645b26ff73
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\config.py
+# hypothesis_version: 6.155.1
+
+['MASTER_KEY', 'QUANT-ALPHA-99']
\ No newline at end of file
diff --git a/.hypothesis/constants/d1efcf103ee9233f b/.hypothesis/constants/d1efcf103ee9233f
new file mode 100644
index 0000000000000000000000000000000000000000..b13b22be763d9cb0f5513e312d2a044840add241
--- /dev/null
+++ b/.hypothesis/constants/d1efcf103ee9233f
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\fixed_income.py
+# hypothesis_version: 6.155.1
+
+[-0.99, 0.0, 0.04, 0.5, 10.0, 'Bonds', 'CORP_', 'HYG', 'JNK', 'LQD', 'TBILL', 'US_T', 'VCIT', '^[0-9A-Z]{9}$', 'bond_metadata', 'convexity', 'forward', 'macaulay_duration', 'modified_duration', 'natural', 'sector_map', 'spot', 'spread']
\ No newline at end of file
diff --git a/.hypothesis/constants/d2cd4f57c5e8b0e2 b/.hypothesis/constants/d2cd4f57c5e8b0e2
new file mode 100644
index 0000000000000000000000000000000000000000..4f3cee5a7703b0384368de4be89d164742c36849
--- /dev/null
+++ b/.hypothesis/constants/d2cd4f57c5e8b0e2
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\core_types.py
+# hypothesis_version: 6.155.1
+
+[0.0, 1e-08, 1e-06, 0.001, 0.04, 0.1, 0.15, 0.2, 0.35, 0.4, 0.5, 0.95, 1.0, 1000000.0, 50000000.0, 252, 366, '$', 'CovarianceResult', 'ForecastResult', 'FuturesContract', 'FuturesOverlayResult', 'LotManager', 'ModelReturnForecast', 'OptimizationContext', 'OptimizationParams', 'OptimizationResult', 'PortfolioState', 'ReportData', 'SPY', 'TaxLot', 'ValidationResult', '^IRX', '^TNX', '^VIX', '_global_ewm_cov', '_risk_factor', '_stochastic', '_trading_periods', 'allocation_engine', 'allow_short', 'avg_cost', 'capital', 'current_weights_raw', 'equity', 'ff_enabled', 'fifo', 'hifo', 'lt_days', 'lt_first', 'model', 'overlay_enabled', 'purchase_date', 'rebalance_freq', 'risk', 'risk_free', 'shares', 'short_term_rate', 'spreads_enabled', 'tax_enabled', 'tax_rate_lt', 'tax_rate_st', 'tickers', 'volatility', 'volatility_target']
\ No newline at end of file
diff --git a/.hypothesis/constants/d2f99ca7595e3689 b/.hypothesis/constants/d2f99ca7595e3689
new file mode 100644
index 0000000000000000000000000000000000000000..80bc297db35f2b20542418c1ae3b89149ed45ba9
--- /dev/null
+++ b/.hypothesis/constants/d2f99ca7595e3689
@@ -0,0 +1,4 @@
+# file: d:\portfolio engine\engine\diagnostics.py
+# hypothesis_version: 6.155.1
+
+[500, 'details', 'diagnostics', 'flag', 'flags', 'last_updated', 'task_id', 'timestamp', 'w', 'wealth_engine']
\ No newline at end of file
diff --git a/.hypothesis/constants/d5a0e67639fa341f b/.hypothesis/constants/d5a0e67639fa341f
new file mode 100644
index 0000000000000000000000000000000000000000..f09cc81021e99d97816ad142a200efffd7eb2fb5
--- /dev/null
+++ b/.hypothesis/constants/d5a0e67639fa341f
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\bl_bridge.py
+# hypothesis_version: 6.155.1
+
+[0.0, 1e-08, 0.01, 0.02, 0.05, 0.1, 0.2, 0.5, 1.0, 252.0, 126, 252, 10000, 'USD']
\ No newline at end of file
diff --git a/.hypothesis/constants/d678d66fd7eead5d b/.hypothesis/constants/d678d66fd7eead5d
new file mode 100644
index 0000000000000000000000000000000000000000..fa248b76215e34900ec31a054627b7e74a65800e
--- /dev/null
+++ b/.hypothesis/constants/d678d66fd7eead5d
@@ -0,0 +1,4 @@
+# file: d:\portfolio engine\engine\differentiable_optimizer.py
+# hypothesis_version: 6.155.1
+
+[0.0, 0.0001, 1.0, 2.0, 3.0, 5000, 'L_scaled', 'SCS', 'eps', 'max_iters', 'mu', 'solve_method']
\ No newline at end of file
diff --git a/.hypothesis/constants/d76c8fbf9d063826 b/.hypothesis/constants/d76c8fbf9d063826
new file mode 100644
index 0000000000000000000000000000000000000000..cc40e75ed9158a86cd187ef75dda4130fb8b6ec1
--- /dev/null
+++ b/.hypothesis/constants/d76c8fbf9d063826
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\execution.py
+# hypothesis_version: 6.155.1
+
+[-1.0, 0.0, 0.0001, 0.01, 0.015, 0.05, 0.1, 0.15, 0.5, 1.0, 2.5, 3.0, 4.0, 10000.0, 50000000.0, 7497, '%Y%m%d_%H%M%S', '127.0.0.1', 'AUC', 'Action', 'AlgoStrategy', 'ArrivalPx', 'BUY', 'CASH', 'Currency', 'DAY', 'Exchange', 'IB_ARRIVAL', 'LMT', 'LmtPrice', 'MKT', 'MOC', 'OrderType', 'Quantity', 'SELL', 'SMART', 'STK', 'SecType', 'Symbol', 'TWAP', 'TimeInForce', 'Twap', 'USD', 'VWAP', 'Vwap', 'adv', 'aggressive', 'base_price', 'broker', 'close', 'current_weights', 'daily', 'db', 'diff', 'drift_only', 'execution_price', 'filled_val', 'high', 'impact_decimal', 'intended_val', 'items', 'low', 'monthly', 'open', 'quarterly', 'slippage_bps', 'twap', 'volatility', 'vwap', 'w', 'weekly', 'y']
\ No newline at end of file
diff --git a/.hypothesis/constants/d81937843e172cd9 b/.hypothesis/constants/d81937843e172cd9
new file mode 100644
index 0000000000000000000000000000000000000000..0e2c4d0e171a3cf4393ad406a89c7dfccf6b04a6
--- /dev/null
+++ b/.hypothesis/constants/d81937843e172cd9
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\report.py
+# hypothesis_version: 6.155.1
+
+['%Y-%m-%d %H:%M', 'chart.umd.min.js', 'timestamp', 'utf-8', 'w']
\ No newline at end of file
diff --git a/.hypothesis/constants/d97c684c708d2ef2 b/.hypothesis/constants/d97c684c708d2ef2
new file mode 100644
index 0000000000000000000000000000000000000000..56596cb61f6f1487deb2b8e5595645efdf9dc869
--- /dev/null
+++ b/.hypothesis/constants/d97c684c708d2ef2
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\report_data.py
+# hypothesis_version: 6.155.1
+
+[0.0, 0.0001, 0.01, 0.04, 0.95, 1.0, 252, '#3fb950', '#56d364', '#58a6ff', '#79c0ff', '#bc8cff', '#d2a8ff', '#e3b341', '#f0883e', '#f85149', '#ff7b72', '#ffa657', '$', '%Y-%m-%d', 'BULL', 'Benchmark', 'CASH', 'Custom', 'Mean-Variance', '_risk_measure', 'ai_sentiment', 'allow_shorts', 'ann_ret', 'ann_vol', 'bench_html', 'benchmarks', 'beta', 'beta_trans', 'block', 'bt', 'calmar', 'capital', 'chart_data_script', 'cjs_tag', 'constraint_diag_html', 'cov_mat', 'curr', 'currency_symbol', 'curve_col', 'curve_inverted', 'cvar_enabled', 'cvar_garch_html', 'data_alerts_html', 'dd_days', 'disable_whatif', 'display_oos_chart', 'engine_id', 'equity', 'exp_ret', 'exp_rets', 'exp_sr', 'exp_vol', 'feature_importances', 'fixed_income_html', 'friction_paid', 'friction_rate', 'garch_enabled', 'gross_lev', 'has_curr', 'hist_calmar_trans', 'hist_cdar_trans', 'hist_cvar_trans', 'hist_mad_trans', 'hist_maxdd_trans', 'hist_ret_trans', 'hist_semi_trans', 'hist_sortino_trans', 'hist_sr_trans', 'hist_treynor_trans', 'hist_vol_trans', 'ignore', 'jacobian', 'js_alpha', 'leverage_html', 'long_e', 'max_dd', 'model_badge', 'model_id', 'model_name', 'name', 'narrative', 'none', 'oos_dates', 'oos_section', 'overlay_html', 'port_yield', 'rc_ds', 'rc_html', 'resiliency_html', 'ret_trans', 'rfr', 'rfr_raw', 'risk_attr_html', 'risk_free_rate', 'sharpe', 'short_e', 'show_bl_shift', 'show_ef', 'show_factors', 'show_ml_stats', 'show_whatif', 'single_asset_min', 'sortino', 'spy_trend', 'sr_trans', 'table_rows', 'tax_html', 'tnx_label', 'trading_days', 'trend_col', 'treynor_trans', 'validation_html', 'vix_col', 'vix_high', 'vix_label', 'vol_trans', 'w_risky', 'warn_html', 'whatif_html', '—']
\ No newline at end of file
diff --git a/.hypothesis/constants/d9bbb6544f046300 b/.hypothesis/constants/d9bbb6544f046300
new file mode 100644
index 0000000000000000000000000000000000000000..5bda0c7e8f80a19e62d75e969ca00e20d95a5802
--- /dev/null
+++ b/.hypothesis/constants/d9bbb6544f046300
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\research\__init__.py
+# hypothesis_version: 6.155.1
+
+[]
\ No newline at end of file
diff --git a/.hypothesis/constants/db67869de9a95b87 b/.hypothesis/constants/db67869de9a95b87
new file mode 100644
index 0000000000000000000000000000000000000000..cf52bb075e3fe396bdc7fb1afd0579930cae71d5
--- /dev/null
+++ b/.hypothesis/constants/db67869de9a95b87
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\differentiable_optimizer.py
+# hypothesis_version: 6.155.1
+
+[0.0, 0.0001, 1.0, 2.0, 3.0, 5000, 'L_scaled', 'SCS', 'eps', 'max_iters', 'mu', 'solve_method']
\ No newline at end of file
diff --git a/.hypothesis/constants/dcbeb1303742be51 b/.hypothesis/constants/dcbeb1303742be51
new file mode 100644
index 0000000000000000000000000000000000000000..b836cfcf0014793be9acf02d9e03a43e9fc6d1a3
--- /dev/null
+++ b/.hypothesis/constants/dcbeb1303742be51
@@ -0,0 +1,4 @@
+# file: d:\portfolio engine\engine\core_engine.py
+# hypothesis_version: 6.155.1
+
+[-0.3, 0.0, 0.0001, 0.0008, 0.001, 0.01, 0.015, 0.05, 0.1, 0.15, 0.2, 0.3, 0.35, 0.5, 0.95, 1.0, 1.5, 2.0, 3.0, 5.0, 7.5, 10.0, 15.0, 25.0, 100000.0, 252, '%', '%Y-%m-%d', ',', ', ', '2008-09-01', '2009-03-01', '2020-02-20', '2020-03-23', '2022-01-01', '2022-12-31', 'AAPL', 'AGG', 'Bonds & Rates', 'CASH', 'CORE_ENGINE_FATAL', 'Core Equities', 'DIA', 'GLD', 'HF_TOKEN', 'IEF', 'IWM', 'MAE', 'MSFT', 'Model 1', 'NVDA', 'Naive Mean', 'None', 'Other', 'QQQ', 'RFR_PROXY', 'SHY', 'SPY', 'TLT', 'TSLA', 'Tech & Growth', 'VIX_PROXY', '_', '__main__', '_metadata', '_risk_factor', '_risk_input', '_serve', '_stab_lambda', '_stability_spreads', '_use_saved_basis', 'adjusted_input', 'ai_sentiment', 'allocation_engine', 'avg_cost', 'bench_rets', 'beta', 'bt', 'capital', 'cfg_overrides', 'clear', 'cls', 'cov_mat', 'currency_symbol', 'current_weights_raw', 'custom_constraints', 'cvar_95', 'cvar_99', 'cvar_alpha', 'cvar_enabled', 'disclaimer', 'dynamic_risk', 'ef_curve', 'efficient_frontier', 'eq_bench', 'exp_ret', 'exp_sr', 'exp_vol', 'expected_returns', 'export_excel', 'feature_importances', 'ff_betas', 'garch_enabled', 'gross_leverage_cap', 'hmm_regime', 'ignore', 'last_generated', 'last_updated', 'marginal_var', 'max_dd', 'mc', 'model', 'nt', 'original_input', 'prices', 'purchase_date', 'raw', 'rets', 'returns_df', 'rfr_bench', 'risk_factor', 'risk_input', 'sector_map', 'shares', 'short_borrow_cost', 'single_asset_min', 'spread', 'stats', 'stress_2008', 'stress_2022', 'stress_covid', 'target_weights', 'tax_enabled', 'tax_rate_lt', 'tax_rate_st', 'tickers', 'to_dict', 'universe_categories', 'utf-8', 'vix_val', 'vol_bench', 'volatility', 'vols', 'w', 'winner', 'with_futures']
\ No newline at end of file
diff --git a/.hypothesis/constants/e03c0858d5d0d3e2 b/.hypothesis/constants/e03c0858d5d0d3e2
new file mode 100644
index 0000000000000000000000000000000000000000..1804f70ef7f97c35353c3434323224f4b33d0765
--- /dev/null
+++ b/.hypothesis/constants/e03c0858d5d0d3e2
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\core_engine.py
+# hypothesis_version: 6.155.1
+
+[-0.3, 0.0, 0.0001, 0.0008, 0.001, 0.01, 0.015, 0.1, 0.15, 0.2, 0.3, 0.35, 0.5, 0.95, 1.0, 1.5, 2.0, 3.0, 5.0, 7.5, 10.0, 15.0, 25.0, 100000.0, 252, '%', '%Y-%m-%d', ',', ', ', 'AAPL', 'AGG', 'Bonds & Rates', 'CASH', 'CORE_ENGINE_FATAL', 'Core Equities', 'DIA', 'GLD', 'IEF', 'IWM', 'MAE', 'MSFT', 'Model 1', 'NVDA', 'Naive Mean', 'None', 'Other', 'QQQ', 'RFR_PROXY', 'SHY', 'SPY', 'TLT', 'TSLA', 'Tech & Growth', 'VIX_PROXY', '_', '__main__', '_metadata', '_risk_factor', '_risk_input', '_serve', '_stab_lambda', '_stability_spreads', '_use_saved_basis', 'adjusted_input', 'allocation_engine', 'avg_cost', 'bench_rets', 'beta', 'bt', 'capital', 'cfg_overrides', 'clear', 'cls', 'currency_symbol', 'current_weights_raw', 'custom_constraints', 'cvar_alpha', 'cvar_enabled', 'disclaimer', 'dynamic_risk', 'ef_curve', 'efficient_frontier', 'eq_bench', 'exp_ret', 'exp_sr', 'exp_vol', 'expected_returns', 'export_excel', 'ff_betas', 'garch_enabled', 'gross_leverage_cap', 'hmm_regime', 'ignore', 'last_generated', 'last_updated', 'max_dd', 'mc', 'model', 'nt', 'original_input', 'prices', 'purchase_date', 'raw', 'rets', 'returns_df', 'rfr_bench', 'risk_factor', 'risk_input', 'sector_map', 'shares', 'short_borrow_cost', 'single_asset_min', 'spread', 'target_weights', 'tax_enabled', 'tax_rate_lt', 'tax_rate_st', 'tickers', 'to_dict', 'universe_categories', 'utf-8', 'vix_val', 'vol_bench', 'volatility', 'vols', 'w', 'winner', 'with_futures']
\ No newline at end of file
diff --git a/.hypothesis/constants/e37cf49eef707665 b/.hypothesis/constants/e37cf49eef707665
new file mode 100644
index 0000000000000000000000000000000000000000..9181b2164a470c131edcab97933b8d93f3c4eb03
--- /dev/null
+++ b/.hypothesis/constants/e37cf49eef707665
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\constants.py
+# hypothesis_version: 6.155.1
+
+[0.0003, 0.0004, 0.0005, 0.0006, 0.0008, 0.0025, 0.05, 50000000.0, '\x1b[0m', '\x1b[1m', '\x1b[2m', '\x1b[35m', '\x1b[36m', '\x1b[4m', '\x1b[91m', '\x1b[92m', '\x1b[93m', '\x1b[94m', '\x1b[95m', '\x1b[96m', 'Bonds', 'Commodity', 'Crypto', 'Defensive', 'Index', 'International', 'Other', 'Tech', 'output', 'portfolio_state.json', '—']
\ No newline at end of file
diff --git a/.hypothesis/constants/e380cd05bdc9d107 b/.hypothesis/constants/e380cd05bdc9d107
new file mode 100644
index 0000000000000000000000000000000000000000..693c4fb9ba7fac493b294b938fe57f53fb5c1693
--- /dev/null
+++ b/.hypothesis/constants/e380cd05bdc9d107
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\logger.py
+# hypothesis_version: 6.155.1
+
+[1024, 'cmdstanpy', 'engine.log', 'exc_info', 'funcName', 'level', 'lineNo', 'matplotlib', 'message', 'module', 'name', 'portfolio_engine', 'timestamp', 'yfinance']
\ No newline at end of file
diff --git a/.hypothesis/constants/e551224be2810bad b/.hypothesis/constants/e551224be2810bad
new file mode 100644
index 0000000000000000000000000000000000000000..cfa698bf39aae5c950d16ee2732a3a6594d657b1
--- /dev/null
+++ b/.hypothesis/constants/e551224be2810bad
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\backtest.py
+# hypothesis_version: 6.155.1
+
+[-1e-05, 0.0, 1e-12, 1e-09, 1e-08, 1e-06, 1e-05, 0.0001, 0.0008, 0.001, 0.04, 0.2, 0.35, 0.5, 1.0, 3.0, 50000000.0, 126, 252, 366, 1260, 5000, '%Y-%m-%d', 'CASH', '_risk_factor', '_risk_input', 'cash_weight', 'dates', 'default_adv_proxy', 'ffill', 'hifo', 'hmm_regime', 'ignore', 'lt_days', 'monte_carlo_sims', 'monte_carlo_years', 'risk_free_rate', 'severity_score', 'tax_enabled', 'tax_rate_lt', 'tax_rate_st', 'transaction_cost']
\ No newline at end of file
diff --git a/.hypothesis/constants/e5f3c22d9fdf4fbc b/.hypothesis/constants/e5f3c22d9fdf4fbc
new file mode 100644
index 0000000000000000000000000000000000000000..7776565507cbdb53891b23dcd4d5021d50c4ef64
--- /dev/null
+++ b/.hypothesis/constants/e5f3c22d9fdf4fbc
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\solver.py
+# hypothesis_version: 6.155.1
+
+[-1.0, -0.005, 0.0, 1e-08, 0.0005, 0.0008, 0.001, 0.005, 0.04, 0.1, 0.2, 0.3, 0.4, 0.5, 0.7, 0.85, 0.9, 0.95, 1.0, 1.05, 1.1, 1.3, 1.5, 1.8, 2.0, 3.0, 5.0, 100.0, 365.25, 100000.0, 50000000.0, 128, 150, 252, 3600, 'CASH', 'Custom', 'b_max', 'b_min', 'binding_constraints', 'bond_metadata', 'capm_rets', 'coupon', 'cov_mat', 'cvar', 'cvar_alpha', 'cvar_enabled', 'cvar_lambda', 'default_adv_proxy', 'display_constraints', 'ef_curve', 'engine_id', 'exp_rets', 'face', 'feature_importances', 'ff_betas', 'freq', 'garch_info', 'gross_leverage_cap', 'hist_rets', 'hmm_regime', 'ignore', 'js_alpha', 'lw_alpha', 'maturity', 'max_turnover', 'model_id', 'modified_duration', 'name', 'portfolio_duration', 'pre_tax_rets', 'relaxation_log', 'rets', 'risk_contributions', 'risk_free_rate', 'sector_limit', 'sector_map', 'severity_score', 'single_asset_max', 'single_asset_min', 'tax_enabled', 'tax_rate', 'tax_rate_lt', 'transaction_cost', 'vols']
\ No newline at end of file
diff --git a/.hypothesis/constants/e5ff5175fef809c9 b/.hypothesis/constants/e5ff5175fef809c9
new file mode 100644
index 0000000000000000000000000000000000000000..d1419a70cf598932402ad59b2e745ace2e2cdbac
--- /dev/null
+++ b/.hypothesis/constants/e5ff5175fef809c9
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\solver.py
+# hypothesis_version: 6.155.1
+
+[-1.0, -0.005, 0.0, 1e-08, 0.0001, 0.0005, 0.0008, 0.001, 0.005, 0.01, 0.04, 0.1, 0.2, 0.3, 0.4, 0.5, 0.7, 0.85, 0.9, 0.95, 1.0, 1.05, 1.1, 1.3, 1.5, 1.8, 2.0, 3.0, 5.0, 100.0, 365.25, 100000.0, 50000000.0, 128, 150, 252, 3600, 'CASH', 'Custom', 'ai_sentiment', 'b_max', 'b_min', 'binding_constraints', 'bond_metadata', 'capm_rets', 'coupon', 'cov_mat', 'cvar', 'cvar_alpha', 'cvar_enabled', 'cvar_lambda', 'default_adv_proxy', 'display_constraints', 'ef_curve', 'engine_id', 'exp_rets', 'face', 'feature_importances', 'ff_betas', 'freq', 'garch_info', 'gross_leverage_cap', 'hist_rets', 'hmm_regime', 'ignore', 'js_alpha', 'lw_alpha', 'maturity', 'max_turnover', 'model_id', 'modified_duration', 'name', 'portfolio_duration', 'pre_tax_rets', 'relaxation_log', 'rets', 'risk_contributions', 'risk_free_rate', 'sector_limit', 'sector_map', 'severity_score', 'single_asset_max', 'single_asset_min', 'tax_enabled', 'tax_rate', 'tax_rate_lt', 'transaction_cost', 'vols']
\ No newline at end of file
diff --git a/.hypothesis/constants/ec1132bc15672053 b/.hypothesis/constants/ec1132bc15672053
new file mode 100644
index 0000000000000000000000000000000000000000..a3d87dfbde786565204234fa6ae2a24d9fe958a5
--- /dev/null
+++ b/.hypothesis/constants/ec1132bc15672053
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\core_engine.py
+# hypothesis_version: 6.155.1
+
+[-0.3, 0.0, 0.0001, 0.0008, 0.001, 0.01, 0.015, 0.1, 0.15, 0.2, 0.3, 0.35, 0.5, 0.95, 1.0, 1.5, 2.0, 3.0, 5.0, 7.5, 10.0, 15.0, 25.0, 100000.0, 252, '%', '%Y-%m-%d', ',', ', ', 'AAPL', 'AGG', 'Bonds & Rates', 'CASH', 'Core Equities', 'DIA', 'GLD', 'IEF', 'IWM', 'MAE', 'MSFT', 'Model 1', 'NVDA', 'Naive Mean', 'None', 'Other', 'QQQ', 'RFR_PROXY', 'SHY', 'SPY', 'TLT', 'TSLA', 'Tech & Growth', 'VIX_PROXY', '_', '__main__', '_metadata', '_risk_factor', '_risk_input', '_serve', '_stab_lambda', '_stability_spreads', '_use_saved_basis', 'adjusted_input', 'allocation_engine', 'avg_cost', 'bench_rets', 'beta', 'bt', 'capital', 'cfg_overrides', 'clear', 'cls', 'currency_symbol', 'current_weights_raw', 'cvar_alpha', 'cvar_enabled', 'disclaimer', 'dynamic_risk', 'eq_bench', 'exp_ret', 'exp_sr', 'exp_vol', 'expected_returns', 'export_excel', 'ff_betas', 'garch_enabled', 'gross_leverage_cap', 'hmm_regime', 'ignore', 'last_generated', 'last_updated', 'max_dd', 'mc', 'model', 'nt', 'original_input', 'prices', 'purchase_date', 'raw', 'returns_df', 'rfr_bench', 'risk_factor', 'risk_input', 'sector_map', 'shares', 'short_borrow_cost', 'single_asset_min', 'spread', 'target_weights', 'tax_enabled', 'tax_rate_lt', 'tax_rate_st', 'tickers', 'to_dict', 'universe_categories', 'utf-8', 'vix_val', 'vol_bench', 'volatility', 'w', 'winner', 'with_futures']
\ No newline at end of file
diff --git a/.hypothesis/constants/ee831a5361794d3a b/.hypothesis/constants/ee831a5361794d3a
new file mode 100644
index 0000000000000000000000000000000000000000..d4c0ae98a62ce8ea7c285d07fed0fce45dd989a9
--- /dev/null
+++ b/.hypothesis/constants/ee831a5361794d3a
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\validation.py
+# hypothesis_version: 6.155.1
+
+[0.0, 0.05, 0.1, 0.5, 0.5772156649, 0.95, 1.0, 252, 'Inconclusive', 'MAE', 'MSE', 'Model', 'Model 1', 'Model 2', 'RMT NOT BENEFICIAL', 'USE RMT', 'adjusted_benchmark', 'after', 'before', 'benchmark', 'diagnostic', 'hit_rate_actual', 'hit_rate_target', 'independence', 'num_trials', 'obs_sharpe', 'overall_pass', 'p_value', 'pass', 'prob', 'psr', 'psr_stat', 'recommendation', 'rmt_successful', 'significant', 'stat', 'winner']
\ No newline at end of file
diff --git a/.hypothesis/constants/efe3a0ccd4dd9786 b/.hypothesis/constants/efe3a0ccd4dd9786
new file mode 100644
index 0000000000000000000000000000000000000000..de3e6d0233b1909a181622818913d135c4a0cc63
--- /dev/null
+++ b/.hypothesis/constants/efe3a0ccd4dd9786
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\report_builders\__init__.py
+# hypothesis_version: 6.155.1
+
+[]
\ No newline at end of file
diff --git a/.hypothesis/constants/f2b7f7724365f274 b/.hypothesis/constants/f2b7f7724365f274
new file mode 100644
index 0000000000000000000000000000000000000000..7416c358c6601d7c1854453f50788887f49b1fcc
--- /dev/null
+++ b/.hypothesis/constants/f2b7f7724365f274
@@ -0,0 +1,4 @@
+# file: d:\portfolio engine\engine\report_builders\html_validation.py
+# hypothesis_version: 6.155.1
+
+[0.0, 0.05, 1.0, '#3fb950', '#e3b341', '#f85149', '', 'Model 2', 'Naive Mean', 'diagnostic', 'independence', 'overall_pass', 'p_value', 'significant', 'winner']
\ No newline at end of file
diff --git a/.hypothesis/constants/f38a507e37e72364 b/.hypothesis/constants/f38a507e37e72364
new file mode 100644
index 0000000000000000000000000000000000000000..20ee022ce87f454468c729320b2d1af0c5436d21
--- /dev/null
+++ b/.hypothesis/constants/f38a507e37e72364
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\execution.py
+# hypothesis_version: 6.155.1
+
+[-1.0, 0.0, 0.0001, 0.01, 0.015, 0.05, 0.1, 0.15, 0.5, 1.0, 2.5, 3.0, 4.0, 10000.0, 50000000.0, 7497, '%Y%m%d_%H%M%S', '127.0.0.1', 'AUC', 'Action', 'AlgoStrategy', 'ArrivalPx', 'BUY', 'CASH', 'Currency', 'DAY', 'Exchange', 'IB_ARRIVAL', 'LMT', 'LmtPrice', 'MKT', 'MOC', 'OrderType', 'Quantity', 'SELL', 'SMART', 'STK', 'SecType', 'Symbol', 'TWAP', 'TimeInForce', 'Twap', 'USD', 'VWAP', 'Vwap', 'adv', 'aggressive', 'base_price', 'broker', 'close', 'daily', 'db', 'diff', 'drift_only', 'execution_price', 'filled_val', 'high', 'impact_decimal', 'intended_val', 'low', 'monthly', 'open', 'quarterly', 'slippage_bps', 'twap', 'volatility', 'vwap', 'w', 'weekly', 'y']
\ No newline at end of file
diff --git a/.hypothesis/constants/f5dd818174a0d81f b/.hypothesis/constants/f5dd818174a0d81f
new file mode 100644
index 0000000000000000000000000000000000000000..991979d5499802a669a3c435c8bd89e62381e17f
--- /dev/null
+++ b/.hypothesis/constants/f5dd818174a0d81f
@@ -0,0 +1,4 @@
+# file: d:\portfolio engine\engine\data.py
+# hypothesis_version: 6.155.1
+
+[-99.99, -0.999, 0.0, 1e-08, 0.03, 0.04, 0.1, 0.2, 0.35, 0.5, 0.85, 1.0, 20.0, 100.0, 365.25, -999, 100, 127, 200, 252, 360, 365, 3650, 5000, '%Y%m%d', '%Y-%m-%d', ',', '-USD', '.', '.CSV', '.csv', '1950-01-03', '1971-02-05', '1974-12-31', '1977-01-03', '1980-01-01', '5d', '5factor', '=X', 'Adj Close', 'B', 'BAMLH0A0HYM2', 'CMA', 'Close', 'FRED_API_KEY', 'GC=F', 'GLD', 'HML', 'HYG', 'IEF', 'M', 'ME', 'MOM', 'Mkt-RF', 'NaN', 'Price', 'QQQ', 'RMW', 'SMB', 'SPY', 'TLT', '^', '^GSPC', '^IRX', '^IXIC', '^TNX', '^TYX', '^VIX', 'all', 'beta_63d', 'bond_metadata', 'close_price', 'cma_21d', 'coerce', 'coupon', 'date', 'dead_tickers', 'equity', 'extended_history', 'face', 'fcf_yield', 'freq', 'hml_21d', 'implied_volatility', 'inner', 'is_yield', 'latin-1', 'linear', 'maturity', 'max_date', 'mkt_rf_21d', 'mom', 'mom_1m', 'mom_3m', 'mom_6m', 'momentum', 'nan', 'observations', 'operating_margin', 'overlap_days', 'pe_ratio', 'proxy', 'proxy_mappings', 'proxy_start', 'ret', 'rev_5d', 'risk_free', 'rmw_21d', 'smb_21d', 'spread', 'stooq', 'sum', 'target', 'ticker', 'tickers', 'value', 'vol_21d', 'volatility', 'yield_pct']
\ No newline at end of file
diff --git a/.hypothesis/constants/f9c71be91c4cdcc0 b/.hypothesis/constants/f9c71be91c4cdcc0
new file mode 100644
index 0000000000000000000000000000000000000000..abb3ef4e6e2916effe23c49feb42f254382d9961
--- /dev/null
+++ b/.hypothesis/constants/f9c71be91c4cdcc0
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\math_utils.py
+# hypothesis_version: 6.155.1
+
+['values']
\ No newline at end of file
diff --git a/.hypothesis/constants/fd572665516c2703 b/.hypothesis/constants/fd572665516c2703
new file mode 100644
index 0000000000000000000000000000000000000000..014d7ba08df2316306d9695ab413de92f5ed4b46
--- /dev/null
+++ b/.hypothesis/constants/fd572665516c2703
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\alternative_data.py
+# hypothesis_version: 6.155.1
+
+[0.0, 200, './channel/item', 'Authorization', 'ignore', 'inputs', 'label', 'negative', 'neutral', 'positive', 'score', 'sentiment', 'title']
\ No newline at end of file
diff --git a/.hypothesis/constants/fd8bca75f0295ad9 b/.hypothesis/constants/fd8bca75f0295ad9
new file mode 100644
index 0000000000000000000000000000000000000000..555a2a2b63b2bf73bf8ac9c32af17b68dbf69300
--- /dev/null
+++ b/.hypothesis/constants/fd8bca75f0295ad9
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\solver.py
+# hypothesis_version: 6.155.1
+
+[-1.0, -0.005, 0.0, 1e-08, 0.0001, 0.0005, 0.0008, 0.001, 0.005, 0.01, 0.04, 0.1, 0.2, 0.3, 0.4, 0.5, 0.7, 0.85, 0.9, 0.95, 1.0, 1.05, 1.1, 1.3, 1.5, 1.8, 2.0, 3.0, 5.0, 100.0, 365.25, 100000.0, 50000000.0, 128, 150, 252, 3600, 'CASH', 'Custom', 'ai_sentiment', 'b_max', 'b_min', 'binding_constraints', 'bond_metadata', 'capm_rets', 'coupon', 'cov_mat', 'cvar', 'cvar_alpha', 'cvar_enabled', 'cvar_lambda', 'default_adv_proxy', 'display_constraints', 'ef_curve', 'engine_id', 'exp_rets', 'face', 'feature_importances', 'ff_betas', 'freq', 'garch_info', 'gross_leverage_cap', 'hist_rets', 'hmm_regime', 'ignore', 'js_alpha', 'lw_alpha', 'maturity', 'max_turnover', 'model_id', 'modified_duration', 'name', 'optimal', 'portfolio_duration', 'pre_tax_rets', 'relaxation_log', 'rets', 'risk_contributions', 'risk_free_rate', 'sector_limit', 'sector_map', 'severity_score', 'single_asset_max', 'single_asset_min', 'tax_enabled', 'tax_rate', 'tax_rate_lt', 'transaction_cost', 'vols']
\ No newline at end of file
diff --git a/.hypothesis/constants/fee88a55fdaf8fb1 b/.hypothesis/constants/fee88a55fdaf8fb1
new file mode 100644
index 0000000000000000000000000000000000000000..cf119adf58de8b4958ab8dbc383bd6d4a2db5b7d
--- /dev/null
+++ b/.hypothesis/constants/fee88a55fdaf8fb1
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\database.py
+# hypothesis_version: 6.155.1
+
+[1.0, 3600, 10000, 'DATABASE_URL', '__main__', 'append', 'daily_prices', 'daily_yields', 'date', 'finance_data.db', 'sqlite', 'stitch_metadata', 'ticker']
\ No newline at end of file
diff --git a/.hypothesis/constants/ff28d6f3661748c0 b/.hypothesis/constants/ff28d6f3661748c0
new file mode 100644
index 0000000000000000000000000000000000000000..75bb1f42d35560755342de81a7e16312ad6e3fbe
--- /dev/null
+++ b/.hypothesis/constants/ff28d6f3661748c0
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\config.py
+# hypothesis_version: 6.155.1
+
+[]
\ No newline at end of file
diff --git a/.hypothesis/constants/fffaef2bedef37c4 b/.hypothesis/constants/fffaef2bedef37c4
new file mode 100644
index 0000000000000000000000000000000000000000..29318dcd7158fb521b774f065b8938e24b3ed4c0
--- /dev/null
+++ b/.hypothesis/constants/fffaef2bedef37c4
@@ -0,0 +1,4 @@
+# file: D:\portfolio engine\engine\utils\metrics.py
+# hypothesis_version: 6.155.1
+
+[0.0, 0.0008, 'CASH', 'gross_lev', 'ignore', 'long_e', 'port_duration', 'port_yield', 'short_e']
\ No newline at end of file
diff --git a/.pytest_cache/.gitignore b/.pytest_cache/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..08a7f458f1f002823bc794c47ca1996a57e72c86
--- /dev/null
+++ b/.pytest_cache/.gitignore
@@ -0,0 +1,2 @@
+# Created by pytest automatically.
+*
diff --git a/.pytest_cache/CACHEDIR.TAG b/.pytest_cache/CACHEDIR.TAG
new file mode 100644
index 0000000000000000000000000000000000000000..fce15ad7eaa74e5682b644c84efb75334c112f95
--- /dev/null
+++ b/.pytest_cache/CACHEDIR.TAG
@@ -0,0 +1,4 @@
+Signature: 8a477f597d28d172789f06886806bc55
+# This file is a cache directory tag created by pytest.
+# For information about cache directory tags, see:
+# https://bford.info/cachedir/spec.html
diff --git a/.pytest_cache/README.md b/.pytest_cache/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..c7526af2448672de4537dfed042ed74daadb17bf
--- /dev/null
+++ b/.pytest_cache/README.md
@@ -0,0 +1,8 @@
+# pytest cache directory #
+
+This directory contains data from the pytest's cache plugin,
+which provides the `--lf` and `--ff` options, as well as the `cache` fixture.
+
+**Do not** commit this to version control.
+
+See [the docs](https://docs.pytest.org/en/stable/how-to/cache.html) for more information.
diff --git a/.pytest_cache/v/cache/lastfailed b/.pytest_cache/v/cache/lastfailed
new file mode 100644
index 0000000000000000000000000000000000000000..5de0ec358ba8ea9b91a4f07775b7e89282de4ee2
--- /dev/null
+++ b/.pytest_cache/v/cache/lastfailed
@@ -0,0 +1,13 @@
+{
+ "test_ws_integration.py::test_ws": true,
+ "test_world_model.py::test_pipeline_routing": true,
+ "scripts/test_solver.py::test_engine_runs_without_crashing": true,
+ "test_reproducibility.py::test_xgboost_determinism_across_5_runs": true,
+ "test_simulate.py::test_simulate": true,
+ "tests/test_forecast_generation.py::TestForecastGeneration::test_forecast_returns_shape": true,
+ "tests/test_runner.py": true,
+ "tests/test_ws_integration.py::test_ws": true,
+ "tests/test_integration.py::test_full_pipeline_with_real_data": true,
+ "research/test_dreamer.py": true,
+ "scripts/test_solver.py": true
+}
\ No newline at end of file
diff --git a/.pytest_cache/v/cache/nodeids b/.pytest_cache/v/cache/nodeids
new file mode 100644
index 0000000000000000000000000000000000000000..16c6da08777cb51de2b16c1e372affaa627d6362
--- /dev/null
+++ b/.pytest_cache/v/cache/nodeids
@@ -0,0 +1,193 @@
+[
+ "scripts/test_solver.py::test_engine_runs_without_crashing",
+ "test_advanced_paths.py::test_monte_carlo_distribution_spread",
+ "test_advanced_paths.py::test_monte_carlo_path_geometry",
+ "test_advanced_paths.py::test_mpc_valid_trajectory_generation",
+ "test_analytics.py::test_expanding_window_tax_liquidation",
+ "test_analytics.py::test_israelsen_sharpe_negative",
+ "test_analytics.py::test_israelsen_sharpe_positive",
+ "test_analytics.py::test_israelsen_sharpe_zero_vol",
+ "test_analytics.py::test_liquidity_score",
+ "test_analytics.py::test_lot_manager_tax_liquidation",
+ "test_analytics.py::test_portfolio_gross_metrics",
+ "test_arima.py::test_arima_frequency_gate_aborts_on_daily",
+ "test_arima.py::test_arima_pure_noise_rejection",
+ "test_arima.py::test_arima_short_series_fallback",
+ "test_arima.py::test_arima_valid_autoregressive_signal",
+ "test_bl_multi_view.py::test_bl_conflicting_views_domination",
+ "test_bl_multi_view.py::test_bl_empty_views_returns_prior",
+ "test_bl_multi_view.py::test_bl_equal_precision_averaging",
+ "test_bl_multi_view.py::test_bl_infinite_uncertainty_rejection",
+ "test_bsts.py::test_bsts_frequency_gate_aborts_on_daily",
+ "test_bsts.py::test_bsts_short_series_fallback",
+ "test_bsts.py::test_bsts_valid_signal",
+ "test_data.py::test_fetch_risk_free_rate_falls_back_when_cache_missing",
+ "test_data.py::test_fetch_risk_free_rate_reads_latest_cached_value",
+ "test_e2e.py::TestCache::test_save_and_load_roundtrip",
+ "test_e2e.py::TestDifferentiableLayer::test_forward_produces_valid_weights",
+ "test_e2e.py::TestDifferentiableLayer::test_gradient_flows_through_mu",
+ "test_e2e.py::TestDifferentiableLayer::test_short_allowed",
+ "test_e2e.py::TestForecastNetwork::test_forward_shapes",
+ "test_e2e.py::TestSolverIntegration::test_warm_start_injection",
+ "test_e2e.py::TestTrainer::test_predict_returns_valid_series",
+ "test_e2e.py::TestTrainer::test_training_runs_without_error",
+ "test_exact_risk_parity.py::test_exact_risk_parity_contributions",
+ "test_global.py::test_build_macro_dynamic_benchmarks",
+ "test_global.py::test_monte_carlo_path_horizon",
+ "test_global.py::test_trading_days_annualization_scaling",
+ "test_integration.py::test_full_pipeline_with_real_data",
+ "test_models.py::test_capm_monthly_vs_daily",
+ "test_models.py::test_garch_dynamic_correlation_structure",
+ "test_models.py::test_garch_stationarity",
+ "test_models.py::test_model_capm",
+ "test_models.py::test_regime_stress_cov_is_psd",
+ "test_optimize.py::test_build_and_optimize_returns_physically_feasible_weights",
+ "test_optimize.py::test_build_and_optimize_universal_bl_routing",
+ "test_optimize.py::test_check_and_fix_bounds_hmm_leverage_disable",
+ "test_optimize.py::test_check_and_fix_bounds_min_exceeds_max",
+ "test_optimize.py::test_efficient_frontier_monotonicity",
+ "test_optimize.py::test_garch_cvar_combined_produces_feasible_portfolio",
+ "test_optimize.py::test_hrp_turnover_constraint_respected",
+ "test_optimize.py::test_hrp_with_tax_blending",
+ "test_optimize.py::test_multi_period_optimize_returns_valid_weights",
+ "test_optimize.py::test_optimizer_constraints_hold_across_random_seeds",
+ "test_optimize.py::test_optimizer_is_deterministic_for_fixed_inputs",
+ "test_optimize.py::test_realistic_ml_tax_short_cvar_portfolio_is_feasible",
+ "test_options_sentiment.py::test_fetch_options_sentiment_no_options",
+ "test_options_sentiment.py::test_fetch_options_sentiment_success",
+ "test_overlay.py::test_optimize_futures_overlay_preserves_core_weights",
+ "test_overlay.py::test_optimize_futures_overlay_respects_margin_headroom",
+ "test_overlay.py::test_optimize_futures_overlay_returns_empty_when_no_cash",
+ "test_p2.py::test_transformer_model",
+ "test_regime_detection.py::test_detect_volatility_regime_sorting",
+ "test_regime_detection.py::test_dynamic_risk_aversion_vix_complacent",
+ "test_regime_detection.py::test_dynamic_risk_aversion_vix_crisis",
+ "test_reproducibility.py::test_xgboost_determinism_across_5_runs",
+ "test_risk_attribution.py::test_cvar_fallback_branch",
+ "test_risk_attribution.py::test_stress_correlation_bounds",
+ "test_runner.py::test_get_risk_factor_mapping",
+ "test_runner.py::test_headless_runner_defaults",
+ "test_runner.py::test_headless_runner_globalization_flags",
+ "test_runner.py::test_interactive_wizard_maps_user_inputs",
+ "test_simulate.py::test_simulate",
+ "test_uc.py::test_unobserved_components_fit",
+ "test_validation.py::test_christoffersen_flags_too_few_var_breaches",
+ "test_validation.py::test_christoffersen_test_basic",
+ "test_validation.py::test_diebold_mariano_inconclusive",
+ "test_validation.py::test_diebold_mariano_invalid_loss",
+ "test_validation.py::test_diebold_mariano_mae",
+ "test_validation.py::test_diebold_mariano_mse",
+ "test_validation.py::test_diebold_mariano_small_sample",
+ "test_validation.py::test_validation_report_explains_conservative_var_failure",
+ "test_validation.py::test_validation_report_keeps_renamed_model_winner",
+ "test_world_model.py::test_pipeline_routing",
+ "test_world_model.py::test_trainer_integration",
+ "test_world_model.py::test_world_model_instantiation",
+ "test_ws_integration.py::test_ws",
+ "tests/test_advanced_paths.py::test_monte_carlo_distribution_spread",
+ "tests/test_advanced_paths.py::test_monte_carlo_path_geometry",
+ "tests/test_advanced_paths.py::test_mpc_valid_trajectory_generation",
+ "tests/test_analytics.py::test_expanding_window_tax_liquidation",
+ "tests/test_analytics.py::test_israelsen_sharpe_negative",
+ "tests/test_analytics.py::test_israelsen_sharpe_positive",
+ "tests/test_analytics.py::test_israelsen_sharpe_zero_vol",
+ "tests/test_analytics.py::test_liquidity_score",
+ "tests/test_analytics.py::test_lot_manager_tax_liquidation",
+ "tests/test_analytics.py::test_lot_manager_thread_safety",
+ "tests/test_analytics.py::test_portfolio_gross_metrics",
+ "tests/test_audit.py::test_audit",
+ "tests/test_backtest_delisting.py::test_delisting_terminal_returns",
+ "tests/test_bl_multi_view.py::test_bl_conflicting_views_domination",
+ "tests/test_bl_multi_view.py::test_bl_empty_views_returns_prior",
+ "tests/test_bl_multi_view.py::test_bl_equal_precision_averaging",
+ "tests/test_bl_multi_view.py::test_bl_infinite_uncertainty_rejection",
+ "tests/test_bsts.py::test_bsts_frequency_gate_aborts_on_daily",
+ "tests/test_bsts.py::test_bsts_short_series_fallback",
+ "tests/test_bsts.py::test_bsts_valid_signal",
+ "tests/test_config.py::test_app_config_invalid_bounds",
+ "tests/test_config.py::test_app_config_invalid_sector_limit",
+ "tests/test_config.py::test_app_config_invalid_tax_rates",
+ "tests/test_config.py::test_app_config_valid_bounds",
+ "tests/test_data.py::test_clean_price_series_stale_and_weekend_data",
+ "tests/test_data.py::test_ewm_incremental_initialization",
+ "tests/test_data.py::test_fetch_risk_free_rate_falls_back_when_cache_missing",
+ "tests/test_data.py::test_fetch_risk_free_rate_reads_latest_cached_value",
+ "tests/test_db_e2e.py::test_db_end_to_end_pipeline",
+ "tests/test_e2e.py::TestCache::test_save_and_load_roundtrip",
+ "tests/test_e2e.py::TestDifferentiableLayer::test_forward_produces_valid_weights",
+ "tests/test_e2e.py::TestDifferentiableLayer::test_gradient_flows_through_mu",
+ "tests/test_e2e.py::TestDifferentiableLayer::test_short_allowed",
+ "tests/test_e2e.py::TestForecastNetwork::test_forward_shapes",
+ "tests/test_e2e.py::TestSolverIntegration::test_warm_start_injection",
+ "tests/test_e2e.py::TestTrainer::test_predict_returns_valid_series",
+ "tests/test_e2e.py::TestTrainer::test_training_runs_without_error",
+ "tests/test_fixed_income.py::test_accrued_interest",
+ "tests/test_fixed_income.py::test_bond_covariance_from_yields",
+ "tests/test_fixed_income.py::test_bond_pricing_inverse",
+ "tests/test_fixed_income.py::test_bond_pricing_zero_yield",
+ "tests/test_fixed_income.py::test_bond_risk_metrics",
+ "tests/test_fixed_income.py::test_build_yield_curve",
+ "tests/test_fixed_income.py::test_is_fixed_income",
+ "tests/test_forecast_generation.py::TestForecastGeneration::test_forecast_returns_shape",
+ "tests/test_global.py::test_build_macro_dynamic_benchmarks",
+ "tests/test_global.py::test_monte_carlo_path_horizon",
+ "tests/test_global.py::test_trading_days_annualization_scaling",
+ "tests/test_integration.py::test_full_pipeline_with_real_data",
+ "tests/test_models.py::test_capm_monthly_vs_daily",
+ "tests/test_models.py::test_garch_dynamic_correlation_structure",
+ "tests/test_models.py::test_garch_stationarity",
+ "tests/test_models.py::test_model_capm",
+ "tests/test_models.py::test_regime_stress_cov_is_psd",
+ "tests/test_new_features.py::test_exact_risk_parity_equal_contributions",
+ "tests/test_new_features.py::test_options_sentiment_no_options_available",
+ "tests/test_new_features.py::test_options_sentiment_success",
+ "tests/test_new_features.py::test_transformer_train_and_predict",
+ "tests/test_optimize.py::test_build_and_optimize_returns_physically_feasible_weights",
+ "tests/test_optimize.py::test_build_and_optimize_universal_bl_routing",
+ "tests/test_optimize.py::test_check_and_fix_bounds_hmm_leverage_disable",
+ "tests/test_optimize.py::test_check_and_fix_bounds_min_exceeds_max",
+ "tests/test_optimize.py::test_efficient_frontier_monotonicity",
+ "tests/test_optimize.py::test_garch_cvar_combined_produces_feasible_portfolio",
+ "tests/test_optimize.py::test_hrp_property_symmetric_allocation",
+ "tests/test_optimize.py::test_hrp_turnover_constraint_respected",
+ "tests/test_optimize.py::test_hrp_with_tax_blending",
+ "tests/test_optimize.py::test_jacobian_sensitivity_respects_bounds",
+ "tests/test_optimize.py::test_multi_period_optimize_returns_valid_weights",
+ "tests/test_optimize.py::test_optimizer_constraints_hold_across_random_seeds",
+ "tests/test_optimize.py::test_optimizer_is_deterministic_for_fixed_inputs",
+ "tests/test_optimize.py::test_realistic_ml_tax_short_cvar_portfolio_is_feasible",
+ "tests/test_overlay.py::test_optimize_futures_overlay_preserves_core_weights",
+ "tests/test_overlay.py::test_optimize_futures_overlay_respects_margin_headroom",
+ "tests/test_overlay.py::test_optimize_futures_overlay_returns_empty_when_no_cash",
+ "tests/test_regime_detection.py::test_detect_volatility_regime_sorting",
+ "tests/test_regime_detection.py::test_detect_volatility_regime_zeros_boundary",
+ "tests/test_regime_detection.py::test_dynamic_risk_aversion_vix_complacent",
+ "tests/test_regime_detection.py::test_dynamic_risk_aversion_vix_crisis",
+ "tests/test_reproducibility.py::test_xgboost_determinism_across_5_runs",
+ "tests/test_risk_attribution.py::test_cvar_fallback_branch",
+ "tests/test_risk_attribution.py::test_stress_correlation_bounds",
+ "tests/test_risk_monitor.py::test_risk_monitor_intraday_drawdown",
+ "tests/test_risk_monitor.py::test_risk_monitor_margin_ratio",
+ "tests/test_simulate.py::test_simulate",
+ "tests/test_synthetic_stitcher.py::test_process_contract_path",
+ "tests/test_synthetic_stitcher.py::test_process_contract_path_empty",
+ "tests/test_uc.py::test_unobserved_components_fit",
+ "tests/test_validation.py::test_christoffersen_fails_independence_on_clusters",
+ "tests/test_validation.py::test_christoffersen_flags_too_few_var_breaches",
+ "tests/test_validation.py::test_christoffersen_test_basic",
+ "tests/test_validation.py::test_diebold_mariano_inconclusive",
+ "tests/test_validation.py::test_diebold_mariano_invalid_loss",
+ "tests/test_validation.py::test_diebold_mariano_mae",
+ "tests/test_validation.py::test_diebold_mariano_mse",
+ "tests/test_validation.py::test_diebold_mariano_small_sample",
+ "tests/test_validation.py::test_monte_carlo_is_deterministic[123456]",
+ "tests/test_validation.py::test_monte_carlo_is_deterministic[1337]",
+ "tests/test_validation.py::test_monte_carlo_is_deterministic[42]",
+ "tests/test_validation.py::test_monte_carlo_is_deterministic[7]",
+ "tests/test_validation.py::test_monte_carlo_is_deterministic[9999]",
+ "tests/test_validation.py::test_validation_report_explains_conservative_var_failure",
+ "tests/test_validation.py::test_validation_report_keeps_renamed_model_winner",
+ "tests/test_world_model.py::test_trainer_integration",
+ "tests/test_world_model.py::test_world_model_instantiation",
+ "tests/test_ws_integration.py::test_ws"
+]
\ No newline at end of file
diff --git a/.ruff_cache/.gitignore b/.ruff_cache/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..b100327770759f0efb7859fe78aca4801d69ed61
--- /dev/null
+++ b/.ruff_cache/.gitignore
@@ -0,0 +1,2 @@
+# Automatically created by ruff.
+*
diff --git a/.ruff_cache/0.15.13/11417678610749621713 b/.ruff_cache/0.15.13/11417678610749621713
new file mode 100644
index 0000000000000000000000000000000000000000..c8e56f1be96680b561ae7531a70dbb38dacd88d6
Binary files /dev/null and b/.ruff_cache/0.15.13/11417678610749621713 differ
diff --git a/.ruff_cache/0.15.13/12152993876385125533 b/.ruff_cache/0.15.13/12152993876385125533
new file mode 100644
index 0000000000000000000000000000000000000000..f5e7ce70e0ffa53cde8cabca97a5f978d79ed209
Binary files /dev/null and b/.ruff_cache/0.15.13/12152993876385125533 differ
diff --git a/.ruff_cache/0.15.13/13893294975388724936 b/.ruff_cache/0.15.13/13893294975388724936
new file mode 100644
index 0000000000000000000000000000000000000000..2f6df06922ffee0d871835ef35f8c2b6f2e603b0
Binary files /dev/null and b/.ruff_cache/0.15.13/13893294975388724936 differ
diff --git a/.ruff_cache/0.15.13/16223255019592565776 b/.ruff_cache/0.15.13/16223255019592565776
new file mode 100644
index 0000000000000000000000000000000000000000..99f46a20dfc46646ae1353d4003bab676fa0d5f4
Binary files /dev/null and b/.ruff_cache/0.15.13/16223255019592565776 differ
diff --git a/.ruff_cache/0.15.13/2404649250244342398 b/.ruff_cache/0.15.13/2404649250244342398
new file mode 100644
index 0000000000000000000000000000000000000000..0cb1e20f1a3e381d3edb23b029e903097f1e9e54
Binary files /dev/null and b/.ruff_cache/0.15.13/2404649250244342398 differ
diff --git a/.ruff_cache/CACHEDIR.TAG b/.ruff_cache/CACHEDIR.TAG
new file mode 100644
index 0000000000000000000000000000000000000000..bc1ecb967a482524e7736038de0df6e08f9ee452
--- /dev/null
+++ b/.ruff_cache/CACHEDIR.TAG
@@ -0,0 +1 @@
+Signature: 8a477f597d28d172789f06886806bc55
\ No newline at end of file
diff --git a/hf_push.py b/hf_push.py
index 0a210cf89eb27f7429e8190abe5594c19b401f9a..c8aa4e252aa081ba041c56a82b7285e11d707fd8 100644
--- a/hf_push.py
+++ b/hf_push.py
@@ -1,17 +1,19 @@
-from huggingface_hub import HfApi
-import os
-
-token = "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"
-api = HfApi(token=token)
-
-print("Starting push to Hugging Face...")
-try:
- api.upload_folder(
- folder_path="d:/portfolio engine/engine",
- repo_id="engineportf/portfolio_opt",
- repo_type="space",
- ignore_patterns=["*.git*", "*__pycache__*", "*.env", "*.sqlite3", "*.db", "hf_push.py", ".gemini*", "portfolio_db.sqlite", "app_state.json", "*.log", "data/*", "logs/*", "PortableGit*", "*.pkl", "*.exe", "*.dll", "*.mo", "*.so"]
- )
- print("Successfully pushed to Hugging Face Space: engineportf/portfolio_opt")
-except Exception as e:
- print(f"Error pushing to Hugging Face: {e}")
+import os
+from huggingface_hub import HfApi
+
+def push_to_huggingface():
+ token = os.environ.get("HF_TOKEN")
+ if not token:
+ raise ValueError("Please set the HF_TOKEN environment variable.")
+ api = HfApi(token=token)
+ print("Pushing to Hugging Face...")
+ api.upload_folder(
+ folder_path='.',
+ repo_id='engineportf/portfolio_opt',
+ repo_type='space',
+ ignore_patterns=['.git/*', '.mypy_cache/*', 'PortableGit/*', '__pycache__/*', 'venv/*', 'env/*', '.env']
+ )
+ print("Successfully pushed to Hugging Face!")
+
+if __name__ == "__main__":
+ push_to_huggingface()
diff --git a/output/diagnostics/trace_0233cbce-5656-41f6-ba71-a151ca203fc3.json b/output/diagnostics/trace_0233cbce-5656-41f6-ba71-a151ca203fc3.json
new file mode 100644
index 0000000000000000000000000000000000000000..eb4f2544c295143c0eb49dc42db3338471ecb6b0
--- /dev/null
+++ b/output/diagnostics/trace_0233cbce-5656-41f6-ba71-a151ca203fc3.json
@@ -0,0 +1,21 @@
+{
+ "task_id": "0233cbce-5656-41f6-ba71-a151ca203fc3",
+ "last_updated": "2026-06-22T19:00:50.999994",
+ "flags": [
+ {
+ "timestamp": "2026-06-22T19:00:09.551822",
+ "flag": "TASK_INIT",
+ "details": "Target Universe: ['SPY', 'TLT', 'GLD', 'QQQ', 'IWM', 'EFA']"
+ },
+ {
+ "timestamp": "2026-06-22T19:00:09.572978",
+ "flag": "BACKEND_START",
+ "details": "Running compute engine locally"
+ },
+ {
+ "timestamp": "2026-06-22T19:00:50.993315",
+ "flag": "HF_BACKEND_COMPLETE",
+ "details": "Math engine finished"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/output/diagnostics/trace_09104377-3dd0-4190-99b0-9b66b6b50439.json b/output/diagnostics/trace_09104377-3dd0-4190-99b0-9b66b6b50439.json
new file mode 100644
index 0000000000000000000000000000000000000000..7e04e4f898487287551afa58b3755ad9545d802b
--- /dev/null
+++ b/output/diagnostics/trace_09104377-3dd0-4190-99b0-9b66b6b50439.json
@@ -0,0 +1,21 @@
+{
+ "task_id": "09104377-3dd0-4190-99b0-9b66b6b50439",
+ "last_updated": "2026-06-19T19:19:54.932556",
+ "flags": [
+ {
+ "timestamp": "2026-06-19T19:19:30.484002",
+ "flag": "TASK_INIT",
+ "details": "Target Universe: None"
+ },
+ {
+ "timestamp": "2026-06-19T19:19:30.508537",
+ "flag": "BACKEND_START",
+ "details": "Running compute engine locally"
+ },
+ {
+ "timestamp": "2026-06-19T19:19:54.924601",
+ "flag": "HF_BACKEND_COMPLETE",
+ "details": "Math engine finished"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/output/diagnostics/trace_0a1604ad-a008-4b7e-bf39-6503eecd2aed.json b/output/diagnostics/trace_0a1604ad-a008-4b7e-bf39-6503eecd2aed.json
new file mode 100644
index 0000000000000000000000000000000000000000..a474efbdc4c069c958d2e5729b79bce2257b41e6
--- /dev/null
+++ b/output/diagnostics/trace_0a1604ad-a008-4b7e-bf39-6503eecd2aed.json
@@ -0,0 +1,21 @@
+{
+ "task_id": "0a1604ad-a008-4b7e-bf39-6503eecd2aed",
+ "last_updated": "2026-06-12T21:09:38.796343",
+ "flags": [
+ {
+ "timestamp": "2026-06-12T21:08:24.163329",
+ "flag": "TASK_INIT",
+ "details": "Target Universe: None"
+ },
+ {
+ "timestamp": "2026-06-12T21:08:24.189009",
+ "flag": "BACKEND_START",
+ "details": "Running compute engine locally"
+ },
+ {
+ "timestamp": "2026-06-12T21:09:38.785980",
+ "flag": "HF_BACKEND_COMPLETE",
+ "details": "Math engine finished"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/output/diagnostics/trace_0c884e58-e06e-415e-b972-351d4a4d1264.json b/output/diagnostics/trace_0c884e58-e06e-415e-b972-351d4a4d1264.json
new file mode 100644
index 0000000000000000000000000000000000000000..67eb9fa08e116e68b7289d4ba4755e44061266d8
--- /dev/null
+++ b/output/diagnostics/trace_0c884e58-e06e-415e-b972-351d4a4d1264.json
@@ -0,0 +1,21 @@
+{
+ "task_id": "0c884e58-e06e-415e-b972-351d4a4d1264",
+ "last_updated": "2026-06-13T08:35:18.233111",
+ "flags": [
+ {
+ "timestamp": "2026-06-13T08:34:45.552066",
+ "flag": "TASK_INIT",
+ "details": "Target Universe: None"
+ },
+ {
+ "timestamp": "2026-06-13T08:34:45.577355",
+ "flag": "BACKEND_START",
+ "details": "Running compute engine locally"
+ },
+ {
+ "timestamp": "2026-06-13T08:35:18.222598",
+ "flag": "HF_BACKEND_COMPLETE",
+ "details": "Math engine finished"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/output/diagnostics/trace_0fa7fb9d-c0ba-453b-b62d-3e75038c1626.json b/output/diagnostics/trace_0fa7fb9d-c0ba-453b-b62d-3e75038c1626.json
new file mode 100644
index 0000000000000000000000000000000000000000..d8e8582dbbee49e3edea5ec1fda7d03758b410a3
--- /dev/null
+++ b/output/diagnostics/trace_0fa7fb9d-c0ba-453b-b62d-3e75038c1626.json
@@ -0,0 +1,21 @@
+{
+ "task_id": "0fa7fb9d-c0ba-453b-b62d-3e75038c1626",
+ "last_updated": "2026-06-12T21:52:35.733237",
+ "flags": [
+ {
+ "timestamp": "2026-06-12T21:51:45.089257",
+ "flag": "TASK_INIT",
+ "details": "Target Universe: None"
+ },
+ {
+ "timestamp": "2026-06-12T21:51:45.117346",
+ "flag": "BACKEND_START",
+ "details": "Running compute engine locally"
+ },
+ {
+ "timestamp": "2026-06-12T21:52:35.719447",
+ "flag": "HF_BACKEND_COMPLETE",
+ "details": "Math engine finished"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/output/diagnostics/trace_17e87299-1a17-4c43-b97c-e90b74342432.json b/output/diagnostics/trace_17e87299-1a17-4c43-b97c-e90b74342432.json
new file mode 100644
index 0000000000000000000000000000000000000000..fbfc6ddc447f6c521a4456b60fe74a9e6aaa27f6
--- /dev/null
+++ b/output/diagnostics/trace_17e87299-1a17-4c43-b97c-e90b74342432.json
@@ -0,0 +1,21 @@
+{
+ "task_id": "17e87299-1a17-4c43-b97c-e90b74342432",
+ "last_updated": "2026-06-13T09:34:11.910383",
+ "flags": [
+ {
+ "timestamp": "2026-06-13T09:33:31.867265",
+ "flag": "TASK_INIT",
+ "details": "Target Universe: None"
+ },
+ {
+ "timestamp": "2026-06-13T09:33:31.892788",
+ "flag": "BACKEND_START",
+ "details": "Running compute engine locally"
+ },
+ {
+ "timestamp": "2026-06-13T09:34:11.899080",
+ "flag": "HF_BACKEND_COMPLETE",
+ "details": "Math engine finished"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/output/diagnostics/trace_29b496c4-817d-449d-b216-f11d096f60a4.json b/output/diagnostics/trace_29b496c4-817d-449d-b216-f11d096f60a4.json
new file mode 100644
index 0000000000000000000000000000000000000000..1d2674b3ab8164106c842e286876852e9d6e895b
--- /dev/null
+++ b/output/diagnostics/trace_29b496c4-817d-449d-b216-f11d096f60a4.json
@@ -0,0 +1,21 @@
+{
+ "task_id": "29b496c4-817d-449d-b216-f11d096f60a4",
+ "last_updated": "2026-06-13T09:15:01.526150",
+ "flags": [
+ {
+ "timestamp": "2026-06-13T09:14:18.003906",
+ "flag": "TASK_INIT",
+ "details": "Target Universe: None"
+ },
+ {
+ "timestamp": "2026-06-13T09:14:18.035263",
+ "flag": "BACKEND_START",
+ "details": "Running compute engine locally"
+ },
+ {
+ "timestamp": "2026-06-13T09:15:01.516686",
+ "flag": "FATAL_ERROR",
+ "details": "loop of ufunc does not support argument 0 of type numpy.float64 which has no callable rint method\n\nTraceback:\nAttributeError: 'numpy.float64' object has no attribute 'rint'\n\nThe above exception was the direct cause of the following exception:\n\nTraceback (most recent call last):\n File \"D:\\portfolio engine\\engine\\app.py\", line 281, in _run_optimization\n result = core_engine.run_engine(overrides=overrides, serve=False, task_id=tid)\n File \"D:\\portfolio engine\\engine\\core_engine.py\", line 522, i"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/output/diagnostics/trace_3dacea16-f5ae-4eb0-9697-27e1af45c952.json b/output/diagnostics/trace_3dacea16-f5ae-4eb0-9697-27e1af45c952.json
new file mode 100644
index 0000000000000000000000000000000000000000..11fb00830aa5dc6c13998524a1489d7bd60f77ff
--- /dev/null
+++ b/output/diagnostics/trace_3dacea16-f5ae-4eb0-9697-27e1af45c952.json
@@ -0,0 +1,21 @@
+{
+ "task_id": "3dacea16-f5ae-4eb0-9697-27e1af45c952",
+ "last_updated": "2026-06-12T21:20:02.333326",
+ "flags": [
+ {
+ "timestamp": "2026-06-12T21:19:11.794317",
+ "flag": "TASK_INIT",
+ "details": "Target Universe: None"
+ },
+ {
+ "timestamp": "2026-06-12T21:19:11.826301",
+ "flag": "BACKEND_START",
+ "details": "Running compute engine locally"
+ },
+ {
+ "timestamp": "2026-06-12T21:20:02.322223",
+ "flag": "HF_BACKEND_COMPLETE",
+ "details": "Math engine finished"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/output/diagnostics/trace_444e1f10-bdc7-4479-b03a-a32e4c97870b.json b/output/diagnostics/trace_444e1f10-bdc7-4479-b03a-a32e4c97870b.json
new file mode 100644
index 0000000000000000000000000000000000000000..ddbf4c36b74c263009038ad644423f4643b0871d
--- /dev/null
+++ b/output/diagnostics/trace_444e1f10-bdc7-4479-b03a-a32e4c97870b.json
@@ -0,0 +1,21 @@
+{
+ "task_id": "444e1f10-bdc7-4479-b03a-a32e4c97870b",
+ "last_updated": "2026-06-23T08:51:42.136874",
+ "flags": [
+ {
+ "timestamp": "2026-06-23T08:50:31.425888",
+ "flag": "TASK_INIT",
+ "details": "Target Universe: ['SPY', 'TLT', 'GLD', 'AAPL', 'MSFT']"
+ },
+ {
+ "timestamp": "2026-06-23T08:50:31.450390",
+ "flag": "BACKEND_START",
+ "details": "Running compute engine locally"
+ },
+ {
+ "timestamp": "2026-06-23T08:51:42.129992",
+ "flag": "HF_BACKEND_COMPLETE",
+ "details": "Math engine finished"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/output/diagnostics/trace_4b4f9fc7-46f6-4d65-8f13-02cd0b558759.json b/output/diagnostics/trace_4b4f9fc7-46f6-4d65-8f13-02cd0b558759.json
new file mode 100644
index 0000000000000000000000000000000000000000..1cef57601210d9db54f77d1a2a723456d718bf48
--- /dev/null
+++ b/output/diagnostics/trace_4b4f9fc7-46f6-4d65-8f13-02cd0b558759.json
@@ -0,0 +1,21 @@
+{
+ "task_id": "4b4f9fc7-46f6-4d65-8f13-02cd0b558759",
+ "last_updated": "2026-06-22T19:05:40.816621",
+ "flags": [
+ {
+ "timestamp": "2026-06-22T19:05:08.101611",
+ "flag": "TASK_INIT",
+ "details": "Target Universe: ['SPY', 'TLT', 'GLD', 'AAPL', 'MSFT']"
+ },
+ {
+ "timestamp": "2026-06-22T19:05:08.123176",
+ "flag": "BACKEND_START",
+ "details": "Running compute engine locally"
+ },
+ {
+ "timestamp": "2026-06-22T19:05:40.810748",
+ "flag": "HF_BACKEND_COMPLETE",
+ "details": "Math engine finished"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/output/diagnostics/trace_4e2ae4ab-541a-4c7b-b018-767a61e1baa9.json b/output/diagnostics/trace_4e2ae4ab-541a-4c7b-b018-767a61e1baa9.json
new file mode 100644
index 0000000000000000000000000000000000000000..f8a7a7249bcc07c2782883b3bd0c49530ba54168
--- /dev/null
+++ b/output/diagnostics/trace_4e2ae4ab-541a-4c7b-b018-767a61e1baa9.json
@@ -0,0 +1,21 @@
+{
+ "task_id": "4e2ae4ab-541a-4c7b-b018-767a61e1baa9",
+ "last_updated": "2026-06-19T20:09:34.330522",
+ "flags": [
+ {
+ "timestamp": "2026-06-19T20:09:17.555538",
+ "flag": "TASK_INIT",
+ "details": "Target Universe: ['HTO.AT', 'AAPL', 'MSFT', 'OPAP.AT']"
+ },
+ {
+ "timestamp": "2026-06-19T20:09:17.574221",
+ "flag": "BACKEND_START",
+ "details": "Running compute engine locally"
+ },
+ {
+ "timestamp": "2026-06-19T20:09:34.322369",
+ "flag": "HF_BACKEND_COMPLETE",
+ "details": "Math engine finished"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/output/diagnostics/trace_501902d7-0abc-4ad5-8f94-4360f52eb8a8.json b/output/diagnostics/trace_501902d7-0abc-4ad5-8f94-4360f52eb8a8.json
new file mode 100644
index 0000000000000000000000000000000000000000..6226031460d2b5fd18ce2667b92eb8967a769b28
--- /dev/null
+++ b/output/diagnostics/trace_501902d7-0abc-4ad5-8f94-4360f52eb8a8.json
@@ -0,0 +1,21 @@
+{
+ "task_id": "501902d7-0abc-4ad5-8f94-4360f52eb8a8",
+ "last_updated": "2026-06-19T19:11:19.713170",
+ "flags": [
+ {
+ "timestamp": "2026-06-19T19:10:46.012636",
+ "flag": "TASK_INIT",
+ "details": "Target Universe: None"
+ },
+ {
+ "timestamp": "2026-06-19T19:10:46.031134",
+ "flag": "BACKEND_START",
+ "details": "Running compute engine locally"
+ },
+ {
+ "timestamp": "2026-06-19T19:11:19.707777",
+ "flag": "FATAL_ERROR",
+ "details": "\n\u001b[91mOptimization Failed \u2014 All relaxation stages exhausted.\u001b[0m\n\nTraceback:\nTraceback (most recent call last):\n File \"D:\\portfolio engine\\engine\\app.py\", line 572, in _run_optimization\n result = core_engine.run_engine(overrides=overrides, serve=False, task_id=tid)\n File \"D:\\portfolio engine\\engine\\core_engine.py\", line 536, in run_engine\n val_bundle = pipeline.run_validation()\n File \"D:\\portfolio engine\\engine\\core_engine.py\", line 356, in run_validation\n opt_res_cv = build_and_opti"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/output/diagnostics/trace_63ff04c1-e234-44a1-852d-6851557ae81a.json b/output/diagnostics/trace_63ff04c1-e234-44a1-852d-6851557ae81a.json
new file mode 100644
index 0000000000000000000000000000000000000000..76d838d022a01a5ec4a50555b8cbc2963d8556e0
--- /dev/null
+++ b/output/diagnostics/trace_63ff04c1-e234-44a1-852d-6851557ae81a.json
@@ -0,0 +1,21 @@
+{
+ "task_id": "63ff04c1-e234-44a1-852d-6851557ae81a",
+ "last_updated": "2026-06-13T08:43:28.865711",
+ "flags": [
+ {
+ "timestamp": "2026-06-13T08:43:05.806659",
+ "flag": "TASK_INIT",
+ "details": "Target Universe: None"
+ },
+ {
+ "timestamp": "2026-06-13T08:43:05.846841",
+ "flag": "BACKEND_START",
+ "details": "Running compute engine locally"
+ },
+ {
+ "timestamp": "2026-06-13T08:43:28.855995",
+ "flag": "HF_BACKEND_COMPLETE",
+ "details": "Math engine finished"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/output/diagnostics/trace_696c46f3-b08a-4e26-9083-31e608e20f5d.json b/output/diagnostics/trace_696c46f3-b08a-4e26-9083-31e608e20f5d.json
new file mode 100644
index 0000000000000000000000000000000000000000..e77b1280fd56185eaddfb081408217eb78ac2601
--- /dev/null
+++ b/output/diagnostics/trace_696c46f3-b08a-4e26-9083-31e608e20f5d.json
@@ -0,0 +1,21 @@
+{
+ "task_id": "696c46f3-b08a-4e26-9083-31e608e20f5d",
+ "last_updated": "2026-06-19T19:18:51.827265",
+ "flags": [
+ {
+ "timestamp": "2026-06-19T19:18:46.805033",
+ "flag": "TASK_INIT",
+ "details": "Target Universe: None"
+ },
+ {
+ "timestamp": "2026-06-19T19:18:46.826431",
+ "flag": "BACKEND_START",
+ "details": "Running compute engine locally"
+ },
+ {
+ "timestamp": "2026-06-19T19:18:51.820917",
+ "flag": "FATAL_ERROR",
+ "details": "Invalid or hallucinated tickers detected: ['OPAP.AT']. Please remove or correct them.\n\nTraceback:\nTraceback (most recent call last):\n File \"D:\\portfolio engine\\engine\\app.py\", line 572, in _run_optimization\n result = core_engine.run_engine(overrides=overrides, serve=False, task_id=tid)\n File \"D:\\portfolio engine\\engine\\core_engine.py\", line 523, in run_engine\n pipeline.load_data()\n ~~~~~~~~~~~~~~~~~~^^\n File \"D:\\portfolio engine\\engine\\core_engine.py\", line 292, in load_data\n snap"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/output/diagnostics/trace_74498be8-82d0-4453-b155-c4aaf2724baf.json b/output/diagnostics/trace_74498be8-82d0-4453-b155-c4aaf2724baf.json
new file mode 100644
index 0000000000000000000000000000000000000000..d354e25df2d770614a1a1306881230e9aff7fcad
--- /dev/null
+++ b/output/diagnostics/trace_74498be8-82d0-4453-b155-c4aaf2724baf.json
@@ -0,0 +1,21 @@
+{
+ "task_id": "74498be8-82d0-4453-b155-c4aaf2724baf",
+ "last_updated": "2026-06-22T19:02:40.619753",
+ "flags": [
+ {
+ "timestamp": "2026-06-22T19:01:54.256431",
+ "flag": "TASK_INIT",
+ "details": "Target Universe: ['SPY', 'TLT', 'GLD', 'AAPL', 'MSFT']"
+ },
+ {
+ "timestamp": "2026-06-22T19:01:54.279728",
+ "flag": "BACKEND_START",
+ "details": "Running compute engine locally"
+ },
+ {
+ "timestamp": "2026-06-22T19:02:40.611123",
+ "flag": "HF_BACKEND_COMPLETE",
+ "details": "Math engine finished"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/output/diagnostics/trace_7bfc9f41-a5a7-4d41-88da-681b60daa995.json b/output/diagnostics/trace_7bfc9f41-a5a7-4d41-88da-681b60daa995.json
new file mode 100644
index 0000000000000000000000000000000000000000..b305a7be35e3ff085ffd3d8afb6d50bde693e03f
--- /dev/null
+++ b/output/diagnostics/trace_7bfc9f41-a5a7-4d41-88da-681b60daa995.json
@@ -0,0 +1,21 @@
+{
+ "task_id": "7bfc9f41-a5a7-4d41-88da-681b60daa995",
+ "last_updated": "2026-06-13T08:31:33.607540",
+ "flags": [
+ {
+ "timestamp": "2026-06-13T08:31:06.372093",
+ "flag": "TASK_INIT",
+ "details": "Target Universe: None"
+ },
+ {
+ "timestamp": "2026-06-13T08:31:06.397137",
+ "flag": "BACKEND_START",
+ "details": "Running compute engine locally"
+ },
+ {
+ "timestamp": "2026-06-13T08:31:33.597320",
+ "flag": "HF_BACKEND_COMPLETE",
+ "details": "Math engine finished"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/output/diagnostics/trace_800a9e43-d6b9-4ad5-8d3a-78ded2d36870.json b/output/diagnostics/trace_800a9e43-d6b9-4ad5-8d3a-78ded2d36870.json
new file mode 100644
index 0000000000000000000000000000000000000000..a558bc1e53ca5110322be34184675a031d2410df
--- /dev/null
+++ b/output/diagnostics/trace_800a9e43-d6b9-4ad5-8d3a-78ded2d36870.json
@@ -0,0 +1,21 @@
+{
+ "task_id": "800a9e43-d6b9-4ad5-8d3a-78ded2d36870",
+ "last_updated": "2026-06-12T19:39:00.387418",
+ "flags": [
+ {
+ "timestamp": "2026-06-12T19:38:37.393929",
+ "flag": "TASK_INIT",
+ "details": "Target Universe: None"
+ },
+ {
+ "timestamp": "2026-06-12T19:38:37.426292",
+ "flag": "BACKEND_START",
+ "details": "Running as compute backend"
+ },
+ {
+ "timestamp": "2026-06-12T19:39:00.377469",
+ "flag": "BACKEND_COMPLETE",
+ "details": "Math engine finished"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/output/diagnostics/trace_82d066f4-d42e-4ee0-a50d-e28a4062881e.json b/output/diagnostics/trace_82d066f4-d42e-4ee0-a50d-e28a4062881e.json
new file mode 100644
index 0000000000000000000000000000000000000000..699aecee7704f3219ea5f068941e71d8c7955e25
--- /dev/null
+++ b/output/diagnostics/trace_82d066f4-d42e-4ee0-a50d-e28a4062881e.json
@@ -0,0 +1,21 @@
+{
+ "task_id": "82d066f4-d42e-4ee0-a50d-e28a4062881e",
+ "last_updated": "2026-06-19T19:08:56.837085",
+ "flags": [
+ {
+ "timestamp": "2026-06-19T19:07:52.550191",
+ "flag": "TASK_INIT",
+ "details": "Target Universe: None"
+ },
+ {
+ "timestamp": "2026-06-19T19:07:52.573523",
+ "flag": "BACKEND_START",
+ "details": "Running compute engine locally"
+ },
+ {
+ "timestamp": "2026-06-19T19:08:56.831353",
+ "flag": "FATAL_ERROR",
+ "details": "\n\u001b[91mOptimization Failed \u2014 All relaxation stages exhausted.\u001b[0m\n\nTraceback:\nTraceback (most recent call last):\n File \"D:\\portfolio engine\\engine\\app.py\", line 572, in _run_optimization\n result = core_engine.run_engine(overrides=overrides, serve=False, task_id=tid)\n File \"D:\\portfolio engine\\engine\\core_engine.py\", line 536, in run_engine\n val_bundle = pipeline.run_validation()\n File \"D:\\portfolio engine\\engine\\core_engine.py\", line 356, in run_validation\n opt_res_cv = build_and_opti"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/output/diagnostics/trace_9657976a-5ddb-412d-92d5-51f710fd5f7e.json b/output/diagnostics/trace_9657976a-5ddb-412d-92d5-51f710fd5f7e.json
new file mode 100644
index 0000000000000000000000000000000000000000..939295e16cf8e471aefa87f7dc665d699aa7305a
--- /dev/null
+++ b/output/diagnostics/trace_9657976a-5ddb-412d-92d5-51f710fd5f7e.json
@@ -0,0 +1,21 @@
+{
+ "task_id": "9657976a-5ddb-412d-92d5-51f710fd5f7e",
+ "last_updated": "2026-06-22T19:07:12.566418",
+ "flags": [
+ {
+ "timestamp": "2026-06-22T19:07:00.951169",
+ "flag": "TASK_INIT",
+ "details": "Target Universe: ['AAPL']"
+ },
+ {
+ "timestamp": "2026-06-22T19:07:00.973102",
+ "flag": "BACKEND_START",
+ "details": "Running compute engine locally"
+ },
+ {
+ "timestamp": "2026-06-22T19:07:12.558189",
+ "flag": "HF_BACKEND_COMPLETE",
+ "details": "Math engine finished"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/output/diagnostics/trace_9ee4eb26-0a78-4daf-8267-2625eed28450.json b/output/diagnostics/trace_9ee4eb26-0a78-4daf-8267-2625eed28450.json
new file mode 100644
index 0000000000000000000000000000000000000000..5c9cae026d89d403a914d193befa373b878440cc
--- /dev/null
+++ b/output/diagnostics/trace_9ee4eb26-0a78-4daf-8267-2625eed28450.json
@@ -0,0 +1,21 @@
+{
+ "task_id": "9ee4eb26-0a78-4daf-8267-2625eed28450",
+ "last_updated": "2026-06-22T08:01:10.525062",
+ "flags": [
+ {
+ "timestamp": "2026-06-22T08:00:51.358166",
+ "flag": "TASK_INIT",
+ "details": "Target Universe: ['AAPL', 'MSFT', 'GOOGL']"
+ },
+ {
+ "timestamp": "2026-06-22T08:00:51.380943",
+ "flag": "BACKEND_START",
+ "details": "Running compute engine locally"
+ },
+ {
+ "timestamp": "2026-06-22T08:01:10.516524",
+ "flag": "HF_BACKEND_COMPLETE",
+ "details": "Math engine finished"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/output/diagnostics/trace_aa2f3de5-c2a8-4401-957f-5f80c2f7b362.json b/output/diagnostics/trace_aa2f3de5-c2a8-4401-957f-5f80c2f7b362.json
new file mode 100644
index 0000000000000000000000000000000000000000..426b6a01780bdf385658fca5c90ed429c2e24970
--- /dev/null
+++ b/output/diagnostics/trace_aa2f3de5-c2a8-4401-957f-5f80c2f7b362.json
@@ -0,0 +1,21 @@
+{
+ "task_id": "aa2f3de5-c2a8-4401-957f-5f80c2f7b362",
+ "last_updated": "2026-06-22T19:06:48.366438",
+ "flags": [
+ {
+ "timestamp": "2026-06-22T19:06:44.304330",
+ "flag": "TASK_INIT",
+ "details": "Target Universe: []"
+ },
+ {
+ "timestamp": "2026-06-22T19:06:44.324956",
+ "flag": "BACKEND_START",
+ "details": "Running compute engine locally"
+ },
+ {
+ "timestamp": "2026-06-22T19:06:48.358495",
+ "flag": "FATAL_ERROR",
+ "details": "No valid tickers provided after hallucination check.\n\nTraceback:\nTraceback (most recent call last):\n File \"D:\\portfolio engine\\engine\\app.py\", line 630, in _run_optimization\n result = core_engine.run_engine(overrides=overrides, serve=False, task_id=tid)\n File \"D:\\portfolio engine\\engine\\core_engine.py\", line 535, in run_engine\n pipeline.load_data()\n ~~~~~~~~~~~~~~~~~~^^\n File \"D:\\portfolio engine\\engine\\core_engine.py\", line 293, in load_data\n snap = repo.fetch_all(self.tickers, s"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/output/diagnostics/trace_bb33e250-211e-4e24-954e-817da8ebd87b.json b/output/diagnostics/trace_bb33e250-211e-4e24-954e-817da8ebd87b.json
new file mode 100644
index 0000000000000000000000000000000000000000..47305433a155873854381d0d64a932be1140f73e
--- /dev/null
+++ b/output/diagnostics/trace_bb33e250-211e-4e24-954e-817da8ebd87b.json
@@ -0,0 +1,21 @@
+{
+ "task_id": "bb33e250-211e-4e24-954e-817da8ebd87b",
+ "last_updated": "2026-06-19T19:12:33.058654",
+ "flags": [
+ {
+ "timestamp": "2026-06-19T19:11:27.850001",
+ "flag": "TASK_INIT",
+ "details": "Target Universe: None"
+ },
+ {
+ "timestamp": "2026-06-19T19:11:27.871418",
+ "flag": "BACKEND_START",
+ "details": "Running compute engine locally"
+ },
+ {
+ "timestamp": "2026-06-19T19:12:33.050023",
+ "flag": "FATAL_ERROR",
+ "details": "name 'pt_results' is not defined\n\nTraceback:\nTraceback (most recent call last):\n File \"D:\\portfolio engine\\engine\\app.py\", line 572, in _run_optimization\n result = core_engine.run_engine(overrides=overrides, serve=False, task_id=tid)\n File \"D:\\portfolio engine\\engine\\core_engine.py\", line 536, in run_engine\n val_bundle = pipeline.run_validation()\n File \"D:\\portfolio engine\\engine\\core_engine.py\", line 381, in run_validation\n return ValidationBundle(oos_eq, oos_bench_curve, oos_port_r"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/output/diagnostics/trace_c4c6f802-b7ed-4277-9e48-0a544629667d.json b/output/diagnostics/trace_c4c6f802-b7ed-4277-9e48-0a544629667d.json
new file mode 100644
index 0000000000000000000000000000000000000000..23abca088d9304540ce6681c93e1049b4319680a
--- /dev/null
+++ b/output/diagnostics/trace_c4c6f802-b7ed-4277-9e48-0a544629667d.json
@@ -0,0 +1,21 @@
+{
+ "task_id": "c4c6f802-b7ed-4277-9e48-0a544629667d",
+ "last_updated": "2026-06-12T19:35:09.301921",
+ "flags": [
+ {
+ "timestamp": "2026-06-12T19:34:08.580643",
+ "flag": "TASK_INIT",
+ "details": "Target Universe: None"
+ },
+ {
+ "timestamp": "2026-06-12T19:34:08.608710",
+ "flag": "BACKEND_START",
+ "details": "Running as compute backend"
+ },
+ {
+ "timestamp": "2026-06-12T19:35:09.291615",
+ "flag": "BACKEND_COMPLETE",
+ "details": "Math engine finished"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/output/diagnostics/trace_c4e9c032-a8dd-4172-8afd-ef063f6935b6.json b/output/diagnostics/trace_c4e9c032-a8dd-4172-8afd-ef063f6935b6.json
new file mode 100644
index 0000000000000000000000000000000000000000..890591dfdd9a5ff98bf00c5883fa54ec088a4b04
--- /dev/null
+++ b/output/diagnostics/trace_c4e9c032-a8dd-4172-8afd-ef063f6935b6.json
@@ -0,0 +1,21 @@
+{
+ "task_id": "c4e9c032-a8dd-4172-8afd-ef063f6935b6",
+ "last_updated": "2026-06-20T21:19:00.827292",
+ "flags": [
+ {
+ "timestamp": "2026-06-20T21:18:53.188648",
+ "flag": "TASK_INIT",
+ "details": "Target Universe: ['AAPL', 'MSFT']"
+ },
+ {
+ "timestamp": "2026-06-20T21:18:53.207847",
+ "flag": "BACKEND_START",
+ "details": "Running compute engine locally"
+ },
+ {
+ "timestamp": "2026-06-20T21:19:00.819857",
+ "flag": "HF_BACKEND_COMPLETE",
+ "details": "Math engine finished"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/output/diagnostics/trace_d65d90dd-f94f-49c5-b469-ff66a52d9230.json b/output/diagnostics/trace_d65d90dd-f94f-49c5-b469-ff66a52d9230.json
new file mode 100644
index 0000000000000000000000000000000000000000..efb8da92f37bcd46f7cb69d42afcfc17a3840ba8
--- /dev/null
+++ b/output/diagnostics/trace_d65d90dd-f94f-49c5-b469-ff66a52d9230.json
@@ -0,0 +1,21 @@
+{
+ "task_id": "d65d90dd-f94f-49c5-b469-ff66a52d9230",
+ "last_updated": "2026-06-12T21:05:40.759997",
+ "flags": [
+ {
+ "timestamp": "2026-06-12T21:05:24.684297",
+ "flag": "TASK_INIT",
+ "details": "Target Universe: None"
+ },
+ {
+ "timestamp": "2026-06-12T21:05:24.712846",
+ "flag": "BACKEND_START",
+ "details": "Running compute engine locally"
+ },
+ {
+ "timestamp": "2026-06-12T21:05:40.749180",
+ "flag": "HF_BACKEND_COMPLETE",
+ "details": "Math engine finished"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/output/diagnostics/trace_da7beb44-8bc2-4fd4-b055-8e98c188e73e.json b/output/diagnostics/trace_da7beb44-8bc2-4fd4-b055-8e98c188e73e.json
new file mode 100644
index 0000000000000000000000000000000000000000..c880de51192d89d178bf365758cd10f91bb31d47
--- /dev/null
+++ b/output/diagnostics/trace_da7beb44-8bc2-4fd4-b055-8e98c188e73e.json
@@ -0,0 +1,21 @@
+{
+ "task_id": "da7beb44-8bc2-4fd4-b055-8e98c188e73e",
+ "last_updated": "2026-06-13T09:23:27.420411",
+ "flags": [
+ {
+ "timestamp": "2026-06-13T09:22:57.993355",
+ "flag": "TASK_INIT",
+ "details": "Target Universe: None"
+ },
+ {
+ "timestamp": "2026-06-13T09:22:58.021205",
+ "flag": "BACKEND_START",
+ "details": "Running compute engine locally"
+ },
+ {
+ "timestamp": "2026-06-13T09:23:27.408868",
+ "flag": "FATAL_ERROR",
+ "details": "loop of ufunc does not support argument 0 of type numpy.float64 which has no callable rint method\n\nTraceback:\nAttributeError: 'numpy.float64' object has no attribute 'rint'\n\nThe above exception was the direct cause of the following exception:\n\nTraceback (most recent call last):\n File \"D:\\portfolio engine\\engine\\app.py\", line 281, in _run_optimization\n result = core_engine.run_engine(overrides=overrides, serve=False, task_id=tid)\n File \"D:\\portfolio engine\\engine\\core_engine.py\", line 522, i"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/output/diagnostics/trace_da805924-bc88-4cec-b749-1164c4926a5b.json b/output/diagnostics/trace_da805924-bc88-4cec-b749-1164c4926a5b.json
new file mode 100644
index 0000000000000000000000000000000000000000..d44f5036d7d29ff896b705af1ead833569bec184
--- /dev/null
+++ b/output/diagnostics/trace_da805924-bc88-4cec-b749-1164c4926a5b.json
@@ -0,0 +1,21 @@
+{
+ "task_id": "da805924-bc88-4cec-b749-1164c4926a5b",
+ "last_updated": "2026-06-22T08:00:23.452514",
+ "flags": [
+ {
+ "timestamp": "2026-06-22T07:59:58.083048",
+ "flag": "TASK_INIT",
+ "details": "Target Universe: ['AAPL', 'MSFT', 'GOOGL']"
+ },
+ {
+ "timestamp": "2026-06-22T07:59:58.108145",
+ "flag": "BACKEND_START",
+ "details": "Running compute engine locally"
+ },
+ {
+ "timestamp": "2026-06-22T08:00:23.445720",
+ "flag": "HF_BACKEND_COMPLETE",
+ "details": "Math engine finished"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/output/niw_prior_state.pkl b/output/niw_prior_state.pkl
new file mode 100644
index 0000000000000000000000000000000000000000..72da47f23e940e2f7c5f13ba47684be09a1daee7
--- /dev/null
+++ b/output/niw_prior_state.pkl
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ead467115845e6ac9503d1529fbe8c91a176b654a8c8737a6fe50d4657c85d9b
+size 6034
diff --git a/output/portfolio_config.json b/output/portfolio_config.json
new file mode 100644
index 0000000000000000000000000000000000000000..40f8f9fce69b3ee941d06890fab3e56b4f1b7e9c
--- /dev/null
+++ b/output/portfolio_config.json
@@ -0,0 +1,152 @@
+{
+ "risk_free_rate": 0.04,
+ "transaction_cost": 0.001,
+ "trading_days_per_year": 252,
+ "rolling_cov_days": 756,
+ "currency_symbol": "$",
+ "default_adv_proxy": 50000000.0,
+ "benchmarks": {
+ "equity": "SPY",
+ "volatility": "^VIX",
+ "risk_free": "^TNX"
+ },
+ "single_asset_min": 0.0,
+ "single_asset_max": 0.3,
+ "sector_limit": 0.35,
+ "gross_leverage_cap": 1.0,
+ "short_borrow_cost": 0.015,
+ "max_turnover": 3.0,
+ "tax_rate_lt": 0.2,
+ "tax_rate_st": 0.35,
+ "lt_days": 366,
+ "hrp_tax_lambda": 2.5,
+ "cvar_alpha": 0.95,
+ "cvar_lambda": 0.5,
+ "baseline_risk_factor": 3.0,
+ "monte_carlo_sims": 100,
+ "monte_carlo_years": 1.0,
+ "data_history_years": 3.0,
+ "rebalance_freq_months": 3,
+ "garch_enabled": true,
+ "cvar_enabled": true,
+ "tax_enabled": false,
+ "dynamic_risk": true,
+ "hmm_regime": true,
+ "arima_enabled": false,
+ "anova_enabled": false,
+ "with_futures": true,
+ "overlay_mode": "beta_hedge",
+ "futures_universe": [
+ "MES",
+ "ES"
+ ],
+ "futures_safety_multiplier": 3.0,
+ "futures_target_beta": 0.0,
+ "futures_margin_headroom": 0.05,
+ "return_frequency": "daily",
+ "e2e_loss_type": "spo",
+ "e2e_epochs": 2,
+ "e2e_batch_size": 32,
+ "e2e_lr": 0.001,
+ "e2e_cache_dir": ".e2e_cache",
+ "universe_categories": {
+ "Core Equities": [
+ "SPY",
+ "QQQ",
+ "DIA",
+ "IWM"
+ ],
+ "Bonds & Rates": [
+ "TLT",
+ "IEF",
+ "SHY",
+ "AGG"
+ ],
+ "Tech & Growth": [
+ "AAPL",
+ "MSFT",
+ "NVDA",
+ "TSLA"
+ ],
+ "Defensive/Value": [
+ "JNJ",
+ "PG",
+ "KO",
+ "XLP"
+ ],
+ "Commodities": [
+ "GLD",
+ "SLV",
+ "USO",
+ "PDBC"
+ ],
+ "International": [
+ "VEA",
+ "VWO",
+ "EFA",
+ "EEM"
+ ],
+ "Crypto Proxies": [
+ "IBIT",
+ "FBTC",
+ "ETHE",
+ "MSTR"
+ ]
+ },
+ "extended_history": true,
+ "bootstrap_samples": 100,
+ "stitch_overlap_days": 252,
+ "proxy_mappings": {
+ "SPY": {
+ "proxy": "^GSPC",
+ "proxy_start": "1950-01-03",
+ "overlap_days": 252
+ },
+ "TLT": {
+ "proxy": "^TYX",
+ "proxy_start": "1977-01-03",
+ "is_yield": true
+ },
+ "GLD": {
+ "proxy": "GC=F",
+ "proxy_start": "1974-12-31"
+ },
+ "QQQ": {
+ "proxy": "^IXIC",
+ "proxy_start": "1971-02-05"
+ }
+ },
+ "bond_metadata": {},
+ "sector_map": {
+ "SPY": "Core",
+ "QQQ": "Core",
+ "DIA": "Core",
+ "IWM": "Core",
+ "TLT": "Bonds",
+ "IEF": "Bonds",
+ "SHY": "Bonds",
+ "AGG": "Bonds",
+ "AAPL": "Tech",
+ "MSFT": "Tech",
+ "NVDA": "Tech",
+ "TSLA": "Tech",
+ "JNJ": "DefensiveValue",
+ "PG": "DefensiveValue",
+ "KO": "DefensiveValue",
+ "XLP": "DefensiveValue",
+ "GLD": "Commodities",
+ "SLV": "Commodities",
+ "USO": "Commodities",
+ "PDBC": "Commodities",
+ "VEA": "International",
+ "VWO": "International",
+ "EFA": "International",
+ "EEM": "International",
+ "IBIT": "Crypto",
+ "FBTC": "Crypto",
+ "ETHE": "Crypto",
+ "MSTR": "Crypto",
+ "GOOGL": "Other"
+ },
+ "custom_constraints": []
+}
\ No newline at end of file
diff --git a/output/portfolio_engine.db b/output/portfolio_engine.db
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/output/portfolio_factors.csv b/output/portfolio_factors.csv
new file mode 100644
index 0000000000000000000000000000000000000000..2a99d75acb1cb55a6d1eddeb1dcd519d0046cfd1
--- /dev/null
+++ b/output/portfolio_factors.csv
@@ -0,0 +1,5 @@
+Factor,Portfolio_Exposure
+Mkt-RF,0.3614
+SMB,-0.03
+HML,-0.2232
+MOM,0.0216
diff --git a/output/tasks.json b/output/tasks.json
new file mode 100644
index 0000000000000000000000000000000000000000..e1a4f58847a4629f3edb65651cf20b21af0f2e80
--- /dev/null
+++ b/output/tasks.json
@@ -0,0 +1 @@
+{"82d066f4-d42e-4ee0-a50d-e28a4062881e": {"status": "running", "message": "Initializing...", "target_weights": {}}, "501902d7-0abc-4ad5-8f94-4360f52eb8a8": {"status": "error", "message": "Error: \n\u001b[91mOptimization Failed \u2014 All relaxation stages exhausted.\u001b[0m (Check console logs for details)", "target_weights": {}}, "bb33e250-211e-4e24-954e-817da8ebd87b": {"status": "error", "message": "Error: name 'pt_results' is not defined (Check console logs for details)", "target_weights": {}}, "696c46f3-b08a-4e26-9083-31e608e20f5d": {"status": "running", "message": "Initializing...", "target_weights": {}}, "09104377-3dd0-4190-99b0-9b66b6b50439": {"status": "running", "message": "Initializing...", "target_weights": {}}, "4e2ae4ab-541a-4c7b-b018-767a61e1baa9": {"status": "running", "message": "Initializing...", "target_weights": {}}, "c4e9c032-a8dd-4172-8afd-ef063f6935b6": {"status": "running", "message": "Initializing...", "target_weights": {}}, "da805924-bc88-4cec-b749-1164c4926a5b": {"status": "completed", "message": "Report generated.", "target_weights": {"MSFT": 0.33666666666561895, "AAPL": 0.3366666666654891, "GOOGL": 0.326666666668892}, "stats": {"feature_importances": {}, "ai_sentiment": {"MSFT": {"sentiment": 0.0}, "AAPL": {"sentiment": 0.0}, "GOOGL": {"sentiment": 0.0}}, "marginal_contribution_to_return": {"MSFT": 0.03275922038077525, "AAPL": 0.03329433651297346, "GOOGL": 0.03164029062419795}, "marginal_var": {}, "cvar_95": -0.03600322091934501, "cvar_99": -0.05501620669440877, "stress_2008": 0.0, "stress_covid": -0.29560789266604504, "stress_2022": -0.3078341623907471, "Annualized Return": 0.09769384751794666, "Annualized Volatility": 0.0, "Sharpe Ratio": 0.0}}, "9ee4eb26-0a78-4daf-8267-2625eed28450": {"status": "completed", "message": "Report generated.", "target_weights": {"MSFT": 0.33666666666561895, "AAPL": 0.3366666666654891, "GOOGL": 0.326666666668892}, "stats": {"feature_importances": {}, "ai_sentiment": {"MSFT": {"sentiment": 0.0}, "GOOGL": {"sentiment": 0.0}, "AAPL": {"sentiment": 0.0}}, "marginal_contribution_to_return": {"MSFT": 0.03275922038077525, "AAPL": 0.03329433651297346, "GOOGL": 0.03164029062419795}, "marginal_var": {}, "cvar_95": -0.03600322091934501, "cvar_99": -0.05501620669440877, "stress_2008": 0.0, "stress_covid": -0.29560789266604504, "stress_2022": -0.3078341623907471, "Annualized Return": 0.09769384751794666, "Annualized Volatility": 0.0, "Sharpe Ratio": 0.0}}, "0233cbce-5656-41f6-ba71-a151ca203fc3": {"status": "completed", "message": "Report generated.", "target_weights": {"EFA": 0.2999999998202533, "SPY": 0.2999999998977947, "GLD": 0.09052595006436422, "IWM": 0.29275953640705293, "TLT": -0.09052594946106797, "QQQ": 0.10724046327160276}, "stats": {"feature_importances": {}, "ai_sentiment": {"GLD": {"sentiment": 0.0}, "TLT": {"sentiment": 0.0}, "SPY": {"sentiment": 0.0}, "IWM": {"sentiment": 0.0}, "EFA": {"sentiment": 0.0}, "QQQ": {"sentiment": 0.0}}, "marginal_contribution_to_return": {"EFA": 0.013403598101867103, "SPY": 0.026853000631720747, "GLD": 0.00842106157876385, "IWM": 0.01311477815354797, "TLT": -0.004073796565694208, "QQQ": 0.004791360236039449}, "marginal_var": {}, "cvar_95": -0.02755393263794777, "cvar_99": -0.0484290177524933, "stress_2008": 0.0, "stress_covid": -0.36521887175333545, "stress_2022": -0.1443159995297134, "Annualized Return": 0.06251000213624491, "Annualized Volatility": 0.0, "Sharpe Ratio": 0.0}}, "74498be8-82d0-4453-b155-c4aaf2724baf": {"status": "completed", "message": "Report generated.", "target_weights": {"SPY": 0.2999999999028478, "GLD": 0.08991235574447105, "AAPL": 0.2999999998144589, "MSFT": 0.29999999954549256, "TLT": 0.010087644992729442}, "stats": {"feature_importances": {}, "ai_sentiment": {"MSFT": {"sentiment": 0.0}, "SPY": {"sentiment": 0.0}, "TLT": {"sentiment": 0.0}, "GLD": {"sentiment": 0.0}, "AAPL": {"sentiment": 0.0}}, "marginal_contribution_to_return": {"SPY": 0.018961267315779646, "GLD": 0.005819864365048508, "AAPL": 0.012219295251181428, "MSFT": 0.011290379869344285, "TLT": 0.0004425166918677693}, "marginal_var": {}, "cvar_95": -0.029749186641259022, "cvar_99": -0.04773213938678855, "stress_2008": 0.0, "stress_covid": -0.27802443305863267, "stress_2022": -0.21738935505442503, "Annualized Return": 0.04873332349322164, "Annualized Volatility": 0.0, "Sharpe Ratio": 0.0}}, "4b4f9fc7-46f6-4d65-8f13-02cd0b558759": {"status": "completed", "message": "Report generated.", "target_weights": {"SPY": 0.2999999999028478, "GLD": 0.08991235574447105, "AAPL": 0.2999999998144589, "MSFT": 0.29999999954549256, "TLT": 0.010087644992729442}, "stats": {"feature_importances": {}, "ai_sentiment": {"GLD": {"sentiment": 0.0}, "MSFT": {"sentiment": 0.0}, "SPY": {"sentiment": 0.0}, "TLT": {"sentiment": 0.0}, "AAPL": {"sentiment": 0.0}}, "marginal_contribution_to_return": {"SPY": 0.018961267315779646, "GLD": 0.005819864365048508, "AAPL": 0.012219295251181428, "MSFT": 0.011290379869344285, "TLT": 0.0004425166918677693}, "marginal_var": {}, "cvar_95": -0.029749186641259022, "cvar_99": -0.04773213938678855, "stress_2008": 0.0, "stress_covid": -0.27802443305863267, "stress_2022": -0.21738935505442503, "Annualized Return": 0.04873332349322164, "Annualized Volatility": 0.0, "Sharpe Ratio": 0.0}}, "aa2f3de5-c2a8-4401-957f-5f80c2f7b362": {"status": "error", "message": "Error: No valid tickers provided after hallucination check. (Check console logs for details)", "target_weights": {}}, "9657976a-5ddb-412d-92d5-51f710fd5f7e": {"status": "completed", "message": "Report generated.", "target_weights": {"AAPL": 0.3, "CASH": 0.7}, "stats": {"feature_importances": {}, "ai_sentiment": {"AAPL": {"sentiment": 0.0}}, "marginal_contribution_to_return": {"AAPL": 0.09057639322739676}, "marginal_var": {}, "cvar_95": -0.012423132299306331, "cvar_99": -0.01961196658245657, "stress_2008": 0.0, "stress_covid": -0.09615342123707438, "stress_2022": -0.07568862324573478, "Annualized Return": 0.09057639322739676, "Annualized Volatility": 0.0, "Sharpe Ratio": 0.0}}, "444e1f10-bdc7-4479-b03a-a32e4c97870b": {"status": "completed", "message": "Report generated.", "target_weights": {"SPY": 0.29999999999996124, "TLT": 0.2999999999999604, "AAPL": 0.29999999999996174, "GLD": 0.2999999999944438, "MSFT": -0.19999999999432705}, "stats": {"feature_importances": {}, "ai_sentiment": {"GLD": {"sentiment": 0.0}, "SPY": {"sentiment": 0.0}, "TLT": {"sentiment": 0.0}, "MSFT": {"sentiment": 0.0}, "AAPL": {"sentiment": 0.0}}, "marginal_contribution_to_return": {"SPY": 0.2408664946572619, "TLT": 0.2510794472356051, "AAPL": 0.25639793556175167, "GLD": 0.05498093535315992, "MSFT": -0.0325138705589524}, "marginal_var": {}, "cvar_95": -0.017202280382195016, "cvar_99": -0.026717224851415866, "stress_2008": 0.0, "stress_covid": -0.11890381523605575, "stress_2022": -0.17144662660745436, "Annualized Return": 0.7708109422488263, "Annualized Volatility": 0.0, "Sharpe Ratio": 0.0}}}
\ No newline at end of file
diff --git a/portfolio_engine.db b/portfolio_engine.db
new file mode 100644
index 0000000000000000000000000000000000000000..ab746cef3cf3248c5739e7b4648ab4213a602afe
Binary files /dev/null and b/portfolio_engine.db differ
diff --git a/push_to_hf.py b/push_to_hf.py
index 98ceb5269d7f1cb09082671be18f68bd22b9ef08..df9cbd9b447dc4824fb7822716b383528c3c2aa5 100644
--- a/push_to_hf.py
+++ b/push_to_hf.py
@@ -1,53 +1,53 @@
-import os
-from huggingface_hub import HfApi
-from dotenv import load_dotenv
-
-def push():
- load_dotenv()
- token = os.getenv("HF_TOKEN")
- if not token:
- print("Error: HF_TOKEN not found in .env file.")
- return
-
- api = HfApi(token=token)
- repo_id = "engineportf/portfolio_opt"
- print(f"Uploading current directory to Hugging Face Space: {repo_id} ...")
-
- try:
- api.create_repo(repo_id=repo_id, repo_type="space", space_sdk="docker", exist_ok=True)
- except Exception as e:
- print("Note on create_repo:", str(e))
-
- try:
- api.upload_folder(
- folder_path=".",
- repo_id=repo_id,
- repo_type="space",
- ignore_patterns=[
- ".git*",
- "__pycache__*",
- "*.pyc",
- "output/*",
- ".env",
- "venv/*",
- ".venv/*",
- "env/*",
- ".gemini*",
- "scratch/*",
- "test_*.py",
- "push_to_hf.py",
- "PortableGit/*",
- "*.db",
- ".pytest_cache/*",
- ".ruff_cache/*",
- ".mypy_cache/*",
- ".hypothesis/*",
- ".ewma_cache/*"
- ]
- )
- print("Upload complete! Check your Space at https://huggingface.co/spaces/" + repo_id)
- except Exception as e:
- print("Upload failed:", str(e))
-
-if __name__ == "__main__":
- push()
+import os
+from huggingface_hub import HfApi
+from dotenv import load_dotenv
+
+def push():
+ load_dotenv()
+ token = os.getenv("HF_TOKEN")
+ if not token:
+ print("Error: HF_TOKEN not found in .env file.")
+ return
+
+ api = HfApi(token=token)
+ repo_id = "engineportf/portfolio_opt"
+ print(f"Uploading current directory to Hugging Face Space: {repo_id} ...")
+
+ try:
+ api.create_repo(repo_id=repo_id, repo_type="space", space_sdk="docker", exist_ok=True)
+ except Exception as e:
+ print("Note on create_repo:", str(e))
+
+ try:
+ api.upload_folder(
+ folder_path=".",
+ repo_id=repo_id,
+ repo_type="space",
+ ignore_patterns=[
+ ".git*",
+ "__pycache__*",
+ "*.pyc",
+ "output/*",
+ ".env",
+ "venv/*",
+ ".venv/*",
+ "env/*",
+ ".gemini*",
+ "scratch/*",
+ "test_*.py",
+ "push_to_hf.py",
+ "PortableGit/*",
+ "*.db",
+ ".pytest_cache/*",
+ ".ruff_cache/*",
+ ".mypy_cache/*",
+ ".hypothesis/*",
+ ".ewma_cache/*"
+ ]
+ )
+ print("Upload complete! Check your Space at https://huggingface.co/spaces/" + repo_id)
+ except Exception as e:
+ print("Upload failed:", str(e))
+
+if __name__ == "__main__":
+ push()
diff --git a/static/app.js b/static/app.js
index d22b034ecff213194ef68da0ad9fae6c53cf8d66..b239cfecf32f36a3ddd1daf9052039e19762edde 100644
--- a/static/app.js
+++ b/static/app.js
@@ -2,18 +2,19 @@
let debounceTimer;
// --- INITIALIZATION ---
document.addEventListener('DOMContentLoaded', () => {
- // Expandable Cards to Modal Logic
+ // Expandable Cards Logic
document.addEventListener('click', (e) => {
+ const expandBtn = e.target.closest('.card-expand-btn') || e.target.closest('h3');
const card = e.target.closest('.expandable-card');
- if (card) {
- // Extract content
- const title = card.querySelector('h3').innerText;
- const bodyHtml = card.querySelector('.card-body').innerHTML;
- // Populate modal
- document.getElementById('modalTitle').innerText = title;
- document.getElementById('modalBody').innerHTML = bodyHtml;
- // Show modal
- document.getElementById('globalModal').classList.add('show');
+
+ if (card && expandBtn) {
+ // Toggle expansion
+ card.classList.toggle('expanded');
+ if (window.ScrollTrigger) setTimeout(() => ScrollTrigger.refresh(), 500);
+ } else if (card && !card.classList.contains('expanded')) {
+ // Click anywhere on card to expand if not expanded
+ card.classList.add('expanded');
+ if (window.ScrollTrigger) setTimeout(() => ScrollTrigger.refresh(), 500);
}
});
window.closeModal = function () {
diff --git a/test_all.py b/test_all.py
index 42b2bf70c8f44501c1d5d460d43f038a5a2350b2..20590c7dcb076d519abe535a73a5948f1c0992de 100644
--- a/test_all.py
+++ b/test_all.py
@@ -1,34 +1,34 @@
-import traceback
-from core_engine import PortfolioPipeline
-import warnings
-warnings.filterwarnings('ignore')
-
-engines = ['ensemble', 'lstm', 'transformers', 'random_forest', 'pca_reversion']
-tickers = ['SPY', 'TLT', 'GLD', 'AAPL', 'MSFT'] # Equities, Bonds, Futures proxies
-
-print("=== Starting Full Pipeline Test ===")
-
-for engine in engines:
- print(f"\nTesting Engine: {engine}")
- try:
- pipeline = PortfolioPipeline(overrides={
- 'tickers': tickers,
- 'engine_type': engine,
- 'risk_aversion': 5,
- 'tax_optimization': False
- })
- pipeline.load_data()
-
- # Test Validation
- val_bundle = pipeline.run_validation()
-
- # Test Optimization
- opt_bundle = pipeline.optimize()
-
- print(f"[{engine}] SUCCESS. Weights: {opt_bundle.weights.to_dict()}")
-
- except Exception as e:
- print(f"[{engine}] FAILED! Error: {str(e)}")
- traceback.print_exc()
-
-print("\n=== Pipeline Test Complete ===")
+import traceback
+from core_engine import PortfolioPipeline
+import warnings
+warnings.filterwarnings('ignore')
+
+engines = ['ensemble', 'lstm', 'transformers', 'random_forest', 'pca_reversion']
+tickers = ['SPY', 'TLT', 'GLD', 'AAPL', 'MSFT'] # Equities, Bonds, Futures proxies
+
+print("=== Starting Full Pipeline Test ===")
+
+for engine in engines:
+ print(f"\nTesting Engine: {engine}")
+ try:
+ pipeline = PortfolioPipeline(overrides={
+ 'tickers': tickers,
+ 'engine_type': engine,
+ 'risk_aversion': 5,
+ 'tax_optimization': False
+ })
+ pipeline.load_data()
+
+ # Test Validation
+ val_bundle = pipeline.run_validation()
+
+ # Test Optimization
+ opt_bundle = pipeline.optimize()
+
+ print(f"[{engine}] SUCCESS. Weights: {opt_bundle.weights.to_dict()}")
+
+ except Exception as e:
+ print(f"[{engine}] FAILED! Error: {str(e)}")
+ traceback.print_exc()
+
+print("\n=== Pipeline Test Complete ===")
diff --git a/test_api_bug.py b/test_api_bug.py
index 57a68c371cbbca85060ae6aa6b0b60ebb07a6e99..607d9a4ed1e21587bbe9619ddec25284d57b6146 100644
--- a/test_api_bug.py
+++ b/test_api_bug.py
@@ -1,35 +1,35 @@
-import sys
-import threading
-import time
-import traceback
-from core_engine import run_engine
-
-def dump():
- time.sleep(15)
- print("DUMPING TRACES:")
- for th, frame in sys._current_frames().items():
- print(f"\n--- Thread {th} ---")
- traceback.print_stack(frame)
- sys.exit(1)
-
-threading.Thread(target=dump).start()
-
-overrides = {
- 'universe': ['SPY', 'TLT', 'GLD'],
- 'tickers': ['SPY', 'TLT', 'GLD'],
- 'capital': 100000.0,
- 'risk_input': 5,
- 'risk_factor': 3.0,
- 'model': 1,
- 'allocation_engine': 1,
- 'single_asset_min': 0.0,
- 'tax_enabled': False,
- 'garch_enabled': True,
- 'currency_symbol': '$',
- 'custom_constraints': None,
- 'fixed_weights': None
-}
-
-print("Running engine headlessly...")
-res = run_engine(overrides=overrides, serve=False, task_id="test")
-print("Done!")
+import sys
+import threading
+import time
+import traceback
+from core_engine import run_engine
+
+def dump():
+ time.sleep(15)
+ print("DUMPING TRACES:")
+ for th, frame in sys._current_frames().items():
+ print(f"\n--- Thread {th} ---")
+ traceback.print_stack(frame)
+ sys.exit(1)
+
+threading.Thread(target=dump).start()
+
+overrides = {
+ 'universe': ['SPY', 'TLT', 'GLD'],
+ 'tickers': ['SPY', 'TLT', 'GLD'],
+ 'capital': 100000.0,
+ 'risk_input': 5,
+ 'risk_factor': 3.0,
+ 'model': 1,
+ 'allocation_engine': 1,
+ 'single_asset_min': 0.0,
+ 'tax_enabled': False,
+ 'garch_enabled': True,
+ 'currency_symbol': '$',
+ 'custom_constraints': None,
+ 'fixed_weights': None
+}
+
+print("Running engine headlessly...")
+res = run_engine(overrides=overrides, serve=False, task_id="test")
+print("Done!")
diff --git a/test_app.py b/test_app.py
index c466a3ecdcf64f67442d253c0f34b5b4a3340cca..6db76d1c947c333ce290ec966d019765d10d0c59 100644
--- a/test_app.py
+++ b/test_app.py
@@ -1,47 +1,47 @@
-from fastapi.testclient import TestClient
-from app import app, BACKGROUND_TASKS
-import time
-
-client = TestClient(app)
-
-def run_test():
- response = client.post(
- "/api/generate",
- headers={"X-Access-Key": "Ir_yad"}, # Assuming master key or valid key
- json={
- "tickers": ["AAPL", "MSFT"],
- "capital": 100000.0,
- "risk_input": 5,
- "model": 1,
- "allocation_engine": 1,
- "allow_shorting": False,
- "tax_enabled": False,
- "garch_enabled": False,
- "currency": "$"
- }
- )
- if response.status_code != 200:
- print("Failed to queue task:", response.text)
- return
-
- task_id = response.json()["task_id"]
- print(f"Queued task: {task_id}")
-
- start_time = time.time()
- last_status = None
-
- while time.time() - start_time < 30:
- status_res = client.get(f"/api/status/{task_id}", headers={"X-Access-Key": "Ir_yad"})
- if status_res.status_code == 200:
- data = status_res.json()
- curr_status = data.get("status")
- if curr_status != last_status:
- print(f"Status changed: {curr_status} | Message: {data.get('message')}")
- last_status = curr_status
- if curr_status in ["completed", "error"]:
- print(f"Final data: {data}")
- break
- time.sleep(1)
-
-if __name__ == "__main__":
- run_test()
+from fastapi.testclient import TestClient
+from app import app, BACKGROUND_TASKS
+import time
+
+client = TestClient(app)
+
+def run_test():
+ response = client.post(
+ "/api/generate",
+ headers={"X-Access-Key": "Ir_yad"}, # Assuming master key or valid key
+ json={
+ "tickers": ["AAPL", "MSFT"],
+ "capital": 100000.0,
+ "risk_input": 5,
+ "model": 1,
+ "allocation_engine": 1,
+ "allow_shorting": False,
+ "tax_enabled": False,
+ "garch_enabled": False,
+ "currency": "$"
+ }
+ )
+ if response.status_code != 200:
+ print("Failed to queue task:", response.text)
+ return
+
+ task_id = response.json()["task_id"]
+ print(f"Queued task: {task_id}")
+
+ start_time = time.time()
+ last_status = None
+
+ while time.time() - start_time < 30:
+ status_res = client.get(f"/api/status/{task_id}", headers={"X-Access-Key": "Ir_yad"})
+ if status_res.status_code == 200:
+ data = status_res.json()
+ curr_status = data.get("status")
+ if curr_status != last_status:
+ print(f"Status changed: {curr_status} | Message: {data.get('message')}")
+ last_status = curr_status
+ if curr_status in ["completed", "error"]:
+ print(f"Final data: {data}")
+ break
+ time.sleep(1)
+
+if __name__ == "__main__":
+ run_test()
diff --git a/test_bug.py b/test_bug.py
index 835c7389691362a70f25f98d3263576a361c4cc5..f1deae5a49c5ee534a6776c95a09d0afa10263cf 100644
--- a/test_bug.py
+++ b/test_bug.py
@@ -1,10 +1,10 @@
-import sys
-from core_engine import run_engine
-
-try:
- print("Running engine...")
- res = run_engine(serve=False)
- print("Done")
-except Exception as e:
- import traceback
- traceback.print_exc()
+import sys
+from core_engine import run_engine
+
+try:
+ print("Running engine...")
+ res = run_engine(serve=False)
+ print("Done")
+except Exception as e:
+ import traceback
+ traceback.print_exc()
diff --git a/test_direct.py b/test_direct.py
index b5db683b51ea7decaec8053165410028066b6f77..cc88276a53cf8b8abede0f44cfee5cd1d5cab7c8 100644
--- a/test_direct.py
+++ b/test_direct.py
@@ -1,31 +1,31 @@
-import sys
-import os
-
-# Ensure we can import app and core_engine
-sys.path.insert(0, os.path.abspath('d:\\portfolio engine\\engine'))
-
-from core_engine import run_engine
-
-def main():
- overrides = {
- 'universe': ["AAPL", "MSFT", "GOOGL"],
- 'capital': 100000,
- 'risk_input': 5,
- 'single_asset_max': 0.40,
- 'single_asset_min': 0.00,
- 'max_turnover': 2.0,
- 'model': 1,
- 'allocation_engine': 1
- }
- print("Running engine directly...")
- try:
- res = run_engine(overrides=overrides, serve=False, task_id="test-123")
- print("Success!")
- print("Keys returned:", res.keys() if isinstance(res, dict) else type(res))
- except Exception as e:
- import traceback
- print("Exception:", e)
- traceback.print_exc()
-
-if __name__ == "__main__":
- main()
+import sys
+import os
+
+# Ensure we can import app and core_engine
+sys.path.insert(0, os.path.abspath('d:\\portfolio engine\\engine'))
+
+from core_engine import run_engine
+
+def main():
+ overrides = {
+ 'universe': ["AAPL", "MSFT", "GOOGL"],
+ 'capital': 100000,
+ 'risk_input': 5,
+ 'single_asset_max': 0.40,
+ 'single_asset_min': 0.00,
+ 'max_turnover': 2.0,
+ 'model': 1,
+ 'allocation_engine': 1
+ }
+ print("Running engine directly...")
+ try:
+ res = run_engine(overrides=overrides, serve=False, task_id="test-123")
+ print("Success!")
+ print("Keys returned:", res.keys() if isinstance(res, dict) else type(res))
+ except Exception as e:
+ import traceback
+ print("Exception:", e)
+ traceback.print_exc()
+
+if __name__ == "__main__":
+ main()
diff --git a/test_freeze.py b/test_freeze.py
index cd5266434c08efa9811a9f3c62fcd8f7c4f3e333..a4a733eda328866e5f21c400a11debe122615ee1 100644
--- a/test_freeze.py
+++ b/test_freeze.py
@@ -1,37 +1,37 @@
-import sys
-import os
-import time
-import requests
-
-def test():
- # simulate what app.js does
- print("STARTING TEST")
- try:
- res = requests.post("http://127.0.0.1:8000/api/generate", json={
- "tickers": ["AAPL", "MSFT", "GOOGL"],
- "capital": 10000,
- "risk_input": 5
- }, headers={"X-Access-Key": "Ir_yad"})
-
- print("POST RESPONSE:", res.status_code, res.text)
- if not res.ok:
- return
-
- tid = res.json()["task_id"]
-
- while True:
- status_res = requests.get(f"http://127.0.0.1:8000/api/status/{tid}", headers={"X-Access-Key": "Ir_yad"})
- if status_res.ok:
- s_data = status_res.json()
- print("POLL:", s_data["status"], s_data.get("message"))
- if s_data["status"] in ["completed", "error"]:
- break
- else:
- print("POLL FAILED:", status_res.status_code, status_res.text)
- time.sleep(2)
-
- except Exception as e:
- print("EXCEPTION:", e)
-
-if __name__ == "__main__":
- test()
+import sys
+import os
+import time
+import requests
+
+def test():
+ # simulate what app.js does
+ print("STARTING TEST")
+ try:
+ res = requests.post("http://127.0.0.1:8000/api/generate", json={
+ "tickers": ["AAPL", "MSFT", "GOOGL"],
+ "capital": 10000,
+ "risk_input": 5
+ }, headers={"X-Access-Key": "Ir_yad"})
+
+ print("POST RESPONSE:", res.status_code, res.text)
+ if not res.ok:
+ return
+
+ tid = res.json()["task_id"]
+
+ while True:
+ status_res = requests.get(f"http://127.0.0.1:8000/api/status/{tid}", headers={"X-Access-Key": "Ir_yad"})
+ if status_res.ok:
+ s_data = status_res.json()
+ print("POLL:", s_data["status"], s_data.get("message"))
+ if s_data["status"] in ["completed", "error"]:
+ break
+ else:
+ print("POLL FAILED:", status_res.status_code, status_res.text)
+ time.sleep(2)
+
+ except Exception as e:
+ print("EXCEPTION:", e)
+
+if __name__ == "__main__":
+ test()
diff --git a/test_full.py b/test_full.py
index 7eb948021be0c45d9e8695ac01a8f475649d7cc3..48357216821e531f7476ce1020286cc62ba31445 100644
--- a/test_full.py
+++ b/test_full.py
@@ -1,46 +1,46 @@
-import sys
-import os
-import time
-import cProfile
-import pstats
-
-
-sys.path.insert(0, os.path.abspath('d:\\portfolio engine\\engine'))
-import core_engine
-
-def main():
- tickers = ["AAPL", "MSFT", "GOOG", "AMZN", "META", "TSLA", "NVDA", "JPM", "V", "JNJ", "WMT", "PG", "MA", "UNH", "DIS"]
- overrides = {
- 'universe': tickers,
- 'tickers': tickers,
- 'capital': 100000.0,
- 'risk_input': 5,
- 'risk_factor': 3.0,
- 'model': 1,
- 'allocation_engine': 1,
- 'single_asset_min': 0.0,
- 'tax_enabled': False,
- 'garch_enabled': True,
- 'currency_symbol': '$',
- 'custom_constraints': None,
- 'fixed_weights': None,
- 'max_assets': 5
- }
-
- print("Starting full pipeline test with 15 tickers...")
- start = time.time()
-
- pr = cProfile.Profile()
- pr.enable()
-
- result = core_engine.run_engine(overrides=overrides, serve=False, task_id="test")
-
- pr.disable()
- end = time.time()
- print(f"Total time: {end - start:.2f} seconds")
-
- ps = pstats.Stats(pr).sort_stats('cumtime')
- ps.print_stats(30)
-
-if __name__ == "__main__":
- main()
+import sys
+import os
+import time
+import cProfile
+import pstats
+
+
+sys.path.insert(0, os.path.abspath('d:\\portfolio engine\\engine'))
+import core_engine
+
+def main():
+ tickers = ["AAPL", "MSFT", "GOOG", "AMZN", "META", "TSLA", "NVDA", "JPM", "V", "JNJ", "WMT", "PG", "MA", "UNH", "DIS"]
+ overrides = {
+ 'universe': tickers,
+ 'tickers': tickers,
+ 'capital': 100000.0,
+ 'risk_input': 5,
+ 'risk_factor': 3.0,
+ 'model': 1,
+ 'allocation_engine': 1,
+ 'single_asset_min': 0.0,
+ 'tax_enabled': False,
+ 'garch_enabled': True,
+ 'currency_symbol': '$',
+ 'custom_constraints': None,
+ 'fixed_weights': None,
+ 'max_assets': 5
+ }
+
+ print("Starting full pipeline test with 15 tickers...")
+ start = time.time()
+
+ pr = cProfile.Profile()
+ pr.enable()
+
+ result = core_engine.run_engine(overrides=overrides, serve=False, task_id="test")
+
+ pr.disable()
+ end = time.time()
+ print(f"Total time: {end - start:.2f} seconds")
+
+ ps = pstats.Stats(pr).sort_stats('cumtime')
+ ps.print_stats(30)
+
+if __name__ == "__main__":
+ main()
diff --git a/test_hang.py b/test_hang.py
index 10858fac3a5303266a686d6f7823efb1c49dafbc..3e8a9301f59584cc56a4413ab8d8f1d5893df3f1 100644
--- a/test_hang.py
+++ b/test_hang.py
@@ -1,24 +1,24 @@
-import sys
-import os
-
-sys.path.insert(0, os.path.abspath('d:\\portfolio engine\\engine'))
-
-from data import validate_tickers, fetch_data
-
-def test():
- print("Testing validate_tickers...")
- try:
- vt = validate_tickers(["AAPL", "MSFT"])
- print("validate_tickers success:", vt)
- except Exception as e:
- print("validate_tickers Exception:", e)
-
- print("Testing fetch_data...")
- try:
- fd = fetch_data(["AAPL", "MSFT"], cfg={'extended_history': False})
- print("fetch_data success:", fd)
- except Exception as e:
- print("fetch_data Exception:", e)
-
-if __name__ == "__main__":
- test()
+import sys
+import os
+
+sys.path.insert(0, os.path.abspath('d:\\portfolio engine\\engine'))
+
+from data import validate_tickers, fetch_data
+
+def test():
+ print("Testing validate_tickers...")
+ try:
+ vt = validate_tickers(["AAPL", "MSFT"])
+ print("validate_tickers success:", vt)
+ except Exception as e:
+ print("validate_tickers Exception:", e)
+
+ print("Testing fetch_data...")
+ try:
+ fd = fetch_data(["AAPL", "MSFT"], cfg={'extended_history': False})
+ print("fetch_data success:", fd)
+ except Exception as e:
+ print("fetch_data Exception:", e)
+
+if __name__ == "__main__":
+ test()
diff --git a/test_pipeline.py b/test_pipeline.py
index b8471204b46c50b68f0c850aa5df827409a3b788..429267218717ab04280e07d8192b911a4d897e43 100644
--- a/test_pipeline.py
+++ b/test_pipeline.py
@@ -1,66 +1,66 @@
-import os
-import sys
-import logging
-
-sys.path.insert(0, os.path.abspath(os.path.dirname(__file__)))
-
-from core_engine import run_engine
-from config_schema import AppConfig
-
-logging.basicConfig(level=logging.INFO)
-logger = logging.getLogger("TestPipeline")
-
-def test_pipeline():
- logger.info("Starting Pipeline Tests...")
-
- # Base Overrides
- base_overrides = {
- 'tickers': ["SPY", "TLT", "GLD", "BTC-USD", "ETH-USD"],
- 'capital': 100000.0,
- 'risk_input': 5,
- 'risk_factor': 3.0,
- 'cfg_overrides': {
- 'data_history_years': 2.0,
- 'monte_carlo_sims': 100,
- 'e2e_epochs': 2
- }
- }
-
- try:
- # Test Model 1: CAPM
- logger.info("TESTING MODEL 1 (CAPM) with Crypto + Bonds + Equities...")
- ov1 = dict(base_overrides)
- ov1['model'] = 1
- ov1['allocation_engine'] = 1
- run_engine(overrides=ov1, serve=False, preview_only=True)
- logger.info("Model 1 PASSED.")
-
- # Test Model 5: XGBoost
- logger.info("TESTING MODEL 5 (XGBoost Panel ML)...")
- ov5 = dict(base_overrides)
- ov5['model'] = 5
- ov5['allocation_engine'] = 1
- run_engine(overrides=ov5, serve=False, preview_only=True)
- logger.info("Model 5 PASSED.")
-
- # Test Futures integration
- logger.info("TESTING FUTURES INTEGRATION...")
- ov_futures = dict(base_overrides)
- ov_futures['model'] = 1
- ov_futures['allocation_engine'] = 1
- ov_futures['cfg_overrides']['with_futures'] = True
- ov_futures['cfg_overrides']['overlay_mode'] = "beta_hedge"
- run_engine(overrides=ov_futures, serve=False, preview_only=True)
- logger.info("Futures integration PASSED.")
-
- logger.info("ALL PIPELINE TESTS PASSED SUCCESSFULLY!")
- return True
-
- except Exception as e:
- logger.error(f"PIPELINE TEST FAILED: {str(e)}", exc_info=True)
- return False
-
-if __name__ == "__main__":
- success = test_pipeline()
- if not success:
- sys.exit(1)
+import os
+import sys
+import logging
+
+sys.path.insert(0, os.path.abspath(os.path.dirname(__file__)))
+
+from core_engine import run_engine
+from config_schema import AppConfig
+
+logging.basicConfig(level=logging.INFO)
+logger = logging.getLogger("TestPipeline")
+
+def test_pipeline():
+ logger.info("Starting Pipeline Tests...")
+
+ # Base Overrides
+ base_overrides = {
+ 'tickers': ["SPY", "TLT", "GLD", "BTC-USD", "ETH-USD"],
+ 'capital': 100000.0,
+ 'risk_input': 5,
+ 'risk_factor': 3.0,
+ 'cfg_overrides': {
+ 'data_history_years': 2.0,
+ 'monte_carlo_sims': 100,
+ 'e2e_epochs': 2
+ }
+ }
+
+ try:
+ # Test Model 1: CAPM
+ logger.info("TESTING MODEL 1 (CAPM) with Crypto + Bonds + Equities...")
+ ov1 = dict(base_overrides)
+ ov1['model'] = 1
+ ov1['allocation_engine'] = 1
+ run_engine(overrides=ov1, serve=False, preview_only=True)
+ logger.info("Model 1 PASSED.")
+
+ # Test Model 5: XGBoost
+ logger.info("TESTING MODEL 5 (XGBoost Panel ML)...")
+ ov5 = dict(base_overrides)
+ ov5['model'] = 5
+ ov5['allocation_engine'] = 1
+ run_engine(overrides=ov5, serve=False, preview_only=True)
+ logger.info("Model 5 PASSED.")
+
+ # Test Futures integration
+ logger.info("TESTING FUTURES INTEGRATION...")
+ ov_futures = dict(base_overrides)
+ ov_futures['model'] = 1
+ ov_futures['allocation_engine'] = 1
+ ov_futures['cfg_overrides']['with_futures'] = True
+ ov_futures['cfg_overrides']['overlay_mode'] = "beta_hedge"
+ run_engine(overrides=ov_futures, serve=False, preview_only=True)
+ logger.info("Futures integration PASSED.")
+
+ logger.info("ALL PIPELINE TESTS PASSED SUCCESSFULLY!")
+ return True
+
+ except Exception as e:
+ logger.error(f"PIPELINE TEST FAILED: {str(e)}", exc_info=True)
+ return False
+
+if __name__ == "__main__":
+ success = test_pipeline()
+ if not success:
+ sys.exit(1)
diff --git a/test_run.py b/test_run.py
index 0fcbf080078b8f2999712c8336a413cf60b58ddf..d966ea12b26d9046d431739786e72e7671ff1ae5 100644
--- a/test_run.py
+++ b/test_run.py
@@ -1,31 +1,31 @@
-import sys
-import os
-
-sys.path.append(os.path.join(os.path.dirname(__file__)))
-
-try:
- from core_engine import run_engine
-
- # Use a dummy overrides mimicking frontend request
- overrides = {
- 'universe': ['SPY', 'TLT', 'GLD', 'AAPL', 'MSFT'],
- 'tickers': ['SPY', 'TLT', 'GLD', 'AAPL', 'MSFT'],
- 'capital': 100000,
- 'risk_input': 5,
- 'risk_factor': 3.0,
- 'model': 5,
- 'allocation_engine': 1,
- 'single_asset_min': 0.0,
- 'tax_enabled': False,
- 'garch_enabled': True,
- 'currency_symbol': '$',
- 'custom_constraints': ''
- }
-
- print("Running engine...")
- res = run_engine(overrides=overrides, serve=False, task_id="test1234")
- print("Finished successfully.")
-except Exception as e:
- print(f"FAILED: {e}")
- import traceback
- traceback.print_exc()
+import sys
+import os
+
+sys.path.append(os.path.join(os.path.dirname(__file__)))
+
+try:
+ from core_engine import run_engine
+
+ # Use a dummy overrides mimicking frontend request
+ overrides = {
+ 'universe': ['SPY', 'TLT', 'GLD', 'AAPL', 'MSFT'],
+ 'tickers': ['SPY', 'TLT', 'GLD', 'AAPL', 'MSFT'],
+ 'capital': 100000,
+ 'risk_input': 5,
+ 'risk_factor': 3.0,
+ 'model': 5,
+ 'allocation_engine': 1,
+ 'single_asset_min': 0.0,
+ 'tax_enabled': False,
+ 'garch_enabled': True,
+ 'currency_symbol': '$',
+ 'custom_constraints': ''
+ }
+
+ print("Running engine...")
+ res = run_engine(overrides=overrides, serve=False, task_id="test1234")
+ print("Finished successfully.")
+except Exception as e:
+ print(f"FAILED: {e}")
+ import traceback
+ traceback.print_exc()