Skip to content

Commit 9ea811c

Browse files
committed
fix: add fallback imports for direct module execution
- Add try/except blocks for relative imports in all modules - Fallback to absolute imports when relative imports fail - Ensures modules work both as package and when executed directly - Resolves 'attempted relative import with no known parent package' error
1 parent 140ba73 commit 9ea811c

File tree

10 files changed

+52
-57
lines changed

10 files changed

+52
-57
lines changed

src/__init__.py

Lines changed: 0 additions & 40 deletions
This file was deleted.

src/black_litterman.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,10 @@
22
import numpy as np
33
import pandas as pd
44
import matplotlib.pyplot as plt
5-
from .data_utils import download_prices, ensure_figures_dir, DEFAULT_TICKERS
5+
try:
6+
from .data_utils import download_prices, ensure_figures_dir, DEFAULT_TICKERS
7+
except ImportError:
8+
from data_utils import download_prices, ensure_figures_dir, DEFAULT_TICKERS
69

710

811
def run_black_litterman(tickers=None, start="2020-01-01", end="2023-12-31") -> pd.Series:

src/custom_metrics_opt.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,10 @@
33
import pandas as pd
44
import matplotlib.pyplot as plt
55
from scipy.optimize import minimize
6-
from .data_utils import download_prices, ensure_figures_dir, DEFAULT_TICKERS
6+
try:
7+
from .data_utils import download_prices, ensure_figures_dir, DEFAULT_TICKERS
8+
except ImportError:
9+
from data_utils import download_prices, ensure_figures_dir, DEFAULT_TICKERS
710

811

912
def sharpe_ratio(returns: pd.Series, rf: float = 0.0) -> float:

src/hybrid_model.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,12 @@
22
import numpy as np
33
import pandas as pd
44
import matplotlib.pyplot as plt
5-
from .data_utils import download_prices, compute_indicators, ensure_figures_dir, DEFAULT_TICKERS
6-
from .risk_parity import risk_parity_weights
5+
try:
6+
from .data_utils import download_prices, compute_indicators, ensure_figures_dir, DEFAULT_TICKERS
7+
from .risk_parity import risk_parity_weights
8+
except ImportError:
9+
from data_utils import download_prices, compute_indicators, ensure_figures_dir, DEFAULT_TICKERS
10+
from risk_parity import risk_parity_weights
711
from sklearn.linear_model import Ridge
812
from sklearn.preprocessing import StandardScaler
913
from sklearn.pipeline import Pipeline

src/markowitz.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,10 @@
22
import numpy as np
33
import pandas as pd
44
import matplotlib.pyplot as plt
5-
from .data_utils import download_prices, ensure_figures_dir, DEFAULT_TICKERS
5+
try:
6+
from .data_utils import download_prices, ensure_figures_dir, DEFAULT_TICKERS
7+
except ImportError:
8+
from data_utils import download_prices, ensure_figures_dir, DEFAULT_TICKERS
69

710

811
def random_portfolios(mu: np.ndarray, cov: np.ndarray, n: int = 20000, seed: int = 42):

src/ml_predictor.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,10 @@
77
from sklearn.preprocessing import StandardScaler
88
from sklearn.pipeline import Pipeline
99
from sklearn.model_selection import TimeSeriesSplit
10-
from .data_utils import download_prices, compute_indicators, ensure_figures_dir, DEFAULT_TICKERS
10+
try:
11+
from .data_utils import download_prices, compute_indicators, ensure_figures_dir, DEFAULT_TICKERS
12+
except ImportError:
13+
from data_utils import download_prices, compute_indicators, ensure_figures_dir, DEFAULT_TICKERS
1114

1215

1316
def prepare_ml_dataset(start="2020-01-01", end="2023-12-31", tickers=None) -> Tuple[pd.DataFrame, pd.Series, pd.Series]:

src/ml_training_report.py

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,22 @@
1010
from sklearn.pipeline import Pipeline
1111
from sklearn.metrics import r2_score, mean_absolute_error
1212

13-
from .data_utils import (
14-
download_prices,
15-
compute_indicators,
16-
align_features_and_targets,
17-
ensure_figures_dir,
18-
DEFAULT_TICKERS,
19-
)
13+
try:
14+
from .data_utils import (
15+
download_prices,
16+
compute_indicators,
17+
align_features_and_targets,
18+
ensure_figures_dir,
19+
DEFAULT_TICKERS,
20+
)
21+
except ImportError:
22+
from data_utils import (
23+
download_prices,
24+
compute_indicators,
25+
align_features_and_targets,
26+
ensure_figures_dir,
27+
DEFAULT_TICKERS,
28+
)
2029

2130

2231
def compute_sign_accuracy(y_true: np.ndarray, y_pred: np.ndarray) -> float:

src/monte_carlo.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,10 @@
22
import numpy as np
33
import pandas as pd
44
import matplotlib.pyplot as plt
5-
from .data_utils import download_prices, ensure_figures_dir, DEFAULT_TICKERS
5+
try:
6+
from .data_utils import download_prices, ensure_figures_dir, DEFAULT_TICKERS
7+
except ImportError:
8+
from data_utils import download_prices, ensure_figures_dir, DEFAULT_TICKERS
69

710

811
def simulate_portfolios(returns: pd.DataFrame, n_portfolios: int = 10000, seed: int = 42):

src/risk_parity.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,10 @@
33
import pandas as pd
44
import matplotlib.pyplot as plt
55
from scipy.optimize import minimize
6-
from .data_utils import download_prices, ensure_figures_dir, DEFAULT_TICKERS
6+
try:
7+
from .data_utils import download_prices, ensure_figures_dir, DEFAULT_TICKERS
8+
except ImportError:
9+
from data_utils import download_prices, ensure_figures_dir, DEFAULT_TICKERS
710

811

912
def risk_contribution(weights: np.ndarray, cov: np.ndarray) -> np.ndarray:

src/walkforward_backtest.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,12 @@
44
from datetime import datetime
55
from typing import Dict, Callable, Tuple
66

7-
from .data_utils import download_prices, ensure_figures_dir, DEFAULT_TICKERS
8-
from .metrics_utils import sharpe_ratio, calmar_ratio, sortino_ratio, weight_stability, turnover
7+
try:
8+
from .data_utils import download_prices, ensure_figures_dir, DEFAULT_TICKERS
9+
from .metrics_utils import sharpe_ratio, calmar_ratio, sortino_ratio, weight_stability, turnover
10+
except ImportError:
11+
from data_utils import download_prices, ensure_figures_dir, DEFAULT_TICKERS
12+
from metrics_utils import sharpe_ratio, calmar_ratio, sortino_ratio, weight_stability, turnover
913

1014

1115
def compute_weights_markowitz(prices: pd.DataFrame) -> np.ndarray:

0 commit comments

Comments
 (0)