Describe the bug
TangentialClassifierFreeGuidance.is_conditional reads self._num_outputs_prepared, which is not defined on the class, on BaseGuidance, or anywhere else in the package. Accessing it raises AttributeError, and so does is_unconditional, since BaseGuidance defines that as not self.is_conditional.
BaseGuidance.__init__ sets self._count_prepared, and prepare_inputs increments it. Every other guider reads that attribute. This one appears to be the only exception:
adaptive_projected_guidance.py return self._count_prepared == 1
adaptive_projected_guidance_mix.py return self._count_prepared == 1
auto_guidance.py return self._count_prepared == 1
classifier_free_guidance.py return self._count_prepared == 1
classifier_free_zero_star_guidance.py return self._count_prepared == 1
frequency_decoupled_guidance.py return self._count_prepared == 1
magnitude_aware_guidance.py return self._count_prepared == 1
perturbed_attention_guidance.py return self._count_prepared == 1 or self._count_prepared == 3
skip_layer_guidance.py return self._count_prepared == 1 or self._count_prepared == 3
smoothed_energy_guidance.py return self._count_prepared == 1 or self._count_prepared == 3
tangential_classifier_free_guidance.py return self._num_outputs_prepared == 1 <-- undefined
grep -rn "_num_outputs_prepared" src/ returns that single line and no assignment.
The reported error is misleading, which is what makes this awkward to diagnose. Python surfaces a failure inside a property as the property itself being missing, so the message names is_conditional rather than the attribute that is actually absent.
The property is reachable rather than dead code. BaseGuidance.is_unconditional routes through it, and modular_pipelines/stable_diffusion_xl/denoise.py reads components.guider.is_conditional in the guess-mode branch.
Reproduction
No GPU, model download or authentication required.
from diffusers.guiders import ClassifierFreeGuidance, TangentialClassifierFreeGuidance
print(ClassifierFreeGuidance(guidance_scale=7.5).is_conditional) # False
t = TangentialClassifierFreeGuidance(guidance_scale=7.5)
print(hasattr(t, "_count_prepared")) # True
print(hasattr(t, "_num_outputs_prepared")) # False
t.is_conditional # AttributeError
t.is_unconditional # AttributeError
Logs
AttributeError: 'TangentialClassifierFreeGuidance' object has no attribute 'is_conditional'
Prior attempts
Two pull requests fixed this correctly and are now closed, in both cases by their own authors rather than by a maintainer or a review decision:
I mention this because it seems more useful than filing a third identical patch unprompted. Given that guiders are marked experimental, is this worth fixing, or is the module parked for now? If you would like it fixed I am happy to open a PR changing the attribute to _count_prepared, with a test that covers is_conditional and is_unconditional for every guider so the next one cannot drift the same way.
System Info
- diffusers 0.41.0.dev0,
main at ae2e4c7
- torch 2.14.0, Python 3.11, macOS (Apple Silicon)
- Reproduced on CPU, no accelerator involved
Who can help?
@DN6 @asomoza
Describe the bug
TangentialClassifierFreeGuidance.is_conditionalreadsself._num_outputs_prepared, which is not defined on the class, onBaseGuidance, or anywhere else in the package. Accessing it raisesAttributeError, and so doesis_unconditional, sinceBaseGuidancedefines that asnot self.is_conditional.BaseGuidance.__init__setsself._count_prepared, andprepare_inputsincrements it. Every other guider reads that attribute. This one appears to be the only exception:grep -rn "_num_outputs_prepared" src/returns that single line and no assignment.The reported error is misleading, which is what makes this awkward to diagnose. Python surfaces a failure inside a property as the property itself being missing, so the message names
is_conditionalrather than the attribute that is actually absent.The property is reachable rather than dead code.
BaseGuidance.is_unconditionalroutes through it, andmodular_pipelines/stable_diffusion_xl/denoise.pyreadscomponents.guider.is_conditionalin the guess-mode branch.Reproduction
No GPU, model download or authentication required.
Logs
Prior attempts
Two pull requests fixed this correctly and are now closed, in both cases by their own authors rather than by a maintainer or a review decision:
NameErrorinFrequencyDecoupledGuidance. That second bug no longer reproduces onmain, so only this one remains.I mention this because it seems more useful than filing a third identical patch unprompted. Given that guiders are marked experimental, is this worth fixing, or is the module parked for now? If you would like it fixed I am happy to open a PR changing the attribute to
_count_prepared, with a test that coversis_conditionalandis_unconditionalfor every guider so the next one cannot drift the same way.System Info
mainat ae2e4c7Who can help?
@DN6 @asomoza