diff --git a/src/ml4t/data/assets/validation.py b/src/ml4t/data/assets/validation.py index dcd5ff6e..670b78ae 100644 --- a/src/ml4t/data/assets/validation.py +++ b/src/ml4t/data/assets/validation.py @@ -128,7 +128,7 @@ def _validate_equity(self, df: pl.DataFrame) -> dict[str, list[str]]: # Check for weekend data (should not exist for regular equities) if "timestamp" in df.columns: - weekend_data = df.filter(pl.col("timestamp").dt.weekday() >= 5) + weekend_data = df.filter(pl.col("timestamp").dt.weekday() >= 6) if len(weekend_data) > 0: issues.append(f"Found {len(weekend_data)} weekend data points") diff --git a/tests/assets/test_validation.py b/tests/assets/test_validation.py index ea9e7570..66957a23 100644 --- a/tests/assets/test_validation.py +++ b/tests/assets/test_validation.py @@ -253,15 +253,46 @@ def test_validate_valid_data_no_issues(self): class TestValidateEquity: """Tests for equity-specific validation.""" - def test_validate_weekend_data(self): + @pytest.mark.parametrize( + "timestamp", + [ + pytest.param(datetime(2025, 7, 7, 10), id="monday"), + pytest.param(datetime(2025, 7, 8, 10), id="tuesday"), + pytest.param(datetime(2025, 7, 9, 10), id="wednesday"), + pytest.param(datetime(2025, 7, 10, 10), id="thursday"), + pytest.param(datetime(2025, 7, 11, 10), id="friday"), + ], + ) + def test_validate_regular_weekdays_do_not_report_weekend(self, timestamp): + info = AssetInfo(symbol="SPY", asset_class=AssetClass.EQUITY, exchange="NYSE") + df = pl.DataFrame( + { + "timestamp": [timestamp], + "open": [100.0], + "high": [101.0], + "low": [99.0], + "close": [100.0], + "volume": [1000.0], + } + ) + + assert AssetValidator(info).validate(df) == {} + + @pytest.mark.parametrize( + "timestamp", + [ + pytest.param(datetime(2025, 7, 12, 10), id="saturday"), + pytest.param(datetime(2025, 7, 13, 10), id="sunday"), + ], + ) + def test_validate_weekend_data(self, timestamp): """Test detecting weekend data for equities.""" info = AssetInfo(symbol="AAPL", asset_class=AssetClass.EQUITY) validator = AssetValidator(info) - # January 7, 2023 is a Saturday df = pl.DataFrame( { - "timestamp": [datetime(2023, 1, 7)], + "timestamp": [timestamp], "open": [100.0], "high": [101.0], "low": [99.0], @@ -272,8 +303,7 @@ def test_validate_weekend_data(self): results = validator.validate(df) - assert "equity_specific" in results - assert any("weekend" in issue.lower() for issue in results["equity_specific"]) + assert results == {"equity_specific": ["Found 1 weekend data points"]} def test_validate_negative_prices(self): """Test detecting non-positive prices."""