sovai 0.2.47__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.
Files changed (103) hide show
  1. {sovai-0.2.47 → sovai-0.2.48}/PKG-INFO +1 -1
  2. {sovai-0.2.47 → sovai-0.2.48}/pyproject.toml +1 -1
  3. {sovai-0.2.47 → sovai-0.2.48}/sovai/get_data.py +13 -52
  4. sovai-0.2.48/sovai/utils/client_side_s3_part_high copy 2.py +1028 -0
  5. sovai-0.2.47/sovai/utils/client_side_s3_part_high.py → sovai-0.2.48/sovai/utils/client_side_s3_part_high copy.py +2 -2
  6. sovai-0.2.48/sovai/utils/client_side_s3_part_high.py +924 -0
  7. sovai-0.2.48/sovai/utils/verbose_utils.py +51 -0
  8. {sovai-0.2.47 → sovai-0.2.48}/LICENSE +0 -0
  9. {sovai-0.2.47 → sovai-0.2.48}/README.md +0 -0
  10. {sovai-0.2.47 → sovai-0.2.48}/data/codes.parq +0 -0
  11. {sovai-0.2.47 → sovai-0.2.48}/data/tickers.parq +0 -0
  12. {sovai-0.2.47 → sovai-0.2.48}/sovai/.DS_Store +0 -0
  13. {sovai-0.2.47 → sovai-0.2.48}/sovai/__init__.py +0 -0
  14. {sovai-0.2.47 → sovai-0.2.48}/sovai/api_config.py +0 -0
  15. {sovai-0.2.47 → sovai-0.2.48}/sovai/assets/dropdown.css +0 -0
  16. {sovai-0.2.47 → sovai-0.2.48}/sovai/assets/features_mapping.parq +0 -0
  17. {sovai-0.2.47 → sovai-0.2.48}/sovai/basic_auth.py +0 -0
  18. {sovai-0.2.47 → sovai-0.2.48}/sovai/computations/__init__.py +0 -0
  19. {sovai-0.2.47 → sovai-0.2.48}/sovai/computations/functions.py +0 -0
  20. {sovai-0.2.47 → sovai-0.2.48}/sovai/errors/__init__.py +0 -0
  21. {sovai-0.2.47 → sovai-0.2.48}/sovai/errors/sovai_errors.py +0 -0
  22. {sovai-0.2.47 → sovai-0.2.48}/sovai/extensions/__init__.py +0 -0
  23. {sovai-0.2.47 → sovai-0.2.48}/sovai/extensions/anomalies.py +0 -0
  24. {sovai-0.2.47 → sovai-0.2.48}/sovai/extensions/ask_df_llm.py +0 -0
  25. {sovai-0.2.47 → sovai-0.2.48}/sovai/extensions/change_point_generator.py +0 -0
  26. {sovai-0.2.47 → sovai-0.2.48}/sovai/extensions/clustering.py +0 -0
  27. {sovai-0.2.47 → sovai-0.2.48}/sovai/extensions/core_kshape.py +0 -0
  28. {sovai-0.2.47 → sovai-0.2.48}/sovai/extensions/cum_sum_torch.py +0 -0
  29. {sovai-0.2.47 → sovai-0.2.48}/sovai/extensions/cusum.py +0 -0
  30. {sovai-0.2.47 → sovai-0.2.48}/sovai/extensions/dimensionality_reduction.py +0 -0
  31. {sovai-0.2.47 → sovai-0.2.48}/sovai/extensions/feature_extraction.py +0 -0
  32. {sovai-0.2.47 → sovai-0.2.48}/sovai/extensions/feature_importance.py +0 -0
  33. {sovai-0.2.47 → sovai-0.2.48}/sovai/extensions/feature_neutralizer.py +0 -0
  34. {sovai-0.2.47 → sovai-0.2.48}/sovai/extensions/filter_df.py +0 -0
  35. {sovai-0.2.47 → sovai-0.2.48}/sovai/extensions/fractional_differencing.py +0 -0
  36. {sovai-0.2.47 → sovai-0.2.48}/sovai/extensions/nowcasting.py +0 -0
  37. {sovai-0.2.47 → sovai-0.2.48}/sovai/extensions/pairwise.py +0 -0
  38. {sovai-0.2.47 → sovai-0.2.48}/sovai/extensions/pandas_extensions.py +0 -0
  39. {sovai-0.2.47 → sovai-0.2.48}/sovai/extensions/parallel_functions.py +0 -0
  40. {sovai-0.2.47 → sovai-0.2.48}/sovai/extensions/pfa_feature_selector.py +0 -0
  41. {sovai-0.2.47 → sovai-0.2.48}/sovai/extensions/regime_change.py +0 -0
  42. {sovai-0.2.47 → sovai-0.2.48}/sovai/extensions/regime_change_pca.py +0 -0
  43. {sovai-0.2.47 → sovai-0.2.48}/sovai/extensions/shapley_global_importance.py +0 -0
  44. {sovai-0.2.47 → sovai-0.2.48}/sovai/extensions/shapley_importance.py +0 -0
  45. {sovai-0.2.47 → sovai-0.2.48}/sovai/extensions/signal_evaluation.py +0 -0
  46. {sovai-0.2.47 → sovai-0.2.48}/sovai/extensions/technical_indicators.py +0 -0
  47. {sovai-0.2.47 → sovai-0.2.48}/sovai/extensions/time_decomposition.py +0 -0
  48. {sovai-0.2.47 → sovai-0.2.48}/sovai/extensions/weight_optimization.py +0 -0
  49. {sovai-0.2.47 → sovai-0.2.48}/sovai/get_compute.py +0 -0
  50. {sovai-0.2.47 → sovai-0.2.48}/sovai/get_data copy.py +0 -0
  51. {sovai-0.2.47 → sovai-0.2.48}/sovai/get_plots.py +0 -0
  52. {sovai-0.2.47 → sovai-0.2.48}/sovai/get_reports.py +0 -0
  53. {sovai-0.2.47 → sovai-0.2.48}/sovai/get_tools.py +0 -0
  54. {sovai-0.2.47 → sovai-0.2.48}/sovai/plots/__init__.py +0 -0
  55. {sovai-0.2.47 → sovai-0.2.48}/sovai/plots/accounting/__init__.py +0 -0
  56. {sovai-0.2.47 → sovai-0.2.48}/sovai/plots/accounting/accounting_plots.py +0 -0
  57. {sovai-0.2.47 → sovai-0.2.48}/sovai/plots/allocation/__init__.py +0 -0
  58. {sovai-0.2.47 → sovai-0.2.48}/sovai/plots/allocation/allocation_plots.py +0 -0
  59. {sovai-0.2.47 → sovai-0.2.48}/sovai/plots/bankruptcy/__init__.py +0 -0
  60. {sovai-0.2.47 → sovai-0.2.48}/sovai/plots/bankruptcy/bankruptcy_plots.py +0 -0
  61. {sovai-0.2.47 → sovai-0.2.48}/sovai/plots/breakout/__init__.py +0 -0
  62. {sovai-0.2.47 → sovai-0.2.48}/sovai/plots/breakout/breakout_plots.py +0 -0
  63. {sovai-0.2.47 → sovai-0.2.48}/sovai/plots/corp_risk/__init__.py +0 -0
  64. {sovai-0.2.47 → sovai-0.2.48}/sovai/plots/corp_risk/corp_risk_plots.py +0 -0
  65. {sovai-0.2.47 → sovai-0.2.48}/sovai/plots/earnings_surprise/__init__.py +0 -0
  66. {sovai-0.2.47 → sovai-0.2.48}/sovai/plots/earnings_surprise/earnings_surprise_plots.py +0 -0
  67. {sovai-0.2.47 → sovai-0.2.48}/sovai/plots/insider/__init__.py +0 -0
  68. {sovai-0.2.47 → sovai-0.2.48}/sovai/plots/insider/insider_plots.py +0 -0
  69. {sovai-0.2.47 → sovai-0.2.48}/sovai/plots/institutional/__init__.py +0 -0
  70. {sovai-0.2.47 → sovai-0.2.48}/sovai/plots/institutional/institutional_plots.py +0 -0
  71. {sovai-0.2.47 → sovai-0.2.48}/sovai/plots/news/__init__.py +0 -0
  72. {sovai-0.2.47 → sovai-0.2.48}/sovai/plots/news/news_plots.py +0 -0
  73. {sovai-0.2.47 → sovai-0.2.48}/sovai/plots/ratios/__init__.py +0 -0
  74. {sovai-0.2.47 → sovai-0.2.48}/sovai/plots/ratios/ratios_plots.py +0 -0
  75. {sovai-0.2.47 → sovai-0.2.48}/sovai/reports/accounting/__init__.py +0 -0
  76. {sovai-0.2.47 → sovai-0.2.48}/sovai/reports/accounting/accounting_balance_sheet.py +0 -0
  77. {sovai-0.2.47 → sovai-0.2.48}/sovai/reports/bankruptcy/__init__.py +0 -0
  78. {sovai-0.2.47 → sovai-0.2.48}/sovai/reports/bankruptcy/bankruptcy_monthly_top.py +0 -0
  79. {sovai-0.2.47 → sovai-0.2.48}/sovai/reports/general/__init__.py +0 -0
  80. {sovai-0.2.47 → sovai-0.2.48}/sovai/reports/general/general_plots.py +0 -0
  81. {sovai-0.2.47 → sovai-0.2.48}/sovai/reports/news/__inti__.py +0 -0
  82. {sovai-0.2.47 → sovai-0.2.48}/sovai/reports/news/news_econometric_analysis.py +0 -0
  83. {sovai-0.2.47 → sovai-0.2.48}/sovai/studies/nowcasting.py +0 -0
  84. {sovai-0.2.47 → sovai-0.2.48}/sovai/token_auth.py +0 -0
  85. {sovai-0.2.47 → sovai-0.2.48}/sovai/tools/authentication/__init__.py +0 -0
  86. {sovai-0.2.47 → sovai-0.2.48}/sovai/tools/authentication/authentication.py +0 -0
  87. {sovai-0.2.47 → sovai-0.2.48}/sovai/tools/sec/__init__.py +0 -0
  88. {sovai-0.2.47 → sovai-0.2.48}/sovai/tools/sec/graphs.py +0 -0
  89. {sovai-0.2.47 → sovai-0.2.48}/sovai/tools/sec/llm_code_generator.py +0 -0
  90. {sovai-0.2.47 → sovai-0.2.48}/sovai/tools/sec/sec_10_k_8_k_filings.py +0 -0
  91. {sovai-0.2.47 → sovai-0.2.48}/sovai/tools/sec/sec_edgar_search.py +0 -0
  92. {sovai-0.2.47 → sovai-0.2.48}/sovai/utils/__init__.py +0 -0
  93. {sovai-0.2.47 → sovai-0.2.48}/sovai/utils/client_side.py +0 -0
  94. {sovai-0.2.47 → sovai-0.2.48}/sovai/utils/client_side_s3.py +0 -0
  95. {sovai-0.2.47 → sovai-0.2.48}/sovai/utils/converter.py +0 -0
  96. {sovai-0.2.47 → sovai-0.2.48}/sovai/utils/datetime_formats.py +0 -0
  97. {sovai-0.2.47 → sovai-0.2.48}/sovai/utils/file_management.py +0 -0
  98. {sovai-0.2.47 → sovai-0.2.48}/sovai/utils/get_tickers.py +0 -0
  99. {sovai-0.2.47 → sovai-0.2.48}/sovai/utils/helpers.py +0 -0
  100. {sovai-0.2.47 → sovai-0.2.48}/sovai/utils/pandas_extensions copy.py +0 -0
  101. {sovai-0.2.47 → sovai-0.2.48}/sovai/utils/plot.py +0 -0
  102. {sovai-0.2.47 → sovai-0.2.48}/sovai/utils/port_manager.py +0 -0
  103. {sovai-0.2.47 → sovai-0.2.48}/sovai/utils/stream.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: sovai
3
- Version: 0.2.47
3
+ Version: 0.2.48
4
4
  Summary: python for asset management
5
5
  License: Proprietary License
6
6
  Author: Derek Snow
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "sovai"
3
- version = "0.2.47"
3
+ version = "0.2.48"
4
4
  description = "python for asset management"
5
5
  authors = ["Derek Snow <d.snow@outlook.com>"]
6
6
  license = "Proprietary License"
@@ -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
- logger.error(f"Parameter preparation error: {e}")
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
- logger.error(f"Client-side handler error for {normalized_endpoint}: {e}")
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
- logger.error(error_msg)
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
- logger.error(f"Failed to process plot data: {e}")
1346
+ verbose_mode.log(f"Failed to process plot data: {e}")
1386
1347
  result_data = None
1387
1348
  else:
1388
- logger.warning("Plotting is only available with the full installation. Please install 'sovai[full]' to use this feature.")
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
- logger.warning("Plotting is only available with the full installation. Please install 'sovai[full]' to use this feature.")
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
- logger.error(f"Invalid input data: {err}")
1362
+ verbose_mode.log(f"Invalid input data: {err}")
1402
1363
  raise
1403
1364
 
1404
1365
  except (ConnectionError, TimeoutError) as err:
1405
- logger.error(f"Network error: {err}")
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
- logger.error(f"API request error: {err}")
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
- logger.error(f"Error fetching data for ticker {ticker}: {e}")
1451
+ verbose_mode.log(f"Error fetching data for ticker {ticker}: {e}")
1491
1452
  results[ticker] = None
1492
1453
 
1493
1454
  return results