summaryrefslogtreecommitdiff
path: root/tests/test_pipeline_factory.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/test_pipeline_factory.py')
-rw-r--r--tests/test_pipeline_factory.py68
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