sovai 0.2.49__tar.gz → 0.2.52__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.49 → sovai-0.2.52}/PKG-INFO +35 -32
  2. {sovai-0.2.49 → sovai-0.2.52}/pyproject.toml +41 -12
  3. {sovai-0.2.49 → sovai-0.2.52}/sovai/__init__.py +6 -2
  4. {sovai-0.2.49 → sovai-0.2.52}/sovai/utils/client_side_s3_part_high.py +5 -5
  5. {sovai-0.2.49 → sovai-0.2.52}/LICENSE +0 -0
  6. {sovai-0.2.49 → sovai-0.2.52}/README.md +0 -0
  7. {sovai-0.2.49 → sovai-0.2.52}/data/codes.parq +0 -0
  8. {sovai-0.2.49 → sovai-0.2.52}/data/tickers.parq +0 -0
  9. {sovai-0.2.49 → sovai-0.2.52}/sovai/.DS_Store +0 -0
  10. {sovai-0.2.49 → sovai-0.2.52}/sovai/api_config.py +0 -0
  11. {sovai-0.2.49 → sovai-0.2.52}/sovai/assets/dropdown.css +0 -0
  12. {sovai-0.2.49 → sovai-0.2.52}/sovai/assets/features_mapping.parq +0 -0
  13. {sovai-0.2.49 → sovai-0.2.52}/sovai/basic_auth.py +0 -0
  14. {sovai-0.2.49 → sovai-0.2.52}/sovai/computations/__init__.py +0 -0
  15. {sovai-0.2.49 → sovai-0.2.52}/sovai/computations/functions.py +0 -0
  16. {sovai-0.2.49 → sovai-0.2.52}/sovai/errors/__init__.py +0 -0
  17. {sovai-0.2.49 → sovai-0.2.52}/sovai/errors/sovai_errors.py +0 -0
  18. {sovai-0.2.49 → sovai-0.2.52}/sovai/extensions/__init__.py +0 -0
  19. {sovai-0.2.49 → sovai-0.2.52}/sovai/extensions/anomalies.py +0 -0
  20. {sovai-0.2.49 → sovai-0.2.52}/sovai/extensions/ask_df_llm.py +0 -0
  21. {sovai-0.2.49 → sovai-0.2.52}/sovai/extensions/change_point_generator.py +0 -0
  22. {sovai-0.2.49 → sovai-0.2.52}/sovai/extensions/clustering.py +0 -0
  23. {sovai-0.2.49 → sovai-0.2.52}/sovai/extensions/core_kshape.py +0 -0
  24. {sovai-0.2.49 → sovai-0.2.52}/sovai/extensions/cum_sum_torch.py +0 -0
  25. {sovai-0.2.49 → sovai-0.2.52}/sovai/extensions/cusum.py +0 -0
  26. {sovai-0.2.49 → sovai-0.2.52}/sovai/extensions/dimensionality_reduction.py +0 -0
  27. {sovai-0.2.49 → sovai-0.2.52}/sovai/extensions/feature_extraction.py +0 -0
  28. {sovai-0.2.49 → sovai-0.2.52}/sovai/extensions/feature_importance.py +0 -0
  29. {sovai-0.2.49 → sovai-0.2.52}/sovai/extensions/feature_neutralizer.py +0 -0
  30. {sovai-0.2.49 → sovai-0.2.52}/sovai/extensions/filter_df.py +0 -0
  31. {sovai-0.2.49 → sovai-0.2.52}/sovai/extensions/fractional_differencing.py +0 -0
  32. {sovai-0.2.49 → sovai-0.2.52}/sovai/extensions/nowcasting.py +0 -0
  33. {sovai-0.2.49 → sovai-0.2.52}/sovai/extensions/pairwise.py +0 -0
  34. {sovai-0.2.49 → sovai-0.2.52}/sovai/extensions/pandas_extensions.py +0 -0
  35. {sovai-0.2.49 → sovai-0.2.52}/sovai/extensions/parallel_functions.py +0 -0
  36. {sovai-0.2.49 → sovai-0.2.52}/sovai/extensions/pfa_feature_selector.py +0 -0
  37. {sovai-0.2.49 → sovai-0.2.52}/sovai/extensions/regime_change.py +0 -0
  38. {sovai-0.2.49 → sovai-0.2.52}/sovai/extensions/regime_change_pca.py +0 -0
  39. {sovai-0.2.49 → sovai-0.2.52}/sovai/extensions/shapley_global_importance.py +0 -0
  40. {sovai-0.2.49 → sovai-0.2.52}/sovai/extensions/shapley_importance.py +0 -0
  41. {sovai-0.2.49 → sovai-0.2.52}/sovai/extensions/signal_evaluation.py +0 -0
  42. {sovai-0.2.49 → sovai-0.2.52}/sovai/extensions/technical_indicators.py +0 -0
  43. {sovai-0.2.49 → sovai-0.2.52}/sovai/extensions/time_decomposition.py +0 -0
  44. {sovai-0.2.49 → sovai-0.2.52}/sovai/extensions/weight_optimization.py +0 -0
  45. {sovai-0.2.49 → sovai-0.2.52}/sovai/get_compute.py +0 -0
  46. {sovai-0.2.49 → sovai-0.2.52}/sovai/get_data copy.py +0 -0
  47. {sovai-0.2.49 → sovai-0.2.52}/sovai/get_data.py +0 -0
  48. {sovai-0.2.49 → sovai-0.2.52}/sovai/get_plots.py +0 -0
  49. {sovai-0.2.49 → sovai-0.2.52}/sovai/get_reports.py +0 -0
  50. {sovai-0.2.49 → sovai-0.2.52}/sovai/get_tools.py +0 -0
  51. {sovai-0.2.49 → sovai-0.2.52}/sovai/plots/__init__.py +0 -0
  52. {sovai-0.2.49 → sovai-0.2.52}/sovai/plots/accounting/__init__.py +0 -0
  53. {sovai-0.2.49 → sovai-0.2.52}/sovai/plots/accounting/accounting_plots.py +0 -0
  54. {sovai-0.2.49 → sovai-0.2.52}/sovai/plots/allocation/__init__.py +0 -0
  55. {sovai-0.2.49 → sovai-0.2.52}/sovai/plots/allocation/allocation_plots.py +0 -0
  56. {sovai-0.2.49 → sovai-0.2.52}/sovai/plots/bankruptcy/__init__.py +0 -0
  57. {sovai-0.2.49 → sovai-0.2.52}/sovai/plots/bankruptcy/bankruptcy_plots.py +0 -0
  58. {sovai-0.2.49 → sovai-0.2.52}/sovai/plots/breakout/__init__.py +0 -0
  59. {sovai-0.2.49 → sovai-0.2.52}/sovai/plots/breakout/breakout_plots.py +0 -0
  60. {sovai-0.2.49 → sovai-0.2.52}/sovai/plots/corp_risk/__init__.py +0 -0
  61. {sovai-0.2.49 → sovai-0.2.52}/sovai/plots/corp_risk/corp_risk_plots.py +0 -0
  62. {sovai-0.2.49 → sovai-0.2.52}/sovai/plots/earnings_surprise/__init__.py +0 -0
  63. {sovai-0.2.49 → sovai-0.2.52}/sovai/plots/earnings_surprise/earnings_surprise_plots.py +0 -0
  64. {sovai-0.2.49 → sovai-0.2.52}/sovai/plots/insider/__init__.py +0 -0
  65. {sovai-0.2.49 → sovai-0.2.52}/sovai/plots/insider/insider_plots.py +0 -0
  66. {sovai-0.2.49 → sovai-0.2.52}/sovai/plots/institutional/__init__.py +0 -0
  67. {sovai-0.2.49 → sovai-0.2.52}/sovai/plots/institutional/institutional_plots.py +0 -0
  68. {sovai-0.2.49 → sovai-0.2.52}/sovai/plots/news/__init__.py +0 -0
  69. {sovai-0.2.49 → sovai-0.2.52}/sovai/plots/news/news_plots.py +0 -0
  70. {sovai-0.2.49 → sovai-0.2.52}/sovai/plots/ratios/__init__.py +0 -0
  71. {sovai-0.2.49 → sovai-0.2.52}/sovai/plots/ratios/ratios_plots.py +0 -0
  72. {sovai-0.2.49 → sovai-0.2.52}/sovai/reports/accounting/__init__.py +0 -0
  73. {sovai-0.2.49 → sovai-0.2.52}/sovai/reports/accounting/accounting_balance_sheet.py +0 -0
  74. {sovai-0.2.49 → sovai-0.2.52}/sovai/reports/bankruptcy/__init__.py +0 -0
  75. {sovai-0.2.49 → sovai-0.2.52}/sovai/reports/bankruptcy/bankruptcy_monthly_top.py +0 -0
  76. {sovai-0.2.49 → sovai-0.2.52}/sovai/reports/general/__init__.py +0 -0
  77. {sovai-0.2.49 → sovai-0.2.52}/sovai/reports/general/general_plots.py +0 -0
  78. {sovai-0.2.49 → sovai-0.2.52}/sovai/reports/news/__inti__.py +0 -0
  79. {sovai-0.2.49 → sovai-0.2.52}/sovai/reports/news/news_econometric_analysis.py +0 -0
  80. {sovai-0.2.49 → sovai-0.2.52}/sovai/studies/nowcasting.py +0 -0
  81. {sovai-0.2.49 → sovai-0.2.52}/sovai/token_auth.py +0 -0
  82. {sovai-0.2.49 → sovai-0.2.52}/sovai/tools/authentication/__init__.py +0 -0
  83. {sovai-0.2.49 → sovai-0.2.52}/sovai/tools/authentication/authentication.py +0 -0
  84. {sovai-0.2.49 → sovai-0.2.52}/sovai/tools/sec/__init__.py +0 -0
  85. {sovai-0.2.49 → sovai-0.2.52}/sovai/tools/sec/graphs.py +0 -0
  86. {sovai-0.2.49 → sovai-0.2.52}/sovai/tools/sec/llm_code_generator.py +0 -0
  87. {sovai-0.2.49 → sovai-0.2.52}/sovai/tools/sec/sec_10_k_8_k_filings.py +0 -0
  88. {sovai-0.2.49 → sovai-0.2.52}/sovai/tools/sec/sec_edgar_search.py +0 -0
  89. {sovai-0.2.49 → sovai-0.2.52}/sovai/utils/__init__.py +0 -0
  90. {sovai-0.2.49 → sovai-0.2.52}/sovai/utils/client_side.py +0 -0
  91. {sovai-0.2.49 → sovai-0.2.52}/sovai/utils/client_side_s3.py +0 -0
  92. {sovai-0.2.49 → sovai-0.2.52}/sovai/utils/client_side_s3_part_high copy 2.py +0 -0
  93. {sovai-0.2.49 → sovai-0.2.52}/sovai/utils/client_side_s3_part_high copy.py +0 -0
  94. {sovai-0.2.49 → sovai-0.2.52}/sovai/utils/converter.py +0 -0
  95. {sovai-0.2.49 → sovai-0.2.52}/sovai/utils/datetime_formats.py +0 -0
  96. {sovai-0.2.49 → sovai-0.2.52}/sovai/utils/file_management.py +0 -0
  97. {sovai-0.2.49 → sovai-0.2.52}/sovai/utils/get_tickers.py +0 -0
  98. {sovai-0.2.49 → sovai-0.2.52}/sovai/utils/helpers.py +0 -0
  99. {sovai-0.2.49 → sovai-0.2.52}/sovai/utils/pandas_extensions copy.py +0 -0
  100. {sovai-0.2.49 → sovai-0.2.52}/sovai/utils/plot.py +0 -0
  101. {sovai-0.2.49 → sovai-0.2.52}/sovai/utils/port_manager.py +0 -0
  102. {sovai-0.2.49 → sovai-0.2.52}/sovai/utils/stream.py +0 -0
  103. {sovai-0.2.49 → sovai-0.2.52}/sovai/utils/verbose_utils.py +0 -0
@@ -1,11 +1,11 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: sovai
3
- Version: 0.2.49
3
+ Version: 0.2.52
4
4
  Summary: python for asset management
5
5
  License: Proprietary License
6
6
  Author: Derek Snow
7
7
  Author-email: d.snow@outlook.com
8
- Requires-Python: >=3.10,<4.0
8
+ Requires-Python: >=3.10
9
9
  Classifier: License :: Other/Proprietary License
10
10
  Classifier: Programming Language :: Python :: 3
11
11
  Classifier: Programming Language :: Python :: 3.10
@@ -14,43 +14,46 @@ Classifier: Programming Language :: Python :: 3.12
14
14
  Classifier: Programming Language :: Python :: 3.13
15
15
  Provides-Extra: full
16
16
  Requires-Dist: boto3 (>=1.20)
17
- Requires-Dist: dash (>=2.0) ; extra == "full"
18
- Requires-Dist: dash-bootstrap-components (>=1.6.0) ; extra == "full"
19
- Requires-Dist: edgar-tool (>=1.3.3,<2.0.0)
20
- Requires-Dist: fastapi-cache (>=0.1.0,<0.2.0)
21
- Requires-Dist: fastapi-cache2[redis] (>=0.2.1,<0.3.0)
22
- Requires-Dist: gcsfs (>=2024.10.0,<2025.0.0)
23
- Requires-Dist: great-tables (>=0.9) ; extra == "full"
24
- Requires-Dist: ipywidgets (>=8.1.3) ; extra == "full"
17
+ Requires-Dist: dash ; extra == "full"
18
+ Requires-Dist: dash-bootstrap-components ; extra == "full"
19
+ Requires-Dist: edgar-tool (>=1.3.3)
20
+ Requires-Dist: fastapi-cache (>=0.1.0)
21
+ Requires-Dist: fastapi-cache2[redis] (>=0.2.1)
22
+ Requires-Dist: gcsfs (>=2024.9)
23
+ Requires-Dist: great-tables ; extra == "full"
24
+ Requires-Dist: ipywidgets (>=8.1.6,<9.0.0)
25
+ Requires-Dist: ipywidgets ; extra == "full"
25
26
  Requires-Dist: joblib (>=1.0)
26
- Requires-Dist: lightgbm (>=4.5.0) ; extra == "full"
27
- Requires-Dist: matplotlib (>=3.0) ; extra == "full"
28
- Requires-Dist: mfles (>=0.2) ; extra == "full"
29
- Requires-Dist: networkx (>=3.3,<4.0)
30
- Requires-Dist: numba (>=0.50) ; extra == "full"
27
+ Requires-Dist: lightgbm ; extra == "full"
28
+ Requires-Dist: matplotlib ; extra == "full"
29
+ Requires-Dist: mfles ; extra == "full"
30
+ Requires-Dist: networkx (>=3.3)
31
+ Requires-Dist: numba ; extra == "full"
31
32
  Requires-Dist: numpy (>=1.20)
32
- Requires-Dist: openai (>=1.0) ; extra == "full"
33
+ Requires-Dist: openai ; extra == "full"
33
34
  Requires-Dist: pandas (>=1.0)
34
- Requires-Dist: pexpect (>=4.9.0) ; extra == "full"
35
- Requires-Dist: plotly (>=5.0) ; extra == "full"
36
- Requires-Dist: polars (>=1.2,<2.0)
37
- Requires-Dist: polars-talib (==0.1.3) ; extra == "full"
35
+ Requires-Dist: pexpect ; extra == "full"
36
+ Requires-Dist: plotly (>=6.0.1,<7.0.0)
37
+ Requires-Dist: plotly ; extra == "full"
38
+ Requires-Dist: polars (>=1.2)
39
+ Requires-Dist: polars-talib ; extra == "full"
38
40
  Requires-Dist: pyarrow (>=5.0)
39
41
  Requires-Dist: python-dateutil (>=2.8)
40
42
  Requires-Dist: python-dotenv (>=0.10)
41
- Requires-Dist: pyvis (>=0.3.2,<0.4.0)
42
- Requires-Dist: rapidfuzz (>=3.9.7,<4.0.0)
43
+ Requires-Dist: pyvis (>=0.3.2)
44
+ Requires-Dist: rapidfuzz (>=3.9.7)
43
45
  Requires-Dist: requests (>=2.20)
44
- Requires-Dist: ruptures (>=1.0) ; extra == "full"
45
- Requires-Dist: s3fs (>=2024.10.0,<2025.0.0)
46
- Requires-Dist: scikit-learn (>=1.0) ; extra == "full"
47
- Requires-Dist: scipy (>=1.0) ; extra == "full"
48
- Requires-Dist: seaborn (>=0.13.2,<0.14.0)
49
- Requires-Dist: shap (>=0.40) ; extra == "full"
50
- Requires-Dist: skfolio (>=0.3) ; extra == "full"
51
- Requires-Dist: statsforecast (>=1.0) ; extra == "full"
52
- Requires-Dist: tensorly (>=0.6) ; extra == "full"
53
- Requires-Dist: yachalk (>=0.1.6,<0.2.0)
46
+ Requires-Dist: ruptures ; extra == "full"
47
+ Requires-Dist: s3fs (>=2024.9)
48
+ Requires-Dist: scikit-learn ; extra == "full"
49
+ Requires-Dist: scipy ; extra == "full"
50
+ Requires-Dist: seaborn (>=0.13.2)
51
+ Requires-Dist: shap ; extra == "full"
52
+ Requires-Dist: skfolio ; extra == "full"
53
+ Requires-Dist: statsforecast ; extra == "full"
54
+ Requires-Dist: tensorly ; extra == "full"
55
+ Requires-Dist: tqdm (>=4.67.1,<5.0.0)
56
+ Requires-Dist: yachalk (>=0.1.6)
54
57
  Description-Content-Type: text/markdown
55
58
 
56
59
  [![Sovai Python SDK package](https://github.com/sovai-research/SovAI/actions/workflows/main.yml/badge.svg)](https://github.com/sovai-research/SovAI/actions/workflows/main.yml)
@@ -1,10 +1,43 @@
1
- [tool.poetry]
1
+ [build-system]
2
+ requires = ["poetry-core>=1.0.0"]
3
+ build-backend = "poetry.core.masonry.api"
4
+
5
+ [project]
2
6
  name = "sovai"
3
- version = "0.2.49"
7
+ version = "0.2.52"
4
8
  description = "python for asset management"
5
- authors = ["Derek Snow <d.snow@outlook.com>"]
6
- license = "Proprietary License"
9
+ authors = [
10
+ {name = "Derek Snow", email = "d.snow@outlook.com"}
11
+ ]
12
+ license = {text = "Proprietary License"}
7
13
  readme = "README.md"
14
+ requires-python = ">=3.10"
15
+ dependencies = [
16
+ "pandas>=1.0",
17
+ "numpy>=1.20",
18
+ "pyarrow>=5.0",
19
+ "requests>=2.20",
20
+ "python-dateutil>=2.8",
21
+ "python-dotenv>=0.10",
22
+ "polars>=1.2",
23
+ "boto3>=1.20",
24
+ "joblib>=1.0",
25
+ "rapidfuzz>=3.9.7",
26
+ "edgar-tool>=1.3.3",
27
+ "yachalk>=0.1.6",
28
+ "pyvis>=0.3.2",
29
+ "networkx>=3.3",
30
+ "seaborn>=0.13.2",
31
+ "s3fs>=2024.9",
32
+ "gcsfs>=2024.9",
33
+ "fastapi-cache>=0.1.0",
34
+ "fastapi-cache2[redis]>=0.2.1",
35
+ "plotly (>=6.0.1,<7.0.0)",
36
+ "tqdm (>=4.67.1,<5.0.0)",
37
+ "ipywidgets (>=8.1.6,<9.0.0)"
38
+ ]
39
+
40
+ [tool.poetry]
8
41
  include = ["sovai/**/*", "data/**/*"]
9
42
  exclude = [
10
43
  "notebooks",
@@ -29,6 +62,7 @@ exclude = [
29
62
  "**/.ipynb_checkpoints",
30
63
  ]
31
64
 
65
+ # Keep Poetry's dependencies section for detailed version specs
32
66
  [tool.poetry.dependencies]
33
67
  python = "^3.10"
34
68
  pandas = ">=1.0"
@@ -44,7 +78,6 @@ rapidfuzz = "^3.9.7"
44
78
  edgar-tool = "^1.3.3"
45
79
  scipy = {version = ">=1.0", optional = true}
46
80
  matplotlib = {version = ">=3.0", optional = true}
47
- plotly = {version = ">=5.0", optional = true}
48
81
  scikit-learn = {version = ">=1.0", optional = true}
49
82
  numba = {version = ">=0.50", optional = true}
50
83
  dash = {version = ">=2.0", optional = true}
@@ -58,20 +91,19 @@ openai = {version = ">=1.0", optional = true}
58
91
  mfles = {version = ">=0.2", optional = true}
59
92
  pexpect = {version = ">=4.9.0", optional = true}
60
93
  lightgbm = {version = ">=4.5.0", optional = true}
61
- ipywidgets = {version = ">=8.1.3", optional = true}
62
94
  polars-talib = {version = "0.1.3", optional = true}
63
95
  dash-bootstrap-components = {version = ">=1.6.0", optional = true}
64
96
  yachalk = "^0.1.6"
65
97
  pyvis = "^0.3.2"
66
98
  networkx = "^3.3"
67
99
  seaborn = "^0.13.2"
68
- s3fs = "^2024.10.0"
69
- gcsfs = "^2024.10.0"
100
+ s3fs = "^2024.9"
101
+ gcsfs = "^2024.9"
70
102
  fastapi-cache = "^0.1.0"
71
103
  fastapi-cache2 = {extras = ["redis"], version = "^0.2.1"}
72
104
 
73
105
 
74
- [tool.poetry.extras]
106
+ [project.optional-dependencies]
75
107
  full = [
76
108
  "scipy",
77
109
  "matplotlib",
@@ -103,6 +135,3 @@ traitlets = "^5.14.3"
103
135
  jupyterlab = "^4.2.5"
104
136
  pytest = "^7.0"
105
137
  black = "^22.0"
106
-
107
-
108
- [build-system]
@@ -12,7 +12,11 @@ import warnings
12
12
  warnings.filterwarnings("ignore")
13
13
 
14
14
 
15
- __version__ = "0.1.25"
15
+ try:
16
+ from importlib.metadata import version
17
+ __version__ = version("sovai")
18
+ except:
19
+ __version__ = "0.2.49" # Fallback to current version in pyproject.toml
16
20
 
17
21
  # Call the function to ensure tickers data is up-to-date
18
22
  save_or_update_tickers()
@@ -35,4 +39,4 @@ except ImportError as e:
35
39
  __all__ = ['read_key', 'save_key', 'ApiConfig', 'data', 'basic_auth', 'token_auth']
36
40
 
37
41
  if HAS_FULL_INSTALL:
38
- __all__ += ['plot', 'report', 'compute', 'nowcast', 'extension', 'sec_search', 'sec_filing', 'code', 'sec_graph']
42
+ __all__ += ['plot', 'report', 'compute', 'nowcast', 'extension', 'sec_search', 'sec_filing', 'code', 'sec_graph']
@@ -358,7 +358,7 @@ class DataLoader:
358
358
  # logger.info(f"[{path}] Filter applied. Found {fragment_count} fragments. Schema after filtering: {dataset.schema}")
359
359
  verbose_mode.log(f"[{path}] Filter applied. Schema after filtering: {dataset.schema}")
360
360
  except Exception as filter_e:
361
- verbose_mode.log(f"[{path}] Error applying filters: {filter_e}", exc_info=True)
361
+ verbose_mode.log(f"[{path}] Error applying filters: {filter_e}")
362
362
  verbose_mode.log(f"--- Loading Partition Failed (Filter Error): {path} ---")
363
363
  return pd.DataFrame()
364
364
 
@@ -380,7 +380,7 @@ class DataLoader:
380
380
  # Proceed to convert empty table to empty DataFrame
381
381
 
382
382
  except Exception as to_table_e:
383
- verbose_mode.log(f"[{path}] Error during dataset.to_table(columns={columns}): {to_table_e}", exc_info=True)
383
+ verbose_mode.log(f"[{path}] Error during dataset.to_table(columns={columns}): {to_table_e}")
384
384
  verbose_mode.log(f"[{path}] Dataset schema at time of error: {dataset.schema}")
385
385
  verbose_mode.log(f"--- Loading Partition Failed (to_table Error): {path} ---")
386
386
  return pd.DataFrame()
@@ -407,7 +407,7 @@ class DataLoader:
407
407
 
408
408
  except Exception as e:
409
409
  # Catch-all for other errors (e.g., ds.dataset creation failed)
410
- verbose_mode.log(f"Unhandled error processing partition {path}: {e}", exc_info=True)
410
+ verbose_mode.log(f"Unhandled error processing partition {path}: {e}")
411
411
  verbose_mode.log(f"--- Loading Partition Failed (Unhandled Error): {path} ---")
412
412
  return pd.DataFrame()
413
413
 
@@ -434,7 +434,7 @@ class DataLoader:
434
434
  end_date_pa = pa.scalar(end_date_obj, type=pa.date32())
435
435
  filters.append(ds.field('date') <= end_date_pa)
436
436
  except Exception as e:
437
- verbose_mode.log(f"Failed to build date filters (start={start_date}, end={end_date}): {e}", exc_info=True)
437
+ verbose_mode.log(f"Failed to build date filters (start={start_date}, end={end_date}): {e}")
438
438
  # Decide if you want to raise or return empty filters
439
439
  # return [] # Return empty filters if parsing fails?
440
440
 
@@ -479,7 +479,7 @@ class DataLoader:
479
479
 
480
480
  except Exception as e:
481
481
  # This catches errors raised *after* submit, e.g., during future.result() processing if not caught inside load_partition
482
- verbose_mode.log(f"Task failed for partition {path} during result retrieval: {e}", exc_info=True)
482
+ verbose_mode.log(f"Task failed for partition {path} during result retrieval: {e}")
483
483
 
484
484
  verbose_mode.log(f"Parallel loading finished. Collected results from {len(results)} non-empty partitions.")
485
485
  return results
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