diff --git a/modular_diffusion_nodes_library/artifact_utils/latent_artifact.py b/modular_diffusion_nodes_library/artifact_utils/latent_artifact.py index 17e8a35..8b510d6 100644 --- a/modular_diffusion_nodes_library/artifact_utils/latent_artifact.py +++ b/modular_diffusion_nodes_library/artifact_utils/latent_artifact.py @@ -1,7 +1,7 @@ from __future__ import annotations import pickle -from typing import Any +from typing import Any, NoReturn import torch # type: ignore[reportMissingImports] from griptape.artifacts.base_artifact import BaseArtifact @@ -106,7 +106,7 @@ def to_torch( def to_text(self) -> str: return repr(self) - def to_dict(self) -> dict[str, Any]: + def to_dict(self) -> dict[str, Any]: # type: ignore[reportIncompatibleMethodOverride] tensor = self.to_torch().detach().cpu() if tensor.numel() == 0: return { @@ -137,7 +137,7 @@ def to_dict(self) -> dict[str, Any]: "sample": sample, } - def __reduce__(self) -> None: + def __reduce__(self) -> NoReturn: raise pickle.PicklingError("LatentArtifact is an in-process-only type and should not be serialized.") def __bool__(self) -> bool: diff --git a/modular_diffusion_nodes_library/artifact_utils/pipeline_artifact.py b/modular_diffusion_nodes_library/artifact_utils/pipeline_artifact.py index 3cfcf84..05af840 100644 --- a/modular_diffusion_nodes_library/artifact_utils/pipeline_artifact.py +++ b/modular_diffusion_nodes_library/artifact_utils/pipeline_artifact.py @@ -107,6 +107,7 @@ def __init__( self._is_prequantized = is_prequantized self._supports_layerwise_casting = supports_layerwise_casting self._requires_device_map = requires_device_map + self._extra_runtime_adapter_steps: list[PipelineRuntimeAdapterStep] = [] @property def builder_module(self) -> str | None: @@ -174,7 +175,7 @@ def get_or_build_pipeline(self, log_params: Any | None = None) -> ModularPipelin def runtime_adapter_steps(self) -> list[PipelineRuntimeAdapterStep]: """Per-generation context-managed transformations applied around each generation call.""" - return list(self._extra_runtime_adapter_steps) if hasattr(self, "_extra_runtime_adapter_steps") else [] + return list(self._extra_runtime_adapter_steps) def with_additional_runtime_adapter_steps( self, steps: list[PipelineRuntimeAdapterStep] diff --git a/modular_diffusion_nodes_library/artifact_utils/pipeline_build_steps.py b/modular_diffusion_nodes_library/artifact_utils/pipeline_build_steps.py index 3aa144a..753c0b6 100644 --- a/modular_diffusion_nodes_library/artifact_utils/pipeline_build_steps.py +++ b/modular_diffusion_nodes_library/artifact_utils/pipeline_build_steps.py @@ -147,7 +147,7 @@ def apply(self, pipe: Pipe | None, *, log_params: Any | None = None) -> Pipe: raise RuntimeError("ApplyOptimizationStep requires a pipe.") with _profile(log_params, "Applying optimizations"): optimize_diffusion_pipeline( - pipe=pipe, + pipe=pipe, # type: ignore[reportArgumentType] is_prequantized=self._is_prequantized, supports_layerwise_casting=self._supports_layerwise_casting, requires_device_map=self._requires_device_map, diff --git a/modular_diffusion_nodes_library/latent_pipeline_drivers/base_driver.py b/modular_diffusion_nodes_library/latent_pipeline_drivers/base_driver.py index 2586c18..08563e8 100644 --- a/modular_diffusion_nodes_library/latent_pipeline_drivers/base_driver.py +++ b/modular_diffusion_nodes_library/latent_pipeline_drivers/base_driver.py @@ -149,7 +149,7 @@ def _call_block(self, block: ModularPipelineBlocks, **kwargs: Any) -> dict[str, for param in block.inputs: if param.name in kwargs: state.set(param.name, kwargs[param.name], param.kwargs_type) - _, state = block(self.modular_pipe, state) + _, state = block(self.modular_pipe, state) # type: ignore[reportOperatorIssue] return state.values @staticmethod @@ -261,7 +261,13 @@ def encode_masked_image( ) -> LatentArtifact: """Encode the source image with the masked region zeroed out.""" image_processor = self.modular_pipe.image_processor - source_t = image_processor.preprocess(image.image, height=image.image.height, width=image.image.width) + if isinstance(image.image, torch.Tensor): + height = image.image.shape[-2] + width = image.image.shape[-1] + else: + height = image.image.height + width = image.image.width + source_t = image_processor.preprocess(image.image, height=height, width=width) mask_t = torch.from_numpy(np.array(mask.mask, dtype="float32") / 255.0)[None, None] masked_t = source_t * (mask_t < 0.5) return self.encode_media(ImageMedia(image=masked_t, source_shape=image.source_shape), generator_state) @@ -436,10 +442,11 @@ def _get_inpaint_kwargs(self, artifact: InpaintMaskArtifact) -> dict[str, Any]: """Map an InpaintMaskArtifact to pipeline call kwargs.""" device, dtype = self._get_device_and_type() result: dict[str, Any] = { - "image": artifact.source_latent.to(device=device, dtype=dtype), "mask_image": artifact.mask_image, "strength": artifact.strength, } + if artifact.source_latent is not None: + result["image"] = artifact.source_latent.to(device=device, dtype=dtype) if artifact.masked_latent is not None: result["masked_image_latents"] = artifact.masked_latent.to(device=device, dtype=dtype) return result diff --git a/modular_diffusion_nodes_library/latent_pipeline_drivers/flux.py b/modular_diffusion_nodes_library/latent_pipeline_drivers/flux.py index e34711f..a0d6905 100644 --- a/modular_diffusion_nodes_library/latent_pipeline_drivers/flux.py +++ b/modular_diffusion_nodes_library/latent_pipeline_drivers/flux.py @@ -2,13 +2,8 @@ from typing import Any, ClassVar, override import torch # type: ignore[reportMissingImports] -from diffusers import ( # type: ignore[reportMissingImports] - FluxControlNetInpaintPipeline, - FluxControlNetModel, - FluxControlNetPipeline, - FluxInpaintPipeline, -) from diffusers.models import FluxTransformer2DModel # type: ignore[reportMissingImports] +from diffusers.models.controlnets.controlnet_flux import FluxControlNetModel # type: ignore[reportMissingImports] from diffusers.modular_pipelines.flux.before_denoise import ( # type: ignore[reportMissingImports] FluxImg2ImgPrepareLatentsStep, FluxImg2ImgSetTimestepsStep, @@ -25,6 +20,13 @@ ) from diffusers.modular_pipelines.modular_pipeline_utils import ComponentSpec # type: ignore[reportMissingImports] from diffusers.pipelines.flux.pipeline_flux import FluxPipeline # type: ignore[reportMissingImports] +from diffusers.pipelines.flux.pipeline_flux_controlnet import ( + FluxControlNetPipeline, # type: ignore[reportMissingImports] +) +from diffusers.pipelines.flux.pipeline_flux_controlnet_inpainting import ( + FluxControlNetInpaintPipeline, # type: ignore[reportMissingImports] +) +from diffusers.pipelines.flux.pipeline_flux_inpaint import FluxInpaintPipeline # type: ignore[reportMissingImports] from diffusers.pipelines.pipeline_utils import DiffusionPipeline # type: ignore[reportMissingImports] from PIL.Image import Image @@ -165,7 +167,7 @@ def create_noise_latent(self, source_shape: tuple[int, ...], generator_state: Ge batch_size=1, dtype=dtype, ) - latents = output_state.get("latents") + latents = self._get_required(output_state, "latents", torch.Tensor) latents = latents.to(device) latents = self.unpack_latents(latents, height, width) return self._make_latent_artifact( @@ -213,7 +215,7 @@ def add_noise_to_latent( image_latents=packed_image_latents, ) - noisy_latents = output_state.get("latents") + noisy_latents = self._get_required(output_state, "latents", torch.Tensor) unpacked = self.unpack_latents(noisy_latents, height, width) return self._make_latent_artifact( unpacked, @@ -233,7 +235,8 @@ def decode_latent(self, latent: LatentArtifact) -> Image: decode_pipeline = self.modular_pipe.blocks.sub_blocks["decode"] output_state = self._call_block(decode_pipeline, latents=packed, output_type="pil", width=width, height=height) - return output_state.get("images")[0] + images = self._get_required(output_state, "images", list) + return images[0] @override def encode_media(self, media: ImageMedia | VideoMedia, generator_state: GeneratorState) -> LatentArtifact: @@ -249,7 +252,7 @@ def encode_media(self, media: ImageMedia | VideoMedia, generator_state: Generato generator = generator_state.to_generator() encode_pipeline = self.modular_pipe.blocks.sub_blocks["vae_encoder"] output_state = self._call_block(encode_pipeline, image=image, height=height, width=width, generator=generator) - latents = output_state.get("image_latents") + latents = self._get_required(output_state, "image_latents", torch.Tensor) return self._make_latent_artifact(latents, source_shape=media.source_shape) @override diff --git a/modular_diffusion_nodes_library/latent_pipeline_drivers/flux2_base.py b/modular_diffusion_nodes_library/latent_pipeline_drivers/flux2_base.py index e71276e..b6fcf1f 100644 --- a/modular_diffusion_nodes_library/latent_pipeline_drivers/flux2_base.py +++ b/modular_diffusion_nodes_library/latent_pipeline_drivers/flux2_base.py @@ -62,7 +62,7 @@ def create_noise_latent(self, source_shape: tuple[int, ...], generator_state: Ge unpack_latents = Flux2UnpackLatentsStep() latents_state = self._call_block(unpack_latents, latents=packed_latents, latent_ids=latent_ids) - latents = latents_state.get("latents") + latents = self._get_required(latents_state, "latents", torch.Tensor) latents = latents.to(device) return self._make_latent_artifact( latents, @@ -78,7 +78,7 @@ def decode_latent(self, latent: LatentArtifact) -> Image: decode_block = self.modular_pipe.blocks.sub_blocks["decode"] output_state = self._call_block(decode_block, latents=latents, output_type="pil") - return output_state.get("images")[0] + return self._get_required(output_state, "images", list)[0] def _unpack_latents(self, latents: torch.Tensor, height: int, width: int) -> torch.Tensor: """Convert packed Flux2 latents ``[B, seq_len, C]`` to ``[B, C, H/vae/2, W/vae/2]``.""" @@ -97,7 +97,7 @@ def _unpack_latents(self, latents: torch.Tensor, height: int, width: int) -> tor latent_ids = id_state.get("latent_ids") unpack_state = self._call_block(Flux2UnpackLatentsStep(), latents=latents, latent_ids=latent_ids) - return unpack_state.get("latents") + return self._get_required(unpack_state, "latents", torch.Tensor) @override def encode_media(self, media: ImageMedia | VideoMedia, generator_state: GeneratorState) -> LatentArtifact: @@ -113,7 +113,9 @@ def encode_media(self, media: ImageMedia | VideoMedia, generator_state: Generato output_state = self._call_block( encode_block, image=image, height=image.height, width=image.width, generator=generator ) - return self._make_latent_artifact(output_state.get("image_latents")[0], source_shape=media.source_shape) + return self._make_latent_artifact( + self._get_required(output_state, "image_latents", list)[0], source_shape=media.source_shape + ) @override def encode_masked_image( @@ -126,17 +128,19 @@ def encode_masked_image( # PIL -> aligned, normalized tensor (multiple-of-32 alignment + <=1024^2 cap). pre = self._call_block(Flux2ProcessImagesInputStep(), image=pil_image) - source_t = pre.get("condition_images")[0] + source_t = self._get_required(pre, "condition_images", list)[0] # Resize mask to match the (possibly aligned/cropped) tensor dims. aligned_h, aligned_w = source_t.shape[-2:] - mask_resized = mask.mask.convert("L").resize((aligned_w, aligned_h), PIL.Image.NEAREST) + mask_resized = mask.mask.convert("L").resize((aligned_w, aligned_h), PIL.Image.Resampling.NEAREST) mask_t = TF.to_tensor(mask_resized)[None] # (1, 1, H, W), float32 in [0, 1] masked_t = source_t * (mask_t < 0.5) out = self._call_block(Flux2VaeEncoderStep(), condition_images=[masked_t]) - return self._make_latent_artifact(out.get("image_latents")[0], source_shape=image.source_shape) + return self._make_latent_artifact( + self._get_required(out, "image_latents", list)[0], source_shape=image.source_shape + ) @override def add_noise_to_latent( diff --git a/modular_diffusion_nodes_library/latent_pipeline_drivers/flux2_klein.py b/modular_diffusion_nodes_library/latent_pipeline_drivers/flux2_klein.py index 3207c3d..f56b229 100644 --- a/modular_diffusion_nodes_library/latent_pipeline_drivers/flux2_klein.py +++ b/modular_diffusion_nodes_library/latent_pipeline_drivers/flux2_klein.py @@ -55,7 +55,7 @@ def _get_inpaint_kwargs(self, artifact: InpaintMaskArtifact) -> dict[str, Any]: The pipeline will BN-normalize image latent internally, so we must denormalize first. """ device, dtype = self._get_device_and_type() - source_latent = self._denormalize_latent(artifact.source_latent).to(device=device, dtype=dtype) + source_latent = self._denormalize_latent(artifact.source_latent).to(device=device, dtype=dtype) # type: ignore[reportArgumentType] return { "image": source_latent, "mask_image": artifact.mask_image, diff --git a/modular_diffusion_nodes_library/latent_pipeline_drivers/ltx.py b/modular_diffusion_nodes_library/latent_pipeline_drivers/ltx.py index 3d166a7..145ae62 100644 --- a/modular_diffusion_nodes_library/latent_pipeline_drivers/ltx.py +++ b/modular_diffusion_nodes_library/latent_pipeline_drivers/ltx.py @@ -1,5 +1,5 @@ import logging -from typing import Any, ClassVar, override +from typing import Any, ClassVar, cast, override import torch # type: ignore[reportMissingImports] from diffusers import LTXConditionPipeline # type: ignore[reportMissingImports] @@ -13,14 +13,16 @@ LTXAutoVaeEncoderStep, ) from diffusers.modular_pipelines.modular_pipeline import ( # type: ignore[reportMissingImports] - ComponentSpec, - InputParam, ModularPipeline, ModularPipelineBlocks, - OutputParam, PipelineState, SequentialPipelineBlocks, ) +from diffusers.modular_pipelines.modular_pipeline_utils import ( # type: ignore[reportMissingImports] + ComponentSpec, + InputParam, + OutputParam, +) from diffusers.pipelines.ltx.pipeline_ltx_condition import LTXVideoCondition # type: ignore[reportMissingImports] from diffusers.pipelines.pipeline_utils import DiffusionPipeline # type: ignore[reportMissingImports] from diffusers.schedulers import FlowMatchEulerDiscreteScheduler # type: ignore[reportMissingImports] @@ -86,7 +88,7 @@ def intermediate_outputs(self) -> list[OutputParam]: @torch.no_grad() def __call__(self, components, state: PipelineState): - block_state = self.get_block_state(state) + block_state = cast(Any, self.get_block_state(state)) init_timestep = min( block_state.num_inference_steps * block_state.strength, @@ -131,7 +133,7 @@ def intermediate_outputs(self) -> list[OutputParam]: @torch.no_grad() def __call__(self, components, state: PipelineState): - block_state = self.get_block_state(state) + block_state = cast(Any, self.get_block_state(state)) latent_timestep = block_state.timesteps[:1].repeat(block_state.latents.shape[0]) block_state.latents = components.scheduler.scale_noise( @@ -150,7 +152,7 @@ class LTXAddNoiseStep(SequentialPipelineBlocks): then strength slicing, then scale_noise. """ - model_name = "ltx" + model_name = "ltx" # type: ignore[reportIncompatibleMethodOverride] block_classes = [ LTXSetTimestepsStep, LTXSetTimestepsWithStrengthStep, @@ -236,7 +238,7 @@ def create_noise_latent(self, source_shape: tuple[int, ...], generator_state: Ge num_videos_per_prompt=1, generator=generator, ) - packed_latents = output_state.get("latents") + packed_latents = self._get_required(output_state, "latents", torch.Tensor) latents = self._unpack_latents(packed_latents, height, width, num_frames) return self._make_latent_artifact( latents, @@ -278,7 +280,7 @@ def add_noise_to_latent( ) noise_generator_state = GeneratorState.from_artifact(noise_artifact) or generator_state return self._make_latent_artifact( - output_state.get("latents"), + self._get_required(output_state, "latents", torch.Tensor), source_shape=source_shape, upstream=latent, meta=noise_generator_state.as_meta(), @@ -312,8 +314,7 @@ def decode_latent(self, latent: LatentArtifact) -> DecodeResult: output_type="pil", decode_timestep=0.0, ) - videos = output_state.get("videos") - return videos[0] + return self._get_required(output_state, "videos", list)[0] @override def encode_media(self, media: ImageMedia | VideoMedia, generator_state: GeneratorState) -> LatentArtifact: @@ -321,7 +322,9 @@ def encode_media(self, media: ImageMedia | VideoMedia, generator_state: Generato generator = generator_state.to_generator() if isinstance(media, ImageMedia): output_state = self._call_block(LTXAutoVaeEncoderStep(), image=media.image, generator=generator) - return self._make_latent_artifact(output_state.get("image_latents"), source_shape=media.source_shape) + return self._make_latent_artifact( + self._get_required(output_state, "image_latents", torch.Tensor), source_shape=media.source_shape + ) device, dtype = self._get_device_and_type() vae = self.modular_pipe.vae diff --git a/modular_diffusion_nodes_library/latent_pipeline_drivers/ltx2.py b/modular_diffusion_nodes_library/latent_pipeline_drivers/ltx2.py index c4aaa34..983c8b1 100644 --- a/modular_diffusion_nodes_library/latent_pipeline_drivers/ltx2.py +++ b/modular_diffusion_nodes_library/latent_pipeline_drivers/ltx2.py @@ -283,7 +283,7 @@ def _extract_latents_from_output(self, pipe_output: Any) -> torch.Tensor: """LTX2 pipelines return video frames under ``.frames`` instead of ``.images``.""" return pipe_output.frames - def _decode_hdr_to_linear_np(self, video: torch.Tensor) -> np.ndarray: + def _decode_hdr_to_linear_np(self, video: torch.Tensor) -> torch.Tensor | np.ndarray: """Convert decoded LogC3-compressed VAE output to linear HDR np.ndarray. Returns shape ``(B, F, H, W, 3)`` float32 with linear HDR values in ``[0, ∞)``. @@ -328,7 +328,7 @@ def decode_latent(self, latent: LatentArtifact) -> list[Image] | np.ndarray: if self._latent_was_produced_for_hdr(latent): # HDR IC-LoRA path: return raw linear HDR for encode_hdr_tensor_to_mp4 in vae_decoder. - return self._decode_hdr_to_linear_np(video) + return self._decode_hdr_to_linear_np(video) # type: ignore[reportReturnType] frames = self.pipe.video_processor.postprocess_video(video, output_type="pil")[0] return frames diff --git a/modular_diffusion_nodes_library/latent_pipeline_drivers/stable_diffusion_3.py b/modular_diffusion_nodes_library/latent_pipeline_drivers/stable_diffusion_3.py index e1532ff..9d54ece 100644 --- a/modular_diffusion_nodes_library/latent_pipeline_drivers/stable_diffusion_3.py +++ b/modular_diffusion_nodes_library/latent_pipeline_drivers/stable_diffusion_3.py @@ -1,11 +1,7 @@ import logging from typing import Any, ClassVar, override -from diffusers import ( # type: ignore[reportMissingImports] - StableDiffusion3ControlNetInpaintingPipeline, - StableDiffusion3ControlNetPipeline, - StableDiffusion3InpaintPipeline, -) +import torch # type: ignore[reportMissingImports] from diffusers.models.controlnets.controlnet_sd3 import SD3ControlNetModel # type: ignore[reportMissingImports] from diffusers.modular_pipelines.modular_pipeline import ( # type: ignore[reportMissingImports] ModularPipeline, @@ -20,7 +16,16 @@ from diffusers.modular_pipelines.stable_diffusion_3.modular_blocks_stable_diffusion_3 import ( # type: ignore[reportMissingImports] StableDiffusion3AutoBlocks, ) +from diffusers.pipelines.controlnet_sd3.pipeline_stable_diffusion_3_controlnet import ( # type: ignore[reportMissingImports] + StableDiffusion3ControlNetPipeline, +) +from diffusers.pipelines.controlnet_sd3.pipeline_stable_diffusion_3_controlnet_inpainting import ( # type: ignore[reportMissingImports] + StableDiffusion3ControlNetInpaintingPipeline, +) from diffusers.pipelines.pipeline_utils import DiffusionPipeline # type: ignore[reportMissingImports] +from diffusers.pipelines.stable_diffusion_3.pipeline_stable_diffusion_3_inpaint import ( # type: ignore[reportMissingImports] + StableDiffusion3InpaintPipeline, +) from modular_diffusion_nodes_library.artifact_utils.inpaint_mask_artifact import InpaintMaskArtifact from modular_diffusion_nodes_library.artifact_utils.latent_artifact import LatentArtifact @@ -43,7 +48,7 @@ class _SD3PrepareNoiseLatentStep(SequentialPipelineBlocks): """``set_timesteps`` → ``prepare_latents`` so ``init_noise_sigma`` is valid.""" - model_name = "stable-diffusion-3" + model_name = "stable-diffusion-3" # type: ignore[reportIncompatibleMethodOverride] block_classes = [StableDiffusion3SetTimestepsStep, StableDiffusion3PrepareLatentsStep] block_names = ["set_timesteps", "prepare_latents"] @@ -51,7 +56,7 @@ class _SD3PrepareNoiseLatentStep(SequentialPipelineBlocks): class _SD3AddNoiseStep(SequentialPipelineBlocks): """``Img2ImgSetTimesteps`` → ``Img2ImgPrepareLatents`` for img2img noise.""" - model_name = "stable-diffusion-3" + model_name = "stable-diffusion-3" # type: ignore[reportIncompatibleMethodOverride] block_classes = [ StableDiffusion3Img2ImgSetTimestepsStep, StableDiffusion3Img2ImgPrepareLatentsStep, @@ -126,7 +131,7 @@ def create_noise_latent( num_inference_steps=self._DEFAULT_NUM_INFERENCE_STEPS, generator=generator, ) - latents = output_state.get("latents") + latents = self._get_required(output_state, "latents", torch.Tensor) meta = GeneratorState.from_generator(generator).as_meta() return self._make_latent_artifact(latents, source_shape=source_shape, meta=meta) @@ -159,7 +164,7 @@ def add_noise_to_latent( height=latent.source_shape[-2], width=latent.source_shape[-1], ) - noised = output_state.get("latents") + noised = self._get_required(output_state, "latents", torch.Tensor) noise_state = GeneratorState.from_artifact(noise_artifact) or generator_state return self._make_latent_artifact( @@ -209,8 +214,7 @@ def decode_latent(self, latent: LatentArtifact) -> DecodeResult: latents = latent.to_torch(device=device, dtype=dtype) decode_block = self.modular_pipe.blocks.sub_blocks["decode"] output_state = self._call_block(decode_block, latents=latents, output_type="pil") - images = output_state.get("images") - return images[0] + return self._get_required(output_state, "images", list)[0] @override def _get_inpaint_kwargs(self, artifact: InpaintMaskArtifact) -> dict[str, Any]: @@ -240,5 +244,5 @@ def encode_media(self, media: ImageMedia | VideoMedia, generator_state: Generato raise NotImplementedError(f"'{self.pipe.__class__.__name__}' does not support video.") encode_block = self.modular_pipe.blocks.sub_blocks["vae_encoder"] output_state = self._call_block(encode_block, image=media.image, generator=generator_state.to_generator()) - result = output_state.get("image_latents") + result = self._get_required(output_state, "image_latents", torch.Tensor) return self._make_latent_artifact(result, source_shape=media.source_shape) diff --git a/modular_diffusion_nodes_library/latent_pipeline_drivers/stable_diffusion_xl.py b/modular_diffusion_nodes_library/latent_pipeline_drivers/stable_diffusion_xl.py index e429bac..712a378 100644 --- a/modular_diffusion_nodes_library/latent_pipeline_drivers/stable_diffusion_xl.py +++ b/modular_diffusion_nodes_library/latent_pipeline_drivers/stable_diffusion_xl.py @@ -1,12 +1,8 @@ import logging from typing import Any, ClassVar, override -from diffusers import ( # type: ignore[reportMissingImports] - ControlNetModel, - StableDiffusionXLControlNetImg2ImgPipeline, - StableDiffusionXLControlNetInpaintPipeline, - StableDiffusionXLInpaintPipeline, -) +import torch # type: ignore[reportMissingImports] +from diffusers.models.controlnets.controlnet import ControlNetModel # type: ignore[reportMissingImports] from diffusers.modular_pipelines.modular_pipeline import ( # type: ignore[reportMissingImports] ModularPipeline, SequentialPipelineBlocks, @@ -20,7 +16,16 @@ from diffusers.modular_pipelines.stable_diffusion_xl.modular_blocks_stable_diffusion_xl import ( # type: ignore[reportMissingImports] StableDiffusionXLAutoBlocks, ) +from diffusers.pipelines.controlnet.pipeline_controlnet_inpaint_sd_xl import ( # type: ignore[reportMissingImports] + StableDiffusionXLControlNetInpaintPipeline, +) +from diffusers.pipelines.controlnet.pipeline_controlnet_sd_xl_img2img import ( # type: ignore[reportMissingImports] + StableDiffusionXLControlNetImg2ImgPipeline, +) from diffusers.pipelines.pipeline_utils import DiffusionPipeline # type: ignore[reportMissingImports] +from diffusers.pipelines.stable_diffusion_xl.pipeline_stable_diffusion_xl_inpaint import ( # type: ignore[reportMissingImports] + StableDiffusionXLInpaintPipeline, +) from PIL.Image import Image from modular_diffusion_nodes_library.artifact_utils.inpaint_mask_artifact import InpaintMaskArtifact @@ -53,7 +58,7 @@ class _SDXLPrepareNoiseLatentStep(SequentialPipelineBlocks): """``set_timesteps`` → ``prepare_latents`` so ``init_noise_sigma`` is valid.""" - model_name = "stable-diffusion-xl" + model_name = "stable-diffusion-xl" # type: ignore[reportIncompatibleMethodOverride] block_classes = [StableDiffusionXLSetTimestepsStep, StableDiffusionXLPrepareLatentsStep] block_names = ["set_timesteps", "prepare_latents"] @@ -61,7 +66,7 @@ class _SDXLPrepareNoiseLatentStep(SequentialPipelineBlocks): class _SDXLAddNoiseStep(SequentialPipelineBlocks): """``Img2ImgSetTimesteps`` → ``Img2ImgPrepareLatents`` for img2img noise.""" - model_name = "stable-diffusion-xl" + model_name = "stable-diffusion-xl" # type: ignore[reportIncompatibleMethodOverride] block_classes = [ StableDiffusionXLImg2ImgSetTimestepsStep, StableDiffusionXLImg2ImgPrepareLatentsStep, @@ -188,7 +193,7 @@ def add_noise_to_latent( generator=generator, dtype=dtype, ) - noised = output_state.get("latents") + noised = self._get_required(output_state, "latents", torch.Tensor) generator_meta = GeneratorState.from_generator(generator).as_meta() kind = read_driver_meta(latent, _KIND_META_KEY, self.driver_namespace, "") @@ -266,8 +271,7 @@ def decode_latent(self, latent: LatentArtifact) -> Image: latents = latent.to_torch(device=device, dtype=dtype) decode_block = self.modular_pipe.blocks.sub_blocks["decode"] output_state = self._call_block(decode_block, latents=latents, output_type="pil") - images = output_state.get("images") - return images[0] + return self._get_required(output_state, "images", list)[0] @override def _get_inpaint_kwargs(self, artifact: InpaintMaskArtifact) -> dict[str, Any]: @@ -292,6 +296,6 @@ def encode_media(self, media: ImageMedia | VideoMedia, generator_state: Generato generator = generator_state.to_generator() encode_block = self.modular_pipe.blocks.sub_blocks["vae_encoder"] output_state = self._call_block(encode_block, image=media.image, generator=generator) - result = output_state.get("image_latents") + result = self._get_required(output_state, "image_latents", torch.Tensor) meta = {_KIND_META_KEY: "image_latents"} return self._make_latent_artifact(result, source_shape=media.source_shape, meta=meta) diff --git a/modular_diffusion_nodes_library/latent_pipeline_drivers/wan.py b/modular_diffusion_nodes_library/latent_pipeline_drivers/wan.py index bbf5b55..0303517 100644 --- a/modular_diffusion_nodes_library/latent_pipeline_drivers/wan.py +++ b/modular_diffusion_nodes_library/latent_pipeline_drivers/wan.py @@ -1,5 +1,5 @@ import logging -from typing import Any, ClassVar, override +from typing import Any, ClassVar, cast, override import torch # type: ignore[reportMissingImports] from diffusers.modular_pipelines.modular_pipeline import ( # type: ignore[reportMissingImports] @@ -58,7 +58,7 @@ def intermediate_outputs(self) -> list[OutputParam]: def __call__( self, components: WanModularPipeline, state: PipelineState ) -> tuple[WanModularPipeline, PipelineState]: - block_state = self.get_block_state(state) + block_state = cast(Any, self.get_block_state(state)) device = components._execution_device vae_dtype = components.vae.dtype @@ -114,7 +114,7 @@ def create_noise_latent(self, source_shape: tuple[int, ...], generator_state: Ge batch_size=1, dtype=dtype, ) - latents = output_state.get("latents") + latents = self._get_required(output_state, "latents", torch.Tensor) return self._make_latent_artifact( latents, source_shape=source_shape, @@ -137,7 +137,7 @@ def decode_latent(self, latent: LatentArtifact) -> DecodeResult: latents=latents, output_type="pil", ) - video_frames = output_state.get("videos")[0] + video_frames = self._get_required(output_state, "videos", list)[0] return video_frames @override diff --git a/modular_diffusion_nodes_library/latent_pipeline_drivers/wan_i2v.py b/modular_diffusion_nodes_library/latent_pipeline_drivers/wan_i2v.py index 4e0e90a..4e8b520 100644 --- a/modular_diffusion_nodes_library/latent_pipeline_drivers/wan_i2v.py +++ b/modular_diffusion_nodes_library/latent_pipeline_drivers/wan_i2v.py @@ -56,7 +56,7 @@ def create_noise_latent(self, source_shape: tuple[int, ...], generator_state: Ge def decode_latent(self, latent: LatentArtifact) -> DecodeResult: frames = super().decode_latent(latent) source_shape = latent.source_shape - output_frames = [frame.resize((source_shape[-1], source_shape[-2]), Resampling.LANCZOS) for frame in frames] + output_frames = [frame.resize((source_shape[-1], source_shape[-2]), Resampling.LANCZOS) for frame in frames] # type: ignore[reportGeneralTypeIssues] return output_frames @override @@ -70,7 +70,7 @@ def encode_media(self, media: ImageMedia | VideoMedia, generator_state: Generato return super().encode_media(preprocessed, generator_state) @override - def denoise_latent( + def denoise_latent( # type: ignore[reportIncompatibleMethodOverride] self, latent: LatentArtifact, num_inference_steps: int, @@ -137,7 +137,7 @@ def denoise_latent( def get_resize_dimensions(self, width: int, height: int) -> tuple[int, int]: """Calculate the resize dimensions for a given width and height.""" - repo_id = self.pipe.config._name_or_path + repo_id = self.pipe.config._name_or_path # type: ignore[reportAttributeAccessIssue] match repo_id: case "Wan-AI/Wan2.1-I2V-14B-480P-Diffusers": max_area = 832 * 480 # I2V 480P model diff --git a/modular_diffusion_nodes_library/latent_pipeline_drivers/wan_vace.py b/modular_diffusion_nodes_library/latent_pipeline_drivers/wan_vace.py index b13d7c7..64c9454 100644 --- a/modular_diffusion_nodes_library/latent_pipeline_drivers/wan_vace.py +++ b/modular_diffusion_nodes_library/latent_pipeline_drivers/wan_vace.py @@ -84,7 +84,7 @@ def _derive_mask_from_source_media( num_frames: int, height: int, width: int, -) -> list[PIL.Image.Image]: +) -> list[PIL.Image.Image] | None: """Auto-derive a binary mask from the source video payload. VIDEO payload: black (preserve) for the covered frame range, white (generate) elsewhere. diff --git a/modular_diffusion_nodes_library/latent_pipeline_drivers/z_image.py b/modular_diffusion_nodes_library/latent_pipeline_drivers/z_image.py index 524c1ca..83e73be 100644 --- a/modular_diffusion_nodes_library/latent_pipeline_drivers/z_image.py +++ b/modular_diffusion_nodes_library/latent_pipeline_drivers/z_image.py @@ -1,12 +1,8 @@ import logging from typing import Any, ClassVar, override -from diffusers import ( # type: ignore[reportMissingImports] - ZImageControlNetInpaintPipeline, - ZImageControlNetModel, - ZImageControlNetPipeline, - ZImageInpaintPipeline, -) +import torch # type: ignore[reportMissingImports] +from diffusers.models.controlnets.controlnet_z_image import ZImageControlNetModel # type: ignore[reportMissingImports] from diffusers.modular_pipelines.modular_pipeline import ( # type: ignore[reportMissingImports] ModularPipeline, SequentialPipelineBlocks, @@ -21,6 +17,15 @@ ZImageAutoBlocks, # type: ignore[reportMissingImports] ) from diffusers.pipelines.pipeline_utils import DiffusionPipeline # type: ignore[reportMissingImports] +from diffusers.pipelines.z_image.pipeline_z_image_controlnet import ( # type: ignore[reportMissingImports] + ZImageControlNetPipeline, +) +from diffusers.pipelines.z_image.pipeline_z_image_controlnet_inpaint import ( # type: ignore[reportMissingImports] + ZImageControlNetInpaintPipeline, +) +from diffusers.pipelines.z_image.pipeline_z_image_inpaint import ( # type: ignore[reportMissingImports] + ZImageInpaintPipeline, +) from huggingface_hub import hf_hub_download # type: ignore[reportMissingImports] from PIL.Image import Image @@ -50,7 +55,7 @@ class _ZImageAddNoiseStep(SequentialPipelineBlocks): calls scheduler.scale_noise internally. """ - model_name = "z-image" + model_name = "z-image" # type: ignore[reportIncompatibleMethodOverride] block_classes = [ ZImageSetTimestepsStep, ZImageSetTimestepsWithStrengthStep, @@ -94,8 +99,7 @@ def control_pipe_from_standard( ): if not control_net_model_lists: return pipe - - offload_method = detect_offload_method(pipe) + offload_method = detect_offload_method(pipe) # type: ignore[reportArgumentType] if offload_method is not None: raise RuntimeError( f"Failed to build Z-Image ControlNet pipeline. " @@ -153,7 +157,7 @@ def create_noise_latent(self, source_shape: tuple[int, ...], generator_state: Ge num_images_per_prompt=1, generator=generator, ) - latents = output_state.get("latents") + latents = self._get_required(output_state, "latents", torch.Tensor) return self._make_latent_artifact( latents, source_shape=source_shape, @@ -183,7 +187,7 @@ def add_noise_to_latent( num_inference_steps=num_inference_steps, strength=strength, ) - result = output_state.get("latents") + result = self._get_required(output_state, "latents", torch.Tensor) return self._make_latent_artifact( result, source_shape=source_shape, @@ -197,8 +201,7 @@ def decode_latent(self, latent: LatentArtifact) -> Image: latents = latent.to_torch(device=device, dtype=dtype) decode_block = self.modular_pipe.blocks.sub_blocks["decode"] output_state = self._call_block(decode_block, latents=latents, output_type="pil") - images = output_state.get("images") - return images[0] + return self._get_required(output_state, "images", list)[0] @override def encode_media(self, media: ImageMedia | VideoMedia, generator_state: GeneratorState) -> LatentArtifact: @@ -207,7 +210,7 @@ def encode_media(self, media: ImageMedia | VideoMedia, generator_state: Generato generator = generator_state.to_generator() encode_block = self.modular_pipe.blocks.sub_blocks["vae_encoder"] output_state = self._call_block(encode_block, image=media.image, generator=generator) - result = output_state.get("image_latents") + result = self._get_required(output_state, "image_latents", torch.Tensor) return self._make_latent_artifact(result, source_shape=media.source_shape) @override diff --git a/modular_diffusion_nodes_library/misc/partial_denoise.py b/modular_diffusion_nodes_library/misc/partial_denoise.py index 80523e1..c4d1dfe 100644 --- a/modular_diffusion_nodes_library/misc/partial_denoise.py +++ b/modular_diffusion_nodes_library/misc/partial_denoise.py @@ -104,6 +104,8 @@ def set_timesteps( scheduler.set_timesteps(num_inference_steps=num_inference_steps, device=device, **kwargs) timesteps = scheduler.timesteps + if timesteps is None: + return n = len(timesteps) if n == 0: @@ -119,13 +121,13 @@ def set_timesteps( if hasattr(scheduler, "sigmas") and scheduler.sigmas is not None: sigmas = scheduler.sigmas # Slice from begin to end+1 (to include the sigma for the next step boundary) - sigmas_slice = sigmas[begin : min(end + 1, len(sigmas))] + sigmas_slice = sigmas[begin : min(end + 1, len(sigmas))] # type: ignore[reportOptionalSubscript, reportArgumentType] # Optionally append the final timestep/sigma to ensure a fully denoised output, even when denoise_end < 1.0. if return_fully_denoised and timesteps_slice[-1] != timesteps[-1]: - timesteps_slice = torch.cat([timesteps_slice, timesteps[-1:]]) + timesteps_slice = torch.cat([timesteps_slice, timesteps[-1:]]) # type: ignore[reportArgumentType] if sigmas_slice is not None: - sigmas_slice = torch.cat([sigmas_slice, sigmas[-1:]]) + sigmas_slice = torch.cat([sigmas_slice, sigmas[-1:]]) # type: ignore[reportArgumentType, reportOptionalSubscript] m = len(timesteps_slice) logger.debug( diff --git a/modular_diffusion_nodes_library/nodes/elementwise_latent_math.py b/modular_diffusion_nodes_library/nodes/elementwise_latent_math.py index 24631b2..dffc9f5 100644 --- a/modular_diffusion_nodes_library/nodes/elementwise_latent_math.py +++ b/modular_diffusion_nodes_library/nodes/elementwise_latent_math.py @@ -81,7 +81,7 @@ def validate_before_node_run(self) -> list[Exception] | None: return exceptions try: - self._apply_operation(left_latent, right_latent) + self._apply_operation(left_latent, right_latent) # type: ignore[reportArgumentType] except (TypeError, ValueError, RuntimeError) as error: return [error] diff --git a/modular_diffusion_nodes_library/nodes/latent_composite_mask_node.py b/modular_diffusion_nodes_library/nodes/latent_composite_mask_node.py index 63aa115..8037164 100644 --- a/modular_diffusion_nodes_library/nodes/latent_composite_mask_node.py +++ b/modular_diffusion_nodes_library/nodes/latent_composite_mask_node.py @@ -144,7 +144,7 @@ def __init__(self, **kwargs) -> None: self._initializing = False self._create_status_parameters() - def add_parameter(self, parameter: Parameter) -> None: + def add_parameter(self, parameter: Parameter) -> None: # type: ignore[reportIncompatibleMethodOverride] if not self._initializing: return super().add_parameter(parameter) diff --git a/modular_diffusion_nodes_library/nodes/vae_mask_encoder.py b/modular_diffusion_nodes_library/nodes/vae_mask_encoder.py index 0aef48e..fec955d 100644 --- a/modular_diffusion_nodes_library/nodes/vae_mask_encoder.py +++ b/modular_diffusion_nodes_library/nodes/vae_mask_encoder.py @@ -161,7 +161,7 @@ def _encode(self) -> None: # Ensure mask is same size as image if mask_pil.size != image_pil.size: - mask_pil = mask_pil.resize(image_pil.size, PILImage.NEAREST) + mask_pil = mask_pil.resize(image_pil.size, PILImage.Resampling.NEAREST) source_shape = (1, 3, image_pil.height, image_pil.width) image = ImageMedia(image=image_pil, source_shape=source_shape) diff --git a/modular_diffusion_nodes_library/parameters/generate_latent_parameters.py b/modular_diffusion_nodes_library/parameters/generate_latent_parameters.py index 96685e1..d8bd111 100644 --- a/modular_diffusion_nodes_library/parameters/generate_latent_parameters.py +++ b/modular_diffusion_nodes_library/parameters/generate_latent_parameters.py @@ -296,7 +296,7 @@ def callback_on_step_end( generator_state=self._resolve_generator_state(input_latent_for_denoise), **pipe_kwargs, ) - self.publish_output_latent(output_latent_artifact) + self.publish_output_latent(output_latent_artifact) # type: ignore[reportArgumentType] self._node.log_params.append_to_logs("Done.\n") # type: ignore[reportAttributeAccessIssue] def prepare_input_latent( diff --git a/modular_diffusion_nodes_library/parameters/pipeline_builder_parameters.py b/modular_diffusion_nodes_library/parameters/pipeline_builder_parameters.py index fa01580..5f9f842 100644 --- a/modular_diffusion_nodes_library/parameters/pipeline_builder_parameters.py +++ b/modular_diffusion_nodes_library/parameters/pipeline_builder_parameters.py @@ -73,7 +73,7 @@ def set_pipeline_type_parameters(self, provider: str) -> None: logger.error(msg) raise ValueError(msg) - provider_class = MODULAR_PIPELINE_TYPE_PROVIDER_MAP[provider] + provider_class = MODULAR_PIPELINE_TYPE_PROVIDER_MAP[provider] # type: ignore[reportArgumentType] self._pipeline_type_parameters = provider_class(self._node) def before_value_set(self, parameter: Parameter, value: Any) -> None: diff --git a/modular_diffusion_nodes_library/parameters/scheduler_parameters.py b/modular_diffusion_nodes_library/parameters/scheduler_parameters.py index 9782a45..899585f 100644 --- a/modular_diffusion_nodes_library/parameters/scheduler_parameters.py +++ b/modular_diffusion_nodes_library/parameters/scheduler_parameters.py @@ -10,7 +10,7 @@ class SchedulerParameters: - def __init__(self, node: BaseNode, scheduler_types: list[type[diffusers.SchedulerMixin]]): + def __init__(self, node: BaseNode, scheduler_types: list[type[diffusers.SchedulerMixin]]): # type: ignore[reportPrivateImportUsage] self._node = node self._scheduler_type_parameter_name = "scheduler_type" self._scheduler_config_parameter_name = "scheduler_config" @@ -71,7 +71,7 @@ def get_config_kwargs(self) -> dict: ), } - def get_scheduler_class(self) -> type[diffusers.SchedulerMixin]: + def get_scheduler_class(self) -> type[diffusers.SchedulerMixin]: # type: ignore[reportPrivateImportUsage] scheduler_type_name = self._node.get_parameter_value(self._scheduler_type_parameter_name) return self._scheduler_types_by_name[scheduler_type_name] @@ -91,7 +91,7 @@ def get_scheduler_config(self) -> dict: msg = f"Invalid {self._scheduler_config_parameter_name} provided. Must be json, str, or dict" raise TypeError(msg) - def get_scheduler(self) -> diffusers.SchedulerMixin: + def get_scheduler(self) -> diffusers.SchedulerMixin: # type: ignore[reportPrivateImportUsage] scheduler_class = self.get_scheduler_class() scheduler_config = self.get_scheduler_config() - return scheduler_class.from_config(scheduler_config) + return scheduler_class.from_config(scheduler_config) # type: ignore[reportAttributeAccessIssue] diff --git a/modular_diffusion_nodes_library/parameters/upsampler_parameter_type.py b/modular_diffusion_nodes_library/parameters/upsampler_parameter_type.py index 5b7739f..3a5e9e2 100644 --- a/modular_diffusion_nodes_library/parameters/upsampler_parameter_type.py +++ b/modular_diffusion_nodes_library/parameters/upsampler_parameter_type.py @@ -118,7 +118,7 @@ def _upsample( )[0] upsampled_normalized = LTX2Pipeline._normalize_latents( - upsampled_raw, + upsampled_raw, # type: ignore[reportArgumentType] vae.latents_mean, vae.latents_std, vae.config.scaling_factor, # type: ignore[reportUndefinedVariable] diff --git a/modular_diffusion_nodes_library/runtime_parameters/conditioning_runtime_parameter.py b/modular_diffusion_nodes_library/runtime_parameters/conditioning_runtime_parameter.py index 272dae6..9ba1e7c 100644 --- a/modular_diffusion_nodes_library/runtime_parameters/conditioning_runtime_parameter.py +++ b/modular_diffusion_nodes_library/runtime_parameters/conditioning_runtime_parameter.py @@ -111,14 +111,12 @@ def remove_input_parameters(self) -> None: def show(self) -> None: if self._multiple: assert self._fixed_size_list is not None - self._fixed_size_list.show() else: self._node.show_parameter_by_name(self._param_name) def hide(self) -> None: if self._multiple: assert self._fixed_size_list is not None - self._fixed_size_list.hide() else: self._node.hide_parameter_by_name(self._param_name) diff --git a/modular_diffusion_nodes_library/utils/conditioning_utils.py b/modular_diffusion_nodes_library/utils/conditioning_utils.py index 58e1a3a..c44c40c 100644 --- a/modular_diffusion_nodes_library/utils/conditioning_utils.py +++ b/modular_diffusion_nodes_library/utils/conditioning_utils.py @@ -146,7 +146,7 @@ def resize_frames_scale_to_fill( top = (new_h - target_height) // 2 resized_frames = [] for frame in frames: - resized = frame.resize((new_w, new_h), PILImage.LANCZOS) + resized = frame.resize((new_w, new_h), PILImage.Resampling.LANCZOS) cropped = resized.crop((left, top, left + target_width, top + target_height)) resized_frames.append(cropped) return resized_frames diff --git a/modular_diffusion_nodes_library/utils/pipeline_utils.py b/modular_diffusion_nodes_library/utils/pipeline_utils.py index 3c926eb..b5bc3fa 100644 --- a/modular_diffusion_nodes_library/utils/pipeline_utils.py +++ b/modular_diffusion_nodes_library/utils/pipeline_utils.py @@ -50,9 +50,9 @@ def build_scheduler_with_overrides( subfolder=subfolder, local_files_only=True, ) - merged_config = dict(base_scheduler.config) + merged_config = dict(base_scheduler.config) # type: ignore[reportAttributeAccessIssue] merged_config.update(config_overrides or {}) - return scheduler_class.from_config(merged_config) + return scheduler_class.from_config(merged_config) # type: ignore[reportAttributeAccessIssue] def detect_offload_method(pipe: DiffusionPipeline) -> str | None: diff --git a/modular_diffusion_nodes_library/utils/torch_utils.py b/modular_diffusion_nodes_library/utils/torch_utils.py index af9f5dc..42b7c36 100644 --- a/modular_diffusion_nodes_library/utils/torch_utils.py +++ b/modular_diffusion_nodes_library/utils/torch_utils.py @@ -197,3 +197,5 @@ def should_enable_attention_slicing(device: torch.device) -> bool: # noqa: PLR0 return True logger.info("CUDA device has %s memory, attention slicing not needed.", to_human_readable_size(total_mem)) return False + + return False diff --git a/modular_diffusion_nodes_library/utils/video_utils.py b/modular_diffusion_nodes_library/utils/video_utils.py index 0b09935..71fa6d5 100644 --- a/modular_diffusion_nodes_library/utils/video_utils.py +++ b/modular_diffusion_nodes_library/utils/video_utils.py @@ -54,7 +54,7 @@ def load_video_frames_from_url_artifact(video_url_artifact: VideoUrlArtifact) -> temp_path = download_video_to_temp_file(video_url_artifact) try: - return diffusers.utils.load_video(str(temp_path)) + return diffusers.utils.load_video(str(temp_path)) # type: ignore[reportPrivateImportUsage] finally: temp_path.unlink(missing_ok=True) diff --git a/pyproject.toml b/pyproject.toml index 94685ab..75e6b78 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -101,6 +101,9 @@ indent-style = "space" skip-magic-trailing-comma = false line-ending = "auto" +[tool.pyright] +exclude = ["workflows/", ".venv/", "**/__pycache__"] + [dependency-groups] dev = [ "pyright>=1.1.396", diff --git a/tests/workflows/test_workflows.py b/tests/workflows/test_workflows.py index 828a02b..6ac66ad 100644 --- a/tests/workflows/test_workflows.py +++ b/tests/workflows/test_workflows.py @@ -4,7 +4,7 @@ from typing import Any import pytest -import pytest_asyncio +import pytest_asyncio # type: ignore[reportMissingImports] from dotenv import load_dotenv from griptape_nodes.bootstrap.workflow_executors.local_workflow_executor import LocalWorkflowExecutor from griptape_nodes.retained_mode.events.object_events import ClearAllObjectStateRequest diff --git a/uv.lock b/uv.lock index 981cd53..2f6c0d9 100644 --- a/uv.lock +++ b/uv.lock @@ -3,7 +3,9 @@ revision = 3 requires-python = ">=3.12, <4" resolution-markers = [ "sys_platform == 'win32'", - "sys_platform != 'win32'", + "(python_full_version >= '3.14' and sys_platform == 'linux') or (platform_machine != 'aarch64' and sys_platform == 'linux') or (platform_python_implementation != 'CPython' and sys_platform == 'linux')", + "python_full_version < '3.14' and platform_machine == 'aarch64' and platform_python_implementation == 'CPython' and sys_platform == 'linux'", + "sys_platform != 'linux' and sys_platform != 'win32'", ] [[package]] @@ -17,7 +19,8 @@ dependencies = [ { name = "psutil" }, { name = "pyyaml" }, { name = "safetensors" }, - { name = "torch" }, + { name = "torch", version = "2.7.0", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform != 'linux' and sys_platform != 'win32'" }, + { name = "torch", version = "2.7.0+cu128", source = { registry = "https://download.pytorch.org/whl/cu128" }, marker = "sys_platform == 'linux' or sys_platform == 'win32'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/ca/14/787e5498cd062640f0f3d92ef4ae4063174f76f9afd29d13fc52a319daae/accelerate-1.13.0.tar.gz", hash = "sha256:d631b4e0f5b3de4aff2d7e9e6857d164810dfc3237d54d017f075122d057b236", size = 402835, upload-time = "2026-03-04T19:34:12.359Z" } wheels = [ @@ -158,9 +161,9 @@ name = "bitsandbytes" version = "0.49.2" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "numpy" }, - { name = "packaging" }, - { name = "torch" }, + { name = "numpy", marker = "sys_platform == 'win32'" }, + { name = "packaging", marker = "sys_platform == 'win32'" }, + { name = "torch", version = "2.7.0+cu128", source = { registry = "https://download.pytorch.org/whl/cu128" }, marker = "sys_platform == 'win32'" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/b6/d4/501655842ad6771fb077f576d78cbedb5445d15b1c3c91343ed58ca46f0e/bitsandbytes-0.49.2-py3-none-win_amd64.whl", hash = "sha256:2e0ddd09cd778155388023cbe81f00afbb7c000c214caef3ce83386e7144df7d", size = 55372289, upload-time = "2026-02-16T21:26:16.267Z" }, @@ -493,8 +496,11 @@ dependencies = [ { name = "scikit-image" }, { name = "scipy" }, { name = "timm" }, - { name = "torch" }, - { name = "torchvision" }, + { name = "torch", version = "2.7.0", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform != 'linux' and sys_platform != 'win32'" }, + { name = "torch", version = "2.7.0+cu128", source = { registry = "https://download.pytorch.org/whl/cu128" }, marker = "sys_platform == 'linux' or sys_platform == 'win32'" }, + { name = "torchvision", version = "0.22.0", source = { registry = "https://download.pytorch.org/whl/cu128" }, marker = "python_full_version < '3.14' and platform_machine == 'aarch64' and platform_python_implementation == 'CPython' and sys_platform == 'linux'" }, + { name = "torchvision", version = "0.22.0", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform != 'linux' and sys_platform != 'win32'" }, + { name = "torchvision", version = "0.22.0+cu128", source = { registry = "https://download.pytorch.org/whl/cu128" }, marker = "(python_full_version >= '3.14' and sys_platform == 'linux') or (platform_machine != 'aarch64' and sys_platform == 'linux') or (platform_python_implementation != 'CPython' and sys_platform == 'linux') or sys_platform == 'win32'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/14/ad/2eb8cd9a8e17e35b9e5d39ad29afdde8fe810bda85e6e59117050519955d/controlnet_aux-0.0.10.tar.gz", hash = "sha256:31dc265a54448bdcee033a130b47423c80587fa35ccac752113af1b4d48f5183", size = 215016, upload-time = "2025-05-08T10:38:30.845Z" } wheels = [ @@ -938,7 +944,7 @@ wheels = [ [[package]] name = "griptape-nodes-library-modular-diffusion" -version = "0.66.8" +version = "0.3.0" source = { editable = "." } dependencies = [ { name = "accelerate" }, @@ -970,9 +976,14 @@ dependencies = [ { name = "static-ffmpeg" }, { name = "supervision" }, { name = "tokenizers" }, - { name = "torch" }, - { name = "torchaudio" }, - { name = "torchvision" }, + { name = "torch", version = "2.7.0", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform != 'linux' and sys_platform != 'win32'" }, + { name = "torch", version = "2.7.0+cu128", source = { registry = "https://download.pytorch.org/whl/cu128" }, marker = "sys_platform == 'linux' or sys_platform == 'win32'" }, + { name = "torchaudio", version = "2.7.0", source = { registry = "https://download.pytorch.org/whl/cu128" }, marker = "python_full_version < '3.14' and platform_machine == 'aarch64' and platform_python_implementation == 'CPython' and sys_platform == 'linux'" }, + { name = "torchaudio", version = "2.7.0", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform != 'linux' and sys_platform != 'win32'" }, + { name = "torchaudio", version = "2.7.0+cu128", source = { registry = "https://download.pytorch.org/whl/cu128" }, marker = "(python_full_version >= '3.14' and sys_platform == 'linux') or (platform_machine != 'aarch64' and sys_platform == 'linux') or (platform_python_implementation != 'CPython' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "torchvision", version = "0.22.0", source = { registry = "https://download.pytorch.org/whl/cu128" }, marker = "python_full_version < '3.14' and platform_machine == 'aarch64' and platform_python_implementation == 'CPython' and sys_platform == 'linux'" }, + { name = "torchvision", version = "0.22.0", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform != 'linux' and sys_platform != 'win32'" }, + { name = "torchvision", version = "0.22.0+cu128", source = { registry = "https://download.pytorch.org/whl/cu128" }, marker = "(python_full_version >= '3.14' and sys_platform == 'linux') or (platform_machine != 'aarch64' and sys_platform == 'linux') or (platform_python_implementation != 'CPython' and sys_platform == 'linux') or sys_platform == 'win32'" }, { name = "tqdm" }, { name = "transformers" }, { name = "ultralytics" }, @@ -980,6 +991,7 @@ dependencies = [ [package.dev-dependencies] dev = [ + { name = "pyright" }, { name = "pytest" }, { name = "ruff" }, ] @@ -1015,9 +1027,12 @@ requires-dist = [ { name = "static-ffmpeg", specifier = ">=2.8" }, { name = "supervision", specifier = ">=0.27.0" }, { name = "tokenizers", specifier = ">=0.22.0,<0.23" }, - { name = "torch", specifier = "==2.7.0" }, - { name = "torchaudio", specifier = "==2.7.0" }, - { name = "torchvision", specifier = "==0.22.0" }, + { name = "torch", marker = "sys_platform != 'linux' and sys_platform != 'win32'", specifier = "==2.7.0" }, + { name = "torch", marker = "sys_platform == 'linux' or sys_platform == 'win32'", specifier = "==2.7.0", index = "https://download.pytorch.org/whl/cu128" }, + { name = "torchaudio", marker = "sys_platform != 'linux' and sys_platform != 'win32'", specifier = "==2.7.0" }, + { name = "torchaudio", marker = "sys_platform == 'linux' or sys_platform == 'win32'", specifier = "==2.7.0", index = "https://download.pytorch.org/whl/cu128" }, + { name = "torchvision", marker = "sys_platform != 'linux' and sys_platform != 'win32'", specifier = "==0.22.0" }, + { name = "torchvision", marker = "sys_platform == 'linux' or sys_platform == 'win32'", specifier = "==0.22.0", index = "https://download.pytorch.org/whl/cu128" }, { name = "tqdm", specifier = ">=4.67.1" }, { name = "transformers", url = "https://github.com/huggingface/transformers/archive/136c621c00b2536d1f608ed3c6de59b9897afbb8.zip" }, { name = "ultralytics", specifier = ">=8.0.0" }, @@ -1025,6 +1040,7 @@ requires-dist = [ [package.metadata.requires-dev] dev = [ + { name = "pyright", specifier = ">=1.1.396" }, { name = "pytest" }, { name = "ruff", specifier = ">=0.8.0" }, ] @@ -1930,6 +1946,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/df/93/a7b983643d1253bb223234b5b226e69de6cda02b76cdca7770f684b795f5/ninja-1.13.0-py3-none-win_arm64.whl", hash = "sha256:3c0b40b1f0bba764644385319028650087b4c1b18cdfa6f45cb39a3669b81aa9", size = 290806, upload-time = "2025-08-11T15:10:18.018Z" }, ] +[[package]] +name = "nodeenv" +version = "1.10.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/24/bf/d1bda4f6168e0b2e9e5958945e01910052158313224ada5ce1fb2e1113b8/nodeenv-1.10.0.tar.gz", hash = "sha256:996c191ad80897d076bdfba80a41994c2b47c68e224c542b48feba42ba00f8bb", size = 55611, upload-time = "2025-12-20T14:08:54.006Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl", hash = "sha256:5bb13e3eed2923615535339b3c620e76779af4cb4c6a90deccc9e36b274d3827", size = 23438, upload-time = "2025-12-20T14:08:52.782Z" }, +] + [[package]] name = "numpy" version = "2.4.6" @@ -1993,102 +2018,96 @@ wheels = [ [[package]] name = "nvidia-cublas-cu12" -version = "12.6.4.1" +version = "12.8.3.14" source = { registry = "https://pypi.org/simple" } wheels = [ - { url = "https://files.pythonhosted.org/packages/af/eb/ff4b8c503fa1f1796679dce648854d58751982426e4e4b37d6fce49d259c/nvidia_cublas_cu12-12.6.4.1-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:08ed2686e9875d01b58e3cb379c6896df8e76c75e0d4a7f7dace3d7b6d9ef8eb", size = 393138322, upload-time = "2024-11-20T17:40:25.65Z" }, + { url = "https://files.pythonhosted.org/packages/82/df/4b01f10069e23c641f116c62fc31e31e8dc361a153175d81561d15c8143b/nvidia_cublas_cu12-12.8.3.14-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:3f0e05e7293598cf61933258b73e66a160c27d59c4422670bf0b79348c04be44", size = 609620630, upload-time = "2025-01-23T17:55:00.753Z" }, ] [[package]] name = "nvidia-cuda-cupti-cu12" -version = "12.6.80" +version = "12.8.57" source = { registry = "https://pypi.org/simple" } wheels = [ - { url = "https://files.pythonhosted.org/packages/49/60/7b6497946d74bcf1de852a21824d63baad12cd417db4195fc1bfe59db953/nvidia_cuda_cupti_cu12-12.6.80-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:6768bad6cab4f19e8292125e5f1ac8aa7d1718704012a0e3272a6f61c4bce132", size = 8917980, upload-time = "2024-11-20T17:36:04.019Z" }, - { url = "https://files.pythonhosted.org/packages/a5/24/120ee57b218d9952c379d1e026c4479c9ece9997a4fb46303611ee48f038/nvidia_cuda_cupti_cu12-12.6.80-py3-none-manylinux2014_x86_64.whl", hash = "sha256:a3eff6cdfcc6a4c35db968a06fcadb061cbc7d6dde548609a941ff8701b98b73", size = 8917972, upload-time = "2024-10-01T16:58:06.036Z" }, + { url = "https://files.pythonhosted.org/packages/39/6f/3683ecf4e38931971946777d231c2df00dd5c1c4c2c914c42ad8f9f4dca6/nvidia_cuda_cupti_cu12-12.8.57-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:8e0b2eb847de260739bee4a3f66fac31378f4ff49538ff527a38a01a9a39f950", size = 10237547, upload-time = "2025-01-23T17:47:56.863Z" }, ] [[package]] name = "nvidia-cuda-nvrtc-cu12" -version = "12.6.77" +version = "12.8.61" source = { registry = "https://pypi.org/simple" } wheels = [ - { url = "https://files.pythonhosted.org/packages/75/2e/46030320b5a80661e88039f59060d1790298b4718944a65a7f2aeda3d9e9/nvidia_cuda_nvrtc_cu12-12.6.77-py3-none-manylinux2014_x86_64.whl", hash = "sha256:35b0cc6ee3a9636d5409133e79273ce1f3fd087abb0532d2d2e8fff1fe9efc53", size = 23650380, upload-time = "2024-10-01T17:00:14.643Z" }, + { url = "https://files.pythonhosted.org/packages/d4/22/32029d4583f7b19cfe75c84399cbcfd23f2aaf41c66fc8db4da460104fff/nvidia_cuda_nvrtc_cu12-12.8.61-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl", hash = "sha256:a0fa9c2a21583105550ebd871bd76e2037205d56f33f128e69f6d2a55e0af9ed", size = 88024585, upload-time = "2025-01-23T17:50:10.722Z" }, ] [[package]] name = "nvidia-cuda-runtime-cu12" -version = "12.6.77" +version = "12.8.57" source = { registry = "https://pypi.org/simple" } wheels = [ - { url = "https://files.pythonhosted.org/packages/e1/23/e717c5ac26d26cf39a27fbc076240fad2e3b817e5889d671b67f4f9f49c5/nvidia_cuda_runtime_cu12-12.6.77-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:ba3b56a4f896141e25e19ab287cd71e52a6a0f4b29d0d31609f60e3b4d5219b7", size = 897690, upload-time = "2024-11-20T17:35:30.697Z" }, - { url = "https://files.pythonhosted.org/packages/f0/62/65c05e161eeddbafeca24dc461f47de550d9fa8a7e04eb213e32b55cfd99/nvidia_cuda_runtime_cu12-12.6.77-py3-none-manylinux2014_x86_64.whl", hash = "sha256:a84d15d5e1da416dd4774cb42edf5e954a3e60cc945698dc1d5be02321c44dc8", size = 897678, upload-time = "2024-10-01T16:57:33.821Z" }, + { url = "https://files.pythonhosted.org/packages/16/f6/0e1ef31f4753a44084310ba1a7f0abaf977ccd810a604035abb43421c057/nvidia_cuda_runtime_cu12-12.8.57-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:75342e28567340b7428ce79a5d6bb6ca5ff9d07b69e7ce00d2c7b4dc23eff0be", size = 954762, upload-time = "2025-01-23T17:47:22.21Z" }, ] [[package]] name = "nvidia-cudnn-cu12" -version = "9.5.1.17" +version = "9.7.1.26" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "nvidia-cublas-cu12" }, + { name = "nvidia-cublas-cu12", marker = "sys_platform == 'linux'" }, ] wheels = [ - { url = "https://files.pythonhosted.org/packages/2a/78/4535c9c7f859a64781e43c969a3a7e84c54634e319a996d43ef32ce46f83/nvidia_cudnn_cu12-9.5.1.17-py3-none-manylinux_2_28_x86_64.whl", hash = "sha256:30ac3869f6db17d170e0e556dd6cc5eee02647abc31ca856634d5a40f82c15b2", size = 570988386, upload-time = "2024-10-25T19:54:26.39Z" }, + { url = "https://files.pythonhosted.org/packages/25/dc/dc825c4b1c83b538e207e34f48f86063c88deaa35d46c651c7c181364ba2/nvidia_cudnn_cu12-9.7.1.26-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:6d011159a158f3cfc47bf851aea79e31bcff60d530b70ef70474c84cac484d07", size = 726851421, upload-time = "2025-02-06T22:18:29.812Z" }, ] [[package]] name = "nvidia-cufft-cu12" -version = "11.3.0.4" +version = "11.3.3.41" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "nvidia-nvjitlink-cu12" }, + { name = "nvidia-nvjitlink-cu12", marker = "sys_platform == 'linux'" }, ] wheels = [ - { url = "https://files.pythonhosted.org/packages/8f/16/73727675941ab8e6ffd86ca3a4b7b47065edcca7a997920b831f8147c99d/nvidia_cufft_cu12-11.3.0.4-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:ccba62eb9cef5559abd5e0d54ceed2d9934030f51163df018532142a8ec533e5", size = 200221632, upload-time = "2024-11-20T17:41:32.357Z" }, - { url = "https://files.pythonhosted.org/packages/60/de/99ec247a07ea40c969d904fc14f3a356b3e2a704121675b75c366b694ee1/nvidia_cufft_cu12-11.3.0.4-py3-none-manylinux2014_x86_64.whl", hash = "sha256:768160ac89f6f7b459bee747e8d175dbf53619cfe74b2a5636264163138013ca", size = 200221622, upload-time = "2024-10-01T17:03:58.79Z" }, + { url = "https://files.pythonhosted.org/packages/ac/26/b53c493c38dccb1f1a42e1a21dc12cba2a77fbe36c652f7726d9ec4aba28/nvidia_cufft_cu12-11.3.3.41-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:da650080ab79fcdf7a4b06aa1b460e99860646b176a43f6208099bdc17836b6a", size = 193118795, upload-time = "2025-01-23T17:56:30.536Z" }, ] [[package]] name = "nvidia-cufile-cu12" -version = "1.11.1.6" +version = "1.13.0.11" source = { registry = "https://pypi.org/simple" } wheels = [ - { url = "https://files.pythonhosted.org/packages/b2/66/cc9876340ac68ae71b15c743ddb13f8b30d5244af344ec8322b449e35426/nvidia_cufile_cu12-1.11.1.6-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:cc23469d1c7e52ce6c1d55253273d32c565dd22068647f3aa59b3c6b005bf159", size = 1142103, upload-time = "2024-11-20T17:42:11.83Z" }, + { url = "https://files.pythonhosted.org/packages/e5/9c/1f3264d0a84c8a031487fb7f59780fc78fa6f1c97776233956780e3dc3ac/nvidia_cufile_cu12-1.13.0.11-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:483f434c541806936b98366f6d33caef5440572de8ddf38d453213729da3e7d4", size = 1197801, upload-time = "2025-01-23T17:57:07.247Z" }, ] [[package]] name = "nvidia-curand-cu12" -version = "10.3.7.77" +version = "10.3.9.55" source = { registry = "https://pypi.org/simple" } wheels = [ - { url = "https://files.pythonhosted.org/packages/73/1b/44a01c4e70933637c93e6e1a8063d1e998b50213a6b65ac5a9169c47e98e/nvidia_curand_cu12-10.3.7.77-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:a42cd1344297f70b9e39a1e4f467a4e1c10f1da54ff7a85c12197f6c652c8bdf", size = 56279010, upload-time = "2024-11-20T17:42:50.958Z" }, - { url = "https://files.pythonhosted.org/packages/4a/aa/2c7ff0b5ee02eaef890c0ce7d4f74bc30901871c5e45dee1ae6d0083cd80/nvidia_curand_cu12-10.3.7.77-py3-none-manylinux2014_x86_64.whl", hash = "sha256:99f1a32f1ac2bd134897fc7a203f779303261268a65762a623bf30cc9fe79117", size = 56279000, upload-time = "2024-10-01T17:04:45.274Z" }, + { url = "https://files.pythonhosted.org/packages/bd/fc/7be5d0082507269bb04ac07cc614c84b78749efb96e8cf4100a8a1178e98/nvidia_curand_cu12-10.3.9.55-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:8387d974240c91f6a60b761b83d4b2f9b938b7e0b9617bae0f0dafe4f5c36b86", size = 63618038, upload-time = "2025-01-23T17:57:41.838Z" }, ] [[package]] name = "nvidia-cusolver-cu12" -version = "11.7.1.2" +version = "11.7.2.55" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "nvidia-cublas-cu12" }, - { name = "nvidia-cusparse-cu12" }, - { name = "nvidia-nvjitlink-cu12" }, + { name = "nvidia-cublas-cu12", marker = "sys_platform == 'linux'" }, + { name = "nvidia-cusparse-cu12", marker = "sys_platform == 'linux'" }, + { name = "nvidia-nvjitlink-cu12", marker = "sys_platform == 'linux'" }, ] wheels = [ - { url = "https://files.pythonhosted.org/packages/f0/6e/c2cf12c9ff8b872e92b4a5740701e51ff17689c4d726fca91875b07f655d/nvidia_cusolver_cu12-11.7.1.2-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:e9e49843a7707e42022babb9bcfa33c29857a93b88020c4e4434656a655b698c", size = 158229790, upload-time = "2024-11-20T17:43:43.211Z" }, - { url = "https://files.pythonhosted.org/packages/9f/81/baba53585da791d043c10084cf9553e074548408e04ae884cfe9193bd484/nvidia_cusolver_cu12-11.7.1.2-py3-none-manylinux2014_x86_64.whl", hash = "sha256:6cf28f17f64107a0c4d7802be5ff5537b2130bfc112f25d5a30df227058ca0e6", size = 158229780, upload-time = "2024-10-01T17:05:39.875Z" }, + { url = "https://files.pythonhosted.org/packages/c2/08/953675873a136d96bb12f93b49ba045d1107bc94d2551c52b12fa6c7dec3/nvidia_cusolver_cu12-11.7.2.55-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:4d1354102f1e922cee9db51920dba9e2559877cf6ff5ad03a00d853adafb191b", size = 260373342, upload-time = "2025-01-23T17:58:56.406Z" }, ] [[package]] name = "nvidia-cusparse-cu12" -version = "12.5.4.2" +version = "12.5.7.53" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "nvidia-nvjitlink-cu12" }, + { name = "nvidia-nvjitlink-cu12", marker = "sys_platform == 'linux'" }, ] wheels = [ - { url = "https://files.pythonhosted.org/packages/06/1e/b8b7c2f4099a37b96af5c9bb158632ea9e5d9d27d7391d7eb8fc45236674/nvidia_cusparse_cu12-12.5.4.2-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:7556d9eca156e18184b94947ade0fba5bb47d69cec46bf8660fd2c71a4b48b73", size = 216561367, upload-time = "2024-11-20T17:44:54.824Z" }, - { url = "https://files.pythonhosted.org/packages/43/ac/64c4316ba163e8217a99680c7605f779accffc6a4bcd0c778c12948d3707/nvidia_cusparse_cu12-12.5.4.2-py3-none-manylinux2014_x86_64.whl", hash = "sha256:23749a6571191a215cb74d1cdbff4a86e7b19f1200c071b3fcf844a5bea23a2f", size = 216561357, upload-time = "2024-10-01T17:06:29.861Z" }, + { url = "https://files.pythonhosted.org/packages/c2/ab/31e8149c66213b846c082a3b41b1365b831f41191f9f40c6ddbc8a7d550e/nvidia_cusparse_cu12-12.5.7.53-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:3c1b61eb8c85257ea07e9354606b26397612627fdcd327bfd91ccf6155e7c86d", size = 292064180, upload-time = "2025-01-23T18:00:23.233Z" }, ] [[package]] @@ -2109,19 +2128,18 @@ wheels = [ [[package]] name = "nvidia-nvjitlink-cu12" -version = "12.6.85" +version = "12.8.61" source = { registry = "https://pypi.org/simple" } wheels = [ - { url = "https://files.pythonhosted.org/packages/9d/d7/c5383e47c7e9bf1c99d5bd2a8c935af2b6d705ad831a7ec5c97db4d82f4f/nvidia_nvjitlink_cu12-12.6.85-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl", hash = "sha256:eedc36df9e88b682efe4309aa16b5b4e78c2407eac59e8c10a6a47535164369a", size = 19744971, upload-time = "2024-11-20T17:46:53.366Z" }, + { url = "https://files.pythonhosted.org/packages/03/f8/9d85593582bd99b8d7c65634d2304780aefade049b2b94d96e44084be90b/nvidia_nvjitlink_cu12-12.8.61-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl", hash = "sha256:45fd79f2ae20bd67e8bc411055939049873bfd8fac70ff13bd4865e0b9bdab17", size = 39243473, upload-time = "2025-01-23T18:03:03.509Z" }, ] [[package]] name = "nvidia-nvtx-cu12" -version = "12.6.77" +version = "12.8.55" source = { registry = "https://pypi.org/simple" } wheels = [ - { url = "https://files.pythonhosted.org/packages/56/9a/fff8376f8e3d084cd1530e1ef7b879bb7d6d265620c95c1b322725c694f4/nvidia_nvtx_cu12-12.6.77-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:b90bed3df379fa79afbd21be8e04a0314336b8ae16768b58f2d34cb1d04cd7d2", size = 89276, upload-time = "2024-11-20T17:38:27.621Z" }, - { url = "https://files.pythonhosted.org/packages/9e/4e/0d0c945463719429b7bd21dece907ad0bde437a2ff12b9b12fee94722ab0/nvidia_nvtx_cu12-12.6.77-py3-none-manylinux2014_x86_64.whl", hash = "sha256:6574241a3ec5fdc9334353ab8c479fe75841dbe8f4532a8fc97ce63503330ba1", size = 89265, upload-time = "2024-10-01T17:00:38.172Z" }, + { url = "https://files.pythonhosted.org/packages/8d/cd/0e8c51b2ae3a58f054f2e7fe91b82d201abfb30167f2431e9bd92d532f42/nvidia_nvtx_cu12-12.8.55-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:2dd0780f1a55c21d8e06a743de5bd95653de630decfff40621dbde78cc307102", size = 89896, upload-time = "2025-01-23T17:50:44.487Z" }, ] [[package]] @@ -2241,7 +2259,8 @@ dependencies = [ { name = "ninja" }, { name = "numpy" }, { name = "safetensors" }, - { name = "torch" }, + { name = "torch", version = "2.7.0", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform != 'linux' and sys_platform != 'win32'" }, + { name = "torch", version = "2.7.0+cu128", source = { registry = "https://download.pytorch.org/whl/cu128" }, marker = "sys_platform == 'linux' or sys_platform == 'win32'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/3e/df/03ae85090b33d81f06b4dd7a43b16cef6ee5f1d36d8fdcce864964895c70/optimum_quanto-0.2.7.tar.gz", hash = "sha256:91b5c2dc8a9100297dc7924a93747fb77ab010784b5e1f6d0208976ba054dade", size = 361601, upload-time = "2025-03-06T08:07:51.578Z" } wheels = [ @@ -2269,7 +2288,8 @@ dependencies = [ { name = "psutil" }, { name = "pyyaml" }, { name = "safetensors" }, - { name = "torch" }, + { name = "torch", version = "2.7.0", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform != 'linux' and sys_platform != 'win32'" }, + { name = "torch", version = "2.7.0+cu128", source = { registry = "https://download.pytorch.org/whl/cu128" }, marker = "sys_platform == 'linux' or sys_platform == 'win32'" }, { name = "tqdm" }, { name = "transformers" }, ] @@ -2709,6 +2729,19 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/10/bd/c038d7cc38edc1aa5bf91ab8068b63d4308c66c4c8bb3cbba7dfbc049f9c/pyparsing-3.3.2-py3-none-any.whl", hash = "sha256:850ba148bd908d7e2411587e247a1e4f0327839c40e2e5e6d05a007ecc69911d", size = 122781, upload-time = "2026-01-21T03:57:55.912Z" }, ] +[[package]] +name = "pyright" +version = "1.1.411" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "nodeenv" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/7e/ab/265f7dc69d28113ebba19092e57b075f41543b2ed048429c5f56e2b88eac/pyright-1.1.411.tar.gz", hash = "sha256:d885a0551f2e763b089a02702174e7f4ba77548cddabc972ab86d1f7f1b0f998", size = 4112861, upload-time = "2026-06-25T02:14:06.37Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0a/49/385be530a6a5b78d1cbcd5c2e38debc8959a2fc6bdb716f4e581002979fc/pyright-1.1.411-py3-none-any.whl", hash = "sha256:dc7c72a8e2700c55baa127554040e067041ea53ccfd50bf96308cc4291c7d5d9", size = 6181526, upload-time = "2026-06-25T02:14:04.691Z" }, +] + [[package]] name = "pytest" version = "9.0.3" @@ -3189,8 +3222,11 @@ dependencies = [ { name = "iopath" }, { name = "numpy" }, { name = "pillow" }, - { name = "torch" }, - { name = "torchvision" }, + { name = "torch", version = "2.7.0", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform != 'linux' and sys_platform != 'win32'" }, + { name = "torch", version = "2.7.0+cu128", source = { registry = "https://download.pytorch.org/whl/cu128" }, marker = "sys_platform == 'linux' or sys_platform == 'win32'" }, + { name = "torchvision", version = "0.22.0", source = { registry = "https://download.pytorch.org/whl/cu128" }, marker = "python_full_version < '3.14' and platform_machine == 'aarch64' and platform_python_implementation == 'CPython' and sys_platform == 'linux'" }, + { name = "torchvision", version = "0.22.0", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform != 'linux' and sys_platform != 'win32'" }, + { name = "torchvision", version = "0.22.0+cu128", source = { registry = "https://download.pytorch.org/whl/cu128" }, marker = "(python_full_version >= '3.14' and sys_platform == 'linux') or (platform_machine != 'aarch64' and sys_platform == 'linux') or (platform_python_implementation != 'CPython' and sys_platform == 'linux') or sys_platform == 'win32'" }, { name = "tqdm" }, ] sdist = { url = "https://files.pythonhosted.org/packages/ce/11/d07fc96688f731a85de6d5260e98b709051eded2b7b5667ae292530bcf90/sam2-1.1.0.tar.gz", hash = "sha256:7e0ea252d43c10d853e3acfce0b5770ac683c30481bd6de311300e9d44f45b74", size = 152836, upload-time = "2024-12-21T09:55:17.154Z" } @@ -3328,8 +3364,8 @@ name = "secretstorage" version = "3.5.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "cryptography", marker = "sys_platform != 'win32'" }, - { name = "jeepney", marker = "sys_platform != 'win32'" }, + { name = "cryptography", marker = "sys_platform == 'linux'" }, + { name = "jeepney", marker = "sys_platform == 'linux'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/1c/03/e834bcd866f2f8a49a85eaff47340affa3bfa391ee9912a952a1faa68c7b/secretstorage-3.5.0.tar.gz", hash = "sha256:f04b8e4689cbce351744d5537bf6b1329c6fc68f91fa666f60a380edddcd11be", size = 19884, upload-time = "2025-11-23T19:02:53.191Z" } wheels = [ @@ -3455,8 +3491,11 @@ dependencies = [ { name = "einops" }, { name = "numpy" }, { name = "safetensors" }, - { name = "torch" }, - { name = "torchvision" }, + { name = "torch", version = "2.7.0", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform != 'linux' and sys_platform != 'win32'" }, + { name = "torch", version = "2.7.0+cu128", source = { registry = "https://download.pytorch.org/whl/cu128" }, marker = "sys_platform == 'linux' or sys_platform == 'win32'" }, + { name = "torchvision", version = "0.22.0", source = { registry = "https://download.pytorch.org/whl/cu128" }, marker = "python_full_version < '3.14' and platform_machine == 'aarch64' and platform_python_implementation == 'CPython' and sys_platform == 'linux'" }, + { name = "torchvision", version = "0.22.0", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform != 'linux' and sys_platform != 'win32'" }, + { name = "torchvision", version = "0.22.0+cu128", source = { registry = "https://download.pytorch.org/whl/cu128" }, marker = "(python_full_version >= '3.14' and sys_platform == 'linux') or (platform_machine != 'aarch64' and sys_platform == 'linux') or (platform_python_implementation != 'CPython' and sys_platform == 'linux') or sys_platform == 'win32'" }, { name = "typing-extensions" }, ] sdist = { url = "https://files.pythonhosted.org/packages/2a/8f/ab4565c23dd67a036ab72101a830cebd7ca026b2fddf5771bbf6284f6228/spandrel-0.4.2.tar.gz", hash = "sha256:fefa4ea966c6a5b7721dcf24f3e2062a5a96a395c8bedcb570fb55971fdcbccb", size = 247544, upload-time = "2026-02-21T01:52:26.342Z" } @@ -3613,8 +3652,11 @@ dependencies = [ { name = "huggingface-hub" }, { name = "pyyaml" }, { name = "safetensors" }, - { name = "torch" }, - { name = "torchvision" }, + { name = "torch", version = "2.7.0", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform != 'linux' and sys_platform != 'win32'" }, + { name = "torch", version = "2.7.0+cu128", source = { registry = "https://download.pytorch.org/whl/cu128" }, marker = "sys_platform == 'linux' or sys_platform == 'win32'" }, + { name = "torchvision", version = "0.22.0", source = { registry = "https://download.pytorch.org/whl/cu128" }, marker = "python_full_version < '3.14' and platform_machine == 'aarch64' and platform_python_implementation == 'CPython' and sys_platform == 'linux'" }, + { name = "torchvision", version = "0.22.0", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform != 'linux' and sys_platform != 'win32'" }, + { name = "torchvision", version = "0.22.0+cu128", source = { registry = "https://download.pytorch.org/whl/cu128" }, marker = "(python_full_version >= '3.14' and sys_platform == 'linux') or (platform_machine != 'aarch64' and sys_platform == 'linux') or (platform_python_implementation != 'CPython' and sys_platform == 'linux') or sys_platform == 'win32'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/08/54/ece85b0eef3700c90db8271a43669b05a0ebbe2edb1962329c34374a297e/timm-1.0.27.tar.gz", hash = "sha256:315dfe63186ca9fb7ff941268941231fd5be259f2b4bb4afa28560ae1015cb9a", size = 2439861, upload-time = "2026-05-08T19:38:36.844Z" } wheels = [ @@ -3669,11 +3711,38 @@ wheels = [ name = "torch" version = "2.7.0" source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "sys_platform != 'linux' and sys_platform != 'win32'", +] dependencies = [ - { name = "filelock" }, - { name = "fsspec" }, - { name = "jinja2" }, - { name = "networkx" }, + { name = "filelock", marker = "sys_platform != 'linux' and sys_platform != 'win32'" }, + { name = "fsspec", marker = "sys_platform != 'linux' and sys_platform != 'win32'" }, + { name = "jinja2", marker = "sys_platform != 'linux' and sys_platform != 'win32'" }, + { name = "networkx", marker = "sys_platform != 'linux' and sys_platform != 'win32'" }, + { name = "setuptools", marker = "sys_platform != 'linux' and sys_platform != 'win32'" }, + { name = "sympy", marker = "sys_platform != 'linux' and sys_platform != 'win32'" }, + { name = "typing-extensions", marker = "sys_platform != 'linux' and sys_platform != 'win32'" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/ee/8d/b2939e5254be932db1a34b2bd099070c509e8887e0c5a90c498a917e4032/torch-2.7.0-cp312-none-macosx_11_0_arm64.whl", hash = "sha256:30b7688a87239a7de83f269333651d8e582afffce6f591fff08c046f7787296e", size = 68574294, upload-time = "2025-04-23T14:34:47.098Z" }, + { url = "https://files.pythonhosted.org/packages/28/fd/74ba6fde80e2b9eef4237fe668ffae302c76f0e4221759949a632ca13afa/torch-2.7.0-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:edad98dddd82220465b106506bb91ee5ce32bd075cddbcf2b443dfaa2cbd83bf", size = 68856166, upload-time = "2025-04-23T14:34:04.012Z" }, + { url = "https://files.pythonhosted.org/packages/90/48/7e6477cf40d48cc0a61fa0d41ee9582b9a316b12772fcac17bc1a40178e7/torch-2.7.0-cp313-none-macosx_11_0_arm64.whl", hash = "sha256:27f5007bdf45f7bb7af7f11d1828d5c2487e030690afb3d89a651fd7036a390e", size = 68575074, upload-time = "2025-04-23T14:32:38.136Z" }, +] + +[[package]] +name = "torch" +version = "2.7.0+cu128" +source = { registry = "https://download.pytorch.org/whl/cu128" } +resolution-markers = [ + "sys_platform == 'win32'", + "(python_full_version >= '3.14' and sys_platform == 'linux') or (platform_machine != 'aarch64' and sys_platform == 'linux') or (platform_python_implementation != 'CPython' and sys_platform == 'linux')", + "python_full_version < '3.14' and platform_machine == 'aarch64' and platform_python_implementation == 'CPython' and sys_platform == 'linux'", +] +dependencies = [ + { name = "filelock", marker = "sys_platform == 'linux' or sys_platform == 'win32'" }, + { name = "fsspec", marker = "sys_platform == 'linux' or sys_platform == 'win32'" }, + { name = "jinja2", marker = "sys_platform == 'linux' or sys_platform == 'win32'" }, + { name = "networkx", marker = "sys_platform == 'linux' or sys_platform == 'win32'" }, { name = "nvidia-cublas-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, { name = "nvidia-cuda-cupti-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, { name = "nvidia-cuda-nvrtc-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, @@ -3688,70 +3757,131 @@ dependencies = [ { name = "nvidia-nccl-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, { name = "nvidia-nvjitlink-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, { name = "nvidia-nvtx-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, - { name = "setuptools" }, - { name = "sympy" }, - { name = "triton", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, - { name = "typing-extensions" }, + { name = "setuptools", marker = "sys_platform == 'linux' or sys_platform == 'win32'" }, + { name = "sympy", marker = "sys_platform == 'linux' or sys_platform == 'win32'" }, + { name = "triton", marker = "sys_platform == 'linux'" }, + { name = "typing-extensions", marker = "sys_platform == 'linux' or sys_platform == 'win32'" }, ] wheels = [ - { url = "https://files.pythonhosted.org/packages/aa/5e/ac759f4c0ab7c01feffa777bd68b43d2ac61560a9770eeac074b450f81d4/torch-2.7.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:36a6368c7ace41ad1c0f69f18056020b6a5ca47bedaca9a2f3b578f5a104c26c", size = 99013250, upload-time = "2025-04-23T14:35:15.589Z" }, - { url = "https://files.pythonhosted.org/packages/9c/58/2d245b6f1ef61cf11dfc4aceeaacbb40fea706ccebac3f863890c720ab73/torch-2.7.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:15aab3e31c16feb12ae0a88dba3434a458874636f360c567caa6a91f6bfba481", size = 865042157, upload-time = "2025-04-23T14:32:56.011Z" }, - { url = "https://files.pythonhosted.org/packages/44/80/b353c024e6b624cd9ce1d66dcb9d24e0294680f95b369f19280e241a0159/torch-2.7.0-cp312-cp312-win_amd64.whl", hash = "sha256:f56d4b2510934e072bab3ab8987e00e60e1262fb238176168f5e0c43a1320c6d", size = 212482262, upload-time = "2025-04-23T14:35:03.527Z" }, - { url = "https://files.pythonhosted.org/packages/ee/8d/b2939e5254be932db1a34b2bd099070c509e8887e0c5a90c498a917e4032/torch-2.7.0-cp312-none-macosx_11_0_arm64.whl", hash = "sha256:30b7688a87239a7de83f269333651d8e582afffce6f591fff08c046f7787296e", size = 68574294, upload-time = "2025-04-23T14:34:47.098Z" }, - { url = "https://files.pythonhosted.org/packages/14/24/720ea9a66c29151b315ea6ba6f404650834af57a26b2a04af23ec246b2d5/torch-2.7.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:868ccdc11798535b5727509480cd1d86d74220cfdc42842c4617338c1109a205", size = 99015553, upload-time = "2025-04-23T14:34:41.075Z" }, - { url = "https://files.pythonhosted.org/packages/4b/27/285a8cf12bd7cd71f9f211a968516b07dcffed3ef0be585c6e823675ab91/torch-2.7.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:9b52347118116cf3dff2ab5a3c3dd97c719eb924ac658ca2a7335652076df708", size = 865046389, upload-time = "2025-04-23T14:32:01.16Z" }, - { url = "https://files.pythonhosted.org/packages/74/c8/2ab2b6eadc45554af8768ae99668c5a8a8552e2012c7238ded7e9e4395e1/torch-2.7.0-cp313-cp313-win_amd64.whl", hash = "sha256:434cf3b378340efc87c758f250e884f34460624c0523fe5c9b518d205c91dd1b", size = 212490304, upload-time = "2025-04-23T14:33:57.108Z" }, - { url = "https://files.pythonhosted.org/packages/28/fd/74ba6fde80e2b9eef4237fe668ffae302c76f0e4221759949a632ca13afa/torch-2.7.0-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:edad98dddd82220465b106506bb91ee5ce32bd075cddbcf2b443dfaa2cbd83bf", size = 68856166, upload-time = "2025-04-23T14:34:04.012Z" }, - { url = "https://files.pythonhosted.org/packages/cb/b4/8df3f9fe6bdf59e56a0e538592c308d18638eb5f5dc4b08d02abb173c9f0/torch-2.7.0-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:2a885fc25afefb6e6eb18a7d1e8bfa01cc153e92271d980a49243b250d5ab6d9", size = 99091348, upload-time = "2025-04-23T14:33:48.975Z" }, - { url = "https://files.pythonhosted.org/packages/9d/f5/0bd30e9da04c3036614aa1b935a9f7e505a9e4f1f731b15e165faf8a4c74/torch-2.7.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:176300ff5bc11a5f5b0784e40bde9e10a35c4ae9609beed96b4aeb46a27f5fae", size = 865104023, upload-time = "2025-04-23T14:30:40.537Z" }, - { url = "https://files.pythonhosted.org/packages/d1/b7/2235d0c3012c596df1c8d39a3f4afc1ee1b6e318d469eda4c8bb68566448/torch-2.7.0-cp313-cp313t-win_amd64.whl", hash = "sha256:d0ca446a93f474985d81dc866fcc8dccefb9460a29a456f79d99c29a78a66993", size = 212750916, upload-time = "2025-04-23T14:32:22.91Z" }, - { url = "https://files.pythonhosted.org/packages/90/48/7e6477cf40d48cc0a61fa0d41ee9582b9a316b12772fcac17bc1a40178e7/torch-2.7.0-cp313-none-macosx_11_0_arm64.whl", hash = "sha256:27f5007bdf45f7bb7af7f11d1828d5c2487e030690afb3d89a651fd7036a390e", size = 68575074, upload-time = "2025-04-23T14:32:38.136Z" }, + { url = "https://download-r2.pytorch.org/whl/cu128/torch-2.7.0%2Bcu128-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:6bba7dca5d9a729f1e8e9befb98055498e551efaf5ed034824c168b560afc1ac", upload-time = "2025-05-14T03:37:30Z" }, + { url = "https://download-r2.pytorch.org/whl/cu128/torch-2.7.0%2Bcu128-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:7c0f08d1c44a02abad389373dddfce75904b969a410be2f4e5109483dd3dc0ce", upload-time = "2025-04-22T18:20:33Z" }, + { url = "https://download-r2.pytorch.org/whl/cu128/torch-2.7.0%2Bcu128-cp312-cp312-win_amd64.whl", hash = "sha256:1704e5dd66c9221e4e8b6ae2d80cbf54e129571e643f5fa9ca78cc6d2096403a", upload-time = "2025-04-22T18:21:07Z" }, + { url = "https://download-r2.pytorch.org/whl/cu128/torch-2.7.0%2Bcu128-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:633f35e8b1b1f640ef5f8a98dbd84f19b548222ce7ba8f017fe47ce6badc106a", upload-time = "2025-05-14T03:39:04Z" }, + { url = "https://download-r2.pytorch.org/whl/cu128/torch-2.7.0%2Bcu128-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:d2f69f909da5dc52113ec66a851d62079f3d52c83184cf64beebdf12ca2f705c", upload-time = "2025-04-22T18:21:25Z" }, + { url = "https://download-r2.pytorch.org/whl/cu128/torch-2.7.0%2Bcu128-cp313-cp313-win_amd64.whl", hash = "sha256:58c749f52ddc9098155c77d6c74153bb13d8978fd6e1063b5d7b41d4644f5af5", upload-time = "2025-04-22T18:21:51Z" }, + { url = "https://download-r2.pytorch.org/whl/cu128/torch-2.7.0%2Bcu128-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:fa05ac6ebed4777de7a5eff398c1f17b697c02422516748ce66a8151873e5a0e", upload-time = "2025-05-14T03:40:41Z" }, + { url = "https://download-r2.pytorch.org/whl/cu128/torch-2.7.0%2Bcu128-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:78e13c26c38ae92d6841cf9ce760d7e9d52bca3e3183de371812e84274b054dc", upload-time = "2025-04-22T18:21:58Z" }, + { url = "https://download-r2.pytorch.org/whl/cu128/torch-2.7.0%2Bcu128-cp313-cp313t-win_amd64.whl", hash = "sha256:3559e98be824c2b12ab807319cd61c6174d73a524c9961317de8e8a44133c5c5", upload-time = "2025-04-22T18:22:33Z" }, +] + +[[package]] +name = "torchaudio" +version = "2.7.0" +source = { registry = "https://download.pytorch.org/whl/cu128" } +resolution-markers = [ + "python_full_version < '3.14' and platform_machine == 'aarch64' and platform_python_implementation == 'CPython' and sys_platform == 'linux'", +] +dependencies = [ + { name = "torch", version = "2.7.0+cu128", source = { registry = "https://download.pytorch.org/whl/cu128" }, marker = "python_full_version < '3.14' and platform_machine == 'aarch64' and platform_python_implementation == 'CPython' and sys_platform == 'linux'" }, +] +wheels = [ + { url = "https://download-r2.pytorch.org/whl/cu128/torchaudio-2.7.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:1eda1ab85e1361fe0bca287df3fbca6f5bd9f3492199cdb2c452e8addefb8016", upload-time = "2025-04-22T18:30:29Z" }, + { url = "https://download-r2.pytorch.org/whl/cu128/torchaudio-2.7.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:94aab9bd583376aeed884954c32fcda9eab14bc4ea60640dfb9a00c4f539dafb", upload-time = "2025-04-22T18:30:29Z" }, + { url = "https://download-r2.pytorch.org/whl/cu128/torchaudio-2.7.0-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:c3ee04c73c143c81f2d99ac7e7d42744ce5271e44a1ac82fe4f34456f2ba157a", upload-time = "2025-04-22T18:30:29Z" }, ] [[package]] name = "torchaudio" version = "2.7.0" source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "sys_platform != 'linux' and sys_platform != 'win32'", +] dependencies = [ - { name = "torch" }, + { name = "torch", version = "2.7.0", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform != 'linux' and sys_platform != 'win32'" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/dd/b9/66dd7c4e16e8e6dcc52b4702ba7bbace589972b3597627d39d9dc3aa5fdd/torchaudio-2.7.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:65b4fc9b7f28367f918b02ae4db4290457bc4fdd160f22b7d684e93ab8dcb956", size = 1846733, upload-time = "2025-04-23T14:47:01.068Z" }, - { url = "https://files.pythonhosted.org/packages/47/48/850edf788c674494a7e148eee6f5563cae34c9a3e3e0962dcfce66c1dae7/torchaudio-2.7.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:33004ed47f18f00044c97ee8cd9e3f5e1c2e26ef23d4f72b5f1ae33e6182587b", size = 1686687, upload-time = "2025-04-23T14:47:02.136Z" }, - { url = "https://files.pythonhosted.org/packages/78/98/ec8c7aba67b44cdc59717d4b43d02023ded5da180d33c6469d20bf5bfa3c/torchaudio-2.7.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:a6f03494075bcdd62e7fade7baf50a0ef107aa809d02b5e1786391adced451a3", size = 3454437, upload-time = "2025-04-23T14:46:57.557Z" }, - { url = "https://files.pythonhosted.org/packages/5e/23/b73163ac06e5a724375df61a5b6c853861a825fe98e64388f277514153dd/torchaudio-2.7.0-cp312-cp312-win_amd64.whl", hash = "sha256:275931c8a38ff84b5692df990506b41f18d0a0706574d96bc8456ad9e5fa85c8", size = 2493451, upload-time = "2025-04-23T14:46:46.456Z" }, { url = "https://files.pythonhosted.org/packages/c1/a5/bc4bb6b254d3d77e9fa4d219f29d3bff8db92acc9004c27e875f32d4724a/torchaudio-2.7.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:150fbde41da60296effed772b7a170f563cd44967555abb0603fc573f39ce245", size = 1847033, upload-time = "2025-04-23T14:46:58.774Z" }, - { url = "https://files.pythonhosted.org/packages/96/af/4c8d4e781ea5924590cccf8595a09081eb07a577c03fbf4bf04a2f5f7134/torchaudio-2.7.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:9d921eeb036512a87efde007977b27bd326320cd7cd5f43195824173fe82e888", size = 1686308, upload-time = "2025-04-23T14:46:56.378Z" }, - { url = "https://files.pythonhosted.org/packages/12/02/ad1083f6ce534989c704c3efcd615bdd160934229882aa0a3ea95cd24a9a/torchaudio-2.7.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:30675a5f99551e036974a7476729eb5d31f453cf792ae6e0a0d449960f84f464", size = 3455266, upload-time = "2025-04-23T14:46:50.327Z" }, - { url = "https://files.pythonhosted.org/packages/88/49/923ebb2603156dd5c5ae6d845bf51a078e05f27432cd26f13ecdcc8713cd/torchaudio-2.7.0-cp313-cp313-win_amd64.whl", hash = "sha256:ce8cfc07a4e59c835404583e7d3e171208b332b61bb92643f8723f6f192da8bf", size = 2493639, upload-time = "2025-04-23T14:46:40.909Z" }, { url = "https://files.pythonhosted.org/packages/bf/85/dd4cd1202483e85c208e1ca3d31cc42c2972f1d955d11b742fa098a38a1b/torchaudio-2.7.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:9e08138cac75cde2064c8b5bbd12f27bdeb3d36f4b8c2285fc9c42eaa97c0676", size = 1929989, upload-time = "2025-04-23T14:46:54.144Z" }, - { url = "https://files.pythonhosted.org/packages/ef/3a/8a1045f2b00c6300827c1e6a3e661e9d219b5406ef103dc2824604548b8c/torchaudio-2.7.0-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:1d928aeff495a0807b4da3b0dd46e15eae8070da5e7ed6d35c1dcfd9fdfe2b74", size = 1700439, upload-time = "2025-04-23T14:46:55.249Z" }, - { url = "https://files.pythonhosted.org/packages/72/53/21d589a5a41702b5d37bae224286986cb707500d5ecdbfdcfdbac9381a08/torchaudio-2.7.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:ee4add33f24e9cb959bd9de89f36de5ebf844eda040d1d0b38f08617d67dedc3", size = 3466356, upload-time = "2025-04-23T14:46:49.131Z" }, - { url = "https://files.pythonhosted.org/packages/00/0b/5ef81aaacce5e9c316659ddc61a2b1e4f984a504d4a06fe61bab04cc75f1/torchaudio-2.7.0-cp313-cp313t-win_amd64.whl", hash = "sha256:725dbbcc9e744ca62de8856262c6f472ca26b1cd5db062b062a2d6b66a336cc0", size = 2544970, upload-time = "2025-04-23T14:46:44.837Z" }, +] + +[[package]] +name = "torchaudio" +version = "2.7.0+cu128" +source = { registry = "https://download.pytorch.org/whl/cu128" } +resolution-markers = [ + "sys_platform == 'win32'", + "(python_full_version >= '3.14' and sys_platform == 'linux') or (platform_machine != 'aarch64' and sys_platform == 'linux') or (platform_python_implementation != 'CPython' and sys_platform == 'linux')", +] +dependencies = [ + { name = "torch", version = "2.7.0+cu128", source = { registry = "https://download.pytorch.org/whl/cu128" }, marker = "(python_full_version >= '3.14' and sys_platform == 'linux') or (platform_machine != 'aarch64' and sys_platform == 'linux') or (platform_python_implementation != 'CPython' and sys_platform == 'linux') or sys_platform == 'win32'" }, +] +wheels = [ + { url = "https://download-r2.pytorch.org/whl/cu128/torchaudio-2.7.0%2Bcu128-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:1bf478e24e94aa49b682e6b6ab481998cb542d06f77daa9aafc92cedd6a21127", upload-time = "2025-04-22T18:30:29Z" }, + { url = "https://download-r2.pytorch.org/whl/cu128/torchaudio-2.7.0%2Bcu128-cp312-cp312-win_amd64.whl", hash = "sha256:fc2627c5e9a362300692f34f7d587088b2bd19e8e6158640b8266532f53051b9", upload-time = "2025-04-22T18:30:29Z" }, + { url = "https://download-r2.pytorch.org/whl/cu128/torchaudio-2.7.0%2Bcu128-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:4e07c40cc145e864ba2399fdfb6eedefc682f64624f2b8d8bf56703c3101005c", upload-time = "2025-04-22T18:30:29Z" }, + { url = "https://download-r2.pytorch.org/whl/cu128/torchaudio-2.7.0%2Bcu128-cp313-cp313-win_amd64.whl", hash = "sha256:03d141a4701aff80c835b7ffce3a189e741acaa098b694f28c30bf5856cf5734", upload-time = "2025-04-22T18:30:29Z" }, + { url = "https://download-r2.pytorch.org/whl/cu128/torchaudio-2.7.0%2Bcu128-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:a624d626c9535b2f950a763c4d3032613f751a6c6e02a653d983a551d5f82261", upload-time = "2025-04-22T18:30:29Z" }, + { url = "https://download-r2.pytorch.org/whl/cu128/torchaudio-2.7.0%2Bcu128-cp313-cp313t-win_amd64.whl", hash = "sha256:315eca8babdaa7b87ccc9b5488d7e9abf7b0fc02255dd14d40c05bc76fdc263c", upload-time = "2025-04-22T18:30:29Z" }, +] + +[[package]] +name = "torchvision" +version = "0.22.0" +source = { registry = "https://download.pytorch.org/whl/cu128" } +resolution-markers = [ + "python_full_version < '3.14' and platform_machine == 'aarch64' and platform_python_implementation == 'CPython' and sys_platform == 'linux'", +] +dependencies = [ + { name = "numpy", marker = "python_full_version < '3.14' and platform_machine == 'aarch64' and platform_python_implementation == 'CPython' and sys_platform == 'linux'" }, + { name = "pillow", marker = "python_full_version < '3.14' and platform_machine == 'aarch64' and platform_python_implementation == 'CPython' and sys_platform == 'linux'" }, + { name = "torch", version = "2.7.0+cu128", source = { registry = "https://download.pytorch.org/whl/cu128" }, marker = "python_full_version < '3.14' and platform_machine == 'aarch64' and platform_python_implementation == 'CPython' and sys_platform == 'linux'" }, +] +wheels = [ + { url = "https://download-r2.pytorch.org/whl/cu128/torchvision-0.22.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:6e9752b48c1cdd7f6428bcd30c3d198b30ecea348d16afb651f95035e5252506", upload-time = "2025-04-22T18:30:21Z" }, + { url = "https://download-r2.pytorch.org/whl/cu128/torchvision-0.22.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:e4d4d5a14225875d9bf8c5221d43d8be97786adc498659493799bdeff52c54cf", upload-time = "2025-04-22T18:30:21Z" }, + { url = "https://download-r2.pytorch.org/whl/cu128/torchvision-0.22.0-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:e50ff5bbae11f57fd3af8e6f2185c136f32e8b94324613428228dd27eba6a4f6", upload-time = "2025-04-22T18:30:21Z" }, ] [[package]] name = "torchvision" version = "0.22.0" source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "sys_platform != 'linux' and sys_platform != 'win32'", +] dependencies = [ - { name = "numpy" }, - { name = "pillow" }, - { name = "torch" }, + { name = "numpy", marker = "sys_platform != 'linux' and sys_platform != 'win32'" }, + { name = "pillow", marker = "sys_platform != 'linux' and sys_platform != 'win32'" }, + { name = "torch", version = "2.7.0", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform != 'linux' and sys_platform != 'win32'" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/cb/ea/887d1d61cf4431a46280972de665f350af1898ce5006cd046326e5d0a2f2/torchvision-0.22.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:31c3165418fe21c3d81fe3459e51077c2f948801b8933ed18169f54652796a0f", size = 1947826, upload-time = "2025-04-23T14:41:59.188Z" }, - { url = "https://files.pythonhosted.org/packages/72/ef/21f8b6122e13ae045b8e49658029c695fd774cd21083b3fa5c3f9c5d3e35/torchvision-0.22.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:8f116bc82e0c076e70ba7776e611ed392b9666aa443662e687808b08993d26af", size = 2514571, upload-time = "2025-04-23T14:41:53.458Z" }, - { url = "https://files.pythonhosted.org/packages/7c/48/5f7617f6c60d135f86277c53f9d5682dfa4e66f4697f505f1530e8b69fb1/torchvision-0.22.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:ce4dc334ebd508de2c534817c9388e928bc2500cf981906ae8d6e2ca3bf4727a", size = 7446522, upload-time = "2025-04-23T14:41:34.9Z" }, - { url = "https://files.pythonhosted.org/packages/99/94/a015e93955f5d3a68689cc7c385a3cfcd2d62b84655d18b61f32fb04eb67/torchvision-0.22.0-cp312-cp312-win_amd64.whl", hash = "sha256:24b8c9255c209ca419cc7174906da2791c8b557b75c23496663ec7d73b55bebf", size = 1716664, upload-time = "2025-04-23T14:41:58.019Z" }, { url = "https://files.pythonhosted.org/packages/e1/2a/9b34685599dcb341d12fc2730055155623db7a619d2415a8d31f17050952/torchvision-0.22.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:ece17995857dd328485c9c027c0b20ffc52db232e30c84ff6c95ab77201112c5", size = 1947823, upload-time = "2025-04-23T14:41:39.956Z" }, - { url = "https://files.pythonhosted.org/packages/77/77/88f64879483d66daf84f1d1c4d5c31ebb08e640411139042a258d5f7dbfe/torchvision-0.22.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:471c6dd75bb984c6ebe4f60322894a290bf3d4b195e769d80754f3689cd7f238", size = 2471592, upload-time = "2025-04-23T14:41:54.991Z" }, - { url = "https://files.pythonhosted.org/packages/f7/82/2f813eaae7c1fae1f9d9e7829578f5a91f39ef48d6c1c588a8900533dd3d/torchvision-0.22.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:2b839ac0610a38f56bef115ee5b9eaca5f9c2da3c3569a68cc62dbcc179c157f", size = 7446333, upload-time = "2025-04-23T14:41:36.603Z" }, - { url = "https://files.pythonhosted.org/packages/58/19/ca7a4f8907a56351dfe6ae0a708f4e6b3569b5c61d282e3e7f61cf42a4ce/torchvision-0.22.0-cp313-cp313-win_amd64.whl", hash = "sha256:4ada1c08b2f761443cd65b7c7b4aec9e2fc28f75b0d4e1b1ebc9d3953ebccc4d", size = 1716693, upload-time = "2025-04-23T14:41:41.031Z" }, { url = "https://files.pythonhosted.org/packages/6f/a7/f43e9c8d13118b4ffbaebea664c9338ab20fa115a908125afd2238ff16e7/torchvision-0.22.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:cdc96daa4658b47ce9384154c86ed1e70cba9d972a19f5de6e33f8f94a626790", size = 2137621, upload-time = "2025-04-23T14:41:51.427Z" }, - { url = "https://files.pythonhosted.org/packages/6a/9a/2b59f5758ba7e3f23bc84e16947493bbce97392ec6d18efba7bdf0a3b10e/torchvision-0.22.0-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:753d3c84eeadd5979a33b3b73a25ecd0aa4af44d6b45ed2c70d44f5e0ac68312", size = 2476555, upload-time = "2025-04-23T14:41:38.357Z" }, - { url = "https://files.pythonhosted.org/packages/7d/40/a7bc2ab9b1e56d10a7fd9ae83191bb425fa308caa23d148f1c568006e02c/torchvision-0.22.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:b30e3ed29e4a61f7499bca50f57d8ebd23dfc52b14608efa17a534a55ee59a03", size = 7617924, upload-time = "2025-04-23T14:41:42.709Z" }, - { url = "https://files.pythonhosted.org/packages/c1/7b/30d423bdb2546250d719d7821aaf9058cc093d165565b245b159c788a9dd/torchvision-0.22.0-cp313-cp313t-win_amd64.whl", hash = "sha256:e5d680162694fac4c8a374954e261ddfb4eb0ce103287b0f693e4e9c579ef957", size = 1638621, upload-time = "2025-04-23T14:41:46.06Z" }, +] + +[[package]] +name = "torchvision" +version = "0.22.0+cu128" +source = { registry = "https://download.pytorch.org/whl/cu128" } +resolution-markers = [ + "sys_platform == 'win32'", + "(python_full_version >= '3.14' and sys_platform == 'linux') or (platform_machine != 'aarch64' and sys_platform == 'linux') or (platform_python_implementation != 'CPython' and sys_platform == 'linux')", +] +dependencies = [ + { name = "numpy", marker = "(python_full_version >= '3.14' and sys_platform == 'linux') or (platform_machine != 'aarch64' and sys_platform == 'linux') or (platform_python_implementation != 'CPython' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "pillow", marker = "(python_full_version >= '3.14' and sys_platform == 'linux') or (platform_machine != 'aarch64' and sys_platform == 'linux') or (platform_python_implementation != 'CPython' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "torch", version = "2.7.0+cu128", source = { registry = "https://download.pytorch.org/whl/cu128" }, marker = "(python_full_version >= '3.14' and sys_platform == 'linux') or (platform_machine != 'aarch64' and sys_platform == 'linux') or (platform_python_implementation != 'CPython' and sys_platform == 'linux') or sys_platform == 'win32'" }, +] +wheels = [ + { url = "https://download-r2.pytorch.org/whl/cu128/torchvision-0.22.0%2Bcu128-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:06c101f40e1ff94869be14487c91fd5352e376f202fdeafb8f53c58cee2fbeb5", upload-time = "2025-04-22T18:30:20Z" }, + { url = "https://download-r2.pytorch.org/whl/cu128/torchvision-0.22.0%2Bcu128-cp312-cp312-win_amd64.whl", hash = "sha256:a87393c86649b7e56b4bf859fe95922ee6ec1c1f3b430246fb1a5b51f8aee37a", upload-time = "2025-04-22T18:30:20Z" }, + { url = "https://download-r2.pytorch.org/whl/cu128/torchvision-0.22.0%2Bcu128-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:ee4fa6d4052d9ae25c1233289947fbfa4b88d23710254ab1772b108c1fc5fb4d", upload-time = "2025-04-22T18:30:21Z" }, + { url = "https://download-r2.pytorch.org/whl/cu128/torchvision-0.22.0%2Bcu128-cp313-cp313-win_amd64.whl", hash = "sha256:17d50ffb1df6320da16b85395f1078bf369250ea144f3bb405088aca3d5f030f", upload-time = "2025-04-22T18:30:20Z" }, + { url = "https://download-r2.pytorch.org/whl/cu128/torchvision-0.22.0%2Bcu128-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:209c29d78cf2003cf4e22c9b651790f57171334998ee3125594d130526aeaa50", upload-time = "2025-04-22T18:30:21Z" }, + { url = "https://download-r2.pytorch.org/whl/cu128/torchvision-0.22.0%2Bcu128-cp313-cp313t-win_amd64.whl", hash = "sha256:03b454b867f7a0aa9861a463042141448c4f15bec784def19eed39a57fac217b", upload-time = "2025-04-22T18:30:20Z" }, ] [[package]] @@ -4129,7 +4259,7 @@ name = "triton" version = "3.3.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "setuptools" }, + { name = "setuptools", marker = "sys_platform == 'linux'" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/11/53/ce18470914ab6cfbec9384ee565d23c4d1c55f0548160b1c7b33000b11fd/triton-3.3.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b68c778f6c4218403a6bd01be7484f6dc9e20fe2083d22dd8aef33e3b87a10a3", size = 156504509, upload-time = "2025-04-09T20:27:40.413Z" }, @@ -4261,8 +4391,11 @@ dependencies = [ { name = "pyyaml" }, { name = "requests" }, { name = "scipy" }, - { name = "torch" }, - { name = "torchvision" }, + { name = "torch", version = "2.7.0", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform != 'linux' and sys_platform != 'win32'" }, + { name = "torch", version = "2.7.0+cu128", source = { registry = "https://download.pytorch.org/whl/cu128" }, marker = "sys_platform == 'linux' or sys_platform == 'win32'" }, + { name = "torchvision", version = "0.22.0", source = { registry = "https://download.pytorch.org/whl/cu128" }, marker = "python_full_version < '3.14' and platform_machine == 'aarch64' and platform_python_implementation == 'CPython' and sys_platform == 'linux'" }, + { name = "torchvision", version = "0.22.0", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform != 'linux' and sys_platform != 'win32'" }, + { name = "torchvision", version = "0.22.0+cu128", source = { registry = "https://download.pytorch.org/whl/cu128" }, marker = "(python_full_version >= '3.14' and sys_platform == 'linux') or (platform_machine != 'aarch64' and sys_platform == 'linux') or (platform_python_implementation != 'CPython' and sys_platform == 'linux') or sys_platform == 'win32'" }, { name = "ultralytics-thop" }, ] sdist = { url = "https://files.pythonhosted.org/packages/14/11/f8c8173388a91b3eef25028728985445fcb593bbc3db8b288af7e0fdc67d/ultralytics-8.4.60.tar.gz", hash = "sha256:cb38abbfc29a7b3c5d51c6e457fe37c20586cbc00f69639d5de700cda8003bce", size = 1071779, upload-time = "2026-06-01T16:03:08.63Z" } @@ -4276,7 +4409,8 @@ version = "2.0.19" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "numpy" }, - { name = "torch" }, + { name = "torch", version = "2.7.0", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform != 'linux' and sys_platform != 'win32'" }, + { name = "torch", version = "2.7.0+cu128", source = { registry = "https://download.pytorch.org/whl/cu128" }, marker = "sys_platform == 'linux' or sys_platform == 'win32'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/09/ab/1cc7edfd5241ed9abb2e8ee0d5088d2800c989df9baa43e05706a87f765b/ultralytics_thop-2.0.19.tar.gz", hash = "sha256:df547d93ebdec4c9d2a9375f2e21d483547a462c08814e8810dc73498dd29ba9", size = 34665, upload-time = "2026-04-24T12:21:23.844Z" } wheels = [