sovai 0.2.46__tar.gz → 0.2.48__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.46 → sovai-0.2.48}/PKG-INFO +1 -1
- {sovai-0.2.46 → sovai-0.2.48}/pyproject.toml +1 -1
- {sovai-0.2.46 → sovai-0.2.48}/sovai/get_data.py +13 -52
- sovai-0.2.48/sovai/utils/client_side_s3_part_high copy 2.py +1028 -0
- sovai-0.2.46/sovai/utils/client_side_s3_part_high.py → sovai-0.2.48/sovai/utils/client_side_s3_part_high copy.py +2 -2
- sovai-0.2.48/sovai/utils/client_side_s3_part_high.py +924 -0
- sovai-0.2.48/sovai/utils/verbose_utils.py +51 -0
- {sovai-0.2.46 → sovai-0.2.48}/LICENSE +0 -0
- {sovai-0.2.46 → sovai-0.2.48}/README.md +0 -0
- {sovai-0.2.46 → sovai-0.2.48}/data/codes.parq +0 -0
- {sovai-0.2.46 → sovai-0.2.48}/data/tickers.parq +0 -0
- {sovai-0.2.46 → sovai-0.2.48}/sovai/.DS_Store +0 -0
- {sovai-0.2.46 → sovai-0.2.48}/sovai/__init__.py +0 -0
- {sovai-0.2.46 → sovai-0.2.48}/sovai/api_config.py +0 -0
- {sovai-0.2.46 → sovai-0.2.48}/sovai/assets/dropdown.css +0 -0
- {sovai-0.2.46 → sovai-0.2.48}/sovai/assets/features_mapping.parq +0 -0
- {sovai-0.2.46 → sovai-0.2.48}/sovai/basic_auth.py +0 -0
- {sovai-0.2.46 → sovai-0.2.48}/sovai/computations/__init__.py +0 -0
- {sovai-0.2.46 → sovai-0.2.48}/sovai/computations/functions.py +0 -0
- {sovai-0.2.46 → sovai-0.2.48}/sovai/errors/__init__.py +0 -0
- {sovai-0.2.46 → sovai-0.2.48}/sovai/errors/sovai_errors.py +0 -0
- {sovai-0.2.46 → sovai-0.2.48}/sovai/extensions/__init__.py +0 -0
- {sovai-0.2.46 → sovai-0.2.48}/sovai/extensions/anomalies.py +0 -0
- {sovai-0.2.46 → sovai-0.2.48}/sovai/extensions/ask_df_llm.py +0 -0
- {sovai-0.2.46 → sovai-0.2.48}/sovai/extensions/change_point_generator.py +0 -0
- {sovai-0.2.46 → sovai-0.2.48}/sovai/extensions/clustering.py +0 -0
- {sovai-0.2.46 → sovai-0.2.48}/sovai/extensions/core_kshape.py +0 -0
- {sovai-0.2.46 → sovai-0.2.48}/sovai/extensions/cum_sum_torch.py +0 -0
- {sovai-0.2.46 → sovai-0.2.48}/sovai/extensions/cusum.py +0 -0
- {sovai-0.2.46 → sovai-0.2.48}/sovai/extensions/dimensionality_reduction.py +0 -0
- {sovai-0.2.46 → sovai-0.2.48}/sovai/extensions/feature_extraction.py +0 -0
- {sovai-0.2.46 → sovai-0.2.48}/sovai/extensions/feature_importance.py +0 -0
- {sovai-0.2.46 → sovai-0.2.48}/sovai/extensions/feature_neutralizer.py +0 -0
- {sovai-0.2.46 → sovai-0.2.48}/sovai/extensions/filter_df.py +0 -0
- {sovai-0.2.46 → sovai-0.2.48}/sovai/extensions/fractional_differencing.py +0 -0
- {sovai-0.2.46 → sovai-0.2.48}/sovai/extensions/nowcasting.py +0 -0
- {sovai-0.2.46 → sovai-0.2.48}/sovai/extensions/pairwise.py +0 -0
- {sovai-0.2.46 → sovai-0.2.48}/sovai/extensions/pandas_extensions.py +0 -0
- {sovai-0.2.46 → sovai-0.2.48}/sovai/extensions/parallel_functions.py +0 -0
- {sovai-0.2.46 → sovai-0.2.48}/sovai/extensions/pfa_feature_selector.py +0 -0
- {sovai-0.2.46 → sovai-0.2.48}/sovai/extensions/regime_change.py +0 -0
- {sovai-0.2.46 → sovai-0.2.48}/sovai/extensions/regime_change_pca.py +0 -0
- {sovai-0.2.46 → sovai-0.2.48}/sovai/extensions/shapley_global_importance.py +0 -0
- {sovai-0.2.46 → sovai-0.2.48}/sovai/extensions/shapley_importance.py +0 -0
- {sovai-0.2.46 → sovai-0.2.48}/sovai/extensions/signal_evaluation.py +0 -0
- {sovai-0.2.46 → sovai-0.2.48}/sovai/extensions/technical_indicators.py +0 -0
- {sovai-0.2.46 → sovai-0.2.48}/sovai/extensions/time_decomposition.py +0 -0
- {sovai-0.2.46 → sovai-0.2.48}/sovai/extensions/weight_optimization.py +0 -0
- {sovai-0.2.46 → sovai-0.2.48}/sovai/get_compute.py +0 -0
- {sovai-0.2.46 → sovai-0.2.48}/sovai/get_data copy.py +0 -0
- {sovai-0.2.46 → sovai-0.2.48}/sovai/get_plots.py +0 -0
- {sovai-0.2.46 → sovai-0.2.48}/sovai/get_reports.py +0 -0
- {sovai-0.2.46 → sovai-0.2.48}/sovai/get_tools.py +0 -0
- {sovai-0.2.46 → sovai-0.2.48}/sovai/plots/__init__.py +0 -0
- {sovai-0.2.46 → sovai-0.2.48}/sovai/plots/accounting/__init__.py +0 -0
- {sovai-0.2.46 → sovai-0.2.48}/sovai/plots/accounting/accounting_plots.py +0 -0
- {sovai-0.2.46 → sovai-0.2.48}/sovai/plots/allocation/__init__.py +0 -0
- {sovai-0.2.46 → sovai-0.2.48}/sovai/plots/allocation/allocation_plots.py +0 -0
- {sovai-0.2.46 → sovai-0.2.48}/sovai/plots/bankruptcy/__init__.py +0 -0
- {sovai-0.2.46 → sovai-0.2.48}/sovai/plots/bankruptcy/bankruptcy_plots.py +0 -0
- {sovai-0.2.46 → sovai-0.2.48}/sovai/plots/breakout/__init__.py +0 -0
- {sovai-0.2.46 → sovai-0.2.48}/sovai/plots/breakout/breakout_plots.py +0 -0
- {sovai-0.2.46 → sovai-0.2.48}/sovai/plots/corp_risk/__init__.py +0 -0
- {sovai-0.2.46 → sovai-0.2.48}/sovai/plots/corp_risk/corp_risk_plots.py +0 -0
- {sovai-0.2.46 → sovai-0.2.48}/sovai/plots/earnings_surprise/__init__.py +0 -0
- {sovai-0.2.46 → sovai-0.2.48}/sovai/plots/earnings_surprise/earnings_surprise_plots.py +0 -0
- {sovai-0.2.46 → sovai-0.2.48}/sovai/plots/insider/__init__.py +0 -0
- {sovai-0.2.46 → sovai-0.2.48}/sovai/plots/insider/insider_plots.py +0 -0
- {sovai-0.2.46 → sovai-0.2.48}/sovai/plots/institutional/__init__.py +0 -0
- {sovai-0.2.46 → sovai-0.2.48}/sovai/plots/institutional/institutional_plots.py +0 -0
- {sovai-0.2.46 → sovai-0.2.48}/sovai/plots/news/__init__.py +0 -0
- {sovai-0.2.46 → sovai-0.2.48}/sovai/plots/news/news_plots.py +0 -0
- {sovai-0.2.46 → sovai-0.2.48}/sovai/plots/ratios/__init__.py +0 -0
- {sovai-0.2.46 → sovai-0.2.48}/sovai/plots/ratios/ratios_plots.py +0 -0
- {sovai-0.2.46 → sovai-0.2.48}/sovai/reports/accounting/__init__.py +0 -0
- {sovai-0.2.46 → sovai-0.2.48}/sovai/reports/accounting/accounting_balance_sheet.py +0 -0
- {sovai-0.2.46 → sovai-0.2.48}/sovai/reports/bankruptcy/__init__.py +0 -0
- {sovai-0.2.46 → sovai-0.2.48}/sovai/reports/bankruptcy/bankruptcy_monthly_top.py +0 -0
- {sovai-0.2.46 → sovai-0.2.48}/sovai/reports/general/__init__.py +0 -0
- {sovai-0.2.46 → sovai-0.2.48}/sovai/reports/general/general_plots.py +0 -0
- {sovai-0.2.46 → sovai-0.2.48}/sovai/reports/news/__inti__.py +0 -0
- {sovai-0.2.46 → sovai-0.2.48}/sovai/reports/news/news_econometric_analysis.py +0 -0
- {sovai-0.2.46 → sovai-0.2.48}/sovai/studies/nowcasting.py +0 -0
- {sovai-0.2.46 → sovai-0.2.48}/sovai/token_auth.py +0 -0
- {sovai-0.2.46 → sovai-0.2.48}/sovai/tools/authentication/__init__.py +0 -0
- {sovai-0.2.46 → sovai-0.2.48}/sovai/tools/authentication/authentication.py +0 -0
- {sovai-0.2.46 → sovai-0.2.48}/sovai/tools/sec/__init__.py +0 -0
- {sovai-0.2.46 → sovai-0.2.48}/sovai/tools/sec/graphs.py +0 -0
- {sovai-0.2.46 → sovai-0.2.48}/sovai/tools/sec/llm_code_generator.py +0 -0
- {sovai-0.2.46 → sovai-0.2.48}/sovai/tools/sec/sec_10_k_8_k_filings.py +0 -0
- {sovai-0.2.46 → sovai-0.2.48}/sovai/tools/sec/sec_edgar_search.py +0 -0
- {sovai-0.2.46 → sovai-0.2.48}/sovai/utils/__init__.py +0 -0
- {sovai-0.2.46 → sovai-0.2.48}/sovai/utils/client_side.py +0 -0
- {sovai-0.2.46 → sovai-0.2.48}/sovai/utils/client_side_s3.py +0 -0
- {sovai-0.2.46 → sovai-0.2.48}/sovai/utils/converter.py +0 -0
- {sovai-0.2.46 → sovai-0.2.48}/sovai/utils/datetime_formats.py +0 -0
- {sovai-0.2.46 → sovai-0.2.48}/sovai/utils/file_management.py +0 -0
- {sovai-0.2.46 → sovai-0.2.48}/sovai/utils/get_tickers.py +0 -0
- {sovai-0.2.46 → sovai-0.2.48}/sovai/utils/helpers.py +0 -0
- {sovai-0.2.46 → sovai-0.2.48}/sovai/utils/pandas_extensions copy.py +0 -0
- {sovai-0.2.46 → sovai-0.2.48}/sovai/utils/plot.py +0 -0
- {sovai-0.2.46 → sovai-0.2.48}/sovai/utils/port_manager.py +0 -0
- {sovai-0.2.46 → sovai-0.2.48}/sovai/utils/stream.py +0 -0
|
@@ -29,6 +29,7 @@ from sovai.utils.datetime_formats import datetime_format
|
|
|
29
29
|
from sovai.utils.client_side import client_side_frame
|
|
30
30
|
from sovai.utils.client_side_s3 import load_frame_s3
|
|
31
31
|
from sovai.utils.client_side_s3_part_high import load_frame_s3_partitioned_high
|
|
32
|
+
from sovai.utils.verbose_utils import verbose_mode
|
|
32
33
|
|
|
33
34
|
# Configure logging
|
|
34
35
|
logger = logging.getLogger(__name__)
|
|
@@ -61,47 +62,6 @@ def is_full_installation() -> bool:
|
|
|
61
62
|
_query_cache = {}
|
|
62
63
|
|
|
63
64
|
|
|
64
|
-
class VerboseMode:
|
|
65
|
-
"""
|
|
66
|
-
Utility class to handle verbose output throughout the application.
|
|
67
|
-
|
|
68
|
-
This class provides a consistent interface for controlling debug output
|
|
69
|
-
without cluttering the main code with conditional print statements.
|
|
70
|
-
"""
|
|
71
|
-
|
|
72
|
-
def __init__(self, verbose: bool = False):
|
|
73
|
-
"""
|
|
74
|
-
Initialize verbose mode settings.
|
|
75
|
-
|
|
76
|
-
Args:
|
|
77
|
-
verbose: Whether to enable verbose output
|
|
78
|
-
"""
|
|
79
|
-
self.verbose = verbose
|
|
80
|
-
|
|
81
|
-
def log(self, *args, **kwargs) -> None:
|
|
82
|
-
"""
|
|
83
|
-
Print information when verbose mode is enabled.
|
|
84
|
-
|
|
85
|
-
Args:
|
|
86
|
-
*args: Arguments to print
|
|
87
|
-
**kwargs: Keyword arguments for print function
|
|
88
|
-
"""
|
|
89
|
-
if self.verbose:
|
|
90
|
-
print(*args, **kwargs)
|
|
91
|
-
|
|
92
|
-
def toggle_verbose(self, verbose: Optional[bool] = None) -> None:
|
|
93
|
-
"""
|
|
94
|
-
Toggle or set verbose mode.
|
|
95
|
-
|
|
96
|
-
Args:
|
|
97
|
-
verbose: If provided, set verbose mode to this value; otherwise toggle
|
|
98
|
-
"""
|
|
99
|
-
if verbose is None:
|
|
100
|
-
self.verbose = not self.verbose
|
|
101
|
-
else:
|
|
102
|
-
self.verbose = verbose
|
|
103
|
-
|
|
104
|
-
|
|
105
65
|
class ApiRequestHandler:
|
|
106
66
|
"""
|
|
107
67
|
Centralized handler for API requests with robust error handling,
|
|
@@ -271,7 +231,7 @@ class ApiRequestHandler:
|
|
|
271
231
|
|
|
272
232
|
|
|
273
233
|
# Initialize verbose mode handler
|
|
274
|
-
verbose_mode = VerboseMode()
|
|
234
|
+
# verbose_mode = VerboseMode()
|
|
275
235
|
|
|
276
236
|
|
|
277
237
|
# Endpoint configurations
|
|
@@ -1191,7 +1151,7 @@ def data(
|
|
|
1191
1151
|
)
|
|
1192
1152
|
)
|
|
1193
1153
|
except Exception as e:
|
|
1194
|
-
|
|
1154
|
+
verbose_mode.log(f"Parameter preparation error: {e}")
|
|
1195
1155
|
raise ValueError(f"Failed to prepare request parameters: {e}")
|
|
1196
1156
|
|
|
1197
1157
|
# Prepare endpoint and parameters
|
|
@@ -1241,9 +1201,10 @@ def data(
|
|
|
1241
1201
|
)
|
|
1242
1202
|
_query_cache[cache_key] = handler_result
|
|
1243
1203
|
result_data = handler_result
|
|
1204
|
+
# print(handler_result)
|
|
1244
1205
|
break
|
|
1245
1206
|
except Exception as e:
|
|
1246
|
-
|
|
1207
|
+
verbose_mode.log(f"Client-side handler error for {normalized_endpoint}: {e}")
|
|
1247
1208
|
# Fall through to API request if client-side handler fails
|
|
1248
1209
|
|
|
1249
1210
|
# Only proceed with API request if no handler result
|
|
@@ -1315,7 +1276,7 @@ def data(
|
|
|
1315
1276
|
|
|
1316
1277
|
if data_result is None:
|
|
1317
1278
|
error_msg = "Failed to download data from all provided URLs"
|
|
1318
|
-
|
|
1279
|
+
verbose_mode.log(error_msg)
|
|
1319
1280
|
raise Exception(error_msg)
|
|
1320
1281
|
|
|
1321
1282
|
filter_columns_arg = columns
|
|
@@ -1382,10 +1343,10 @@ def data(
|
|
|
1382
1343
|
fig = set_dark_mode(fig)
|
|
1383
1344
|
result_data = fig
|
|
1384
1345
|
except Exception as e:
|
|
1385
|
-
|
|
1346
|
+
verbose_mode.log(f"Failed to process plot data: {e}")
|
|
1386
1347
|
result_data = None
|
|
1387
1348
|
else:
|
|
1388
|
-
|
|
1349
|
+
verbose_mode.log("Plotting is only available with the full installation. Please install 'sovai[full]' to use this feature.")
|
|
1389
1350
|
result_data = None
|
|
1390
1351
|
|
|
1391
1352
|
# Generate plot if requested
|
|
@@ -1394,19 +1355,19 @@ def data(
|
|
|
1394
1355
|
if HAS_FULL_INSTALL:
|
|
1395
1356
|
result_data = _draw_graphs(result_data)
|
|
1396
1357
|
else:
|
|
1397
|
-
|
|
1358
|
+
verbose_mode.log("Plotting is only available with the full installation. Please install 'sovai[full]' to use this feature.")
|
|
1398
1359
|
result_data = None
|
|
1399
1360
|
|
|
1400
1361
|
except InvalidInputData as err:
|
|
1401
|
-
|
|
1362
|
+
verbose_mode.log(f"Invalid input data: {err}")
|
|
1402
1363
|
raise
|
|
1403
1364
|
|
|
1404
1365
|
except (ConnectionError, TimeoutError) as err:
|
|
1405
|
-
|
|
1366
|
+
verbose_mode.log(f"Network error: {err}")
|
|
1406
1367
|
raise ConnectionError(f"Could not connect to API: {err}")
|
|
1407
1368
|
|
|
1408
1369
|
except Exception as err:
|
|
1409
|
-
|
|
1370
|
+
verbose_mode.log(f"API request error: {err}")
|
|
1410
1371
|
raise
|
|
1411
1372
|
|
|
1412
1373
|
|
|
@@ -1487,7 +1448,7 @@ async def fetch_multiple_tickers(
|
|
|
1487
1448
|
result = await future
|
|
1488
1449
|
results[ticker] = result
|
|
1489
1450
|
except Exception as e:
|
|
1490
|
-
|
|
1451
|
+
verbose_mode.log(f"Error fetching data for ticker {ticker}: {e}")
|
|
1491
1452
|
results[ticker] = None
|
|
1492
1453
|
|
|
1493
1454
|
return results
|