diffusers 0.32.1__py3-none-any.whl → 0.33.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (389) hide show
  1. diffusers/__init__.py +186 -3
  2. diffusers/configuration_utils.py +40 -12
  3. diffusers/dependency_versions_table.py +9 -2
  4. diffusers/hooks/__init__.py +9 -0
  5. diffusers/hooks/faster_cache.py +653 -0
  6. diffusers/hooks/group_offloading.py +793 -0
  7. diffusers/hooks/hooks.py +236 -0
  8. diffusers/hooks/layerwise_casting.py +245 -0
  9. diffusers/hooks/pyramid_attention_broadcast.py +311 -0
  10. diffusers/loaders/__init__.py +6 -0
  11. diffusers/loaders/ip_adapter.py +38 -30
  12. diffusers/loaders/lora_base.py +198 -28
  13. diffusers/loaders/lora_conversion_utils.py +679 -44
  14. diffusers/loaders/lora_pipeline.py +1963 -801
  15. diffusers/loaders/peft.py +169 -84
  16. diffusers/loaders/single_file.py +17 -2
  17. diffusers/loaders/single_file_model.py +53 -5
  18. diffusers/loaders/single_file_utils.py +653 -75
  19. diffusers/loaders/textual_inversion.py +9 -9
  20. diffusers/loaders/transformer_flux.py +8 -9
  21. diffusers/loaders/transformer_sd3.py +120 -39
  22. diffusers/loaders/unet.py +22 -32
  23. diffusers/models/__init__.py +22 -0
  24. diffusers/models/activations.py +9 -9
  25. diffusers/models/attention.py +0 -1
  26. diffusers/models/attention_processor.py +163 -25
  27. diffusers/models/auto_model.py +169 -0
  28. diffusers/models/autoencoders/__init__.py +2 -0
  29. diffusers/models/autoencoders/autoencoder_asym_kl.py +2 -0
  30. diffusers/models/autoencoders/autoencoder_dc.py +106 -4
  31. diffusers/models/autoencoders/autoencoder_kl.py +0 -4
  32. diffusers/models/autoencoders/autoencoder_kl_allegro.py +5 -23
  33. diffusers/models/autoencoders/autoencoder_kl_cogvideox.py +17 -55
  34. diffusers/models/autoencoders/autoencoder_kl_hunyuan_video.py +17 -97
  35. diffusers/models/autoencoders/autoencoder_kl_ltx.py +326 -107
  36. diffusers/models/autoencoders/autoencoder_kl_magvit.py +1094 -0
  37. diffusers/models/autoencoders/autoencoder_kl_mochi.py +21 -56
  38. diffusers/models/autoencoders/autoencoder_kl_temporal_decoder.py +11 -42
  39. diffusers/models/autoencoders/autoencoder_kl_wan.py +855 -0
  40. diffusers/models/autoencoders/autoencoder_oobleck.py +1 -0
  41. diffusers/models/autoencoders/autoencoder_tiny.py +0 -4
  42. diffusers/models/autoencoders/consistency_decoder_vae.py +3 -1
  43. diffusers/models/autoencoders/vae.py +31 -141
  44. diffusers/models/autoencoders/vq_model.py +3 -0
  45. diffusers/models/cache_utils.py +108 -0
  46. diffusers/models/controlnets/__init__.py +1 -0
  47. diffusers/models/controlnets/controlnet.py +3 -8
  48. diffusers/models/controlnets/controlnet_flux.py +14 -42
  49. diffusers/models/controlnets/controlnet_sd3.py +58 -34
  50. diffusers/models/controlnets/controlnet_sparsectrl.py +4 -7
  51. diffusers/models/controlnets/controlnet_union.py +27 -18
  52. diffusers/models/controlnets/controlnet_xs.py +7 -46
  53. diffusers/models/controlnets/multicontrolnet_union.py +196 -0
  54. diffusers/models/embeddings.py +18 -7
  55. diffusers/models/model_loading_utils.py +122 -80
  56. diffusers/models/modeling_flax_pytorch_utils.py +1 -1
  57. diffusers/models/modeling_flax_utils.py +1 -1
  58. diffusers/models/modeling_pytorch_flax_utils.py +1 -1
  59. diffusers/models/modeling_utils.py +617 -272
  60. diffusers/models/normalization.py +67 -14
  61. diffusers/models/resnet.py +1 -1
  62. diffusers/models/transformers/__init__.py +6 -0
  63. diffusers/models/transformers/auraflow_transformer_2d.py +9 -35
  64. diffusers/models/transformers/cogvideox_transformer_3d.py +13 -24
  65. diffusers/models/transformers/consisid_transformer_3d.py +789 -0
  66. diffusers/models/transformers/dit_transformer_2d.py +5 -19
  67. diffusers/models/transformers/hunyuan_transformer_2d.py +4 -3
  68. diffusers/models/transformers/latte_transformer_3d.py +20 -15
  69. diffusers/models/transformers/lumina_nextdit2d.py +3 -1
  70. diffusers/models/transformers/pixart_transformer_2d.py +4 -19
  71. diffusers/models/transformers/prior_transformer.py +5 -1
  72. diffusers/models/transformers/sana_transformer.py +144 -40
  73. diffusers/models/transformers/stable_audio_transformer.py +5 -20
  74. diffusers/models/transformers/transformer_2d.py +7 -22
  75. diffusers/models/transformers/transformer_allegro.py +9 -17
  76. diffusers/models/transformers/transformer_cogview3plus.py +6 -17
  77. diffusers/models/transformers/transformer_cogview4.py +462 -0
  78. diffusers/models/transformers/transformer_easyanimate.py +527 -0
  79. diffusers/models/transformers/transformer_flux.py +68 -110
  80. diffusers/models/transformers/transformer_hunyuan_video.py +409 -49
  81. diffusers/models/transformers/transformer_ltx.py +53 -35
  82. diffusers/models/transformers/transformer_lumina2.py +548 -0
  83. diffusers/models/transformers/transformer_mochi.py +6 -17
  84. diffusers/models/transformers/transformer_omnigen.py +469 -0
  85. diffusers/models/transformers/transformer_sd3.py +56 -86
  86. diffusers/models/transformers/transformer_temporal.py +5 -11
  87. diffusers/models/transformers/transformer_wan.py +469 -0
  88. diffusers/models/unets/unet_1d.py +3 -1
  89. diffusers/models/unets/unet_2d.py +21 -20
  90. diffusers/models/unets/unet_2d_blocks.py +19 -243
  91. diffusers/models/unets/unet_2d_condition.py +4 -6
  92. diffusers/models/unets/unet_3d_blocks.py +14 -127
  93. diffusers/models/unets/unet_3d_condition.py +8 -12
  94. diffusers/models/unets/unet_i2vgen_xl.py +5 -13
  95. diffusers/models/unets/unet_kandinsky3.py +0 -4
  96. diffusers/models/unets/unet_motion_model.py +20 -114
  97. diffusers/models/unets/unet_spatio_temporal_condition.py +7 -8
  98. diffusers/models/unets/unet_stable_cascade.py +8 -35
  99. diffusers/models/unets/uvit_2d.py +1 -4
  100. diffusers/optimization.py +2 -2
  101. diffusers/pipelines/__init__.py +57 -8
  102. diffusers/pipelines/allegro/pipeline_allegro.py +22 -2
  103. diffusers/pipelines/amused/pipeline_amused.py +15 -2
  104. diffusers/pipelines/amused/pipeline_amused_img2img.py +15 -2
  105. diffusers/pipelines/amused/pipeline_amused_inpaint.py +15 -2
  106. diffusers/pipelines/animatediff/pipeline_animatediff.py +15 -2
  107. diffusers/pipelines/animatediff/pipeline_animatediff_controlnet.py +15 -3
  108. diffusers/pipelines/animatediff/pipeline_animatediff_sdxl.py +24 -4
  109. diffusers/pipelines/animatediff/pipeline_animatediff_sparsectrl.py +15 -2
  110. diffusers/pipelines/animatediff/pipeline_animatediff_video2video.py +16 -4
  111. diffusers/pipelines/animatediff/pipeline_animatediff_video2video_controlnet.py +16 -4
  112. diffusers/pipelines/audioldm/pipeline_audioldm.py +13 -2
  113. diffusers/pipelines/audioldm2/modeling_audioldm2.py +13 -68
  114. diffusers/pipelines/audioldm2/pipeline_audioldm2.py +39 -9
  115. diffusers/pipelines/aura_flow/pipeline_aura_flow.py +63 -7
  116. diffusers/pipelines/auto_pipeline.py +35 -14
  117. diffusers/pipelines/blip_diffusion/blip_image_processing.py +1 -1
  118. diffusers/pipelines/blip_diffusion/modeling_blip2.py +5 -8
  119. diffusers/pipelines/blip_diffusion/pipeline_blip_diffusion.py +12 -0
  120. diffusers/pipelines/cogvideo/pipeline_cogvideox.py +22 -6
  121. diffusers/pipelines/cogvideo/pipeline_cogvideox_fun_control.py +22 -6
  122. diffusers/pipelines/cogvideo/pipeline_cogvideox_image2video.py +22 -5
  123. diffusers/pipelines/cogvideo/pipeline_cogvideox_video2video.py +22 -6
  124. diffusers/pipelines/cogview3/pipeline_cogview3plus.py +12 -4
  125. diffusers/pipelines/cogview4/__init__.py +49 -0
  126. diffusers/pipelines/cogview4/pipeline_cogview4.py +684 -0
  127. diffusers/pipelines/cogview4/pipeline_cogview4_control.py +732 -0
  128. diffusers/pipelines/cogview4/pipeline_output.py +21 -0
  129. diffusers/pipelines/consisid/__init__.py +49 -0
  130. diffusers/pipelines/consisid/consisid_utils.py +357 -0
  131. diffusers/pipelines/consisid/pipeline_consisid.py +974 -0
  132. diffusers/pipelines/consisid/pipeline_output.py +20 -0
  133. diffusers/pipelines/consistency_models/pipeline_consistency_models.py +11 -0
  134. diffusers/pipelines/controlnet/pipeline_controlnet.py +6 -5
  135. diffusers/pipelines/controlnet/pipeline_controlnet_blip_diffusion.py +13 -0
  136. diffusers/pipelines/controlnet/pipeline_controlnet_img2img.py +17 -5
  137. diffusers/pipelines/controlnet/pipeline_controlnet_inpaint.py +31 -12
  138. diffusers/pipelines/controlnet/pipeline_controlnet_inpaint_sd_xl.py +26 -7
  139. diffusers/pipelines/controlnet/pipeline_controlnet_sd_xl.py +20 -3
  140. diffusers/pipelines/controlnet/pipeline_controlnet_sd_xl_img2img.py +22 -3
  141. diffusers/pipelines/controlnet/pipeline_controlnet_union_inpaint_sd_xl.py +26 -25
  142. diffusers/pipelines/controlnet/pipeline_controlnet_union_sd_xl.py +224 -109
  143. diffusers/pipelines/controlnet/pipeline_controlnet_union_sd_xl_img2img.py +25 -29
  144. diffusers/pipelines/controlnet/pipeline_flax_controlnet.py +7 -4
  145. diffusers/pipelines/controlnet_hunyuandit/pipeline_hunyuandit_controlnet.py +3 -5
  146. diffusers/pipelines/controlnet_sd3/pipeline_stable_diffusion_3_controlnet.py +121 -10
  147. diffusers/pipelines/controlnet_sd3/pipeline_stable_diffusion_3_controlnet_inpainting.py +122 -11
  148. diffusers/pipelines/controlnet_xs/pipeline_controlnet_xs.py +12 -1
  149. diffusers/pipelines/controlnet_xs/pipeline_controlnet_xs_sd_xl.py +20 -3
  150. diffusers/pipelines/dance_diffusion/pipeline_dance_diffusion.py +14 -2
  151. diffusers/pipelines/ddim/pipeline_ddim.py +14 -1
  152. diffusers/pipelines/ddpm/pipeline_ddpm.py +15 -1
  153. diffusers/pipelines/deepfloyd_if/pipeline_if.py +12 -0
  154. diffusers/pipelines/deepfloyd_if/pipeline_if_img2img.py +12 -0
  155. diffusers/pipelines/deepfloyd_if/pipeline_if_img2img_superresolution.py +14 -1
  156. diffusers/pipelines/deepfloyd_if/pipeline_if_inpainting.py +12 -0
  157. diffusers/pipelines/deepfloyd_if/pipeline_if_inpainting_superresolution.py +14 -1
  158. diffusers/pipelines/deepfloyd_if/pipeline_if_superresolution.py +14 -1
  159. diffusers/pipelines/deprecated/alt_diffusion/pipeline_alt_diffusion.py +11 -7
  160. diffusers/pipelines/deprecated/alt_diffusion/pipeline_alt_diffusion_img2img.py +11 -7
  161. diffusers/pipelines/deprecated/repaint/pipeline_repaint.py +1 -1
  162. diffusers/pipelines/deprecated/stable_diffusion_variants/pipeline_cycle_diffusion.py +10 -6
  163. diffusers/pipelines/deprecated/stable_diffusion_variants/pipeline_onnx_stable_diffusion_inpaint_legacy.py +2 -2
  164. diffusers/pipelines/deprecated/stable_diffusion_variants/pipeline_stable_diffusion_inpaint_legacy.py +11 -7
  165. diffusers/pipelines/deprecated/stable_diffusion_variants/pipeline_stable_diffusion_model_editing.py +1 -1
  166. diffusers/pipelines/deprecated/stable_diffusion_variants/pipeline_stable_diffusion_paradigms.py +1 -1
  167. diffusers/pipelines/deprecated/stable_diffusion_variants/pipeline_stable_diffusion_pix2pix_zero.py +1 -1
  168. diffusers/pipelines/deprecated/versatile_diffusion/modeling_text_unet.py +10 -105
  169. diffusers/pipelines/deprecated/versatile_diffusion/pipeline_versatile_diffusion.py +1 -1
  170. diffusers/pipelines/deprecated/versatile_diffusion/pipeline_versatile_diffusion_dual_guided.py +1 -1
  171. diffusers/pipelines/deprecated/versatile_diffusion/pipeline_versatile_diffusion_image_variation.py +1 -1
  172. diffusers/pipelines/deprecated/versatile_diffusion/pipeline_versatile_diffusion_text_to_image.py +1 -1
  173. diffusers/pipelines/dit/pipeline_dit.py +15 -2
  174. diffusers/pipelines/easyanimate/__init__.py +52 -0
  175. diffusers/pipelines/easyanimate/pipeline_easyanimate.py +770 -0
  176. diffusers/pipelines/easyanimate/pipeline_easyanimate_control.py +994 -0
  177. diffusers/pipelines/easyanimate/pipeline_easyanimate_inpaint.py +1234 -0
  178. diffusers/pipelines/easyanimate/pipeline_output.py +20 -0
  179. diffusers/pipelines/flux/pipeline_flux.py +53 -21
  180. diffusers/pipelines/flux/pipeline_flux_control.py +9 -12
  181. diffusers/pipelines/flux/pipeline_flux_control_img2img.py +6 -10
  182. diffusers/pipelines/flux/pipeline_flux_control_inpaint.py +8 -10
  183. diffusers/pipelines/flux/pipeline_flux_controlnet.py +185 -13
  184. diffusers/pipelines/flux/pipeline_flux_controlnet_image_to_image.py +8 -10
  185. diffusers/pipelines/flux/pipeline_flux_controlnet_inpainting.py +16 -16
  186. diffusers/pipelines/flux/pipeline_flux_fill.py +107 -39
  187. diffusers/pipelines/flux/pipeline_flux_img2img.py +193 -15
  188. diffusers/pipelines/flux/pipeline_flux_inpaint.py +199 -19
  189. diffusers/pipelines/free_noise_utils.py +3 -3
  190. diffusers/pipelines/hunyuan_video/__init__.py +4 -0
  191. diffusers/pipelines/hunyuan_video/pipeline_hunyuan_skyreels_image2video.py +804 -0
  192. diffusers/pipelines/hunyuan_video/pipeline_hunyuan_video.py +90 -23
  193. diffusers/pipelines/hunyuan_video/pipeline_hunyuan_video_image2video.py +924 -0
  194. diffusers/pipelines/hunyuandit/pipeline_hunyuandit.py +3 -5
  195. diffusers/pipelines/i2vgen_xl/pipeline_i2vgen_xl.py +13 -1
  196. diffusers/pipelines/kandinsky/pipeline_kandinsky.py +12 -0
  197. diffusers/pipelines/kandinsky/pipeline_kandinsky_combined.py +1 -1
  198. diffusers/pipelines/kandinsky/pipeline_kandinsky_img2img.py +12 -0
  199. diffusers/pipelines/kandinsky/pipeline_kandinsky_inpaint.py +13 -1
  200. diffusers/pipelines/kandinsky/pipeline_kandinsky_prior.py +12 -0
  201. diffusers/pipelines/kandinsky2_2/pipeline_kandinsky2_2.py +12 -1
  202. diffusers/pipelines/kandinsky2_2/pipeline_kandinsky2_2_controlnet.py +13 -0
  203. diffusers/pipelines/kandinsky2_2/pipeline_kandinsky2_2_controlnet_img2img.py +12 -0
  204. diffusers/pipelines/kandinsky2_2/pipeline_kandinsky2_2_img2img.py +12 -1
  205. diffusers/pipelines/kandinsky2_2/pipeline_kandinsky2_2_inpainting.py +12 -1
  206. diffusers/pipelines/kandinsky2_2/pipeline_kandinsky2_2_prior.py +12 -0
  207. diffusers/pipelines/kandinsky2_2/pipeline_kandinsky2_2_prior_emb2emb.py +12 -0
  208. diffusers/pipelines/kandinsky3/pipeline_kandinsky3.py +12 -0
  209. diffusers/pipelines/kandinsky3/pipeline_kandinsky3_img2img.py +12 -0
  210. diffusers/pipelines/kolors/pipeline_kolors.py +10 -8
  211. diffusers/pipelines/kolors/pipeline_kolors_img2img.py +6 -4
  212. diffusers/pipelines/kolors/text_encoder.py +7 -34
  213. diffusers/pipelines/latent_consistency_models/pipeline_latent_consistency_img2img.py +12 -1
  214. diffusers/pipelines/latent_consistency_models/pipeline_latent_consistency_text2img.py +13 -1
  215. diffusers/pipelines/latent_diffusion/pipeline_latent_diffusion.py +14 -13
  216. diffusers/pipelines/latent_diffusion/pipeline_latent_diffusion_superresolution.py +12 -1
  217. diffusers/pipelines/latte/pipeline_latte.py +36 -7
  218. diffusers/pipelines/ledits_pp/pipeline_leditspp_stable_diffusion.py +67 -13
  219. diffusers/pipelines/ledits_pp/pipeline_leditspp_stable_diffusion_xl.py +60 -15
  220. diffusers/pipelines/ltx/__init__.py +2 -0
  221. diffusers/pipelines/ltx/pipeline_ltx.py +25 -13
  222. diffusers/pipelines/ltx/pipeline_ltx_condition.py +1194 -0
  223. diffusers/pipelines/ltx/pipeline_ltx_image2video.py +31 -17
  224. diffusers/pipelines/lumina/__init__.py +2 -2
  225. diffusers/pipelines/lumina/pipeline_lumina.py +83 -20
  226. diffusers/pipelines/lumina2/__init__.py +48 -0
  227. diffusers/pipelines/lumina2/pipeline_lumina2.py +790 -0
  228. diffusers/pipelines/marigold/__init__.py +2 -0
  229. diffusers/pipelines/marigold/marigold_image_processing.py +127 -14
  230. diffusers/pipelines/marigold/pipeline_marigold_depth.py +31 -16
  231. diffusers/pipelines/marigold/pipeline_marigold_intrinsics.py +721 -0
  232. diffusers/pipelines/marigold/pipeline_marigold_normals.py +31 -16
  233. diffusers/pipelines/mochi/pipeline_mochi.py +14 -18
  234. diffusers/pipelines/musicldm/pipeline_musicldm.py +16 -1
  235. diffusers/pipelines/omnigen/__init__.py +50 -0
  236. diffusers/pipelines/omnigen/pipeline_omnigen.py +512 -0
  237. diffusers/pipelines/omnigen/processor_omnigen.py +327 -0
  238. diffusers/pipelines/onnx_utils.py +5 -3
  239. diffusers/pipelines/pag/pag_utils.py +1 -1
  240. diffusers/pipelines/pag/pipeline_pag_controlnet_sd.py +12 -1
  241. diffusers/pipelines/pag/pipeline_pag_controlnet_sd_inpaint.py +15 -4
  242. diffusers/pipelines/pag/pipeline_pag_controlnet_sd_xl.py +20 -3
  243. diffusers/pipelines/pag/pipeline_pag_controlnet_sd_xl_img2img.py +20 -3
  244. diffusers/pipelines/pag/pipeline_pag_hunyuandit.py +1 -3
  245. diffusers/pipelines/pag/pipeline_pag_kolors.py +6 -4
  246. diffusers/pipelines/pag/pipeline_pag_pixart_sigma.py +16 -3
  247. diffusers/pipelines/pag/pipeline_pag_sana.py +65 -8
  248. diffusers/pipelines/pag/pipeline_pag_sd.py +23 -7
  249. diffusers/pipelines/pag/pipeline_pag_sd_3.py +3 -5
  250. diffusers/pipelines/pag/pipeline_pag_sd_3_img2img.py +3 -5
  251. diffusers/pipelines/pag/pipeline_pag_sd_animatediff.py +13 -1
  252. diffusers/pipelines/pag/pipeline_pag_sd_img2img.py +23 -7
  253. diffusers/pipelines/pag/pipeline_pag_sd_inpaint.py +26 -10
  254. diffusers/pipelines/pag/pipeline_pag_sd_xl.py +12 -4
  255. diffusers/pipelines/pag/pipeline_pag_sd_xl_img2img.py +7 -3
  256. diffusers/pipelines/pag/pipeline_pag_sd_xl_inpaint.py +10 -6
  257. diffusers/pipelines/paint_by_example/pipeline_paint_by_example.py +13 -3
  258. diffusers/pipelines/pia/pipeline_pia.py +13 -1
  259. diffusers/pipelines/pipeline_flax_utils.py +7 -7
  260. diffusers/pipelines/pipeline_loading_utils.py +193 -83
  261. diffusers/pipelines/pipeline_utils.py +221 -106
  262. diffusers/pipelines/pixart_alpha/pipeline_pixart_alpha.py +17 -5
  263. diffusers/pipelines/pixart_alpha/pipeline_pixart_sigma.py +17 -4
  264. diffusers/pipelines/sana/__init__.py +2 -0
  265. diffusers/pipelines/sana/pipeline_sana.py +183 -58
  266. diffusers/pipelines/sana/pipeline_sana_sprint.py +889 -0
  267. diffusers/pipelines/semantic_stable_diffusion/pipeline_semantic_stable_diffusion.py +12 -2
  268. diffusers/pipelines/shap_e/pipeline_shap_e.py +12 -0
  269. diffusers/pipelines/shap_e/pipeline_shap_e_img2img.py +12 -0
  270. diffusers/pipelines/shap_e/renderer.py +6 -6
  271. diffusers/pipelines/stable_audio/pipeline_stable_audio.py +1 -1
  272. diffusers/pipelines/stable_cascade/pipeline_stable_cascade.py +15 -4
  273. diffusers/pipelines/stable_cascade/pipeline_stable_cascade_combined.py +12 -8
  274. diffusers/pipelines/stable_cascade/pipeline_stable_cascade_prior.py +12 -1
  275. diffusers/pipelines/stable_diffusion/convert_from_ckpt.py +3 -2
  276. diffusers/pipelines/stable_diffusion/pipeline_flax_stable_diffusion.py +14 -10
  277. diffusers/pipelines/stable_diffusion/pipeline_flax_stable_diffusion_img2img.py +3 -3
  278. diffusers/pipelines/stable_diffusion/pipeline_flax_stable_diffusion_inpaint.py +14 -10
  279. diffusers/pipelines/stable_diffusion/pipeline_onnx_stable_diffusion.py +2 -2
  280. diffusers/pipelines/stable_diffusion/pipeline_onnx_stable_diffusion_img2img.py +4 -3
  281. diffusers/pipelines/stable_diffusion/pipeline_onnx_stable_diffusion_inpaint.py +5 -4
  282. diffusers/pipelines/stable_diffusion/pipeline_onnx_stable_diffusion_upscale.py +2 -2
  283. diffusers/pipelines/stable_diffusion/pipeline_stable_diffusion.py +18 -13
  284. diffusers/pipelines/stable_diffusion/pipeline_stable_diffusion_depth2img.py +30 -8
  285. diffusers/pipelines/stable_diffusion/pipeline_stable_diffusion_image_variation.py +24 -10
  286. diffusers/pipelines/stable_diffusion/pipeline_stable_diffusion_img2img.py +28 -12
  287. diffusers/pipelines/stable_diffusion/pipeline_stable_diffusion_inpaint.py +39 -18
  288. diffusers/pipelines/stable_diffusion/pipeline_stable_diffusion_instruct_pix2pix.py +17 -6
  289. diffusers/pipelines/stable_diffusion/pipeline_stable_diffusion_latent_upscale.py +13 -3
  290. diffusers/pipelines/stable_diffusion/pipeline_stable_diffusion_upscale.py +20 -3
  291. diffusers/pipelines/stable_diffusion/pipeline_stable_unclip.py +14 -2
  292. diffusers/pipelines/stable_diffusion/pipeline_stable_unclip_img2img.py +13 -1
  293. diffusers/pipelines/stable_diffusion_3/pipeline_stable_diffusion_3.py +16 -17
  294. diffusers/pipelines/stable_diffusion_3/pipeline_stable_diffusion_3_img2img.py +136 -18
  295. diffusers/pipelines/stable_diffusion_3/pipeline_stable_diffusion_3_inpaint.py +150 -21
  296. diffusers/pipelines/stable_diffusion_attend_and_excite/pipeline_stable_diffusion_attend_and_excite.py +15 -3
  297. diffusers/pipelines/stable_diffusion_diffedit/pipeline_stable_diffusion_diffedit.py +26 -11
  298. diffusers/pipelines/stable_diffusion_gligen/pipeline_stable_diffusion_gligen.py +15 -3
  299. diffusers/pipelines/stable_diffusion_gligen/pipeline_stable_diffusion_gligen_text_image.py +22 -4
  300. diffusers/pipelines/stable_diffusion_k_diffusion/pipeline_stable_diffusion_k_diffusion.py +30 -13
  301. diffusers/pipelines/stable_diffusion_k_diffusion/pipeline_stable_diffusion_xl_k_diffusion.py +12 -4
  302. diffusers/pipelines/stable_diffusion_ldm3d/pipeline_stable_diffusion_ldm3d.py +15 -3
  303. diffusers/pipelines/stable_diffusion_panorama/pipeline_stable_diffusion_panorama.py +15 -3
  304. diffusers/pipelines/stable_diffusion_safe/pipeline_stable_diffusion_safe.py +26 -12
  305. diffusers/pipelines/stable_diffusion_sag/pipeline_stable_diffusion_sag.py +16 -4
  306. diffusers/pipelines/stable_diffusion_xl/pipeline_flax_stable_diffusion_xl.py +1 -1
  307. diffusers/pipelines/stable_diffusion_xl/pipeline_stable_diffusion_xl.py +12 -4
  308. diffusers/pipelines/stable_diffusion_xl/pipeline_stable_diffusion_xl_img2img.py +7 -3
  309. diffusers/pipelines/stable_diffusion_xl/pipeline_stable_diffusion_xl_inpaint.py +10 -6
  310. diffusers/pipelines/stable_diffusion_xl/pipeline_stable_diffusion_xl_instruct_pix2pix.py +11 -4
  311. diffusers/pipelines/stable_video_diffusion/pipeline_stable_video_diffusion.py +13 -2
  312. diffusers/pipelines/t2i_adapter/pipeline_stable_diffusion_adapter.py +18 -4
  313. diffusers/pipelines/t2i_adapter/pipeline_stable_diffusion_xl_adapter.py +26 -5
  314. diffusers/pipelines/text_to_video_synthesis/pipeline_text_to_video_synth.py +13 -1
  315. diffusers/pipelines/text_to_video_synthesis/pipeline_text_to_video_synth_img2img.py +13 -1
  316. diffusers/pipelines/text_to_video_synthesis/pipeline_text_to_video_zero.py +28 -6
  317. diffusers/pipelines/text_to_video_synthesis/pipeline_text_to_video_zero_sdxl.py +26 -4
  318. diffusers/pipelines/transformers_loading_utils.py +121 -0
  319. diffusers/pipelines/unclip/pipeline_unclip.py +11 -1
  320. diffusers/pipelines/unclip/pipeline_unclip_image_variation.py +11 -1
  321. diffusers/pipelines/unidiffuser/pipeline_unidiffuser.py +19 -2
  322. diffusers/pipelines/wan/__init__.py +51 -0
  323. diffusers/pipelines/wan/pipeline_output.py +20 -0
  324. diffusers/pipelines/wan/pipeline_wan.py +593 -0
  325. diffusers/pipelines/wan/pipeline_wan_i2v.py +722 -0
  326. diffusers/pipelines/wan/pipeline_wan_video2video.py +725 -0
  327. diffusers/pipelines/wuerstchen/modeling_wuerstchen_prior.py +7 -31
  328. diffusers/pipelines/wuerstchen/pipeline_wuerstchen.py +12 -1
  329. diffusers/pipelines/wuerstchen/pipeline_wuerstchen_prior.py +12 -1
  330. diffusers/quantizers/auto.py +5 -1
  331. diffusers/quantizers/base.py +5 -9
  332. diffusers/quantizers/bitsandbytes/bnb_quantizer.py +41 -29
  333. diffusers/quantizers/bitsandbytes/utils.py +30 -20
  334. diffusers/quantizers/gguf/gguf_quantizer.py +1 -0
  335. diffusers/quantizers/gguf/utils.py +4 -2
  336. diffusers/quantizers/quantization_config.py +59 -4
  337. diffusers/quantizers/quanto/__init__.py +1 -0
  338. diffusers/quantizers/quanto/quanto_quantizer.py +177 -0
  339. diffusers/quantizers/quanto/utils.py +60 -0
  340. diffusers/quantizers/torchao/__init__.py +1 -1
  341. diffusers/quantizers/torchao/torchao_quantizer.py +47 -2
  342. diffusers/schedulers/__init__.py +2 -1
  343. diffusers/schedulers/scheduling_consistency_models.py +1 -2
  344. diffusers/schedulers/scheduling_ddim_inverse.py +1 -1
  345. diffusers/schedulers/scheduling_ddpm.py +2 -3
  346. diffusers/schedulers/scheduling_ddpm_parallel.py +1 -2
  347. diffusers/schedulers/scheduling_dpmsolver_multistep.py +12 -4
  348. diffusers/schedulers/scheduling_edm_euler.py +45 -10
  349. diffusers/schedulers/scheduling_flow_match_euler_discrete.py +116 -28
  350. diffusers/schedulers/scheduling_flow_match_heun_discrete.py +7 -6
  351. diffusers/schedulers/scheduling_heun_discrete.py +1 -1
  352. diffusers/schedulers/scheduling_lcm.py +1 -2
  353. diffusers/schedulers/scheduling_lms_discrete.py +1 -1
  354. diffusers/schedulers/scheduling_repaint.py +5 -1
  355. diffusers/schedulers/scheduling_scm.py +265 -0
  356. diffusers/schedulers/scheduling_tcd.py +1 -2
  357. diffusers/schedulers/scheduling_utils.py +2 -1
  358. diffusers/training_utils.py +14 -7
  359. diffusers/utils/__init__.py +10 -2
  360. diffusers/utils/constants.py +13 -1
  361. diffusers/utils/deprecation_utils.py +1 -1
  362. diffusers/utils/dummy_bitsandbytes_objects.py +17 -0
  363. diffusers/utils/dummy_gguf_objects.py +17 -0
  364. diffusers/utils/dummy_optimum_quanto_objects.py +17 -0
  365. diffusers/utils/dummy_pt_objects.py +233 -0
  366. diffusers/utils/dummy_torch_and_transformers_and_opencv_objects.py +17 -0
  367. diffusers/utils/dummy_torch_and_transformers_objects.py +270 -0
  368. diffusers/utils/dummy_torchao_objects.py +17 -0
  369. diffusers/utils/dynamic_modules_utils.py +1 -1
  370. diffusers/utils/export_utils.py +28 -3
  371. diffusers/utils/hub_utils.py +52 -102
  372. diffusers/utils/import_utils.py +121 -221
  373. diffusers/utils/loading_utils.py +14 -1
  374. diffusers/utils/logging.py +1 -2
  375. diffusers/utils/peft_utils.py +6 -14
  376. diffusers/utils/remote_utils.py +425 -0
  377. diffusers/utils/source_code_parsing_utils.py +52 -0
  378. diffusers/utils/state_dict_utils.py +15 -1
  379. diffusers/utils/testing_utils.py +243 -13
  380. diffusers/utils/torch_utils.py +10 -0
  381. diffusers/utils/typing_utils.py +91 -0
  382. diffusers/video_processor.py +1 -1
  383. {diffusers-0.32.1.dist-info → diffusers-0.33.0.dist-info}/METADATA +76 -44
  384. diffusers-0.33.0.dist-info/RECORD +608 -0
  385. {diffusers-0.32.1.dist-info → diffusers-0.33.0.dist-info}/WHEEL +1 -1
  386. diffusers-0.32.1.dist-info/RECORD +0 -550
  387. {diffusers-0.32.1.dist-info → diffusers-0.33.0.dist-info}/LICENSE +0 -0
  388. {diffusers-0.32.1.dist-info → diffusers-0.33.0.dist-info}/entry_points.txt +0 -0
  389. {diffusers-0.32.1.dist-info → diffusers-0.33.0.dist-info}/top_level.txt +0 -0
@@ -25,7 +25,6 @@ from types import ModuleType
25
25
  from typing import Any, Union
26
26
 
27
27
  from huggingface_hub.utils import is_jinja_available # noqa: F401
28
- from packaging import version
29
28
  from packaging.version import Version, parse
30
29
 
31
30
  from . import logging
@@ -52,36 +51,30 @@ DIFFUSERS_SLOW_IMPORT = DIFFUSERS_SLOW_IMPORT in ENV_VARS_TRUE_VALUES
52
51
 
53
52
  STR_OPERATION_TO_FUNC = {">": op.gt, ">=": op.ge, "==": op.eq, "!=": op.ne, "<=": op.le, "<": op.lt}
54
53
 
55
- _torch_version = "N/A"
56
- if USE_TORCH in ENV_VARS_TRUE_AND_AUTO_VALUES and USE_TF not in ENV_VARS_TRUE_VALUES:
57
- _torch_available = importlib.util.find_spec("torch") is not None
58
- if _torch_available:
54
+ _is_google_colab = "google.colab" in sys.modules or any(k.startswith("COLAB_") for k in os.environ)
55
+
56
+
57
+ def _is_package_available(pkg_name: str):
58
+ pkg_exists = importlib.util.find_spec(pkg_name) is not None
59
+ pkg_version = "N/A"
60
+
61
+ if pkg_exists:
59
62
  try:
60
- _torch_version = importlib_metadata.version("torch")
61
- logger.info(f"PyTorch version {_torch_version} available.")
62
- except importlib_metadata.PackageNotFoundError:
63
- _torch_available = False
63
+ pkg_version = importlib_metadata.version(pkg_name)
64
+ logger.debug(f"Successfully imported {pkg_name} version {pkg_version}")
65
+ except (ImportError, importlib_metadata.PackageNotFoundError):
66
+ pkg_exists = False
67
+
68
+ return pkg_exists, pkg_version
69
+
70
+
71
+ if USE_TORCH in ENV_VARS_TRUE_AND_AUTO_VALUES and USE_TF not in ENV_VARS_TRUE_VALUES:
72
+ _torch_available, _torch_version = _is_package_available("torch")
73
+
64
74
  else:
65
75
  logger.info("Disabling PyTorch because USE_TORCH is set")
66
76
  _torch_available = False
67
77
 
68
- _torch_xla_available = importlib.util.find_spec("torch_xla") is not None
69
- if _torch_xla_available:
70
- try:
71
- _torch_xla_version = importlib_metadata.version("torch_xla")
72
- logger.info(f"PyTorch XLA version {_torch_xla_version} available.")
73
- except ImportError:
74
- _torch_xla_available = False
75
-
76
- # check whether torch_npu is available
77
- _torch_npu_available = importlib.util.find_spec("torch_npu") is not None
78
- if _torch_npu_available:
79
- try:
80
- _torch_npu_version = importlib_metadata.version("torch_npu")
81
- logger.info(f"torch_npu version {_torch_npu_version} available.")
82
- except ImportError:
83
- _torch_npu_available = False
84
-
85
78
  _jax_version = "N/A"
86
79
  _flax_version = "N/A"
87
80
  if USE_JAX in ENV_VARS_TRUE_AND_AUTO_VALUES:
@@ -97,40 +90,12 @@ else:
97
90
  _flax_available = False
98
91
 
99
92
  if USE_SAFETENSORS in ENV_VARS_TRUE_AND_AUTO_VALUES:
100
- _safetensors_available = importlib.util.find_spec("safetensors") is not None
101
- if _safetensors_available:
102
- try:
103
- _safetensors_version = importlib_metadata.version("safetensors")
104
- logger.info(f"Safetensors version {_safetensors_version} available.")
105
- except importlib_metadata.PackageNotFoundError:
106
- _safetensors_available = False
93
+ _safetensors_available, _safetensors_version = _is_package_available("safetensors")
94
+
107
95
  else:
108
96
  logger.info("Disabling Safetensors because USE_TF is set")
109
97
  _safetensors_available = False
110
98
 
111
- _transformers_available = importlib.util.find_spec("transformers") is not None
112
- try:
113
- _transformers_version = importlib_metadata.version("transformers")
114
- logger.debug(f"Successfully imported transformers version {_transformers_version}")
115
- except importlib_metadata.PackageNotFoundError:
116
- _transformers_available = False
117
-
118
-
119
- _inflect_available = importlib.util.find_spec("inflect") is not None
120
- try:
121
- _inflect_version = importlib_metadata.version("inflect")
122
- logger.debug(f"Successfully imported inflect version {_inflect_version}")
123
- except importlib_metadata.PackageNotFoundError:
124
- _inflect_available = False
125
-
126
-
127
- _unidecode_available = importlib.util.find_spec("unidecode") is not None
128
- try:
129
- _unidecode_version = importlib_metadata.version("unidecode")
130
- logger.debug(f"Successfully imported unidecode version {_unidecode_version}")
131
- except importlib_metadata.PackageNotFoundError:
132
- _unidecode_available = False
133
-
134
99
  _onnxruntime_version = "N/A"
135
100
  _onnx_available = importlib.util.find_spec("onnxruntime") is not None
136
101
  if _onnx_available:
@@ -142,7 +107,9 @@ if _onnx_available:
142
107
  "onnxruntime-openvino",
143
108
  "ort_nightly_directml",
144
109
  "onnxruntime-rocm",
110
+ "onnxruntime-migraphx",
145
111
  "onnxruntime-training",
112
+ "onnxruntime-vitisai",
146
113
  )
147
114
  _onnxruntime_version = None
148
115
  # For the metadata, we have to look for both onnxruntime and onnxruntime-gpu
@@ -178,85 +145,6 @@ try:
178
145
  except importlib_metadata.PackageNotFoundError:
179
146
  _opencv_available = False
180
147
 
181
- _scipy_available = importlib.util.find_spec("scipy") is not None
182
- try:
183
- _scipy_version = importlib_metadata.version("scipy")
184
- logger.debug(f"Successfully imported scipy version {_scipy_version}")
185
- except importlib_metadata.PackageNotFoundError:
186
- _scipy_available = False
187
-
188
- _librosa_available = importlib.util.find_spec("librosa") is not None
189
- try:
190
- _librosa_version = importlib_metadata.version("librosa")
191
- logger.debug(f"Successfully imported librosa version {_librosa_version}")
192
- except importlib_metadata.PackageNotFoundError:
193
- _librosa_available = False
194
-
195
- _accelerate_available = importlib.util.find_spec("accelerate") is not None
196
- try:
197
- _accelerate_version = importlib_metadata.version("accelerate")
198
- logger.debug(f"Successfully imported accelerate version {_accelerate_version}")
199
- except importlib_metadata.PackageNotFoundError:
200
- _accelerate_available = False
201
-
202
- _xformers_available = importlib.util.find_spec("xformers") is not None
203
- try:
204
- _xformers_version = importlib_metadata.version("xformers")
205
- if _torch_available:
206
- _torch_version = importlib_metadata.version("torch")
207
- if version.Version(_torch_version) < version.Version("1.12"):
208
- raise ValueError("xformers is installed in your environment and requires PyTorch >= 1.12")
209
-
210
- logger.debug(f"Successfully imported xformers version {_xformers_version}")
211
- except importlib_metadata.PackageNotFoundError:
212
- _xformers_available = False
213
-
214
- _k_diffusion_available = importlib.util.find_spec("k_diffusion") is not None
215
- try:
216
- _k_diffusion_version = importlib_metadata.version("k_diffusion")
217
- logger.debug(f"Successfully imported k-diffusion version {_k_diffusion_version}")
218
- except importlib_metadata.PackageNotFoundError:
219
- _k_diffusion_available = False
220
-
221
- _note_seq_available = importlib.util.find_spec("note_seq") is not None
222
- try:
223
- _note_seq_version = importlib_metadata.version("note_seq")
224
- logger.debug(f"Successfully imported note-seq version {_note_seq_version}")
225
- except importlib_metadata.PackageNotFoundError:
226
- _note_seq_available = False
227
-
228
- _wandb_available = importlib.util.find_spec("wandb") is not None
229
- try:
230
- _wandb_version = importlib_metadata.version("wandb")
231
- logger.debug(f"Successfully imported wandb version {_wandb_version }")
232
- except importlib_metadata.PackageNotFoundError:
233
- _wandb_available = False
234
-
235
-
236
- _tensorboard_available = importlib.util.find_spec("tensorboard")
237
- try:
238
- _tensorboard_version = importlib_metadata.version("tensorboard")
239
- logger.debug(f"Successfully imported tensorboard version {_tensorboard_version}")
240
- except importlib_metadata.PackageNotFoundError:
241
- _tensorboard_available = False
242
-
243
-
244
- _compel_available = importlib.util.find_spec("compel")
245
- try:
246
- _compel_version = importlib_metadata.version("compel")
247
- logger.debug(f"Successfully imported compel version {_compel_version}")
248
- except importlib_metadata.PackageNotFoundError:
249
- _compel_available = False
250
-
251
-
252
- _ftfy_available = importlib.util.find_spec("ftfy") is not None
253
- try:
254
- _ftfy_version = importlib_metadata.version("ftfy")
255
- logger.debug(f"Successfully imported ftfy version {_ftfy_version}")
256
- except importlib_metadata.PackageNotFoundError:
257
- _ftfy_available = False
258
-
259
-
260
148
  _bs4_available = importlib.util.find_spec("bs4") is not None
261
149
  try:
262
150
  # importlib metadata under different name
@@ -265,13 +153,6 @@ try:
265
153
  except importlib_metadata.PackageNotFoundError:
266
154
  _bs4_available = False
267
155
 
268
- _torchsde_available = importlib.util.find_spec("torchsde") is not None
269
- try:
270
- _torchsde_version = importlib_metadata.version("torchsde")
271
- logger.debug(f"Successfully imported torchsde version {_torchsde_version}")
272
- except importlib_metadata.PackageNotFoundError:
273
- _torchsde_available = False
274
-
275
156
  _invisible_watermark_available = importlib.util.find_spec("imwatermark") is not None
276
157
  try:
277
158
  _invisible_watermark_version = importlib_metadata.version("invisible-watermark")
@@ -279,82 +160,42 @@ try:
279
160
  except importlib_metadata.PackageNotFoundError:
280
161
  _invisible_watermark_available = False
281
162
 
282
-
283
- _peft_available = importlib.util.find_spec("peft") is not None
284
- try:
285
- _peft_version = importlib_metadata.version("peft")
286
- logger.debug(f"Successfully imported peft version {_peft_version}")
287
- except importlib_metadata.PackageNotFoundError:
288
- _peft_available = False
289
-
290
- _torchvision_available = importlib.util.find_spec("torchvision") is not None
291
- try:
292
- _torchvision_version = importlib_metadata.version("torchvision")
293
- logger.debug(f"Successfully imported torchvision version {_torchvision_version}")
294
- except importlib_metadata.PackageNotFoundError:
295
- _torchvision_available = False
296
-
297
- _sentencepiece_available = importlib.util.find_spec("sentencepiece") is not None
298
- try:
299
- _sentencepiece_version = importlib_metadata.version("sentencepiece")
300
- logger.info(f"Successfully imported sentencepiece version {_sentencepiece_version}")
301
- except importlib_metadata.PackageNotFoundError:
302
- _sentencepiece_available = False
303
-
304
- _matplotlib_available = importlib.util.find_spec("matplotlib") is not None
305
- try:
306
- _matplotlib_version = importlib_metadata.version("matplotlib")
307
- logger.debug(f"Successfully imported matplotlib version {_matplotlib_version}")
308
- except importlib_metadata.PackageNotFoundError:
309
- _matplotlib_available = False
310
-
311
- _timm_available = importlib.util.find_spec("timm") is not None
312
- if _timm_available:
313
- try:
314
- _timm_version = importlib_metadata.version("timm")
315
- logger.info(f"Timm version {_timm_version} available.")
316
- except importlib_metadata.PackageNotFoundError:
317
- _timm_available = False
318
-
319
-
320
- def is_timm_available():
321
- return _timm_available
322
-
323
-
324
- _bitsandbytes_available = importlib.util.find_spec("bitsandbytes") is not None
325
- try:
326
- _bitsandbytes_version = importlib_metadata.version("bitsandbytes")
327
- logger.debug(f"Successfully imported bitsandbytes version {_bitsandbytes_version}")
328
- except importlib_metadata.PackageNotFoundError:
329
- _bitsandbytes_available = False
330
-
331
- _is_google_colab = "google.colab" in sys.modules or any(k.startswith("COLAB_") for k in os.environ)
332
-
333
- _imageio_available = importlib.util.find_spec("imageio") is not None
334
- if _imageio_available:
335
- try:
336
- _imageio_version = importlib_metadata.version("imageio")
337
- logger.debug(f"Successfully imported imageio version {_imageio_version}")
338
-
339
- except importlib_metadata.PackageNotFoundError:
340
- _imageio_available = False
341
-
342
- _is_gguf_available = importlib.util.find_spec("gguf") is not None
343
- if _is_gguf_available:
344
- try:
345
- _gguf_version = importlib_metadata.version("gguf")
346
- logger.debug(f"Successfully import gguf version {_gguf_version}")
347
- except importlib_metadata.PackageNotFoundError:
348
- _is_gguf_available = False
349
-
350
-
351
- _is_torchao_available = importlib.util.find_spec("torchao") is not None
352
- if _is_torchao_available:
163
+ _torch_xla_available, _torch_xla_version = _is_package_available("torch_xla")
164
+ _torch_npu_available, _torch_npu_version = _is_package_available("torch_npu")
165
+ _transformers_available, _transformers_version = _is_package_available("transformers")
166
+ _hf_hub_available, _hf_hub_version = _is_package_available("huggingface_hub")
167
+ _inflect_available, _inflect_version = _is_package_available("inflect")
168
+ _unidecode_available, _unidecode_version = _is_package_available("unidecode")
169
+ _k_diffusion_available, _k_diffusion_version = _is_package_available("k_diffusion")
170
+ _note_seq_available, _note_seq_version = _is_package_available("note_seq")
171
+ _wandb_available, _wandb_version = _is_package_available("wandb")
172
+ _tensorboard_available, _tensorboard_version = _is_package_available("tensorboard")
173
+ _compel_available, _compel_version = _is_package_available("compel")
174
+ _sentencepiece_available, _sentencepiece_version = _is_package_available("sentencepiece")
175
+ _torchsde_available, _torchsde_version = _is_package_available("torchsde")
176
+ _peft_available, _peft_version = _is_package_available("peft")
177
+ _torchvision_available, _torchvision_version = _is_package_available("torchvision")
178
+ _matplotlib_available, _matplotlib_version = _is_package_available("matplotlib")
179
+ _timm_available, _timm_version = _is_package_available("timm")
180
+ _bitsandbytes_available, _bitsandbytes_version = _is_package_available("bitsandbytes")
181
+ _imageio_available, _imageio_version = _is_package_available("imageio")
182
+ _ftfy_available, _ftfy_version = _is_package_available("ftfy")
183
+ _scipy_available, _scipy_version = _is_package_available("scipy")
184
+ _librosa_available, _librosa_version = _is_package_available("librosa")
185
+ _accelerate_available, _accelerate_version = _is_package_available("accelerate")
186
+ _xformers_available, _xformers_version = _is_package_available("xformers")
187
+ _gguf_available, _gguf_version = _is_package_available("gguf")
188
+ _torchao_available, _torchao_version = _is_package_available("torchao")
189
+ _bitsandbytes_available, _bitsandbytes_version = _is_package_available("bitsandbytes")
190
+ _torchao_available, _torchao_version = _is_package_available("torchao")
191
+
192
+ _optimum_quanto_available = importlib.util.find_spec("optimum") is not None
193
+ if _optimum_quanto_available:
353
194
  try:
354
- _torchao_version = importlib_metadata.version("torchao")
355
- logger.debug(f"Successfully import torchao version {_torchao_version}")
195
+ _optimum_quanto_version = importlib_metadata.version("optimum_quanto")
196
+ logger.debug(f"Successfully import optimum-quanto version {_optimum_quanto_version}")
356
197
  except importlib_metadata.PackageNotFoundError:
357
- _is_torchao_available = False
198
+ _optimum_quanto_available = False
358
199
 
359
200
 
360
201
  def is_torch_available():
@@ -478,11 +319,19 @@ def is_imageio_available():
478
319
 
479
320
 
480
321
  def is_gguf_available():
481
- return _is_gguf_available
322
+ return _gguf_available
482
323
 
483
324
 
484
325
  def is_torchao_available():
485
- return _is_torchao_available
326
+ return _torchao_available
327
+
328
+
329
+ def is_optimum_quanto_available():
330
+ return _optimum_quanto_available
331
+
332
+
333
+ def is_timm_available():
334
+ return _timm_available
486
335
 
487
336
 
488
337
  # docstyle-ignore
@@ -628,6 +477,11 @@ TORCHAO_IMPORT_ERROR = """
628
477
  torchao`
629
478
  """
630
479
 
480
+ QUANTO_IMPORT_ERROR = """
481
+ {0} requires the optimum-quanto library but it was not found in your environment. You can install it with pip: `pip
482
+ install optimum-quanto`
483
+ """
484
+
631
485
  BACKENDS_MAPPING = OrderedDict(
632
486
  [
633
487
  ("bs4", (is_bs4_available, BS4_IMPORT_ERROR)),
@@ -655,6 +509,7 @@ BACKENDS_MAPPING = OrderedDict(
655
509
  ("imageio", (is_imageio_available, IMAGEIO_IMPORT_ERROR)),
656
510
  ("gguf", (is_gguf_available, GGUF_IMPORT_ERROR)),
657
511
  ("torchao", (is_torchao_available, TORCHAO_IMPORT_ERROR)),
512
+ ("quanto", (is_optimum_quanto_available, QUANTO_IMPORT_ERROR)),
658
513
  ]
659
514
  )
660
515
 
@@ -767,6 +622,21 @@ def is_transformers_version(operation: str, version: str):
767
622
  return compare_versions(parse(_transformers_version), operation, version)
768
623
 
769
624
 
625
+ def is_hf_hub_version(operation: str, version: str):
626
+ """
627
+ Compares the current Hugging Face Hub version to a given reference with an operation.
628
+
629
+ Args:
630
+ operation (`str`):
631
+ A string representation of an operator, such as `">"` or `"<="`
632
+ version (`str`):
633
+ A version string
634
+ """
635
+ if not _hf_hub_available:
636
+ return False
637
+ return compare_versions(parse(_hf_hub_version), operation, version)
638
+
639
+
770
640
  def is_accelerate_version(operation: str, version: str):
771
641
  """
772
642
  Compares the current Accelerate version to a given reference with an operation.
@@ -792,7 +662,7 @@ def is_peft_version(operation: str, version: str):
792
662
  version (`str`):
793
663
  A version string
794
664
  """
795
- if not _peft_version:
665
+ if not _peft_available:
796
666
  return False
797
667
  return compare_versions(parse(_peft_version), operation, version)
798
668
 
@@ -806,7 +676,7 @@ def is_bitsandbytes_version(operation: str, version: str):
806
676
  version (`str`):
807
677
  A version string
808
678
  """
809
- if not _bitsandbytes_version:
679
+ if not _bitsandbytes_available:
810
680
  return False
811
681
  return compare_versions(parse(_bitsandbytes_version), operation, version)
812
682
 
@@ -821,11 +691,26 @@ def is_gguf_version(operation: str, version: str):
821
691
  version (`str`):
822
692
  A version string
823
693
  """
824
- if not _is_gguf_available:
694
+ if not _gguf_available:
825
695
  return False
826
696
  return compare_versions(parse(_gguf_version), operation, version)
827
697
 
828
698
 
699
+ def is_torchao_version(operation: str, version: str):
700
+ """
701
+ Compares the current torchao version to a given reference with an operation.
702
+
703
+ Args:
704
+ operation (`str`):
705
+ A string representation of an operator, such as `">"` or `"<="`
706
+ version (`str`):
707
+ A version string
708
+ """
709
+ if not _torchao_available:
710
+ return False
711
+ return compare_versions(parse(_torchao_version), operation, version)
712
+
713
+
829
714
  def is_k_diffusion_version(operation: str, version: str):
830
715
  """
831
716
  Compares the current k-diffusion version to a given reference with an operation.
@@ -841,6 +726,21 @@ def is_k_diffusion_version(operation: str, version: str):
841
726
  return compare_versions(parse(_k_diffusion_version), operation, version)
842
727
 
843
728
 
729
+ def is_optimum_quanto_version(operation: str, version: str):
730
+ """
731
+ Compares the current Accelerate version to a given reference with an operation.
732
+
733
+ Args:
734
+ operation (`str`):
735
+ A string representation of an operator, such as `">"` or `"<="`
736
+ version (`str`):
737
+ A version string
738
+ """
739
+ if not _optimum_quanto_available:
740
+ return False
741
+ return compare_versions(parse(_optimum_quanto_version), operation, version)
742
+
743
+
844
744
  def get_objects_from_module(module):
845
745
  """
846
746
  Returns a dict of object names and values in a module, while skipping private/internal objects
@@ -7,6 +7,7 @@ import PIL.Image
7
7
  import PIL.ImageOps
8
8
  import requests
9
9
 
10
+ from .constants import DIFFUSERS_REQUEST_TIMEOUT
10
11
  from .import_utils import BACKENDS_MAPPING, is_imageio_available
11
12
 
12
13
 
@@ -29,7 +30,7 @@ def load_image(
29
30
  """
30
31
  if isinstance(image, str):
31
32
  if image.startswith("http://") or image.startswith("https://"):
32
- image = PIL.Image.open(requests.get(image, stream=True).raw)
33
+ image = PIL.Image.open(requests.get(image, stream=True, timeout=DIFFUSERS_REQUEST_TIMEOUT).raw)
33
34
  elif os.path.isfile(image):
34
35
  image = PIL.Image.open(image)
35
36
  else:
@@ -148,3 +149,15 @@ def get_module_from_name(module, tensor_name: str) -> Tuple[Any, str]:
148
149
  module = new_module
149
150
  tensor_name = splits[-1]
150
151
  return module, tensor_name
152
+
153
+
154
+ def get_submodule_by_name(root_module, module_path: str):
155
+ current = root_module
156
+ parts = module_path.split(".")
157
+ for part in parts:
158
+ if part.isdigit():
159
+ idx = int(part)
160
+ current = current[idx] # e.g., for nn.ModuleList or nn.Sequential
161
+ else:
162
+ current = getattr(current, part)
163
+ return current
@@ -60,8 +60,7 @@ def _get_default_logging_level() -> int:
60
60
  return log_levels[env_level_str]
61
61
  else:
62
62
  logging.getLogger().warning(
63
- f"Unknown option DIFFUSERS_VERBOSITY={env_level_str}, "
64
- f"has to be one of: { ', '.join(log_levels.keys()) }"
63
+ f"Unknown option DIFFUSERS_VERBOSITY={env_level_str}, has to be one of: {', '.join(log_levels.keys())}"
65
64
  )
66
65
  return _default_log_level
67
66
 
@@ -257,26 +257,18 @@ def set_weights_and_activate_adapters(model, adapter_names, weights):
257
257
 
258
258
  return block_weight
259
259
 
260
- # iterate over each adapter, make it active and set the corresponding scaling weight
261
- for adapter_name, weight in zip(adapter_names, weights):
262
- for module_name, module in model.named_modules():
263
- if isinstance(module, BaseTunerLayer):
264
- # For backward compatbility with previous PEFT versions
265
- if hasattr(module, "set_adapter"):
266
- module.set_adapter(adapter_name)
267
- else:
268
- module.active_adapter = adapter_name
269
- module.set_scale(adapter_name, get_module_weight(weight, module_name))
270
-
271
- # set multiple active adapters
272
- for module in model.modules():
260
+ for module_name, module in model.named_modules():
273
261
  if isinstance(module, BaseTunerLayer):
274
- # For backward compatbility with previous PEFT versions
262
+ # For backward compatibility with previous PEFT versions, set multiple active adapters
275
263
  if hasattr(module, "set_adapter"):
276
264
  module.set_adapter(adapter_names)
277
265
  else:
278
266
  module.active_adapter = adapter_names
279
267
 
268
+ # Set the scaling weight for each adapter for this module
269
+ for adapter_name, weight in zip(adapter_names, weights):
270
+ module.set_scale(adapter_name, get_module_weight(weight, module_name))
271
+
280
272
 
281
273
  def check_peft_version(min_version: str) -> None:
282
274
  r"""