diff --git a/docs/optimizer_config.schema.json b/docs/optimizer_config.schema.json index 6cd14fcfd..7b6522159 100644 --- a/docs/optimizer_config.schema.json +++ b/docs/optimizer_config.schema.json @@ -1242,7 +1242,7 @@ }, "seed": { "default": 42, - "exclusiveMinimum": 0, + "minimum": 0, "title": "Seed", "type": "integer" } diff --git a/src/autointent/_optimization_config.py b/src/autointent/_optimization_config.py index 547474a92..64767c7bd 100644 --- a/src/autointent/_optimization_config.py +++ b/src/autointent/_optimization_config.py @@ -2,7 +2,7 @@ from typing import TYPE_CHECKING, Any -from pydantic import BaseModel, Field, PositiveInt, field_validator +from pydantic import BaseModel, Field, NonNegativeInt, field_validator from .configs import ( CrossEncoderConfig, @@ -49,7 +49,7 @@ def validate_embedder_config(cls, v: Any) -> EmbedderConfig: # noqa: ANN401 hpo_config: HPOConfig = HPOConfig() - seed: PositiveInt = 42 + seed: NonNegativeInt = 42 @classmethod def from_preset(cls, preset: SearchSpacePreset) -> OptimizationConfig: diff --git a/tests/configs/test_full_config.py b/tests/configs/test_full_config.py index b95b4a63f..cd97d0831 100644 --- a/tests/configs/test_full_config.py +++ b/tests/configs/test_full_config.py @@ -17,3 +17,14 @@ def test_not_valid_reporting() -> None: with pytest.raises(ValidationError): OptimizationConfig(**config) + + +@pytest.mark.parametrize("seed", [0, 1, 42]) +def test_seed_accepts_non_negative(seed: int) -> None: + config = OptimizationConfig(seed=seed, search_space=[]) + assert config.seed == seed + + +def test_seed_rejects_negative() -> None: + with pytest.raises(ValidationError): + OptimizationConfig(seed=-1, search_space=[])