diff options
Diffstat (limited to 'tests/test_pipeline_factory.py')
| -rw-r--r-- | tests/test_pipeline_factory.py | 68 |
1 files changed, 62 insertions, 6 deletions
diff --git a/tests/test_pipeline_factory.py b/tests/test_pipeline_factory.py index 454a5b1..408133b 100644 --- a/tests/test_pipeline_factory.py +++ b/tests/test_pipeline_factory.py @@ -34,8 +34,24 @@ class FakePipeline: class FakeScheduler: @classmethod - def from_config(cls, config: dict[str, object]) -> object: - return {"scheduler": cls.__name__, **config} + def from_config(cls, config: dict[str, object], **kwargs: object) -> object: + return SimpleNamespace(implementation=cls.__name__, config=config, options=kwargs) + + +class FakeDPMSolverMultistepScheduler(FakeScheduler): + pass + + +class FakeDDIMScheduler(FakeScheduler): + pass + + +class FakeEulerAncestralDiscreteScheduler(FakeScheduler): + pass + + +class FakeLCMScheduler(FakeScheduler): + pass def fake_diffusers(pipeline: FakePipeline, external_vae: object) -> SimpleNamespace: @@ -54,10 +70,10 @@ def fake_diffusers(pipeline: FakePipeline, external_vae: object) -> SimpleNamesp return SimpleNamespace( StableDiffusionPipeline=StableDiffusionPipeline, AutoencoderKL=AutoencoderKL, - DPMSolverMultistepScheduler=FakeScheduler, - DDIMScheduler=FakeScheduler, - EulerDiscreteScheduler=FakeScheduler, - EulerAncestralDiscreteScheduler=FakeScheduler, + DPMSolverMultistepScheduler=FakeDPMSolverMultistepScheduler, + DDIMScheduler=FakeDDIMScheduler, + EulerAncestralDiscreteScheduler=FakeEulerAncestralDiscreteScheduler, + LCMScheduler=FakeLCMScheduler, ) @@ -97,3 +113,43 @@ def test_checkpoint_without_vae_fails_pipeline_initialization(app_config, monkey with pytest.raises(ConfigError, match="does not provide a VAE"): factory.create_base() + + +@pytest.mark.parametrize( + ("name", "implementation", "options"), + [ + ( + "dpmpp_2m_karras", + "FakeDPMSolverMultistepScheduler", + { + "algorithm_type": "dpmsolver++", + "solver_order": 2, + "use_karras_sigmas": True, + }, + ), + ( + "dpmpp_2m_sde_karras", + "FakeDPMSolverMultistepScheduler", + { + "algorithm_type": "sde-dpmsolver++", + "solver_order": 2, + "use_karras_sigmas": True, + }, + ), + ("euler_a", "FakeEulerAncestralDiscreteScheduler", {}), + ("ddim", "FakeDDIMScheduler", {}), + ("lcm", "FakeLCMScheduler", {}), + ], +) +def test_scheduler_mapping(app_config, name, implementation, options) -> None: + generation = replace(app_config.generation, scheduler=name) + factory = PipelineFactory(replace(app_config, generation=generation)) + current_config = {"beta_start": 0.00085, "beta_end": 0.012} + current = SimpleNamespace(config=current_config) + diffusers = fake_diffusers(FakePipeline(), object()) + + result = factory._create_scheduler(current, diffusers) + + assert result.implementation == implementation + assert result.config is current_config + assert result.options == options |
