in optimum/intel/openvino/modeling_diffusion.py [0:0]
def __call__(self, *args, **kwargs):
# we do this to keep numpy random states support for now
# TODO: deprecate and add warnings when a random state is passed
args = list(args)
for i in range(len(args)):
args[i] = np_to_pt_generators(args[i], self.device)
for k, v in kwargs.items():
kwargs[k] = np_to_pt_generators(v, self.device)
height, width = None, None
height_idx, width_idx = None, None
shapes_overridden = False
sig = inspect.signature(self.auto_model_class.__call__)
sig_height_idx = list(sig.parameters).index("height") if "height" in sig.parameters else len(sig.parameters)
sig_width_idx = list(sig.parameters).index("width") if "width" in sig.parameters else len(sig.parameters)
if "height" in kwargs:
height = kwargs["height"]
elif len(args) > sig_height_idx:
height = args[sig_height_idx]
height_idx = sig_height_idx
if "width" in kwargs:
width = kwargs["width"]
elif len(args) > sig_width_idx:
width = args[sig_width_idx]
width_idx = sig_width_idx
if self.height != -1:
if height is not None and height != self.height:
logger.warning(f"Incompatible height argument provided {height}. Pipeline only support {self.height}.")
height = self.height
else:
height = self.height
if height_idx is not None:
args[height_idx] = height
else:
kwargs["height"] = height
shapes_overridden = True
if self.width != -1:
if width is not None and width != self.width:
logger.warning(f"Incompatible widtth argument provided {width}. Pipeline only support {self.width}.")
width = self.width
else:
width = self.width
if width_idx is not None:
args[width_idx] = width
else:
kwargs["width"] = width
shapes_overridden = True
# Sana generates images in specific resolution grid size and then resize to requested size by default, it may contradict with pipeline height / width
# Disable this behavior for static shape pipeline
if self.auto_model_class.__name__.startswith("Sana") and shapes_overridden:
sig_resolution_bining_idx = (
list(sig.parameters).index("use_resolution_binning")
if "use_resolution_binning" in sig.parameters
else len(sig.parameters)
)
if len(args) > sig_resolution_bining_idx:
args[sig_resolution_bining_idx] = False
else:
kwargs["use_resolution_binning"] = False
# we use auto_model_class.__call__ here because we can't call super().__call__
# as OptimizedModel already defines a __call__ which is the first in the MRO
return self.auto_model_class.__call__(self, *args, **kwargs)