| # Import the necessary libraries | |
| import os | |
| import json | |
| import pytest | |
| import pandas as pd | |
| from dynamicts.data_loader import DataLoader | |
| from dynamicts.analysis import UnivariateAnalysis | |
| # Dummy test cases | |
| def test_null(): | |
| assert True | |
| # Constants | |
| data_url = "https://raw.githubusercontent.com/Chinar-Quantum-AI-Ltd/public_datasets/main/bitcoin_price.csv" | |
| loader = DataLoader(filepath=data_url, index_col="Date") | |
| # tEST FOR DATA loader | |
| def test_load_success(): | |
| df = loader.load() | |
| # check datframe loaded | |
| assert isinstance(df, pd.DataFrame) | |
| # columns are lower case | |
| assert all(col == col.lower() for col in df.columns) | |
| # index is lower case | |
| assert df.index.name == "date" | |
| def test_load_failure(): | |
| url = "https://raw.githubusercontent.com/Chinar-Quantum-AI-Ltd/public_datasets/main/price.csv" # invalid url for testing | |
| loader = DataLoader( | |
| filepath=url, index_col="Date" | |
| ) | |
| with pytest.raises(ValueError): | |
| loader.load() | |
| def test_is_regular(): | |
| # loader = DataLoader( | |
| # filepath=data_url, | |
| # index_col="Date" | |
| # ) | |
| loader.load() | |
| assert loader.is_regular() is True | |
| def test_is_regular_false(tmp_path): | |
| # Create irregular CSV | |
| irregular = tmp_path / "irregular.csv" | |
| # create dummy irregular data | |
| dts = pd.to_datetime(["2021-01-01", "2021-01-02", "2021-01-04", "2021-01-07"]) | |
| df_irreg = pd.DataFrame({"date": dts, "y": [1,2,3,4]}).set_index("date") | |
| df_irreg.to_csv(irregular) | |
| loader = DataLoader(filepath=str(irregular), index_col="date") | |
| loader.load() | |
| assert loader.is_regular() is False | |
| def test_save_metadata(tmp_path, monkeypatch): | |
| # Monkey patch workingh dir to temp path for clean metadata | |
| monkeypatch.chdir(tmp_path) | |
| # loader = DataLoader( | |
| # filepath=data_url, | |
| # index_col="Date" | |
| # ) | |
| df = loader.load() | |
| # Save metadata (writes to ./metadata/<filename>_meta.json) | |
| loader.save_metadata() | |
| # Verify expected file exists | |
| expected_filename = os.path.splitext(os.path.basename(data_url))[0] + "_meta.json" | |
| meta_path = tmp_path / "metadata" / expected_filename | |
| assert meta_path.exists() | |
| # Check metadata content | |
| with open(meta_path) as f: | |
| meta = json.load(f) | |
| assert meta["columns"] == list(df.columns) | |
| assert meta["shape"] == list(df.shape) or tuple(df.shape) | |
| assert meta["index_name"] == df.index.name | |
| # # Some Test cases for analysis.py script | |
| # # Tests for univariate analysis module | |
| # def test_ditribution_stats_and_missing(monkeypatch, tmp_path): | |
| # analysis = UnivariateAnalysis( | |
| # filepath=data_url, | |
| # target_col="Close", | |
| # index_col="Date" | |
| # ) | |
| # # test distribution stats | |
| # stats = analysis.check_distribution_stats() | |
| # assert "skewness" in stats | |
| # assert "kurtosis" in stats | |
| # assert isinstance(stats["skewness"], float) | |
| # assert isinstance(stats["kurtosis"], float) | |
| # # # test missing values | |
| # # missing = analysis.check_missing_values() | |
| # # assert "missing_count" in missing | |
| # # assert "missing_percentage" in missing | |
| # # assert isinstance(missing["missing_percentage"], float) | |
| # def test_outlier_detection_and_rolling(): | |
| # analysis = UnivariateAnalysis( | |
| # filepath=data_url, | |
| # target_col="Close", | |
| # index_col="Date" | |
| # ) | |
| # # tests for outlier detection | |
| # outliers = analysis.detect_outliers(method="both", plot=False) | |
| # assert "outliers_detected" in outliers | |
| # assert outliers["outliers_detected"] >= 0 | |
| # # test for rolling stat | |
| # rolling = analysis.measure_rolling_statistics(window=7) | |
| # assert "rolling_mean" in rolling | |
| # assert isinstance(rolling["rolling_mean"], pd.Series) | |
| # assert rolling["rolling_mean"].shape == analysis.df["close"].shape |