sovai 0.2.72__tar.gz → 0.2.74__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {sovai-0.2.72 → sovai-0.2.74}/PKG-INFO +1 -1
- {sovai-0.2.72 → sovai-0.2.74}/pyproject.toml +1 -1
- {sovai-0.2.72 → sovai-0.2.74}/sovai/extensions/signal_evaluation.py +17 -7
- {sovai-0.2.72 → sovai-0.2.74}/LICENSE +0 -0
- {sovai-0.2.72 → sovai-0.2.74}/README.md +0 -0
- {sovai-0.2.72 → sovai-0.2.74}/data/codes.parq +0 -0
- {sovai-0.2.72 → sovai-0.2.74}/data/tickers.parq +0 -0
- {sovai-0.2.72 → sovai-0.2.74}/sovai/.DS_Store +0 -0
- {sovai-0.2.72 → sovai-0.2.74}/sovai/__init__.py +0 -0
- {sovai-0.2.72 → sovai-0.2.74}/sovai/api_config.py +0 -0
- {sovai-0.2.72 → sovai-0.2.74}/sovai/assets/dropdown.css +0 -0
- {sovai-0.2.72 → sovai-0.2.74}/sovai/assets/features_mapping.parq +0 -0
- {sovai-0.2.72 → sovai-0.2.74}/sovai/assets/tickers.parq +0 -0
- {sovai-0.2.72 → sovai-0.2.74}/sovai/basic_auth.py +0 -0
- {sovai-0.2.72 → sovai-0.2.74}/sovai/computations/__init__.py +0 -0
- {sovai-0.2.72 → sovai-0.2.74}/sovai/computations/functions.py +0 -0
- {sovai-0.2.72 → sovai-0.2.74}/sovai/errors/__init__.py +0 -0
- {sovai-0.2.72 → sovai-0.2.74}/sovai/errors/sovai_errors.py +0 -0
- {sovai-0.2.72 → sovai-0.2.74}/sovai/extensions/__init__.py +0 -0
- {sovai-0.2.72 → sovai-0.2.74}/sovai/extensions/anomalies.py +0 -0
- {sovai-0.2.72 → sovai-0.2.74}/sovai/extensions/ask_df_llm.py +0 -0
- {sovai-0.2.72 → sovai-0.2.74}/sovai/extensions/change_point_generator copy.py +0 -0
- {sovai-0.2.72 → sovai-0.2.74}/sovai/extensions/change_point_generator.py +0 -0
- {sovai-0.2.72 → sovai-0.2.74}/sovai/extensions/clustering.py +0 -0
- {sovai-0.2.72 → sovai-0.2.74}/sovai/extensions/core_kshape.py +0 -0
- {sovai-0.2.72 → sovai-0.2.74}/sovai/extensions/cum_sum_torch.py +0 -0
- {sovai-0.2.72 → sovai-0.2.74}/sovai/extensions/cusum.py +0 -0
- {sovai-0.2.72 → sovai-0.2.74}/sovai/extensions/dimensionality_reduction.py +0 -0
- {sovai-0.2.72 → sovai-0.2.74}/sovai/extensions/feature_extraction.py +0 -0
- {sovai-0.2.72 → sovai-0.2.74}/sovai/extensions/feature_importance.py +0 -0
- {sovai-0.2.72 → sovai-0.2.74}/sovai/extensions/feature_neutralizer.py +0 -0
- {sovai-0.2.72 → sovai-0.2.74}/sovai/extensions/filter_df.py +0 -0
- {sovai-0.2.72 → sovai-0.2.74}/sovai/extensions/fractional_differencing.py +0 -0
- {sovai-0.2.72 → sovai-0.2.74}/sovai/extensions/nowcasting.py +0 -0
- {sovai-0.2.72 → sovai-0.2.74}/sovai/extensions/pairwise.py +0 -0
- {sovai-0.2.72 → sovai-0.2.74}/sovai/extensions/pandas_extensions.py +0 -0
- {sovai-0.2.72 → sovai-0.2.74}/sovai/extensions/parallel_functions.py +0 -0
- {sovai-0.2.72 → sovai-0.2.74}/sovai/extensions/pfa_feature_selector.py +0 -0
- {sovai-0.2.72 → sovai-0.2.74}/sovai/extensions/regime_change.py +0 -0
- {sovai-0.2.72 → sovai-0.2.74}/sovai/extensions/regime_change_pca.py +0 -0
- {sovai-0.2.72 → sovai-0.2.74}/sovai/extensions/shapley_global_importance.py +0 -0
- {sovai-0.2.72 → sovai-0.2.74}/sovai/extensions/shapley_importance.py +0 -0
- {sovai-0.2.72 → sovai-0.2.74}/sovai/extensions/technical_indicators.py +0 -0
- {sovai-0.2.72 → sovai-0.2.74}/sovai/extensions/time_decomposition.py +0 -0
- {sovai-0.2.72 → sovai-0.2.74}/sovai/extensions/weight_optimization.py +0 -0
- {sovai-0.2.72 → sovai-0.2.74}/sovai/get_compute.py +0 -0
- {sovai-0.2.72 → sovai-0.2.74}/sovai/get_data copy 2.py +0 -0
- {sovai-0.2.72 → sovai-0.2.74}/sovai/get_data copy.py +0 -0
- {sovai-0.2.72 → sovai-0.2.74}/sovai/get_data.py +0 -0
- {sovai-0.2.72 → sovai-0.2.74}/sovai/get_plots.py +0 -0
- {sovai-0.2.72 → sovai-0.2.74}/sovai/get_reports.py +0 -0
- {sovai-0.2.72 → sovai-0.2.74}/sovai/get_tools.py +0 -0
- {sovai-0.2.72 → sovai-0.2.74}/sovai/plots/__init__.py +0 -0
- {sovai-0.2.72 → sovai-0.2.74}/sovai/plots/accounting/__init__.py +0 -0
- {sovai-0.2.72 → sovai-0.2.74}/sovai/plots/accounting/accounting_plots.py +0 -0
- {sovai-0.2.72 → sovai-0.2.74}/sovai/plots/allocation/__init__.py +0 -0
- {sovai-0.2.72 → sovai-0.2.74}/sovai/plots/allocation/allocation_plots.py +0 -0
- {sovai-0.2.72 → sovai-0.2.74}/sovai/plots/bankruptcy/__init__.py +0 -0
- {sovai-0.2.72 → sovai-0.2.74}/sovai/plots/bankruptcy/bankruptcy_plots.py +0 -0
- {sovai-0.2.72 → sovai-0.2.74}/sovai/plots/breakout/__init__.py +0 -0
- {sovai-0.2.72 → sovai-0.2.74}/sovai/plots/breakout/breakout_plots.py +0 -0
- {sovai-0.2.72 → sovai-0.2.74}/sovai/plots/corp_risk/__init__.py +0 -0
- {sovai-0.2.72 → sovai-0.2.74}/sovai/plots/corp_risk/corp_risk_plots.py +0 -0
- {sovai-0.2.72 → sovai-0.2.74}/sovai/plots/earnings_surprise/__init__.py +0 -0
- {sovai-0.2.72 → sovai-0.2.74}/sovai/plots/earnings_surprise/earnings_surprise_plots.py +0 -0
- {sovai-0.2.72 → sovai-0.2.74}/sovai/plots/insider/__init__.py +0 -0
- {sovai-0.2.72 → sovai-0.2.74}/sovai/plots/insider/insider_plots.py +0 -0
- {sovai-0.2.72 → sovai-0.2.74}/sovai/plots/institutional/__init__.py +0 -0
- {sovai-0.2.72 → sovai-0.2.74}/sovai/plots/institutional/institutional_plots.py +0 -0
- {sovai-0.2.72 → sovai-0.2.74}/sovai/plots/news/__init__.py +0 -0
- {sovai-0.2.72 → sovai-0.2.74}/sovai/plots/news/news_plots.py +0 -0
- {sovai-0.2.72 → sovai-0.2.74}/sovai/plots/ratios/__init__.py +0 -0
- {sovai-0.2.72 → sovai-0.2.74}/sovai/plots/ratios/ratios_plots.py +0 -0
- {sovai-0.2.72 → sovai-0.2.74}/sovai/reports/accounting/__init__.py +0 -0
- {sovai-0.2.72 → sovai-0.2.74}/sovai/reports/accounting/accounting_balance_sheet.py +0 -0
- {sovai-0.2.72 → sovai-0.2.74}/sovai/reports/bankruptcy/__init__.py +0 -0
- {sovai-0.2.72 → sovai-0.2.74}/sovai/reports/bankruptcy/bankruptcy_monthly_top.py +0 -0
- {sovai-0.2.72 → sovai-0.2.74}/sovai/reports/general/__init__.py +0 -0
- {sovai-0.2.72 → sovai-0.2.74}/sovai/reports/general/general_plots.py +0 -0
- {sovai-0.2.72 → sovai-0.2.74}/sovai/reports/news/__inti__.py +0 -0
- {sovai-0.2.72 → sovai-0.2.74}/sovai/reports/news/news_econometric_analysis.py +0 -0
- {sovai-0.2.72 → sovai-0.2.74}/sovai/studies/nowcasting.py +0 -0
- {sovai-0.2.72 → sovai-0.2.74}/sovai/token_auth.py +0 -0
- {sovai-0.2.72 → sovai-0.2.74}/sovai/tools/authentication/__init__.py +0 -0
- {sovai-0.2.72 → sovai-0.2.74}/sovai/tools/authentication/authentication.py +0 -0
- {sovai-0.2.72 → sovai-0.2.74}/sovai/tools/sec/__init__.py +0 -0
- {sovai-0.2.72 → sovai-0.2.74}/sovai/tools/sec/graphs.py +0 -0
- {sovai-0.2.72 → sovai-0.2.74}/sovai/tools/sec/llm_code_generator.py +0 -0
- {sovai-0.2.72 → sovai-0.2.74}/sovai/tools/sec/sec_10_k_8_k_filings.py +0 -0
- {sovai-0.2.72 → sovai-0.2.74}/sovai/tools/sec/sec_edgar_search.py +0 -0
- {sovai-0.2.72 → sovai-0.2.74}/sovai/utils/__init__.py +0 -0
- {sovai-0.2.72 → sovai-0.2.74}/sovai/utils/client_side.py +0 -0
- {sovai-0.2.72 → sovai-0.2.74}/sovai/utils/client_side_s3.py +0 -0
- {sovai-0.2.72 → sovai-0.2.74}/sovai/utils/client_side_s3_part_high.py +0 -0
- {sovai-0.2.72 → sovai-0.2.74}/sovai/utils/converter.py +0 -0
- {sovai-0.2.72 → sovai-0.2.74}/sovai/utils/datetime_formats.py +0 -0
- {sovai-0.2.72 → sovai-0.2.74}/sovai/utils/file_management copy.py +0 -0
- {sovai-0.2.72 → sovai-0.2.74}/sovai/utils/file_management.py +0 -0
- {sovai-0.2.72 → sovai-0.2.74}/sovai/utils/get_tickers.py +0 -0
- {sovai-0.2.72 → sovai-0.2.74}/sovai/utils/helpers.py +0 -0
- {sovai-0.2.72 → sovai-0.2.74}/sovai/utils/pandas_extensions copy.py +0 -0
- {sovai-0.2.72 → sovai-0.2.74}/sovai/utils/plot.py +0 -0
- {sovai-0.2.72 → sovai-0.2.74}/sovai/utils/port_manager copy.py +0 -0
- {sovai-0.2.72 → sovai-0.2.74}/sovai/utils/port_manager.py +0 -0
- {sovai-0.2.72 → sovai-0.2.74}/sovai/utils/stream.py +0 -0
- {sovai-0.2.72 → sovai-0.2.74}/sovai/utils/verbose_utils.py +0 -0
|
@@ -666,8 +666,10 @@ def stress_plotting(portfolio_returns):
|
|
|
666
666
|
event_avg_returns = {}
|
|
667
667
|
for event, (start, end) in stress_events.items():
|
|
668
668
|
returns = get_event_returns(portfolio_returns, start, end)
|
|
669
|
-
|
|
670
|
-
|
|
669
|
+
# Only include events with data
|
|
670
|
+
if not returns.empty and len(returns) > 0:
|
|
671
|
+
event_returns[event] = returns
|
|
672
|
+
event_avg_returns[event] = returns.iloc[-1] / len(returns)
|
|
671
673
|
|
|
672
674
|
# Create a color map for events
|
|
673
675
|
color_map = px.colors.qualitative.Plotly
|
|
@@ -1194,6 +1196,13 @@ def draw_down_statistics(portfolio_returns):
|
|
|
1194
1196
|
# Existing preprocessing code remains the same
|
|
1195
1197
|
portfolio_returns.index = pd.to_datetime(portfolio_returns.index)
|
|
1196
1198
|
portfolio_returns = portfolio_returns.sort_index()
|
|
1199
|
+
|
|
1200
|
+
# Find the first valid index (non-NaN and non-zero)
|
|
1201
|
+
# This filters out leading zeros/empty data that might exist in the structure
|
|
1202
|
+
valid_mask = (portfolio_returns.notna()) & (portfolio_returns.abs() > 1e-10)
|
|
1203
|
+
if valid_mask.any():
|
|
1204
|
+
first_valid_idx = portfolio_returns.index[valid_mask.argmax()]
|
|
1205
|
+
portfolio_returns = portfolio_returns.loc[first_valid_idx:]
|
|
1197
1206
|
|
|
1198
1207
|
start_date = portfolio_returns.index[0]
|
|
1199
1208
|
while start_date.weekday() != 4:
|
|
@@ -1460,13 +1469,14 @@ def calculate_turnover(df, mask):
|
|
|
1460
1469
|
|
|
1461
1470
|
|
|
1462
1471
|
def turnover_plot(df_balance, rebalance_mask):
|
|
1472
|
+
# Find the first valid index in the input data
|
|
1473
|
+
first_valid_idx = _get_first_valid_index(df_balance)
|
|
1474
|
+
if first_valid_idx is not None:
|
|
1475
|
+
df_balance = df_balance.loc[first_valid_idx:]
|
|
1476
|
+
rebalance_mask = rebalance_mask.loc[first_valid_idx:]
|
|
1477
|
+
|
|
1463
1478
|
# Calculate turnover percentages
|
|
1464
1479
|
turnover_df = calculate_turnover(df_balance, rebalance_mask)
|
|
1465
|
-
|
|
1466
|
-
# Find the first valid index instead of using hardcoded date
|
|
1467
|
-
first_valid_idx = _get_first_valid_index(turnover_df)
|
|
1468
|
-
if first_valid_idx is not None:
|
|
1469
|
-
turnover_df = turnover_df.loc[first_valid_idx:]
|
|
1470
1480
|
|
|
1471
1481
|
# Find the max and min values
|
|
1472
1482
|
y_max = max(
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|