From 1319dc8358616e1a1a3ee24718323d2253717866 Mon Sep 17 00:00:00 2001 From: aviv ron Date: Sun, 14 Jun 2026 14:14:51 +0300 Subject: [PATCH 01/23] spike Signed-off-by: aviv ron --- pyproject.toml | 4 + src/granite_switch/config.py | 27 +++ src/granite_switch/vllm/audio/__init__.py | 22 +++ src/granite_switch/vllm/audio/asr.py | 218 ++++++++++++++++++++++ 4 files changed, 271 insertions(+) create mode 100644 src/granite_switch/vllm/audio/__init__.py create mode 100644 src/granite_switch/vllm/audio/asr.py diff --git a/pyproject.toml b/pyproject.toml index ed55282..b0cd382 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -24,6 +24,10 @@ vllm = ["vllm>=0.19.1,<0.20.0"] vllm20 = ["vllm>=0.20.0,<0.21.0"] compose = ["huggingface_hub", "pyyaml", "tqdm", "safetensors"] build = ["huggingface_hub", "pyyaml", "tqdm", "safetensors"] # Backward compatibility alias for compose +# Audio (ASR) preprocessing — speech-to-text cascade in the vLLM backend. +# transformers ships the ASR model itself (already a core dep); these add +# audio decoding/resampling. +audio = ["librosa", "soundfile"] tutorials = [ "granite-switch[hf,vllm,compose]", "chromadb>=0.4.0", diff --git a/src/granite_switch/config.py b/src/granite_switch/config.py index 7824002..ae5acf4 100644 --- a/src/granite_switch/config.py +++ b/src/granite_switch/config.py @@ -38,6 +38,20 @@ class GraniteSwitchConfig(GraniteMoeHybridConfig): lora_target_modules (List[str]): List of module GROUP names to apply LoRA to. Module groups: "qkv_proj", "o_proj", "shared_input_linear", "shared_output_linear". Default: all four groups + + Audio (ASR) preprocessing parameters: + asr_enabled (bool): When True, the vLLM backend registers an audio + multimodal preprocessor that transcribes audio inputs to text and + splices the transcript tokens into the prompt before the decoder + runs. The decoder itself is unchanged and only ever sees text + tokens. Default: False. + asr_model_id (Optional[str]): HuggingFace id of the speech-to-text + model the preprocessor loads. When None and asr_enabled is True, + the backend falls back to a small built-in default. This makes the + checkpoint self-describing about which ASR front-end it expects. + asr_device (str): Device the ASR model runs on. Default "cpu" keeps + vLLM's GPU KV-cache budget clean; set to a CUDA device to trade GPU + memory for transcription latency. **kwargs: Additional arguments passed to GraniteConfig. """ @@ -56,6 +70,10 @@ def __init__( max_lora_rank: int = 8, adapter_ranks: List[int] = None, lora_target_modules: Optional[List[str]] = None, + # Audio (ASR) preprocessing parameters + asr_enabled: bool = False, + asr_model_id: Optional[str] = None, + asr_device: str = "cpu", # vLLM residual-norm convention (for bit-exact skinning equivalence) fused_add_norm: bool = False, # Parent class defaults (Granite 4 dense configuration) @@ -136,6 +154,15 @@ def __init__( self.switch_head_dim = switch_head_dim self.fused_add_norm = fused_add_norm + # Audio (ASR) preprocessing parameters. + # The decoder is oblivious to audio: when enabled, the vLLM backend's + # multimodal preprocessor transcribes audio to text and injects the + # transcript tokens into the prompt before embedding. These fields make + # the checkpoint self-describing about its ASR front-end. + self.asr_enabled = asr_enabled + self.asr_model_id = asr_model_id + self.asr_device = asr_device + # Adapter names self.adapter_names = adapter_names diff --git a/src/granite_switch/vllm/audio/__init__.py b/src/granite_switch/vllm/audio/__init__.py new file mode 100644 index 0000000..289af59 --- /dev/null +++ b/src/granite_switch/vllm/audio/__init__.py @@ -0,0 +1,22 @@ +# SPDX-License-Identifier: Apache-2.0 +"""Audio (ASR) preprocessing for the Granite Switch vLLM backend. + +This package implements the **alpha** audio pathway: a speech-to-text *cascade*. +Audio is transcribed to text by a small ASR model and the transcript tokens are +spliced into the prompt before the decoder runs. The Granite Switch decoder is +unchanged and only ever sees text tokens — there is no in-model audio encoder yet +(that is deferred future work: a trained projection from Granite Speech encoder +embeddings into Granite token space). + +The ASR backend (:mod:`asr`) deliberately has no vLLM dependency so it can be +unit-tested on CPU and reused by either the multimodal-processor integration or a +fallback entrypoint wrapper. +""" + +from .asr import ASRTranscriber, DEFAULT_ASR_MODEL_ID, transcribe + +__all__ = [ + "ASRTranscriber", + "DEFAULT_ASR_MODEL_ID", + "transcribe", +] diff --git a/src/granite_switch/vllm/audio/asr.py b/src/granite_switch/vllm/audio/asr.py new file mode 100644 index 0000000..c9abc02 --- /dev/null +++ b/src/granite_switch/vllm/audio/asr.py @@ -0,0 +1,218 @@ +# SPDX-License-Identifier: Apache-2.0 +"""Speech-to-text backend for the alpha audio cascade. + +A thin wrapper around a HuggingFace ASR model that turns raw audio into a +transcript string. Kept free of any vLLM import so it can be unit-tested on CPU +and reused by both the multimodal-processor integration and a fallback wrapper. + +Design notes: + * The model is loaded **lazily** on first use and cached per (model_id, + device) so engine startup stays cheap and a process loads each ASR model + at most once. + * Default device is CPU — this keeps vLLM's GPU KV-cache budget clean. Set a + CUDA device to trade GPU memory for transcription latency. + * The default model is a small, text-emitting open-source ASR model. The + alpha intentionally uses a complete audio->text model (encoder+decoder); + swapping in the Granite Speech 4.1 encoder is future work and only touches + this module. + * ``transcribe`` accepts the audio item shapes vLLM hands to multimodal + processors: a bare array, an ``(array, sampling_rate)`` tuple, a Python + list of floats, or a torch tensor. +""" + +from __future__ import annotations + +import threading +from typing import Dict, Optional, Tuple, Union + +import numpy as np + +# Small, CPU-friendly, English ASR model that emits text directly. Used when the +# checkpoint does not name its own (config.asr_model_id is None). +DEFAULT_ASR_MODEL_ID = "distil-whisper/distil-small.en" + +# Sample rate expected by Whisper-family feature extractors. +_TARGET_SAMPLE_RATE = 16_000 + +# Audio item shapes vLLM may pass to a multimodal processor. +AudioInput = Union[ + np.ndarray, + "list[float]", + Tuple[np.ndarray, Union[int, float]], + "object", # torch.Tensor — typed loosely to avoid importing torch here +] + + +class ASRTranscriber: + """Lazily-loaded ASR model wrapper exposing :meth:`transcribe`. + + Instances are cheap to construct; the underlying model is only materialized + on the first :meth:`transcribe` call (or an explicit :meth:`load`). + """ + + def __init__( + self, + model_id: str = DEFAULT_ASR_MODEL_ID, + device: str = "cpu", + ) -> None: + self.model_id = model_id + self.device = device + self._pipeline = None + self._load_lock = threading.Lock() + + def load(self) -> None: + """Materialize the ASR pipeline if it has not been loaded yet.""" + if self._pipeline is not None: + return + with self._load_lock: + if self._pipeline is not None: + return + # Imported lazily so this module stays importable without + # transformers' heavy audio stack until it is actually used. + import torch + from transformers import pipeline + + torch_dtype = ( + torch.float16 + if isinstance(self.device, str) and self.device.startswith("cuda") + else torch.float32 + ) + self._pipeline = pipeline( + task="automatic-speech-recognition", + model=self.model_id, + device=self.device, + torch_dtype=torch_dtype, + # Enable internal 30s chunking so audio longer than the model's + # native window is handled without us re-implementing it. + chunk_length_s=30, + ) + + def transcribe( + self, + audio: AudioInput, + sampling_rate: Optional[int] = None, + ) -> str: + """Transcribe one audio clip to a text string. + + Args: + audio: The audio samples. Accepts a numpy array, a list of floats, a + torch tensor, or an ``(array, sampling_rate)`` tuple (vLLM's + ``AudioItem`` shape). + sampling_rate: Sample rate of ``audio`` in Hz. Required unless + ``audio`` is an ``(array, sampling_rate)`` tuple. Audio is + resampled to 16 kHz when needed. + + Returns: + The transcript with surrounding whitespace stripped. + """ + samples, sr = _coerce_audio(audio, sampling_rate) + samples = _to_mono_float32(samples) + samples = _resample(samples, sr, _TARGET_SAMPLE_RATE) + + self.load() + # Pass the already-resampled mono waveform; tell the pipeline its rate so + # it does not attempt its own resampling. + result = self._pipeline( + {"raw": samples, "sampling_rate": _TARGET_SAMPLE_RATE} + ) + text = result["text"] if isinstance(result, dict) else str(result) + return text.strip() + + +# ── Module-level cache + convenience function ──────────────────────────────── + +_TRANSCRIBERS: Dict[Tuple[str, str], ASRTranscriber] = {} +_CACHE_LOCK = threading.Lock() + + +def get_transcriber( + model_id: Optional[str] = None, + device: str = "cpu", +) -> ASRTranscriber: + """Return a process-wide cached :class:`ASRTranscriber` for (model_id, device). + + ``model_id`` of None resolves to :data:`DEFAULT_ASR_MODEL_ID`. + """ + resolved = model_id or DEFAULT_ASR_MODEL_ID + key = (resolved, device) + transcriber = _TRANSCRIBERS.get(key) + if transcriber is None: + with _CACHE_LOCK: + transcriber = _TRANSCRIBERS.get(key) + if transcriber is None: + transcriber = ASRTranscriber(model_id=resolved, device=device) + _TRANSCRIBERS[key] = transcriber + return transcriber + + +def transcribe( + audio: AudioInput, + sampling_rate: Optional[int] = None, + *, + model_id: Optional[str] = None, + device: str = "cpu", +) -> str: + """Convenience wrapper: transcribe with the cached transcriber for the args.""" + return get_transcriber(model_id=model_id, device=device).transcribe( + audio, sampling_rate + ) + + +# ── Audio coercion helpers ─────────────────────────────────────────────────── + + +def _coerce_audio( + audio: AudioInput, + sampling_rate: Optional[int], +) -> Tuple[np.ndarray, int]: + """Normalize the various accepted audio shapes to ``(np.ndarray, sr)``.""" + # (array, sampling_rate) tuple — vLLM's AudioItem form. + if isinstance(audio, tuple): + if len(audio) != 2: + raise ValueError( + f"Tuple audio input must be (array, sampling_rate); got " + f"length {len(audio)}." + ) + array, sr = audio + return _as_numpy(array), int(sr) + + if sampling_rate is None: + raise ValueError( + "sampling_rate is required when audio is not an " + "(array, sampling_rate) tuple." + ) + return _as_numpy(audio), int(sampling_rate) + + +def _as_numpy(array: object) -> np.ndarray: + """Convert a numpy array, list, or torch tensor to a numpy array.""" + if isinstance(array, np.ndarray): + return array + # torch.Tensor without importing torch at module load. + if hasattr(array, "detach") and hasattr(array, "cpu"): + return array.detach().cpu().numpy() + return np.asarray(array) + + +def _to_mono_float32(samples: np.ndarray) -> np.ndarray: + """Downmix to mono and cast to float32.""" + if samples.ndim > 1: + # Average across channels. Assume the smaller axis is channels. + channel_axis = int(np.argmin(samples.shape)) + samples = samples.mean(axis=channel_axis) + return samples.astype(np.float32, copy=False) + + +def _resample(samples: np.ndarray, orig_sr: int, target_sr: int) -> np.ndarray: + """Resample to ``target_sr`` Hz. No-op when already at the target rate.""" + if orig_sr == target_sr: + return samples + try: + import librosa + except ImportError as exc: # pragma: no cover - exercised only without librosa + raise RuntimeError( + f"Audio sampled at {orig_sr} Hz must be resampled to {target_sr} Hz, " + "but librosa is not installed. Install the audio extra: " + "`uv sync --extra audio` (or `pip install librosa`)." + ) from exc + return librosa.resample(samples, orig_sr=orig_sr, target_sr=target_sr) From 37f2a4acdba928d75e4d2b7641d5c747968811d1 Mon Sep 17 00:00:00 2001 From: aviv ron Date: Sun, 14 Jun 2026 22:13:40 +0300 Subject: [PATCH 02/23] Add audio multimodal processor (alpha cascade, base model) Register an ASR multimodal processor on GraniteSwitchForCausalLM: audio is transcribed and a <|audio|> marker is replaced with the transcript tokens (PromptReplacement), so the scheduler sizes KV for the real length. The model's embed_multimodal supplies those positions' embeddings via the token table (the seam a future trained audio encoder will reuse), and embed_input_ids scatters them. Audio capability is gated per-checkpoint by config.asr_enabled. Alpha scope: audio runs on the base model (no adapter control-token handling). Signed-off-by: aviv ron --- src/granite_switch/vllm/audio/processor.py | 210 ++++++++++++++++++ .../vllm/granite_switch_model.py | 89 +++++++- 2 files changed, 291 insertions(+), 8 deletions(-) create mode 100644 src/granite_switch/vllm/audio/processor.py diff --git a/src/granite_switch/vllm/audio/processor.py b/src/granite_switch/vllm/audio/processor.py new file mode 100644 index 0000000..2dcdae4 --- /dev/null +++ b/src/granite_switch/vllm/audio/processor.py @@ -0,0 +1,210 @@ +# SPDX-License-Identifier: Apache-2.0 +"""vLLM multimodal processor for the alpha audio cascade (Path A). + +Strategy (see also the design notes in :mod:`granite_switch.vllm.audio`): + +* Audio is declared as a multimodal input, so the standard vLLM server accepts + it and developers keep loading a single model. +* In :meth:`_call_hf_processor` we run ASR and tokenize the transcript. +* :meth:`_get_prompt_updates` replaces the single ``<|audio|>`` marker with the + **actual transcript token ids** via ``PromptReplacement``. After this the + transcript tokens are ordinary tokens in ``prompt_token_ids``; the scheduler + sizes KV for the real, runtime-determined length (no fixed audio window). +* The model's ``embed_multimodal`` then returns ``embed_tokens(transcript_ids)`` + for those placeholder positions — identical to what they'd get as normal text. + That redundant-but-consistent step is the exact seam the future projection + model reuses (swap the embedding source for a trained audio encoder). + +Modeled on vLLM 0.19.1's ``ultravox.py`` (the reference audio model), confirmed +against that version's API by the scratch probes. + +ALPHA SCOPE: audio is answered by the base model. We do not place adapter +control tokens for audio requests, so no token-exchange interaction with the +switch is needed here. +""" + +from __future__ import annotations + +from collections.abc import Mapping, Sequence +from typing import Optional + +import torch +from transformers import BatchFeature + +from vllm.multimodal.inputs import ( + MultiModalDataDict, + MultiModalFieldConfig, + MultiModalKwargsItems, +) +from vllm.multimodal.parse import MultiModalDataItems, MultiModalDataParser +from vllm.multimodal.processing import ( + BaseMultiModalProcessor, + BaseProcessingInfo, + BaseDummyInputsBuilder, + PromptReplacement, + PromptUpdate, +) + +from .asr import DEFAULT_ASR_MODEL_ID, get_transcriber + +# The chat-template marker that stands in for an audio clip before replacement. +AUDIO_MARKER = "<|audio|>" + +# ASR feature-extractor sample rate the audio is resampled to. +_TARGET_SR = 16_000 + +# Upper bound on transcript tokens per audio item, used for startup memory +# profiling (get_mm_max_tokens_per_item). Generous enough for a long clip; the +# real transcript is usually far shorter. ~ a few minutes of dense speech. +_MAX_TRANSCRIPT_TOKENS = 2048 + +# Dummy clip length (seconds) used during vLLM's profiling run. +_DUMMY_AUDIO_SECONDS = 5 + + +class GraniteSwitchASRProcessingInfo(BaseProcessingInfo): + """Static info vLLM needs about the audio modality.""" + + def _asr_enabled(self) -> bool: + return bool(getattr(self.get_hf_config(), "asr_enabled", False)) + + def get_supported_mm_limits(self) -> Mapping[str, Optional[int]]: + # Audio capability is gated per-checkpoint: a non-audio GraniteSwitch + # reports no modalities, so vLLM never profiles audio or loads ASR. + if not self._asr_enabled(): + return {} + # One audio clip per request for the alpha. + return {"audio": 1} + + def get_mm_max_tokens_per_item( + self, + seq_len: int, + mm_counts: Mapping[str, int], + ) -> Optional[Mapping[str, int]]: + if not self._asr_enabled(): + return {} + # Bound the transcript length so vLLM can size the KV cache at startup + # instead of running dummy audio through ASR at max size. + return {"audio": _MAX_TRANSCRIPT_TOKENS} + + def get_data_parser(self) -> MultiModalDataParser: + # Resample incoming audio to the ASR sample rate. + return MultiModalDataParser(target_sr=_TARGET_SR) + + # --- ASR config resolved from the model's GraniteSwitchConfig --- + + def _asr_model_id(self) -> str: + cfg = self.get_hf_config() + return getattr(cfg, "asr_model_id", None) or DEFAULT_ASR_MODEL_ID + + def _asr_device(self) -> str: + cfg = self.get_hf_config() + return getattr(cfg, "asr_device", "cpu") or "cpu" + + +class GraniteSwitchASRDummyInputsBuilder( + BaseDummyInputsBuilder[GraniteSwitchASRProcessingInfo] +): + """Synthetic inputs for vLLM's startup memory-profiling pass.""" + + def get_dummy_text(self, mm_counts: Mapping[str, int]) -> str: + return AUDIO_MARKER * mm_counts.get("audio", 0) + + def get_dummy_mm_data( + self, + seq_len: int, + mm_counts: Mapping[str, int], + mm_options: Optional[Mapping[str, object]] = None, + ) -> MultiModalDataDict: + num_audios = mm_counts.get("audio", 0) + length = _DUMMY_AUDIO_SECONDS * _TARGET_SR + audio = torch.zeros(length, dtype=torch.float32).numpy() + return {"audio": [audio] * num_audios} + + +class GraniteSwitchASRMultiModalProcessor( + BaseMultiModalProcessor[GraniteSwitchASRProcessingInfo] +): + """Runs ASR and splices the transcript tokens into the prompt.""" + + def _transcribe(self, audio) -> list[int]: + """Transcribe one audio item to a list of token ids.""" + transcriber = get_transcriber( + model_id=self.info._asr_model_id(), + device=self.info._asr_device(), + ) + # The data parser already resampled to _TARGET_SR. + text = transcriber.transcribe(audio, sampling_rate=_TARGET_SR) + tokenizer = self.info.get_tokenizer() + ids = tokenizer.encode(text, add_special_tokens=False) + # Guard the profiling bound. + return ids[:_MAX_TRANSCRIPT_TOKENS] + + def _call_hf_processor( + self, + prompt: str, + mm_data: Mapping[str, object], + mm_kwargs: Mapping[str, object], + tok_kwargs: Mapping[str, object], + ) -> BatchFeature: + tokenizer = self.info.get_tokenizer() + audios = mm_data.get("audios", []) or [] + + # Text-only request: just tokenize (mirrors Ultravox's text-only branch). + if not audios: + input_ids = tokenizer.encode(prompt, add_special_tokens=False) + return BatchFeature(dict(input_ids=[input_ids]), tensor_type="pt") + + # Transcribe each audio to token ids; concatenate flat with per-item sizes. + per_item_ids = [self._transcribe(a) for a in audios] + sizes = [len(ids) for ids in per_item_ids] + flat_ids = [tid for ids in per_item_ids for tid in ids] + + input_ids = tokenizer.encode(prompt, add_special_tokens=False) + + return BatchFeature( + dict( + input_ids=[input_ids], + audio_token_ids=torch.tensor(flat_ids, dtype=torch.long), + audio_num_tokens=torch.tensor(sizes, dtype=torch.long), + ), + tensor_type="pt", + ) + + def _get_mm_fields_config( + self, + hf_inputs: BatchFeature, + hf_processor_mm_kwargs: Mapping[str, object], + ) -> Mapping[str, MultiModalFieldConfig]: + num_tokens = hf_inputs.get("audio_num_tokens", torch.zeros(0)) + return dict( + # Flat transcript ids, split back per audio by audio_num_tokens. + audio_token_ids=MultiModalFieldConfig.flat_from_sizes("audio", num_tokens), + audio_num_tokens=MultiModalFieldConfig.batched("audio"), + ) + + def _get_prompt_updates( + self, + mm_items: MultiModalDataItems, + hf_processor_mm_kwargs: Mapping[str, object], + out_mm_kwargs: MultiModalKwargsItems, + ) -> Sequence[PromptUpdate]: + out = out_mm_kwargs.get_data() + num_tokens = out.get("audio_num_tokens", torch.zeros(0)) + starts = torch.cumsum(num_tokens, dim=0, dtype=torch.long) + starts = torch.cat([torch.tensor([0], dtype=torch.long), starts]) + all_ids = out.get("audio_token_ids", torch.zeros(0, dtype=torch.long)) + + def replacement(item_idx: int): + s = int(starts[item_idx]) + e = int(starts[item_idx + 1]) + # Replace <|audio|> with the real transcript token ids. + return [int(t) for t in all_ids[s:e]] + + return [ + PromptReplacement( + modality="audio", + target=AUDIO_MARKER, + replacement=replacement, + ) + ] diff --git a/src/granite_switch/vllm/granite_switch_model.py b/src/granite_switch/vllm/granite_switch_model.py index 3f90278..11ef22d 100644 --- a/src/granite_switch/vllm/granite_switch_model.py +++ b/src/granite_switch/vllm/granite_switch_model.py @@ -56,8 +56,16 @@ HasInnerState, IsHybrid, SupportsLoRA, + SupportsMultiModal, SupportsPP, ) +from vllm.multimodal import MULTIMODAL_REGISTRY +from .audio.processor import ( + AUDIO_MARKER, + GraniteSwitchASRDummyInputsBuilder, + GraniteSwitchASRMultiModalProcessor, + GraniteSwitchASRProcessingInfo, +) def _get_intermediate_tensor( @@ -287,16 +295,23 @@ def forward( # Step 1: Switch — determine adapter for each token and rewrite # control tokens via token-exchange. Only runs on first rank. if get_pp_group().is_first_rank: - if self.switch is not None: + if self.switch is not None and input_ids is not None: adapter_indices, modified_input_ids = self.switch( input_ids=input_ids, adapter_token_ids=self.adapter_token_ids, ) else: - # No switch — all tokens use base model (adapter_id = 0). - num_tokens = input_ids.shape[0] + # Either no switch, or the multimodal path where vLLM passes + # pre-merged inputs_embeds and input_ids is None. ALPHA: audio + # requests run on the base model (adapter_id = 0). + if input_ids is not None: + num_tokens = input_ids.shape[0] + device = input_ids.device + else: + num_tokens = inputs_embeds.shape[0] + device = inputs_embeds.device adapter_indices = torch.zeros( - num_tokens, dtype=torch.long, device=input_ids.device, + num_tokens, dtype=torch.long, device=device, ) modified_input_ids = input_ids @@ -379,15 +394,36 @@ def forward( return intermediate_tensors +@MULTIMODAL_REGISTRY.register_processor( + GraniteSwitchASRMultiModalProcessor, + info=GraniteSwitchASRProcessingInfo, + dummy_inputs=GraniteSwitchASRDummyInputsBuilder, +) class GraniteSwitchForCausalLM( - nn.Module, HasInnerState, SupportsLoRA, SupportsPP, IsHybrid, + nn.Module, HasInnerState, SupportsLoRA, SupportsMultiModal, SupportsPP, IsHybrid, ): """ Granite model with switch for causal language modeling. This wraps GraniteSwitchModel with an LM head for token prediction. + + Multimodal (audio): the registered ASR processor transcribes audio and + replaces an ``<|audio|>`` marker with the transcript tokens before the + decoder runs (see granite_switch.vllm.audio). ``embed_multimodal`` supplies + the embeddings for those positions — for the alpha, the transcript's own + text embeddings, which is the seam a future trained audio encoder reuses. + Audio capability is gated per-checkpoint by ``config.asr_enabled`` (the + processor reports no audio modality when disabled). """ + supports_multimodal = True + + @classmethod + def get_placeholder_str(cls, modality: str, i: int): + if modality.startswith("audio"): + return AUDIO_MARKER + return None + # LoRA specific attributes supported_lora_modules = [ "qkv_proj", @@ -450,9 +486,46 @@ def __init__( ) self.sampler = None # Will be set by vLLM - def embed_input_ids(self, input_ids: torch.Tensor) -> torch.Tensor: - """Apply token embeddings to input_ids.""" - return self.model.embed_input_ids(input_ids) + def embed_multimodal(self, **kwargs) -> list: + """Embeddings for the audio placeholder positions (one tensor per item). + + ALPHA: the transcript token ids produced by the ASR processor are + embedded with the model's own token table — identical to embedding them + as ordinary text. Returned UN-scaled; the Granite embedding_multiplier + is applied later in the forward, so these rows scale consistently with + normal tokens. A future trained audio encoder swaps in here. + """ + audio_token_ids = kwargs.get("audio_token_ids") + if audio_token_ids is None: + return [] + embeds = self.model.embed_tokens(audio_token_ids) + num_tokens = kwargs.get("audio_num_tokens") + if num_tokens is None: + return [embeds] + sizes = [int(n) for n in num_tokens] + return list(torch.split(embeds, sizes)) + + def embed_input_ids( + self, + input_ids: torch.Tensor, + multimodal_embeddings=None, + *, + is_multimodal: Optional[torch.Tensor] = None, + ) -> torch.Tensor: + """Embed token ids; scatter multimodal embeddings into their positions. + + Returns UN-scaled embeddings (the model forward applies the Granite + embedding_multiplier once over everything). ALPHA scope: audio requests + run on the base model, so no adapter control-token rewrite is needed. + """ + inputs_embeds = self.model.embed_tokens(input_ids) + if multimodal_embeddings is not None and is_multimodal is not None: + mm = multimodal_embeddings + if isinstance(mm, (list, tuple)): + mm = torch.cat(list(mm)) if len(mm) else None + if mm is not None: + inputs_embeds[is_multimodal] = mm.to(inputs_embeds.dtype) + return inputs_embeds def forward( self, From 0f5f3e640af54f9a77e81cad5da654da49d8df91 Mon Sep 17 00:00:00 2001 From: aviv ron Date: Sun, 14 Jun 2026 22:19:33 +0300 Subject: [PATCH 03/23] Fix mm import: MultiModalDataDict lives in vllm.multimodal.parse Signed-off-by: aviv ron --- src/granite_switch/vllm/audio/processor.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/granite_switch/vllm/audio/processor.py b/src/granite_switch/vllm/audio/processor.py index 2dcdae4..f8c41f2 100644 --- a/src/granite_switch/vllm/audio/processor.py +++ b/src/granite_switch/vllm/audio/processor.py @@ -32,11 +32,14 @@ from transformers import BatchFeature from vllm.multimodal.inputs import ( - MultiModalDataDict, MultiModalFieldConfig, MultiModalKwargsItems, ) -from vllm.multimodal.parse import MultiModalDataItems, MultiModalDataParser +from vllm.multimodal.parse import ( + MultiModalDataDict, + MultiModalDataItems, + MultiModalDataParser, +) from vllm.multimodal.processing import ( BaseMultiModalProcessor, BaseProcessingInfo, From f1f7585344ae203b1bef289d4be7b455cea30a2c Mon Sep 17 00:00:00 2001 From: aviv ron Date: Mon, 15 Jun 2026 14:49:39 +0300 Subject: [PATCH 04/23] Compose: add <|audio|> marker + asr config when audio enabled New --enable-audio / --asr-model / --asr-device flags. When audio is enabled the composer adds the <|audio|> marker token (before the embedding resize) and writes asr_enabled / asr_model_id / asr_device into the checkpoint config, so the vLLM backend's gated audio processor activates for that checkpoint. Signed-off-by: aviv ron --- .../composer/compose_granite_switch.py | 39 +++++++++++++++++++ .../composer/tokenizer_setup.py | 18 +++++++++ 2 files changed, 57 insertions(+) diff --git a/src/granite_switch/composer/compose_granite_switch.py b/src/granite_switch/composer/compose_granite_switch.py index a53ca68..c15ab7f 100755 --- a/src/granite_switch/composer/compose_granite_switch.py +++ b/src/granite_switch/composer/compose_granite_switch.py @@ -60,6 +60,7 @@ resolve_repo_path, ) from granite_switch.composer.tokenizer_setup import ( + add_audio_token, add_control_tokens, configure_chat_template, get_alora_first_invocation_token_id, @@ -570,6 +571,27 @@ def _compose_argparser(): default=False, help="Include debug fields (original_path) in adapter_index.json", ) + parser.add_argument( + "--enable-audio", + action="store_true", + default=False, + help="Enable the audio cascade: add the <|audio|> marker token and set " + "asr_enabled in the config so the vLLM backend transcribes audio.", + ) + parser.add_argument( + "--asr-model", + type=str, + default=None, + help="HF id of the speech-to-text model the audio preprocessor loads. " + "Implies --enable-audio. Defaults to a small built-in model when unset.", + ) + parser.add_argument( + "--asr-device", + type=str, + default="cpu", + help="Device the ASR model runs on (default: cpu). Use e.g. cuda:0 to " + "run transcription on GPU (watch vLLM's KV-cache memory budget).", + ) return parser @@ -773,6 +795,11 @@ def build(): adapter_token_ids, special_tokens = add_control_tokens(tokenizer, all_discovered) + # Audio cascade: add the <|audio|> marker token before the embedding resize. + # Enabled by --enable-audio or by naming an --asr-model. + audio_enabled = args.enable_audio or args.asr_model is not None + audio_token_id = add_audio_token(tokenizer) if audio_enabled else None + # Configure chat template with adapter mappings (Granite models only). # Non-Granite models preserve the upstream template verbatim because # the injection targets Granite-specific Jinja patterns. @@ -834,6 +861,18 @@ def build(): **optional_kwargs, ) + # Record audio-cascade settings in the config so the checkpoint is + # self-describing and the vLLM backend gates audio on asr_enabled. + if audio_enabled: + model.config.asr_enabled = True + model.config.asr_model_id = args.asr_model + model.config.asr_device = args.asr_device + print( + f" Audio cascade enabled " + f"(asr_model_id={args.asr_model or 'default'}, " + f"asr_device={args.asr_device}, audio_token_id={audio_token_id})" + ) + # Base model size (best effort) base_model_size_gb, _ = _get_directory_size(base_model_local_path) if base_model_size_gb is not None: diff --git a/src/granite_switch/composer/tokenizer_setup.py b/src/granite_switch/composer/tokenizer_setup.py index 5f0a118..8a71456 100644 --- a/src/granite_switch/composer/tokenizer_setup.py +++ b/src/granite_switch/composer/tokenizer_setup.py @@ -95,6 +95,24 @@ def add_control_tokens( return adapter_token_ids, special_tokens +def add_audio_token(tokenizer, marker: str = "<|audio|>") -> int: + """Add the audio placeholder marker token to the tokenizer. + + Used for the audio cascade: this single special token is placed in the + prompt and the vLLM ASR processor replaces it with the transcript tokens at + request time (see granite_switch.vllm.audio). Registering it as one special + token keeps the processor's prompt-replacement match clean. + + Must be called before the model's embedding resize so the new row is sized + in. Returns the marker's token id. + """ + print(f"\nAdding audio marker token: {marker}") + tokenizer.add_special_tokens({"additional_special_tokens": [marker]}) + token_id = tokenizer.convert_tokens_to_ids(marker) + print(f" {marker}: {token_id}") + return token_id + + def configure_chat_template( tokenizer, discovered_adapters: List[Tuple[Optional[str], str, str, Optional[str]]], From f62f060cf2ef96d72af0bd2f045c66b6e9949ead Mon Sep 17 00:00:00 2001 From: aviv ron Date: Mon, 15 Jun 2026 15:34:40 +0300 Subject: [PATCH 05/23] Add audio test fixture (test1.m4a + 16k mono wav) Signed-off-by: aviv ron --- tests/audio/test1.wav | Bin 0 -> 146852 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 tests/audio/test1.wav diff --git a/tests/audio/test1.wav b/tests/audio/test1.wav new file mode 100644 index 0000000000000000000000000000000000000000..3704e5cea6074fbbf70c328d78e254f97f6647df GIT binary patch literal 146852 zcmeFab-WeTzyCioyH3#Ec>w7KX;eZ&Qn2Vy46v}U6ERS1QN%(7R8T@X1nH2L?ry1b z_SEnBn&Eu(e(t^B`+Gco-#>nTTo!xp*|TTXto80%>vU_^rp@QgEaSEtdbYlM=;L!Ke?7zhuK&NU_W$wE^Z)1ekIVmc_;+vrr=$Nk zmjBb0;cx2xf4VBWPhF?$HGbbWjhK;Y^fvCI_uGx0Mh~MqPwHZHGCCUVjdn&`qqWh>xY1~7v@n_(O^ilHL!-V? z&!}V6GHMvrj4F(;l2OsfFv=Tc8Eq+}q*1~sW)wAw7=?_2Mt&n78b7y@(?~bcj1(hb z#EqyC!45Ek8GF9#JHG8_`I-Jz|B8RvzvN%^|MD;R=V|9?XK80>r)j7Ble825aoVw< z9rcg;M}l_PKkOe0+Cl%Ie;{c4eYJhp+Ft*EZrRs{ckaK|&p&(1{^g&)>4|!_#-Pz0 z4aRnyk)8-fe2S5u3TB{LXf|hpd7TYrs99>Z+3fY6IJ_xxhJWA%}?8{-(}sDzv~$*dpNQ?-m7T*)0Zb{ zK)cy34XpoHEggFJyZ!Tu>^uLzeug9Y&+pkI{qH`*`TXbif6h7kI2$Ja{`oiL{^LIO@OW`#&H3XQ=%X zrvInoY;63EtAEF5^j{SJPrCS<;{QoY|GXl8?LPIF-MgL^%DzzA3pRqexHX%1|NBpI zxOiQ%GFw_oUS_xdEH}b4*}qGETn?m0COt`7gmNPL**X`V|9cEJBb2N#nM3Sf+%7Kv zn{UO-IsUCl;->|YKwKyoh3|huOYjLHldTN|2R%7^mZ3h#o}uP){$H|DT0$~0l!%gn znvYeEo0{!^2N zI`v@C^I@($8Qgh3pr@+=+}*%-5vR(A3AKy(&Vp`4I}zrW-89z_^TLqisi;D{lPz0y zz3vna!}st=ed(Vp2RESJWPtgQC$9d3y2U4=rI3DQRhc|15j;5+S{22HG?D8XUh;q$ zoe!xtm23YVr|cGuRinusrN%3qg%(XX6OC1K(EM~=Xz|3Z%|2ewvzj*3FRrHs=X>FRwu|sC znhq(xSYW4R)31Ij&UHnDdrBK+uC)?DPsOj@Uz~en)fI!j^YO|P@V96;m6;}hTS&pt zYkVGJHH2b>8Hbn)u@HmC4Paq$XT)%z788sLSK?uD^2NZ$k!^E{?^k$T<*YCo(wBH# z5Epz?z*=hXbV-^x<4WgyD0SlC#|L_sf#{`xd(K0v`?)H!?5H@@UZW9-gqDS)L4R$eqZ3jJQ(;dkMll+ zD+b}q47ujd+>KB3Fn8QX8^#?2@nJd#uiJP=H`=XuHvRB)y5PmM#G7e}{}TEz4H$26 z#$5?oahd0(Ko%YYK1YDV0snV@i@(QT4IG#I^ZkXi`9O0TkX`IA;rvX09=KTUuk&a7 zlliuQE0_4cadwVBiKF#gH`$-Tnd$zIVCV<`JARwVxu5ym$Q4VtayD37z%{>c?pJ>K zh2ypURIXc3&%gNJaOaxfDf75?Gv_u!I~Ty(0p1gaXz7w4F_L^n1HMXfwvcfSnzNyy z6TYN{q|qhLhz4E12=d}oK(A?VP!#U8p~j1T9L}+jib*Kc^V7j`38X?Uuq*$r8vI`x z&M(6&fefewPG!xc8d==!LMIpeT~JJJ`b%RZ(kf@6w6lyZ2A5xeXS4Xe1^PY3__slO zTcNz8aGrcRhv$o%%s@jH=84sLMopewo{(cyg z7`36M>v&!TzFz{GyMaqy<}cqW53=wwbJz}l{s~_8@%{%G`it)?{AFNQe7YJa90tRC z_*}%VJ9(cD7SavT$8w->f_uLK>l=Z=T<+WnZ|>#n2B>2NJ#2^aHY0~5x6bf{U7TAB z)Z}4q;_72SHHmCn4&Hb3OqbrbKr?B^3HtmEI+oY`7k%vI3L89#3UV3e>FFp}M4*P8 zz&9t9kPkUrJb*-fAY6_awugIr5+!H{?=<8!5PlYK)h8y<1q|E@m$rppdvQh*;0|~$ z4T#+Yht~xQZHYtlHg4gLdd3aL^SGj{l}VmZKTqX_@~X_v}LEY(h?~p~ubgQ7 z8+h`CfP!SjY!A3J1vsAYWyzcex~1qTH`E}TARp%ngVXhl>lQvw@Ox3?wBHD9RRPAi zp^-*hUzr$F6)2?xoZ6mI+y&QmH2NUJyCSa#@@m6xow=hQ=Q~4ZjgbD0z|&3iUkR*S z54{!TJ)P&~=Q%~8-|HDmf+rM&W|HvuCFp%8v)#fBHbMXS4axGQ@Y^B(3m`ZbZu*_~ zqnz8uRhxn2N62c)@{jy+T=y=V`908H3ZL%+C+oR-1K(#Np_g-R6A)hp{N}=E7SG&D zU#sE3Y23R9tQ_MB%fRL_IM(6nBv6~oRT~)5VPL!s{uOSnAob1$IBE=Kr9+1)P-+F{ zR34}&pgvju7yZicf-IyGK<_WV1@I|?e5wnFHU;u|(960aCwM3Z&&G|D%=s)b?Iff3 zppBeJzh?C3!&miyY9*l87HTg{Pfg&_&h*rZzVGC0VPM^a->Si}g~3rZa8r4U*zCr+?)=^n&c7dSDuJ$P#Hfle3Wu?mXB6r1Q5E}b{ zU&pVawO38GsEX`TaWmdF8!*ysNb{V` z`6@We!xdR@{Yvna*Ej}tSAmIC;Cc}m>-!mS%U-{bv4+=Wo>qiw>LUqksBAjV`vqB) z%7_X9x2xdd5;8#+nY76{UM@UWJg{0L$i7U!B%`G2?N8VfWQ(c5O=b{yGo87;B{YBvKOSi^7U8N({B z{T2?NML(0#M}{$l_dgihFaFoaAHm@l?mGwc(ilkw7`C9z{z%Yr0e`lDUVDM<{K(H@ z0c}-b;3wt~B5lb@x3*%XKACChKgTy`Tp6U?Lx(7G91D@qaxt^h;MoSZ=g}-zpz>d#q;_B<2Y1(o znos*3InuL_La8=9?m(mGkO3Ktu&g0};w+NQfd1q?e8-$;!9l<9ITgzJ0a{t*f6Tm= z0FM*EWj)k?hCVhkcN@$c;;I71pFnCqXJSBgGuYY$G;%YWGe9 z;ff2;cv)mj9<)mW>aGq93PL5JW!04P{rJ5g7>t5F*{zL`5|TOl{Wd_NJrd+tF*B?H%t}F9vdiw|t_YtdJr-tk7LZs2r(a@5xzLnJIC3xZ|CzBaXUw~i zNLQFySz`{cKf;XWGsC9F5;$i$=dUw9;=app&|SPg0;EN21))0GFgeJxROPr>VBOS# zKC_U_b%1|-4dDh0vzyE;BhqLS+xR5mY=88fG0$Er5Nje zwA~)YFWa}Uu@M~Z2cL7GtG#gThd|^vaJms|a-07w*cyQ({~11i&HsS2-@pme!RD_4 z4l}{Pxxg+c1*G-^J^B9m0&2|1TrP8ENhsgt2?da!(ssLeeiHe)kly}e6s6#U1z>qE zS6u}^l204xcPmGd3rE0L0*K@>{s7~J;IOmwa~jGh#*D7O)zT`m(#0E!{uZLg45UXI zFizo2Wi)IV=)nQsd*I58(85m676mhf!Qeq({zwM)M{(d&9(>3~l3yUtI2YVs7+jP@ zf?NfAxw*D1cgY7#2_#4X`p<%54)TMpq8FwkFywwQrbT;spORV%RYw=m)Z=+P_moC~Pj2;a&-FTwjIAbA)l zUj`b5k?Ija;!*45qdkssIKEo97)*(YAc7#$jAK+0=-@n3;jkY zu^gDm1#M=~U)A6VrMbt%ay$bTlHl{Gy0!HL#`lXN0?z|BZ6RE_g;h zbq42ZA*C{yfe8+ZgZ;A5*p2AIGsw$E@W2(gsu5$qo*rs3u1Z{87-?rB{bd{F<9bE9V@hS-(piOpY%yeCCKMl|7v-A{@oNIlq9|}uCS6gGOg`uG^1;kOwAn&n@F%$4 z!>o_NV{>`tpUA>}SikGwQAI+3$NpJP%VM<47>BH=RB(HeSt!aQAAUc-Okw2xvx90 ztOIp-ME>7qyn=P{g7G4J`wVf;$7q9%4>|WH)g8CO(f4xwJ6zS-_}Cb2ycEPqA2G%n zqqyq><3~Ox7(W~DbLKwdQ{yep_UG<##7OTZCOVMbn()03BW}vm`w{^uh+L^l-#Nig zA?QmU&pBlLap1ZIyF*^ic_hE|f**KHis6-KhWP_bW&*Ke=+&*jbrDyLMi1?UXXMu$ zBo4h83AhdTuZPmUfx=cpZws&_W&_drSk<3Gqcb@F6L$DF;N$?`-T_Yw;J$f$&c#Mq z0X3eauaEId{={3^30CEgp8$_PV3F?N{Ex`yWdT)x3dK(jA}CYfhcEoE(0d>9tR3*j zt2|>l(tI4><-`Ao7Mv3B%Vb9KB|UtP$3Ftz`HoQxMY_Mq-7g~P=lRd@Z8*Js!+l>t zGqbp3JWrZMZxgXZ<}l(f8QE%joX<@52FI(=wp-!NKaearkqOE^Y-7IZKrjlGC9y&F z!(%z18u^x`z=FK@JkU~AJ|*=!V4XAv^S5y%-@F@mtH`fak&A0X#(d~xy74_%e8X=;ptNuJWu)7i;Zl^#aTt1eXP`zKxqS5JOVv!L!xa47wb9t1ZXY;>aPIL=}^kY{&Qex z4&NW=%!mHx;CwvSOrR|U6F+jS7}du>`Y3qV%JF(6$Vomg@xB)d`HKVY0nr|h+_K} zfQRxoTbaX2^z5IUJppgUfb}tY-3(PLnkOsgD%Y6kV+;LYF*?QJN}y?SqrvMkr#KiW zi1tyuL!My`J`G0J@zmY)zJ^in1s5}U%5k`G1G>8e*UAdp%{Y$Z zJM3fpS2RSJy1@$Ah1@9Pg#X5u2p_k5;e{|9W;sZ?G@k!>EBx5rZGNZ1HOqfRMplI zN*w@)+zu_@#%E7x`AOo{_ai+Aa6EwXci?>vL{{E`B{s4t4cJK>FQ;}*jkrz{F)A=ST zw}5*j;gp@*LSHL+-vz!m@VlpnS-Zw%S z%3QAIeIv6Hw0?(UX9J0)d@4`5D43(@{dc~v;>zX0`)ahv@BB8OnJWu72N=)i+-jh- z8CY!vQrqZp6ZE>8=dR^>%K`}QWhA2Ni*S|vz{^md3zy`CKa?vk2~;Y8<#ND8vCxX} ze0?aV4YIBaGOjE1&sbpY27<&Gzjt1SsSAt*Vb$^0(en8571GazU z^*z)y3mTXQ43yhd4tqDebR4cx2Kg9r=RiP1%Yo?c=b3u zt*DY>n##VPr7!vA%B(1Ikw98VdK7{Bi$hH*$d@=!OdvT_@%F51&)0M?nC55cN^x&zf=nUC+lIyCgJOHJi zLS`tg=_2ox8Oj?#G0C_u^NZ#oOI)=!`2uO7>M}ckkn*SJ0;wg5qdfg-q?NMc8=xI! zQv~nHaPcSD1Ec)6uxsAJ3K)a^JQjZbHt?qf|3y&RQlPm7cy9_Ic??YK<0a{@EWT)S z6TfffrOcl4c1L)fVkCmHe2`2&CHYnTr1~GhT{Q%%Sy0V`Dk7W!4`JPe>Q_`*loM!$ zP%DdOss%)A^IjL*vL3K)4$n5Bg;l!^Iai-EE#cmqd9{Umn{kzX740j7Uk)i(99}LG z^sf3C#W3W>xjbF4Lo)&FDy{WPwLgXcm>0{MwG!Dt0~tjiN?(5iD>llQXp zEE*9Fsoq5O%{3Ua>|sf7U0atCw}3a=B4awhgOc1mkleQ-uWskn1Ae=M*WGZK>H!9G zrWL)bN7eHvIwpH64jiup)N(Aq#XfY|pWt8@*pYk;sb~k^_k$_bcZ4-K7r9F^BFdc4 zfv-LARw$9zAz9YbR)F`VaNn=c$KOxN zj)E$u2mBpg|21^_A?+hxqoLq0==n#UF(uGTqU_l`eGQ{I#B4pZgequM!z2DJ2_;Al zO15`Ja;fTEHRsP@CBB7S_%RmacX%3;jUSAe#xGcrAK;BV4>s-t8}}d!J40J-!QRdE z&@8}var#w!R+(mHNTgM3BmbI0e|5pSD6=i{u{(GkfNs8@Cq7KOmp+Ga{5U%5HQI|v z)MxRFR14CFt2^<8#!z-8>^9jpd3dEEIj+Dp4lhMkB=1$@m!J7b7L|nVR3W9zrEDSb z{&sj%(Vn?TSJ{@6fR%Ksr0iT^ts0x3z|%bNGmG~{U|V>a2_%0Fu=4}=NT*BQE)S&b zM(9SFp$*WDEUJCblIq8|0{7Kma1BSI$xUERIV{zV?`9mkkt51;?cld@WAHe(F{)4ppue~1gpCSVAI@i9Bw=xlmnH<<8 zQyA++<~I#0+XC%h3@p{djBPhZmw=r3+y-*WWaI~`Ie}{l^kWV1)B+jO4qhAtb{+;h z(sYk;^fb76hU4e(Okaamgsm5#jQ5StpqMX>uZ&4h%nbaIrN-~ZZ^jZ{%Z!D_Tw@m0 z^pP=!J06Fl`#^Q_bm}3Q)TA#ZuiA31B~*DczsmNwDWIC>oWBeC(326}%BS@4ok)$Y zft2VAMLrO;aNWei*f>uFa^s#ruMb9d--QI}fu8RTH7OU`hSn0Qs*6;q9Yi*YAm5~a zR5vD%Mc7ymFa8K;i30`SkAUz8c#ZD>?-$4~4aZ*@=J)Y$r`_rIqV?t5Apbtj4)-4h zZ$kon-2=`B^UGaab%)>6?@H@TYv;H1Tl*dTTWPoPOK)C1=w%@HKY=Iv2_Ek>Xi!xq z8=C{MIRj6W9(RyVDbS9*1MJVNi#jrShyf;<$s9K>3I`qas z2ldCI3#-fqLN|{SgLxl%{m}RvNjMeyU1F>>R`5QXwusNUc-WsHD_HIiEDm^@_vT{7V`R;Z?c8fGYUz*HPGXBW_OI2 zYM)L+nUWb*sg|qiW7t!j0nPK}eVp$dggD zH-Y^aB+F=y^zHR)aDJCF@ACaMB+$#8eF?4fJp4WoP00Tgk3TY~ORLz5Gf6wqV)w(KrtSb3*AfqbY(0-~8Uo^vSy_GRbj}>l2omjQ%A1SimkSM@4$E2)#9y&K)6)EEg8^!90^{TJF5X*!L};TkkzE> z-*WU>8sBI@Xl)KnnornY2_4Si z{A^$)du2U3ACK0W{>fC{vRkE*0EVNh~Wk1&DZ9iK_4lXQ8@aRgx$d7uHs)8X&ASSH-iA z6`?=HxGr0b~wZx*>(CSfu7)|NQpd_ zur^vSlz*$5IN9J@H>EWW#h9V2_QPvRAn_Ma1MmXc1?hjKF4kiHR`9taK|DUKf~tvjPr`;e#2G2aIIvH`0Nj) zpsKZx0cUwl^6t(9C&B7uz-woCzG_+(kCH7F#^v@f5@j89R=lrvin}fYPhnO1QIvlo zfc7EY^DuMO(0N3}RmD^sY7_(%cWMZ1Goapq$g1}6;XPPC4)t=!KkW8R)|*;HoHiDG0p98(K4x24;lO+|Z)_U4kAIW!oFj zj%-V185MUw9MF~4fgEIJs#gzd&J}^oUX`f)c~}*%TJ*C(Lifu4R2*+Lyc|XjRsi9( z$idK--OE!{w{{-7Rz6)aJ&dH3hcC5OwF8n!6??MaT3|)h3LvCfo($lXpBaVrWDaH} ze#&0`smP|hvI9Ix-czX2WZg&-%kxrPN8XgivIW_?jnAEoXFvQRJ_&ug(~M2NzZYm6 zRh_AlO588YK`T~eW2joaJhD!!Buc_9B?5R$?nxfVqEJ*rzKVVkMXMSktd;iYT@-zh zCx!1>z(VVeWHpP1lucCjTcZ{vR|FbCT44oE-!}niQJ*w{Myu+ytK2X7p%oP3Alcr+ zy5vtPXSBjfW0N1H*p;G^8A!Cs$aH!C^86cvf#y)7DkbGn*M%-aZEzEIa~Cv4m%viK z?V6>0JNB}oeOd+F1C7%ouz?jHxGA9NCfr>Y-B3Nio;+;LRF$o#p{#?!Eaa~!x+i~D z@j1mmWrh5RrJ%J4idZQcIsxwe7(4kLtkA4V)J&#s_lu5+nsh7_H7@(AGU5E z|6Y8XN3oQj#twQ7A6Jq8Z_%?;(JHEv&5i;t<*Cv->!I5n(1N@fd3{>1p_NjKwkTFD z8La9**|4%fRZ}7;N+-(u40TRdyn%uE3s2!?%F}!T&qk4AtvVP4jFdea7_|PpYxQ(5 z?&uptjr-%d4yFy@8hI0U0BL1q+5ycLXt1VOt%@p_L3THmmRLv8uh`o)^#XTsTD$^efd5Y8S7qnPEn0*j6m;-Ix5DsA6niC zH>ydpi+^RC%Jw_W=w$tfvZZN59UHDilDAM9o~%x*Osf<;RTf|oMyr^6#el9A+gEH$ z{(z{x3RkKkpe$F(f)N*o5&A03ta^Y^(Z1qZVbiS3BZJg)0mc#L4-^&FN-N<()~aT6 z3|i6Za>>$gHqueDu9tv=1=zg{0_$7ZW#uQs_`qx^awZm!JnQeE^a^3r87OLxgi z{2I&gYbf|Tu9*Ul%%LZ(Bw0@1l5$!Lafp$eflB3ps|H0?u(DffgPCSnMXIjt1?Am~ z-#rYA_>pUC`yWD+Xm$UCLHy-5=&l>OL_V={8n;}d!q)WA987Edi&pN)5*B320+)i| zTI&{bVmZm`3+rdJvO}6s*cYCa+gZlAe}xBsqJ{Bj>FloqO)dQ_KjKUH{kwqY6>0c3 zI6IyzJ_RCbg2-2ae3(vOTB#(s{uWU91|Xq$%-%qI$^VpR>jm-8@Le_Ss(O^yr&wYc za4Rb$%mRh>ujpBlPx4PQmd_Z*7^_1gYPI>Us{dM0jA~n?8pwN4+<^t5IFJntlv$8%d;|!~dJJ=O%Yj&!agx?nN^68`y(N33+Z3e^qx%&CPH7v&WqK0p>qF~DQ|x(Apn(Sl z+Imos$yF9pQ9a4MQ2)w%RFv2R(#j}>E34%%$Y#(gPH9qEU-=lJe5MSbsl81ULoUF* zq7SWTlg*|z)u*9<+2OKBMgKeD6*cK~(Z4J~N%=88!idD*;@om@M@GQElD)N&kkSw0;?_`V zCt7!Csy8;B>|(7!)e6(c(60{>`BT*R{^0yTuDTNqtH@GkD7-b&R(eAAoz_Xq>rl?4 zARHmTI*fkFT9NdYzLm5oz}S>um3^f+f!5=PKC-e@`;f(3`4o2L>1hp;jOJgcIc*n(v?q>CJ6T>kT;`fns`V#Oj%d*y|&FFV?zz9lhZ+$qamI#OCz5uYmH zL>bBA$n08y)Y0=)$&m&p+w>}J?Le2A^eB2g&Ybo$XK|jgFw%O0)h=i%6Nn#Y45|cF zd|4T2?Q-BSLwV?01(z3TtLhZ3*_TYyh=pD4!Vp4T7PR!?7Cyz@yMds*blE!L4iMq$ z_B1G0{V6La86;R$ggZ5_YRFUNM;fDVv>u@o=U#ytiz4s3A^YkDQnxv?ZiO9qJ+#>n zYoHlDl!e+=y_n7&rGZsJ`pZGh(iJNEL}m9I&oQ@w)FQ9OR{Mrn^ov*%9gV4eWwfm# zsiRE3~yfuyM>-SmcJtHf5d`13fIUhR#aHEKB_gZ=PfquNl)_0U5TC_!~6iX3+YVyZ}KPh3DdeYJ%$>L3f{X-P85o>rVRFH|C)ih>VO zqvC(kAFA_K?o`opMK1JReuMZvjD3c3M=?ajxMRV);*E-5$-)u0%Fa^NnyLz}(wCw* zvL#P3YwdavYSb_;sv%|8-YHN2dBLb`hW%PSs+jC)K^{$=yV{Vb^!;)WoHMGoGHNXDs=1X%_Z@bl zvH^2}d|1tQg{u3Uj6_kk3@ETMoTiAr_*L;H&8I7|sBS<@yUl5px#A=>kW9)+gtn}r z)y1Ge)$*wFMG-{lO=(U=mlf4f=JPV+SA1D~Dg7mjLNz_|K0-@E^-ikP(K>zAV{GHs zjRAfYUHJnzT!s2nv!m5MDO7o{q8$um`2pauivC^Tv<`_j6*|%G89V8F3wQkm1hw92 zH^b70>C8rIH(%D>&rbvJ+?t!-+^T?Oc&2BVeltu@8D7-bd~rF5YxO@$rV z)v7E|bY9ho8-a}Wevsx{3nb;s$rcW6xW&jZ)w?X?wHV2%D2if+UqNFZLS3Ri(c7m% zru|DkWt8#OzeqE;e;U9`Vo}yGFj>8X|Itff7XADqi2Hl6xA21vUr%!N2ut3 zI{5w+zdsk$^SwpP;1lRaa_c*K`x-j>1?{R#=CA0CSy1D0=up{@lF$q^!JyO-Rtyfu>Myd@N9X zj|l%rsuo_Q66Q^g#{g^b@5CUApsawR3KMys3asY>Q^^K-xXLSuOT&GgWHBh~Aqa-M zP$}c6l@D5#Cfg+3ZB!nWtbOg|A_|mGr`gClR0W}SGS#QF=j}*4>0)KwRMGJu`dIs@ zK1*f6OTp_!Dh5>PHj@0^3qh@!b}<-4e4%TAAH@+G1oA=lxZ*gH2eM{t;4E8F)}nkY zRdem)6+%f`CahOhRiM07MO_pdQx)zes7et6Rf8-*f~nF#yHLn7QB+iQzVi0NoUrIi zK1Emus+kKep&S!siGIYr&A_H4M%#e8LKt)g5}kwA>Ds#@#d>w&I$hs_Ci;^_EKXK7 zK$SOTpdDq%#F?tcmCYtQ^$=Q6vsA=Gl3kHMWiG;qxatn4GMg}_q}mhJNhoftUw%Pi z%ch-4Q%w06e%BsW-y+#R52)$GAhI_aIvPzK%qvvAjeyUGQw4Q@Q1#Y7$QJddib{1= z!>NsW3T}T9E+5GqAEG73Lv5c`EWf zj7DhBHsy|$byaLe*>c%Us*Dc3=P)uVFE;dn)VF$<-U};4WqX9R5ULN6f28bWC~@RP zE9#^iXm&nb5ea!Ts#lPwpx?uN2<4$D*P_UA7!6kDT6c!~rYU}*)r1Tf{3sSGiJ&-2 z=;13CFF#+gY-u`;LiNhB3Bww2*|n;%R;)0%z%Y8 zLW*pu`cB#-n~%f#?o!aUatX3Br4bZ^k~JjW7S$`?EviyZTwJf+x3Z(PihYK)G0JtQ zVos53X&F&Mw&qs6B7Z=KvNRNbmL;Mq71fblD;$Xu!g~HN*CrZJq)T<$$}Z@;B3!CU z*o$^heM9&?+!;?kpLV8D)wX1=KDDCiIDIIlrMhk9A|+e@K)R~ldIcC-h0G1%t2nKE z$gnC`y~`ipPrvf*l`YWP0zp{O7p(_t2t|ao^Qvr?#_k;WZt}yFYg4vOzM15yGH^X< z@^QK&b5*M)&Tb4=Y6coxSvT2~s^3ggn@Zjhp0oz-dp?c*cf3oD+) zBcb0c*eNJ&iYvVJJ@&*5^qcN(L%Zqils}Sh$cECcUrtrXm{J zwLrA49Viw12&JUn#UHAGEW&JMbJs`0-+&&F9@c6j)$mCVsE$t>MDMC|ZV^Z!*^0`c zNcV(!CP^oGkct9^wwmOU#;CZJb~Kc9QsiBD46}3Dvlgzz6D#2e<@Z)2z0^VsZbbHI zWnp#&nmnlN__Fv+@?G(Ru#QUm-YGIaA9*(kOHWm-uLhR*s^JJLgLFpGH*u$ql%*G?iaJ#pcNt7* zg{RgwR)fpxK`Y9cE2_{1F6>PNW(c<2L&4gDhxi;u^hLEVssQg2=wZcD6b}q@c3}m$ zqAHU7+TBjCD$rX4u4)I)dSMx=-lHEq4~F}Dg3IPSTl%^*vQqj;nHWV6#ign%lV_mH zV@ciY)fTejRprnCc^y_#OK$$XhrT3)a*wJ}Hi*<}^^zjgT4%Qq{#NCIxc!U3r%^@f z6znYRWTr}8S=h23Rga;nud9Japd60+lpau4T5>w9&(f2#Yb%xOk%X5Q8}6ZqnqerRq+8{4gtmL`K(8n}t-ZqJsmKRZem(9+Vg zVFXAzR+1{*DOnlmu)aywgDe%*S1P_FtZ5yDpcU>Ht?H97F0V|3XigM&BfQ%gnJ>wI zD>#ycw1JucF0gwv^22d zV2b5Q>WIV7!QH!&XNnIiDy-@&+1IkTWn)jKO#&jS{Fd!K4S1;bM71ocD^l&nLby=7 z#V+MD%&@68Wj^PYp*d6sph`=5ywaXw%uMS#m8+8vlkM3^YN+Bc6AIJXJ!OL>?JF@0 z)g;^$SXQ!)WerP$Nup`@MOE{w<|wonLK{N%nY=&ET9Lod;!wOKtcO%gQ&QFgKU$li ztmtY+tW{8|&6x{@ggI92$-0`43tdr6y}%ewnO@PT>CbfI75> zR4Ylfx>PlJ$}wu~n_{IMp{%fCs~-Jj+YqwmRKKe_Ox0`Yxr#(9S}0pf(RHnw6wfGk zw=#f@seCbjBG5?quco)K**9=D9Uq~|vWIzO!P3ik$=g>V{f(K^L& zr)^b8sOn6yMpY*&PZh?9B-_FqYd7XJ5ZU`Y6|wKKPsOL~N-&mHWgpSr587K)??2Ca zqDRTS_69ax(1VJ3DJzkIT-BU&1`^>S&)51bX?10lLK|GR&v*Eb?@%}RA`zcws3aW5 z%A3Kgo*C@-r|wXzY3`u<@OF;0a%wRC;~?5#>JA^EJ&YeY96$3h^w#4XKTQtoW&F?4 zXs(GsX*N8ewc6UJ^(yvQ4(6*J-n3ezR}foxk_zAVsr8-6ZVU5S@AQYU(>QKiFp@^X z%wrZbi{%5(>2Z+C%9@I>!YT!vg9qQ5BoEB?PpsEeSQKAYHjL7 zeA;)3tvriHeS$j5p~1}hQ!{zH-_7sj-$Ls`Yv;FN{ZKnr5#8+H8Qu9d?&X#Q%BH19Mkm={?a_5qQarcn1e zDDVg7JRID0@EiJdm_d2wP|h#oSMVzZt+HR8nbq`b_*MO~eqle4A7yq&y-nU?#y_69 zJmU@VdU(yf>%3xK4)2P4$ld79b-#5-yU)AB-NEi%?(J?@+U;&{cZmC#`=UF>o#-xf zceq#F{9YZei#N<0?M?Ppd8fUcz~K(4Vm#b&iXE~#6Dyhpev6u&%@>)&DYKx}#(LcP z%GzSZBXuJEBBLTxBfBEWNbYE*XuW9tXrpMYXz6I4==sQ+$mGa~NSjEm$O`LatBG~m zoMhf(mN2)nn&oCB-4?X^V_-7FkNfAm-QHSnA#H`X2AmxA&U=Pm)UON92NM~2hkT57 z%9ONQ8dwJ3VUImaU2O}$l%M781R4{(*O|$!UL&ux7xT`$``lITEcYjOocn?Mo;%8Y z!+n>}u|VbrcfPyM-RYimT_A9s*U-D!>*d|=J>|UvM5lO*pqxLUi}T(kFXCH%PV&PI zp~2zUc(ah9`QY96jcrC{^J#Od*~t3Z$`g4yaxl^+`gPQfc8I+hTM|1G^I|FSc>GFi zQ|z1A;8>B^;%KkvxyTEVc;s~}r}c)J)BFr+w-PRm`7;@LW$zStd&j-c?df)KJGpnd z!`u(u-`v04n%*PcEYI^=5&Kz7bgT)|bR;Very9TV8cTM305UiqJ1$K@CbWhFj(Rh^ z*SrB_@tyc@laK&`*`fcKd9DxC7AH_7|O zTM8aFd3(IQv>o0$zAfYIB=0*Q^da=}25q$W7RNt$bNKzdmky2gMUt#%kDa@XHAXXY znpwsA(#jioC2}>=H@YyIJJu=oa%^&Jd2DBFeeB2BD}2uvTM-=)y$T)Wj(iSh{c5%} z*D{|pcIg`gZ5*TjC%sNyJ+G{n$~-JD;pJo8w|h^6@f}`%>Z{*Iet7H~+8fH6#>&g3 zaP35n`(U44gv0tkBfGs%y*s^9-e2x|cZ&Oo`##k0j{CX$v%3OHIO-^ac<{cdg7aaKEDIWIfIoPN$7&YjL(&Om2~ z^Mv!ZGtQajEORzFC!M%k)@{c#-Ul+iTf@5pu9ya2p7I=cG8Oq_`Dw_YBi?r8>$lLs zBVHe`EwCvQw6f4tKVenOr$CwXWog=lP1!JdUljFA}b|(6z%uHF8@<+;s zl!+;wQvOWbl9(319IG08G&(!7$1<&+=5Kf#pZc}@6VO~=uNe}q5xiOp=s)0%Kz?uV zu6l+1R>V%VD|KaL>NwUY9yRiq)y&#vRr5MCzj=W5iVtDctb>;F`Ag_0=FM@Raa+5E z-Aw10^QW`U+2Cw-wm7?;(@v(7oAV{yYHl63rh9|i#qI9)aUXGCc0U5*3*41R*0t^; zxOAfXw)>>pA2>C0>w%G`ZcDcpvUQxh)h*&Z>sjbB_I@@iTMZ(OqfKM=;&~FA5)Y;v zPbrgHC$(m(pYml&rIdFPd*Y?ztzyqbr$;tgsn!tlFqIx@?EAO|Nw*09-9rCrU)(lW z8#!6kw;4aQA5t-wzYo~|;4Sbrdndi?kda?wvt(d@e9W5Td8|MlM-HGhR^%+SXUv}i z%!+vX-8o3XzG#A58Fdk8%5}~jVs1;P-BkK zzYoEggWv$^_{-X=gwiLy8D{DKajX1 zy%(9s&CGeCTgzSS-0S3VR@)QpH|;U@Ec<|6#(B(H>C|=`dT;u3jaJs>$k5oq_|e3; zl)CS9>w%yF}oQ>{AkKNx5-#lThj&zCM7HtzP z8vP)$*4kwrWaljp8=$j0+o|guwWrx{*(2=d?f2}ZII}ICFP(Dk47VlvtrLDgZ)jvX zt9aY9Q`epTZ(f?$#hv3+b0*pC?d$APc4hkxdz8J$?&!>NN@F$ba66(^d~YCn_^SWC z@s;_YRV#8SvOGFEwihk8J~k?LAbLx5Rpbi#t-pDewXEfV{V}|zgH#mN*ow^Cu@bdfZaUTdndT^3n!oRt=-?Q&6wNrIoy8E{?y)OmvXu}uQ_v_{f_CD zaVxrc-Gk8WGvIn3FuC47ntU(WDp@UAIypD_u+z#bV%%%(j_ApXZiE2fUB;UF>f#vdmJEC!)(@OX6=QE+iHv5{Wsn zixJyg>c8lYv#(1Q%=#pAedZ5YY4#N7LGL!BjP-eBZ*)$qaJ+gvCH{G=KNZr{HuZs7$JJ;#yG7jWKnqSz1Jyj1Wt6kFw(In}x=@_Xb0P^=!^6=@b3Wt}lw zn6D5oS%40G8r!A>-pLBAy=Toi=0bC?nb)dpHL`B8Ua)?%PFYv2gVsk@A?t2)B$aeS zy$9S6olEv-_Dmo>!x`r;@Yef_jL~LA>oMy^tDjZIT59$%qvjl{f^NX#Ta3MS9zHzm zHgu;tZJoXL9Q%l!;e6^;b|<;5yq~;X=+WKio1)&k?q5y~XSD4mrzFeTPdi;bJZ@`r zbY{F%%BGYvDQ~Admq?G#jy@J?Zgn%Wj05QWuh_HWb!uDAqKkGQiAEvAUhwZUABa2` zYn*s0C7JS0N|QvH*fZ7y|FSbaxid4CSuAry=Gm<7_6cXO_d0vo&N6lzwowOJa}U&g zB{DbKBvv!_c62B-Fv2h3?o4K7esJ~3m0VYkTFB@(3dqyWlrdo^8bC%Hy zx*6tm!zz2hy9I4o4V$GV-#_;dUAfU zp#744(C&a_T!fAAvD4lu=FGKku?_p3WW(gx=biD-&~5r29 zH)o!>nk(~sW~t-|d!uvCU4-T7p$R*9m)*nIw|99Ly*~K#RoTfo>fhKU<*b#)SAHfIQ8R4s&EDgF19aFK z!z6S#5Buy0TI&hC%rS7J_C*-t&-2!~SDmZ&`DFK`leHx)BRMPC5baXTspn)kmb20J z>@m*!ZdbpqStx=J5q~=Iej+V#GWJLGjmTZr67zj{^+EF)vl~`3e>uZj%0k93(G$fz zcDFV&qE+Kd6W?HM98QdgkBu&{3Yjzg#qh^g_iMbtlTJCOv;9FbZ?Z`8_hdzJldKNbZ)R6B z6KiJ{9(6mSLgVn7m%w`^q5ZyCEXA;Z%VP&UK?Jfg>xw_Xi*vDBM`OjGbKi7JxnDVD zoI^;VarSz35of>M$I0Q9Hu76XBb~7SN5=iwL$RE(d!kiI z`F4mLwSKiS&B;d0f53gyIcT3uZb?qECpdq)e|o$8HfBR>u=NIUgbMi2Q;@+Y%@lK! ze*pg_-IZLt*)DG<>>OyZZuS%QZFYBiyIs?{4&2mp7vt>}@*c)MoZ#K#MVadqW^_O8 ziu;;B#QfNLG*Uh~GdeE%MdXZ?8y|f@D0RgLD4 z6t%`1<5_=Okf_REXrwvj7@{<>Xrb8G(L1A0fPsB19H?ORwW?b^%q!TPbNp3M>^shI zq~1RJA^faw+*h%yzamzCgk5L!S9A0?!!n7zw({TdOpnnxDb6~3w|yBMmI}AFbvign z^lokEu)WW|WFNCn+AHlT_6++S?2=NXqmimsEi;!fn0Y*dhyD`&@vC@YY54wGZdJ}4^sXneWs}od3`Z3u;?NQ;+sw;} z#F*?p>K4R`xEX7sprg5TaJs@77wm1cjm)qL*710}gDj__I{^NeZO$~uV2k+dyEP8Gu?w+O?Ur>5@xg`2%TYuJf1ysG4tQuvhCqMmO=~v4 zM=SOqLT31KkyFfdWYO6@L5hfbMSDtIvWXs)WEtNf%m@- zK537>+=Q&SgXerrba)Q+cSE6^V))LEciFSO5=0rhGKL?~Dn-bLO(oh{%N)vxUpHSi z2b*>9N(}R;vESHYtTr~|cN{bRA|6`6EN9+i4lswCZ=0jJdZPKQIRU$Bq4|yZBoe!V zd4~BuK@9v3G|>=ts@-CoLSLLV4zjcD6r#ls5=l`#^*vnCj0myItmhIjyoVTQd3^D> zpPSh>zH!auH3|Umxj>{M7x*;@w27aX;{T7eDbPzq#Lxh-nidYr~0>ufx7B z#vS#7Tugo{T@GWhEB33JPGw>a5^+=BeIb6fcDB7t&bu5>sf*0LA;@loJ0NOLo7;fS z1Nb=~Vv9{QzGX)5P=(f=NNJ_2?8934ABa1jhSRh{ zA&r__{k5kBJaaYqi$jbjfhVk*R_z6#>cM9CEd!`>dlzghV!yUecy0|wzY!l$xu6xq zu&+|BnwuV#J65Jo`WF`!h7d)5*+`wYKKRgY_-E!9cSCF}M9P*rW^ zH;ipBnMwV1y2ZqJx)Gth;w>i{HjYU0TiB~#5(8QTk41^m)?-c`xTXg&>l^*+vEIrM zdvJ-DY{8eFL(FD7@qsGDW}YQ-vw-<2N33*2>qghCu7o^tXw+LJJQv z@;4d#hrxc?FH+0*DjwX|Xuy@&FdK~R#$IEGu^f0zCJyi!v7ncz$sbC*y({y+3H~Wd z@7nF<40zQpep*$g^(kA)7V0mtsZQx)0R3g~!cW8--oi5&26rg#-kMSOXHCop;A!$Mj_%x(#z zUXJgv!#HVNBH|u3V@L!1Tq9yeOot><HgVTJ3Z- zkTa?&(Eb*`Lmk?W;Q+mAN8*B5kIKhujdN{|RZG)=dYG={O76qwd4`d`$2>n~reDGh z+E;Ko`&5r7HaQ$#X~!J&*G#S>4qTllDqF3Jb002NO}qASRb_HJkA`s;Du!na=|muFs+6xzG#XQ1*vd8Cn4YbZ$e35LPRAn+e+2&%IC>ABe46Uq zXOKXn$qjyitQ^NXHVgX+PDY+hhbQLpJ^|W!87+7_dNADAR9R*1Wud)LwZ2oUrMe#}I`Z)UWNshHw=8w?%MmX{^qf~990d*gT=C^>gkgoSIlT&2g z!#!{cAa(TD1iO>f*FGWr(ImHn4OMBk7 zMZb+;zE5$aRY7;7A?~5+H&v{J`(bJwn`%~+A?^%qh?BLuo~r$&4^)?=`arEx*B+Z% z8=zWIt!7gtxK=!ee^FTbOK5e9aG<<=yMXF?@!b0ZJ=zaV+L80BS8E6~n=?c02~&?g zRf(Y56s@1o?l@`mtR4T?ARn~SO@AGAI}p@bF4YEW^=P;PT9s+4ZPw1EuOeG|qt&h_ zA5x804;tzT?L7|`zDC|?mltU^?X{_0#c9zgyrZYGzE>j(~{=(ioXml1lt9_xh z@AP8oUZ!!KDq^&I-D_lTpNGPq0MC!{`ASfkt{qZ8qety6^%0SsH{piYkrE?$e*<|w zntQc(s`jx_4f8a3VMb83xq#u;4+2Wnb_*&FHhF!&VKh5_0B zP)KiH+9yUUi?yTlQ&`oiHh&}7x9(MF{l#E)*hAoXAXrvSk*dSmfer1dq>3=rC+Y8_ zs3KXPs)SRmh$>XeBAv8;NUM}oyK)8`?1lGK=cvj`?KY!Ik-2E`Nys-zfM>{eKSUb_ z|GvogG0gfWV7Z#B57US0Ps7zk;qJ;|?YaI2q4p)Y8EV(AIFB;&caYyR&{E6EYb`|w zO*0n2wT;Ye=6=~kE9)k9WWW$b2oBv9e;C4IrQ(5 z2u=Cyg!RV`z}SyBktcr#iI8qKH$TDx>_eXq5z)ODIXwf-yNihNY-Ui248R-MG9QEQ zFOf};Fq@|XY)wWxWe{b13#@mB_tSy@LH{v$Cx(~23qABab9&FenK>-=yAYurMn1j= zF}mF5D03CD+1_Z{cg_ChSnxOvnD+qc_xkn8&#onRp5agQS`c&J95RbpZc-LSnXx06=l-b z``A;hK0H$qxl#=%=_ z`rm^E)r3t!ifVV4{c!wLI8%SE^gMKW0It{io03pT>%be(KF|}%Q*OlGOe2!nj(Ud= z0-tRfG0g=;!`GRAa5RgfpYh^;G^d!K;luSJ0(BjgE?1Ea`g=8^XN$i=_#3c!ihaK_ zeAE96d;e#AgrQ`XQ>o9`M&9``_i-{ReTg!aC9ivw?AbwQhw~1Zw3nO@$;d4y-t@im zGr7rAPD!^L)c|d%=h)z;5m#L5rJ-NW`*$FDI-2v%X4WR_?#Q}G=jiU}ov|yizVQw5 z`iY0hFt1BwB?_n5iQf~G6E724h$P0xtC4TG6zxp}q;+JNHJy<+AXefsx@~TT`#9OK z&&eWOPL538maLLILQHZ+)~{JJvu0#1%sP-&AX%PlNw4JN$q~sBr%-U#9Fu6{fOO+a9+jJp5)%@-)>|XyUYXT2J@B3yx6$-xp=F@hQxxD`%>4Z zzMEDg{qD3Ssrl13r8#Mh)9y`;roNK$Yobiz_4vWq%IJW|bZe~jfSH8i#!|O1k|<<5 z;-Z(56OvW!TK25ui^-Q5Nhy1nz1P0psX#91C8wRcojQjDZf>uq*M{nWZ;&KUP&x3u zJCaJ6-<;k=YtGm$?U7`EE@wTG70+6bSugYY%#Sn8WRBz=nUgY?XMUP>yZtWtz?|gz z8+*SRRU%oDNzof)W#iovZ>7{ut&(;*ZE#xgw6yeCj+!~%N#C6ITiTek>8b5gbETF_ z*&m-0YaL6(=0v)a+stnsB=-2Nm+lR68#^oP7ETlALAwZ1p;pAc?j?d$!8vY!Ois~p zK6XDNOPl51pjl?}+M*Cx0|%DEIbHGlewv>Vd$ zr#H&cJ4ZCf%jpBt`=o!FmLqLXYD((;iKg-5@kHDqKYJJ*(c5U@ANIcRo+6&!#_ni8 zZXcse_DEKaclOJd7qI<{)5-s zu*F6+Cjk;wt}1Y+VtlCLFK+vlA2?nuw% zFRP{*k6F>^k?04pV)34dcT(JxjMPukK1+|KFG~9&y!W-{I` zXD@?;NoG^OAefeILAj;a4%oL~bO0w~&ak9Uq=jIdysJ z(6ke&pQbKJdnx_)^iJtB(o$*TQahyfOzoC3HNG|WKzDAMSR!g(AaWk2rUfu}z zRrq$3J<`6A{5bheasXUfGuiq7q3JBZq&S5ONf(CbYLU8xs0fM``Yj6!g5(2^9 z^~DM965J)YI|P@Vnb!ZV-S5v_yIFQex*w^h>eQ)IdK*2B{x(uUf2Y?qI)T=wBdfE_ zEMZ->nu3zIB@gTch3SHA74NeN46|yiuuU+an%jHeGEBCPgNYY67qYivjYC+3PmvPr zeqCQ@4AT4Pd5qG=L^BDa(cO`L*R_>8S_iks6ZAgwcJ_7irww!tWTZAH8#nYqhGrDepXi;9qxwRlu-Vp#HUEGGlhgie?{>bp zx?|^GlBwI_Ug>G=&EPxdtM4D^|LPwas0@?iQXoq(E-)|f#^1&N&DY9jdvB5(2$Ktl z)rPAl@vDC0G<*mDW|5W0ng?RMp6u)Z)>UGom=UL6)(aTx*)P|?SWA(0yKBb4y6FkW zr3c7kOU{u0fzG|>#Lk8f^Vw-mr%x5HrHr#3Mox44l~oN^&lYnO?48rbHe;qy$;f0p z)R*h4^seOXUNL%&^$+@by_VsEuhH4OXts{W^r;(k9Z>x0E_J_F+g;w1#k2k z;os(uBFwh@1p|EpQv-7Xfxtk2dH-o}cP zW9Kr0(l{V#CqT-6wPVTSjuY0InwNsj<8E{Z?d&Ax-zSqp)JpT>9!ae@yzwiIzf5AQ1 z_h0oj_x18V_N?-Ja94IO#6nWdJ(-m z!T35_kaD`rwcR9(u7O=~~*Es>kT$=rsn4kS*ERU0!^*ST$ z6V@uuB`Fy*RC0f%!cMG z^E<9-sa4U=!O0qkpR>APPuZ{mzY|sW0Ec|+G=jZz+PMdgJ%IdCeV1i7aNTzf*)Be( zoh?=Ft1R8_;UAhActr*cx z9lTB(e(En|1rI9u@enMvrIy6q)BU@<2yDxPo)?~or;)dW_d9In70-UpLQezFYxiDq zZ#lH|+V8N5;BJD!sIDO}%*Nwa9mQvP&MfbNQK2%*Bgk^Jw{kI0Z>_s_Ay@^;v5^~y z>Z0+mqwrEyd{*h;7{tHzyV^L5$w1a;k7fsFUkWSr7h?bG*paVxcdmZ7-Pi7bpA}P(N;<8wNb!YVWu!sTf5m=)nN2y zw?46p9$DMD<`l4`DiJkaftNcDA8@Lsx*xi2vMygd$-E7{eZ8~2J-q$Ai@nXgg<+x| z@nrLCcGq$b)(U7_)x_#-vJ<4VFiicgqwUKD^Fu1}oP_!tbxa}~opTjC1i9PRWPlA0K zXN|)vYsVZXheI~lu44}5=Pu?8>y?#)&s%9JR=_?8>+XQv!s>*zzRlIF$Ff`?1JlmV zKrFV^?#k!TyFsM$c0qqbRs`l>N?$4}%&Yp2Fl59^V{M{eCA7NlF zBM(*Blg2a1-3^9SAI*lt`~~(^9jus1r1b-_$8Pv3<=~2y#M7!uj4_Jya5}L>Gh)Ch zu8E+Y&0WPoL+E%38mu$BkBCfabGId(Z+JJ3-I-Z#0_(QD-IyI*4V#zRx{41J2UBdL zIn;c}xz^G=YK}ISaCYUxTi6^wx3kTCmTvw)K5Bv0i&ePDx@HZuH(3ARU#Kuis>A5G zW$%=g0|M_N5>MsSwtG8&GcQeue_n%Slp~HBL7&VRWrvaxCP`MUw02(04A*C=JK`?p zndo)w|((Ld5ta&g~o54`dWP6-kMEa-fB={h2VLKSCx!zz5%k3lN zxQ^PHh~OFtHwgQY29EkjXCEiXUru5B5}2)vF`2*|y|RO@@x+Z4VP~Il(ls zQU8Fa|4^&xuIEnXnc*4c`PWm!o6g(Qd(6AcJHdO-JK1Y_UVEP4ttav^QW-_P!ZKHF;`>R?X6E(1^@H8W>IS#`gSpUZVi}yL1+Dq8AFEpD&FAJ>W?du7 z$Z0LH3c$7-#eTiSY<97a;B}qmgnDj0VP^Nh5-E%|t8Wc-wz2k8JGtRe%(h(48Fs(s zC{_l0Dx;RtdS}()dm;OU+1kEuR>o=!VdQ?b8rU=0r$g;p)?Bhs)2+&!!_TaroYh$5 zMmAl`ohxw7n!>z`VLZkVf45VLDmPgjP1H&-y0TNXa7+8a-QB&GaVfz55Jq-?xa)uO z|80D)&xqV{cXkKdr?d`QUTj8Z_ROD3Gvy(cw+XiIVLZk>0v=v2xM=6G71ixLus?3X zS0BWzX5(6VvLpO*&hht7@cDj#E&Lj$(qJsaM9`!GJg=s$!%S#l9VV;%8__~B)_e-< zJo)b@R(-P6Q{cHBglm4@s_9gQUva(s^WG#qJho2mHhO831N?*6sw7 zun`pDdoZX+&M4PPP!=?+oI~KqC*gVJah(B)X$i_J+Tde2LDzur)mE;%sw)%7>t0fl zsv}{qXJ;2p)Anlb;eus#mvN_ek8@Xa4}*7Ez@6NET|1^tg1wSWi_&_i71Uhn45dFz zus>XJ^p1T>r9gQs$ZYtQ!m&SKkK$yTh-JOb%1Okm9w%a001u}IT*qdx3a4=9G=#M_ znv)@gJ%bV0X^rB*vfy8o0mFcvOAhr9EILZQ_)!iUlp_)OKY9ql$H9aRzff2dG21PyS*%SkYrF++*?p z&%n1tm+TD4&@ntT7g*wTkhetOYc0q@UgRE2vBMU?`LdNC)n@8C^|1O}{ZY$7HN*hz z7j3ZC23A{LEh|i!7w`kNsDG-H;eZrY4}zbJQ5s@>!>(`Or-MNTn}LBP0~d>R2@qbACEnZ@J&04d(DdlFADBE z1Z(~WwqYF@?2h<6#|f~X)8q>r?oPV3Tby1}2`<@l>C7m7aA$%n^(J!Y2ZHl6_Pr%c zlA2(XKF&6Wvq<6zm-B|TeU-EQC0QUlOdYGidy;V2poot&>207n6%RP94JqP66Rpt-}T`j7J^Ea4lUx z^P~rRPS9b=$vj{jMepS*r{MKZj=_^jYf7!8Tu#mg>euO=I znH7JZ9UQWKTu*7Pd?qK54ldmXobjP6l~NDp-w_y{<*~`r)y6zI^H^P7)N*PTM(&QX9gP2HY9n0OxD9wu4Y=kntbw&$UrTmNkQH^3-83HVTt$5D zTy{?4uOR%P&(>G#Bg{&LN|@yQwhSIlH@v#P@cwtfb9@AAQ{$dez-lOgZ{C*c9ZjBf zc6{zx@=#K{yph$hk=-TZxD`wDH{Ye7lc?RUBWJUadz=bBKbw>GH(osqq*=bY!kBE% z_hzgZsR``E`t88Kno;>v9q*?RU!8g8MDpP$u(=tr=fhdEPvb{v6l}t0>?)XEYBxNA zHE_?5F5N?r=or2$23NQZ|b1<6K zoSQiH3EtRz;*+lUFy-uQR0k!cz90qPGct0Oh(lX}42@>rtznFAFv}X_Q-~E%BYu3O zFZfQdbN-w8>PM%R8q<9c{utm)BX7F_B_L7LqNga0aV#er=E0gjgkl<*3EVG6V-i5In}aiSzvP|(JWTirTB`*KX^_pnCd>FA^m@)yFxiKDotVhh~8C4W=HxV*CZ2EhI2iZ zk^I8Ao?&$VX5GzaRSjbIHDcszFayP~;`w0ZB}FOU|<>`RE4t4&B)^D_lohx8SFwQu33fYk-v+NDap{Ws$NDYjl9eafQkR17cClU5%xaB9v@y{R&(wS9S6bqV!I_4Lgvd2Msmat#Og2&Y%3Q5bH z8umME!&$~}4{K;Ee9nWghjw5mF30b>ube(^7+|S5B};IB-B=ro*;(hfdr>ja$Z$yY zeod~v0q3jq_Grc2i$hPAlLMm%I^O097(zWQMAhj9lZ$;QkfZd%KV6(z(|T#rN=4@aT$D{Z}2^_7gvS&lsm;)Ew6{ctHmlwJBV46-G^z6aM2p zAF?KnV@>9JvZLlI@+r=MTn)EWs*_#=6X7&q>$9-?+*)M0V0abTnuFL~PDx zY~W|?y4!Ubo36l%$Urt)cKj%INinWDG5NLDWOhW=t|Hu%N34!ry!Rs3NOH1}Ly5fd z^81(g8`uMLl>zOTSeXJJ7T-#)-v$pf2>W`PoP3lwROxX${G5eSo$ld zr5B%i5_dU;?|+b)HC#nlVIyExzft0p08Rge%|jc+{DMs+9*asvV0GD_GB{66*w(D&JJ+BVfbkE z@XmUJ+H|Mh>~H*#L_|JMiR?$>*%z{tfPFjyN6!l?R@$yibRV)}i6CE_rKq&)N~PUg zMyr_hfQZ>3LM{lKdAk)&{bw$_1%6B(PKw2@LCOTRptf53op`^oC#(04cPn^vl0X|O zubKxE1uptKQ(w2xm)^J2`!|@!B`DEb z3v_KXd84cLU*xR4L^>fQANFoDO#iA{Yi)uy8m9Dj+C|P)TWPIaCEI$I74?M^b2qPj zLI$s*`P|rS%rS<*V_plZJc*gs%nxTi7A#-^R?o}%nUZ_&gil`-9`P|&#Srpuy zYHc&Q83*Hbz0ro+t#xFC`WaJ=ea048^oOVl7)PDnC$kL*U^gs73u<1^QLU3i&94=3 zxAlDQ?dm(^&q;M*w!pMN{@|Tpim0Pe;i%G4MT3(A(SdUQq`oBHJsz)Tp;krpkdxYM zPodW8F>!i+Yo=KV%=R3(yKbuB4sY$zoE06&DbJzuAxfP~C2vRAy%r-H@qoVOlKdQf>CZaZ3uGdBpc*sqt>RJF&e%o9G ziZlfKxB^zfNBlS4zJ^bqjB{ubJjm5bO=Z9GhOzOJFDmG1>}~6t;>+M)=ilQW8%P{1 zLEbBERPA6U>b$=C7y38(=6X|t-CxpjYwxi-Rb6SFY4&oW&zDpQSGEc>M#+fiM-X#e zC&Fk;w2&LSdV^hBO?jeJf#H0CTJYxh@kzlKQ>r_Z!pc0?YU0yh$bZd(O+U>{X>K-Z z7y)uygTd&p>Cg3s%=Uhm;&+ViS%W^Xu|-&n->u=y%y{sF&Q>Kdv(G{JSDRhTAIbD= zHI^91$Qk<0%wV+V$%T|Ar_qdzU=NVti*U2w*_H5Bj*gx=Se9br8 zcfdQ?Gg-^6j^V!kQ&OqvmHNbvix~gecsos4&1dluQ-a+zuwCG(ej>C0XRCtsOpRAi z2+MKbRgjv_e~6Mb<1PL;qq^HKHktI^b$MJ}TY+2n#oOQVO;iW;-5 zW(j!dQ^_UV1R1{vs#b;C=+V|tMyMfK-F8%Tp9PnhOWtZ5)h$EGqn@_j#`_u{$ee!x zZES{b@y+gn=Ux+EJ{DQlFps-=WE>xU}3G8?3zr?y_Z2vU&U-2kNdq5HBs8Vsd{r=8~u z6<#K_MfJ5j+BYnCO0|;G)^&^6bRd>FyYmrmS_9oU!09lLJjq0C;A-w<4)-vNQ{%Q( zn3cYQSib`ZeR(YG9daC1u)F_J2fdv-kIh)uG5A@_@Jo;KtNqX=#irPD@|E#5UHzL{T zR24r0Z4rKbH+-bU)Vvi`_Q2p+ix0KeSqL9$G2V6orMc@iXYPK`>AzhqloV<#wVfZ} zdJ8Cjv$R97iByXCVh0|?hFPSH%tOrpD8%+g3ai2ZnluJ~AT z41Q!)#^7)GE^oO$QEL7lk@+*Qg-`4`>G>m?CI|39I^qu$!Rss=(cDmHqn!wCoIjIS=Y-+R5+-Q;~=AGE47Jg7}U#lNFEu z9?{|{PJ%c)F`jmazdh%b_lYW#^LfoUoBFZB#^B}b1dT|^svm*x`72}Imaj#ytqoT! zzE>9RH3lY2PG+W-G8X)yGP$o@N*ZEn3;#@2BAortKm=yMDf{0n|$ zZ@!NQAD98!Q5TO%`g4l+EV{gIbWU!=T|B@l+m3fF3fWunp5`#7%i!fu#fvX@3467T zRkMMaz0SBwuS?Nv7ezPG<`H)K2S)Y{|4!)8Djn%XrB6KP1$cZ@xl8FDEo|Vw`Q387 z>GARY=uBcu=>fcv2vOpogM8+`cn0PP-s2u?>lLdh3BGa#)|m9H?8yq64(hQxo|`WH zyw9Qo^BC)O7N!sEIlQ6WpcTu=9E{=K2jWk+1aC-SG3JB&C4Ch|n#vts#@>IW|~A}UUzDiwk~nb5uX3$cfMx^%@l!{>-5 zmZ*=3zS>qS^Dh1^YFOuZNS~j7_*r@pCMXb!Ql4~b5v?@oMk8I15_(?><1iXOS|VEE zZHrpBRGHLdk2b&(2;WnbpG)#3O1|ar>a+6dXs%PPPjuk^<(l?0XA9z)u9LA)qP#o} z&wUQFJ&*4T;@69)knUsrt}~OO1Scx(>A3&Wd`d$;Pq?WG-5_O-8Zg5WE7oAHOE5;l zt(T5rvU6YK(aNVDWex7(Jw;bnW<%6X4>3N{6)K^pjHpFQK3-VIGM3L772yNR=L?He z6ol`wc13YeRQqr8H|e-?o7aoV-y2?QfxU^smCQ>T;(n?3NY7k_d97%*iMs0(EZsrI zU@m_4c%qA;U^U|y2jRU9Am-{v6f=#zB;90}5Ut7XIm@fQ##bkZihXvXI#CR)#k%gv zo*&FtKfVuVzy85vH0Pl7|LMwiVeWP!2C2)ONT+zIvk@iBH1R7)RBok*m+0$Bg@ufk z^eUBckSS(M45iPpmL2#It?fZ4-*ZGuN2>dMj? zL%KRFA{Q%_4hLE151Ai@yOG`va)o8M&uTCwn=>}U*~w$^P=3LhNq3~~jD@IUS7bNk zV?{}iT4zn2QemlinesBzBrr{s_w>>sQowWgX^ZysI+C?c-O$K*nJLC&gr{ zb)-UJ324!BP{XZQz5P6-HenIAU%HZy37K#=qw?UeXIFp|`v! z<4flr>9h5PSR#sf$$-xxUBpBsQh;svhL8(&s=EB^|lMM!)8}bhUfO?w3x%@}KmKO6XTD z^C{h2AM)vodDbcBbx-_RD0X;v{A$>NB^G_U z1jTrH-^aZ28=of%yy=)7(a2Be&R3n0Z;IUz_OxgYwq#|CR;u&``jMFut#Z+i|B>A- z7DbfKtMOg_B0mexBdUZ_T~mhN$a#_Q_=)$BzBaPLrIZ_UeCCUhl~-pbPRLi!Yl zvZ?gLkea3cubnIEmNGhG+ePVBdICvbyeI!Rz90CDR1t}ixhRS!bSX{H7fE5yC_}C7`VAl(R~(OQ@K95 zzl8p4Qr99qug}DvvZ4-z^~4H?A~zxHi!r<16a*=bn_y_*Ue!9)I=-n16h$`c4l&K|B>ClVP{o( zdFFb8o{H|tYFeic$~_ybv#xdSzJUwD@BO+vg;LZ?p$CjVEQPA{6zV8tu3f==rT?b~ z%r%yD9J^zEHWukQ^|$&BtDutG-2v9hNiCg{&dE%MGvLakM!5$OzyGOx?^2xOuui@@ zG2qOXTyMyRj^|)GV6}EKDpOpKmG@2`J3m@YbI4PiaBU~6Z4ki~b4n0Vymbz^#u2L> zchPHxc%d`#+cY)3dj@f84>b#H-)T-w*FNPd`UT&)J8SQhMy?D*j$NthNCQG!L%GZ< z&jMfc1RO6@X|JwTKPzB{R6Et<%$exwM83(ZtY-IYCvN$l(~dJE4>ix*(XpC@CBNw8 zqLL=7GK10nlelI)*`&PKcIh0v5=^Zh5$|3!G#-Ls{KZ^dB93WJ9QE3nN^Nx^Vw0}$ zGGfS%{l=@R5uJ2(-Nh>kIA@7!zr(W2N&ArqU^^(zEjvG%ysJ(nW_Kk>=przuS@u)A zDyVQdu;LUBV`8Vrv)ah&8_0bLOZf{iSOMPY3OT4Z#8qS9qqQKfbCH}^fY^I7x#$kW zZWlmOtAUCaAO^cb)-EeoRTs3p2zlt9yjvwcMe43D<1?JZMsMW)N3t%xoD+Mgi18@{ z$YV@p^`&Et_b0kIz;7KgG}Spp{s4s=&FNbjbUY7nX@8{+`1l~QFLS_!ldIE}<)}04 zA-{e}U9Empexov>JlU&nu0-f?eqxmGkgJy-D1(Tq%MtTFCO7e;Qi9LDOxE`%d5QO~ z!yq9ClrLn2-nzOHvEC)-zu@?kNopK9p2|e*nP5~X?DmZK0~gW8y-#JvtS<_Q&8Z5Y!7crE#`+{Li~8YimwBsqxW77)j_ z;tbr4$5DuE@=LN5AHfsP!4Fx$EJ;vzs$?4Dwzo>TW)rC7rs z@MH&ZpHtW^w%wewq8RrpUHEb`oA=p`JLrvgAKW7!eC6Uq2IKMPD&h@41TiTJ7px9B z{?DMnRmpxu;8tBn@8uC^;CRr32;-83wKReIIu4%DmTIH%*v;~cZec8K2{>v0@t2K^ z-WbNO3D?pMOWO)xSF$%#nA=K3HvP$mEa$AakJVmIEm$R3b@kc36Nq>Q^6&g`zXr17 z&VqUD04YhqzOI43k;fi~U9Jl%dxV{Lf!~xy+wuc!n%i)-s$fTAz}RlEE>pqJ6Mo1` zP?Z9BgPXu{%CdTHI>YhvAK^kogRR9Ti$(D)77NfKoI1z+BMWUE^FPv%yVihz|8+b4faR0okppt z)d9*zyriSt`!KF!7pt{}BZ>k8>=625B|%U#f;-peKGuN!{s-c@6a4oC`0!6=Iy1(+ zZ#<*EB83^`Uqw+gn}^QXFXj|}s*R>&doXv$cx6;WJFFA+L?Ki=zVZ&Qsb;AM!+3<1 zmHhoe5c7KMDHAIwx#XM98CMNh0>jnB9>=%YU)@tLC3cG{nXc~csNmjJUyyT|hvl0O`%1^Y zrH8vY0>;`XbB;O7+G|&4El(jgTip2{Y|rta>`mZA8Jw{@Q6y<>?luykjnt7G&96p% zLpAnL9kM)9FEW=}q}rULvyEFu3iBd}dNw1qk=ZC`bTuv+AB?j+9`Vz3ILjA|^kz;f zt4hE>J%L(LD?1DL;v%Jrr(f_=bW}{bnA9;HqB{A@dfnc6-V5GgzP$c+zH|_>b7(bP z0XTI%ogB(Wb%J{Zbs8_d9!BJWXB0n`^IC3Q)3o|ZKBt+L${fs9W;K(OLHc4ha;d6c ztBv;QFYqcIm=``+Eu*NT`AAfr&PirRTQ>C*9-}!d`MzdavM}AjcL$+fbd5|=W9u|o zkPXHfV5gfV)~$q1cx(1!DWe4vjwVTM4gmr}hWTzjdDM-c6nv?ndeZC$IIBp;&EQ z&y-m0lY57^ihq#*Ihvdqy!SlaJ@wq5)sh){{}^rI5Y9Z?|!cS7Oz? zXxhbj26&%(W>f!=OM9wpq7pQ{Gu_@~-6FTu$y{M1F?Q$~jnZa8@_$kjy9N%>2X^dT zst2Z+-^iKOLo4TiUP9j*35Ab`Z-sA$n?znm@=?){&IpqW+My3Xv#*2xi@r^-W}M=F zTd@a9a<4`0gKGC++C)7Qxf899?Gs(YmqKZ6=XRY}TB+By5}qEOKJNS~r-%79vRZFt z?@<2M%6mHmK15B4UJz{W&*EF>8KnKH)Z)~e=!~&{rm`TF(MaE{k2eOJ*R1)@BP9pS z`Z=Dw-s0XZo&lbIo~`Jaw)F(umDL#6KI@UORqvt)QIbLxj*129W;u~02B-=$dI~!^ z5j>$*8%xrGKK{r5YMl zb*Kk4&AirptG07R-Qph|(>bM`O4(v*S0b7;p8Q#uvk5)w09RHD!&K z1eM;*-fZ66o?4#O?weXeZJ(yN->9Z*oYTw>SZ~SB)i-`HN5Rjo;##0IgM~jqJ*4z< z_26tSM@D!TS)G#hb(9x#n57Lj^EX2u#Y#1)9I9Z{qGB+g@m!xt9;}-li4@oG=sz1B zjASsSznN>$Qkr9?aIUG9eQTpW#i+51qpt);dwj|w^s?4jnc;M{P>*Xbw3TXdS7D3# zKYfeQ$DX0gc5n2J3%(?`chIkUI%{iPh3xC77o9fGnf=U5WE7eINIAW?kz zb?n*$#uig|Cc75|lE(~)O%$6ax`{u9w%)FU9e-$bampx7wNdUkEtlHB8DV}wG4CI9 zptDpBcoziHM~{ep6-?{*d!p11)Ka`Mqp%(At%&J1KkMJ=nF3|y4llOYgcgXSEj2m=s9K4+M<$`+?B`q zhw8uIIXMcFLBC*?Acx)&y{KpCb!FgQvrY-j@S0aR$6aIaa8tPo+9<8+@AXUO3*=vN zc{c?9j9wYDI676(?YpG)am_@|x<47=PDW$ShcWt=NVCZC$R6EernGg}8|^3W7GEa+ zY2RA!5%()Hc+be@R8~sCQtCm(5Qc606DqGCtsKrf*I()mIMBDz-yNg$#3$3?*xZWu z=F>WTsfB4_U8h#G5Gu*bQI0xh?l$*ObyYpFkCR4HrzQ}C6Zsa_0L9X ztGn}^R@e79_&$1i%&F*8!QQ^JT3#hFCw@Ax#VCA<4X#+{gLy^&E3z$8*Z5#PaJk&o zeFcIKqb^4c2zKz_^E^}wx;nrPA8F1tj!|O8( zZRT6zo$6`mE}$hBq2Kd7{@nSRqXN4Y|j7IBK$uZ;>+awemxYZ2#?lHJqF zUoV&`>SOSH;Hj^#$5c}(vz(-G+n*SB^vBr2_Tlp32H|DlU6EZz4LhT9MAJR%eeL`O z{S(lfoQoZ=sAW?VE7xFFPqlWL7N=lNR^DW+bUWw0tESqF%7^({K5dk`T6sm>vz+|d zK5P+;dCta%#sccN3X)a6W7K4?ZlnVH2GwypSyPwvo%#{|obKpetn&)}rk=w1YW7q{ zc}LKstw3zn*!j`v11&uRwQFia)XS==|EkfNqIz9>tRzMzX6aMpmeI&AuPk@_{Yj{N zEERP+_($NL&-4^`-%@{3+^!M!TywpiGx9MM7uPthMqJHM>&ORVvE5R+t=;!D@;&tZ z=X--*^f=#P?`Y3G&8w16w33<|^wW{fk*1M%kvP4OInDZrV(l}OD|f(C@u>e0-`6AB z>w{wGUVMme@GhR{#q^z#zLCa}wvjQB^N~!j4$e^R7}gWxP5EKJw5J+zy0H;8#|uV5 z^MsXMdFsC8I~VXr)rK39*Z;(`&Rv%Mu}#~7XLp*qnJ!8(=dyWEkJYnN`<>BzVik5B zRxh|qdTXO^e&3hJ_u8}6y%p%P4t{P^c;>IH>1ICT-^ji2(D06MOX^`;nSJb^Tu+ol z)U7vjzjPP%Wc0j5%kDb0SuNBh${o1of7)fOdgfi@g;CKwWPT4zW9$ZO5lZA ziMj@p$MnI``$vgZ(^K(rhUhvyH9;!YA{SZdJTTBKxTM#}{9Sh?gGF&yDTVrE2AD8S z>G<$XJq{b_J9QH|;}pt1Vn2%rMmiW>0%yxfW@RC<&m$u2z3{Pq=P{Q^{vhx7hh}wzy#EX4FdE~Xv;US);=IJDr z2Fp+N5N0#fCRrFRxV8TJc``=XV}$JVRGC072jt*%+nsk*W55}k!u$vlk^|}wZRTn(di@~ z8T88Bb#tXR%-ZR2LSHGb8G-4HN@8U%k#A$7&344XyTKNGib)p!ATjbG=EVh*y+6+! zi3Y_}vM+h*1yC1kLxr`UldCERGd+d#mc0K5s?XblB~?TZ?HRfG%P7a>bRC81+K@+E z?x8Cwf|`L>=b20`okN+Jcv;v_D6;c@T(A2xM#q$VYG1JZiU~O3&f3EP(O1 z7zRsjkP^XBq_0q6@a5a!LyJIob}|CO0@y|znGRHG9_*DJw#xc^Kt*~V-nkZd+Fo`@ z8?cezc*Q@U;D3YWCE+|6&)AFrHONU0=sn!}{Nz+Vfk)3LCY=M09z)h(7PgM5EY?}5x{J$&N%=UIJwV9Y#3w=N16#Z9!|Cb1UN z#OEt5YSX`u&mm+6!4|&lIYu@DQqz}FJIhMH#&|6vUKkEzV;1lJ5DY5B=kI6dCPw4u zSMFgDIjvjd3ZltOUIPQ|#OlZb@>3amI2#)x*|7CQSTz~XGV!R{Uhpze^~%nuT;@JI zFzYE;0VS|C6NttHAHNO~@I0OcDoD+*AdlUMUt+K`TN#xJ%#kQfP2@3>?DKT6%;UU9 zaFd&i-BL2t?O|1y0KKU}WIr@M`k%#~9l&E4=++{#5=Xh;1l6%ape}RaUJGM)HCXZo z?nZK3qC@wJ+1kSUZzG3siaWi>T<;{aI~ZKCHYjr|(7@qj@s^SSUBc}4g_ARox!XXF zN#P!)GgW@x?F)#`KJ3#%KH(tNISz(E^7xEVNo?qFtjZnG2?q@H4pG`VY>=Q-^~v)z zB6rl5wcd|sO^oNa%mj;`0KO-^pSni#`p!aXrkYJ$$WX zZ%ie>AZkACdAIJY%+b{3&Evf$!8B=yMbFP3lH90tU`x+KvZYDE1f>g_oF|esxdS@( zOmG?=GDq*ofXF(M99A)QeCIIE z96}>=D4nk*FBnIDC6;l|%}y`DyXGg`lb&lz=)5I)lHBZe$(1*a&urG6HLf-U*i*{=l%Zw%fM`76)t1+XE8TJS#u4srwy=Cz4+Gz=5H3$oJn4L8mneHb9{jHA$cNM*9SolMEh_tzn9K;2U#nU_Z7_`H@2-byG!&* z^Rrvt^ZTu=?oF(MbF9>_Jj2WRCtdzNF^-SP9KGeIFk>XS)|9M`Y|N_Y6g9zC4Q95+ zvI6?^b2CP+D(_vNzcj&;O9wMyHne8V^o`G&kK+Fws81-%_@$1|+@|9FvS7=l8_A!b(Pw1)U zFw-vno|$LYj34J_tc~paMmjpmnlH(m)@658Vf3=I>ZKQ7az0V|VrIqqePS0%R`LUD zBqzI|KUQE8+=mhD`0mWNaA$h(&gFT9pGu*_tjiVbJyC>9&bv1xi`ayr8z7Zu zvHVW@vr1>zlw7lPdzSol0mjSAc)jGA!U{^n3`w8Ad|an601B{HgaIR6e&uY=!G4kK zvzPbG!Y&f^$4>D~n8u8b)Q-sRug)_wa&kSul5fTS&c^=k;1u}63Xpz=($!LU00G`b zta(ay+ed8H71jW(A+F)0Q->37DL+-`83#BO-s3;o&PK-dPxix9kJM|4`kN)4jli}kXRwbKA*_g6c6aOT@D*`iB3w8+hgNlY^Uz0^r~DdO8lm(2bm1V?2WTRIe0K(&88F!SWC0EEtWiw*Y%T z4F9q*yIs7WYv|er@fEU@rMt!Zoxx|gNzPBBs$e(%nN$dMV1+H=byGNd`mC0K$l|3oF$tGbrsW!%r&fqbC6M6)Dc@TcVAiSUUWLVna3D4s+y~d6@ z$9#O@uJSPdjTqUMbgjf5%rFfuC8F z3d68<7*BjO*i(CW+=Z?8AlSd6xzq)vF9pPI5h_`=jXuUuqc8DlcW{@gApV_U!9M{1 z{h9dvy;%%RwJG#y8jO$YQc{zZm_f~21N4=KcpiGc`l|R_`WN_vfwF<>fw6&q0}lh+ z0(AnmzpKBuZ?yNQrxofT#oYt7zG^2B;2K2Gz3ta@cRCG@R~Cd}F*y809(zG|=c3B? zo}Mz3(4!egCirL8{$2KCI_&qa?7BCs^QCw{k6~HovDcypFvv8>4Ln6H<}x~6)gnsd zRCoo^aK&(@aNY2j@VfB%@Yis%NO@xQqmi;`X{ELb;&t3%zkKi7sFc)Nc>eMy4dx4M z@Rtv|qE|<2F^6In#14+F8j~TWd(4LDkx?Uq*8)=lT>^vs2fd1CEvhc-iP;8Y8PeEM zW_Ly}nem(677VtNK0Y#@{K+XjDd^)Ew6!+F`_`~K^IaK16Jk{ls_c#6M6XtBP?J1E zNv&LDuU4co`w7hQY#^N3&2{L1Wzzdb?C`>Hp>S;24s8l`4;2kn4$TX#4{Zpg4i64* z2;U3;7j7Rpf{t8v{U_s#9jlB5TYqPFa}`hzX_LLSe}F&eYvAt^^(?w~^wQ|vF|A|o z#Jq^E8#6klTy&|Z)xkEwQB-JL^nFH+V1m1wwu2sNzq?8~%gtd%97xWC$n9|6$k@mm zP`H`l+L7Xs>X9OPVJZf082!zEP~a)cN^i#MJmwmzWQWy1jykDau+kqWUlbFyix*hK zkwjIE?89iT?4n+0s&O1ddSaw*BsOv*yoed<7fuxRg?|d~3_lO=4c`g(h`d4TtOJ@< zUE(_|{ccuvmMT|J6=>>esN7Ziy0dsw`a`}yy*+(RgQ=oFL@kI)6m3N3jaeAIHrgE% z9ep;~JlHfiBKS1$-dEOp+4GyHwfl&=pWXBsC7c&#eQSpaN*wtsaw(E3QXt$ioFWp( zh_;XPq)W(LJwIJ>R$%|yQuEmvJKToKic{RrQRWB2&bbgsjXP$oK65G%nZJ2eG zykvW)5eUOkRtqK%<_j8uc2J)l_|H>G za@tqX`zv)2Pu%a(o|y#RY=JpkfC0Z16uBO{N~w$uXnbv{)a2mSeEcQrG$y6{4~6c4Z0G@Ds@q*QHL`i(bMFi*6cZfgQ_7 zygv>5(w!Q!S#WsHQDHL*i!p<&TN*OMZF$v1P@-k9=`->PTkt1Eo%bTA@ef$wr7*pJ z$94|~o5+c!KR``!nEHN)aW6?u%){?X2o2R=`3I2whlr`j8OTU|htr;S#b9vNNG7XCdCM^n9L+*WQQtrW7&M_r(6UV4J+b%B+Qb zG8(Oi5oEM~qpEls>$ME%ZEY$->VSLHrw%zYcV2+=YcQ6zCePeLJU<%L{*9d!OPq$9 zfQGzlS>AsKe$onjEQt`NbIQ%eV(;M$Y00Ax&l1)8TvQ8M_6rma9#Mn3g7?`#b;(9} zNJp{Z?-;3Woc^ytmD=EaUL*SLMkVoQB^?z|J+Qy0RG(HvtFDzKTau4)7@_s00;UL6 ziyzd-C`DWY3#vjk+@n4xo|anKE>wMHW(On%{n!sqv4)YKPE^$rhD1p`*}`}WE%-S> zYdtM-uXrjRSQG!@;atU29L1@(fct0%R+0r|D~@^}sns4&eOV<=_>xq%=ci6BOeXjs zN-O(O-jG`4r&J=}rCKOJonc{EK6y}6$j#_>WYqrx4Ovfx%~3MtDx*?|$g?Xa?j+X9 zUAzhDg8qgW>pA{aPCPtO<`zb~C{WktdWG#U6@=%JD=GW2HT4yns3m%h`dTq6jD98G zbbw0qQ|cAEVz{Zd&Z=e7d?1SvHIAM{d(rZlK;>rvRU@Ci2R=d`a>@4?nZ|f?m*dxe z3FcO}Z?JxQuo~)7S6PU)kP2?ZLw4?2@cpxNEj!LVKDO?YvkjqYnS!eIQsiC-gR&ez z1wjGda;OT;jgLQ=NPPf)#8|i&(>cpl;bBd|f9S@eBV2{LL<8+vqq(UEN(Htq)#jCW zU331{hv%N)1bl$MnHaBJYRy-Gb3Wn`0v-Dqec{2%e9oDz)KDD*9s7@(`xB_E9>b^T zN40cIP_U%R7wRoeviF)Zj>)L^-Ov7*!}YX*{gRhY{Ti>D@Pzew1N`w6EAl2;q%X`+ zG}luKpRFHPJcu>E1N;AiX!#wp^bK!0p- z*sJ|md2NWGo8a|HkBMsWJg6Uu&N?wK?fIL0b!2Uh;fhD`{{f%?1Hei8^BYkD|D9-C zbQYwNVlH%pt8Fx#&{#9pFg{T%%76JIYt!EfU0UIXd8#@tHx+I2jC zI{xtx>b1HOB~>Hp{(*PQMbwqhi$J)Y21vhfUZrEXo47+|T)r_bVd9M_Pz;rbLt+l; zXYPxSjb0Hk3jgXnp6=hoS2MYPQI2TK-L~Qs5rm{2Up?@k`w%Pik6-Omu^np|>jUvf z*i%-*2apr_lw?F}xmh^{h`ft^bd?lf)cqXw+jzdV%Zg( zQk(c$xaubvw}eWPN35|6AQRGo{3a{u3rL<1Z%ra-iJ=Q)Nh-1ms`5#Vz!U27sLyVy zNhDYf8o_SdfCs$bt^%yoip)=UqP#ze>sDd`j`BFnZa#^}xgXqjGi!Vn_cxSLl&%(? z7+tx$60Gx_ygm!FDA=FucInLWj@2NmNFG;s+~I8d$odE~OCF*>K}ZD)%E62k;C_m5 zXTo2v$lZOELluGnqrE*7Vjs_Bi z4B<<@4<#NR%WO{|-kii-Pv9XnNYeYEHS12a%mpLK#vIZ`5bO7q&v_7^Q9H#B+6C?> zs9=H(6WxyS*f~KCWnIfddS1v$)t#Tjat{P?8iz;lC#z-_>wYGW*}TJ29*eMne_<0x zVFuB3bPBIC4%y?YJRLU8swAZ0Fe2<|evnUr3P^&HNy%+%TrBacGSwNm_GNSs2(t%AlI{A-H9|SzN{ill6{Q`l<$Ovtbls9D z-?`c=9o4-`v{GB0%e&N6ZaLRsAulB__(-X$7FSlgx+qmx$wNWkeq)cu;rHE!tH3A^f#C zEA}DJ9L6gD0~_&*Q)D@-aT9hZ3%S$lRAK*)fB2fr^b98hpYuPSA$h3eWLTDS{`SQF zKjQh@u<>P4+%#ZBmd3-a=bDMi$q>+>*&yiB1#CWC_J2W7!}Je1Ao2-UOb9;>|w#KTakNvO1zRE&UjTal@ZXS zRII!S*!ixkvn+IN*w4Pn%2X{?}}BT31H9p+3lImfnxd@88ui3OBsWeKZNuvF;)Cq7|I-n|efR6AbV z1bnR%R-=79M%j&@M)0?`_}%ZE3gD0@82ep}%sy7e0nViv?D&J+`CRPmcC5H4VSUER zN)3|e)JWHx&g{#!TzySGOZp;};v{Lrs#whL2I9}xW#?7Lz71n&BHr>#ZXyNipk_Q4TZNzMaaUD27pn29YMcv|upTKn zW!>zoubgjdnUP7X1!2FtVLR+abD<}ig4KvsO0XiHSucrV*28Psjf%ipYbpBOe-i8N zMhoEuilX1>pliQ<0sGmJTE=%P|9qBg6Mg)bl;;3>2aUeW)RyRf(3JgjQw23C?_lTF16I@+0kDZ z^YK{b^k9D(CnRR0p$6xkbzMD)lySap}f`@?I)=fV{tCnC9F6c#Yv8nx*bamZ?}^!Lv7 z&kS^qibTakkB>SMd>s8YwsdT-*n5euCy7n`bM!_3Ki<{uK~x4MQubq6ZlYKdG7}j+ zBDG=IF4AqoXCHIck_}zzYEDd68Re9+bd;FmE$^%DbG&)I-`t7aBeb94wr`x1xfY2#ebS)Nr)*jJY|9wsm<}=xMEOJZHM0 z!)v|)($*(3DzY)s2G;K%VLfy$lr~%{ye2#`l0iSN?>36ECQ^c2{cW+rJgWoEqDn`n zjHwcHCc0&mH|k1s!8*!oA)z!Sjx0bG{OtmRgI$B=qMFA17IQtA*5_!GmBh|fb1Yr7Bk=z#v;JqAqYX!& zY^*hxTBhAf8KEt7S4a7F9T?mkcTOJl=>9s&eIIt`7WJXh5zXr9paGvj`DWRxu!1R_ z1Jv(ibzY+Pn+eO9279`ObEy}47!pCHaps`qmWDcuPF6m+psB2bAn}#WP38mC^;5tF zy$w6R60H1h`dXCeKStuNN^1;&(1pdj=!>ec(gz zc`#RSQ}7vB{h+9t(chvjMQ@7E6SdEO&wWAp#WmOdLRa@F=A#=3<$m)WszABTZPs|I z+6Jj5+|xY6san|SiS_>B8S3`Ck7-A>UD|PVo$?>tk;PP1d}2jiGevwrnHH}lj91D+okDgiA^zOz97^s!ax8|SrS-h%%I@UeH z`;)J?@3ilp?~b>(Cy)CF7`v;L!{i}SIQ`KYo@@4_Gemo1oB4x%-uX+pr*_b0Yb&+o z)Fx!0V&fE6YlBuy8=|ICT04)dH>gmRG&btnVH)?RqM`?CRzpFI&lo+is`FvaM$t*( zH}v;!!E636(ks#^k{ssa_Hc)AO!!2oPw3~+@1f-3`Qdz#ARNk;bT|3KoJ`GQYi)+F z4&2Y%QD>tYM(e?E0gWyyKSzBFzKB{I{UlhzS6wUMnquA4eUT^O){&W!7J65+v>i?K z8jDx>Mi~#ky`49w|6i>52>&bJY3~o6)wFHlEvTVw5Xu2qUh z+vLvgedwJJm;HOze-YMwM>-#uQGZhWu0FP9UNcVWk0Rsfb+Zz^`!_~DGElAI&E2(f z;M>(Bf~bg^awB`P)!XbsNA$;$mXYn@@59N%7eaMIg+t{+RYEI6<-`8Sd)^_daoFg= z8PvpXs2J{t{+v;tqNYc0j~*6vC-BMt#$S!z+P?+j0(S!we9yFsF4gLxR}6oQ3x=ZM z_f|DlS!Pjx+>cz;gH;N zE3q2GR%a*9wOT#oKIr}CE9bxDd+8nOd8VC&=e zE{}}XI~hsg&h9raSZSS}%6azzzc0FIOp=)W(ceXn4-Ti6W-+Q;-}#@@g&@ZFqkFb1 ziM2pq7mf<;k9!cB94T+~wM-|Knh_=CJZ{T9lg#2twujHpvA(d~N|9YTXFh|fEsNfsuxuxY}jIP2C-h&=nCZnUi zgp*}fcz3vGWTgJYXl?DsFG!@EQF5yzY_jFv^cJI$Qx;IG_&U_J>2Q(r}2<#qAT9H=xYu3-SGYC+v=U= ziFLnHQagpsSCK!$8Odl(i9FD&nE$g1In!J#m7{75ok;%h1ycC_PX49{#B+B$;-qq8d76Ch|Sjz>IN=ZBrjh-T8<7{09CRS^p}n`oENNeI@}ZcRR-32& zr2V8`raMDQd#^d1z571WJEBIm!7=|QR5f%UZhYKtarfi4gz`k*;{*L;-be3>+BmB^ zeE0_THCJ|b2mi~cb}`3en#BATHNoG^(_4F^UIedSs`))xJ^8inaKF15O(PdVJ459o zdku7=wVwcX{s%I_D(v!=w+)4*VB*5(xWMUt{-7WuF}~Mn!z#9ie-nHQ{ZMC3;PAw<)Pg zaaqT#PxcsBoRWdg=y}~Q=(Sy48R&e(4lXdp>sKNjBjqBW$i|i=hq*u0E%amPR_Jdm z%^dxmaSIi_oW!mb>AF$bN?{*&z0#`qh6ndWuZhVO(>m&ozooaDI}U{`Iwp`!Z{g0V zopC+1N*gUAf$;Rugz$U4huul_csKZS;g=i>wD&LZzHu+pZlS2PMTrpMowA>pEA`sp zDRCFRWr-UXS{@l`-f}|fKu>;OPXAtixir84kudz|yLtFlso4(MmevCYzEsrOx8=Lc&nRxMeiK{yopfL9eA zE*h>DZV{f&3TZ`sNPkYis(6uKtu=V?apd=ppyPka%IoT)E%CMvw1}z_{a;kJ;3{8h z&naya?Ed%aPGX?J?#bFT<%8YV+@#OtG`|zcZccLYXpOup{htHbg0%u4ea*aE+{LKB zn5bk>>bPLi+H1{i`mf>laed;h#bpZD)7w(x;d77nX7Ot<5XuFL29gDK`1AQE`Z{0cSB5WF2&=ReQ6J4oxOK30~(l+WUdaTZyB8!ICBLxIo_p~m4BdL9c#o96YNqf6Hj z|4#o=dhLw#@AJj_e)2wXA61vR`q{eizetjBKllP2!s{XfjXc%_d%DvWUT{{FPhTp( z)7PV+Rz*9ao>LmR)=)Fq!I%@NA6^)$7aAHm7E;0!!`UNKBOfCj^eEIe+rS0Mz^UDz z=y)|>1?=9|FXj&PCwJKMm4@!1Z)%`K@J(QrzbT2R-us547qf+EyXldxT zaBuysiLQyd-(&l_25tua4)hDu2;B2;@eTDZ@bq_YR)2O~v342%MBarWan(XY!yh7t zjcrzYl=PaCHEpF1Aj>yX{YYlCuR2Hh&DGvHYHc^X`u*^?&@Z7ep$uUUb+6O(i+U#N zLhl(*jr{Zq%np-1FPgx&sct@OxvgYoUMg2MnQ7=)H{X-nUpV+@Fh}63w}z*(`#l-! zg4!T=PLDzbSa+?e(tuj4GW4OFXcV)4be++5d;9sj237?A=RfDY;(n*LQR>qXU^g-Q zANCNdig{U264@9U9_k$~t}ijko2Yd?J$>W+m(bO0>`&|e%Qw$Ehx(5e?3p%>-}6NdpEpQ;DNx+q7I$}dcXxMK+!u!~R$y@`y0|-w z6nBajin~+1v3v9VCVjsrPc2Pu?wK=ZeE#GA;cr2;$`LZPm5F)%qTk^%-B~Yv*Zj+% z{Ziu?-qM1QLLsT07mYo70#0Q%Ewf$*zvqH}R7=UWgAE6t)t=D~uzpZ~4U7tN@^0hU%T^HJ+kv)4Lkusb`v@HBk0hm;HVaMx%XW z%`n?5ZLPhgvn86PysNFFtT72Ysem$v*xYyOwaZ$`&GkOj8$*}QbWe7yhS(3AL0s90d>09^hzrtx2GQmEL^s>*LMfnc=qF;okZF z5!OxH4(+Rv&oRp}!qJHK;05(W_I+Q_Kb7ekvq3NqtKoo%%|2? z5GBS^A2J7w$%bThr_&YC!!{?-$BOf}^_BDP^JMdkf4YOKUP2N_6=SP*1fD;*k3ajs1Y6EzQ8f_y3gj_=k7$*DZ=y3+uYv_ z9MX?u3vLl3Z45TV4Q6kpVCKmlI_zp$`~8j37uTsK8jR|W@o}|P&_}kln*X5nCDi+QPr{8KFVm%>%CNVrJzUsfGu@k2zxuyo5GWyZo++@ zzkS`zv4IW5LF~i?Mt~PR%AwLv80Q%7*kbQzjL@&NJE`wuBHMpz zdF8UToUZHvAUpIin*>s;hx9i_Mf-Vn>8r6spN{uBizwqHDy?Ip;jxSwp<@zL>V2hDH}PP0>Ze-p*U6;Lp8VUsHK@JIE(4I|L@+jzI9Yk z&Za)3tCg8pI|!;uXI0g*YCY9{$`o7QK&W*Of3u%2jvB_jbRlY<74ANCr0#Z?!ai8! zE#XUq&zuL`hO4ajBOPd0%^6lb<+3)~Na(2Myyl$gTw{Nu*U?uo3nq`2Np~71yZm1L zQ~6~rqW80c|8MHd{tS4P{`x797LM5W*dH5@^*s7DZ7x+~Thtdyxb3|4$=|?t$g{{@ z*?rFa$+N)M&ny{uV5_Yz)OzYFvz=l|dERk`x+0t(9V_g!^vvqEz~83B|Cu|_OYAr= z9ob&a-CU3wBF%Ny@c_L$$~iSVow4QAKFT0lzQ9lB^3L=>$8(%aEN3M(j{B(sJWmDQ zGEa57C%5|s`m@qm>o+sddG;6eMM(pxlylm8qY%2`J<*BVj%Z_--d{gS-05Gv3Mcjf z(s`w_D^T3L=KJVN54Cz*pwOrT^_<31?z@?>jQK(;v5Eblj9Xz1BQ|qaJYneVxr#uywI6`TO~cqQ$nF0|P~rFtxho*4pbC^sOMHEC(aSz%R&6d7Y z-UXg5%o&aKrtuFo7g)nVxzX|E8lczm+v{>}n>p=H!_nQ?t))@BfjoW}PwgG?W*5^J zTl+465V4&K#!w{d6blp|TWy_LoGJwi`Y4 z0NU`7^@e(~ao~4Pv66w-w34pJ-nn_dtK+xi=6pwcBiU68M()2ATXUEOIRFVHi8Lzz5O>pm4ED=>TTi8drqpS)gwvWh8fRp>yk%_O3Y#D*7`DX3O_K?h$4XkUSOwYT{z1KIdg z)CHYU22w%k04*dvxC=*_$+tiqt=6DBw1)bVE=X1BZ@Wh=*J-*JYk)6)4PW;-^qtKd zg%#AZy)e^Qz3|o}(MkcTL%)*Kol0DKms!F*2l`r8;?QqFwEs!Bxt|A)}k(>Aob1{)b3#URMp3Uf7VW)t)JuPMEyK-(Z(CAj9x}cV=z1LnMqAPs=6M6 z5uI773QyIbqqCoFX24DEcM0*q8gwffWKlOGLoX9mZX2jXzHS=T3!Q8!sc@@?hFZ?7 zhFQcO(^LJ|fSS;{R9bfqW{loZ_wtLJu`>`&wPAm7zSE;+>Jh8HN-pInvs*KRYQCH5 zz2@{R45#`t6}|h1&HiR4^8u56+jG(~5&7Ki`}h=orO$_+Y8mEkV&aRoV{moCb}KFAQ@Sr1>m87GqWI}Eb0~`&85@< z7d2hxGpMo5Ka^hn;zY21a$X4s-y zX#f>)?RYEb z6EpoQ{rfnve^AZ5oL+4c%$6DGpfA=?kgG~5Pn7}8@Uc^Mn}k~1{;YVNmP5a<4*{Dn zw{cZ(t|jOC&Y}x+lux7!?p8)=QfrJG+(Kr z2&2ktIMR5vQc>Nio>xzRIv2$Wj$j5=I9E)jp5mIdlx^_wcq&3aQGeW*9*-wr+E-+L zf=(7?9=VS_ti=UR$tb2AY=S#~k)b|?owOC3e;Lun31$^Di&=zBS{i1t{_-c~x6*Wn zETwk)C7JC0-2p31}vH7 zaB~~{OzFtIgS@&=HOx(Fe2<~mDw_$+L~vVW@_Glz_7$OqXgT$~J;{q_fpe?TOOl(~ z<+

EYjMuyFI}8I;@UU2O+C2DHW-%7>S?UjWh5SYK4NW?}2w`FjIC6=d%qv{0vN> zt8jB|B-D6TFo@pu@>s&<;O?Jz0Ka(0*WkQ@Q+T)+Sf@;K)5tCEL#kO;J*c0__P{n0 zejdi8iMr%)Hj>4(>$%Crf7Qnri;NLQYoicV_FeTuR1wcYI?tptX#jHcZ}RU^peK%} z!)Y>hs2l4?Fi^5lO&-NGy9(4y?WXRcGPN}ssLU+2fbB3v zcNvC#tv!tCzL_M-Zp_xNXqB}!C zyXP=Jk!d*#7xx4IrU|}gS>|5PAh&(rpNM%iC75H;fKSfH%Cf`7$&gnb=2h(XFZPcI z(Wf98;S5CKJpRV)X?9ytusfEZ0~=_5EX9+0JL9z7?wsZv;jHeo94Q?>bZt>RyOvR1 z!j!IPB8(lFDe?r&tczrpr;*v)16t_6*eugoEBOv4W0WxmgQB(t3XZhhQexGW+ApMh zeX_n;u_aV2>e+B`SENHTP>ec)Z+a6fJ?8C_%T>*Q{}t<-NnFK4eL)6Lr{ZcvnWBhZ?J61S|n?>jr>!LnW`)Doo ztYBuHus3zibh$!~xq7?ux_UYL6Cvvbf=xATCv)qjsw;_oEkG98tZ$$SEy6B+jGYpL zm9msv{%NwkdBOOYZ5kkWGWE)~M%k?PrQag2-c`g!SuuAqVw&fKL^tBK3OKF zJu($B0Z1b`k#EhkDd?HH%pk3=r{V0^)N_JbH4(oz8ryI-b%`&z>N57HG`8g+Vq?>Z ztIWU~twk@}9&F7jtnM%LN(&~`mcmB+8!fVkz1@!N9nSoj#GJ?N*pv6kEvV?*dFE{F z=!W!oxH*l9)q(0Qb&u8r8V@vL?3JA-o#~u=9LF8=9EPK^{ZHe7enKm+_2R3Q`rEdj zdZmU|b91u)8i--<$k6=jD@gv_gGDxuyD5f@{Az}wt&^dN%Bt_d%}cEfq!K4Ne!?Sd zH#X>MZ7Y_uh5V_btfWfx8QsZSEHBkf^bfH|$;^e+TXY9?YbWRMFg8zC*5fskVv!$Y zN57c~tpHOozaxz@Ac+!!khH-Z1mBKE3eI7L*I47az$~nVV)Q2DXA;a6H7lQ74E-_N zcxWek<#=zOX`g3rXdi0K)jzTmJ3&T}d+g z>OSJ7bK&LLL>~@VF@eKK_-Y_Mc2jR~D$9~ZsjBbR_Zr#A(9S12ci4WFi9nN$LrlBv zNzN(_wo@)Gge*&OkW7;VN?ASWzOCc01hq?(C-Z_Wc^_`AN`+1U?s~_k&?R7-Mu$r^ z^)K}^GhuUUG3d~S?Bfu}`hGTKA<6LebQW1gu)y=GBjS9@9tEU8U>|bE-EoH*wB)TSlqMesx36`b0 zrU27!TPx40``d?g@Cmy#hTPMAv}HBu^~3*^nyBqWdEY|0iNP+|I!LI}*!?ww^vuMG z3}bEcIkoM;F6+upHb=sjW?I@~bH8;EFQy}YOn&gT($Jqf8jT%}EUaOSu)nrXwx_pe zw->NqGm;v0^|j3A^{A;qSz4){0hOeIRNw|iTC3R4>c}&{zoHpxo`F}dps{YT)_r^> zLh^mG9tN6IsU1m|;b!VEUMP`4RG$NCEp3$6lOC^k>IkfZ3v}z zRY@$_bZFO{XvrVssQR#@=YutyS2(dh%=AZLK3vw>Nry z5a*%?KZ%wx#mq1j_PH8zp#j!kJ-nHURM6f9&p0pWMI+eRTT1thH7`!iAdi2 zbTj<~ooNPDt52wiDGEZ*P|MFgHN`@|$ccT3-SCM@uJk;zQe6;AC-*b_?F!gKz2M(< z*n>B*YhU8YG25Qq{Yd|6Ypmgg;A~f-Q|C98qSfe^uv2|Cm#M#vIJpijOf$9OdP#7| zn&?%rUmhSqYH4n&8Rn|pRhPPs9`w(GMQmGv-S-gO@TyeBX27bBLayJ1&eG-gls?cx z#Ol6TE%Cy#V&~ey(OvCK-}o}UaKDu7^j-G_E9)#hfl=V-#;E)7q|-80 zZc7kJ_9+?Re$?8!i873*LhUMO+KoU(P`Q_{#DHX$YC9_5r{X6aCJvOAey8o!^^`|W zyrm+%4Y8H^$`WP>ug2CtLuBGOorMQj>pZ0c_2@BhLvL!3bK|jIp~q$w9TUUpIm=As z=`)dpd-U2}!N*=jC;vGf|MK}G$UnA0>okY!THwJhq$}?=ahcCdDK(G-wTS>t;4Yp} zpDweW=a4a(O7GVekgqO*Ve$r?r2OoAYcQnp(f^lP$-z{rQ1Y#z{GJY+FsJgGjxp(@ z8OK+5`Xbs*3O>U6;5Ce~Poiu4hza0wOTi$VHX${~Xo1_EjIEb?w=%^Y^g?c0E%LO~dN$%?_ohs+)P*_4gSP#&lN~4!j(T^Q# zy|QkwqbsZh)+FRmJt_vua*_%$>7X{;+k(#G@%(Qsh;NTrdCuSzw1rgAU!yYL!PT?V zjZ~G|_kP^%dhT@#9Rug+g4%&RolEvJ3@N-2D#Z5z4WVwn9Q02__5CNR{blmeORnSv zs|7=X9tjVYZz_5R1hGVBGz=h@6$TG4XI)2wC>-DL=2OBiC6!8ajMM<-^A9B@T_OSK zah(nh+35*%FjU~)TxfuM^qHIt_K|JJ-<8R*VbFX+uybfUzlGDSaR7Pv5GpD3wFvG? zd#e8bVh1Kk{k#yknB`(kb zxzUuq>ej@``ViwAMTOloc3EcjETSJFJlK`Agr2=MblYy=`?6qXlJuZW=uM)98pXjF$eEUoEN?s2B zJVQ^#5o-RWll(t^KgEBpa;G=p@k>belT_JCPvjB)cZQA#nHVovPBN?KBoWj2IcJYp z)mQXDLi!&B2}_WeO7qF};g(LE_kP^j2<*lINT{ytO?&RKJHPkmIq5PR%qx2FpUymF za#TBZs5S3xir%V>jF67GBJ7v+1(xQ!OfJa>ccejo$g~#eFV*->CUeQ}E~uIq8cBbi zmyWpjzS2AVl-X%F=%Ks@C#^t6uBAt3HNT(Y8Q~uQPmuky-sYk0a@Y z=}A1WJa-~flG4IGg|PVrx2X}YE5zSvxgU!jif`;#EN4PGU1h4A$#XI_=L@GJAyHK6 zy%oCjV7;yAtf|N~Wr~kXEy~Mo<>X2US;tRg(;eu%gZo@f@7r1)5!|u#(uKjPgXoIw z39k+&Ix>mOudU_$Ib@1_y(_d2Ay8>+W2`#vfs~K3!wg~T%c|6%zb(Y}w)SUhV$aRfAr{8?)C(ig=I@CV$n@swNLpKS7oylShvK(J`LS;=d?l2JGCTcWbb&lJ^Vo{@BafZPi2c0cR8Znw908N+v(h4>~&Ntv7^8bG9d zBF;jJ;5m|WBYncsf1HCI%)t3d#v=t^BJD&HI@w=GP(#RjrSmQa)DkY0hwOJr9)d)s%k{gI*oW*92_AFm!2r=lOc%fph{NgqQ#0{TJZ#E6_?1QExzLnbIhe z@nMTD6AX#^@Rsmb z%b>N?1B*%e?FGTIIdZc$k6JtgU$+*&*W^7SUq!N3f-+(y$sDD8aE-`KK`+bLS8}ZQ&574 zP8D7^IlqF}83zXm{(#KPdmNOx!e8{$vgI6maE9FyITZgm#_pY9Z!WPjx3~kr3lW(k zn3A&k)X+%qBZX@DkdeiMr>`u$7f;vtIfOFnv;wY#p(QM2`zU z2qKB-o%s2cu~0~Ks>mp@m}DNQSST{#Sl%ZXrmx`&`CGL9Gk8qiE%u?{^WKNrqQ8X~ zf7vUs0c4u#CgkT@_H8}(_evy(OsQQLlnUE}J9reGCf2EVRw4uL z@hNiB#X6Ij(Xtk?@WdvF3!aN#>?_SM{3W*MZ(jA2zkUWe+JnRu%p8%9@u;Sv$K%hj z&{}p|WJU(gZYcZfKxX_`HH| zBeO@vBfQGv0@sj}Bbq?gA$vej7Ja&5b4Ok{-(z!$sd%*GG($Xztu*1 z37)O!$nO91|Hi;kGNX19yd*rejM(r$`1=14Rhk{d)euafVZ3St@u5C=g6()TCF0W* zKC2#-cp~Sj1V5uJpHu#S^1o0}&Sm91$XU$9cd=o!|4$o<)g)6~Mcbx<6U7G+yqT1o zchO9ukLBcxeC$ha>5g_8-iOTmWRoXiB^~IB&ygs@hsxt$1m)~ zo1iQb>+%-#yaHdGM(zk_2@3j}pe7b9JmDmn0xWuHKKf=h9-QEw%;TrbyIlm&ZD2Qr zyJVLH{pUH?7X&jwPRa=7#X=G5Lr}5m@uNn$L*MoM|p_)wZ7W*MjkRIZ# ziZzs+Rf#@ua56=@h*lPj3^ZVn`x5cGOi)I6PR_N+7@?d@a81tp#NHB1O=Pp!XEx|# zBT6Q=kMR9-_~#lj_yFf;HJ+6?qASgD$fa0&}uk%KkF6` z?>+04(;)IWbMPbx3UNX9S*Bf!Zz`6D%sMTB{wv3N8)KEpylTOFjz?mm0}0M74$YFX zLYcq&GN>)Yn-rVi0H1ak{Vso04f9f{l@$&#DYZw?+r|3-ahhuqGxGW0L4a z54gNJ6c&Uf!S4OV?%!e0k8s63?D!V;a4BmN)IPx^6U6+s)D+dCPA)GftIohLqOQ-0 zG2ft4^BU31N7U{(m=2hqNM&O@{LxTrHQaNW^Y{rF;ebO08@vX4-VwRomphqCoNhOf zy9>5kWJ2D6#1hLCKN}eUH<9X8MA`BwWt6Vebo$2bB)-*o`(j20z|KGQ8$~0$}JQfiJ`!6)V8U zT|R^F53~9R?tF1@Uq>+Gpe3=(wBP|>vvyEr*qMsC%*5Tlf^v6*%BsWEMja;he}cN3 z`#ks4bkNb74}8B8R6DdLTHTu%`7mnFCV>XC)7njx_a3xza?P?(bpjlA0{A3WWz*I~Sp$A(Tk-}?so2e-FQW#hkkOs$*R{rMqbs#XKlPbo)^*{4`52_42`pu`8}5VR)7xf=wvZ{#nN5dC)2N%4Xx zc{rb*7bNO^)an#s9_c3TzAVTJFQ}c`OP=fo`G!nHZD&y3_}$72KG9%gfS`|sb2&Lx2>b9V=na^XCn3ku2ELPN^Cyw~kyu4L*_BnumpRCqwcMYe^?#xEt|Vt>22tR?&)nDYMjWncm&I#)(*Hlo`07kv3GM1 zPtbvZfJnn?@Rs20^uQJx9?TI8;IB4Fhe6m+^NBZu%4ADN?q>#7lzt|)PKWObYAZD- zRUnh~qq0WWB$T2MPr(sU)0U2kKSiQ>yV-VQ{IEg0SVK z3hfse6+wn6i9BmSynGz8YC_PzoCOW1;6;rAKV}Ni^Wl77hShNo$?y@|PiDy{Kw3V+ zUOEO>ibZw|nfn|`6N}W)DEPg6G-16sG>7k)q<{-Vz*71FIfy-vNA$;gAF^m#o{UV`l@67Vto z<;TdWZBhO~PEKU*Zawf#6OfC(MP_CJQT7__$tPB^8)-g>_0~j+7bTa`~^@mg0OPSRc0T=G% zI+xK0$w4kl4Yf0o)sks4Y4|H0JS?>Ci7f3*rlKqOolQXs?m>UlVD4!Wr+ORq!WmAK z*w}H>H)0I$g18dulguDilxaf^Iq*zw+F{zkoQ$wjj zF0~}uBLxV!8I|lj%7V601rAk^b&1d~&zZ%MkXPhHUS{WuGB8^nq~H&*r#xt%7wpDK zaP=m#kAJe8;@yg+QW1Sz8NDf%NP6y2d||=N7j*Ms_#1+%))!eISXP~pus!fd{^h=h z!4uVZHaGT00yNXpU@Yze_QG>)j;CA&d0Cuql&Xy|DEzK#83VFCTdc90px<**D=Vnc{kDv{2?*ufDv!IL?XSK(^)_mBN;;ip9{FJr_@}33gOIB(6+f&h;NkVnH&wU80!D!OaeX-k(|TAwlT$B-jD!CAOTrf>z4a~%0?3l7|5vnzM;Q$(uFL8@-!|C8Ch zDaf0J=&1UfodGq7%=HW%M!_ z!}txADxh^U!6)URj6@$4e#%Uc-eiL3!vjr`epPtJ;EbeZuj_Jh5-`Wxhn1Ngdp<9; zJp<2Qg*Uv=XajodFxtErulkLo>W>9Eoyvu^P*hIDWxR+BoRcUtoOp!Kpo%}xm^&EG zNtF0bLh2?$xTm}9^DTB?W|5r4vTA^Y*}`?UAaC}=2@*Md!xRWXyv)sAo#rG8hHw{F z?Sifak(HJ3FJAGwlkiAFc0WJ=mDv>;h&^;6o;3w3<^`+oK74Z;lDdPn`lb1df{_%IKtAKpkD z=Nq&r$ezyUs~3-);NFS8lW2D|(~j1%J~@RKq54nuLgIsIq1fwy#O-IXf`XjXteo83 zNK!es#o>(~aKv5ccaC=@Mc&KYn-a*B@|^v4$W1|TErCsykmpNrDg|*=ytq{CgP>og zM{@M$RppT(1<|pS;QT4@-WDtysYsA~c^+sao>&F?gEOg0zOr$RqHx_i_R9x-Q$g3B=#z%Q^HLsa zCdT{Q17$A3Khf~VFMbMo>|(6Y#a#6cHj4)dCi(b_NI5^dZij!Pc#UN2WR}`%b~GGK z5`z`v4BDw_;G!&iN@muU9{wrK=knSGXntC!)vl0nB) ztoQ^gxr@fV3KvCi{w1<-6l&Z?6FkJupMcl&C;QnNKf5_nza(DO74$|gJfOPlc6@AM zJ)Xf`=$@SYkl9?3?D!2N%Pm%!hg~YkimP%`67jtWYxs+MoQ%)k6`g$;Uwaf(8N{jS zg3cZh)ZBH5WG&@9R)`gT& z;oBEMulXvL@(R{vaTX*>o0Qikhr5c>-Shx1ia;Xl38b|}u(yKR{s6k{;` z5#}Y#C1xs7L@%;aCQL~-JQSu%x z$s#qU+al zYLC#*wG{2K8g4!ezwZb}$xiWeIn-Z==Qxv^mW|NhxAqDK-~f zw*3g6YdB~WXXrf)U+?`?q?{K9_l26+CtZ^$jHj^i{*|jq1(Tr8e}s~sf}au1YovnV zEIYT3vn^P+Q?Sh@an%Uyv&md}B%eGJNiEfRUy&RxPH`hvn+N(xRJt+Rc~~$Xu$)TE zO;ibvKwh@uH6Twz0jXLOWV=Xww?#;msa*3fK4l2@;GkecVIDNu&x&tzCqL1Cl1Wa- zCp2eYdgCpwq>k}Ku(I+2(+zH5)nB64au@dcLO!`CcTkhFD0Kr*kc-u*yrXtpno>*2hCasJ`>aAtfztH_j(es_T=fAo46V!4(r$71~Jq$6#8lHj9 zdxsdr6+GYl+{ZX{TU9u~#c7p!rfXS8f3#F>eD~D&D_X!$I`cOXmpHu6V|LJe#Zt1VIq6u)r6y$pR1VeR*$YH5R)EG-liKjl z@bDDqk)6{R$*v6NGjsD>uUJewb9qDSaBCVeRPnI;$xFxNH3|Y45P*^47;*taF$71e7l19 zd!?9@nltbR-zyL)uY{)Wk8F^--Yf8{i_=vH-MotP91S9QG3u0i)9pH+sOB+hsLvAH zjDlL*sazjTtfvk!j1Xo=KMPK>S;L-<;yepK)?-~#ca)toDVY)%a#;}dW3U&_!Z};e z4q@qZcackq*h%t zVRbZF38Z~CEd6(!sRzjDtw@%6@O=*`-wYbpgx0y>q1^neh&SGe71ZIk*1TdUvSkLm zGm%|e#a-<~qDY?cF8u34s!2_apy3b3@7aiay@;HR0dFV;bEk7DGQGPFd(@A*`nFWH z*MWnZ)1A@)w5eLWB0u%z8F+*$UpZapg0;f)g0YkG+;M6&+eda?khhm2gJyCcJ-EAO z)Jmr(m-3y6&TZnHqlv%Opx^g7xrT-G=j5Pg=sSoG59py;;NM2y*G~UW`W64A5A7rU z#e1!c$ldDPYa`B8VKq{1uN|Y)ZL)qzPh?a!x*0Q#znMl?(Z~fZ@nOB6?x9yRi?)is zuybG!+~nkJgl>ZN<+RSz*OA$b1qCdMuQT*1J*8i&3i12%W@`Fwwu67)0I8OWQ?(sb zwT8+D`gZOrNtl3EO3e-`Xi26oJ%)Sda&0d(?25kF&N^*@)x^MUU^uj|s`$pYEP>W;y8b#cIi3CB_POGRtQVQP2!(Z>Ae%)rM)C z=)gKi$MOg5yY`B{ofAA)P0K-F-%fhRQ>&-xN2p13G#ZOI6PDgiWPV+u!?EPDb`bI0 zW*vp^UJzG{v&ym`E732%vDlh&w)Qi<*Rq9B4WF1D)j;3gfF!NK$vT0oPYB9*N4WT$ z*@*7lsUT(;{;N#nE91-T3k91wJIFT6!Je{wT|oYrVwT}kCSg;aqKB;&eLo+yee_e^ zGKSmz_Q8%b4$WE6S%>%u7h;eXHpv|Q}M(SgFZdkdCTH$9l$r zz|_sN!E?}a%=69D6fBsR-aqJfEl6)&Dl%h*>EFqMb>+6r2Y;@c`d$57Yoiwd<70w- zrTsH2edeg(?Ck6dzRU~9CdXt)dB=bDG;{_&(u?WKnc`Jg?WrurkH``jOctuHxfP6! zQ@&~7KD&HhyidF@Kyk^+Cnf@!A_6R=gLKQrStnTKW)R>mDh=p-{z+f(IC^|mX*=PF zL0VxgrFN12m-pak#o`YgAi8>-yxwT~riOyq(#Dt2x7*vso6H;S+2xtYDyOs7*`TCH zdFW_(~f;$OzDQp1X^A3VDWu zqWu7@@VDM!ApiaW7RKLnlAW?v5I4GMo2Lv?yVEbVS^uJ+Fm~8iI#xJMXBF3R*BMuq zkmDggL*9l=3Hj}s>MHCy;LPnD?igxsXiV1k)BE@dw2w9L)I&P*x`2Im0$w@-T6Z&W zyk3IvcE_C_I{(4^!PZQ|>_8ve6Z5%sgcw&&I+v=cKhzoYYPBZ|^`0K=8~SQ}EFIWa z>3DvwrUU8eJzm#{z;$}FdYYU3k9>`M*S%G}7d^v3&$bobn!`vI)?;$k(e=Fr`G2V<6z&>paV zcT9KsoqxFwxYoK%*9s;a+z4qG^3Ju&Rou0NeO~F9X`f{5CpXwatD|OBGK14I8hn{# zW-CwxV!Wf64cft5(W`oYv*s4whu%KE#GuOG@vk!1T3wLok8E3zhHuo-S^@nK9m7%d ze_tVEJH#kxeBke_`VqP=x2Zdj;W8`qhxN`(Vh;81@V)X@^PYl>Uc1}6lep8lAH)ra z>k>CVZdaTE#&LP~JojUFMb7an&l<2Tt11zS}DW9Ylu;M zpgqRx`N65VVMH5K?57-UojsT{S-{m4)ZC4(udb{i7rsn!OGMLuxo0Zje8euJKrF3|i(7G{HX3 zvQCHaAUe@cY6y3uL)E(ghk4SZ3WekNIPLvp_DG1b%7-PYml$ z={DRs+{xWH*=0`F>+p zwS=A{z}ss=4t*D-xHqv>*8RIPG z-0SG>xNI+Kw~W_xjgHatXdToH;KQd<))N(p!-CvK$Mj09h8Nfm7yO6(&q45r^XH~# z^QGCFYJzQ?w#3-lUjx&bFcgX3dWK%TqGas~VB^Lj=k}7fC}azxJMbbCasRL;nR}5- zUf&ofa0`yl;N8yLgAGWnTb_QNzM$jP2Y<>37C;0NEC)C~ZRwd*=>C04zATLTg&|nK z|AEwzfwZ9MLX*{XF7J+KO32hD*9&Zt6FM3g$XwJPE|ld zi}Ei*W35FFcY=4vc)<_%zVbdsqZMFcM;#Cq(lB{o4OU)i>LsMgWybkzn?=Pp>h$3fL_f{wA#-^}09r-JkF+ZO^h{yCog1@?4Cv%UYa z{{Yk*=f91ld*shXk9%t-hzwyLHk+5s5c2E`*t6YMDQLaks)iRXGYE6zndMYwk$YYV z+Q&x_B36R;Q_=ncWbr!Agy7A;a19U1pI}IW^a(~L$d#~W!ruv|CMcC)cZkQ;!Ii@m z;;%}p+ky8Id>j4JGS)wa70z1LSc?sIZ2Ij1IyobDXz3;Fl+I#*)MxFE|;>`2{ zeI$>si|;#f>X5$z{kA>1uNY2kJL2@KvHzRnWez85mK#kA)oJ}r!{jVzI)R9s(}AFm7VzQTjg(vEj7tslscE~%#9sx zQH#iR(lFg>m@Q49s|_SAC8O<<@`Wz`Udmqjzng-g?^n}ly9ywwT?(fa%UgsaA$I78Rr+!EYdokI373#L62JCLshirHxlS?v>VzSwWy*i z&zK-_f_!^RkdoeW#&7v5`s#S|Lz!&e6`tOnSWioDN)XkLd0YAl_!1*WCW1ot0&K$p zAOIz^GLoeqN^QwfcJwekl{UOA7Z`SnL2r9&o&eP$zctIh$~WIU>tEn&0;XbB{|u~| zgZ`A}7+(heD|00?2xgeOtSn%K=41NPc+2N|P9Ex&zq~bEBVAQV(pPO7b$8T}V1-yZDrZ`yu6CD=O0 znTs;s{>=Ws{=4?N~<)w0USBsSs?AD)wA>1rv=bh7*LbB49!G)}G>T4M0w7; z0)N7f-2Z~@`3CHox$0M)||+mjF*Dii1eSA~Jn(;6#kIC?V1x(|+9G`cI=??$ghW66K=XM%fwfimP1 z1VwWp{%l)zZ5R^P$)|oZdvRAUtjV^lfi_?bN=4ivt3DMO`-$l?x0*Q9E%F5Quu2Yq zYqQ37gUX@FAPKz#QT;x+0sECXP-BF;9o)s{G&WV#>S)Wfq0Ht^2aZQ!tt~#G6K)#> zc1s(rzZwmC-fW_K1~Ua6)OH1k0XIcLY!1Yc8;G__1}2kn>OvIy0G_~c;)VZ`J6J`w z>zTERzc&!&`a)G4lXZDrbu{5pDBm)0+3FoQOXqx1q8NYLazK|;W?G_4YmnsEv6+sU zO{weZMx9qq&`!31Ve^`ZUpP36#N4sL>Vl5mf!eTR_yO;&mEcY;NI!B819~m4eNKHgz}u;^=^S3)_Pldb%E_V)>LBdwjEKjF2u7= z2BZ$8D;c*U_!y-Fy{K#31*Xx)z*5`!zyM+d8;Rlmpb^zm+4Zrp;$^^)b~{ z4`Ofp2Cbqmx}!fakO6RER}hV7oE6C_?}qizh`X4JcFP;sV?|N3TO4kBWR(w;Alep%&dg1uSqapqqPJq8 z2odPr*jjEY8+ED`0}HLD?3Cb9Gyns29+A7tOo(n^jR+jZvb=&usly&UA;x;nT0#`F z8#SGCtlFYO@n!c?^^=G_JHS28w>>o1S?P!{f*c+=h(0PD2w{TrFe>T3f@$jw$V|gB zfmo`C^4bbh8xvt|=J6IWZKzEHb?Rn&zu zS($pe`dm4=t!JQy?LVTdC8=}CfrZ!x&ePEZwb7`b;Me-ZR&#SNPlzLfF4 zbAr_qj>fzf=)(G6Be^TF=0@06cgeg~AmTcXIL{@d+XCXX9f_Q02{a+1)&M$}KpRh> z`t!GWA4xKU3ecp?h#!KSnMJhtx;c*e#To3+C2DHJtaRY8J;Arh49C{vF&LY^FutN- zr4}YjQVC{nY9;cWw2vj}$PXcfmGtMicQsnxf@WpeYBCdudB0Q+_D>2iA!V z4Vi~CGzQ+PfQ~qeh2D)<^=EB;Sx*?1A#ISV$E@X0zXv%DnW=roN{{xrg={H;o*Tkv z80^egti)2tz9d21sE<|+ayt*%#ZFWg)*-LajdR<9t1g6+i-?+UC%zMh?B|6g+s-q z+*t%GIM0bnNiKXVeA}1I(^&Fn)v2#;2xaqoW$^B2y~Wi zgM3ggC;K{)yyP2dB0}+?Z<0ye#2JfY#$^{g<11wCEGph#P{&%B80Ix%HT~4v>R_zu zW7-vBHg)yRXz&O6clrei8%2l)9?`q#ue5344jlw#b0eO0I%Nyl^3P;i^D-BsA<@+# z;NfN?E?3UX!_UNEq`CcR%!c4tT`(K6t`z9q*XZE6WS6&~_urBK>8H#lvv-E7VpxdY5%+M)R{m%!3Y$*s_H>j;Y0aDjN(3(D)3BXhu z%9);pw=oau>>&#OoBH<0ST?_q!(ZXcGkCvStrcVenxey7LD?F3z;EfhC__}>IJpRq z_0dX(42ePy9_H^7@V+n5opW}GT_3?(0ulkSQz zzSX|j-qG&EdW_NwfhS&!_~mHz4-jbkP%Au@tXhvi6f3(1jcn#u(9geu z0ouwONtUK7SZd*5$=!tWMzD_Y$nHH*l;xAdz zRC$;lm>WAh3^c7_AgPYRyDtG=o0|;G0p>1lU=rGEe?B5tcg*BytqjP*M4%8};PI5s zf;80J*9ZS?mG#)t@q|^Z_+x0f$MD@_bVyNT>pz@F!H8*#ew;!UY&2HkM=a~oXy6X; z*a)fxW>JZ|IM|^RYs*L+rY;%B<=}RGP*Q=6wifAD64XSe-dF!m*NoD}NMn<6(RgNj z#GmsTvBb^(23K^oo?qXhrO^ITFOeU+j%}BKTEY6%!cN0a{SV}_Q21;QzUMYPkq^xC z>;P`rYcf4stN>Q)UM#f5HjSLxO0rqslmG~&hp<;W!D(NpZ|#AcK8|i}hjcr^Y4n5M zJ(alLH$0o|%+j0&n(-n$-j`&^#)8AR55ImPagTrDzGu*{A)M3?TeUrp9%%E*R!R`J z>S7yCg9|s4-x`5EyMRfY?T{d?&_N@xl%Aq13L+1CBXx%%Z$&Pi57vuhqY|JXS$aW< z>Oif)X1MMJwoOJlD@K8bb%8ucI<&%6@B*D$4G?FaYn705aly`>mCVoFZ>%9hH{GaX zBsZQQ|1#?lU?VP5e}kw6Iwsk(zmXDe>FVi4&f+zgXB|O5E61ZQeKirBsNZHK?*1`) zw>z2M$5cPHqt5pb=hZ>|ds@Ey+|yN_YlVgT7|XI|Ai(uT(y{RwF4{pXxD)7rE#SYY zphK>s^CuP@wfc1RY~*CdviclY-(}GA*{N&(MqW682b~qmJ`K6c!sNNLqF_pi! zl6Mxgo77Y$NawVVs;oQcxfSTVFVE0fpe9`nga-p$nA|e0bDyP`z*Yv<#L?>S& z3;Y1PFafm62$d5AK7vGd6n!(6SN8@ndMJ`$FO?^muq0at5!rT8Q|3UA&LqQMl-{Ys zobU8%K5|hh)KK+{;vvu4U0nlicvq0UACtS%^>5lcVif7IZ{~yJ`$G?qW4WczK*wBU z_VFFHo9a|IAukeRDTX6Uyil+NyBNj2M4{obvg6CCbx003O8szBIMPRqR_2^%fsRte z^$44?52wt>85{#Y*Fmy1K*9}yM(d!}U)a;Lpx6mynFeQ6ftPAv(`V&G+#oCKYf|yeAT`@F+j;BCm)k@Cj|%aToF; zCsMc{*5w*(;K4|{8g!-9$0EK)J?J9p!;-**s`3ImWj|S&J6KL7!7HB+{T8whNX{dvJmTf8`K*@&*(L(mdD$U zAj?lu-?p6U<0a&HqHPL0nwt4Xi}AUxVI9Y!h3nv%7vTgqK`wShN7taQup!jmie*?6 zE{deG=?W9gI;9zC^j4hlTy&ov!V)WLrX)L(o!^d|IoP4sNW+47RCVby{e!P& zSo`y!;&rIL5pSj*{A+Ly5|7l0`mtDaOZgW>v+ zIVaQ9JnDR6@3rV1YDRsRibQLNc71^+6@;J~RL9k02lmhdoSVM6{A8(jPCd9{#$EPuB>$YcRH=U`%G=WPG3^O#IenoO^@VMilk(Qg6*8g`Rb1=f)i=}x$731^LV0K?%=hUa( zt2%YO1*tLp&S_c=7uANEnS)k^NaMb|uQTtKI=!|~b}5z57kTAnB+P2=dn6KO4WB0c z7!TR)b*OWExONQ{}()=%V_ zaQd3@-xcy_Ds=nQO$ zqU>}&K4Aza;5$*=YRLRbR2FR|<`9bivf+NAUj@ zWGt6*#SN_X9=6_DKBGO=24|_{o5CXuKPm=k6u=jXV=sQAyXqi+cj23dV8=W}h71VW zW@(Vq3DJ7lkl#|>X`l;A5`WmhYYcd%3H(@(`^|&}FZ~~vIT;7J$0b~?2Xw5>?hnPo z-%Wf_kO{v+=htw{IjX0>^LT-t_0(rwe?? zhIoL5`~lD3g!*ORxDM>ybhz;hoNy7IJOC93!o&61gNK}(v&gn^bi#3T#T~4u5(zLrd#K8I1Wh7sXNm7dNSu=ABd9^& zflslAZo}2k>@*px&(sg3;*o{;ZAQMb!1tx-y=_Ic>JgCI%TTBH4|vOC@gM7`CDfE4 zIoQ>g$^z_97hGSH3i0dQ)p)2g8{UYZR{A0ps}IPXg%T^P!9F!58ZWVhg>X8MpSSW&8DV^dgg4{nBs>z*R!T!pIlqh7{9qwAqe+KbPe=4!1t2T`PO^4ry^R6Deqa{Ck!u5hH+L)^e zN|s32Q1VG{xt}}i z$%ou;LDl*c_H8%z_XFhDNa~C}D`|;RR>5lh1s3=!?D~OZcB^4sJtFJTnKOS29_@ms z(H*(DhJE=N>~tx@{Rz5MUGBLaCn+oSkUKaR`S2*CpzS*LMLNZ|LhC5&Ejv>JDLsul zeu~8^ctWp`SxY%9Rj?f0$g17=LIbgj8e*fjM9Yt&_V_fugh?e~AEett*8YHO*e%v* z(8+cIo_Pje|HIBMhIhKKzYDn69ZmbfzMHF8XpNzRo;k*hKPLz1d-z=s5#DG9L>!9%;56(ykv;Xd*gh z5wBlDCH_Ce+WzBo*}$i6K(y^&>fmBPL%Buebr>;)7FYx&iSB1rz7yM8z`0EeRUW|) zH=xi@BCg4>SOif`P{IW5FEKqlU$GHSL9-!PeZ}x!E&K|JvpJCZd9hI%LF*yd;t}kW zAjuu(ryz89MjyGTZF+$$+`@@lg`8S|AMr2yb{d-@4o|-@@}w!+K%yi4IEP_q-Vw;R zk$hHmuAc?jWLZg&T1Byg2C-*jk%qJ3W$EkiAWth`w+OCW6J&zm1vlkqVIBq1K8ZR1 zN$HglELOokN`%A}6dx~kvS1p0L8eO&k06`5x!MnGj{BVBvuLZW!IN^9-FnXdoKUI+ zwIluEgLTB=ywuzmqH?<~mCDtTTe(0|P@(DzPRUcg$AUEwAYz>dE3772fRWh1YnV{_ zn}}F>wH}oqHL1+Cl-qPO3?n{Kkv(zKV{w5~Fa39!ILCs&BwQ)j-BZvp5&Uls+}Db; zlLI^QCA+d5s+Gf^ia~eJA(s4qb=?R2hUFOl{gRSVl2Q^Wk&qA#X-W!}hBQQyLW?xe zpi(I%m5fA-Xd{J|sH}#RGSW~{5z?aR`Mj^Q-@pI!dS1`(dfoT$9@l-1^E}RDevjkW zC$HzR*>Tr4N6*TxvIale+#DPS`dWK`q4C{0DfQy`{;lz{3*&*`O%J{xJLJ~n{ycs2 zre2n#X5_0$u^Su12hx~i&(LqJ zwQE|jkGAsuHs#!05EoKYeE+Uz|6%~g#E;HsoKI^_9~h6^Et>gc-+eKubxL0Pb03%Y zq>$=LUr9HkaUIh=d@K!~Zm?mR@rU}&@p0V0rn<}@-M%&*Pz_&oEw_n(exT}BU_XncCseX<^Rnsu92&g#w4 z>(dEdG3z2(9ZyLIzA;I5O0~XdAKRySY#Fcoa4T~Ewmn;$?`$nEoPB+7qjFW_@#9A2 ztIfo2N#S=UZQs!dsvq*rq{ofXo|>TdM{QSU)1DYt`fT^LUHoy|R?^#BWp8Yzmrp-_ zUAoqq{dUJB&#A4p%i`s~jc$LJ_H}LadUb2#yhe|{r7n{?RD1US;AGMjQT#lujxFP0 zC*)E2`NZAMY81W@XZc{){Mz`@Q_|W-_UX}$`qx@*=XdlQvk|S82hu10F=aO1+zeYQ z$9Am;bYD9~YrD5bKRfY)pZ4t??K@|DM9%GN8uPc7W%JfnDExsMf2y<2-9yC`)i7V1 z^|XF=(#N~LW1E+&rwoc^(+fV<3OcG-+L38*TO@53DpGkxII~0JkZZQu=V_d;>#o1u zU4NnNgs%CfsBfXpCDZRM?H6Spn6y5o_viP` z&E4r^>Ag>%JSKl{Y~eM|Xf%$9ia*ob?Ai=$(Q0{ZK8xqa7Z=K+d0q3gLt50~&EU7A z$~w=qjy^N#2#2-)zTIpe-}6a*a>z8pdv;dU&`!zTzM=7*uklx%@;PPK{k2h7mx`sK zs+j!1J)#-*;@W9pE9Em=z1JV;a~={kJTHvSzT4T4Xzv|c{qLE!ox0w`8j~}+x2wCi zzjtqP@?YP&po4sJ(kyn52DVMwY?eQI>q*WXnpSs8qkLYz>1*Rp_hxlJBfs!V!XzwT zwD>K>an>t`Wz+h6e7bn$1y!86x6G|4m&xZ*>)ze}|?m&$IQH{NznGUuX6=iIG(*d+UV^)%$wve(w=^;;WdbxSsj|LhcX zn>p2AUDsDT_6g0;(Vb`C>H5~6Y|qt_e(QA?A876D9~B%Gb)A}>qjsj8(X%_+P4Tr^ z(jOM@Y-=Tf-WDytBddC?pSl)-Os22_`iPq zNF#7dv~x*Ub!yjnNbB4R*fuR{>p0q$ZJRe!>vu=%w7oqZ_pUyBUlL-Q>3Q2`%lmg{ zkG{P<)@tpn(+q6T`**dH-qn%BQa|3f9Tm?xCk^SwC{^A1`CGZKjDr~a<(mVQ$kmEg z{ZLk^>XLU)5=ez}HKu1vvzn{fnZIYXE{50hw(jie$-1F|srM$s^qll$Rj|$dPaAXf zQ%9xEJCb_0wB6K|+}OIgsWEvdK0Q~fbg5=!#jfZL*%`}aDJ~g5dui9H9^;}t7VF)T zZK}eo(mLBBs^33(@txMv&1naVBu~~aKDbA-w13;ji;!-a?0I!PBOXkPJ3AiufquDg z*M3v0LA9R)TgSU6{q~NI4sMjb9$g(Dm8yGuP@l<5-MaByFUnfA?ai%~w?*e0Jw6xP zHEW-Vn~<=lcjxEFEmWqsI9aQPjIsH3n~Liem+@(=e4ienxk6duiNk1M&$M^ znOXC6y{wT~FZr=cl8`KXOMHCgMrGM%YK3_IdaakurVQB4raWSn`i}XmKGB%$7N^mB z(cJ0i&ra9?l zuvb$3Q*DQ)Egx0p)tO27QycZOdYqEfJ8tsN9Ggymaf`UzDAqbJiaD_bk%s*68&<4 z_LwW#^744rnyt32+H2i7*fa9GU7fA8-xSx_Eg$h`)2x3q*{An)o_{_zYti(1^6xyi zy;o|b;dFTEhVjuw^61{1ck@qa=MO(Nf821BR`j{an|~x3{@0rOXT0q4MqU4mGh2<{ zX%2o6C8(!*U90H!c*C5@byf9t&z3knP2$${;-@xR^QR#_uaR4%aeP@C@M>wv>n6ju zY zO^(R6Ik5GzQyBuJX<7`23GFgwSMKc1Z3qgmXiZO?ep&duk?+Yfj8MBjg;S08Tw zZCY3Bx5{4M?7TYP&kLH(=jKhBt60Xf8hufX`SL!@-wZC26eFQjULu`9+-ZsPO|DV@9zwoCdbuQeqW=!MaSd&UMh|?&tzrYJ?V)$Ka5Jp ze~+sEF-Z{>#MR`zGG6nC?nqA&RXy3!1vWN?3_ zV~yIiC#0vz@;$s2O;7W%t`CY@KGkgCzMqdr9n%$98yBRfskQR=?qbd~nCGS4zN-1q z14>1Al@N5&&_l!XYa6Gx#7W-M*cs`4vfvMBJGi+zypcY**Pm&$KN$t@5r^EfdHZZO z;J5Ot{Uo1+?cyZdBGkf+)9^cyBU!F#BQS)_1vv+EI|Cpqc`oLdK-qC~1 z=S7|Mx6M9nWY*U3zoH0L$ghtU)H}bT`PGGppPAixMYH|0WYxKCmq$N$cZKSv{(KNrm5C3Fg1*>UKigy9R{U5P2+AWh)q$-cKY2k&oHi3S{;T>4Z}>+NZgs;n&1 zm^`;JSvaZk;$~>2*6%9OjY>P}39g;x^7`Jd-7j<#+cK&#pYQDdN23nw`>-hB+v$NP z=Xw1@(ehj3fj4K<-j;N`E{*WI^ogso_P*C%$3#hcOcL`W6P0YzaaV~t=V=aAHvU&s z%)&EcbgKVk1uc-KOVfJFWDTj2Ezd^<_W!gp&GbLIUsZ=MZu?;xmDR@TrB9tZt&U3? zlTp21U#3%9ZAUhKCp8OSXeD`dRtCl8mZF74|l=NWI=>A6Xe^qLjt23&xK3m*n zp){-|dZ!lmNyHRGl?AV$*C|ORl( zH&TuM;YMIo>ANXj``gLxy(T(VU+>1gyTAL@yGLDR{d%tKwY&UI+o|2vX;}^5ODFh7 z{Q8LWv>n=5##==}JI2X(%WtvGL`&~Y@82oP`cxEnLZfg<^mKeO_QJMnqjp}YzjqDy z<^_6A*ZItJj)xj`wIrX?xT{umPiOz>MD0KA)%DYg;PL-s*Q@i$zZ$)Jn!o$HZk4`u znpq_~Yq|a}6-QX3F54SkLYvbL3-i5v{_a4THS`l`|hR9``n%VDV=k+GBI>jP>1o#c*M^d^$Q!rFZTaC zy}GD5II9^^aa?z^)J{07q|LX zj$$`yJXAs4tTFORceB^^Ugs5+x8FF8z%p59uWbxgZe(835uVa$+|xR|GY+dmz+a=r zi=rD*{O?XSC<*xexa+CCKWnmPKaoC7<2f-oc63tg6Vc>nvKjWw@5U3gVt{#cXf~VwI+D3bRWQ{FY9}fLI*b0L+|ag z+qz2qGIVj6H*T|LceO(6@Xcvwy1H#1M-o-rCynKkJ-!%^Qtk6&aVr(cKQ_rqdWJ3z zyGBVH_q=t#d{3`F)G^G~%6ahDY0TD-vX^Ma=9s8>iM~-W<+-h*S2ef#{=B^Bg(nI4 z{HSV$*3?Uzo98F>p3~?5tCE8*1#`x2_~vJgGUkr=&D#o`GYb57ckz%*rowZkUw60#<)hyWedcvuYPujW)HPcz=f9+huc54vf1ux>eKd1Z*Q0u|%%2mZkfY+sN4D+Kt3%>b`(~T(7NzW#T;8`mzMZVQ zHcGj)dr{x)_Kx>xJi!R!0!wx`D>T9{jAnIbQ9E7-165-m=<5HO*5LZplOO$3bV#|S zEBtq~a!cc*o8TXsg~y7NS^1(QFYI@?%_5T)vqqd;1;lk)A#aLfZ5S=B*}QKa&sni` zq{B+fMQL9oH5p}IZOx2-!ZogQxhkkJn zg_wG3_eVM`(1@!XxM080>qgH*b%=GJdR24y%JyF>S|XQT-*v6m`PPk#EZa3N+Ep&! zabDXQU)){`^;+$n7x#b8j-!6ovpdT(rg_#aZuZXh@8(X=jq4hnzxMp^#^=9{q-ssG zcO8#5R=UwWy<;uj(ViC-Kd-xgcK5JgymIa|E>#B~ikihde%E;GIienxI@N!Pf1=Bu z_l=%kwB|oXv-B$c^m-i zsO~*cpB|?owC|d1upP3Ow&~Tj&HbiP!y3`uLeYcKc}aKug2wQvp=lm!jDOi^{<`x& znpClR&x>PR(bYlh-P0$3>pOi6^-Uc;!Stn^uUXfdlCNu#j;lJ{Q+f^AbydH)FDdcV z?p#&DhkHeq|F?U?+vYCI=x_0cJL4CsP_5AC`pAX=IMq|`FIwgO=3Da0# z)_k0soISHq)?-e6wo9XoKR0$yYDDMm8gvi&SF-wsuHDfe>t2TLea|$*Rz8dN@;?1z zRCi4@_{Zjr{`bqycuD_%(VeQ>HcNChdomY~MAr+p)}GNTk+7FGk}q!-mTYAC+Flc# zt&>#15m=~O#S`{QZhSQRXuF>GOnQ7O-`dBUllM;=$-3>kc6;+mtI@`TwPD`Y)zY)y z5GPx`qpRw+WS_CMRqm&^r~+uLXKl=JYJIt$)flT9_~)LX&2DTCe%Gk#nR0D+__sL! zzZze%l$~IG{XAYLHsk#-`~Js`ZU^TGrBlb)|>Usm-$qt?4RgIMP5 z@sl~DEIn&p-Zj5DdR!}>w{q9}%&uG=?PtbApV9n3KWfmoOijus$E%*+s(5nzh5kQl z-_2R<;g)9dk>oY$^vohcvsVT6$A% zd#yv%yc5SD<)7cXr#J3&UVQzzv-~R!QCCi}HB}Tv+;w`eoDnjgh%6ZgYE7`P;7ekB#gf8`XOnr~9HtYezS-tGnZ$ zH)i|>^t501U$?R!PwQ~_nZDn8yC(T^!^GeI8NJf@#JSD+CCwX8IPG7|fOiUl*Es&Z zU*O``$J77Rtlrg(y?k1C&*?g!6D{gwCl>m)v{;>Pc8D`=pH|Bc1nI;7vwN@j$YFgp z>#<8Cuw%5$d$eBm!q)M!_x1X{z1p(z((!DgxZXN_x^bhlQ5)aEa_J>6pH|4LdtR(L zdReqcV^}2JVBWX@%V(Z=z`!v7w>#m#Q45-VLA$@X_kZtxbt3pv)b`un=?kWl^3S5X z%cHpSvKr1#TAz`eJ|$WF^(avX>TgAr{AI`X`4_W74$S^IGRO6F)hvGs7$!^ItVvcXZ|dZ7z)Z;F`0y zMtCe9ZJp@>`jlxc^0q7t$6>_+<*8GN{B9+hXrM|Bpzqa)nj>it);QdQ$yTW>m@ z;WGEd3FhvK@9ld3Q?&k>$&=aBwV(qYZjT50ewJkGgYEfH=h6N3fq3y_X(j5Z-(MBA z`6t=*q^^CzWaB(NXsV0F`<~w_S~cp~BpT7(Nq71UlaDBHhgRK(`sO{!#1AJYKhSr& zLg`rcwkT?YsB@?GeruGqV=H=_e!XQBw|(Dj*snK^Za)^aetM!>n9NUhlzsCaACP}? zue?+r>-i(?u}}Martfsy(>HtBNy0v_xmcvR868daUex<~jz<3ljlo>WEhE6T{LLhH zZfM2c)STbkY8<`kbiTbh3994ZxzW(2(cLLg3ws8w?U~KO)axikkQv ze;U1=+|GboRwt;W=kS09&Ih(oxZi1&;{rfakf>W!)3d77KF~0b4GKIbhk9RIa-^% z9gieo*rNR8_%1&JyF}-0cEiHGBO_nfQS=OB*S@6VzdYK0RqI>_4K@oe?cGt|6;aUb zt+uoMr{w!YynM2G*2s{b1`{w=(nS?SYbK>B@B8pe4;0O+PK!p@%8_hfaY{N|%tm@ZWytD7QCyH}?2dSD_EW zpW>r8_xW8>|J}{{UFigO_bc|~oW0U@KxA;PNjGD=vw0TiJWDhhi#D!{H`4lBFVnaz z6+iU3$jK|BZM|qW=o{L^%5m3KS|iKFA(v|uN3V1p`!-J&?G`QX(PPgjd8erOz~1fC zr+c*)w(b9iqUQHDx0}a@Ve?n%csxkF9`kqi^G(`?Yn`X7X6NXrMhDl8kS|fcpkGDV zy1DZ)UKl_8NmTvQo}q2{mxrb->qA_cC&8TF6GzdsIX+@d90QRDu|HV8IC$(x}V8mT^E@rb|dd#Quxqqr>c!6D7sqg6(9HMHxN3*%7^=l1HH-k;nt)#DbiQ7ihir1~joHn38cHxpt_w={xxMuYb@ACE}MP{A0{~8y+xs^^sqotx{ zv~AMn!<}u9_WD@%*QRay^}MP5>2;fRT^sj%UQZE_H$`nLMr%t>W1=qn@IBAocq|ZC z)VBf3p7ZG5>`sxj$Jf_!_a3_@CulRe zUY?MC12uP4^m|xx=Bs`4gU%1vb9R(SySXTeQ)6CNQ}ijL&R${9k3il8l7|FXl>)@<^vPO=z*rc z(7I^{Tcjg=Bn<(kWQ+c9md(Cb?>-V`Z68g2sQ)|m*`Dba`}OO0M_W6@o%f43>ua%h z7XOH*9vnq~v`^NGX4iViF6GF}PuK1=tfTL2wPSMz&Y;kPsgeIU;HmWY9Dwr%V&5YjP`qslJ-IopU>&cE72qe8j^_0gO;(e(SixFhOz@az8ns#ljreR>wD=1(qN*Rg54X7#pa z^^RuxmcF?w*+mDwykq>i@gVWpjcS+i3eFLQ>J2txnCtd`wMp`PpqbvTIr?<5Zg>Jn z`j17SvKZbN?_%|>9wnni{^J$m1TSfHp-9E6_12?fKQ#{EjQm4ZjJWSP-G?rov^nF; zHwBS*TCZRqFU_tvw=p?2X<{tC(VB%UuJTpmc6$HMi=w~Z_+H#GZ|vANH)l{^kEU1a z-M(bhyFyn2?e+2=q6aIq;&3XO29zlT=K@{7y5O`fwz2p61FR7JEfY_CclRk%YTF(= zb;ld`e(UIWukcBq2~h*_uak^UtUITJZ=PPhVQZBR|BOjC@a~STq)(3{7#ZF`y8c3) zf8MB4PYX7H)%UEP`B(Wg-46@p&y5`UrkfrQgRabUCkUX2rg!)E>KUzkaYR}coczGX z@;``-%-1>DQj0ZLt0#AsPqwVxeZIAs+^8!yr>~v#(8as|CDJTdTCbbtbg5RNnA*Di z0#c67LXs^#t(zxzA0p_aB3-vck#t~D92&uBMG|DgP?2v8FSJ^CtnHE^A4ulN z)!IJYWzTe%qta|3Mj@DC629DuJvJUt<*RJwWBZHHn3O(|(&;l2SA^Bcd!(&2#e{;$*I5yPW z$KtE&PZC0|!3!rkXAARip`zLPkMHS$zCd&HtXAY4QGiaxi#ETn?kYsmbp2R*Z9Lu%WV(s<3zSq}<^nq686UKw}BRRbpzcQNRwYstSzdD|M zRTN+^{RVGs&tF89KW}ew?(fFoV3|gj<^$4_4@hr;Y5Qb4%Pwg$`z00j?AhaU$(uv_ zuczPv=|+0P9vej;J-yQH`IH`K#$T`OEF!`>*SJ3KV5fOt=*sst+7CAJPn$G{!3)K$ z^{ay|TBg~5Q`W{Cqm30CE&3>o%oY=EY!TrzO3WoqJ74fOIOls=B0h+^*qhUqEVZ!-%u3`G(QXXE8KD3KB1k!TFBvF zsMm6{RPcbH_*Wa>A^$J!pRBt*KEeO;NZe9aBK_|kipu^MKfzV+ZC&!4{yXU@&cY(P zG2Q8!KIQqjZIYy<3$G5YdwZYH)?Gc)D-!+6iKqR(-~6H1Ka1;J(y{*3?{uvHM|)r2 zwdhzwUPDLyccOMSH-rv*W437xzhI)q7k0OJtuc{RjAKLMTRYGfbM?6~oUbu}ohD7> zVe4CGUGncj-1yDP(_Fr$)q|=RYbK2EQ+s}LV=;UG@ooOx$Z4wI1YJM!M z=*j6_v-B)B_q4866yrZ}GkrCnqs)(J8Qhvq_vTEea~-1CPIL8s-p&h~^GIW0oO$a1 z*a{J$roa8ZQPVw@?aU`ED`&(m^a>GMyR~s1c{-Q0o~~=3-!{s(c9feZ4y)^|zq=b@ z^Z%sog+8l$-cvgNi@GimLf(E6(b>BqI>FLi`RHb^D=GSVQP->X4|&H56p4AbI~M`C zBYL9ilf!eThmu%y(uecz(Z%UK4g*;FWl6LRw|L$p*TeZD6opQ4@r+36bw#i124ZeHd zvpctn!_cW@SJJHBnRMEz-)+__5xHKS=D!4Z<$XQY5&-(r+anlPM`Jbmp@RdNZ zp4lrn{0rmbhfP}TC21n3q+jq`emVn;)-oQ6DcXza2 zpoxvEss`sw9Qo8V!jqDd=T6f0^yKCNc?aZxZbQgR-#A@vNHDAsT&^CU7e#efwdXIoU;UbB z?YGAj%ka+su)d)(h+e z8xo3{j(AU>-ya>`5Z^=Bk9B+zJGRRG?E&ZTP}T@-2F8juz~4D<+?OAX@A>BVCaI0{ zKo5#H%Z&JQbaQ7QNk zti>lEN+uhH`&(0whPq}ik#O^Nt!gBw-Jpk|Tn3nl!L`LI=_P)1e|P+^Ug7N!kq{GV zlgg=sf&67W;Og#xM@vM5U2}e~f6?__6bJoj-+Z^vPfx;~*5_(YsUxdb-hojy8yo)X zYjIrJZ{JL^i7H&&kx4)35}5<1b%e7zA`F#W10#hdpB5GJ8SutGqkDLEvrdOXy-P=* zI=QLn1%rTZzI)Oxc8~t{jstupTlv_iY~QHvhgr_&Wk>(C?PulnT~LnLB|W}buGu-^ z?Jw!u)3Ufdj*K1;%jfm!q|VS@YqScMj?=+{{HIZRxLLfjRRw7awaI_+t9Zbr z-P@1bevtidt$(QzIJr9&)BIAgk%L;RV(2m$zScVZYU6QA>-3X-dPKkYWS@PZQ9Q17 zds1U(Opr57zQ1}J8D4uht1Z)+ zc(33PHb^#$c|lzAtEzIjQ2W0&Ud|$ixqW7zKeO|&zMj*2$X6a4dc`w3534}F=3IR@ zZ+p@VXxliZF5)_=|F^5Ya-!Y`8Zka{h=B|HFMIHd&HkBDh5XJ_yHk15FaqM5(E1P> zSNHm+j`F9Ttu8Y6sS{1SAnWF(o%#83YTk(##3P;`uUcu+N>tM0Ul&hXrCHpdcgrMo zSM09WopeSh%tg9ivSzkuOH4?853&6x_nGW#D}TZE;N8GG>BqAa5q!9{d0p4Tmw8F_ z`lsmNzpYX6*;~6p`4}qH{HbTiVEU#W>d>z87#5poS8nX$Nw+nVH}j{XiP0JB=QNVf z>^J}Ex?t5t#A>$odHQ6xie&x0t0YnB+yCq89_ad>9hENAk$L*yTA|}MY;C;0aiB%X zQCYQzcs6aG9ZAoBIG%ES^Yn+Pi`V$9)}#pE=c3J%qgUHO(dG%w&ky?MuVc9NibLxNtKfGeO^P zmhUT@JCU(1qTaVfqpxcQW!UgN(}d9Ps;yJ8lJzH@V24&e>tV~@t1q-!BQT=8>ooU6 zUzI7rtANrUXf@&FxG-(z!LI4{M*eB-^OUa5%<(k-cjAupsLLi!eQ|5|!dB#ulCtUt zz!Usp;+Zg*e{3I|Q6?tdPPf0fUtSfp@aA9MNL(^mYBx_~@~6g-JpwIwce6lV&D9v- zbUbdaN;`Q~bGt!2?t?veZjH+JaXq$>Zpk{Cuha-F-AZ1j@eoPGAN_8*N$Y{Be`$Lx z6-|=}qQUe>mXi+YtlS5a43AE7g*;GUf*19=#^6`2&F^%V-|dqxPqTk;JpHJ+z1kCB zi<{wdr?wZ%^!)Btjg}w84}a0G{5M`>4%^1{|@ah zJ4^KP)jd{ie3otn(p(p9R9?`^WXtfb@ZCS!{X_2a8qF4OU<=Ep`%4r8%|9?1kg#a| z=I-L=MhWFZWU#~`{jQw!i>vz;egL7TZpHnr2{yy88lkh>>%8us=ZHOsO1_i4Rf_~x z>$2$QoW}24jo{gh_1E(hT7}0XRn=!XK521kG^mQynbXMQvuf>%gATGmyuwKx`=Y*smN=(hv7$sHXgt5^Y+`s<^x1ix`}fVljqw_uu*X7@ zsoghwcf)6nH!aw@m;K3KDpmlM!#}k|&vZOKCZ0~V`N+K;b!9GVzG0Rx?s`w_N`CzK z*`X#y6VIFO^6Xy0ZT}{kpzmJNUH-gZh?}0>1DCq6=c~F8zKLJAGGTt<$7QNKoMhs& z{K6J@3@&JSM$Mgz=+& z^4|FPhk9(#@82BvmY2rzkZ~mj#V%PpnxF$N+xei$SBt|9k0a#LVqFKEJxtSmag={W zZ=C%@I>YjMl3q}hoU9XiE}RSEUk*Q1orB3t_vU-q zJn6AVYY(<>|77JS;++TdZlC_|+??#x%#bi1A8HMMpwZ`tduKBN0|*1We4{TqFOKq> z)*SDVHAz>Wr8Nc@eM1sMJ{9`^UibNh$qROH_f0E4v3ve@lyz3y4_jk${Z4Nkez#A* z*+_h=5xlVbCQB}854oyWG~R!Rv;J+;fFEm(51WVF8dyXcF%;#fIkITiW$oYzvUecM zV5DGc*6!Nf1G{1EyaTH=Qg7}*&5&H(V$vn($s6`qEmB`A5=kh z{_a~0>w$?9Wa{AU@}2Q*d5$us)iF3EO@H^IiSNj|U$4q4YZhZvO<V>WN5A4XsFM%`ZP*wMMJbM*29OQ zkWa+b_s+^cya@QAt=~hl_f;VH>SS{roegz-*40VbS7&5Zozko0v#q{0Z725n_$q!J zpFB7+8r-8J;`cIf-kF5oaH2IUecg$o-_#Ynv1?jCZ@{J#KY@yUNAt3N57)I(eCAzk zuqP@ecn1^pwtlyE_p)4f#t;3%qy$V3T*B>f1llNm`OA3YPg`+tKW9aS-)QB2xzSX! zQkMI{`C9gE+q;l(dltLAf0s^mvM7qlnYgTMl`Q-%Z2e<=r-AfmrUmo zDUy9EX2Ivcm#C7eY8^7=RdJJJ!|%_JC(3^|8** zMv4VKL(#L$RQaguL}RQC5(UaiRfyF(@|w}m+oPsU+w=WN zF?!BNl2ki)d|VQqf8%J8)O%x_-&#vLh@hb9Vi$&93#6HDH=FEO(ZHR=ay?1l` zlC?_@Rvm#C=+d~Kh%G<#sD8xiP~S)1k-Q!90YdGv^gR&_sA^Fn@`#7}Z%H|^4(N0d znmOarELqm(98nRE${ca+rZv5vSC)_V{x&l3!E{2NSW%TZ+VjcTigF3rpYW1*b@d`$ z;^6m9dy9dIBRa!Vdq$~nFOV(s_TMv<4J#Mg8C~*Eks(Vb$(L;g-ZHIhtKVGm!EDg% z@Z6f6*G{7<*6@l+_TXT&!x2+<2A(jKD-wb)%P0`LAo1a7M!l$8ljb@a(TSm>RllGy zK&<>V`u=lk6o=s7RdWgQR|H>_=FF(~==i`vafDCjxe=59LR{l(ae}WW!M-tZ0{&o~ z?$qLuacf z^SxHlS0C3eU?xAG9QZ<4cx+dq#sSot>IFx)`o7SLJT#s*I2q*1NlB<5MNzN`w=@NUIjGlrCROB@e>|yhSoXqkNt2`d|CKz&-_Dx5s5($T>-k4ji#m4l zL+{n`KAhIF^~Cqp4}44Km07dNL^-N(Y(B{hRdjr&HXAhK($Nfjf$Cp613)`K^+Qs> zAxcAMOZ6R|2|4quC`#lV&B{i$cC6o#XE4JEb9x`SI316`Ajl| zy+XdI-t_r2pJRG_q3=F9ML~9)ezSAbj6UC!TvAEl6=_;B$e$Y>K}XEnGqmFKTK}r# z@$m8YiSOP$Q5U|9i^(OHxpqZkXMRWox`ivpjY9&b3i24P0#mI8%}Z@0WYYZwWs!^oqIT1F9k{ z*_v9Z`53l{S=y+vRl{nh);=3>hgPmQsJhtl23Ly1tJADvz^F<>kAqEQ<-ua`a`QjD zpwXi5&l_hNa_t$d&;|RBJm6_vtm`3XjI;QpoLfE(wg1?PeAcQ$syXz`_IqB(^q3-OB!XGt46J+ai+l?<}n|kGB#bllLw9`=#uPQzwh##3aX|t<4?N*xoZ8MXmXD`ZXUZ+voLh zh0R;rvVz2W=!i7KJtsM|OTXMEJ3_^3F;FpM^@zksmQPDTA*yuAY+WE46fJz96(K`k zU53jW8C90V&!NEN5~`U%*TCt;Em6<|Jwu1#?(}?kb#es~@-K}xEsiet$5!5Nn(OjxYAg zHrlh=V&}B>PL3-1r}K^6X^0REq8(zG5TIwa3WijM?)+i*%S)^_)u41}$dP0Cs(6f=b84ls%9oAP zt=hQLfz=$^Dms_txy!Win#s3VKfP+@XmDWJRmXaM8?J_n@pPc?HRG)6BaBM4yc{t4 zujza*Z+mGxQdTxQPvnlI8M^YoXgr!8C>q8?c5ib^$NyK9%Vxd4dtsvvyNu;3rxRbf zK3eBLlSKk$I8WnA#?hSy_g%PqpJ$p|s0tRwqxo|9a9~LIm&Ghz)0%tz<0}o{=WS63 z1}{d%kS6nW^$T|&%Qa#!H6lW5MZK>}QW%+G#nM^D_eA7yH4)_Jc9x~5-@Pd+U#oGF zW8>GPwA{mmqeEDBb+qql*6>gI*grakYUxjlR_C6sgV%6S%RTLDgzSq>+3$Sqk4?7M zsGm(@!5*@|X7BiHsk_?mcTp3(l1w;0BXatJ=o{J$g8jUSuao#ZxUvi{YNJDmJkh~K ziRBnx+f3XP)#5N_(w(cwH*7uj-^g~M!TQ77Wh_G%Jk(snvyLuPBO6NOMjs?Pgr2af z6sS+dKQgl&I$1zRrhBkB;NqYVRTQ+U%`FcDzXMH&ttYQuMh0B?;5ck&bunc$zP4?d zs6ds&S5E)=y@gdYukvo_p%0Oq%VJ-8di)pc{;6KPRe`r&##X{+S zuk1WJ63`pvIpKSJfjnO1-WYlGM4P2D&xR4sY2NBB0m5pPOTEHka=mvxV$ z?(uWG4mF2pnpQf$p^8Hyk!)7myb~8yi^sLGwfSroZXfu37NUI@ZnMg1F_1bkm;tzK$Q-K(Zu;&x$-~*0!;(agb2dMG zA^7dM`jM|G9{-A$)X@Zv#Mu+U*q zzSgHIXNg!IK7Fd9sBcJ!lamneoVXe60c5f09n_3EE3EdH$Dvd)QL9rVam_fkOiSKJ zoBZOf^PcaRe(~|FT^*2k+johd%aW5-v`!pLo+m^gsvBLx*dp(oj`Oabaqo?Lykk1* zM$@mL>S-i&R2~zW$*5z+yM)`a*V*X&I-_1Byy&QcMpE6-o$*MRkK4O9+J|pdjPN);VEUnoetgf?FiQj9u~My9)~DaHDdi)+rB%Lq@5R;! zq8>hm4We2qX>mtV{&$lez#}U9aaQ-qp2kPN(Vgq6p@!|(+jv3Mqhx!XK8+-;h^4?r z7=FG>TBYnYyq|4wRyKuSoHp@gR{GF3hA-7Or+3!TiIJwLI+%L#wyP$6g+EHx94>0y zAuyiRn9Cuuj$bp;^c&)5qDkvDGH;zmmIi?z(uDCtV}MtC1vQC}t~1%t8#dM(HKv

5C(!3LW18^bXm3)`9``e9G|A;;M^+N;orPS{?oXICs@3N?-FwU z71LM_E@HfC-t=#jW+c_%;BY1{B;z|diYiMeQ`SM7)yRe)W^mfmL;uZ$c_seBYuQSrcEsv zmM1#rGdd+cYK(cN(C0~Q&|X9Sh>5TeFQ2GUbaiNte`@7;2P^sK#++YPem*p&ktTn5 z;COCi1ginV)`v4z(O>QfJ%QAbStD0t)H|lf)6D2a{NXeQvW34}?*blc`01gknn~HA zq9b!pBgy+Yu(7xkO`DY>e}WcBx8rG$M>c=k@NByx`KPa*_>br!9|)Y{HWT%u{|_e- z)brMzMr8a0Q-r}Pd4HR@7%5_{sOkdsqPnJ)A_68`m#Q_Zea^B>4%J}1_)LDV0 z2lJ0diJ8jS8@kX#je&Kf#)piQA&;NgJ;3y{4rF^kfT)SUGff|+ufn{;6~nEF^?b8+ zbW}RwXC{x|r{eaiKI}E+;O`omS>7a^^6tedKTs1AC$SE;U+Uc8HkDE6iHnjrZH~rtXIZ-iJ z2c!2jGa`{PuX(@QIOY@)*AqE$Py5WR}KZMJo0$_WG$FFog-qU^4pXtf?z;okE1DQJV7e`DLQUVH5 zKAcLnG|E>sXKTju-xPGusQqh6of7TUm4@#EnO<4+J7Vl#*isn-BI_i)E}()13M+}k!h3%H3|8rLL) z#4l~?>!1n|h0~HAaw^W4=H%=?o9P1sBQrE2pQ=tHelTW3mLR{3O*Sry)7^`0p#OkP z^jXxIrgT9Rpmzyh8w~oe^!X)p&)>}d^RmW{w;7^jWZxS_aR7cb7NOA-nH+IhaZL6QA0Z#aT#faN44SL=qv{}T z&X!aK^-0Zw{m`Rpa@-+DM?98qgl+st$3(d_hK0HY_6_ZCgJ^NPs7;@V&lIIQaN1;e z98%Qdupasy9@e{qimdOMUw`}PO)mo&t>vN%nRw96><|^|e%Cx-(!6~q?Tfu2QY2>i z>F^bwXv6R2Jnz-^sn)FAn7#Wi&MIn&Gw9fPM88$R1^V&i=9Jz6iANXy_M~y>$Ti|z zI@jq&x6PE}4|}uTlwq@ZTw}Mmg02!Y#2>Vpugw3Udxz10ErPZiV{H6bzha!ChRelc z-x?>~ER9TslaCg|Jg|{5Do3^kzf|P%YZD^otF6y3v`UX?wA2g~`ydH+YAuUhsz|Fw z;C3BlyN>mqHX7bL8pSsy3r6-iT!Ks`7Ric@uFqF(^}aGnTCgh>o#&(D0TAOJHnL~_ zXHt)kfCb088~f0)NW;6@Lqs3<<^`Y?i0I-|BKB;4GDhW!MW)vywj!o4OXlf4VqGHiqVx~)F{Ol=$Vk1JYqkJ z2b|rrcnYm^bP<7oP*ooWUnCXxa!(?rY}Q{-JmAuJHr~QA`(E7TThR;59ZO7|xo=M# zLB8jC)7gI7Sucrq!1LlGGQD8})Lgr^SNy{Kzhs-}*of@P2o%}5u03Rvik`8#WeCU} zzSf~SeMiUT&j{cAqk5j|D0azI zA>yK0&Yv*PXM}w|VTzo8DH=SysK{rg_{RSI*S}<+VjQYFsaNvhHgaXlB!oH#YeY{l zFv9~4fx-Gvhe)0+jl_oTczxawHPTFEnxh5?z*$4o>ouWLu+f2+;EU(2=PMxN&uE0j zt&dG_IJ~tgYwcUpEbulC>*1tk$DS zyHSNGGwYXCBMK#x_jixe20DjyC#h$=TC^(l`RG)`RvPg`n$99g#}ON(j~SsiCPR4( zd2hxV<+-%+hT-OXGxSG(%%vxf!pLV;|HW9*n`q*sqpU}ktVkXTK}G0khJw()xQ;Fg zG+Ou+v9p^WUpEj1*30mT`BWC%$g*Jd4-}R4G5o`$cC@`=*~Q`b^yR?~|A3LwnS!mP zMv&MM&nk>H9}J}L$Td+pecUaN3B7=I%WuPf;{N5as@SJyA2ijvQ5v0-_vJ%T-v`q< z`2_d?)ZgY2*uMW;PFnPOjW9i!H$VgcQkP!IdJ|XD`-DBG28oCoeB6xJknH9i<~4+% z8#rlRL))+kZk%`xFP|!^XjYU>mm2l(_!3}H2m0!a=<0h>@8}=`p-*ctFIV*J7b+K^ zIV<{##u91>X4;(I&^g#3&SGXplxk=@YDmi{_imuwc*In!V4?8F;=*Ll=%w=VMq~8< zL1XHoh?wxqh?iRsWBp|jkJlQm0+Uh_OKv#+fp-j3jBnX>V^hZRKw~AL6 zhrmr>f9TaV98d%kg$76$G~^vxKLd4P$% zcjDkrntU2~I8ALtndAu%BSGY2Xfmi}`g){YPHd`jK+&IkdmZqtv-Fg>^DbLw(^|1=oF|h*q3HT;qU!IWDYVy)RSifr5>8Ey7+BHAUzUkZ$&-?WHz&<%Jnftj( z_L96Z&1vAHTJ&*AUY7b^RlM#OUK~@X7-(Kpu|% zR!|ayjt6RzW;)^#IMA?&{KuJwMTurcoWgG*IC0zGK2GWUnkw}1F&y6}hiYJsdF6Es zmba{;(jnd3k&{ILGo@P?vUc)JbUUPi9JEY4HV3_Ny}ZcD0l&mjPi~S zh4z)K4O#gIr1$Air$-%x%YM=4z_;uXt;*onhmOU8_QWxVPkAPe!aMMq&c^S=7sw;Z zFG%{c`d!&TAn=|I^u$2);>m;GTT?uc17q-D_o|zTJef6 zj%XeREs7oKjg9hPZ4d8z`84W9>q;i-d}=fGC%qdibZG8A~dc)Rde zqdeq4e+4NlZZ@zbw>?f97bn}~gu^20g3A^YtroB5wNp=19*~?q9*dFPvrO8z_&ijo zxS-q~@j$VWkpm6;GUh_UI*9g)z~6Z+clQ>d(k$MROHW`0wv9}4MD9R;e8wyM|ksFpFtZr~Zj znav;X1%!y`4~=C=eih+h`K&me2sS;PU6hQzFP=JM)ARb?-E}-RQ9Q33KPPkpKilw~ zm?vHkd~tYCPywIFzyYhaHhdyh1o=2Ta%jNajTjcGHp2sEbRm8nSP!<1&)_Tm*aKD+m&Q{-cYyQ?EHzIElU7HW`9pu*XZv4cP824?Je zFmC8dM3(tpPzt<<`Jx#Qbjj%8B4=0Bf;?d@!jC}Q^A|$5h~b%6^?gx=I;cEX;;`gD zxj#@{Gd3SyZ>*dT($cwy&OpY>+=gG3i+|okrF_6cYZ0Y9tq1Rc$niiz!|?G6`HtU0 zRN(vBgHY=7FXY7zoTctCPwBd0h?i>Zz){M`e^>SwwDVqRd7om+d#I7P)alO19heTNQulZI)h`-V zH4Gkz@>P_hC$LmU>=O@y0#}LQeQ6szPdNHR(^gbq`F?uwg;i!z(K{47dVdmf)8yp(WnQjRh4D3#qN_~X%JqE~tz5m& z)||FCCvD%FY<)++*sO;L)K+a<7Uy(~P4YbJ5&hB5a7eORCOQA2I^3g^y*k`aYF0&* z#f8KWa3|XFKs>Tb2BL@bm02}71uijS+58-kR;*H%6nmYmtd5B4n>wHktdgurxZcf* zHu1&qzidBwUgSJ{Xo@n4S;`02$#M7QY_B%?{5ntTH=-}sh(-@zwRob4qWlbxQKfCo z&M0$BL{qJE)lT@c)pX+<8c2J{YG@DD7{nCGnt`X0-wvZ7gXQ8R2c)A~*uz`G*CJcp z2JZ_wubS#{ZM1wCj}xNOZ%iIS5n{0(==FgZ*2PS|JWs9vPvmLgp{n)ra|~G_!*a$7 z6AK?wdd9w;HI4;EJ>q>s<}cbRknKmx5AQe)lXZ;G5Br(jV;*g+BJZEj1)axi4|~sR znt*NC)U-p_@tY!9;3}&GigQ^R3Lm z5o?0Zwhc@#jES7knSR8O(qkLm0+N^Y?D_{{R;~+whpP={x2$;K^cirqo$$X!DtSQKC4N`kj0a@PsF_Vnnp~_m>DthV|4vtb6naw2dD1a1XkWf405# zYE|w0J5$^OvKLl~EjbXrqso(6f_yPUu*#$*%!V-^nT_*zPh=+l1|%sv--geTq|kCN z>)wYib|3@Phk^l-??U#EW6i`SNA?WQ4f?k6Oyf01YbN?B;)v&<+JPB1Qlu)cE9uS$ zD=tdQve8>+-Ve=n*uwlpbfb}BxKQg|{~KKmR9Id)n^UI@v97T}@`;TObj!GNK4y10 zqNjYGa`uL%JF-OH*gO6|SU^Wq7sr?kc>sAkWP!}Zv6|R3GwYDQ8`g+k{)FW+Jb84b zCwz|l-9{ctZD`7nmqR`eJd&KE!eP#+`cczc~$XP@+>|NtGdTQ~|@{{SVz&C_r4Xt!& zdMq_7oE9bzfR9uL5Pg`R)h6-Od9y9uo$r5mnd?dIwKjV+5XE}bdl<_2J zQ?WYUK0561%frt*=0Nuj4?By&{i?My@ZUTskS6ep&j+04&)z+oWtcH*VcqfBkd z)w8@djF-KuIPVroTv#8KC|RWts=Cp#J)thuO?gMs6N32N@kLm_k?jbzv(aR^4SbPo z*Ego?i2jOHiS6s~I{a%^E}tt-H#|>cwbF`ZFbuybO#@1Wt-Ii4n;WTN=MC)|QiFG% z?XMcr-+Mj$%W@pd{IHH-iggniUUM@#qR%rDf#+h_1Y*!M^P#JlLAL*>ZXmNlw1bVp zPowJN=m#YOMBRB^cn3CuelYA|l6P<~d{P!QDLU%Uu>)ps%dn2(%cv3()yVoO*cd;fO?%MR;J# zbs!&>qnwlxV}})jKYL|#A$o>;;cjA%a9An|$VimkZsX5_N+45T76pm2$@^i;4=nVG z{aQ|i9*?4ttSsBG@gPQFLT4@O6h|MnS35Q-G*H&mxlTJp!!n<4zvxQ6l@|3_sj{Y2oq=s8(Y>=&bM@RW!&!elw4(TpCXYp*Gb+SWy?;KKQj~+Ys$u`+B zn@rZs)_E0KF65CMy6;B^@>f~EG6(3DdR6N+!s7>b%*#45b-mJ!L1qYvGrVIekqn%& z_51AJ@r?|0A)Z8cqqpz{jBY3V1q1&M*XvWduv%(+WbN*k@BYyI%kV^B&aZ!1 z-h8;eQKf0CNkVM(xcvq_B+?6CYNJcbP~Ua3-#!){>B}U?b&p=Fv;cnucTXm*-_^;1 z!!`8Pfa<4t4ZCdU2z*3~HkTuVebn(_rw*$~hX57H_!Pv@*&z@+^2|rKAG~p7g{Xr? zzmYEjzk76=kE(*Uuk_w0^daaDQ5wkc^P5ebD+ZEA&LRCkBz@FMQN7^oW)K!xjNl8M zYaql>torTZQGP$L4fm%h>3%Vym3&&H#n35KW8+ztg{7z7N?9OsOw=I5D|k^iYwToa zs)Veb)_%>5`Tz$N8#uWC`!>#yUZU-0NapdS;R9Mnkeze zw36GvLpLxIBh%sDxU7s}UQE)M7Cf-``a9^vBKryUfIN|HDc_AoIq(Vm-lA2a9mA^# zFNzn8998l9u|K_OR6v0m8R%vag5jlPtMG&jA2~TkMvQ1KkJt>3fE=XF4ZWMMnpHE) zRIOLu6W`=@$$Az2+4;1Uf%kyUx;#z>fuW*~t`m1f398mC(3QQqnI|RInk-O03({EJ zmp@&NwRL(e=Lk;Q26rF^q3VI!6e?N`8y4nv^}Ze65LPRjXVs3cLN64?8+#|$NT$(< zT&&O)j5;^a6>=VyYUD|CxLqS}WaZSVz&rf&>X zwPK|Xt5gIC8Vwd`c)4f1^nZ=_(x&)Pf7>s`jYrLMC@mJu*ITiWbn>3zaaBKovQr(A zH}#v-=KJAI)d@kp5_J(+1)~ed_057P7b^o-7xf=_2A|y2hR2T2SPD3S8J3l8HhF~x z5{IQUo8NMsok?X9H(qZpX~Z z;8AZxWfDAsW}sUAsD-G@g}Qt)b_R-UR4^eE= z2|{fCxqYsjn=%Ziz-j4liw5Kg`jW z8#)Ru3eJA#HuYMzecYS;=H^t!8{YwqbVT%KJOBet!QLEbzTwm3MG}u17=?jT7}01p z8BDg39M5!8b{0EEW({plq>0rrlaDp(8mRijj+So)vom8)^Lq}f8Y-5i1Is`{h@3)B zk_oagznWZBN963rU%hvln_8YDM)qK9g0E?CP#N;-1d4y_PAcP>O)9HpXbEdKg0iH= z3I`8cGp;3ng@^aeeM?%(exWtfYjo|975KLHP(@L8ro2^_9XtWs1*UZPfAB~f8<}TM z{l3MU!x2X_<}*@(?t$YE)Da%2Qi}?_znOdwkW{Em)eLBqQG;pl3o=1=^iQU-Q|XAF z2ub?2IGJ&ztsI#yaronUii}Mfn&{@>n(Op_Cdng2TM^&tcQj=LJ8saWV zO&dzY0pzf!qs8!sl0|TVH11Ka zW5z!hQ*l9D69!QOf`#mE}C}W6;m+{oxnD4F)O!4~Enm zC`z(*R0kaS7yq}eKKw;A5_&ruVqA;5LL-wMWeyC@44z=*p|dVz0qQO^Ffs${CwqV7 z?xQ|E0r1$7DLwk!$k!eSDX~Tu4G%nvj2@@Q478{f zzD4qf^~(0d164QJG|JSGW~oM7HYAG-ii5|9-aobx)esjR{$eurN!>MnoRuo(p-wZ~ zebm|eSJyb=>oW7k?33g(UO!%Uxb3U^tD ztLwlGS3feR&u;X-*}9c2C_kM}{n>CYBa?7c?>nLKRf+8Xj_*SH!|>jeG=zb{Eol)d zVGeu||CmVl@IlP@2Z!en1@nlL2&1;a@J%?|3Pxh!94{hW!6l_`y?poLE)7FNZynlQUw-BBH7o**=w>w`W$K`gm--cO~!EiH?`+ z_-YN(2k6$grwrG}qFVK>)DnW)7i(j;$*?+qqA*?`Glyp5-UdaPWCz_5A26>cDBvHgN>C+{7={2GY9?ws&|7`OI`?Ho_xDCmULw zQ$BV2EgBh^+kuczK?HrBLC7*N+Wow&}NWWYpuk zC|-1I9O|GcGaaINU`Y>~G&_Ex8BZU*?x?&h2jxTEe?q<-oU}ML&2Z?=BW}RwPxFR6 z7@DO~yEf_?SpZfoPo=CnzGzu?(7m()T8#W){ZE%ouYk%^lXUqgM}1(N&TNl5U~BY^ z>~nhd7#Di5zPfnRKq9i07HF(=U1b%rRbJR9I#H@)&!!_`M|Lt_{GdsB{$iTLPs^ug zOlgNB-{X;FxM-~y|G&F4wP$rNVAIn)WWVsI;p`$A@*ZaDzCjtmCC~)KXLO1j_LmhS zCNW~YW*QIUDPFw$ULhS$;Alq_NaT_~#2Q&)($82F>XJMW#-0C-PmcOrB%xH~i}`*qkpIQ)o144fQZIBFNsRQNt%bW}=_D@KbOmCR%^jvQLr z--tNL8zJjQWRo_ntLN3xjs8&IZSAQ?a!Oj9I-BegTE^%)E3)L(KpoCxYYa~e{o)A( zu>K)xP3mYpq%tey#EyH`|Cyap19r$al^|!3>2y=HFsfS6)P~P}AR2IKB_*OjtD7SZ^h9m4 zQ4tgl)BLKUH>yCepHPnKExbRYp3tZdu67yki{1dEvL5=Ab7B?CMH;w;nJU9uI%q#g7Lc$Ggm5v}sYG&7*&QBK31v&$59q_pjA|`x-cbc>rXrD8CPV^%{ES|AW|TGR6RBy$ zzcVUs!1InOh(iPBIU>v8D4?cbPKKU~ig28~F4m|z20eOO?rxmyTNJ!*4Ej zFY5@_MApIJ;czWv;-D>B1$p@VNv5OsfzKMb{R7E6>KMN@irF&VKqN?BhYU-8#BGZ} zY~42_zi1|3Rkd9{Xd?|}qi)E`la8@j^d>6w_C{VcL_MixE5Le*6O4Gh)&6L_b0A9P zw#X_MWjBT_roXkfOuf0gH{GaZw6NCA>9{MaOH6R&=F!KV67{O2D*Dc@(~(96&o5@N z?Kf2f*soV29HR>o9cI+kI=a}%;mPjLPO_WyKA_h}CfmjE(7fu^;!DRw*?8~BoEvpO zAg^SOxZWAG8=6&ZNX$b;Co%I;DSXuHM4w|Deu07I8231003yk<5Y}iv5`M9cC+5li zP{(fQ_>iBYCgJcB$k7_v0M_zjjWIbiYLT*6cm`~^y0{~Wz={@u9C2@`iZLIk+a9C# zFYL4WSkOf7UT-3`avaIVFE%`o17!nE4y!RR^h1*CxUO=ATxd~Eb&b@R*}Mn-_1@@h z`@9IE;QE5HMWJ?O9qAeR>7rw>&mv?{&)a98Zu&THo1yiEr&R&{3ZpWkm5Y3gs%~_g zA>GwH(y4WLi)Z)(4oLqPzF62a=qM;AbrI=_q|wi!E;X=mGBR1kKvmR6b@K}w9ahB1 zT~~_)23(wYR701u^tC8c1&T9U|38gd)v|+r7bh9{$ULiRgovXJYzs!@h>sAG+1RK(Y-7&Vh9}ES-^wI`WSOCPq#HPn{Va zwLkcc*Y1jKBQ`lQ26!c98P8-a4Xo6xl!C4mN{*D7S-;CoR_yW}7xr>c(Q;88%|Z;9 z4gu`H!G=0IuO;z#Wg_W!9 z418LHJM-x9X^k8h)q>;`k9zj(pHXjZb;QZF?=tV|b=5A{TbcFS$pa$^-LW z9$gN|cgy(rahV^N*5BioQ;&~Jdv{TvT~H>-Ipu(ykni*GJe{A+-=W*bmRX0R0-`=q zV&`I?Bl@W>2WdR=*GAT}3IT8kR=Ze}3YVg{D|B^`E+baTPGpJlI>>XPiQE@G7 zh0KE_T4a5~-O;s0V$}+QshG*E=BFnC$bcWmsYM}G-y};}6(hG-$B~)J(W*Ti@VF;N zKGB}j2Cb(4(HxO{{o3i1RR3-vqyh)0ilP{Tfv zX9EeqFEsF;Gl;cO;e?lY^e~hmBd>pS9TQE1yBydKkx3GEMCBl0RPIvSgr#B>hktN} zo=}tOumh7is-f}zJfZ3FAoEkmx|^x<{Df>7d~swZz$*+sI;!}Ox?*^wZPaRJZI3G7 zgR9PD){gqn_cVJr&%nyy#Pk9@5w2UkBspWF{)G&}5$E9lgM=FXf&Uw2y4s|F4Brgu zfh&cKpqYs_vhwh@fs96pkbN_ zK{k#oH9au&-&A#Oh4`B~8e1nXmh3)cchA?XZynd)F-`1sjWnO>TaqO3jk_j8WK!s^v52bF*SjVf;(6B2LhyeDGn8^=Fa?00G{%@tp#4L-fjpnq&G^?(>vOnJ~o^#J@q z{|?ov*z-J{G+0PFa#jVwa~iAb8qNPsSqHEsFNzne6PA}$W9_hY_Rh}H3rP1qndP4y>4G@r5lP{_;(dEoZ{st`>yh=rzakEDVdphFIGp^CF%ytY zH>Vps`oCwzMV3iRg(Kr5(uGbPAV}~{8?CK-Y}wgegStw(g_4r5YZWch+O`gdua`#| z<%qP3>dyIpbhCl~;o(#VefIVc1z=-5yAhQy#LIVc9CmoeM~zHqpG%_{o#_7EFGtpp z2>-}aV<8*J$h5?*2=3u!p`erYWak+WFXHJM5%+D1@a`P-s>Gqbui97qHXoSq;kr(# z6R2X-4t+i{E+KZ+^IWSLRNILETqh4+YkoFso_4G&#mHkH`72MLAVuKd0#&UVNVyrb z+=%7zg;>|t^FW7=x?1Lb)b1RSEAhCI86snD=+&}Ac;bAH4~QedVezV{Z1O~PY={eE zvSL=OI*RWK`=%500im70UYz?oRn9p-P4HK^GJ0~3YHVsL;R5X3fx`N6>ykE%FX|FVD`pd`U+P%A2B%Djq7x@-f!i3FTB?Wvq$^E_yl|J|o??vf z68QBU)0_-1$-vj}mw4s>K&bh4d^)l~p7@+kY6i(>pa1tZz8e*vX5{)L;(MY;j=z~> gjN{C_bENV5iC5$O% Date: Mon, 15 Jun 2026 16:00:40 +0300 Subject: [PATCH 06/23] Add ASR unit tests (CPU) and audio docs tests/unit/test_asr.py: CPU-tier unit coverage for the ASR backend (audio coercion, mono/resample, lazy-load, transcribe with mocked pipeline); loads the leaf module by path so it runs without the vLLM extra. docs/AUDIO.md: how to compose --enable-audio, call it (Python + OpenAI server), the cascade design and the future-encoder seam, and alpha limitations. Signed-off-by: aviv ron --- docs/AUDIO.md | 113 ++++++++++++++++++++++++++++++++++++ tests/unit/test_asr.py | 129 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 242 insertions(+) create mode 100644 docs/AUDIO.md create mode 100644 tests/unit/test_asr.py diff --git a/docs/AUDIO.md b/docs/AUDIO.md new file mode 100644 index 0000000..2a7cdcd --- /dev/null +++ b/docs/AUDIO.md @@ -0,0 +1,113 @@ +# Audio Input (Alpha) + +Granite Switch can accept **audio input** through a single vLLM model load — no +separate speech server, no change to how developers deploy or call the model. + +This is an **alpha**: a speech-to-text *cascade*. Audio is transcribed to text by +a small ASR model and the transcript is fed to the LLM as ordinary tokens. It is +intentionally simple and requires no training. The "proper" upgrade (feeding a +trained projection of a speech encoder's embeddings straight into the LLM) reuses +the same hooks — see [Design](#design) below. + +## Building an audio-enabled checkpoint + +Add `--enable-audio` when composing: + +```bash +python -m granite_switch.composer.compose_granite_switch \ + --base-model ibm-granite/granite-4.0-micro \ + --built-in-adapters core \ + --enable-audio \ + --output ./granite-switch-audio +``` + +This adds the `<|audio|>` marker token to the tokenizer and writes the audio +settings into `config.json` so the checkpoint is self-describing: + +```json +{ "asr_enabled": true, "asr_model_id": null, "asr_device": "cpu" } +``` + +- `asr_model_id` — HF id of the speech-to-text model (default: a small built-in + `distil-whisper/distil-small.en`). Override with `--asr-model `, e.g. + `openai/whisper-small` for multilingual. +- `asr_device` — `cpu` (default) keeps vLLM's GPU KV-cache budget clean; set + `--asr-device cuda:0` to run transcription on GPU (watch GPU memory). + +Audio capability is **gated per checkpoint** by `asr_enabled`: a checkpoint built +without `--enable-audio` reports no audio modality and never loads the ASR model. + +## Calling it + +### Python (offline) + +```python +from granite_switch.vllm import register; register() +from vllm import LLM, SamplingParams +import soundfile as sf + +llm = LLM(model="./granite-switch-audio") # one model load +audio, sr = sf.read("question.wav") # numpy array + sample rate + +out = llm.generate({ + "prompt": "Transcript of the audio: <|audio|>\nAnswer:", + "multi_modal_data": {"audio": [(audio, sr)]}, +}, SamplingParams(max_tokens=128)) +print(out[0].outputs[0].text) +``` + +The `<|audio|>` marker is where the transcript is spliced in. + +### OpenAI-compatible server + +```bash +vllm serve ./granite-switch-audio --port 8000 +``` +```python +from openai import OpenAI +client = OpenAI(base_url="http://localhost:8000/v1", api_key="x") +resp = client.chat.completions.create( + model="granite-switch-audio", + messages=[{"role": "user", "content": [ + {"type": "text", "text": "Answer the question in the audio."}, + {"type": "input_audio", "input_audio": {"data": "", "format": "wav"}}, + ]}], +) +print(resp.choices[0].message.content) +``` + +## Design + +Per request, before the scheduler allocates KV cache: + +1. vLLM's multimodal pipeline hands the audio to our processor + (`granite_switch.vllm.audio`). +2. The processor runs ASR → transcript → token ids. +3. A `PromptReplacement` swaps the `<|audio|>` marker for those transcript token + ids. The scheduler then sizes KV for the **real** length — the audio "window" + is variable and decided at runtime, not reserved in advance. +4. The model's `embed_multimodal` supplies embeddings for those positions. In the + alpha that is simply the transcript's own token embeddings (identical to + embedding them as text). **This is the seam the future encoder reuses:** swap + `embed_multimodal` to return `projection(speech_encoder(audio))` and the rest + of the machinery is unchanged. + +The decoder, switch, and LoRA paths are untouched — they only ever see text +tokens. + +## Limitations (alpha) + +- **Cascade, not end-to-end.** Prosody/emotion/uncertainty are lost; ASR errors + propagate to the LLM. Two models run sequentially (ASR then LLM). +- **English by default** (`distil-whisper/distil-small.en`). Use `--asr-model` + for multilingual. +- **Audio runs on the base model.** Combining audio with an adapter (adapter + control tokens in an audio request) is future work. +- One audio clip per request. + +## Tests + +- `tests/unit/test_asr.py` — CPU unit tests for the ASR backend (audio coercion, + resampling, transcription with a mocked pipeline). No GPU/vLLM required. +- End-to-end (GPU): compose an `--enable-audio` checkpoint, then an audio request + through vLLM produces an answer and text-only requests are unaffected. diff --git a/tests/unit/test_asr.py b/tests/unit/test_asr.py new file mode 100644 index 0000000..f5fd4d0 --- /dev/null +++ b/tests/unit/test_asr.py @@ -0,0 +1,129 @@ +# SPDX-License-Identifier: Apache-2.0 +"""Unit tests for the audio ASR backend (granite_switch.vllm.audio.asr). + +The module under test has no vLLM dependency, but it lives under the +``granite_switch.vllm`` package whose ``__init__`` imports vLLM. To keep this a +fast CPU-tier unit test that runs without the vLLM extra installed, we load the +leaf module directly by file path rather than through the package. +""" + +import importlib.util +import pathlib +from unittest import mock + +import numpy as np +import pytest + +# Load asr.py directly (bypasses granite_switch.vllm.__init__ -> vLLM import). +_ASR_PATH = ( + pathlib.Path(__file__).resolve().parents[2] + / "src/granite_switch/vllm/audio/asr.py" +) +_spec = importlib.util.spec_from_file_location("gs_asr_under_test", _ASR_PATH) +asr = importlib.util.module_from_spec(_spec) +_spec.loader.exec_module(asr) + + +class TestCoerceAudio: + def test_array_plus_rate(self): + a = np.zeros(1600, dtype=np.float32) + arr, sr = asr._coerce_audio(a, 16000) + assert sr == 16000 and arr is a + + def test_tuple_form(self): + a = np.zeros(800, dtype=np.float32) + arr, sr = asr._coerce_audio((a, 8000), None) + assert sr == 8000 and arr is a + + def test_list_input_becomes_ndarray(self): + arr, sr = asr._coerce_audio([0.0] * 10, 16000) + assert isinstance(arr, np.ndarray) and sr == 16000 + + def test_missing_sampling_rate_raises(self): + with pytest.raises(ValueError): + asr._coerce_audio(np.zeros(10, dtype=np.float32), None) + + def test_bad_tuple_length_raises(self): + with pytest.raises(ValueError): + asr._coerce_audio((np.zeros(10), 1, 2), None) + + +class TestAsNumpy: + def test_passthrough_ndarray(self): + a = np.arange(5) + assert asr._as_numpy(a) is a + + def test_list(self): + assert np.array_equal(asr._as_numpy([1, 2, 3]), np.array([1, 2, 3])) + + def test_duck_typed_tensor(self): + class FakeTensor: + def __init__(self, x): self._x = x + def detach(self): return self + def cpu(self): return self + def numpy(self): return self._x + + ft = FakeTensor(np.arange(4)) + assert np.array_equal(asr._as_numpy(ft), np.arange(4)) + + +class TestMonoAndResample: + def test_downmix_to_mono_float32(self): + stereo = np.ones((2, 100), dtype=np.float64) + mono = asr._to_mono_float32(stereo) + assert mono.shape == (100,) and mono.dtype == np.float32 + + def test_resample_noop_at_target(self): + a = np.zeros(1600, dtype=np.float32) + assert asr._resample(a, 16000, 16000) is a + + def test_resample_without_librosa_raises_clear_error(self): + # When librosa is unavailable, a non-target rate must raise a clear error. + import builtins + + real_import = builtins.__import__ + + def fake_import(name, *args, **kwargs): + if name == "librosa": + raise ImportError("no librosa") + return real_import(name, *args, **kwargs) + + with mock.patch("builtins.__import__", side_effect=fake_import): + with pytest.raises(RuntimeError, match="librosa"): + asr._resample(np.zeros(800, dtype=np.float32), 8000, 16000) + + +class TestTranscriber: + def test_transcribe_strips_and_uses_target_rate(self): + t = asr.ASRTranscriber(model_id="x", device="cpu") + fake_pipe = mock.Mock(return_value={"text": " hello world "}) + t._pipeline = fake_pipe # inject so load() is a no-op + + out = t.transcribe(np.zeros(1600, dtype=np.float32), sampling_rate=16000) + assert out == "hello world" + passed = fake_pipe.call_args_list[-1][0][0] + assert passed["sampling_rate"] == 16000 + + def test_load_is_idempotent_when_pipeline_set(self): + # Once the pipeline is loaded, load() must early-return (no rebuild). + t = asr.ASRTranscriber(model_id="x", device="cpu") + sentinel = object() + t._pipeline = sentinel + t.load() + assert t._pipeline is sentinel + + +class TestTranscriberCache: + def test_same_key_returns_same_instance(self): + a = asr.get_transcriber("m", "cpu") + b = asr.get_transcriber("m", "cpu") + assert a is b + + def test_default_model_id_resolution(self): + t = asr.get_transcriber(None, "cpu") + assert t.model_id == asr.DEFAULT_ASR_MODEL_ID + + def test_different_device_distinct_instance(self): + a = asr.get_transcriber("m", "cpu") + b = asr.get_transcriber("m", "cuda:0") + assert a is not b From 0156bc69ed7f5e6d950ae76fd8bc30f0d9e63793 Mon Sep 17 00:00:00 2001 From: aviv ron Date: Mon, 15 Jun 2026 16:10:13 +0300 Subject: [PATCH 07/23] docs(audio): mark chat/server path as not-yet-wired (needs chat-template work) Signed-off-by: aviv ron --- docs/AUDIO.md | 27 ++++++++++----------------- 1 file changed, 10 insertions(+), 17 deletions(-) diff --git a/docs/AUDIO.md b/docs/AUDIO.md index 2a7cdcd..3889c73 100644 --- a/docs/AUDIO.md +++ b/docs/AUDIO.md @@ -58,23 +58,16 @@ print(out[0].outputs[0].text) The `<|audio|>` marker is where the transcript is spliced in. -### OpenAI-compatible server - -```bash -vllm serve ./granite-switch-audio --port 8000 -``` -```python -from openai import OpenAI -client = OpenAI(base_url="http://localhost:8000/v1", api_key="x") -resp = client.chat.completions.create( - model="granite-switch-audio", - messages=[{"role": "user", "content": [ - {"type": "text", "text": "Answer the question in the audio."}, - {"type": "input_audio", "input_audio": {"data": "", "format": "wav"}}, - ]}], -) -print(resp.choices[0].message.content) -``` +### OpenAI-compatible server / chat API — not yet wired + +> **Status:** the chat path (and therefore the OpenAI server) does **not** work +> yet. When a chat request carries an audio content part, vLLM renders the prompt +> via the chat template, and the `<|audio|>` marker our processor replaces does +> not end up in the rendered prompt — so prompt replacement fails +> (`Failed to apply prompt replacement for mm_items['audio'][0]`). Making the +> chat template emit the `<|audio|>` placeholder for audio messages is the +> remaining integration step. Until then, use the Python `generate(...)` path +> above, which places the marker explicitly. ## Design From a76ec01097b0a644802effb319ffaf06891cb641 Mon Sep 17 00:00:00 2001 From: aviv ron Date: Mon, 15 Jun 2026 16:47:18 +0300 Subject: [PATCH 08/23] Compose: emit <|audio|> in chat template for audio content parts The Granite content-part loop only handled type=='text' and dropped audio parts, so chat/OpenAI-server requests rendered without the <|audio|> marker and prompt replacement failed. Add configure_audio_chat_template(): injects an elif that appends the marker for any part whose type contains 'audio' (covers audio / input_audio / audio_url). Called during compose when audio is enabled. Signed-off-by: aviv ron --- .../composer/compose_granite_switch.py | 5 +++ .../composer/tokenizer_setup.py | 38 +++++++++++++++++++ 2 files changed, 43 insertions(+) diff --git a/src/granite_switch/composer/compose_granite_switch.py b/src/granite_switch/composer/compose_granite_switch.py index c15ab7f..5806062 100755 --- a/src/granite_switch/composer/compose_granite_switch.py +++ b/src/granite_switch/composer/compose_granite_switch.py @@ -62,6 +62,7 @@ from granite_switch.composer.tokenizer_setup import ( add_audio_token, add_control_tokens, + configure_audio_chat_template, configure_chat_template, get_alora_first_invocation_token_id, ) @@ -806,6 +807,10 @@ def build(): normalized_type = getattr(base_config, "model_type", "").replace("_switch", "") if normalized_type.startswith("granite"): configure_chat_template(tokenizer, all_discovered) + if audio_enabled: + # Make the chat template emit <|audio|> for audio content parts so + # the OpenAI server / chat() path works (the ASR processor replaces it). + configure_audio_chat_template(tokenizer) else: print(" Skipping chat template configuration (non-Granite model)") diff --git a/src/granite_switch/composer/tokenizer_setup.py b/src/granite_switch/composer/tokenizer_setup.py index 8a71456..9da68a4 100644 --- a/src/granite_switch/composer/tokenizer_setup.py +++ b/src/granite_switch/composer/tokenizer_setup.py @@ -113,6 +113,44 @@ def add_audio_token(tokenizer, marker: str = "<|audio|>") -> int: return token_id +def configure_audio_chat_template(tokenizer, marker: str = "<|audio|>") -> None: + """Make the chat template emit the audio marker for audio content parts. + + The Granite content-part loop only handles ``entry.type == 'text'`` and + silently drops other parts. vLLM passes multimodal chat content to the + template as a *list of parts*, so without this the ``<|audio|>`` marker never + reaches the rendered prompt and the ASR processor's prompt replacement fails + (``Failed to apply prompt replacement for mm_items['audio'][0]``). + + We inject an ``elif`` that appends the marker for any part whose ``type`` + contains ``'audio'`` (covers ``audio`` / ``input_audio`` / ``audio_url``). + Call after :func:`configure_chat_template`, gated on audio being enabled. + """ + template = tokenizer.chat_template + if template is None: + print("Warning: no chat template; skipping audio chat-template handling") + return + + # The text-only branch of the Granite content-part loop: + old = ( + " {%- set content.val = content.val + entry.text %}\n" + " {%- endif %}" + ) + if old not in template: + raise ValueError( + "Could not find the Granite content-part loop to inject audio " + "handling; the base chat template may have changed." + ) + new = ( + " {%- set content.val = content.val + entry.text %}\n" + " {%- elif 'audio' in entry.type %}\n" + " {%- set content.val = content.val + '" + marker + "' %}\n" + " {%- endif %}" + ) + tokenizer.chat_template = template.replace(old, new, 1) + print(f" Audio chat-template handling added (emits {marker} for audio parts)") + + def configure_chat_template( tokenizer, discovered_adapters: List[Tuple[Optional[str], str, str, Optional[str]]], From 7ce6c32e80a2e48ec308a657b6006410829c08f7 Mon Sep 17 00:00:00 2001 From: aviv ron Date: Mon, 15 Jun 2026 16:55:16 +0300 Subject: [PATCH 09/23] docs(audio): chat/OpenAI-server path works (input_audio content parts) Signed-off-by: aviv ron --- docs/AUDIO.md | 31 +++++++++++++++++++++---------- 1 file changed, 21 insertions(+), 10 deletions(-) diff --git a/docs/AUDIO.md b/docs/AUDIO.md index 3889c73..71e9353 100644 --- a/docs/AUDIO.md +++ b/docs/AUDIO.md @@ -58,16 +58,27 @@ print(out[0].outputs[0].text) The `<|audio|>` marker is where the transcript is spliced in. -### OpenAI-compatible server / chat API — not yet wired - -> **Status:** the chat path (and therefore the OpenAI server) does **not** work -> yet. When a chat request carries an audio content part, vLLM renders the prompt -> via the chat template, and the `<|audio|>` marker our processor replaces does -> not end up in the rendered prompt — so prompt replacement fails -> (`Failed to apply prompt replacement for mm_items['audio'][0]`). Making the -> chat template emit the `<|audio|>` placeholder for audio messages is the -> remaining integration step. Until then, use the Python `generate(...)` path -> above, which places the marker explicitly. +### OpenAI-compatible server / chat API + +```bash +vllm serve ./granite-switch-audio --port 8000 +``` +```python +from openai import OpenAI +client = OpenAI(base_url="http://localhost:8000/v1", api_key="x") +resp = client.chat.completions.create( + model="granite-switch-audio", + messages=[{"role": "user", "content": [ + {"type": "text", "text": "Answer the question in the audio."}, + {"type": "input_audio", "input_audio": {"data": "", "format": "wav"}}, + ]}], +) +print(resp.choices[0].message.content) +``` + +The chat template emits the `<|audio|>` marker for audio content parts +(`audio` / `input_audio` / `audio_url`), so the processor splices the transcript +in automatically — callers send standard chat messages, no manual marker needed. ## Design From 825284ee1942c207e2fa1a482b32f6bdada97e3d Mon Sep 17 00:00:00 2001 From: aviv ron Date: Mon, 15 Jun 2026 17:23:05 +0300 Subject: [PATCH 10/23] Audio + adapters: route audio through the switch like text Set requires_raw_input_tokens=True so vLLM passes raw input_ids to forward on the multimodal path, letting the switch detect adapter control tokens for audio requests. embed_input_ids now applies the switch's token-exchange rewrite (control -> substitute id) via a new SingleSwitch.apply_token_exchange helper, so control tokens get in-distribution embeddings exactly as on the text path. Signed-off-by: aviv ron --- docs/AUDIO.md | 11 +++++++-- .../vllm/granite_switch_model.py | 20 +++++++++++++--- src/granite_switch/vllm/switch/single.py | 23 ++++++++++++------- 3 files changed, 41 insertions(+), 13 deletions(-) diff --git a/docs/AUDIO.md b/docs/AUDIO.md index 71e9353..2019482 100644 --- a/docs/AUDIO.md +++ b/docs/AUDIO.md @@ -105,10 +105,17 @@ tokens. propagate to the LLM. Two models run sequentially (ASR then LLM). - **English by default** (`distil-whisper/distil-small.en`). Use `--asr-model` for multilingual. -- **Audio runs on the base model.** Combining audio with an adapter (adapter - control tokens in an audio request) is future work. - One audio clip per request. +## Audio + adapters + +Audio requests route through adapters exactly like text requests. The model sets +`requires_raw_input_tokens = True` so vLLM passes the raw `input_ids` to the +forward pass on the multimodal path; the switch then detects adapter control +tokens as usual, and `embed_input_ids` applies the same token-exchange rewrite +(control → substitute id) used for text — so an audio request that activates an +adapter behaves identically to the text equivalent. + ## Tests - `tests/unit/test_asr.py` — CPU unit tests for the ASR backend (audio coercion, diff --git a/src/granite_switch/vllm/granite_switch_model.py b/src/granite_switch/vllm/granite_switch_model.py index 11ef22d..f1fda78 100644 --- a/src/granite_switch/vllm/granite_switch_model.py +++ b/src/granite_switch/vllm/granite_switch_model.py @@ -418,6 +418,12 @@ class GraniteSwitchForCausalLM( supports_multimodal = True + # Force vLLM to pass the raw input_ids to forward() on the multimodal path + # (not just precomputed inputs_embeds). The switch needs them to detect + # adapter control tokens, so audio requests route through adapters exactly + # like text requests. + requires_raw_input_tokens = True + @classmethod def get_placeholder_str(cls, modality: str, i: int): if modality.startswith("audio"): @@ -515,10 +521,18 @@ def embed_input_ids( """Embed token ids; scatter multimodal embeddings into their positions. Returns UN-scaled embeddings (the model forward applies the Granite - embedding_multiplier once over everything). ALPHA scope: audio requests - run on the base model, so no adapter control-token rewrite is needed. + embedding_multiplier once over everything). + + Applies the switch's token-exchange rewrite (control -> substitute ids) + before embedding, so adapter control tokens get their in-distribution + embeddings exactly as on the text path. Adapter *detection* still runs in + forward on the raw input_ids (passed because requires_raw_input_tokens). """ - inputs_embeds = self.model.embed_tokens(input_ids) + ids = input_ids + switch = getattr(self.model, "switch", None) + if switch is not None: + ids = switch.apply_token_exchange(input_ids) + inputs_embeds = self.model.embed_tokens(ids) if multimodal_embeddings is not None and is_multimodal is not None: mm = multimodal_embeddings if isinstance(mm, (list, tuple)): diff --git a/src/granite_switch/vllm/switch/single.py b/src/granite_switch/vllm/switch/single.py index 6a95c0d..a1ad999 100644 --- a/src/granite_switch/vllm/switch/single.py +++ b/src/granite_switch/vllm/switch/single.py @@ -202,13 +202,20 @@ def forward( # @support_torch_compile, which forbids `tensor.any()` branching. # `torch.where` runs every step; the cost is one indexed gather and # one elementwise select on the flat input. - if self.control_to_substitute_lut is not None: - sub_id_per_pos = self.control_to_substitute_lut[input_ids] - is_control = sub_id_per_pos >= 0 - modified_input_ids = torch.where( - is_control, sub_id_per_pos, input_ids - ) - else: - modified_input_ids = input_ids + modified_input_ids = self.apply_token_exchange(input_ids) return adapter_indices, modified_input_ids + + def apply_token_exchange(self, input_ids: torch.Tensor) -> torch.Tensor: + """Rewrite control-token ids to their substitute ids (pure LUT lookup). + + This is the embedding-side half of the switch — no attention, no KV — + so it can be reused by the model's ``embed_input_ids`` on the multimodal + path, where vLLM precomputes ``inputs_embeds`` before ``forward`` runs. + Returns ``input_ids`` unchanged when no substitute LUT was built. + """ + if self.control_to_substitute_lut is None: + return input_ids + sub_id_per_pos = self.control_to_substitute_lut[input_ids] + is_control = sub_id_per_pos >= 0 + return torch.where(is_control, sub_id_per_pos, input_ids) From ebc294c8180989a5433d733be023dcc419ffe0f4 Mon Sep 17 00:00:00 2001 From: aviv ron Date: Wed, 24 Jun 2026 14:24:05 +0300 Subject: [PATCH 11/23] updated demo to support new asr Signed-off-by: aviv ron --- tutorials/notebooks/granite_speech_demo.ipynb | 100 +- uv.lock | 5142 ++++++++++++----- 2 files changed, 3605 insertions(+), 1637 deletions(-) diff --git a/tutorials/notebooks/granite_speech_demo.ipynb b/tutorials/notebooks/granite_speech_demo.ipynb index 2b5c04c..2b5ac58 100644 --- a/tutorials/notebooks/granite_speech_demo.ipynb +++ b/tutorials/notebooks/granite_speech_demo.ipynb @@ -3,39 +3,7 @@ { "cell_type": "markdown", "metadata": {}, - "source": [ - "# Granite Speech Demo — full stack in Colab\n", - "\n", - "Spin up a real-time, validated voice assistant powered by IBM Granite 4.1 — entirely inside a Colab notebook. One cell brings up both vLLM model servers (Granite Speech 4.1 STT + Granite Switch 4.1 LLM), the Pipecat backend, and the Next.js frontend, then prints a public URL you open in your browser to start talking.\n", - "\n", - "**Browser mic → WebRTC → Granite Speech STT → Mellea/Granite Switch LLM → Kokoro TTS → browser speaker.**\n", - "\n", - "This notebook is a runnable companion to the [granite-speech-demo](https://github.com/generative-computing/mellea-demos/tree/main/2026-granite-speech) reference implementation.\n", - "\n", - "## What this demo is\n", - "\n", - "One WebRTC conversation in which every layer of the Granite 4.1 release does something load-bearing: **Granite Speech 4.1** transcribes the audio (with keyword biasing for terms like \"Granite\" and \"Mellea\"); **Granite Switch 4.1** answers, hot-swapping LoRA adapters from inside a single checkpoint via control tokens; the **Granite Libraries** — twelve task-specific adapters spanning Core (explainability and validation), RAG, and Guardian (safety) — score and shape each response, with this demo using `requirement_check` to validate candidates against plain-English requirements (\"no markdown\", \"natural spoken cadence\", \"relevant to IBM\", \"no code\"); **Mellea** orchestrates the turn with its Instruct-Validate-Repair pattern, generating Best-of-N candidates in parallel and only sending one that passes every check to TTS. Validation is on by default, with a UI toggle for plain streaming if you want to feel the latency difference.\n", - "\n", - "## Prerequisites\n", - "\n", - "- **GPU runtime: A100 (Colab Pro) required.** Smaller GPUs won't have enough VRAM to hold both Granite models simultaneously.\n", - "- **HuggingFace read token.** Free; create one at https://huggingface.co/settings/tokens. Add it as a Colab Secret named `HF_TOKEN` (sidebar → 🔑 → New secret). Used for two things: downloading the Granite model weights, *and* minting per-session WebRTC TURN credentials so audio reaches your browser.\n", - "- **Browser:** Chrome, Edge, or Firefox. Safari may behave oddly with WebRTC.\n", - "\n", - "## How long this takes\n", - "\n", - "- **First run on a fresh runtime: ~8–10 min** (model downloads dominate).\n", - "- **Subsequent runs with weights cached: ~3 min.**\n", - "\n", - "## What to do\n", - "\n", - "1. Set the `HF_TOKEN` Colab Secret.\n", - "2. Switch the runtime to an A100 GPU (Runtime → Change runtime type → A100).\n", - "3. **Runtime → Run all.**\n", - "4. When the last cell prints a `*.trycloudflare.com` URL, open it, allow mic access, and start talking.\n", - "\n", - "If anything goes wrong, scroll to the bottom — there's a troubleshooting section and a kill-switch cell." - ] + "source": "# Granite Speech Demo — full stack in Colab (single audio model)\n\nSpin up a real-time voice assistant powered by IBM Granite 4.1 — entirely inside a Colab notebook. One cell brings up a **single** vLLM server (an audio-enabled Granite Switch checkpoint), the Pipecat backend, and the Next.js frontend, then prints a public URL you open in your browser to start talking.\n\n**Browser mic → WebRTC → Granite Switch (audio model) → Kokoro TTS → browser speaker.**\n\nThis is the **single-model** variant of the [granite-speech-demo](https://github.com/generative-computing/mellea-demos/tree/main/2026-granite-speech) reference implementation (backend on the `asr` branch).\n\n## What this demo is\n\nOne WebRTC conversation served by **one model**. The audio-enabled **Granite Switch** checkpoint takes the user's speech directly: it transcribes the audio internally (a small ASR model embedded in the same vLLM process) and generates the spoken answer in a single request — no separate speech-to-text server, no extra orchestration hop. The response streams token-by-token into Kokoro TTS so the assistant starts speaking before the full answer is generated.\n\n> This variant trades the previous two-model setup (separate Granite Speech STT + a Mellea-orchestrated Best-of-N/validation LLM) for the simplest possible path: **audio in → one model → answer out.** It showcases that Granite Switch can accept audio as a single deployable model.\n\n## Prerequisites\n\n- **GPU runtime with ~16+ GiB free** (e.g. Colab A100/L4). The audio model = the LLM weights + a small embedded Whisper.\n- **A composed, audio-enabled checkpoint.** Our audio model isn't on the Hub — compose it once with `--enable-audio` and point `MODEL_PATH` at it (see the configuration cell).\n- **HuggingFace read token.** Free; create one at https://huggingface.co/settings/tokens. Add it as a Colab Secret named `HF_TOKEN`. Used for downloading model weights *and* minting per-session WebRTC TURN credentials.\n- **Browser:** Chrome, Edge, or Firefox. Safari may behave oddly with WebRTC.\n\n## How long this takes\n\n- **First run on a fresh runtime: ~6–8 min** (model download/compose dominates).\n- **Subsequent runs with weights cached: ~3 min.**\n\n## What to do\n\n1. Set the `HF_TOKEN` Colab Secret.\n2. Switch the runtime to a GPU (Runtime → Change runtime type).\n3. Make sure `MODEL_PATH` (configuration cell) points at your composed audio checkpoint.\n4. **Runtime → Run all.**\n5. When the last cell prints a `*.trycloudflare.com` URL, open it, allow mic access, and start talking.\n\nIf anything goes wrong, scroll to the bottom — there's a troubleshooting section and a kill-switch cell." }, { "cell_type": "markdown", @@ -47,7 +15,7 @@ "execution_count": null, "metadata": {}, "outputs": [], - "source": "import subprocess, os, shutil\n\ndef sh(cmd, **kwargs):\n print(f\"\\n$ {cmd}\")\n subprocess.run(cmd, shell=True, check=True, **kwargs)\n\n# Re-runnable: nuke any stale clones so we don't trip on existing dirs.\nshutil.rmtree(\"mellea-demos\", ignore_errors=True)\nshutil.rmtree(\"/tmp/granite-switch\", ignore_errors=True)\n\n# Colab's default Ubuntu repo has Node 12, which is too old for Next.js\n# (chokes on optional-chaining). Install Node 20 from NodeSource instead.\nsh(\"curl -fsSL https://deb.nodesource.com/setup_20.x | bash -\")\nsh(\"apt-get -qq install -y nodejs\")\n\nsh(\"git clone https://github.com/generative-computing/mellea-demos\")\nos.chdir(\"mellea-demos/2026-granite-speech\")\nprint(\"cwd:\", os.getcwd())\n\nsh(\"pip install -q uv\")\nsh(\"uv sync\")\n\n# IMPORTANT: uv sync creates .venv, but `uv pip install` by default targets\n# the system Python. Pin every subsequent install to the project venv.\nVENV_PY = os.path.abspath(\".venv/bin/python\")\nassert os.path.exists(VENV_PY), f\"venv missing: {VENV_PY}\"\n\n# The install order below is load-bearing. Each step's pins can override\n# the previous step's resolution; the final order leaves us with:\n# - mellea 0.6.0 (provides register_embedded_adapter_model, missing in 0.4.2)\n# - vllm 0.19.x with audio deps (Granite Speech needs librosa + soundfile)\n# - granite_switch model architecture registered\n# - transformers 5.5.1 (older versions truncate the requirement_check JSON;\n# newer versions might or might not, so pin exactly what we tested)\n\n# 1. mellea 0.6.0 (0.4.2 release lacks APIs the demo uses)\nsh(f\"uv pip install --python {VENV_PY} 'mellea[all]==0.6.0'\")\n\n# 2. vllm + the right transformers floor + granite_switch model registration.\n# The granite-switch repo's [vllm] extra pins vllm >=0.19.1,<0.20.0 and\n# transformers >=5.5.1 — installing plain `pip install vllm` gives 0.21.0\n# with an older transformers, which fails to recognize the architecture.\nsh(\"git clone https://github.com/generative-computing/granite-switch /tmp/granite-switch\")\nassert os.path.exists(\"/tmp/granite-switch/pyproject.toml\"), \"granite-switch clone failed\"\nsh(f\"uv pip install --python {VENV_PY} -e '/tmp/granite-switch[vllm]'\")\n\n# 3. vllm audio deps. We install librosa + soundfile directly instead of\n# relying on `vllm[audio]` — uv sees vllm as already satisfied from step 2\n# and skips re-resolving the [audio] extras, leaving librosa missing.\n# Without these, /v1/chat/completions returns 500 with\n# 'Please install vllm[audio] for audio support' on any audio input.\nsh(f\"uv pip install --python {VENV_PY} librosa soundfile\")\n\n# 4. Final transformers pin. The earlier installs can leave us on 4.57.6\n# (GPT2 tokenizer crashes on Granite Switch) or 5.0.0 (works for chat\n# but truncates requirement_check JSON output). 5.5.1 is what we tested.\nsh(f\"uv pip install --python {VENV_PY} 'transformers==5.5.1'\")\n\nsh(\"cd frontend && npm install --silent\")\nsh(\"wget -q https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64 -O /usr/local/bin/cloudflared\")\nsh(\"chmod +x /usr/local/bin/cloudflared\")\n\n# Sanity checks — explicitly use the venv's Python so we're checking the right env.\nsh(f\"{VENV_PY} -c 'import vllm; print(\\\"vllm version:\\\", vllm.__version__)'\")\nsh(f\"{VENV_PY} -c 'import granite_switch.hf'\")\nsh(f\"{VENV_PY} -c 'import transformers; v = transformers.__version__; assert v == \\\"5.5.1\\\", \\\"got \\\" + v + \\\", wanted 5.5.1\\\"; print(\\\"transformers OK:\\\", v)'\")\nsh(f\"{VENV_PY} -c 'from mellea.backends.openai import OpenAIBackend; assert hasattr(OpenAIBackend, \\\"register_embedded_adapter_model\\\"), \\\"mellea version too old\\\"; print(\\\"mellea OK\\\")'\")\nsh(f\"{VENV_PY} -c 'import librosa, soundfile; print(\\\"vllm audio deps OK (librosa\\\", librosa.__version__, \\\"/ soundfile\\\", soundfile.__version__, \\\")\\\")'\")\n\nprint(\"\\n✅ Install complete\")" + "source": "import subprocess, os, shutil\n\ndef sh(cmd, **kwargs):\n print(f\"\\n$ {cmd}\")\n subprocess.run(cmd, shell=True, check=True, **kwargs)\n\n# Re-runnable: nuke any stale clones so we don't trip on existing dirs.\nshutil.rmtree(\"mellea-demos\", ignore_errors=True)\nshutil.rmtree(\"/tmp/granite-switch\", ignore_errors=True)\n\n# Colab's default Ubuntu repo has Node 12, which is too old for Next.js\n# (chokes on optional-chaining). Install Node 20 from NodeSource instead.\nsh(\"curl -fsSL https://deb.nodesource.com/setup_20.x | bash -\")\nsh(\"apt-get -qq install -y nodejs\")\n\n# The `asr` branch (on this fork) carries the single-model voice pipeline\n# (audio -> answer in one request; no separate STT, no Mellea stage).\nsh(\"git clone -b asr https://github.com/aviv1ron1/mellea-demos\")\nos.chdir(\"mellea-demos/2026-granite-speech\")\nprint(\"cwd:\", os.getcwd())\n\nsh(\"pip install -q uv\")\nsh(\"uv sync\")\n\n# IMPORTANT: uv sync creates .venv, but `uv pip install` by default targets\n# the system Python. Pin every subsequent install to the project venv.\nVENV_PY = os.path.abspath(\".venv/bin/python\")\nassert os.path.exists(VENV_PY), f\"venv missing: {VENV_PY}\"\n\n# 1. mellea 0.6.0 — still installed (the package imports it elsewhere), but the\n# single-model voice path no longer uses the Mellea LLM stage.\nsh(f\"uv pip install --python {VENV_PY} 'mellea[all]==0.6.0'\")\n\n# 2. vllm + the right transformers floor + granite_switch model registration\n# (the audio-enabled GraniteSwitch architecture + its ASR processor live here).\nsh(\"git clone -b asr-switch https://github.com/generative-computing/granite-switch /tmp/granite-switch\")\nassert os.path.exists(\"/tmp/granite-switch/pyproject.toml\"), \"granite-switch clone failed\"\nsh(f\"uv pip install --python {VENV_PY} -e '/tmp/granite-switch[vllm,audio]'\")\n\n# 3. vllm audio deps (the ASR cascade needs librosa + soundfile to decode audio).\nsh(f\"uv pip install --python {VENV_PY} librosa soundfile\")\n\n# 4. Final transformers pin (5.5.1 is what we tested against Granite Switch).\nsh(f\"uv pip install --python {VENV_PY} 'transformers==5.5.1'\")\n\nsh(\"cd frontend && npm install --silent\")\nsh(\"wget -q https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64 -O /usr/local/bin/cloudflared\")\nsh(\"chmod +x /usr/local/bin/cloudflared\")\n\n# Sanity checks — explicitly use the venv's Python so we're checking the right env.\nsh(f\"{VENV_PY} -c 'import vllm; print(\\\"vllm version:\\\", vllm.__version__)'\")\nsh(f\"{VENV_PY} -c 'import granite_switch.hf'\")\nsh(f\"{VENV_PY} -c 'import transformers; v = transformers.__version__; assert v == \\\"5.5.1\\\", \\\"got \\\" + v + \\\", wanted 5.5.1\\\"; print(\\\"transformers OK:\\\", v)'\")\nsh(f\"{VENV_PY} -c 'import librosa, soundfile; print(\\\"vllm audio deps OK (librosa\\\", librosa.__version__, \\\"/ soundfile\\\", soundfile.__version__, \\\")\\\")'\")\n\nprint(\"\\n✅ Install complete\")" }, { "cell_type": "markdown", @@ -75,31 +43,21 @@ { "cell_type": "code", "metadata": {}, - "source": [ - "import os\n", - "\n", - "# Edit these to point at your own prompt or docs.\n", - "# Both paths are resolved relative to the project root if not absolute.\n", - "os.environ[\"PROMPT_FILE\"] = \"prompts/granite.txt\"\n", - "os.environ[\"DOCUMENTS_DIR\"] = \"docs\"\n", - "\n", - "print(f\"PROMPT_FILE = {os.environ['PROMPT_FILE']}\")\n", - "print(f\"DOCUMENTS_DIR = {os.environ['DOCUMENTS_DIR']}\")" - ], + "source": "import os\n\n# Path to the COMPOSED, audio-enabled Granite Switch checkpoint (the single\n# model this demo serves). Built by patching granite-switch-4.1-3b-preview with\n# the <|audio|> token + audio chat-template + asr_enabled config, and saved to\n# COS — available on Vela at the mount below.\n# (On Colab instead, point this at a local path you composed/uploaded.)\nos.environ[\"MODEL_PATH\"] = \"/danieloh_cos/avivron/granite-switch/granite-switch-audio\"\n\n# System prompt for the assistant (sent with each audio request).\nos.environ[\"PROMPT_FILE\"] = \"prompts/granite.txt\"\n\nprint(f\"MODEL_PATH = {os.environ['MODEL_PATH']}\")\nprint(f\"PROMPT_FILE = {os.environ['PROMPT_FILE']}\")", "outputs": [], "execution_count": null }, { "cell_type": "markdown", "metadata": {}, - "source": "## 4 · Launch vLLM model servers (~5-8 min cold, ~30s cached)\n\nTwo vLLM processes:\n- **Port 8083:** [`ibm-granite/granite-speech-4.1-2b`](https://huggingface.co/ibm-granite/granite-speech-4.1-2b) — STT.\n- **Port 8000:** [`ibm-granite/granite-switch-4.1-3b-preview`](https://huggingface.co/ibm-granite/granite-switch-4.1-3b-preview) — chat LLM with `requirement_check` ALoRA intrinsics.\n\nBoth run in the background; logs stream to `logs/vllm-*.log`. The cell blocks until both servers respond on `/v1/models`." + "source": "## 4 · Launch the vLLM model server (~2-4 min cold, ~30s cached)\n\n**One** vLLM process — your composed, audio-enabled **Granite Switch** checkpoint (`MODEL_PATH`) on **port 8000**. It transcribes the incoming audio *internally* (Whisper, on the `asr_device` baked into the checkpoint) and generates the answer in the same request, so there's no separate STT server.\n\nRuns in the background; logs stream to `logs/vllm-audio.log`. The cell blocks until the server responds on `/v1/models`." }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], - "source": "import os\nimport subprocess\nimport time\nimport urllib.request\nimport urllib.error\n\nos.makedirs(\"logs\", exist_ok=True)\n\nVENV_VLLM = os.path.abspath(\".venv/bin/vllm\")\nassert os.path.exists(VENV_VLLM), f\"vllm not installed in venv: {VENV_VLLM}\"\n\n# Pre-flight: kill any stale vllm processes from a prior failed run, then\n# verify the GPU has enough free memory before we try again.\nsubprocess.run(\"pkill -9 -f vllm || true\", shell=True)\ntime.sleep(3)\nfree_mem = subprocess.check_output(\n [\"nvidia-smi\", \"--query-gpu=memory.free\", \"--format=csv,noheader,nounits\"]\n).decode().strip().splitlines()[0]\nfree_gib = int(free_mem) / 1024\nprint(f\"GPU free memory: {free_gib:.1f} GiB\")\nif free_gib < 22:\n raise RuntimeError(\n f\"Only {free_gib:.1f} GiB free on the GPU — need >=22. Something else is using it.\\n\"\n \"Run `!nvidia-smi` in a new cell to see which process. Kill it with `!kill -9 `.\"\n )\n\ndef _tail(path: str, n: int = 80) -> str:\n try:\n with open(path) as f:\n return \"\".join(f.readlines()[-n:])\n except FileNotFoundError:\n return \"(log file missing)\"\n\ndef wait_for(url: str, name: str, proc: subprocess.Popen, log_path: str, timeout: int = 1200) -> None:\n \"\"\"Poll until the URL returns 2xx. Bails out early if the process dies.\"\"\"\n start = time.time()\n last_err = None\n while time.time() - start < timeout:\n rc = proc.poll()\n if rc is not None:\n raise RuntimeError(\n f\"{name} exited early with code {rc}. Last log lines:\\n\"\n + \"-\" * 60 + \"\\n\" + _tail(log_path) + \"-\" * 60\n )\n try:\n with urllib.request.urlopen(url, timeout=5) as r:\n if 200 <= r.status < 300:\n elapsed = int(time.time() - start)\n print(f\"✅ {name} ready ({elapsed}s)\")\n return\n except urllib.error.HTTPError as e:\n # vllm returns 401 to unauth'd /v1/models polls when --api-key is set.\n # The 401 proves the server is up and accepting requests, which is\n # all we care about for readiness. Any HTTPError means the server\n # is responding, so treat it as ready.\n elapsed = int(time.time() - start)\n print(f\"✅ {name} ready ({elapsed}s, status {e.code})\")\n return\n except (urllib.error.URLError, ConnectionError, TimeoutError) as e:\n last_err = e\n time.sleep(5)\n raise TimeoutError(\n f\"{name} did not become ready in {timeout}s. Last error: {last_err}.\\n\"\n f\"Last log lines:\\n\" + \"-\" * 60 + \"\\n\" + _tail(log_path) + \"-\" * 60\n )\n\n# Launch SEQUENTIALLY — wait for each to fully initialize before starting the next.\n# Parallel launch causes vllm's memory-profiling assertion to fire because\n# both processes are allocating/freeing GPU memory at the same time and each\n# sees the other's churn as 'unexpected' free-memory deltas.\nspeech_log = open(\"logs/vllm-speech.log\", \"w\")\nprint(\"⏳ Starting Granite Speech vLLM (downloads weights on first run, ~4 min)...\")\nspeech_proc = subprocess.Popen(\n [\n VENV_VLLM, \"serve\", \"ibm-granite/granite-speech-4.1-2b\",\n \"--api-key\", \"token-abc123\",\n \"--max-model-len\", \"2048\",\n \"--gpu-memory-utilization\", \"0.4\",\n \"--port\", \"8083\",\n ],\n stdout=speech_log, stderr=subprocess.STDOUT,\n)\nwait_for(\"http://127.0.0.1:8083/v1/models\", \"Granite Speech (STT)\", speech_proc, \"logs/vllm-speech.log\", timeout=1200)\n\nswitch_log = open(\"logs/vllm-switch.log\", \"w\")\nprint(\"⏳ Starting Granite Switch vLLM (downloads weights on first run, ~4 min)...\")\nswitch_proc = subprocess.Popen(\n [\n VENV_VLLM, \"serve\", \"ibm-granite/granite-switch-4.1-3b-preview\",\n \"--gpu-memory-utilization\", \"0.4\",\n # Cap context window so KV cache fits in our 0.4 GPU share. The default\n # 131072 wants ~15 GiB of KV cache; voice turns need a tiny fraction of that.\n \"--max-model-len\", \"8192\",\n \"--port\", \"8000\",\n ],\n stdout=switch_log, stderr=subprocess.STDOUT,\n)\nwait_for(\"http://127.0.0.1:8000/v1/models\", \"Granite Switch (LLM)\", switch_proc, \"logs/vllm-switch.log\", timeout=1200)\n\nprint(\"✅ Both vLLM servers are up\")" + "source": "import os\nimport subprocess\nimport time\nimport urllib.request\nimport urllib.error\n\nos.makedirs(\"logs\", exist_ok=True)\n\nVENV_VLLM = os.path.abspath(\".venv/bin/vllm\")\nassert os.path.exists(VENV_VLLM), f\"vllm not installed in venv: {VENV_VLLM}\"\n\nMODEL_PATH = os.environ.get(\"MODEL_PATH\", \"/content/granite-switch-audio\")\nSERVED_NAME = \"granite-switch-audio\"\nassert os.path.exists(os.path.join(MODEL_PATH, \"config.json\")), (\n f\"No composed audio checkpoint at {MODEL_PATH}. Compose one with --enable-audio \"\n \"first (see the configuration cell above).\"\n)\n\n# Pre-flight: kill any stale vllm processes, verify enough free GPU memory.\nsubprocess.run(\"pkill -9 -f vllm || true\", shell=True)\ntime.sleep(3)\nfree_mem = subprocess.check_output(\n [\"nvidia-smi\", \"--query-gpu=memory.free\", \"--format=csv,noheader,nounits\"]\n).decode().strip().splitlines()[0]\nfree_gib = int(free_mem) / 1024\nprint(f\"GPU free memory: {free_gib:.1f} GiB\")\nif free_gib < 16:\n raise RuntimeError(\n f\"Only {free_gib:.1f} GiB free on the GPU — need >=16 for the audio model \"\n \"(LLM + Whisper). Free the GPU (kill-switch cell) and retry.\"\n )\n\ndef _tail(path: str, n: int = 80) -> str:\n try:\n with open(path) as f:\n return \"\".join(f.readlines()[-n:])\n except FileNotFoundError:\n return \"(log file missing)\"\n\ndef wait_for(url: str, name: str, proc: subprocess.Popen, log_path: str, timeout: int = 1200) -> None:\n \"\"\"Poll until the URL responds. Bails out early if the process dies.\"\"\"\n start = time.time()\n last_err = None\n while time.time() - start < timeout:\n rc = proc.poll()\n if rc is not None:\n raise RuntimeError(\n f\"{name} exited early with code {rc}. Last log lines:\\n\"\n + \"-\" * 60 + \"\\n\" + _tail(log_path) + \"-\" * 60\n )\n try:\n with urllib.request.urlopen(url, timeout=5) as r:\n if 200 <= r.status < 300:\n print(f\"✅ {name} ready ({int(time.time() - start)}s)\")\n return\n except urllib.error.HTTPError as e:\n print(f\"✅ {name} ready ({int(time.time() - start)}s, status {e.code})\")\n return\n except (urllib.error.URLError, ConnectionError, TimeoutError) as e:\n last_err = e\n time.sleep(5)\n raise TimeoutError(\n f\"{name} did not become ready in {timeout}s. Last error: {last_err}.\\n\"\n f\"Last log lines:\\n\" + \"-\" * 60 + \"\\n\" + _tail(log_path) + \"-\" * 60\n )\n\n# ONE server now: the audio-enabled Granite Switch model. It transcribes the\n# incoming audio internally (Whisper on the asr_device baked into the checkpoint\n# config) and generates the answer — so there's no separate STT server.\naudio_log = open(\"logs/vllm-audio.log\", \"w\")\nprint(\"⏳ Starting Granite Switch (audio) vLLM (loads weights + Whisper, ~2-4 min)...\")\nswitch_proc = subprocess.Popen(\n [\n VENV_VLLM, \"serve\", MODEL_PATH,\n \"--served-model-name\", SERVED_NAME,\n # One model now, so it can use more of the GPU than the old 0.4 split.\n \"--gpu-memory-utilization\", \"0.6\",\n \"--max-model-len\", \"8192\",\n \"--port\", \"8000\",\n ],\n stdout=audio_log, stderr=subprocess.STDOUT,\n)\nwait_for(\"http://127.0.0.1:8000/v1/models\", \"Granite Switch (audio)\", switch_proc, \"logs/vllm-audio.log\", timeout=1200)\n\nprint(\"✅ Audio model server is up (one model — STT is built in)\")" }, { "cell_type": "markdown", @@ -111,51 +69,7 @@ "execution_count": null, "metadata": {}, "outputs": [], - "source": [ - "import os\n", - "import subprocess\n", - "import time\n", - "import urllib.request\n", - "import urllib.error\n", - "\n", - "VENV_PY = os.path.abspath(\".venv/bin/python\")\n", - "\n", - "# Build the frontend in production mode. Dev mode (`npm run dev`) tries to\n", - "# open a webpack-hmr WebSocket back through the cloudflared tunnel, which\n", - "# tunnels poorly and triggers dynamic-import failures that leave the chat\n", - "# UI blank. Prod mode is a static-served bundle — no HMR, no SSR weirdness.\n", - "print(\"⏳ Building frontend (prod mode, ~30-60s)...\")\n", - "subprocess.run(\n", - " \"cd frontend && rm -rf .next && npm run build 2>&1 | tail -10\",\n", - " shell=True, check=True,\n", - ")\n", - "\n", - "backend_env = {**os.environ}\n", - "backend_env.setdefault(\"HOST\", \"127.0.0.1\")\n", - "backend_env.setdefault(\"PORT\", \"7860\")\n", - "# PROMPT_FILE and DOCUMENTS_DIR are set in the configuration cell above and\n", - "# inherited via os.environ.\n", - "\n", - "backend_log = open(\"logs/backend.log\", \"w\")\n", - "backend_proc = subprocess.Popen(\n", - " [VENV_PY, \"-m\", \"granite_speech_demo.server\"],\n", - " env=backend_env,\n", - " stdout=backend_log, stderr=subprocess.STDOUT,\n", - ")\n", - "\n", - "frontend_env = {**os.environ, \"PIPECAT_BACKEND_URL\": \"http://127.0.0.1:7860\"}\n", - "frontend_log = open(\"logs/frontend.log\", \"w\")\n", - "frontend_proc = subprocess.Popen(\n", - " [\"npm\", \"run\", \"start\"],\n", - " cwd=\"frontend\",\n", - " env=frontend_env,\n", - " stdout=frontend_log, stderr=subprocess.STDOUT,\n", - ")\n", - "\n", - "wait_for(\"http://127.0.0.1:7860/api/ivr/config\", \"Pipecat backend\", backend_proc, \"logs/backend.log\", timeout=120)\n", - "wait_for(\"http://127.0.0.1:3000\", \"Next.js frontend\", frontend_proc, \"logs/frontend.log\", timeout=120)\n", - "print(\"✅ Backend + frontend are up\")" - ] + "source": "import os\nimport subprocess\nimport time\nimport urllib.request\nimport urllib.error\n\nVENV_PY = os.path.abspath(\".venv/bin/python\")\n\n# Build the frontend in production mode. Dev mode (`npm run dev`) tries to\n# open a webpack-hmr WebSocket back through the cloudflared tunnel, which\n# tunnels poorly and triggers dynamic-import failures that leave the chat\n# UI blank. Prod mode is a static-served bundle — no HMR, no SSR weirdness.\nprint(\"⏳ Building frontend (prod mode, ~30-60s)...\")\nsubprocess.run(\n \"cd frontend && rm -rf .next && npm run build 2>&1 | tail -10\",\n shell=True, check=True,\n)\n\nbackend_env = {**os.environ}\nbackend_env.setdefault(\"HOST\", \"127.0.0.1\")\nbackend_env.setdefault(\"PORT\", \"7860\")\n# Point the backend's single audio service at our one model server. The\n# AudioLLMService sends the user's audio (input_audio) straight here and streams\n# the answer — no separate STT endpoint.\nbackend_env[\"LLM_URL\"] = \"http://127.0.0.1:8000/v1\"\nbackend_env[\"LLM_MODEL\"] = \"granite-switch-audio\"\n# PROMPT_FILE is set in the configuration cell above and inherited via os.environ.\n\nbackend_log = open(\"logs/backend.log\", \"w\")\nbackend_proc = subprocess.Popen(\n [VENV_PY, \"-m\", \"granite_speech_demo.server\"],\n env=backend_env,\n stdout=backend_log, stderr=subprocess.STDOUT,\n)\n\nfrontend_env = {**os.environ, \"PIPECAT_BACKEND_URL\": \"http://127.0.0.1:7860\"}\nfrontend_log = open(\"logs/frontend.log\", \"w\")\nfrontend_proc = subprocess.Popen(\n [\"npm\", \"run\", \"start\"],\n cwd=\"frontend\",\n env=frontend_env,\n stdout=frontend_log, stderr=subprocess.STDOUT,\n)\n\nwait_for(\"http://127.0.0.1:7860/api/ivr/config\", \"Pipecat backend\", backend_proc, \"logs/backend.log\", timeout=120)\nwait_for(\"http://127.0.0.1:3000\", \"Next.js frontend\", frontend_proc, \"logs/frontend.log\", timeout=120)\nprint(\"✅ Backend + frontend are up\")" }, { "cell_type": "markdown", @@ -317,4 +231,4 @@ }, "nbformat": 4, "nbformat_minor": 0 -} +} \ No newline at end of file diff --git a/uv.lock b/uv.lock index 42a2de8..1daf72f 100644 --- a/uv.lock +++ b/uv.lock @@ -1,80 +1,286 @@ version = 1 revision = 3 -requires-python = ">=3.10, <3.14" +requires-python = ">=3.11, <3.14" resolution-markers = [ - "python_full_version >= '3.13' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.12.*' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20'", - "python_full_version >= '3.13' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.12.*' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.11.*' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20'", - "python_full_version < '3.11' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.11.*' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20'", - "python_full_version < '3.11' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20'", - "python_full_version >= '3.13' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.12.*' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20'", - "python_full_version >= '3.13' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.12.*' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.11.*' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20'", - "python_full_version < '3.11' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.11.*' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20'", - "python_full_version < '3.11' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20'", - "python_full_version >= '3.13' and extra == 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.12.*' and extra == 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.11.*' and extra == 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version < '3.11' and extra == 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version >= '3.13' and extra == 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.12.*' and extra == 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.11.*' and extra == 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version < '3.11' and extra == 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.11.*' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version < '3.11' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.11.*' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version < '3.11' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version >= '3.13' and extra == 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.12.*' and extra == 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.11.*' and extra == 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version < '3.11' and extra == 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version >= '3.13' and extra == 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.12.*' and extra == 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.11.*' and extra == 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version < '3.11' and extra == 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version >= '3.13' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.12.*' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version >= '3.13' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.12.*' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.11.*' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version < '3.11' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.11.*' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version < '3.11' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.11.*' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version < '3.11' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version >= '3.11' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version < '3.11' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", ] conflicts = [[ - { package = "granite-switch", extra = "vllm" }, - { package = "granite-switch", extra = "vllm20" }, + { package = "granite-switch", group = "vllm19" }, + { package = "granite-switch", group = "vllm20" }, +], [ + { package = "granite-switch", group = "dev" }, + { package = "granite-switch", group = "vllm20" }, +], [ + { package = "granite-switch", group = "dev" }, + { package = "granite-switch", group = "dev-vllm20" }, +], [ + { package = "granite-switch", group = "dev-vllm20" }, + { package = "granite-switch", group = "vllm19" }, ], [ - { package = "granite-switch", extra = "dev" }, { package = "granite-switch", extra = "vllm20" }, + { package = "granite-switch", group = "vllm19" }, +], [ + { package = "granite-switch", extra = "vllm" }, + { package = "granite-switch", group = "vllm20" }, ], [ - { package = "granite-switch", extra = "dev" }, - { package = "granite-switch", extra = "dev-vllm20" }, + { package = "granite-switch", extra = "tutorials" }, + { package = "granite-switch", group = "vllm20" }, +], [ + { package = "granite-switch", extra = "vllm20" }, + { package = "granite-switch", group = "dev" }, ], [ - { package = "granite-switch", extra = "dev-vllm20" }, { package = "granite-switch", extra = "vllm" }, + { package = "granite-switch", group = "dev-vllm20" }, ], [ { package = "granite-switch", extra = "tutorials" }, + { package = "granite-switch", group = "dev-vllm20" }, +], [ + { package = "granite-switch", extra = "vllm" }, { package = "granite-switch", extra = "vllm20" }, ], [ - { package = "granite-switch", extra = "dev-vllm20" }, { package = "granite-switch", extra = "tutorials" }, + { package = "granite-switch", extra = "vllm20" }, +], [ + { package = "granite-switch", group = "dev-vllm20" }, + { package = "granite-switch", group = "test" }, +], [ + { package = "granite-switch", extra = "vllm20" }, + { package = "granite-switch", group = "test" }, +], [ + { package = "granite-switch", group = "test" }, + { package = "granite-switch", group = "vllm20" }, ]] [[package]] @@ -92,15 +298,15 @@ version = "1.13.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "huggingface-hub" }, - { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' or extra == 'extra-14-granite-switch-dev' or extra == 'extra-14-granite-switch-tutorials' or extra == 'extra-14-granite-switch-vllm'" }, - { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and python_full_version < '3.13' and extra == 'extra-14-granite-switch-dev-vllm20') or (python_full_version >= '3.11' and python_full_version < '3.13' and extra == 'extra-14-granite-switch-vllm20') or (python_full_version < '3.11' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20') or (python_full_version < '3.11' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (python_full_version < '3.11' and extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (python_full_version < '3.11' and extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm') or (python_full_version < '3.11' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (python_full_version < '3.11' and extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (python_full_version >= '3.13' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20') or (python_full_version >= '3.13' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (python_full_version >= '3.13' and extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (python_full_version >= '3.13' and extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm') or (python_full_version >= '3.13' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (python_full_version >= '3.13' and extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20')" }, - { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.13' and extra == 'extra-14-granite-switch-dev-vllm20') or (python_full_version >= '3.13' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm') or (python_full_version >= '3.11' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm') or (extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20')" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-14-granite-switch-tutorials' or extra == 'extra-14-granite-switch-vllm' or extra == 'group-14-granite-switch-dev' or extra == 'group-14-granite-switch-test' or extra == 'group-14-granite-switch-vllm19'" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.13' and extra == 'extra-14-granite-switch-vllm20') or (python_full_version < '3.13' and extra == 'group-14-granite-switch-dev-vllm20') or (python_full_version < '3.13' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20')" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.13' and extra == 'extra-14-granite-switch-vllm20') or (python_full_version >= '3.13' and extra == 'group-14-granite-switch-dev-vllm20') or (python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20') or (extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20')" }, { name = "packaging" }, { name = "psutil" }, { name = "pyyaml" }, { name = "safetensors" }, - { name = "torch", version = "2.10.0", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-14-granite-switch-dev' or extra == 'extra-14-granite-switch-tutorials' or extra == 'extra-14-granite-switch-vllm'" }, - { name = "torch", version = "2.11.0", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-14-granite-switch-dev-vllm20' or (extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm')" }, + { name = "torch", version = "2.10.0", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-14-granite-switch-tutorials' or extra == 'extra-14-granite-switch-vllm' or extra == 'group-14-granite-switch-dev' or extra == 'group-14-granite-switch-test' or extra == 'group-14-granite-switch-vllm19'" }, + { name = "torch", version = "2.11.0", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-14-granite-switch-vllm20' or extra == 'group-14-granite-switch-dev-vllm20' or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20') or (extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19')" }, ] 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 = [ @@ -123,7 +329,6 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "aiohappyeyeballs" }, { name = "aiosignal" }, - { name = "async-timeout", marker = "python_full_version < '3.11'" }, { name = "attrs" }, { name = "frozenlist" }, { name = "multidict" }, @@ -132,23 +337,6 @@ dependencies = [ ] sdist = { url = "https://files.pythonhosted.org/packages/77/9a/152096d4808df8e4268befa55fba462f440f14beab85e8ad9bf990516918/aiohttp-3.13.5.tar.gz", hash = "sha256:9d98cc980ecc96be6eb4c1994ce35d28d8b1f5e5208a23b421187d1209dbb7d1", size = 7858271, upload-time = "2026-03-31T22:01:03.343Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/bd/85/cebc47ee74d8b408749073a1a46c6fcba13d170dc8af7e61996c6c9394ac/aiohttp-3.13.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:02222e7e233295f40e011c1b00e3b0bd451f22cf853a0304c3595633ee47da4b", size = 750547, upload-time = "2026-03-31T21:56:30.024Z" }, - { url = "https://files.pythonhosted.org/packages/05/98/afd308e35b9d3d8c9ec54c0918f1d722c86dc17ddfec272fcdbcce5a3124/aiohttp-3.13.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bace460460ed20614fa6bc8cb09966c0b8517b8c58ad8046828c6078d25333b5", size = 503535, upload-time = "2026-03-31T21:56:31.935Z" }, - { url = "https://files.pythonhosted.org/packages/6f/4d/926c183e06b09d5270a309eb50fbde7b09782bfd305dec1e800f329834fb/aiohttp-3.13.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8f546a4dc1e6a5edbb9fd1fd6ad18134550e096a5a43f4ad74acfbd834fc6670", size = 497830, upload-time = "2026-03-31T21:56:33.654Z" }, - { url = "https://files.pythonhosted.org/packages/e4/d6/f47d1c690f115a5c2a5e8938cce4a232a5be9aac5c5fb2647efcbbbda333/aiohttp-3.13.5-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c86969d012e51b8e415a8c6ce96f7857d6a87d6207303ab02d5d11ef0cad2274", size = 1682474, upload-time = "2026-03-31T21:56:35.513Z" }, - { url = "https://files.pythonhosted.org/packages/01/44/056fd37b1bb52eac760303e5196acc74d9d546631b035704ae5927f7b4ac/aiohttp-3.13.5-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:b6f6cd1560c5fa427e3b6074bb24d2c64e225afbb7165008903bd42e4e33e28a", size = 1655259, upload-time = "2026-03-31T21:56:37.843Z" }, - { url = "https://files.pythonhosted.org/packages/91/9f/78eb1a20c1c28ae02f6a3c0f4d7b0dcc66abce5290cadd53d78ce3084175/aiohttp-3.13.5-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:636bc362f0c5bbc7372bc3ae49737f9e3030dbce469f0f422c8f38079780363d", size = 1736204, upload-time = "2026-03-31T21:56:39.822Z" }, - { url = "https://files.pythonhosted.org/packages/de/6c/d20d7de23f0b52b8c1d9e2033b2db1ac4dacbb470bb74c56de0f5f86bb4f/aiohttp-3.13.5-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:6a7cbeb06d1070f1d14895eeeed4dac5913b22d7b456f2eb969f11f4b3993796", size = 1826198, upload-time = "2026-03-31T21:56:41.378Z" }, - { url = "https://files.pythonhosted.org/packages/2f/86/a6f3ff1fd795f49545a7c74b2c92f62729135d73e7e4055bf74da5a26c82/aiohttp-3.13.5-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bca9ef7517fd7874a1a08970ae88f497bf5c984610caa0bf40bd7e8450852b95", size = 1681329, upload-time = "2026-03-31T21:56:43.374Z" }, - { url = "https://files.pythonhosted.org/packages/fb/68/84cd3dab6b7b4f3e6fe9459a961acb142aaab846417f6e8905110d7027e5/aiohttp-3.13.5-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:019a67772e034a0e6b9b17c13d0a8fe56ad9fb150fc724b7f3ffd3724288d9e5", size = 1560023, upload-time = "2026-03-31T21:56:45.031Z" }, - { url = "https://files.pythonhosted.org/packages/41/2c/db61b64b0249e30f954a65ab4cb4970ced57544b1de2e3c98ee5dc24165f/aiohttp-3.13.5-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:f34ecee82858e41dd217734f0c41a532bd066bcaab636ad830f03a30b2a96f2a", size = 1652372, upload-time = "2026-03-31T21:56:47.075Z" }, - { url = "https://files.pythonhosted.org/packages/25/6f/e96988a6c982d047810c772e28c43c64c300c943b0ed5c1c0c4ce1e1027c/aiohttp-3.13.5-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:4eac02d9af4813ee289cd63a361576da36dba57f5a1ab36377bc2600db0cbb73", size = 1662031, upload-time = "2026-03-31T21:56:48.835Z" }, - { url = "https://files.pythonhosted.org/packages/b7/26/a56feace81f3d347b4052403a9d03754a0ab23f7940780dada0849a38c92/aiohttp-3.13.5-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:4beac52e9fe46d6abf98b0176a88154b742e878fdf209d2248e99fcdf73cd297", size = 1708118, upload-time = "2026-03-31T21:56:50.833Z" }, - { url = "https://files.pythonhosted.org/packages/78/6e/b6173a8ff03d01d5e1a694bc06764b5dad1df2d4ed8f0ceec12bb3277936/aiohttp-3.13.5-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:c180f480207a9b2475f2b8d8bd7204e47aec952d084b2a2be58a782ffcf96074", size = 1548667, upload-time = "2026-03-31T21:56:52.81Z" }, - { url = "https://files.pythonhosted.org/packages/16/13/13296ffe2c132d888b3fe2c195c8b9c0c24c89c3fa5cc2c44464dc23b22e/aiohttp-3.13.5-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:2837fb92951564d6339cedae4a7231692aa9f73cbc4fb2e04263b96844e03b4e", size = 1724490, upload-time = "2026-03-31T21:56:54.541Z" }, - { url = "https://files.pythonhosted.org/packages/7a/b4/1f1c287f4a79782ef36e5a6e62954c85343bc30470d862d30bd5f26c9fa2/aiohttp-3.13.5-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:d9010032a0b9710f58012a1e9c222528763d860ba2ee1422c03473eab47703e7", size = 1667109, upload-time = "2026-03-31T21:56:56.21Z" }, - { url = "https://files.pythonhosted.org/packages/ef/42/8461a2aaf60a8f4ea4549a4056be36b904b0eb03d97ca9a8a2604681a500/aiohttp-3.13.5-cp310-cp310-win32.whl", hash = "sha256:7c4b6668b2b2b9027f209ddf647f2a4407784b5d88b8be4efcc72036f365baf9", size = 439478, upload-time = "2026-03-31T21:56:58.292Z" }, - { url = "https://files.pythonhosted.org/packages/e5/71/06956304cb5ee439dfe8d86e1b2e70088bd88ed1ced1f42fb29e5d855f0e/aiohttp-3.13.5-cp310-cp310-win_amd64.whl", hash = "sha256:cd3db5927bf9167d5a6157ddb2f036f6b6b0ad001ac82355d43e97a4bde76d76", size = 462047, upload-time = "2026-03-31T21:57:00.257Z" }, { url = "https://files.pythonhosted.org/packages/d6/f5/a20c4ac64aeaef1679e25c9983573618ff765d7aa829fa2b84ae7573169e/aiohttp-3.13.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:7ab7229b6f9b5c1ba4910d6c41a9eb11f543eadb3f384df1b4c293f4e73d44d6", size = 757513, upload-time = "2026-03-31T21:57:02.146Z" }, { url = "https://files.pythonhosted.org/packages/75/0a/39fa6c6b179b53fcb3e4b3d2b6d6cad0180854eda17060c7218540102bef/aiohttp-3.13.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8f14c50708bb156b3a3ca7230b3d820199d56a48e3af76fa21c2d6087190fe3d", size = 506748, upload-time = "2026-03-31T21:57:04.275Z" }, { url = "https://files.pythonhosted.org/packages/87/ec/e38ce072e724fd7add6243613f8d1810da084f54175353d25ccf9f9c7e5a/aiohttp-3.13.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e7d2f8616f0ff60bd332022279011776c3ac0faa0f1b463f7bb12326fbc97a1c", size = 501673, upload-time = "2026-03-31T21:57:06.208Z" }, @@ -233,15 +421,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53", size = 13643, upload-time = "2024-05-20T21:33:24.1Z" }, ] -[[package]] -name = "ansicolors" -version = "1.1.8" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/76/31/7faed52088732704523c259e24c26ce6f2f33fbeff2ff59274560c27628e/ansicolors-1.1.8.zip", hash = "sha256:99f94f5e3348a0bcd43c82e5fc4414013ccc19d70bd939ad71e0133ce9c372e0", size = 23027, upload-time = "2017-06-02T21:22:10.729Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/53/18/a56e2fe47b259bb52201093a3a9d4a32014f9d85071ad07e9d60600890ca/ansicolors-1.1.8-py2.py3-none-any.whl", hash = "sha256:00d2dde5a675579325902536738dd27e4fac1fd68f773fe36c21044eb559e187", size = 13847, upload-time = "2017-06-02T21:22:12.67Z" }, -] - [[package]] name = "anthropic" version = "0.103.0" @@ -275,7 +454,6 @@ name = "anyio" version = "4.13.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "exceptiongroup", marker = "python_full_version < '3.11'" }, { name = "idna" }, { name = "typing-extensions", marker = "python_full_version < '3.13'" }, ] @@ -293,12 +471,6 @@ dependencies = [ ] sdist = { url = "https://files.pythonhosted.org/packages/6f/60/1e787a0b5ebf318483235be2a689ee367173983067e441b8379564f667c0/apache_tvm_ffi-0.1.9.tar.gz", hash = "sha256:d2d402587e8906de0a07f4746aa78f3d452c7efe3625d4bb39ac2ad693bce530", size = 2513731, upload-time = "2026-02-27T19:28:06.602Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/56/3d/4594c14de64e92697a91eec8ac6518ad72a3f30776aff432e68c2c6d9d3d/apache_tvm_ffi-0.1.9-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d911cbbc83bf12a0d9ec03e5315ff1bb92d95702fe912cd7a050393274382e71", size = 2068752, upload-time = "2026-02-27T19:27:03.001Z" }, - { url = "https://files.pythonhosted.org/packages/83/0a/827e4f9ae85e1be3037818abd59566d906ba1fe27295c6938b12cc482151/apache_tvm_ffi-0.1.9-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:1c8dd4018420c0d14bace688594710909ce198056ff8ac2ad1cd462b30fe1bdd", size = 2231204, upload-time = "2026-02-27T19:27:04.734Z" }, - { url = "https://files.pythonhosted.org/packages/ae/b6/f1ec5c528918c4dae03885ec472663072a984431d7d7fb04ca0798a2e13c/apache_tvm_ffi-0.1.9-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:7f6bc8846d570b8ce38692fc91b530b44cd6ae092c805a844da23970e81b12c0", size = 2323684, upload-time = "2026-02-27T19:27:06.284Z" }, - { url = "https://files.pythonhosted.org/packages/28/08/818836fbc0f198da1597896f82d7e6556bf5678cd5150d633214bf14b718/apache_tvm_ffi-0.1.9-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f3ec9149f207a7af3ea3531cad7a0b0d04ded06df4f51a547479d5eb489428dd", size = 2160066, upload-time = "2026-02-27T19:27:07.897Z" }, - { url = "https://files.pythonhosted.org/packages/c8/6b/2e7d73d055523c2fb31394cd3d55593969a0680619e1c939c2128c2fdd36/apache_tvm_ffi-0.1.9-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:eefcd17f61bf503ff0f4ad429e03ef6c241c7d13682f58281d883218b854c9bd", size = 2307014, upload-time = "2026-02-27T19:27:10.287Z" }, - { url = "https://files.pythonhosted.org/packages/c1/9d/9b99efbeaaed4c78a2b7cfeda6b8fc7d6249616938c05ae0248aa0bf0d56/apache_tvm_ffi-0.1.9-cp310-cp310-win_amd64.whl", hash = "sha256:dd58da01331826fbe6c064d6f0c9bbc2d62883b78df8d15baa8ea21d37507e4d", size = 1993158, upload-time = "2026-02-27T19:27:11.884Z" }, { url = "https://files.pythonhosted.org/packages/b0/44/130571cede8704b1412e48b3dd78de41b4d31b68241f954743d1a9925bd9/apache_tvm_ffi-0.1.9-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:932d94e29595a47109f0ef6e0b4209a934451582954ea8b426e758d6b3e307e3", size = 2070368, upload-time = "2026-02-27T19:27:13.779Z" }, { url = "https://files.pythonhosted.org/packages/42/b1/9f2cfd6d49b03c5d4ec5c12548d911e2e01265be783f343103b4df716765/apache_tvm_ffi-0.1.9-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:c0449fc3802987c3652bea266ffda2934a6f69c80bba791a3f55b91040656a18", size = 2231154, upload-time = "2026-02-27T19:27:15.691Z" }, { url = "https://files.pythonhosted.org/packages/55/43/63faedea83494e99122466a993bcdccd31cf93c7e8a0d56731120e82e2b9/apache_tvm_ffi-0.1.9-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:6f16d73a82a9e68a439b7d233d48b1b929be17fe92df4bbf1ee2274e573144a3", size = 2323130, upload-time = "2026-02-27T19:27:17.259Z" }, @@ -332,21 +504,65 @@ wheels = [ ] [[package]] -name = "async-timeout" -version = "5.0.1" +name = "attrs" +version = "26.1.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/a5/ae/136395dfbfe00dfc94da3f3e136d0b13f394cba8f4841120e34226265780/async_timeout-5.0.1.tar.gz", hash = "sha256:d9321a7a3d5a6a5e187e824d2fa0793ce379a202935782d555d6e9d2735677d3", size = 9274, upload-time = "2024-11-06T16:41:39.6Z" } +sdist = { url = "https://files.pythonhosted.org/packages/9a/8e/82a0fe20a541c03148528be8cac2408564a6c9a0cc7e9171802bc1d26985/attrs-26.1.0.tar.gz", hash = "sha256:d03ceb89cb322a8fd706d4fb91940737b6642aa36998fe130a9bc96c985eff32", size = 952055, upload-time = "2026-03-19T14:22:25.026Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/fe/ba/e2081de779ca30d473f21f5b30e0e737c438205440784c7dfc81efc2b029/async_timeout-5.0.1-py3-none-any.whl", hash = "sha256:39e3809566ff85354557ec2398b55e096c8364bacac9405a7a1fa429e77fe76c", size = 6233, upload-time = "2024-11-06T16:41:37.9Z" }, + { url = "https://files.pythonhosted.org/packages/64/b4/17d4b0b2a2dc85a6df63d1157e028ed19f90d4cd97c36717afef2bc2f395/attrs-26.1.0-py3-none-any.whl", hash = "sha256:c647aa4a12dfbad9333ca4e71fe62ddc36f4e63b2d260a37a8b83d2f043ac309", size = 67548, upload-time = "2026-03-19T14:22:23.645Z" }, ] [[package]] -name = "attrs" -version = "26.1.0" +name = "audioop-lts" +version = "0.2.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/9a/8e/82a0fe20a541c03148528be8cac2408564a6c9a0cc7e9171802bc1d26985/attrs-26.1.0.tar.gz", hash = "sha256:d03ceb89cb322a8fd706d4fb91940737b6642aa36998fe130a9bc96c985eff32", size = 952055, upload-time = "2026-03-19T14:22:25.026Z" } +sdist = { url = "https://files.pythonhosted.org/packages/38/53/946db57842a50b2da2e0c1e34bd37f36f5aadba1a929a3971c5d7841dbca/audioop_lts-0.2.2.tar.gz", hash = "sha256:64d0c62d88e67b98a1a5e71987b7aa7b5bcffc7dcee65b635823dbdd0a8dbbd0", size = 30686, upload-time = "2025-08-05T16:43:17.409Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/64/b4/17d4b0b2a2dc85a6df63d1157e028ed19f90d4cd97c36717afef2bc2f395/attrs-26.1.0-py3-none-any.whl", hash = "sha256:c647aa4a12dfbad9333ca4e71fe62ddc36f4e63b2d260a37a8b83d2f043ac309", size = 67548, upload-time = "2026-03-19T14:22:23.645Z" }, + { url = "https://files.pythonhosted.org/packages/de/d4/94d277ca941de5a507b07f0b592f199c22454eeaec8f008a286b3fbbacd6/audioop_lts-0.2.2-cp313-abi3-macosx_10_13_universal2.whl", hash = "sha256:fd3d4602dc64914d462924a08c1a9816435a2155d74f325853c1f1ac3b2d9800", size = 46523, upload-time = "2025-08-05T16:42:20.836Z" }, + { url = "https://files.pythonhosted.org/packages/f8/5a/656d1c2da4b555920ce4177167bfeb8623d98765594af59702c8873f60ec/audioop_lts-0.2.2-cp313-abi3-macosx_10_13_x86_64.whl", hash = "sha256:550c114a8df0aafe9a05442a1162dfc8fec37e9af1d625ae6060fed6e756f303", size = 27455, upload-time = "2025-08-05T16:42:22.283Z" }, + { url = "https://files.pythonhosted.org/packages/1b/83/ea581e364ce7b0d41456fb79d6ee0ad482beda61faf0cab20cbd4c63a541/audioop_lts-0.2.2-cp313-abi3-macosx_11_0_arm64.whl", hash = "sha256:9a13dc409f2564de15dd68be65b462ba0dde01b19663720c68c1140c782d1d75", size = 26997, upload-time = "2025-08-05T16:42:23.849Z" }, + { url = "https://files.pythonhosted.org/packages/b8/3b/e8964210b5e216e5041593b7d33e97ee65967f17c282e8510d19c666dab4/audioop_lts-0.2.2-cp313-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:51c916108c56aa6e426ce611946f901badac950ee2ddaf302b7ed35d9958970d", size = 85844, upload-time = "2025-08-05T16:42:25.208Z" }, + { url = "https://files.pythonhosted.org/packages/c7/2e/0a1c52faf10d51def20531a59ce4c706cb7952323b11709e10de324d6493/audioop_lts-0.2.2-cp313-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:47eba38322370347b1c47024defbd36374a211e8dd5b0dcbce7b34fdb6f8847b", size = 85056, upload-time = "2025-08-05T16:42:26.559Z" }, + { url = "https://files.pythonhosted.org/packages/75/e8/cd95eef479656cb75ab05dfece8c1f8c395d17a7c651d88f8e6e291a63ab/audioop_lts-0.2.2-cp313-abi3-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ba7c3a7e5f23e215cb271516197030c32aef2e754252c4c70a50aaff7031a2c8", size = 93892, upload-time = "2025-08-05T16:42:27.902Z" }, + { url = "https://files.pythonhosted.org/packages/5c/1e/a0c42570b74f83efa5cca34905b3eef03f7ab09fe5637015df538a7f3345/audioop_lts-0.2.2-cp313-abi3-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:def246fe9e180626731b26e89816e79aae2276f825420a07b4a647abaa84becc", size = 96660, upload-time = "2025-08-05T16:42:28.9Z" }, + { url = "https://files.pythonhosted.org/packages/50/d5/8a0ae607ca07dbb34027bac8db805498ee7bfecc05fd2c148cc1ed7646e7/audioop_lts-0.2.2-cp313-abi3-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e160bf9df356d841bb6c180eeeea1834085464626dc1b68fa4e1d59070affdc3", size = 79143, upload-time = "2025-08-05T16:42:29.929Z" }, + { url = "https://files.pythonhosted.org/packages/12/17/0d28c46179e7910bfb0bb62760ccb33edb5de973052cb2230b662c14ca2e/audioop_lts-0.2.2-cp313-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:4b4cd51a57b698b2d06cb9993b7ac8dfe89a3b2878e96bc7948e9f19ff51dba6", size = 84313, upload-time = "2025-08-05T16:42:30.949Z" }, + { url = "https://files.pythonhosted.org/packages/84/ba/bd5d3806641564f2024e97ca98ea8f8811d4e01d9b9f9831474bc9e14f9e/audioop_lts-0.2.2-cp313-abi3-musllinux_1_2_ppc64le.whl", hash = "sha256:4a53aa7c16a60a6857e6b0b165261436396ef7293f8b5c9c828a3a203147ed4a", size = 93044, upload-time = "2025-08-05T16:42:31.959Z" }, + { url = "https://files.pythonhosted.org/packages/f9/5e/435ce8d5642f1f7679540d1e73c1c42d933331c0976eb397d1717d7f01a3/audioop_lts-0.2.2-cp313-abi3-musllinux_1_2_riscv64.whl", hash = "sha256:3fc38008969796f0f689f1453722a0f463da1b8a6fbee11987830bfbb664f623", size = 78766, upload-time = "2025-08-05T16:42:33.302Z" }, + { url = "https://files.pythonhosted.org/packages/ae/3b/b909e76b606cbfd53875693ec8c156e93e15a1366a012f0b7e4fb52d3c34/audioop_lts-0.2.2-cp313-abi3-musllinux_1_2_s390x.whl", hash = "sha256:15ab25dd3e620790f40e9ead897f91e79c0d3ce65fe193c8ed6c26cffdd24be7", size = 87640, upload-time = "2025-08-05T16:42:34.854Z" }, + { url = "https://files.pythonhosted.org/packages/30/e7/8f1603b4572d79b775f2140d7952f200f5e6c62904585d08a01f0a70393a/audioop_lts-0.2.2-cp313-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:03f061a1915538fd96272bac9551841859dbb2e3bf73ebe4a23ef043766f5449", size = 86052, upload-time = "2025-08-05T16:42:35.839Z" }, + { url = "https://files.pythonhosted.org/packages/b5/96/c37846df657ccdda62ba1ae2b6534fa90e2e1b1742ca8dcf8ebd38c53801/audioop_lts-0.2.2-cp313-abi3-win32.whl", hash = "sha256:3bcddaaf6cc5935a300a8387c99f7a7fbbe212a11568ec6cf6e4bc458c048636", size = 26185, upload-time = "2025-08-05T16:42:37.04Z" }, + { url = "https://files.pythonhosted.org/packages/34/a5/9d78fdb5b844a83da8a71226c7bdae7cc638861085fff7a1d707cb4823fa/audioop_lts-0.2.2-cp313-abi3-win_amd64.whl", hash = "sha256:a2c2a947fae7d1062ef08c4e369e0ba2086049a5e598fda41122535557012e9e", size = 30503, upload-time = "2025-08-05T16:42:38.427Z" }, + { url = "https://files.pythonhosted.org/packages/34/25/20d8fde083123e90c61b51afb547bb0ea7e77bab50d98c0ab243d02a0e43/audioop_lts-0.2.2-cp313-abi3-win_arm64.whl", hash = "sha256:5f93a5db13927a37d2d09637ccca4b2b6b48c19cd9eda7b17a2e9f77edee6a6f", size = 24173, upload-time = "2025-08-05T16:42:39.704Z" }, + { url = "https://files.pythonhosted.org/packages/58/a7/0a764f77b5c4ac58dc13c01a580f5d32ae8c74c92020b961556a43e26d02/audioop_lts-0.2.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:73f80bf4cd5d2ca7814da30a120de1f9408ee0619cc75da87d0641273d202a09", size = 47096, upload-time = "2025-08-05T16:42:40.684Z" }, + { url = "https://files.pythonhosted.org/packages/aa/ed/ebebedde1a18848b085ad0fa54b66ceb95f1f94a3fc04f1cd1b5ccb0ed42/audioop_lts-0.2.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:106753a83a25ee4d6f473f2be6b0966fc1c9af7e0017192f5531a3e7463dce58", size = 27748, upload-time = "2025-08-05T16:42:41.992Z" }, + { url = "https://files.pythonhosted.org/packages/cb/6e/11ca8c21af79f15dbb1c7f8017952ee8c810c438ce4e2b25638dfef2b02c/audioop_lts-0.2.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:fbdd522624141e40948ab3e8cdae6e04c748d78710e9f0f8d4dae2750831de19", size = 27329, upload-time = "2025-08-05T16:42:42.987Z" }, + { url = "https://files.pythonhosted.org/packages/84/52/0022f93d56d85eec5da6b9da6a958a1ef09e80c39f2cc0a590c6af81dcbb/audioop_lts-0.2.2-cp313-cp313t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:143fad0311e8209ece30a8dbddab3b65ab419cbe8c0dde6e8828da25999be911", size = 92407, upload-time = "2025-08-05T16:42:44.336Z" }, + { url = "https://files.pythonhosted.org/packages/87/1d/48a889855e67be8718adbc7a01f3c01d5743c325453a5e81cf3717664aad/audioop_lts-0.2.2-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:dfbbc74ec68a0fd08cfec1f4b5e8cca3d3cd7de5501b01c4b5d209995033cde9", size = 91811, upload-time = "2025-08-05T16:42:45.325Z" }, + { url = "https://files.pythonhosted.org/packages/98/a6/94b7213190e8077547ffae75e13ed05edc488653c85aa5c41472c297d295/audioop_lts-0.2.2-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:cfcac6aa6f42397471e4943e0feb2244549db5c5d01efcd02725b96af417f3fe", size = 100470, upload-time = "2025-08-05T16:42:46.468Z" }, + { url = "https://files.pythonhosted.org/packages/e9/e9/78450d7cb921ede0cfc33426d3a8023a3bda755883c95c868ee36db8d48d/audioop_lts-0.2.2-cp313-cp313t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:752d76472d9804ac60f0078c79cdae8b956f293177acd2316cd1e15149aee132", size = 103878, upload-time = "2025-08-05T16:42:47.576Z" }, + { url = "https://files.pythonhosted.org/packages/4f/e2/cd5439aad4f3e34ae1ee852025dc6aa8f67a82b97641e390bf7bd9891d3e/audioop_lts-0.2.2-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:83c381767e2cc10e93e40281a04852facc4cd9334550e0f392f72d1c0a9c5753", size = 84867, upload-time = "2025-08-05T16:42:49.003Z" }, + { url = "https://files.pythonhosted.org/packages/68/4b/9d853e9076c43ebba0d411e8d2aa19061083349ac695a7d082540bad64d0/audioop_lts-0.2.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:c0022283e9556e0f3643b7c3c03f05063ca72b3063291834cca43234f20c60bb", size = 90001, upload-time = "2025-08-05T16:42:50.038Z" }, + { url = "https://files.pythonhosted.org/packages/58/26/4bae7f9d2f116ed5593989d0e521d679b0d583973d203384679323d8fa85/audioop_lts-0.2.2-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:a2d4f1513d63c795e82948e1305f31a6d530626e5f9f2605408b300ae6095093", size = 99046, upload-time = "2025-08-05T16:42:51.111Z" }, + { url = "https://files.pythonhosted.org/packages/b2/67/a9f4fb3e250dda9e9046f8866e9fa7d52664f8985e445c6b4ad6dfb55641/audioop_lts-0.2.2-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:c9c8e68d8b4a56fda8c025e538e639f8c5953f5073886b596c93ec9b620055e7", size = 84788, upload-time = "2025-08-05T16:42:52.198Z" }, + { url = "https://files.pythonhosted.org/packages/70/f7/3de86562db0121956148bcb0fe5b506615e3bcf6e63c4357a612b910765a/audioop_lts-0.2.2-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:96f19de485a2925314f5020e85911fb447ff5fbef56e8c7c6927851b95533a1c", size = 94472, upload-time = "2025-08-05T16:42:53.59Z" }, + { url = "https://files.pythonhosted.org/packages/f1/32/fd772bf9078ae1001207d2df1eef3da05bea611a87dd0e8217989b2848fa/audioop_lts-0.2.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:e541c3ef484852ef36545f66209444c48b28661e864ccadb29daddb6a4b8e5f5", size = 92279, upload-time = "2025-08-05T16:42:54.632Z" }, + { url = "https://files.pythonhosted.org/packages/4f/41/affea7181592ab0ab560044632571a38edaf9130b84928177823fbf3176a/audioop_lts-0.2.2-cp313-cp313t-win32.whl", hash = "sha256:d5e73fa573e273e4f2e5ff96f9043858a5e9311e94ffefd88a3186a910c70917", size = 26568, upload-time = "2025-08-05T16:42:55.627Z" }, + { url = "https://files.pythonhosted.org/packages/28/2b/0372842877016641db8fc54d5c88596b542eec2f8f6c20a36fb6612bf9ee/audioop_lts-0.2.2-cp313-cp313t-win_amd64.whl", hash = "sha256:9191d68659eda01e448188f60364c7763a7ca6653ed3f87ebb165822153a8547", size = 30942, upload-time = "2025-08-05T16:42:56.674Z" }, + { url = "https://files.pythonhosted.org/packages/ee/ca/baf2b9cc7e96c179bb4a54f30fcd83e6ecb340031bde68f486403f943768/audioop_lts-0.2.2-cp313-cp313t-win_arm64.whl", hash = "sha256:c174e322bb5783c099aaf87faeb240c8d210686b04bd61dfd05a8e5a83d88969", size = 24603, upload-time = "2025-08-05T16:42:57.571Z" }, +] + +[[package]] +name = "audioread" +version = "3.1.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "standard-aifc", marker = "python_full_version >= '3.13' or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20')" }, + { name = "standard-sunau", marker = "python_full_version >= '3.13' or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20')" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a1/4a/874ecf9b472f998130c2b5e145dcdb9f6131e84786111489103b66772143/audioread-3.1.0.tar.gz", hash = "sha256:1c4ab2f2972764c896a8ac61ac53e261c8d29f0c6ccd652f84e18f08a4cab190", size = 20082, upload-time = "2025-10-26T19:44:13.484Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7e/16/fbe8e1e185a45042f7cd3a282def5bb8d95bb69ab9e9ef6a5368aa17e426/audioread-3.1.0-py3-none-any.whl", hash = "sha256:b30d1df6c5d3de5dcef0fb0e256f6ea17bdcf5f979408df0297d8a408e2971b4", size = 23143, upload-time = "2025-10-26T19:44:12.016Z" }, ] [[package]] @@ -411,12 +627,9 @@ name = "bitsandbytes" version = "0.49.2" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' or extra == 'extra-14-granite-switch-dev' or extra == 'extra-14-granite-switch-tutorials' or extra == 'extra-14-granite-switch-vllm'" }, - { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and python_full_version < '3.13' and extra == 'extra-14-granite-switch-dev-vllm20') or (python_full_version >= '3.11' and python_full_version < '3.13' and extra == 'extra-14-granite-switch-vllm20') or (python_full_version < '3.11' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20') or (python_full_version < '3.11' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (python_full_version < '3.11' and extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (python_full_version < '3.11' and extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm') or (python_full_version < '3.11' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (python_full_version < '3.11' and extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (python_full_version >= '3.13' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20') or (python_full_version >= '3.13' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (python_full_version >= '3.13' and extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (python_full_version >= '3.13' and extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm') or (python_full_version >= '3.13' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (python_full_version >= '3.13' and extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20')" }, - { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.13' and extra == 'extra-14-granite-switch-dev-vllm20') or (python_full_version >= '3.13' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm') or (python_full_version >= '3.11' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm') or (extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20')" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" } }, { name = "packaging" }, - { name = "torch", version = "2.10.0", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-14-granite-switch-dev' or extra == 'extra-14-granite-switch-tutorials' or extra == 'extra-14-granite-switch-vllm'" }, - { name = "torch", version = "2.11.0", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-14-granite-switch-dev-vllm20' or (extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm')" }, + { name = "torch", version = "2.10.0", source = { registry = "https://pypi.org/simple" } }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/d8/7d/f1fe0992334b18cd8494f89aeec1dcc674635584fcd9f115784fea3a1d05/bitsandbytes-0.49.2-py3-none-macosx_14_0_arm64.whl", hash = "sha256:87be5975edeac5396d699ecbc39dfc47cf2c026daaf2d5852a94368611a6823f", size = 131940, upload-time = "2026-02-16T21:26:04.572Z" }, @@ -434,18 +647,6 @@ dependencies = [ ] sdist = { url = "https://files.pythonhosted.org/packages/75/aa/abcd75e9600987a0bc6cfe9b6b2ff3f0e2cb08c170addc6e76035b5c4cb3/blake3-1.0.8.tar.gz", hash = "sha256:513cc7f0f5a7c035812604c2c852a0c1468311345573de647e310aca4ab165ba", size = 117308, upload-time = "2025-10-14T06:47:48.83Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/52/a0/fbe66cf17f72cab1600246b90db6cb39b52a88335b9bd2821688379d8dde/blake3-1.0.8-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:8956bb9aec47b6c37ccce935a943588f1f5e6e2e85d43bb7cb76a574238f8a9b", size = 350634, upload-time = "2025-10-14T06:45:09.621Z" }, - { url = "https://files.pythonhosted.org/packages/20/bc/f4b88873054aa87b8c36398775713bf674807e7449a9c7fefe35d3cf1dc5/blake3-1.0.8-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:7adbbee5dd0c302218eb8acdfd82b7006930eb5798f56f79f9cca89f6f192662", size = 328382, upload-time = "2025-10-14T06:45:11.137Z" }, - { url = "https://files.pythonhosted.org/packages/b9/e5/4c37ced9358cece71f2f380a57f77a449f6e87cc6d9f450613237b7a3078/blake3-1.0.8-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:859cd57bac097a2cd63cb36d64c2f6f16c9edece5590f929e70157478e46dc9e", size = 371337, upload-time = "2025-10-14T06:45:12.296Z" }, - { url = "https://files.pythonhosted.org/packages/d1/df/0825da1cde7ca63a8bcdc785ca7f8647b025e9497eef18c75bb9754dbd26/blake3-1.0.8-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9e1d70bf76c02846d0868a3d413eb6c430b76a315e12f1b2e59b5cf56c1f62a3", size = 374945, upload-time = "2025-10-14T06:45:13.99Z" }, - { url = "https://files.pythonhosted.org/packages/b7/a3/43f10c623179dce789ca9e3b8f4064fb6312e99f05c1aae360d07ad95bb0/blake3-1.0.8-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d3fe26f145fcb82931d1820b55c0279f72f8f8e49450dd9d74efbfd409b28423", size = 448766, upload-time = "2025-10-14T06:45:15.471Z" }, - { url = "https://files.pythonhosted.org/packages/db/8f/9431bf5fe0eedeb2aadb4fe81fb18945cf8d49adad98e7988fb3cdac76c2/blake3-1.0.8-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:97c076d58ee37eb5b2d8d91bb9db59c5a008fd59c71845dc57fe438aeeabaf10", size = 507107, upload-time = "2025-10-14T06:45:17.055Z" }, - { url = "https://files.pythonhosted.org/packages/ac/55/3712cdaebaefa8d5acec46f8df7861ba1832e1e188bc1333dd5acd31f760/blake3-1.0.8-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:78731ce7fca46f776ae45fb5271a2a76c4a92c9687dd4337e84b2ae9a174b28f", size = 393955, upload-time = "2025-10-14T06:45:18.718Z" }, - { url = "https://files.pythonhosted.org/packages/1f/d0/add0441e7aaa6b358cac0ddc9246f0799b60d25f06bd542b554afe19fd85/blake3-1.0.8-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c65e373c8b47174b969ee61a89ee56922f722972eb650192845c8546df8d9db9", size = 387577, upload-time = "2025-10-14T06:45:20.332Z" }, - { url = "https://files.pythonhosted.org/packages/b2/9a/e4a61f5c0cad4d51a886e8f4367e590caaead8a4809892292bf724c4421d/blake3-1.0.8-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:db54946792d2b8c6fa4be73e6e334519f13c1b52e7ff346b3e2ec8ad3eb59401", size = 550515, upload-time = "2025-10-14T06:45:21.867Z" }, - { url = "https://files.pythonhosted.org/packages/28/c7/90c01091465628acff96534e82d4b3bc16ca22c515f69916d2715273c0e3/blake3-1.0.8-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:67d9c42c42eb1c7aedcf901591c743266009fcf48babf6d6f8450f567cb94a84", size = 554650, upload-time = "2025-10-14T06:45:23.047Z" }, - { url = "https://files.pythonhosted.org/packages/d5/11/812d7125c6e99e5e0e841a9af2c4161ac811c027e08886353df76eae7b96/blake3-1.0.8-cp310-cp310-win32.whl", hash = "sha256:444215a1e5201f8fa4e5c7352e938a7070cd33d66aeb1dd9b1103a64b6920f9e", size = 228695, upload-time = "2025-10-14T06:45:24.255Z" }, - { url = "https://files.pythonhosted.org/packages/3c/7e/ab9b5c4b650ff397d347451bfb1ad7e6e53dc06c945e2fd091f27a76422e/blake3-1.0.8-cp310-cp310-win_amd64.whl", hash = "sha256:725c52c4d393c7bd1a10682df322d480734002a1389b320366c660568708846b", size = 215660, upload-time = "2025-10-14T06:45:25.381Z" }, { url = "https://files.pythonhosted.org/packages/7d/e1/1df74c915fde3c48940247ad64984f40f5968191d7b5230bcc7b31402e7c/blake3-1.0.8-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:9a8946cb6b1d2b2096daaaa89856f39887bce2b78503fa31b78173e3a86fa281", size = 350481, upload-time = "2025-10-14T06:45:26.625Z" }, { url = "https://files.pythonhosted.org/packages/bb/0d/7c47ae1f5f8d60783ce6234a8b31db351fc62be243006a6276284ca3d40d/blake3-1.0.8-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:adccc3a139207e02bb7d7bb0715fe0b87069685aad5f3afff820b2f829467904", size = 328039, upload-time = "2025-10-14T06:45:32.844Z" }, { url = "https://files.pythonhosted.org/packages/f4/0a/515209b0c282c360e249b89cd85350d97cfd55fadbb4df736c67b77b27a1/blake3-1.0.8-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7fcfe81b3ae3fb5d2e88be0d3259603ff95f0d5ed69f655c28fdaef31e49a470", size = 371092, upload-time = "2025-10-14T06:45:34.062Z" }, @@ -502,10 +703,8 @@ version = "1.5.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "colorama", marker = "os_name == 'nt'" }, - { name = "importlib-metadata", marker = "python_full_version < '3.10.2'" }, { name = "packaging" }, { name = "pyproject-hooks" }, - { name = "tomli", marker = "python_full_version < '3.11'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/78/e0/df5e171f685f82f37b12e1f208064e24244911079d7b767447d1af7e0d70/build-1.5.0.tar.gz", hash = "sha256:302c22c3ba2a0fd5f3911918651341ebb3896176cbdec15bd421f80b1afc7647", size = 89796, upload-time = "2026-04-30T03:18:25.17Z" } wheels = [ @@ -527,14 +726,6 @@ version = "6.1.1" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/be/db/810437bcfe13cf5e09b68bad1ce57c8fa04ca9272c68946bbf2f4fa522c8/cbor2-6.1.1.tar.gz", hash = "sha256:6f0644869e0fdcd6f3874330b8f1cebd009f33191de43acf609dc2409cd362c4", size = 86297, upload-time = "2026-05-14T10:57:42.231Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/9c/d3/50d9799a1929b150cc8786a8c836ef40f024cf043300f13a9eb645e598fe/cbor2-6.1.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:926c75f849e7cfcbedf0bf76bf812ca87c9e48e3fa441706c704ad3440629e82", size = 411587, upload-time = "2026-05-14T10:56:28.748Z" }, - { url = "https://files.pythonhosted.org/packages/0f/6d/61fb6756e889bbb114be8ddbddf8b3a7da4ebdc002b4e167f72eff673784/cbor2-6.1.1-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:02364d8fc86b6840c104238f1165ac9d5b35c767c2178d2b18ee0bf3d4b50549", size = 458756, upload-time = "2026-05-14T10:56:30.323Z" }, - { url = "https://files.pythonhosted.org/packages/45/98/9959fdc88286791324eb6def124cfede1bd6a6aa89bbeeeecc4369e4275b/cbor2-6.1.1-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:25f48c105e5f1a7fec1986044804a235153d3204722a49ad57f3494e6c16286a", size = 469261, upload-time = "2026-05-14T10:56:31.727Z" }, - { url = "https://files.pythonhosted.org/packages/f9/c5/d0c945dd32eb264f960d2798fbb32c716f38e99109a08e9a7a7ad4b3cb0e/cbor2-6.1.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:a73b3128565a94d40e97a6f4740b0c344a6fa55e1c5642f6d2d97bfb63e192f5", size = 523731, upload-time = "2026-05-14T10:56:33.489Z" }, - { url = "https://files.pythonhosted.org/packages/73/cc/be88b7d6db1bb21ff991b52b29c6f5386d48bdc6bd3be5c0827823de783d/cbor2-6.1.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:53ce298844c57b987c7d829d7e9c4ee48e0386d30e5ac32e44654a398fa27313", size = 535151, upload-time = "2026-05-14T10:56:35.116Z" }, - { url = "https://files.pythonhosted.org/packages/40/5f/09cc27438e9ca5006ab1dd5a3497186d4a923f19f51cc07a454c02d8013d/cbor2-6.1.1-cp310-cp310-win32.whl", hash = "sha256:e3192f3d806478d510860d4f908a70bffaf74135afa7575d96aa76531bd71c5c", size = 284134, upload-time = "2026-05-14T10:56:36.716Z" }, - { url = "https://files.pythonhosted.org/packages/53/71/1d5cf3813380e5aea5382b5b6e89f7a6fb3764091b19d4518ee78f058254/cbor2-6.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:fc9379958c0ecd27b2a23f340d886ab70dbea0639934545084f0d3aea996e11b", size = 300536, upload-time = "2026-05-14T10:56:38.467Z" }, - { url = "https://files.pythonhosted.org/packages/ff/33/7faa72a4f267853ec1b8df51337e13bc046d8ff753dcfa76adadf889ba34/cbor2-6.1.1-cp310-cp310-win_arm64.whl", hash = "sha256:4a43ca8a587c63eab26c4fae8ebf1984eff678a7a700f59c7bc07408ea62ba32", size = 291660, upload-time = "2026-05-14T10:56:40.06Z" }, { url = "https://files.pythonhosted.org/packages/8b/95/76ff805fec74222eaa3d9ed69041f9aeb36b2a01968ec6c9c705f52cce58/cbor2-6.1.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:06730f23bf0754456b90b9879eaae0d42521168529f216aa8915c0fc81a0a31c", size = 411431, upload-time = "2026-05-14T10:56:41.892Z" }, { url = "https://files.pythonhosted.org/packages/1f/76/61c63119e5b362e452afd3066dc915e1fe43cceebc6d05e2728e16de8cb5/cbor2-6.1.1-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:2fc17da21cbb9b13fabe2d6e18dfa9b7f37b2e9d08f8c07b63950c3528b3329d", size = 457399, upload-time = "2026-05-14T10:56:43.528Z" }, { url = "https://files.pythonhosted.org/packages/02/19/6e96d8fee9abb3064eb12ebdfd1961bec9e8289ba4a87c8548c901397c1f/cbor2-6.1.1-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:fc389db70aa0f4b639bf4605b6d7f8ffcce5a613fbfece84a6312e89e6bb417b", size = 469032, upload-time = "2026-05-14T10:56:45.277Z" }, @@ -579,18 +770,6 @@ dependencies = [ ] sdist = { url = "https://files.pythonhosted.org/packages/eb/56/b1ba7935a17738ae8453301356628e8147c79dbb825bcbc73dc7401f9846/cffi-2.0.0.tar.gz", hash = "sha256:44d1b5909021139fe36001ae048dbdde8214afa20200eda0f64c068cac5d5529", size = 523588, upload-time = "2025-09-08T23:24:04.541Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/93/d7/516d984057745a6cd96575eea814fe1edd6646ee6efd552fb7b0921dec83/cffi-2.0.0-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:0cf2d91ecc3fcc0625c2c530fe004f82c110405f101548512cce44322fa8ac44", size = 184283, upload-time = "2025-09-08T23:22:08.01Z" }, - { url = "https://files.pythonhosted.org/packages/9e/84/ad6a0b408daa859246f57c03efd28e5dd1b33c21737c2db84cae8c237aa5/cffi-2.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f73b96c41e3b2adedc34a7356e64c8eb96e03a3782b535e043a986276ce12a49", size = 180504, upload-time = "2025-09-08T23:22:10.637Z" }, - { url = "https://files.pythonhosted.org/packages/50/bd/b1a6362b80628111e6653c961f987faa55262b4002fcec42308cad1db680/cffi-2.0.0-cp310-cp310-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:53f77cbe57044e88bbd5ed26ac1d0514d2acf0591dd6bb02a3ae37f76811b80c", size = 208811, upload-time = "2025-09-08T23:22:12.267Z" }, - { url = "https://files.pythonhosted.org/packages/4f/27/6933a8b2562d7bd1fb595074cf99cc81fc3789f6a6c05cdabb46284a3188/cffi-2.0.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:3e837e369566884707ddaf85fc1744b47575005c0a229de3327f8f9a20f4efeb", size = 216402, upload-time = "2025-09-08T23:22:13.455Z" }, - { url = "https://files.pythonhosted.org/packages/05/eb/b86f2a2645b62adcfff53b0dd97e8dfafb5c8aa864bd0d9a2c2049a0d551/cffi-2.0.0-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:5eda85d6d1879e692d546a078b44251cdd08dd1cfb98dfb77b670c97cee49ea0", size = 203217, upload-time = "2025-09-08T23:22:14.596Z" }, - { url = "https://files.pythonhosted.org/packages/9f/e0/6cbe77a53acf5acc7c08cc186c9928864bd7c005f9efd0d126884858a5fe/cffi-2.0.0-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:9332088d75dc3241c702d852d4671613136d90fa6881da7d770a483fd05248b4", size = 203079, upload-time = "2025-09-08T23:22:15.769Z" }, - { url = "https://files.pythonhosted.org/packages/98/29/9b366e70e243eb3d14a5cb488dfd3a0b6b2f1fb001a203f653b93ccfac88/cffi-2.0.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:fc7de24befaeae77ba923797c7c87834c73648a05a4bde34b3b7e5588973a453", size = 216475, upload-time = "2025-09-08T23:22:17.427Z" }, - { url = "https://files.pythonhosted.org/packages/21/7a/13b24e70d2f90a322f2900c5d8e1f14fa7e2a6b3332b7309ba7b2ba51a5a/cffi-2.0.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:cf364028c016c03078a23b503f02058f1814320a56ad535686f90565636a9495", size = 218829, upload-time = "2025-09-08T23:22:19.069Z" }, - { url = "https://files.pythonhosted.org/packages/60/99/c9dc110974c59cc981b1f5b66e1d8af8af764e00f0293266824d9c4254bc/cffi-2.0.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e11e82b744887154b182fd3e7e8512418446501191994dbf9c9fc1f32cc8efd5", size = 211211, upload-time = "2025-09-08T23:22:20.588Z" }, - { url = "https://files.pythonhosted.org/packages/49/72/ff2d12dbf21aca1b32a40ed792ee6b40f6dc3a9cf1644bd7ef6e95e0ac5e/cffi-2.0.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:8ea985900c5c95ce9db1745f7933eeef5d314f0565b27625d9a10ec9881e1bfb", size = 218036, upload-time = "2025-09-08T23:22:22.143Z" }, - { url = "https://files.pythonhosted.org/packages/e2/cc/027d7fb82e58c48ea717149b03bcadcbdc293553edb283af792bd4bcbb3f/cffi-2.0.0-cp310-cp310-win32.whl", hash = "sha256:1f72fb8906754ac8a2cc3f9f5aaa298070652a0ffae577e0ea9bd480dc3c931a", size = 172184, upload-time = "2025-09-08T23:22:23.328Z" }, - { url = "https://files.pythonhosted.org/packages/33/fa/072dd15ae27fbb4e06b437eb6e944e75b068deb09e2a2826039e49ee2045/cffi-2.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:b18a3ed7d5b3bd8d9ef7a8cb226502c6bf8308df1525e1cc676c3680e7176739", size = 182790, upload-time = "2025-09-08T23:22:24.752Z" }, { url = "https://files.pythonhosted.org/packages/12/4a/3dfd5f7850cbf0d06dc84ba9aa00db766b52ca38d8b86e3a38314d52498c/cffi-2.0.0-cp311-cp311-macosx_10_13_x86_64.whl", hash = "sha256:b4c854ef3adc177950a8dfc81a86f5115d2abd545751a304c5bcf2c2c7283cfe", size = 184344, upload-time = "2025-09-08T23:22:26.456Z" }, { url = "https://files.pythonhosted.org/packages/4f/8b/f0e4c441227ba756aafbe78f117485b25bb26b1c059d01f137fa6d14896b/cffi-2.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2de9a304e27f7596cd03d16f1b7c72219bd944e99cc52b84d0145aefb07cbd3c", size = 180560, upload-time = "2025-09-08T23:22:28.197Z" }, { url = "https://files.pythonhosted.org/packages/b1/b7/1200d354378ef52ec227395d95c2576330fd22a869f7a70e88e1447eb234/cffi-2.0.0-cp311-cp311-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:baf5215e0ab74c16e2dd324e8ec067ef59e41125d3eade2b863d294fd5035c92", size = 209613, upload-time = "2025-09-08T23:22:29.475Z" }, @@ -636,22 +815,6 @@ version = "3.4.7" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/e7/a1/67fe25fac3c7642725500a3f6cfe5821ad557c3abb11c9d20d12c7008d3e/charset_normalizer-3.4.7.tar.gz", hash = "sha256:ae89db9e5f98a11a4bf50407d4363e7b09b31e55bc117b4f7d80aab97ba009e5", size = 144271, upload-time = "2026-04-02T09:28:39.342Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/26/08/0f303cb0b529e456bb116f2d50565a482694fbb94340bf56d44677e7ed03/charset_normalizer-3.4.7-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:cdd68a1fb318e290a2077696b7eb7a21a49163c455979c639bf5a5dcdc46617d", size = 315182, upload-time = "2026-04-02T09:25:40.673Z" }, - { url = "https://files.pythonhosted.org/packages/24/47/b192933e94b546f1b1fe4df9cc1f84fcdbf2359f8d1081d46dd029b50207/charset_normalizer-3.4.7-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e17b8d5d6a8c47c85e68ca8379def1303fd360c3e22093a807cd34a71cd082b8", size = 209329, upload-time = "2026-04-02T09:25:42.354Z" }, - { url = "https://files.pythonhosted.org/packages/c2/b4/01fa81c5ca6141024d89a8fc15968002b71da7f825dd14113207113fabbd/charset_normalizer-3.4.7-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:511ef87c8aec0783e08ac18565a16d435372bc1ac25a91e6ac7f5ef2b0bff790", size = 231230, upload-time = "2026-04-02T09:25:44.281Z" }, - { url = "https://files.pythonhosted.org/packages/20/f7/7b991776844dfa058017e600e6e55ff01984a063290ca5622c0b63162f68/charset_normalizer-3.4.7-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:007d05ec7321d12a40227aae9e2bc6dca73f3cb21058999a1df9e193555a9dcc", size = 225890, upload-time = "2026-04-02T09:25:45.475Z" }, - { url = "https://files.pythonhosted.org/packages/20/e7/bed0024a0f4ab0c8a9c64d4445f39b30c99bd1acd228291959e3de664247/charset_normalizer-3.4.7-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:cf29836da5119f3c8a8a70667b0ef5fdca3bb12f80fd06487cfa575b3909b393", size = 216930, upload-time = "2026-04-02T09:25:46.58Z" }, - { url = "https://files.pythonhosted.org/packages/e2/ab/b18f0ab31cdd7b3ddb8bb76c4a414aeb8160c9810fdf1bc62f269a539d87/charset_normalizer-3.4.7-cp310-cp310-manylinux_2_31_armv7l.whl", hash = "sha256:12d8baf840cc7889b37c7c770f478adea7adce3dcb3944d02ec87508e2dcf153", size = 202109, upload-time = "2026-04-02T09:25:48.031Z" }, - { url = "https://files.pythonhosted.org/packages/82/e5/7e9440768a06dfb3075936490cb82dbf0ee20a133bf0dd8551fa096914ec/charset_normalizer-3.4.7-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:d560742f3c0d62afaccf9f41fe485ed69bd7661a241f86a3ef0f0fb8b1a397af", size = 214684, upload-time = "2026-04-02T09:25:49.245Z" }, - { url = "https://files.pythonhosted.org/packages/71/94/8c61d8da9f062fdf457c80acfa25060ec22bf1d34bbeaca4350f13bcfd07/charset_normalizer-3.4.7-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:b14b2d9dac08e28bb8046a1a0434b1750eb221c8f5b87a68f4fa11a6f97b5e34", size = 212785, upload-time = "2026-04-02T09:25:50.671Z" }, - { url = "https://files.pythonhosted.org/packages/66/cd/6e9889c648e72c0ab2e5967528bb83508f354d706637bc7097190c874e13/charset_normalizer-3.4.7-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:bc17a677b21b3502a21f66a8cc64f5bfad4df8a0b8434d661666f8ce90ac3af1", size = 203055, upload-time = "2026-04-02T09:25:51.802Z" }, - { url = "https://files.pythonhosted.org/packages/92/2e/7a951d6a08aefb7eb8e1b54cdfb580b1365afdd9dd484dc4bee9e5d8f258/charset_normalizer-3.4.7-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:750e02e074872a3fad7f233b47734166440af3cdea0add3e95163110816d6752", size = 232502, upload-time = "2026-04-02T09:25:53.388Z" }, - { url = "https://files.pythonhosted.org/packages/58/d5/abcf2d83bf8e0a1286df55cd0dc1d49af0da4282aa77e986df343e7de124/charset_normalizer-3.4.7-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:4e5163c14bffd570ef2affbfdd77bba66383890797df43dc8b4cc7d6f500bf53", size = 214295, upload-time = "2026-04-02T09:25:54.765Z" }, - { url = "https://files.pythonhosted.org/packages/47/3a/7d4cd7ed54be99973a0dc176032cba5cb1f258082c31fa6df35cff46acfc/charset_normalizer-3.4.7-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:6ed74185b2db44f41ef35fd1617c5888e59792da9bbc9190d6c7300617182616", size = 227145, upload-time = "2026-04-02T09:25:55.904Z" }, - { url = "https://files.pythonhosted.org/packages/1d/98/3a45bf8247889cf28262ebd3d0872edff11565b2a1e3064ccb132db3fbb0/charset_normalizer-3.4.7-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:94e1885b270625a9a828c9793b4d52a64445299baa1fea5a173bf1d3dd9a1a5a", size = 218884, upload-time = "2026-04-02T09:25:57.074Z" }, - { url = "https://files.pythonhosted.org/packages/ad/80/2e8b7f8915ed5c9ef13aa828d82738e33888c485b65ebf744d615040c7ea/charset_normalizer-3.4.7-cp310-cp310-win32.whl", hash = "sha256:6785f414ae0f3c733c437e0f3929197934f526d19dfaa75e18fdb4f94c6fb374", size = 148343, upload-time = "2026-04-02T09:25:58.199Z" }, - { url = "https://files.pythonhosted.org/packages/35/1b/3b8c8c77184af465ee9ad88b5aea46ea6b2e1f7b9dc9502891e37af21e30/charset_normalizer-3.4.7-cp310-cp310-win_amd64.whl", hash = "sha256:6696b7688f54f5af4462118f0bfa7c1621eeb87154f77fa04b9295ce7a8f2943", size = 159174, upload-time = "2026-04-02T09:25:59.322Z" }, - { url = "https://files.pythonhosted.org/packages/be/c1/feb40dca40dbb21e0a908801782d9288c64fc8d8e562c2098e9994c8c21b/charset_normalizer-3.4.7-cp310-cp310-win_arm64.whl", hash = "sha256:66671f93accb62ed07da56613636f3641f1a12c13046ce91ffc923721f23c008", size = 147805, upload-time = "2026-04-02T09:26:00.756Z" }, { url = "https://files.pythonhosted.org/packages/c2/d7/b5b7020a0565c2e9fa8c09f4b5fa6232feb326b8c20081ccded47ea368fd/charset_normalizer-3.4.7-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:7641bb8895e77f921102f72833904dcd9901df5d6d72a2ab8f31d04b7e51e4e7", size = 309705, upload-time = "2026-04-02T09:26:02.191Z" }, { url = "https://files.pythonhosted.org/packages/5a/53/58c29116c340e5456724ecd2fff4196d236b98f3da97b404bc5e51ac3493/charset_normalizer-3.4.7-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:202389074300232baeb53ae2569a60901f7efadd4245cf3a3bf0617d60b439d7", size = 206419, upload-time = "2026-04-02T09:26:03.583Z" }, { url = "https://files.pythonhosted.org/packages/b2/02/e8146dc6591a37a00e5144c63f29fb7c97a734ea8a111190783c0e60ab63/charset_normalizer-3.4.7-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:30b8d1d8c52a48c2c5690e152c169b673487a2a58de1ec7393196753063fcd5e", size = 227901, upload-time = "2026-04-02T09:26:04.738Z" }, @@ -717,8 +880,7 @@ dependencies = [ { name = "kubernetes" }, { name = "mmh3" }, { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" } }, - { name = "onnxruntime", version = "1.24.3", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and extra == 'extra-14-granite-switch-tutorials') or (python_full_version >= '3.11' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm') or (extra == 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra != 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20')" }, - { name = "onnxruntime", version = "1.26.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and extra == 'extra-14-granite-switch-tutorials') or (python_full_version < '3.11' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm') or (extra != 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra != 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20')" }, + { name = "onnxruntime" }, { name = "opentelemetry-api" }, { name = "opentelemetry-exporter-otlp-proto-grpc" }, { name = "opentelemetry-sdk" }, @@ -733,10 +895,9 @@ dependencies = [ { name = "tenacity" }, { name = "tokenizers" }, { name = "tqdm" }, - { name = "typer", version = "0.23.1", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and extra == 'extra-14-granite-switch-tutorials') or (python_full_version >= '3.11' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm') or (extra == 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra != 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20')" }, - { name = "typer", version = "0.25.1", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and extra == 'extra-14-granite-switch-tutorials') or (python_full_version < '3.11' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm') or (extra != 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra != 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20')" }, + { name = "typer" }, { name = "typing-extensions" }, - { name = "uvicorn", extra = ["standard"], marker = "extra == 'extra-14-granite-switch-tutorials' or (extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20')" }, + { name = "uvicorn", extra = ["standard"], marker = "extra == 'extra-14-granite-switch-tutorials' or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/92/d1/5e33b26985f0c7046a0be1cee2158ada1748ee700d2545057fde1468d74d/chromadb-1.5.9.tar.gz", hash = "sha256:5c20e62a455c28bacac927f26116a73fd8e1799e0d908be8e8a4f02197a54731", size = 2595635, upload-time = "2026-05-05T05:54:51.713Z" } wheels = [ @@ -747,77 +908,10 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/eb/ce/0f7be6e5d0feafa2cda54b12e6542afeea7dea89d2d411e14da90f8abb96/chromadb-1.5.9-cp39-abi3-win_amd64.whl", hash = "sha256:4fd0b560e56761b7f3cb4d5c6205fd5f20814484b4a3e4e9af9038c2b428fc6c", size = 23542454, upload-time = "2026-05-05T05:54:54.942Z" }, ] -[[package]] -name = "click" -version = "8.1.8" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.11'", -] -dependencies = [ - { name = "colorama", marker = "(python_full_version < '3.11' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials') or (python_full_version >= '3.11' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (python_full_version >= '3.11' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (python_full_version < '3.11' and extra == 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (python_full_version < '3.11' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (sys_platform != 'win32' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (sys_platform != 'win32' and extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm') or (extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20')" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/b9/2e/0090cbf739cee7d23781ad4b89a9894a41538e4fcf4c31dcdd705b78eb8b/click-8.1.8.tar.gz", hash = "sha256:ed53c9d8990d83c2a27deae68e4ee337473f6330c040a31d4225c9574d16096a", size = 226593, upload-time = "2024-12-21T18:38:44.339Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/7e/d4/7ebdbd03970677812aac39c869717059dbb71a4cfc033ca6e5221787892c/click-8.1.8-py3-none-any.whl", hash = "sha256:63c132bbbed01578a06712a2d1f497bb62d9c1c0d329b7903a866228027263b2", size = 98188, upload-time = "2024-12-21T18:38:41.666Z" }, -] - [[package]] name = "click" version = "8.4.0" source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.13' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.12.*' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20'", - "python_full_version >= '3.13' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.12.*' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.11.*' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20'", - "python_full_version < '3.11' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.11.*' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20'", - "python_full_version < '3.11' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20'", - "python_full_version >= '3.13' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.12.*' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20'", - "python_full_version >= '3.13' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.12.*' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.11.*' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20'", - "python_full_version < '3.11' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.11.*' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20'", - "python_full_version < '3.11' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20'", - "python_full_version >= '3.13' and extra == 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.12.*' and extra == 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.11.*' and extra == 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version >= '3.13' and extra == 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.12.*' and extra == 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.11.*' and extra == 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version < '3.11' and extra == 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.11.*' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.11.*' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version < '3.11' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version >= '3.13' and extra == 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.12.*' and extra == 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.11.*' and extra == 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version >= '3.13' and extra == 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.12.*' and extra == 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.11.*' and extra == 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version < '3.11' and extra == 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version >= '3.13' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.12.*' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version >= '3.13' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.12.*' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.11.*' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version < '3.11' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.11.*' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version < '3.11' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.11.*' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version >= '3.11' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version < '3.11' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", -] dependencies = [ { name = "colorama", marker = "sys_platform == 'win32'" }, ] @@ -851,8 +945,8 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "loguru" }, { name = "pydantic" }, - { name = "torch", version = "2.10.0", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-14-granite-switch-dev' or extra == 'extra-14-granite-switch-tutorials' or extra == 'extra-14-granite-switch-vllm'" }, - { name = "torch", version = "2.11.0", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-14-granite-switch-dev-vllm20' or extra == 'extra-14-granite-switch-vllm20'" }, + { name = "torch", version = "2.10.0", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-14-granite-switch-tutorials' or extra == 'extra-14-granite-switch-vllm' or extra == 'group-14-granite-switch-dev' or extra == 'group-14-granite-switch-test' or extra == 'group-14-granite-switch-vllm19'" }, + { name = "torch", version = "2.11.0", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-14-granite-switch-vllm20' or extra == 'group-14-granite-switch-dev-vllm20' or extra == 'group-14-granite-switch-vllm20'" }, { name = "transformers" }, ] sdist = { url = "https://files.pythonhosted.org/packages/41/1b/c3c4a98ec5f2727656336f07a0c35862195c310d8eb0b2fa5b4be6848680/compressed_tensors-0.15.0.1.tar.gz", hash = "sha256:a8e93054e8a5ec49c980b09ed36c4c1249b4a8ee167920a8e461c4da26e78d99", size = 229412, upload-time = "2026-04-10T14:23:54.708Z" } @@ -866,7 +960,6 @@ version = "48.0.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "cffi", marker = "platform_python_implementation != 'PyPy'" }, - { name = "typing-extensions", marker = "python_full_version < '3.11'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/9f/a9/db8f313fdcd85d767d4973515e1db101f9c71f95fced83233de224673757/cryptography-48.0.0.tar.gz", hash = "sha256:5c3932f4436d1cccb036cb0eaef46e6e2db91035166f1ad6505c3c9d5a635920", size = 832984, upload-time = "2026-05-04T22:59:38.133Z" } wheels = [ @@ -911,18 +1004,200 @@ name = "cuda-bindings" version = "12.9.4" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "python_full_version >= '3.13'", - "python_full_version == '3.12.*'", - "python_full_version == '3.11.*'", - "python_full_version < '3.11'", -] -dependencies = [ - { name = "cuda-pathfinder", marker = "extra == 'extra-14-granite-switch-dev' or extra == 'extra-14-granite-switch-tutorials' or extra == 'extra-14-granite-switch-vllm'" }, + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", +] +dependencies = [ + { name = "cuda-pathfinder", marker = "extra == 'extra-14-granite-switch-tutorials' or extra == 'extra-14-granite-switch-vllm' or extra == 'group-14-granite-switch-dev' or extra == 'group-14-granite-switch-test' or extra == 'group-14-granite-switch-vllm19'" }, ] wheels = [ - { url = "https://files.pythonhosted.org/packages/37/31/bfcc870f69c6a017c4ad5c42316207fc7551940db6f3639aa4466ec5faf3/cuda_bindings-12.9.4-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a022c96b8bd847e8dc0675523431149a4c3e872f440e3002213dbb9e08f0331a", size = 11800959, upload-time = "2025-10-21T14:51:26.458Z" }, - { url = "https://files.pythonhosted.org/packages/7a/d8/b546104b8da3f562c1ff8ab36d130c8fe1dd6a045ced80b4f6ad74f7d4e1/cuda_bindings-12.9.4-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4d3c842c2a4303b2a580fe955018e31aea30278be19795ae05226235268032e5", size = 12148218, upload-time = "2025-10-21T14:51:28.855Z" }, - { url = "https://files.pythonhosted.org/packages/b5/1e/9c8ed3f3dbed7b7d038805fdc65cbc65fda9983e84437778a9571e7092bc/cuda_bindings-12.9.4-cp310-cp310-win_amd64.whl", hash = "sha256:f69107389e6b9948969bfd0a20c4f571fd1aefcfb1d2e1b72cc8ba5ecb7918ab", size = 11464568, upload-time = "2025-10-21T14:51:31.454Z" }, { url = "https://files.pythonhosted.org/packages/a9/2b/ebcbb60aa6dba830474cd360c42e10282f7a343c0a1f58d24fbd3b7c2d77/cuda_bindings-12.9.4-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a6a429dc6c13148ff1e27c44f40a3dd23203823e637b87fd0854205195988306", size = 11840604, upload-time = "2025-10-21T14:51:34.565Z" }, { url = "https://files.pythonhosted.org/packages/45/e7/b47792cc2d01c7e1d37c32402182524774dadd2d26339bd224e0e913832e/cuda_bindings-12.9.4-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c912a3d9e6b6651853eed8eed96d6800d69c08e94052c292fec3f282c5a817c9", size = 12210593, upload-time = "2025-10-21T14:51:36.574Z" }, { url = "https://files.pythonhosted.org/packages/dd/be/90d32049e06abcfba4b2e7df1dbcb5e16215c8852eef0cd8b25f38a66bd4/cuda_bindings-12.9.4-cp311-cp311-win_amd64.whl", hash = "sha256:443b0875916879c2e4c3722941e25e42d5ab9bcbf34c9e83404fb100fa1f6913", size = 11490933, upload-time = "2025-10-21T14:51:38.792Z" }, @@ -942,40 +1217,55 @@ name = "cuda-bindings" version = "13.2.0" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "python_full_version >= '3.13' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.12.*' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20'", - "python_full_version >= '3.13' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.12.*' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.11.*' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20'", - "python_full_version < '3.11' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.11.*' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20'", - "python_full_version < '3.11' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20'", - "python_full_version >= '3.13' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.12.*' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20'", - "python_full_version >= '3.13' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.12.*' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.11.*' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20'", - "python_full_version < '3.11' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.11.*' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20'", - "python_full_version < '3.11' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20'", - "python_full_version >= '3.13' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.12.*' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version >= '3.13' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.12.*' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.11.*' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version < '3.11' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.11.*' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version < '3.11' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version >= '3.11' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version < '3.11' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", -] -dependencies = [ - { name = "cuda-pathfinder", marker = "extra == 'extra-14-granite-switch-dev-vllm20' or (extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm')" }, -] -wheels = [ - { url = "https://files.pythonhosted.org/packages/1a/fe/7351d7e586a8b4c9f89731bfe4cf0148223e8f9903ff09571f78b3fb0682/cuda_bindings-13.2.0-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:08b395f79cb89ce0cd8effff07c4a1e20101b873c256a1aeb286e8fd7bd0f556", size = 5744254, upload-time = "2026-03-11T00:12:29.798Z" }, - { url = "https://files.pythonhosted.org/packages/aa/ef/184aa775e970fc089942cd9ec6302e6e44679d4c14549c6a7ea45bf7f798/cuda_bindings-13.2.0-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d6f3682ec3c4769326aafc67c2ba669d97d688d0b7e63e659d36d2f8b72f32d6", size = 6329075, upload-time = "2026-03-11T00:12:32.319Z" }, - { url = "https://files.pythonhosted.org/packages/ec/ea/81999d01375645f34596c76eb046b4b36d58cc6fe2bddb2410f8a7b7a827/cuda_bindings-13.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:845025438a1b9e20718b9fb42add3e0eb72e85458bcab3eeb80bfd8f0a9dab33", size = 5600047, upload-time = "2026-03-11T00:12:34.848Z" }, + "python_full_version >= '3.13' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", +] +dependencies = [ + { name = "cuda-pathfinder", marker = "extra == 'extra-14-granite-switch-vllm20' or extra == 'group-14-granite-switch-dev-vllm20' or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20') or (extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19')" }, +] +wheels = [ { url = "https://files.pythonhosted.org/packages/e0/a9/3a8241c6e19483ac1f1dcf5c10238205dcb8a6e9d0d4d4709240dff28ff4/cuda_bindings-13.2.0-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:721104c603f059780d287969be3d194a18d0cc3b713ed9049065a1107706759d", size = 5730273, upload-time = "2026-03-11T00:12:37.18Z" }, { url = "https://files.pythonhosted.org/packages/e9/94/2748597f47bb1600cd466b20cab4159f1530a3a33fe7f70fee199b3abb9e/cuda_bindings-13.2.0-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1eba9504ac70667dd48313395fe05157518fd6371b532790e96fbb31bbb5a5e1", size = 6313924, upload-time = "2026-03-11T00:12:39.462Z" }, { url = "https://files.pythonhosted.org/packages/29/5a/0ce1731c48bcd9f40996a4ef1abbf634f1a7fe4a15c5050b1e75ce3a7acf/cuda_bindings-13.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:debb51b211d246f8326f6b6e982506a5d0d9906672c91bc478b66addc7ecc60a", size = 5631363, upload-time = "2026-03-11T00:12:41.58Z" }, @@ -1000,13 +1290,198 @@ name = "cuda-python" version = "12.9.4" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "python_full_version >= '3.13'", - "python_full_version == '3.12.*'", - "python_full_version == '3.11.*'", - "python_full_version < '3.11'", -] -dependencies = [ - { name = "cuda-bindings", version = "12.9.4", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-14-granite-switch-dev' or extra == 'extra-14-granite-switch-tutorials' or extra == 'extra-14-granite-switch-vllm'" }, + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", +] +dependencies = [ + { name = "cuda-bindings", version = "12.9.4", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-14-granite-switch-tutorials' or extra == 'extra-14-granite-switch-vllm' or extra == 'group-14-granite-switch-dev' or extra == 'group-14-granite-switch-test' or extra == 'group-14-granite-switch-vllm19'" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/af/f3/6b032a554019cfb3447e671798c1bd3e79b5f1af20d10253f56cea269ef2/cuda_python-12.9.4-py3-none-any.whl", hash = "sha256:d2cacea882a69863f1e7d27ee71d75f0684f4c76910aff839067e4f89c902279", size = 7594, upload-time = "2025-10-21T14:55:12.846Z" }, @@ -1018,17 +1493,15 @@ version = "13.2.0" source = { registry = "https://pypi.org/simple" } resolution-markers = [ "python_full_version >= '3.13' and sys_platform == 'darwin'", - "python_full_version == '3.12.*' and sys_platform == 'darwin'", "python_full_version >= '3.13' and sys_platform != 'darwin'", + "python_full_version == '3.12.*' and sys_platform == 'darwin'", "python_full_version == '3.12.*' and sys_platform != 'darwin'", - "python_full_version == '3.11.*' and sys_platform == 'darwin'", - "python_full_version < '3.11' and sys_platform == 'darwin'", - "python_full_version == '3.11.*' and sys_platform != 'darwin'", - "python_full_version < '3.11' and sys_platform != 'darwin'", + "python_full_version < '3.12' and sys_platform == 'darwin'", + "python_full_version < '3.12' and sys_platform != 'darwin'", ] dependencies = [ - { name = "cuda-bindings", version = "13.2.0", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-14-granite-switch-dev-vllm20' or extra == 'extra-14-granite-switch-vllm20'" }, - { name = "cuda-pathfinder", marker = "extra == 'extra-14-granite-switch-dev-vllm20' or extra == 'extra-14-granite-switch-vllm20'" }, + { name = "cuda-bindings", version = "13.2.0", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-14-granite-switch-vllm20' or extra == 'group-14-granite-switch-dev-vllm20' or extra == 'group-14-granite-switch-vllm20'" }, + { name = "cuda-pathfinder", marker = "extra == 'extra-14-granite-switch-vllm20' or extra == 'group-14-granite-switch-dev-vllm20' or extra == 'group-14-granite-switch-vllm20'" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/4a/da/b4dbe129f941afe1c24a09ba53521b78875626763d96414798a74763282f/cuda_python-13.2.0-py3-none-any.whl", hash = "sha256:2f092b0ec13a860115fa595411889ee939ad203450ea4f91e9461b174ea7b084", size = 8145, upload-time = "2026-03-11T13:55:19.143Z" }, @@ -1042,9 +1515,6 @@ dependencies = [ { name = "typing-extensions" }, ] wheels = [ - { url = "https://files.pythonhosted.org/packages/46/c8/1687a83d0739151ca410a5716b5f1dfb6f8feb6381c7c695d72264f17e1c/cuda_tile-1.3.0-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:c55616c648f06f84808648a521c67f2d7c790574d6b53ddf8c3bfbc995d36d45", size = 245438, upload-time = "2026-04-20T15:51:18.862Z" }, - { url = "https://files.pythonhosted.org/packages/ab/d0/0e4790cc7a536a685a961d2e04f26be54f86f0974e1eaea71c1b64ec4032/cuda_tile-1.3.0-cp310-cp310-manylinux2014_x86_64.whl", hash = "sha256:8c71c2fd9b96c054c126a218f9927c8c8dde72441a532464551b865b416d452a", size = 246915, upload-time = "2026-04-20T15:51:01.914Z" }, - { url = "https://files.pythonhosted.org/packages/3d/74/055b786579909475528d599bc5a2729e49edb6acc5f06cfa3073f4343250/cuda_tile-1.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:339769f95b3a5453b7f416da6d1285f24d0daf3a700a895b68dee3fa6fc93e8f", size = 240739, upload-time = "2026-04-20T15:52:14.007Z" }, { url = "https://files.pythonhosted.org/packages/f4/d6/753aecb3e8fcee80d20f9d32b4504276691c2f77fc10abbbd8e82197e24c/cuda_tile-1.3.0-cp311-cp311-manylinux2014_aarch64.whl", hash = "sha256:59d9843fa723ceb4d680ec246e12e3ded857266e4c2bf5c5d21e530d6d765060", size = 245441, upload-time = "2026-04-20T15:51:06.618Z" }, { url = "https://files.pythonhosted.org/packages/c5/2d/8b416239413bf11d17d42ccee43258f3787da13bcea7b2e42e8bbf04b3da/cuda_tile-1.3.0-cp311-cp311-manylinux2014_x86_64.whl", hash = "sha256:2888d6b89fae053a53ca7bb703c508a5cf90671d266934573c5b6c25978022c4", size = 246706, upload-time = "2026-04-20T15:51:03.467Z" }, { url = "https://files.pythonhosted.org/packages/46/b0/68303196d577e497ddf3cef0fd92785d83f47f6239543a5b19dc4076e487/cuda_tile-1.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:791b363251fbc64db4402d92153ba3d14bc0aaa4d218cea66562af02a7a76bd9", size = 240640, upload-time = "2026-04-20T15:52:15.428Z" }, @@ -1066,37 +1536,62 @@ wheels = [ [package.optional-dependencies] cublas = [ - { name = "nvidia-cublas", marker = "(sys_platform == 'linux' and extra == 'extra-14-granite-switch-dev-vllm20') or (sys_platform == 'win32' and extra == 'extra-14-granite-switch-dev-vllm20') or (sys_platform == 'linux' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm') or (sys_platform == 'win32' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm') or (extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20')" }, + { name = "nvidia-cublas", marker = "(sys_platform == 'linux' and extra == 'extra-14-granite-switch-vllm20') or (sys_platform == 'linux' and extra == 'group-14-granite-switch-dev-vllm20') or (sys_platform == 'win32' and extra == 'extra-14-granite-switch-vllm20') or (sys_platform == 'win32' and extra == 'group-14-granite-switch-dev-vllm20') or (sys_platform == 'linux' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19') or (sys_platform == 'win32' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20')" }, ] cudart = [ - { name = "nvidia-cuda-runtime", marker = "(sys_platform == 'linux' and extra == 'extra-14-granite-switch-dev-vllm20') or (sys_platform == 'win32' and extra == 'extra-14-granite-switch-dev-vllm20') or (sys_platform == 'linux' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm') or (sys_platform == 'win32' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm') or (extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20')" }, + { name = "nvidia-cuda-runtime", marker = "(sys_platform == 'linux' and extra == 'extra-14-granite-switch-vllm20') or (sys_platform == 'linux' and extra == 'group-14-granite-switch-dev-vllm20') or (sys_platform == 'win32' and extra == 'extra-14-granite-switch-vllm20') or (sys_platform == 'win32' and extra == 'group-14-granite-switch-dev-vllm20') or (sys_platform == 'linux' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19') or (sys_platform == 'win32' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20')" }, ] cufft = [ - { name = "nvidia-cufft", marker = "(sys_platform == 'linux' and extra == 'extra-14-granite-switch-dev-vllm20') or (sys_platform == 'win32' and extra == 'extra-14-granite-switch-dev-vllm20') or (sys_platform == 'linux' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm') or (sys_platform == 'win32' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm') or (extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20')" }, + { name = "nvidia-cufft", marker = "(sys_platform == 'linux' and extra == 'extra-14-granite-switch-vllm20') or (sys_platform == 'linux' and extra == 'group-14-granite-switch-dev-vllm20') or (sys_platform == 'win32' and extra == 'extra-14-granite-switch-vllm20') or (sys_platform == 'win32' and extra == 'group-14-granite-switch-dev-vllm20') or (sys_platform == 'linux' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19') or (sys_platform == 'win32' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20')" }, ] cufile = [ - { name = "nvidia-cufile", marker = "(sys_platform == 'linux' and extra == 'extra-14-granite-switch-dev-vllm20') or (sys_platform == 'linux' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm') or (extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20')" }, + { name = "nvidia-cufile", marker = "(sys_platform == 'linux' and extra == 'extra-14-granite-switch-vllm20') or (sys_platform == 'linux' and extra == 'group-14-granite-switch-dev-vllm20') or (sys_platform == 'linux' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20')" }, ] cupti = [ - { name = "nvidia-cuda-cupti", marker = "(sys_platform == 'linux' and extra == 'extra-14-granite-switch-dev-vllm20') or (sys_platform == 'win32' and extra == 'extra-14-granite-switch-dev-vllm20') or (sys_platform == 'linux' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm') or (sys_platform == 'win32' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm') or (extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20')" }, + { name = "nvidia-cuda-cupti", marker = "(sys_platform == 'linux' and extra == 'extra-14-granite-switch-vllm20') or (sys_platform == 'linux' and extra == 'group-14-granite-switch-dev-vllm20') or (sys_platform == 'win32' and extra == 'extra-14-granite-switch-vllm20') or (sys_platform == 'win32' and extra == 'group-14-granite-switch-dev-vllm20') or (sys_platform == 'linux' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19') or (sys_platform == 'win32' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20')" }, ] curand = [ - { name = "nvidia-curand", marker = "(sys_platform == 'linux' and extra == 'extra-14-granite-switch-dev-vllm20') or (sys_platform == 'win32' and extra == 'extra-14-granite-switch-dev-vllm20') or (sys_platform == 'linux' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm') or (sys_platform == 'win32' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm') or (extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20')" }, + { name = "nvidia-curand", marker = "(sys_platform == 'linux' and extra == 'extra-14-granite-switch-vllm20') or (sys_platform == 'linux' and extra == 'group-14-granite-switch-dev-vllm20') or (sys_platform == 'win32' and extra == 'extra-14-granite-switch-vllm20') or (sys_platform == 'win32' and extra == 'group-14-granite-switch-dev-vllm20') or (sys_platform == 'linux' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19') or (sys_platform == 'win32' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20')" }, ] cusolver = [ - { name = "nvidia-cusolver", marker = "(sys_platform == 'linux' and extra == 'extra-14-granite-switch-dev-vllm20') or (sys_platform == 'win32' and extra == 'extra-14-granite-switch-dev-vllm20') or (sys_platform == 'linux' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm') or (sys_platform == 'win32' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm') or (extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20')" }, + { name = "nvidia-cusolver", marker = "(sys_platform == 'linux' and extra == 'extra-14-granite-switch-vllm20') or (sys_platform == 'linux' and extra == 'group-14-granite-switch-dev-vllm20') or (sys_platform == 'win32' and extra == 'extra-14-granite-switch-vllm20') or (sys_platform == 'win32' and extra == 'group-14-granite-switch-dev-vllm20') or (sys_platform == 'linux' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19') or (sys_platform == 'win32' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20')" }, ] cusparse = [ - { name = "nvidia-cusparse", marker = "(sys_platform == 'linux' and extra == 'extra-14-granite-switch-dev-vllm20') or (sys_platform == 'win32' and extra == 'extra-14-granite-switch-dev-vllm20') or (sys_platform == 'linux' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm') or (sys_platform == 'win32' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm') or (extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20')" }, + { name = "nvidia-cusparse", marker = "(sys_platform == 'linux' and extra == 'extra-14-granite-switch-vllm20') or (sys_platform == 'linux' and extra == 'group-14-granite-switch-dev-vllm20') or (sys_platform == 'win32' and extra == 'extra-14-granite-switch-vllm20') or (sys_platform == 'win32' and extra == 'group-14-granite-switch-dev-vllm20') or (sys_platform == 'linux' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19') or (sys_platform == 'win32' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20')" }, ] nvjitlink = [ - { name = "nvidia-nvjitlink", marker = "(sys_platform == 'linux' and extra == 'extra-14-granite-switch-dev-vllm20') or (sys_platform == 'win32' and extra == 'extra-14-granite-switch-dev-vllm20') or (sys_platform == 'linux' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm') or (sys_platform == 'win32' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm') or (extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20')" }, + { name = "nvidia-nvjitlink", marker = "(sys_platform == 'linux' and extra == 'extra-14-granite-switch-vllm20') or (sys_platform == 'linux' and extra == 'group-14-granite-switch-dev-vllm20') or (sys_platform == 'win32' and extra == 'extra-14-granite-switch-vllm20') or (sys_platform == 'win32' and extra == 'group-14-granite-switch-dev-vllm20') or (sys_platform == 'linux' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19') or (sys_platform == 'win32' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20')" }, ] nvrtc = [ - { name = "nvidia-cuda-nvrtc", marker = "(sys_platform == 'linux' and extra == 'extra-14-granite-switch-dev-vllm20') or (sys_platform == 'win32' and extra == 'extra-14-granite-switch-dev-vllm20') or (sys_platform == 'linux' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm') or (sys_platform == 'win32' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm') or (extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20')" }, + { name = "nvidia-cuda-nvrtc", marker = "(sys_platform == 'linux' and extra == 'extra-14-granite-switch-vllm20') or (sys_platform == 'linux' and extra == 'group-14-granite-switch-dev-vllm20') or (sys_platform == 'win32' and extra == 'extra-14-granite-switch-vllm20') or (sys_platform == 'win32' and extra == 'group-14-granite-switch-dev-vllm20') or (sys_platform == 'linux' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19') or (sys_platform == 'win32' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20')" }, ] nvtx = [ - { name = "nvidia-nvtx", marker = "(sys_platform == 'linux' and extra == 'extra-14-granite-switch-dev-vllm20') or (sys_platform == 'win32' and extra == 'extra-14-granite-switch-dev-vllm20') or (sys_platform == 'linux' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm') or (sys_platform == 'win32' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm') or (extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20')" }, + { name = "nvidia-nvtx", marker = "(sys_platform == 'linux' and extra == 'extra-14-granite-switch-vllm20') or (sys_platform == 'linux' and extra == 'group-14-granite-switch-dev-vllm20') or (sys_platform == 'win32' and extra == 'extra-14-granite-switch-vllm20') or (sys_platform == 'win32' and extra == 'group-14-granite-switch-dev-vllm20') or (sys_platform == 'linux' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19') or (sys_platform == 'win32' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20')" }, +] + +[[package]] +name = "datasets" +version = "5.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "dill" }, + { name = "filelock" }, + { name = "fsspec", extra = ["http"], marker = "extra == 'extra-14-granite-switch-tutorials' or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20')" }, + { name = "httpx" }, + { name = "huggingface-hub" }, + { name = "multiprocess" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" } }, + { name = "packaging" }, + { name = "pandas" }, + { name = "pyarrow" }, + { name = "pyyaml" }, + { name = "requests" }, + { name = "tqdm" }, + { name = "xxhash" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/d9/85/ce4f780c32f7e36d71257f1c27e8ba898ebe379cb54f211f5f2013f2c219/datasets-5.0.0.tar.gz", hash = "sha256:83dbbbdb07a33b82192b8c419deb18739b138ee2ce1a322d55ce6b100954ec1a", size = 631708, upload-time = "2026-06-05T13:18:26.124Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/05/66/73034ad30b59f13439b75e620989dacba4c047256e358ba7c2e9ec98ea22/datasets-5.0.0-py3-none-any.whl", hash = "sha256:7dd34927a0fd7046e98aad5cb9430e699c373238a15befa7b9bf22b991a7fee6", size = 555084, upload-time = "2026-06-05T13:18:24.435Z" }, ] [[package]] @@ -1157,20 +1652,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/ba/5a/18ad964b0086c6e62e2e7500f7edc89e3faa45033c71c1893d34eed2b2de/dnspython-2.8.0-py3-none-any.whl", hash = "sha256:01d9bbc4a2d76bf0db7c1f729812ded6d912bd318d3b1cf81d30c0f845dbf3af", size = 331094, upload-time = "2025-09-07T18:57:58.071Z" }, ] -[[package]] -name = "docker" -version = "7.1.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "pywin32", marker = "python_full_version < '3.11' and sys_platform == 'win32'" }, - { name = "requests", marker = "python_full_version < '3.11'" }, - { name = "urllib3", marker = "python_full_version < '3.11'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/91/9b/4a2ea29aeba62471211598dac5d96825bb49348fa07e906ea930394a83ce/docker-7.1.0.tar.gz", hash = "sha256:ad8c70e6e3f8926cb8a92619b832b4ea5299e2831c14284663184e200546fa6c", size = 117834, upload-time = "2024-05-23T11:13:57.216Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/e3/26/57c6fb270950d476074c087527a558ccb6f4436657314bfb6cdf484114c4/docker-7.1.0-py3-none-any.whl", hash = "sha256:c96b93b7f0a746f9e77d325bcfb87422a3d8bd4f03136ae8a85b37f1898d5fc0", size = 147774, upload-time = "2024-05-23T11:13:55.01Z" }, -] - [[package]] name = "docstring-parser" version = "0.18.0" @@ -1211,18 +1692,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/de/15/545e2b6cf2e3be84bc1ed85613edd75b8aea69807a71c26f4ca6a9258e82/email_validator-2.3.0-py3-none-any.whl", hash = "sha256:80f13f623413e6b197ae73bb10bf4eb0908faf509ad8362c5edeb0be7fd450b4", size = 35604, upload-time = "2025-08-26T13:09:05.858Z" }, ] -[[package]] -name = "exceptiongroup" -version = "1.3.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "typing-extensions", marker = "python_full_version < '3.13'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/50/79/66800aadf48771f6b62f7eb014e352e5d06856655206165d775e675a02c9/exceptiongroup-1.3.1.tar.gz", hash = "sha256:8b412432c6055b0b7d14c310000ae93352ed6754f70fa8f7c34141f91c4e3219", size = 30371, upload-time = "2025-11-21T23:01:54.787Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/8a/0e/97c33bf5009bdbac74fd2beace167cab3f978feb69cc36f1ef79360d6c4e/exceptiongroup-1.3.1-py3-none-any.whl", hash = "sha256:a7a39a3bd276781e98394987d3a5701d0c4edffb633bb7a5144577f82c773598", size = 16740, upload-time = "2025-11-21T23:01:53.443Z" }, -] - [[package]] name = "executing" version = "2.2.1" @@ -1251,14 +1720,14 @@ wheels = [ [package.optional-dependencies] standard = [ { name = "email-validator" }, - { name = "fastapi-cli", extra = ["standard"], marker = "extra == 'extra-14-granite-switch-dev' or extra == 'extra-14-granite-switch-dev-vllm20' or extra == 'extra-14-granite-switch-tutorials' or extra == 'extra-14-granite-switch-vllm' or extra == 'extra-14-granite-switch-vllm20'" }, + { name = "fastapi-cli", extra = ["standard"], marker = "extra == 'extra-14-granite-switch-tutorials' or extra == 'extra-14-granite-switch-vllm' or extra == 'extra-14-granite-switch-vllm20' or extra == 'group-14-granite-switch-dev' or extra == 'group-14-granite-switch-dev-vllm20' or extra == 'group-14-granite-switch-test' or extra == 'group-14-granite-switch-vllm19' or extra == 'group-14-granite-switch-vllm20'" }, { name = "fastar" }, { name = "httpx" }, { name = "jinja2" }, { name = "pydantic-extra-types" }, { name = "pydantic-settings" }, { name = "python-multipart" }, - { name = "uvicorn", extra = ["standard"], marker = "extra == 'extra-14-granite-switch-dev' or extra == 'extra-14-granite-switch-dev-vllm20' or extra == 'extra-14-granite-switch-tutorials' or extra == 'extra-14-granite-switch-vllm' or extra == 'extra-14-granite-switch-vllm20'" }, + { name = "uvicorn", extra = ["standard"], marker = "extra == 'extra-14-granite-switch-tutorials' or extra == 'extra-14-granite-switch-vllm' or extra == 'extra-14-granite-switch-vllm20' or extra == 'group-14-granite-switch-dev' or extra == 'group-14-granite-switch-dev-vllm20' or extra == 'group-14-granite-switch-test' or extra == 'group-14-granite-switch-vllm19' or extra == 'group-14-granite-switch-vllm20'" }, ] [[package]] @@ -1267,10 +1736,8 @@ version = "0.0.24" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "rich-toolkit" }, - { name = "tomli", marker = "python_full_version < '3.11'" }, - { name = "typer", version = "0.23.1", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and extra == 'extra-14-granite-switch-tutorials') or (python_full_version >= '3.11' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm') or (extra == 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra != 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20')" }, - { name = "typer", version = "0.25.1", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and extra == 'extra-14-granite-switch-dev') or (python_full_version >= '3.11' and extra == 'extra-14-granite-switch-tutorials') or extra == 'extra-14-granite-switch-dev-vllm20' or (extra == 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-tutorials') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm') or (extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20')" }, - { name = "uvicorn", extra = ["standard"], marker = "extra == 'extra-14-granite-switch-dev' or extra == 'extra-14-granite-switch-dev-vllm20' or extra == 'extra-14-granite-switch-tutorials' or extra == 'extra-14-granite-switch-vllm' or extra == 'extra-14-granite-switch-vllm20'" }, + { name = "typer" }, + { name = "uvicorn", extra = ["standard"], marker = "extra == 'extra-14-granite-switch-tutorials' or extra == 'extra-14-granite-switch-vllm' or extra == 'extra-14-granite-switch-vllm20' or extra == 'group-14-granite-switch-dev' or extra == 'group-14-granite-switch-dev-vllm20' or extra == 'group-14-granite-switch-test' or extra == 'group-14-granite-switch-vllm19' or extra == 'group-14-granite-switch-vllm20'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/6e/58/74797ae9e4610cfa0c6b34c8309096d3b20bb29be3b8b5fbf1004d10fa5f/fastapi_cli-0.0.24.tar.gz", hash = "sha256:1afc9c9e21d7ebc8a3ca5e31790cd8d837742be7e4f8b9236e99cb3451f0de00", size = 19043, upload-time = "2026-02-24T10:45:10.476Z" } wheels = [ @@ -1280,7 +1747,7 @@ wheels = [ [package.optional-dependencies] standard = [ { name = "fastapi-cloud-cli" }, - { name = "uvicorn", extra = ["standard"], marker = "extra == 'extra-14-granite-switch-dev' or extra == 'extra-14-granite-switch-dev-vllm20' or extra == 'extra-14-granite-switch-tutorials' or extra == 'extra-14-granite-switch-vllm' or extra == 'extra-14-granite-switch-vllm20'" }, + { name = "uvicorn", extra = ["standard"], marker = "extra == 'extra-14-granite-switch-tutorials' or extra == 'extra-14-granite-switch-vllm' or extra == 'extra-14-granite-switch-vllm20' or extra == 'group-14-granite-switch-dev' or extra == 'group-14-granite-switch-dev-vllm20' or extra == 'group-14-granite-switch-test' or extra == 'group-14-granite-switch-vllm19' or extra == 'group-14-granite-switch-vllm20'" }, ] [[package]] @@ -1290,13 +1757,12 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "fastar" }, { name = "httpx" }, - { name = "pydantic", extra = ["email"], marker = "extra == 'extra-14-granite-switch-dev' or extra == 'extra-14-granite-switch-dev-vllm20' or extra == 'extra-14-granite-switch-tutorials' or extra == 'extra-14-granite-switch-vllm' or extra == 'extra-14-granite-switch-vllm20'" }, + { name = "pydantic", extra = ["email"], marker = "extra == 'extra-14-granite-switch-tutorials' or extra == 'extra-14-granite-switch-vllm' or extra == 'extra-14-granite-switch-vllm20' or extra == 'group-14-granite-switch-dev' or extra == 'group-14-granite-switch-dev-vllm20' or extra == 'group-14-granite-switch-test' or extra == 'group-14-granite-switch-vllm19' or extra == 'group-14-granite-switch-vllm20'" }, { name = "rich-toolkit" }, { name = "rignore" }, { name = "sentry-sdk" }, - { name = "typer", version = "0.23.1", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and extra == 'extra-14-granite-switch-tutorials') or (python_full_version >= '3.11' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm') or (extra == 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra != 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20')" }, - { name = "typer", version = "0.25.1", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and extra == 'extra-14-granite-switch-dev') or (python_full_version >= '3.11' and extra == 'extra-14-granite-switch-tutorials') or extra == 'extra-14-granite-switch-dev-vllm20' or (extra == 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-tutorials') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm') or (extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20')" }, - { name = "uvicorn", extra = ["standard"], marker = "extra == 'extra-14-granite-switch-dev' or extra == 'extra-14-granite-switch-dev-vllm20' or extra == 'extra-14-granite-switch-tutorials' or extra == 'extra-14-granite-switch-vllm' or extra == 'extra-14-granite-switch-vllm20'" }, + { name = "typer" }, + { name = "uvicorn", extra = ["standard"], marker = "extra == 'extra-14-granite-switch-tutorials' or extra == 'extra-14-granite-switch-vllm' or extra == 'extra-14-granite-switch-vllm20' or extra == 'group-14-granite-switch-dev' or extra == 'group-14-granite-switch-dev-vllm20' or extra == 'group-14-granite-switch-test' or extra == 'group-14-granite-switch-vllm19' or extra == 'group-14-granite-switch-vllm20'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/96/57/cee8e91b83f39e75ae5562a2237261442a8179dcb3b631c7398113157398/fastapi_cloud_cli-0.17.1.tar.gz", hash = "sha256:0baece208fa88063bec46dccb5fb512f3199162092165e57654b44e64adbc44d", size = 47409, upload-time = "2026-04-27T13:38:07.094Z" } wheels = [ @@ -1309,21 +1775,6 @@ version = "0.11.0" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/03/0f/0aeb3fc50046617702acc0078b277b58367fd62eb727b9ec733ae0e8bbcc/fastar-0.11.0.tar.gz", hash = "sha256:aa7f100f7313c03fdb20f1385927ba95671071ba308ad0c1763fef295e1895ce", size = 70238, upload-time = "2026-04-13T17:11:17.143Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/9b/4a/0d79fe52243a4130aa41d0a3a9eea22e00427db761e1a6782ee817c50222/fastar-0.11.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:e7c906ad371ca365591ebcb7630009923f3eceb20956814494d15591a78e9e46", size = 709786, upload-time = "2026-04-13T17:09:53.974Z" }, - { url = "https://files.pythonhosted.org/packages/9f/e4/77c94eaafc035e39f5ce5176e32743da4e3fe890f28790e708e53d8f75cd/fastar-0.11.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6919497b35fa5bd978d2c26ee117cf1771b90ee5073f7518e44b9bc364b57715", size = 632127, upload-time = "2026-04-13T17:09:39.023Z" }, - { url = "https://files.pythonhosted.org/packages/3c/f6/97658dd992f4e45747d35adb24c0b100f6b6d451490685ae3fe8a3a2ee1b/fastar-0.11.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:56b50206aeedd99e22b83289e6fb3ff8f7d7da4407d2419902e4716b4f90585a", size = 869608, upload-time = "2026-04-13T17:09:08.268Z" }, - { url = "https://files.pythonhosted.org/packages/e9/fc/81c1ec4d8146a437399e7b95631b51be312f323a9ce64569f932db6c3914/fastar-0.11.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7a1811a69ae81d469720df0c8af3f84f834a93b5e4f8be0e0e8bde6a52fa11f2", size = 762925, upload-time = "2026-04-13T17:07:52.788Z" }, - { url = "https://files.pythonhosted.org/packages/b9/35/49baf480ecb197aea7ce2515c503a2f25061958dd3b4c98e98a3a11cdcc7/fastar-0.11.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:10486238c55589a3947c38f9cfb88a67d8a608eb8dddc722038237d0278a41d7", size = 759913, upload-time = "2026-04-13T17:08:07.324Z" }, - { url = "https://files.pythonhosted.org/packages/94/eb/946f1980267f2824efb7d7c518d47a49b89c0e9cd7c449301f5a7531558a/fastar-0.11.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1555ef9992d368a6ec39092276990cef8d329c39a1d86ebd847eaa3b10efd472", size = 926054, upload-time = "2026-04-13T17:08:22.196Z" }, - { url = "https://files.pythonhosted.org/packages/0c/19/d5eb611085ce054382570d8d4e24a5e2ff23cd6d2404528a6643841d6059/fastar-0.11.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b1f4aca0a9620b76988bbf6225cdea6678a392902444ca18bb8a51495b165a89", size = 818594, upload-time = "2026-04-13T17:08:52.366Z" }, - { url = "https://files.pythonhosted.org/packages/4a/52/18e8d55c0d3d917713f381cb2d0cb793da00c209c802e011d8dc72018cd5/fastar-0.11.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:75beeecac7d11a666a6c4a0b7f7e80842ae5cf523f2f890b99c78fc82b403545", size = 823005, upload-time = "2026-04-13T17:09:23.051Z" }, - { url = "https://files.pythonhosted.org/packages/2c/b4/0fecdcf33e5aaffe777b96a1c10a3204fe0b05bf18e971033a0bfedafc1c/fastar-0.11.0-cp310-cp310-manylinux_2_31_riscv64.whl", hash = "sha256:a08cdf5d16daa401c65c9c7493a18db7dc515c52155a17071ec7098bb07da9d3", size = 887115, upload-time = "2026-04-13T17:08:37.385Z" }, - { url = "https://files.pythonhosted.org/packages/08/f8/2a6ad1c2523eb72a4595a9331162fc67ce0f0aee3348728598026c516986/fastar-0.11.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:6e210375e5a7ba53586cbd6017aa417d2d2ceacbe8671682470281bd0a15e8ef", size = 973595, upload-time = "2026-04-13T17:10:09.258Z" }, - { url = "https://files.pythonhosted.org/packages/5c/a6/2aa48843228673feacc2b80876b8924e63ea9c5f5f607bd7a72416b86bae/fastar-0.11.0-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:a2988eb2604b8e15670f355425e8c800e4dcd4edfbcbfe194397f8f17b7eb19e", size = 1036988, upload-time = "2026-04-13T17:10:26.133Z" }, - { url = "https://files.pythonhosted.org/packages/92/ac/3dd14b21c323e8484f47c910110d1d93139ba44621ac2c4c597dbe9fcdb7/fastar-0.11.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:34abc857b46068fdf91d157bd0203bfd6791dc7a432d1ed180f5af6c2f5bcce9", size = 1078267, upload-time = "2026-04-13T17:10:43.645Z" }, - { url = "https://files.pythonhosted.org/packages/de/a1/3f89e58d6fa99160c9e7e17220c8ab5040b5cc017c4fac2356c6ed18453d/fastar-0.11.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:0d884be84e37a01053776395441fc960031974e0265801ce574efc3d05e0cdaf", size = 1032551, upload-time = "2026-04-13T17:11:00.667Z" }, - { url = "https://files.pythonhosted.org/packages/f6/ea/24dd3cfc2096933d7d2a80c926e79602cff1fa481124ed2165b60c1dd9ef/fastar-0.11.0-cp310-cp310-win32.whl", hash = "sha256:c721c1ad758e3e4c2c1fd9e96911a0fa58c0a6be5668f1bcfd0b741e72c7cb63", size = 456022, upload-time = "2026-04-13T17:11:41.859Z" }, - { url = "https://files.pythonhosted.org/packages/82/ef/6eb39ee9cdd59822d1c7337c4d28fdc948885bdf455af9e70efa9879e06f/fastar-0.11.0-cp310-cp310-win_amd64.whl", hash = "sha256:ba4180b7c3080f55f9035fdd7d8c39fe0e1485087a68ff615bb4784a10b8106b", size = 488392, upload-time = "2026-04-13T17:11:27.486Z" }, { url = "https://files.pythonhosted.org/packages/11/7a/fb367bdaf4efa2c7952a45aeab2e87a564293ecffe150af673ec8edfda46/fastar-0.11.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:b82fd6f996e65a86f67a6bd64dd22ef3e8ae2dcaed0ae3b550e71f7e1bbb1df5", size = 709869, upload-time = "2026-04-13T17:09:55.62Z" }, { url = "https://files.pythonhosted.org/packages/80/ff/b87efb0dcfd081c62c7c7601d7681dabe63103cd51fc16f8d57a1ab45961/fastar-0.11.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:27eed386fd0558e6daa29211111bbd7b740f7c7e881197f8a00ac7c0f3cdb1d7", size = 631668, upload-time = "2026-04-13T17:09:40.537Z" }, { url = "https://files.pythonhosted.org/packages/24/7c/0ed6dd38b9adc04b3a8ec3b7045908e7c2170ba0ff6e6d2c51bc9fc770f3/fastar-0.11.0-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:a6931bebc1d8e95ddeef55732c195449e6b44ef33aa31b325505097ed3b4d6aa", size = 869663, upload-time = "2026-04-13T17:09:09.78Z" }, @@ -1392,11 +1843,10 @@ name = "fastsafetensors" version = "0.3.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "typer", version = "0.25.1", source = { registry = "https://pypi.org/simple" } }, + { name = "typer" }, ] sdist = { url = "https://files.pythonhosted.org/packages/d2/69/e34a1e86a02b255896c57263bf0dfbae45b4708fd609b937f783c2202e7b/fastsafetensors-0.3.1.tar.gz", hash = "sha256:b7eb039a564d77280d17e5d63b27e9963ba5158ad02d2a3c1772c62072a81a53", size = 55665, upload-time = "2026-05-06T08:48:59.125Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/0a/77/0913cd907585085b2f10f2d7eef2aa52c9445241dc66238de25ee24c8241/fastsafetensors-0.3.1-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:acc0971b006f381598d32c5f7aae3a07d9a10d87c701f26b65215083e15a4733", size = 1808292, upload-time = "2026-05-06T08:48:51.12Z" }, { url = "https://files.pythonhosted.org/packages/e8/67/eaa10409a526242253926fe6981c652dfdb8aa4ec0d4cba4077a9376a1fd/fastsafetensors-0.3.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:32cf4b531b5d77de41d777106ea69036a16bdea80062646dabc93a11b4cf88ee", size = 1828304, upload-time = "2026-05-06T08:48:53.15Z" }, { url = "https://files.pythonhosted.org/packages/6f/50/909871d673bacd6dfc7fee5e59bcd4ec9fbd19775bafe567ad236a3adced/fastsafetensors-0.3.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ac76f33e47959b7c31658fbbda1805df7540819828a3ce6a94eb34b4db0b1fa7", size = 1854825, upload-time = "2026-05-06T08:48:54.452Z" }, { url = "https://files.pythonhosted.org/packages/84/f0/a9ec204e866b52ce323bafc31f4dbf15581b3c998d597ec53c62012716ff/fastsafetensors-0.3.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5c9f8d3e18969090b5d66581cb6e9f6c9057158c151ed87e9c309dead5c64442", size = 1854843, upload-time = "2026-05-06T08:48:55.921Z" }, @@ -1416,10 +1866,195 @@ name = "flashinfer-cubin" version = "0.6.6" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "python_full_version >= '3.13'", - "python_full_version == '3.12.*'", - "python_full_version == '3.11.*'", - "python_full_version < '3.11'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", ] wheels = [ { url = "https://files.pythonhosted.org/packages/12/e8/826f9452bc5f76b94d7eb025f03dcaf1b51b9ed7790386c0285191e69be4/flashinfer_cubin-0.6.6-py3-none-any.whl", hash = "sha256:36508dfc792eb5ecfb15d2c140a7702812e1fa1ab0fb03929b2ed55e3e8191f3", size = 267661457, upload-time = "2026-03-11T01:36:36.538Z" }, @@ -1431,13 +2066,11 @@ version = "0.6.8.post1" source = { registry = "https://pypi.org/simple" } resolution-markers = [ "python_full_version >= '3.13' and sys_platform == 'darwin'", - "python_full_version == '3.12.*' and sys_platform == 'darwin'", "python_full_version >= '3.13' and sys_platform != 'darwin'", + "python_full_version == '3.12.*' and sys_platform == 'darwin'", "python_full_version == '3.12.*' and sys_platform != 'darwin'", - "python_full_version == '3.11.*' and sys_platform == 'darwin'", - "python_full_version < '3.11' and sys_platform == 'darwin'", - "python_full_version == '3.11.*' and sys_platform != 'darwin'", - "python_full_version < '3.11' and sys_platform != 'darwin'", + "python_full_version < '3.12' and sys_platform == 'darwin'", + "python_full_version < '3.12' and sys_platform != 'darwin'", ] wheels = [ { url = "https://files.pythonhosted.org/packages/11/b7/5e3b1a8c67031b421a8bd29c2bc29b900a550bb3392e8bda18bb15b5e476/flashinfer_cubin-0.6.8.post1-py3-none-any.whl", hash = "sha256:43636d4cd39e694a83d76a89f87fefcdf4cecb4c4f7dd22dac25ec368c1e901f", size = 295154113, upload-time = "2026-04-18T18:28:21.738Z" }, @@ -1448,15 +2081,199 @@ name = "flashinfer-python" version = "0.6.6" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "python_full_version >= '3.13'", - "python_full_version == '3.12.*'", - "python_full_version == '3.11.*'", - "python_full_version < '3.11'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", ] dependencies = [ { name = "apache-tvm-ffi" }, - { name = "click", version = "8.1.8", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and extra == 'extra-14-granite-switch-tutorials') or (python_full_version >= '3.11' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm') or (extra == 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra != 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20')" }, - { name = "click", version = "8.4.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and extra == 'extra-14-granite-switch-dev') or (python_full_version >= '3.11' and extra == 'extra-14-granite-switch-tutorials') or (extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-tutorials') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm')" }, + { name = "click" }, { name = "einops" }, { name = "ninja" }, { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" } }, @@ -1480,23 +2297,20 @@ version = "0.6.8.post1" source = { registry = "https://pypi.org/simple" } resolution-markers = [ "python_full_version >= '3.13' and sys_platform == 'darwin'", - "python_full_version == '3.12.*' and sys_platform == 'darwin'", "python_full_version >= '3.13' and sys_platform != 'darwin'", + "python_full_version == '3.12.*' and sys_platform == 'darwin'", "python_full_version == '3.12.*' and sys_platform != 'darwin'", - "python_full_version == '3.11.*' and sys_platform == 'darwin'", - "python_full_version < '3.11' and sys_platform == 'darwin'", - "python_full_version == '3.11.*' and sys_platform != 'darwin'", - "python_full_version < '3.11' and sys_platform != 'darwin'", + "python_full_version < '3.12' and sys_platform == 'darwin'", + "python_full_version < '3.12' and sys_platform != 'darwin'", ] dependencies = [ { name = "apache-tvm-ffi" }, - { name = "click", version = "8.4.0", source = { registry = "https://pypi.org/simple" } }, + { name = "click" }, { name = "cuda-tile" }, { name = "einops" }, { name = "ninja" }, - { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and extra == 'extra-14-granite-switch-dev-vllm20') or (python_full_version < '3.11' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20')" }, - { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and python_full_version < '3.13' and extra == 'extra-14-granite-switch-dev-vllm20') or (python_full_version >= '3.11' and python_full_version < '3.13' and extra == 'extra-14-granite-switch-vllm20') or (python_full_version < '3.11' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20') or (python_full_version < '3.11' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (python_full_version < '3.11' and extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (python_full_version < '3.11' and extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm') or (python_full_version < '3.11' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (python_full_version < '3.11' and extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (python_full_version >= '3.13' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20') or (python_full_version >= '3.13' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (python_full_version >= '3.13' and extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (python_full_version >= '3.13' and extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm') or (python_full_version >= '3.13' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (python_full_version >= '3.13' and extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20')" }, - { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.13' and extra == 'extra-14-granite-switch-dev-vllm20') or (python_full_version >= '3.13' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20')" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.13' and extra == 'extra-14-granite-switch-vllm20') or (python_full_version < '3.13' and extra == 'group-14-granite-switch-dev-vllm20') or (python_full_version < '3.13' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20')" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.13' and extra == 'extra-14-granite-switch-vllm20') or (python_full_version >= '3.13' and extra == 'group-14-granite-switch-dev-vllm20') or (python_full_version >= '3.13' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20')" }, { name = "nvidia-cudnn-frontend" }, { name = "nvidia-cutlass-dsl" }, { name = "nvidia-ml-py" }, @@ -1525,22 +2339,6 @@ version = "1.8.0" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/2d/f5/c831fac6cc817d26fd54c7eaccd04ef7e0288806943f7cc5bbf69f3ac1f0/frozenlist-1.8.0.tar.gz", hash = "sha256:3ede829ed8d842f6cd48fc7081d7a41001a56f1f38603f9d49bf3020d59a31ad", size = 45875, upload-time = "2025-10-06T05:38:17.865Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/83/4a/557715d5047da48d54e659203b9335be7bfaafda2c3f627b7c47e0b3aaf3/frozenlist-1.8.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:b37f6d31b3dcea7deb5e9696e529a6aa4a898adc33db82da12e4c60a7c4d2011", size = 86230, upload-time = "2025-10-06T05:35:23.699Z" }, - { url = "https://files.pythonhosted.org/packages/a2/fb/c85f9fed3ea8fe8740e5b46a59cc141c23b842eca617da8876cfce5f760e/frozenlist-1.8.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ef2b7b394f208233e471abc541cc6991f907ffd47dc72584acee3147899d6565", size = 49621, upload-time = "2025-10-06T05:35:25.341Z" }, - { url = "https://files.pythonhosted.org/packages/63/70/26ca3f06aace16f2352796b08704338d74b6d1a24ca38f2771afbb7ed915/frozenlist-1.8.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a88f062f072d1589b7b46e951698950e7da00442fc1cacbe17e19e025dc327ad", size = 49889, upload-time = "2025-10-06T05:35:26.797Z" }, - { url = "https://files.pythonhosted.org/packages/5d/ed/c7895fd2fde7f3ee70d248175f9b6cdf792fb741ab92dc59cd9ef3bd241b/frozenlist-1.8.0-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:f57fb59d9f385710aa7060e89410aeb5058b99e62f4d16b08b91986b9a2140c2", size = 219464, upload-time = "2025-10-06T05:35:28.254Z" }, - { url = "https://files.pythonhosted.org/packages/6b/83/4d587dccbfca74cb8b810472392ad62bfa100bf8108c7223eb4c4fa2f7b3/frozenlist-1.8.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:799345ab092bee59f01a915620b5d014698547afd011e691a208637312db9186", size = 221649, upload-time = "2025-10-06T05:35:29.454Z" }, - { url = "https://files.pythonhosted.org/packages/6a/c6/fd3b9cd046ec5fff9dab66831083bc2077006a874a2d3d9247dea93ddf7e/frozenlist-1.8.0-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:c23c3ff005322a6e16f71bf8692fcf4d5a304aaafe1e262c98c6d4adc7be863e", size = 219188, upload-time = "2025-10-06T05:35:30.951Z" }, - { url = "https://files.pythonhosted.org/packages/ce/80/6693f55eb2e085fc8afb28cf611448fb5b90e98e068fa1d1b8d8e66e5c7d/frozenlist-1.8.0-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:8a76ea0f0b9dfa06f254ee06053d93a600865b3274358ca48a352ce4f0798450", size = 231748, upload-time = "2025-10-06T05:35:32.101Z" }, - { url = "https://files.pythonhosted.org/packages/97/d6/e9459f7c5183854abd989ba384fe0cc1a0fb795a83c033f0571ec5933ca4/frozenlist-1.8.0-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:c7366fe1418a6133d5aa824ee53d406550110984de7637d65a178010f759c6ef", size = 236351, upload-time = "2025-10-06T05:35:33.834Z" }, - { url = "https://files.pythonhosted.org/packages/97/92/24e97474b65c0262e9ecd076e826bfd1d3074adcc165a256e42e7b8a7249/frozenlist-1.8.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:13d23a45c4cebade99340c4165bd90eeb4a56c6d8a9d8aa49568cac19a6d0dc4", size = 218767, upload-time = "2025-10-06T05:35:35.205Z" }, - { url = "https://files.pythonhosted.org/packages/ee/bf/dc394a097508f15abff383c5108cb8ad880d1f64a725ed3b90d5c2fbf0bb/frozenlist-1.8.0-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:e4a3408834f65da56c83528fb52ce7911484f0d1eaf7b761fc66001db1646eff", size = 235887, upload-time = "2025-10-06T05:35:36.354Z" }, - { url = "https://files.pythonhosted.org/packages/40/90/25b201b9c015dbc999a5baf475a257010471a1fa8c200c843fd4abbee725/frozenlist-1.8.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:42145cd2748ca39f32801dad54aeea10039da6f86e303659db90db1c4b614c8c", size = 228785, upload-time = "2025-10-06T05:35:37.949Z" }, - { url = "https://files.pythonhosted.org/packages/84/f4/b5bc148df03082f05d2dd30c089e269acdbe251ac9a9cf4e727b2dbb8a3d/frozenlist-1.8.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:e2de870d16a7a53901e41b64ffdf26f2fbb8917b3e6ebf398098d72c5b20bd7f", size = 230312, upload-time = "2025-10-06T05:35:39.178Z" }, - { url = "https://files.pythonhosted.org/packages/db/4b/87e95b5d15097c302430e647136b7d7ab2398a702390cf4c8601975709e7/frozenlist-1.8.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:20e63c9493d33ee48536600d1a5c95eefc870cd71e7ab037763d1fbb89cc51e7", size = 217650, upload-time = "2025-10-06T05:35:40.377Z" }, - { url = "https://files.pythonhosted.org/packages/e5/70/78a0315d1fea97120591a83e0acd644da638c872f142fd72a6cebee825f3/frozenlist-1.8.0-cp310-cp310-win32.whl", hash = "sha256:adbeebaebae3526afc3c96fad434367cafbfd1b25d72369a9e5858453b1bb71a", size = 39659, upload-time = "2025-10-06T05:35:41.863Z" }, - { url = "https://files.pythonhosted.org/packages/66/aa/3f04523fb189a00e147e60c5b2205126118f216b0aa908035c45336e27e4/frozenlist-1.8.0-cp310-cp310-win_amd64.whl", hash = "sha256:667c3777ca571e5dbeb76f331562ff98b957431df140b54c85fd4d52eea8d8f6", size = 43837, upload-time = "2025-10-06T05:35:43.205Z" }, - { url = "https://files.pythonhosted.org/packages/39/75/1135feecdd7c336938bd55b4dc3b0dfc46d85b9be12ef2628574b28de776/frozenlist-1.8.0-cp310-cp310-win_arm64.whl", hash = "sha256:80f85f0a7cc86e7a54c46d99c9e1318ff01f4687c172ede30fd52d19d1da1c8e", size = 39989, upload-time = "2025-10-06T05:35:44.596Z" }, { url = "https://files.pythonhosted.org/packages/bc/03/077f869d540370db12165c0aa51640a873fb661d8b315d1d4d67b284d7ac/frozenlist-1.8.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:09474e9831bc2b2199fad6da3c14c7b0fbdd377cce9d3d77131be28906cb7d84", size = 86912, upload-time = "2025-10-06T05:35:45.98Z" }, { url = "https://files.pythonhosted.org/packages/df/b5/7610b6bd13e4ae77b96ba85abea1c8cb249683217ef09ac9e0ae93f25a91/frozenlist-1.8.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:17c883ab0ab67200b5f964d2b9ed6b00971917d5d8a92df149dc2c9779208ee9", size = 50046, upload-time = "2025-10-06T05:35:47.009Z" }, { url = "https://files.pythonhosted.org/packages/6e/ef/0e8f1fe32f8a53dd26bdd1f9347efe0778b0fddf62789ea683f4cc7d787d/frozenlist-1.8.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:fa47e444b8ba08fffd1c18e8cdb9a75db1b6a27f17507522834ad13ed5922b93", size = 50119, upload-time = "2025-10-06T05:35:48.38Z" }, @@ -1617,14 +2415,19 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/d5/0c/043d5e551459da400957a1395e0febbf771446ff34291afcbe3d8be2a279/fsspec-2026.4.0-py3-none-any.whl", hash = "sha256:11ef7bb35dab8a394fde6e608221d5cf3e8499401c249bebaeaad760a1a8dec2", size = 203402, upload-time = "2026-04-29T20:42:36.842Z" }, ] +[package.optional-dependencies] +http = [ + { name = "aiohttp" }, +] + [[package]] name = "gguf" version = "0.19.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and extra == 'extra-14-granite-switch-dev-vllm20') or (python_full_version >= '3.11' and extra == 'extra-14-granite-switch-tutorials') or (python_full_version >= '3.11' and extra == 'extra-14-granite-switch-vllm') or (python_full_version < '3.11' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or extra == 'extra-14-granite-switch-dev' or (extra != 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (extra != 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm')" }, - { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and python_full_version < '3.13' and extra == 'extra-14-granite-switch-dev-vllm20') or (python_full_version >= '3.11' and python_full_version < '3.13' and extra == 'extra-14-granite-switch-vllm20') or (python_full_version < '3.11' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20') or (python_full_version < '3.11' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (python_full_version < '3.11' and extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (python_full_version < '3.11' and extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm') or (python_full_version < '3.11' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (python_full_version < '3.11' and extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (python_full_version >= '3.13' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20') or (python_full_version >= '3.13' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (python_full_version >= '3.13' and extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (python_full_version >= '3.13' and extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm') or (python_full_version >= '3.13' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (python_full_version >= '3.13' and extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20')" }, - { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.13' and extra == 'extra-14-granite-switch-dev-vllm20') or (python_full_version >= '3.13' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20')" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-14-granite-switch-tutorials' or extra == 'extra-14-granite-switch-vllm' or extra == 'group-14-granite-switch-dev' or extra == 'group-14-granite-switch-test' or extra == 'group-14-granite-switch-vllm19'" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.13' and extra == 'extra-14-granite-switch-vllm20') or (python_full_version < '3.13' and extra == 'group-14-granite-switch-dev-vllm20') or (python_full_version < '3.13' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20')" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.13' and extra == 'extra-14-granite-switch-vllm20') or (python_full_version >= '3.13' and extra == 'group-14-granite-switch-dev-vllm20') or (python_full_version >= '3.13' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20')" }, { name = "pyyaml" }, { name = "requests" }, { name = "tqdm" }, @@ -1646,30 +2449,21 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/e7/c8/e2645aa8ed02fd4c7a2f59d68783b65b1f3cbdfe39a6308e156509d1fee8/googleapis_common_protos-1.75.0-py3-none-any.whl", hash = "sha256:961ed60399c457ceb0ee8f285a84c870aabc9c6a832b9d37bb281b5bebde43ed", size = 300631, upload-time = "2026-05-07T08:03:30.345Z" }, ] -[[package]] -name = "granite-common" -version = "0.4.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "jsonschema", marker = "python_full_version < '3.11'" }, - { name = "pydantic", marker = "python_full_version < '3.11'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/cd/10/ca8f59c644a3574a443bb85ff807f1ebbe726a6ad75bd471e092ab002f37/granite_common-0.4.1.tar.gz", hash = "sha256:5290e03d43e2962218aaf13c9c43877af6fb7869332a4ea35983c4f6a206d801", size = 714066, upload-time = "2026-02-25T01:10:45.253Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/a3/ee/c52f5ddb073c111c19f15889646fd65e0be2b4e0b01764237d1ecbcd5bfe/granite_common-0.4.1-py3-none-any.whl", hash = "sha256:e82df48f69a98b46dbff8a36c10a64a13d4400fed2425f2ad9a6981031544062", size = 86633, upload-time = "2026-02-25T01:10:43.845Z" }, -] - [[package]] name = "granite-switch" version = "0.1.0" source = { editable = "." } dependencies = [ - { name = "torch", version = "2.10.0", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-14-granite-switch-dev' or extra == 'extra-14-granite-switch-tutorials' or extra == 'extra-14-granite-switch-vllm'" }, - { name = "torch", version = "2.11.0", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-14-granite-switch-dev-vllm20' or (extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm')" }, + { name = "torch", version = "2.10.0", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-14-granite-switch-tutorials' or extra == 'extra-14-granite-switch-vllm' or extra == 'group-14-granite-switch-dev' or extra == 'group-14-granite-switch-test' or extra == 'group-14-granite-switch-vllm19'" }, + { name = "torch", version = "2.11.0", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-14-granite-switch-vllm20' or extra == 'group-14-granite-switch-dev-vllm20' or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20') or (extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19')" }, { name = "transformers" }, ] [package.optional-dependencies] +audio = [ + { name = "librosa" }, + { name = "soundfile" }, +] build = [ { name = "huggingface-hub" }, { name = "pyyaml" }, @@ -1682,46 +2476,23 @@ compose = [ { name = "safetensors" }, { name = "tqdm" }, ] -dev = [ - { name = "accelerate" }, - { name = "huggingface-hub" }, - { name = "pytest" }, - { name = "pyyaml" }, - { name = "safetensors" }, - { name = "tqdm" }, - { name = "vllm", version = "0.19.1", source = { registry = "https://pypi.org/simple" } }, -] -dev-vllm20 = [ - { name = "accelerate" }, - { name = "huggingface-hub" }, - { name = "pytest" }, - { name = "pyyaml" }, - { name = "safetensors" }, - { name = "tqdm" }, - { name = "vllm", version = "0.20.2", source = { registry = "https://pypi.org/simple" } }, -] hf = [ { name = "accelerate" }, ] -test = [ - { name = "bitsandbytes" }, - { name = "optimum-quanto" }, - { name = "pytest" }, -] tutorials = [ { name = "accelerate" }, { name = "chromadb" }, + { name = "datasets" }, { name = "httpx" }, { name = "huggingface-hub" }, - { name = "ipython", version = "8.39.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and extra == 'extra-14-granite-switch-tutorials') or (python_full_version >= '3.11' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm') or (extra == 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra != 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20')" }, - { name = "ipython", version = "9.13.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and extra == 'extra-14-granite-switch-tutorials') or (python_full_version < '3.11' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm') or (extra != 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra != 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20')" }, - { name = "mellea", version = "0.3.2", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and extra == 'extra-14-granite-switch-tutorials') or (python_full_version >= '3.11' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm') or (extra == 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra != 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20')" }, - { name = "mellea", version = "0.5.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and extra == 'extra-14-granite-switch-tutorials') or (python_full_version < '3.11' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm') or (extra != 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra != 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20')" }, + { name = "ipython" }, + { name = "mellea" }, { name = "python-dotenv" }, { name = "pyyaml" }, { name = "requests" }, { name = "rich" }, { name = "safetensors" }, + { name = "sentence-transformers" }, { name = "tqdm" }, { name = "vllm", version = "0.19.1", source = { registry = "https://pypi.org/simple" } }, ] @@ -1732,23 +2503,43 @@ vllm20 = [ { name = "vllm", version = "0.20.2", source = { registry = "https://pypi.org/simple" } }, ] +[package.dev-dependencies] +dev = [ + { name = "granite-switch", extra = ["compose", "hf"], marker = "extra == 'group-14-granite-switch-dev' or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20')" }, + { name = "pytest" }, + { name = "vllm", version = "0.19.1", source = { registry = "https://pypi.org/simple" } }, +] +dev-vllm20 = [ + { name = "granite-switch", extra = ["compose", "hf"], marker = "extra == 'group-14-granite-switch-dev-vllm20' or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20')" }, + { name = "pytest" }, + { name = "vllm", version = "0.20.2", source = { registry = "https://pypi.org/simple" } }, +] +test = [ + { name = "bitsandbytes" }, + { name = "granite-switch", extra = ["compose", "hf"], marker = "extra == 'group-14-granite-switch-test' or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20')" }, + { name = "optimum-quanto" }, + { name = "pytest" }, + { name = "vllm", version = "0.19.1", source = { registry = "https://pypi.org/simple" } }, +] +vllm19 = [ + { name = "vllm", version = "0.19.1", source = { registry = "https://pypi.org/simple" } }, +] +vllm20 = [ + { name = "vllm", version = "0.20.2", source = { registry = "https://pypi.org/simple" } }, +] + [package.metadata] requires-dist = [ { name = "accelerate", marker = "extra == 'hf'", specifier = ">=0.20.0" }, - { name = "bitsandbytes", marker = "extra == 'test'" }, { name = "chromadb", marker = "extra == 'tutorials'", specifier = ">=0.4.0" }, - { name = "granite-switch", extras = ["hf", "vllm", "compose"], marker = "extra == 'dev'" }, + { name = "datasets", marker = "extra == 'tutorials'", specifier = ">=2.0.0" }, { name = "granite-switch", extras = ["hf", "vllm", "compose"], marker = "extra == 'tutorials'" }, - { name = "granite-switch", extras = ["hf", "vllm20", "compose"], marker = "extra == 'dev-vllm20'" }, { name = "httpx", marker = "extra == 'tutorials'", specifier = ">=0.24.0" }, { name = "huggingface-hub", marker = "extra == 'build'" }, { name = "huggingface-hub", marker = "extra == 'compose'" }, { name = "ipython", marker = "extra == 'tutorials'", specifier = ">=8.10.0" }, - { name = "mellea", marker = "extra == 'tutorials'", specifier = ">=0.1.0" }, - { name = "optimum-quanto", marker = "extra == 'test'" }, - { name = "pytest", marker = "extra == 'dev'" }, - { name = "pytest", marker = "extra == 'dev-vllm20'" }, - { name = "pytest", marker = "extra == 'test'" }, + { name = "librosa", marker = "extra == 'audio'" }, + { name = "mellea", marker = "extra == 'tutorials'", specifier = "==0.6.0" }, { name = "python-dotenv", marker = "extra == 'tutorials'", specifier = ">=1.0.0" }, { name = "pyyaml", marker = "extra == 'build'" }, { name = "pyyaml", marker = "extra == 'compose'" }, @@ -1756,14 +2547,37 @@ requires-dist = [ { name = "rich", marker = "extra == 'tutorials'", specifier = ">=13.0.0" }, { name = "safetensors", marker = "extra == 'build'" }, { name = "safetensors", marker = "extra == 'compose'" }, - { name = "torch", specifier = ">=2.0.0" }, + { name = "sentence-transformers", marker = "extra == 'tutorials'", specifier = ">=3.0.0" }, + { name = "soundfile", marker = "extra == 'audio'" }, + { name = "torch", specifier = ">=2.10.0" }, { name = "tqdm", marker = "extra == 'build'" }, { name = "tqdm", marker = "extra == 'compose'" }, - { name = "transformers", specifier = ">=5.5.1" }, + { name = "transformers", specifier = ">=5.5.1,<5.10.0" }, { name = "vllm", marker = "extra == 'vllm'", specifier = ">=0.19.1,<0.20.0" }, { name = "vllm", marker = "extra == 'vllm20'", specifier = ">=0.20.0,<0.21.0" }, ] -provides-extras = ["hf", "vllm", "vllm20", "compose", "build", "tutorials", "dev", "dev-vllm20", "test"] +provides-extras = ["hf", "vllm", "vllm20", "compose", "build", "audio", "tutorials"] + +[package.metadata.requires-dev] +dev = [ + { name = "granite-switch", extras = ["hf", "compose"] }, + { name = "pytest" }, + { name = "vllm", specifier = ">=0.19.1,<0.20.0" }, +] +dev-vllm20 = [ + { name = "granite-switch", extras = ["hf", "compose"] }, + { name = "pytest" }, + { name = "vllm", specifier = ">=0.20.0,<0.21.0" }, +] +test = [ + { name = "bitsandbytes" }, + { name = "granite-switch", extras = ["hf", "compose"] }, + { name = "optimum-quanto" }, + { name = "pytest" }, + { name = "vllm", specifier = ">=0.19.1,<0.20.0" }, +] +vllm19 = [{ name = "vllm", specifier = ">=0.19.1,<0.20.0" }] +vllm20 = [{ name = "vllm", specifier = ">=0.20.0,<0.21.0" }] [[package]] name = "grpcio" @@ -1774,16 +2588,6 @@ dependencies = [ ] sdist = { url = "https://files.pythonhosted.org/packages/b7/48/af6173dbca4454f4637a4678b67f52ca7e0c1ed7d5894d89d434fecede05/grpcio-1.80.0.tar.gz", hash = "sha256:29aca15edd0688c22ba01d7cc01cb000d72b2033f4a3c72a81a19b56fd143257", size = 12978905, upload-time = "2026-03-30T08:49:10.502Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/9d/cd/bb7b7e54084a344c03d68144450da7ddd5564e51a298ae1662de65f48e2d/grpcio-1.80.0-cp310-cp310-linux_armv7l.whl", hash = "sha256:886457a7768e408cdce226ad1ca67d2958917d306523a0e21e1a2fdaa75c9c9c", size = 6050363, upload-time = "2026-03-30T08:46:20.894Z" }, - { url = "https://files.pythonhosted.org/packages/16/02/1417f5c3460dea65f7a2e3c14e8b31e77f7ffb730e9bfadd89eda7a9f477/grpcio-1.80.0-cp310-cp310-macosx_11_0_universal2.whl", hash = "sha256:7b641fc3f1dc647bfd80bd713addc68f6d145956f64677e56d9ebafc0bd72388", size = 12026037, upload-time = "2026-03-30T08:46:25.144Z" }, - { url = "https://files.pythonhosted.org/packages/43/98/c910254eedf2cae368d78336a2de0678e66a7317d27c02522392f949b5c6/grpcio-1.80.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:33eb763f18f006dc7fee1e69831d38d23f5eccd15b2e0f92a13ee1d9242e5e02", size = 6602306, upload-time = "2026-03-30T08:46:27.593Z" }, - { url = "https://files.pythonhosted.org/packages/7c/f8/88ca4e78c077b2b2113d95da1e1ab43efd43d723c9a0397d26529c2c1a56/grpcio-1.80.0-cp310-cp310-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:52d143637e3872633fc7dd7c3c6a1c84e396b359f3a72e215f8bf69fd82084fc", size = 7301535, upload-time = "2026-03-30T08:46:29.556Z" }, - { url = "https://files.pythonhosted.org/packages/f9/96/f28660fe2fe0f153288bf4a04e4910b7309d442395135c88ed4f5b3b8b40/grpcio-1.80.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c51bf8ac4575af2e0678bccfb07e47321fc7acb5049b4482832c5c195e04e13a", size = 6808669, upload-time = "2026-03-30T08:46:31.984Z" }, - { url = "https://files.pythonhosted.org/packages/47/eb/3f68a5e955779c00aeef23850e019c1c1d0e032d90633ba49c01ad5a96e0/grpcio-1.80.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:50a9871536d71c4fba24ee856abc03a87764570f0c457dd8db0b4018f379fed9", size = 7409489, upload-time = "2026-03-30T08:46:34.684Z" }, - { url = "https://files.pythonhosted.org/packages/5b/a7/d2f681a4bfb881be40659a309771f3bdfbfdb1190619442816c3f0ffc079/grpcio-1.80.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:a72d84ad0514db063e21887fbacd1fd7acb4d494a564cae22227cd45c7fbf199", size = 8423167, upload-time = "2026-03-30T08:46:36.833Z" }, - { url = "https://files.pythonhosted.org/packages/97/8a/29b4589c204959aa35ce5708400a05bba72181807c45c47b3ec000c39333/grpcio-1.80.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:f7691a6788ad9196872f95716df5bc643ebba13c97140b7a5ee5c8e75d1dea81", size = 7846761, upload-time = "2026-03-30T08:46:40.091Z" }, - { url = "https://files.pythonhosted.org/packages/6b/d2/ed143e097230ee121ac5848f6ff14372dba91289b10b536d54fb1b7cbae7/grpcio-1.80.0-cp310-cp310-win32.whl", hash = "sha256:46c2390b59d67f84e882694d489f5b45707c657832d7934859ceb8c33f467069", size = 4156534, upload-time = "2026-03-30T08:46:42.026Z" }, - { url = "https://files.pythonhosted.org/packages/d5/c9/df8279bb49b29409995e95efa85b72973d62f8aeff89abee58c91f393710/grpcio-1.80.0-cp310-cp310-win_amd64.whl", hash = "sha256:dc053420fc75749c961e2a4c906398d7c15725d36ccc04ae6d16093167223b58", size = 4889869, upload-time = "2026-03-30T08:46:44.219Z" }, { url = "https://files.pythonhosted.org/packages/5d/db/1d56e5f5823257b291962d6c0ce106146c6447f405b60b234c4f222a7cde/grpcio-1.80.0-cp311-cp311-linux_armv7l.whl", hash = "sha256:dfab85db094068ff42e2a3563f60ab3dddcc9d6488a35abf0132daec13209c8a", size = 6055009, upload-time = "2026-03-30T08:46:46.265Z" }, { url = "https://files.pythonhosted.org/packages/6e/18/c83f3cad64c5ca63bca7e91e5e46b0d026afc5af9d0a9972472ceba294b3/grpcio-1.80.0-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:5c07e82e822e1161354e32da2662f741a4944ea955f9f580ec8fb409dd6f6060", size = 12035295, upload-time = "2026-03-30T08:46:49.099Z" }, { url = "https://files.pythonhosted.org/packages/0f/8e/e14966b435be2dda99fbe89db9525ea436edc79780431a1c2875a3582644/grpcio-1.80.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ba0915d51fd4ced2db5ff719f84e270afe0e2d4c45a7bdb1e8d036e4502928c2", size = 6610297, upload-time = "2026-03-30T08:46:52.123Z" }, @@ -1868,13 +2672,6 @@ version = "0.7.1" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/b5/46/120a669232c7bdedb9d52d4aeae7e6c7dfe151e99dc70802e2fc7a5e1993/httptools-0.7.1.tar.gz", hash = "sha256:abd72556974f8e7c74a259655924a717a2365b236c882c3f6f8a45fe94703ac9", size = 258961, upload-time = "2025-10-10T03:55:08.559Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/c7/e5/c07e0bcf4ec8db8164e9f6738c048b2e66aabf30e7506f440c4cc6953f60/httptools-0.7.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:11d01b0ff1fe02c4c32d60af61a4d613b74fad069e47e06e9067758c01e9ac78", size = 204531, upload-time = "2025-10-10T03:54:20.887Z" }, - { url = "https://files.pythonhosted.org/packages/7e/4f/35e3a63f863a659f92ffd92bef131f3e81cf849af26e6435b49bd9f6f751/httptools-0.7.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:84d86c1e5afdc479a6fdabf570be0d3eb791df0ae727e8dbc0259ed1249998d4", size = 109408, upload-time = "2025-10-10T03:54:22.455Z" }, - { url = "https://files.pythonhosted.org/packages/f5/71/b0a9193641d9e2471ac541d3b1b869538a5fb6419d52fd2669fa9c79e4b8/httptools-0.7.1-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:c8c751014e13d88d2be5f5f14fc8b89612fcfa92a9cc480f2bc1598357a23a05", size = 440889, upload-time = "2025-10-10T03:54:23.753Z" }, - { url = "https://files.pythonhosted.org/packages/eb/d9/2e34811397b76718750fea44658cb0205b84566e895192115252e008b152/httptools-0.7.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:654968cb6b6c77e37b832a9be3d3ecabb243bbe7a0b8f65fbc5b6b04c8fcabed", size = 440460, upload-time = "2025-10-10T03:54:25.313Z" }, - { url = "https://files.pythonhosted.org/packages/01/3f/a04626ebeacc489866bb4d82362c0657b2262bef381d68310134be7f40bb/httptools-0.7.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:b580968316348b474b020edf3988eecd5d6eec4634ee6561e72ae3a2a0e00a8a", size = 425267, upload-time = "2025-10-10T03:54:26.81Z" }, - { url = "https://files.pythonhosted.org/packages/a5/99/adcd4f66614db627b587627c8ad6f4c55f18881549bab10ecf180562e7b9/httptools-0.7.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:d496e2f5245319da9d764296e86c5bb6fcf0cf7a8806d3d000717a889c8c0b7b", size = 424429, upload-time = "2025-10-10T03:54:28.174Z" }, - { url = "https://files.pythonhosted.org/packages/d5/72/ec8fc904a8fd30ba022dfa85f3bbc64c3c7cd75b669e24242c0658e22f3c/httptools-0.7.1-cp310-cp310-win_amd64.whl", hash = "sha256:cbf8317bfccf0fed3b5680c559d3459cccf1abe9039bfa159e62e391c7270568", size = 86173, upload-time = "2025-10-10T03:54:29.5Z" }, { url = "https://files.pythonhosted.org/packages/9c/08/17e07e8d89ab8f343c134616d72eebfe03798835058e2ab579dcc8353c06/httptools-0.7.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:474d3b7ab469fefcca3697a10d11a32ee2b9573250206ba1e50d5980910da657", size = 206521, upload-time = "2025-10-10T03:54:31.002Z" }, { url = "https://files.pythonhosted.org/packages/aa/06/c9c1b41ff52f16aee526fd10fbda99fa4787938aa776858ddc4a1ea825ec/httptools-0.7.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a3c3b7366bb6c7b96bd72d0dbe7f7d5eead261361f013be5f6d9590465ea1c70", size = 110375, upload-time = "2025-10-10T03:54:31.941Z" }, { url = "https://files.pythonhosted.org/packages/cc/cc/10935db22fda0ee34c76f047590ca0a8bd9de531406a3ccb10a90e12ea21/httptools-0.7.1-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:379b479408b8747f47f3b253326183d7c009a3936518cdb70db58cffd369d9df", size = 456621, upload-time = "2025-10-10T03:54:33.176Z" }, @@ -1934,8 +2731,7 @@ dependencies = [ { name = "packaging" }, { name = "pyyaml" }, { name = "tqdm" }, - { name = "typer", version = "0.23.1", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and extra == 'extra-14-granite-switch-tutorials') or (python_full_version >= '3.11' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm') or (extra == 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra != 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20')" }, - { name = "typer", version = "0.25.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' or extra == 'extra-14-granite-switch-dev-vllm20' or extra != 'extra-14-granite-switch-tutorials' or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20')" }, + { name = "typer" }, { name = "typing-extensions" }, ] sdist = { url = "https://files.pythonhosted.org/packages/bb/b6/e22bd20a25299c34b8c5922c1545a6320825b13906eb0f7298edfd034a0b/huggingface_hub-1.15.0.tar.gz", hash = "sha256:28abfdddda3927fd4de6a63cf26ab012498a2c24dae52baf150c5c6edf98a1d5", size = 784100, upload-time = "2026-05-15T11:42:52.149Z" } @@ -1958,17 +2754,6 @@ version = "3.5.0" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/f4/57/60d1a6a512f2f0508d0bc8b4f1cc5616fd3196619b66bd6a01f9155a1292/ijson-3.5.0.tar.gz", hash = "sha256:94688760720e3f5212731b3cb8d30267f9a045fb38fb3870254e7b9504246f31", size = 68658, upload-time = "2026-02-24T03:58:30.974Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/6e/32/21c1b47a1afb7319944d0b9685c0997a9d574a77b030c82f6a1ac2cef4eb/ijson-3.5.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:ea8dcac10d86adaeead454bc25c97b68d0bda573d5fd6f86f5e21cf8f7906f88", size = 88935, upload-time = "2026-02-24T03:56:40.591Z" }, - { url = "https://files.pythonhosted.org/packages/86/f7/6ac7ebbb3cd767c87cdcbb950a6754afd1c0977756347bfe03eb8e5b866d/ijson-3.5.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:92b0495bbb2150bbf14fc5d98fb6d76bcd1c526605a172709e602e6fedc96495", size = 60567, upload-time = "2026-02-24T03:56:41.919Z" }, - { url = "https://files.pythonhosted.org/packages/c4/98/1140de9ae872468a8bc2e87c171228e25e58b1eb696b7fb430f7590fea44/ijson-3.5.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:7af0c4c8943be8b09a4e57bdc1da6001dae7b36526d4154fe5c8224738d0921f", size = 60620, upload-time = "2026-02-24T03:56:42.764Z" }, - { url = "https://files.pythonhosted.org/packages/60/e1/67dfe0774e4c7ca6ec8702e280e8764d356f3db54358999818cda6df7679/ijson-3.5.0-cp310-cp310-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:45887d5e84ff0d2b138c926cebd9071830733968afe8d9d12080b3c178c7f918", size = 126558, upload-time = "2026-02-24T03:56:43.922Z" }, - { url = "https://files.pythonhosted.org/packages/1f/ef/23d614fc773d428caeb6e197218b7e32adcc668ff5b98777039149571208/ijson-3.5.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9a70b575be8e57a28c80e90ed349ad3a851c3478524c70e36e07d6092ecd12c9", size = 133091, upload-time = "2026-02-24T03:56:45.291Z" }, - { url = "https://files.pythonhosted.org/packages/b8/80/99727603cd8a1d32edafa4392f4056b2420bf48c15afd34481c68a2d4435/ijson-3.5.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2adeecd45830bfd5580ca79a584154713aabef0b9607e16249133df5d2859813", size = 130249, upload-time = "2026-02-24T03:56:46.333Z" }, - { url = "https://files.pythonhosted.org/packages/0b/94/3a3d623ca80768e834be8a834ef05960e3b9e79af1a911704ff10c9e8792/ijson-3.5.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:d873e72889e7fc5962ab58909f1adff338d7c2f49e450e5b5fe844eff8155a14", size = 133501, upload-time = "2026-02-24T03:56:47.54Z" }, - { url = "https://files.pythonhosted.org/packages/cf/f6/df2c14ad340834eccee379046f155e4b66a16ddafd445429dee7b3323614/ijson-3.5.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:9a88c559456a79708592234d697645d92b599718f4cbbeaa6515f83ac63ca0ae", size = 128438, upload-time = "2026-02-24T03:56:48.455Z" }, - { url = "https://files.pythonhosted.org/packages/0c/7e/9ff5b8b5fee113f5607bc4149b707382a898eeb545153189b075e5ec8d59/ijson-3.5.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:cf83f58ad50dc0d39a2105cb26d4f359b38f42cef68b913170d4d47d97d97ba5", size = 131116, upload-time = "2026-02-24T03:56:49.737Z" }, - { url = "https://files.pythonhosted.org/packages/64/20/954ce0d440d7cf72a3d8361b14406f9cdbf624b1625c10f8488857c769d6/ijson-3.5.0-cp310-cp310-win32.whl", hash = "sha256:aec4580a7712a19b1f95cd41bed260fc6a31266d37ef941827772a4c199e8143", size = 52724, upload-time = "2026-02-24T03:56:50.932Z" }, - { url = "https://files.pythonhosted.org/packages/24/33/ece87d60502c6115642cbabeb8c122fa982212b392bc4f4ff5aab8e02dac/ijson-3.5.0-cp310-cp310-win_amd64.whl", hash = "sha256:9a9c4c70501e23e8eb1675330686d1598eebfa14b6f0dbc8f00c2e081cc628fa", size = 55125, upload-time = "2026-02-24T03:56:51.942Z" }, { url = "https://files.pythonhosted.org/packages/65/da/644343198abca5e0f6e2486063f8d8f3c443ca0ef5e5c890e51ef6032e33/ijson-3.5.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:5616311404b858d32740b7ad8b9a799c62165f5ecb85d0a8ed16c21665a90533", size = 88964, upload-time = "2026-02-24T03:56:53.099Z" }, { url = "https://files.pythonhosted.org/packages/5b/63/8621190aa2baf96156dfd4c632b6aa9f1464411e50b98750c09acc0505ea/ijson-3.5.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e9733f94029dd41702d573ef64752e2556e72aea14623d6dbb7a44ca1ccf30fd", size = 60582, upload-time = "2026-02-24T03:56:54.261Z" }, { url = "https://files.pythonhosted.org/packages/20/31/6a3f041fdd17dacff33b7d7d3ba3df6dca48740108340c6042f974b2ad20/ijson-3.5.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:db8398c6721b98412a4f618da8022550c8b9c5d9214040646071b5deb4d4a393", size = 60632, upload-time = "2026-02-24T03:56:55.159Z" }, @@ -2021,18 +2806,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/c1/0f/e849d072f2e0afe49627de3995fc9dae54b4c804c70c0840f928d95c10e1/ijson-3.5.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:fdeee6957f92e0c114f65c55cf8fe7eabb80cfacab64eea6864060913173f66d", size = 55369, upload-time = "2026-02-24T03:58:29.839Z" }, ] -[[package]] -name = "importlib-metadata" -version = "9.0.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "zipp", marker = "python_full_version < '3.11'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/a9/01/15bb152d77b21318514a96f43af312635eb2500c96b55398d020c93d86ea/importlib_metadata-9.0.0.tar.gz", hash = "sha256:a4f57ab599e6a2e3016d7595cfd72eb4661a5106e787a95bcc90c7105b831efc", size = 56405, upload-time = "2026-03-20T06:42:56.999Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/38/3d/2d244233ac4f76e38533cfcb2991c9eb4c7bf688ae0a036d30725b8faafe/importlib_metadata-9.0.0-py3-none-any.whl", hash = "sha256:2d21d1cc5a017bd0559e36150c21c830ab1dc304dedd1b7ea85d20f45ef3edd7", size = 27789, upload-time = "2026-03-20T06:42:55.665Z" }, -] - [[package]] name = "importlib-resources" version = "7.1.0" @@ -2060,53 +2833,23 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/c4/01/72d6472f80651673716d1deda2a5bbb633e563ecf94f4479da5519d69d25/interegular-0.3.3-py37-none-any.whl", hash = "sha256:b0c07007d48c89d6d19f7204972d369b2a77222722e126b6aa63aa721dc3b19c", size = 23635, upload-time = "2024-01-06T23:01:20.829Z" }, ] -[[package]] -name = "ipython" -version = "8.39.0" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.11'", -] -dependencies = [ - { name = "colorama", marker = "python_full_version < '3.11' and sys_platform == 'win32'" }, - { name = "decorator", marker = "python_full_version < '3.11'" }, - { name = "exceptiongroup", marker = "python_full_version < '3.11'" }, - { name = "jedi", marker = "python_full_version < '3.11'" }, - { name = "matplotlib-inline", marker = "python_full_version < '3.11'" }, - { name = "pexpect", marker = "python_full_version < '3.11' and sys_platform != 'emscripten' and sys_platform != 'win32'" }, - { name = "prompt-toolkit", marker = "python_full_version < '3.11'" }, - { name = "pygments", marker = "python_full_version < '3.11'" }, - { name = "stack-data", marker = "python_full_version < '3.11'" }, - { name = "traitlets", marker = "python_full_version < '3.11'" }, - { name = "typing-extensions", marker = "python_full_version < '3.11'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/40/18/f8598d287006885e7136451fdea0755af4ebcbfe342836f24deefaed1164/ipython-8.39.0.tar.gz", hash = "sha256:4110ae96012c379b8b6db898a07e186c40a2a1ef5d57a7fa83166047d9da7624", size = 5513971, upload-time = "2026-03-27T10:02:13.94Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/c0/56/4cc7fc9e9e3f38fd324f24f8afe0ad8bb5fa41283f37f1aaf9de0612c968/ipython-8.39.0-py3-none-any.whl", hash = "sha256:bb3c51c4fa8148ab1dea07a79584d1c854e234ea44aa1283bcb37bc75054651f", size = 831849, upload-time = "2026-03-27T10:02:07.846Z" }, -] - [[package]] name = "ipython" version = "9.13.0" source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.13'", - "python_full_version == '3.12.*'", - "python_full_version == '3.11.*'", -] -dependencies = [ - { name = "colorama", marker = "python_full_version >= '3.11' and sys_platform == 'win32'" }, - { name = "decorator", marker = "python_full_version >= '3.11'" }, - { name = "ipython-pygments-lexers", marker = "python_full_version >= '3.11'" }, - { name = "jedi", marker = "python_full_version >= '3.11'" }, - { name = "matplotlib-inline", marker = "python_full_version >= '3.11'" }, - { name = "pexpect", marker = "python_full_version >= '3.11' and sys_platform != 'emscripten' and sys_platform != 'win32'" }, - { name = "prompt-toolkit", marker = "python_full_version >= '3.11'" }, - { name = "psutil", marker = "python_full_version >= '3.11'" }, - { name = "pygments", marker = "python_full_version >= '3.11'" }, - { name = "stack-data", marker = "python_full_version >= '3.11'" }, - { name = "traitlets", marker = "python_full_version >= '3.11'" }, - { name = "typing-extensions", marker = "python_full_version == '3.11.*'" }, +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, + { name = "decorator" }, + { name = "ipython-pygments-lexers" }, + { name = "jedi" }, + { name = "matplotlib-inline" }, + { name = "pexpect", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "prompt-toolkit" }, + { name = "psutil" }, + { name = "pygments" }, + { name = "stack-data" }, + { name = "traitlets" }, + { name = "typing-extensions", marker = "python_full_version < '3.12'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/cd/c4/87cda5842cf5c31837c06ddb588e11c3c35d8ece89b7a0108c06b8c9b00a/ipython-9.13.0.tar.gz", hash = "sha256:7e834b6afc99f020e3f05966ced34792f40267d64cb1ea9043886dab0dde5967", size = 4430549, upload-time = "2026-04-24T12:24:55.221Z" } wheels = [ @@ -2118,7 +2861,7 @@ name = "ipython-pygments-lexers" version = "1.1.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "pygments", marker = "python_full_version >= '3.11'" }, + { name = "pygments" }, ] sdist = { url = "https://files.pythonhosted.org/packages/ef/4c/5dd1d8af08107f88c7f741ead7a40854b8ac24ddf9ae850afbcf698aa552/ipython_pygments_lexers-1.1.1.tar.gz", hash = "sha256:09c0138009e56b6854f9535736f4171d855c8c08a563a0dcd8022f78355c7e81", size = 8393, upload-time = "2025-01-17T11:24:34.505Z" } wheels = [ @@ -2155,19 +2898,6 @@ version = "0.15.0" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/66/b5/55f06bb281d92fb3cc86d14e1def2bd908bb77693183e7cb1f5a3c388b0c/jiter-0.15.0.tar.gz", hash = "sha256:4251acc80e2b7c9b7b8823456ea0fceeb0734dac2df7636d3c711b38476b5a76", size = 166640, upload-time = "2026-05-19T10:09:48.361Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/1d/da/76a2c7e510ba15fe323d9509c223ab272da79ea59f54488f4a78da6426db/jiter-0.15.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:edebcf7d1f601199084bb6e844d7dc67e03e04f6ac786b0332d616635c4ff7a4", size = 310849, upload-time = "2026-05-19T10:06:51.944Z" }, - { url = "https://files.pythonhosted.org/packages/5d/8e/827be942883a4dc0862c48626ff41af3320b1902d136a0bf4b9041f2c567/jiter-0.15.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9f924585cdacf631cd382b657966847bb537bf9ed0a6f9b991da5f05a631480f", size = 314991, upload-time = "2026-05-19T10:06:53.522Z" }, - { url = "https://files.pythonhosted.org/packages/6d/38/be2832be361ba1b9517c76f46d30b64e985be1dd43c974f4c3a4b1844436/jiter-0.15.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:abbf258599526ad0326fe51e252e24f2bd6f24f1852681b4b78feda3808f1d18", size = 340843, upload-time = "2026-05-19T10:06:55.071Z" }, - { url = "https://files.pythonhosted.org/packages/6d/d8/90f01fb83c0c7ba509303ec93e32a308fbfa167d264860b01c0fd0dbbd06/jiter-0.15.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7c468136b8bd6bb18c8786e4236a1fa27362f24cb23450ba0cb204ab379b8e6f", size = 365116, upload-time = "2026-05-19T10:06:56.893Z" }, - { url = "https://files.pythonhosted.org/packages/91/38/94593d34f8c67a0b6f6cbc027f016ffa9780b3a858a7a86f6fd7a15bcc1e/jiter-0.15.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:05906b93d72f03339e6bb7cf8dc10ebda64a0266126eed6beba79e20abcf5fd4", size = 457970, upload-time = "2026-05-19T10:06:58.707Z" }, - { url = "https://files.pythonhosted.org/packages/df/04/d79962dd49d00c97e2a9b4cacea1947904d02135936960351f9a96d4c1a6/jiter-0.15.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:30ce785d2adb8e32c3f7741442370a74834ec4c01f3c48f0750227a0b4ef27d6", size = 375744, upload-time = "2026-05-19T10:07:00.471Z" }, - { url = "https://files.pythonhosted.org/packages/c3/2e/5d37abe2be0e819c21e2338bebd410e481763ce526a9138c8c3652fa0123/jiter-0.15.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2fd73e3da91a0a722d67165e849ce2cdc10de0e0d48738c142be8c6c5f310f4c", size = 349609, upload-time = "2026-05-19T10:07:01.829Z" }, - { url = "https://files.pythonhosted.org/packages/7a/90/98768ad2ed90c1fda15d64157de2dfbf73c1c074d4b1bfaca915480bc7cf/jiter-0.15.0-cp310-cp310-manylinux_2_31_riscv64.whl", hash = "sha256:ceb8fc27d38793f9c97149be8302720c5b22e5c195a37bf2c45dc36c4600a512", size = 354366, upload-time = "2026-05-19T10:07:03.587Z" }, - { url = "https://files.pythonhosted.org/packages/d6/c4/fbfb806209f1fe4b7dccdfb07bc62bb044300734a945b06fd64db446ef6a/jiter-0.15.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d726e3ceeb337191324b49de298142f27c3ad10886341555d1d5315b5f252c6a", size = 393519, upload-time = "2026-05-19T10:07:05.08Z" }, - { url = "https://files.pythonhosted.org/packages/37/1c/b9c257cd70cb453b6d10f3ebf0402cdb11669ab455389096f09839670290/jiter-0.15.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:2c8aea7781d2a372227871de4e1a1332aa96f5a89fd76c5e835dafdbad102887", size = 519952, upload-time = "2026-05-19T10:07:06.589Z" }, - { url = "https://files.pythonhosted.org/packages/a9/1a/aa85027db7ab15829c12feebbc33b404f53fc399bd559d85fd0d6365ff0d/jiter-0.15.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:cf4bd113a69c0a740e27cb962ce10630c36d2b8f59d759a651b955ee9d18a823", size = 550770, upload-time = "2026-05-19T10:07:08.228Z" }, - { url = "https://files.pythonhosted.org/packages/d4/54/8c3f65c8a5687925e84708f19d63f7f37d28e2b86a48d951702ad94424d8/jiter-0.15.0-cp310-cp310-win32.whl", hash = "sha256:d92a5cd21fdb083931d546c207aa29633787c5dc5b02daab2d32b843f88a2c53", size = 209303, upload-time = "2026-05-19T10:07:10.006Z" }, - { url = "https://files.pythonhosted.org/packages/d5/72/0528a1eb9f42dd2d8228a0711458628f35924d131f623eaebc35fd23d3d4/jiter-0.15.0-cp310-cp310-win_amd64.whl", hash = "sha256:e58585a58209d72691ce2d62a9147445f5a87beb0bde97fde284c96ae392a3d1", size = 200404, upload-time = "2026-05-19T10:07:11.426Z" }, { url = "https://files.pythonhosted.org/packages/e4/13/daa722f5765c393576f466378f9dfd29d77c9bed939e0688f96afa3601ea/jiter-0.15.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:0f862193b8696249d22ec433e85fd2ab0ad9596bc3e45e6c0bc55e8aeba97be2", size = 310899, upload-time = "2026-05-19T10:07:12.89Z" }, { url = "https://files.pythonhosted.org/packages/7f/82/2d2551829b082f4b6d82b9f939b031fb808a10aab1ec0664f82e150bb9a2/jiter-0.15.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1303d4d68a9b051ea90502402063ecf3807da00ad2affa19ca1ae3b90b3c5f67", size = 314963, upload-time = "2026-05-19T10:07:14.539Z" }, { url = "https://files.pythonhosted.org/packages/2a/0a/8b1a51466f7fe9f31dbe4bc7e0ca848674f9825e0f737b929b97e8c60aa7/jiter-0.15.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:392b8ab019e5502d08aff85c6272209c24bc2cbe706ea82a56368f524236614a", size = 341730, upload-time = "2026-05-19T10:07:15.869Z" }, @@ -2243,15 +2973,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/7b/91/984aca2ec129e2757d1e4e3c81c3fcda9d0f85b74670a094cc443d9ee949/joblib-1.5.3-py3-none-any.whl", hash = "sha256:5fc3c5039fc5ca8c0276333a188bbd59d6b7ab37fe6632daa76bc7f9ec18e713", size = 309071, upload-time = "2025-12-15T08:41:44.973Z" }, ] -[[package]] -name = "json5" -version = "0.14.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/9c/4b/6f8906aaf67d501e259b0adab4d312945bb7211e8b8d4dcc77c92320edaa/json5-0.14.0.tar.gz", hash = "sha256:b3f492fad9f6cdbced8b7d40b28b9b1c9701c5f561bef0d33b81c2ff433fefcb", size = 52656, upload-time = "2026-03-27T22:50:48.108Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/b8/42/cf027b4ac873b076189d935b135397675dac80cb29acb13e1ab86ad6c631/json5-0.14.0-py3-none-any.whl", hash = "sha256:56cf861bab076b1178eb8c92e1311d273a9b9acea2ccc82c276abf839ebaef3a", size = 36271, upload-time = "2026-03-27T22:50:47.073Z" }, -] - [[package]] name = "jsonschema" version = "4.26.0" @@ -2321,6 +3042,47 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/e9/61/f75cd1fa54d8434276126034aed54dd120747de9a8fa013cdd79545ccbeb/latex2sympy2_extended-1.11.0-py3-none-any.whl", hash = "sha256:aebb77d52ce269e25028e4bea89ddb14d242ba36bcf7b636496fb5fd9728d234", size = 209050, upload-time = "2026-01-10T01:43:19.458Z" }, ] +[[package]] +name = "lazy-loader" +version = "0.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "packaging" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/49/ac/21a1f8aa3777f5658576777ea76bfb124b702c520bbe90edf4ae9915eafa/lazy_loader-0.5.tar.gz", hash = "sha256:717f9179a0dbed357012ddad50a5ad3d5e4d9a0b8712680d4e687f5e6e6ed9b3", size = 15294, upload-time = "2026-03-06T15:45:09.054Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8a/a1/8d812e53a5da1687abb10445275d41a8b13adb781bbf7196ddbcf8d88505/lazy_loader-0.5-py3-none-any.whl", hash = "sha256:ab0ea149e9c554d4ffeeb21105ac60bed7f3b4fd69b1d2360a4add51b170b005", size = 8044, upload-time = "2026-03-06T15:45:07.668Z" }, +] + +[[package]] +name = "librosa" +version = "0.11.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "audioread" }, + { name = "decorator" }, + { name = "joblib" }, + { name = "lazy-loader" }, + { name = "msgpack" }, + { name = "numba", version = "0.61.2", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-14-granite-switch-tutorials' or extra == 'extra-14-granite-switch-vllm' or extra == 'group-14-granite-switch-dev' or extra == 'group-14-granite-switch-test' or extra == 'group-14-granite-switch-vllm19'" }, + { name = "numba", version = "0.65.0", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-14-granite-switch-vllm20' or extra == 'group-14-granite-switch-dev-vllm20' or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20') or (extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19')" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-14-granite-switch-tutorials' or extra == 'extra-14-granite-switch-vllm' or extra == 'group-14-granite-switch-dev' or extra == 'group-14-granite-switch-test' or extra == 'group-14-granite-switch-vllm19'" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.13' and extra == 'extra-14-granite-switch-vllm20') or (python_full_version < '3.13' and extra == 'group-14-granite-switch-dev-vllm20') or (python_full_version < '3.13' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20')" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.13' and extra == 'extra-14-granite-switch-vllm20') or (python_full_version >= '3.13' and extra == 'group-14-granite-switch-dev-vllm20') or (python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20') or (extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20')" }, + { name = "pooch" }, + { name = "scikit-learn" }, + { name = "scipy" }, + { name = "soundfile" }, + { name = "soxr" }, + { name = "standard-aifc", marker = "python_full_version >= '3.13' or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20')" }, + { name = "standard-sunau", marker = "python_full_version >= '3.13' or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20')" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/64/36/360b5aafa0238e29758729e9486c6ed92a6f37fa403b7875e06c115cdf4a/librosa-0.11.0.tar.gz", hash = "sha256:f5ed951ca189b375bbe2e33b2abd7e040ceeee302b9bbaeeffdfddb8d0ace908", size = 327001, upload-time = "2025-03-11T15:09:54.884Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b5/ba/c63c5786dfee4c3417094c4b00966e61e4a63efecee22cb7b4c0387dda83/librosa-0.11.0-py3-none-any.whl", hash = "sha256:0b6415c4fd68bff4c29288abe67c6d80b587e0e1e2cfb0aad23e4559504a7fa1", size = 260749, upload-time = "2025-03-11T15:09:52.982Z" }, +] + [[package]] name = "llguidance" version = "1.3.0" @@ -2336,40 +3098,203 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/5a/7e/809349638231f469b9056c0e1bfd924d5ef5558b3b3ec72d093b6fad33b1/llguidance-1.3.0-cp39-abi3-win_amd64.whl", hash = "sha256:1d1cd1c8618d1a13605d3e057c978651e551c8c469b481ee4041f1d6c436002d", size = 2789946, upload-time = "2025-10-20T19:58:45.958Z" }, ] -[[package]] -name = "llm-sandbox" -version = "0.3.39" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "pydantic", marker = "python_full_version < '3.11'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/fb/f1/30b41350f105dbd794639565a1f6e4ab28f95940fc2907cb721471dca105/llm_sandbox-0.3.39.tar.gz", hash = "sha256:7452317a054df3ac20fb652a2e100b5697624886282874fecfb738bac21b27bb", size = 611034, upload-time = "2026-04-20T16:59:45.133Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/35/cf/c0419980643daca64173cadda2edad6addc8965b0e694ab0e18a8f77a2c6/llm_sandbox-0.3.39-py3-none-any.whl", hash = "sha256:4fd22a4ae175695de8d9e151f6b12e270859d65208f946b8abec8d5ae2e29b66", size = 108859, upload-time = "2026-04-20T16:59:44.02Z" }, -] - -[package.optional-dependencies] -docker = [ - { name = "docker", marker = "python_full_version < '3.11'" }, -] - [[package]] name = "llvmlite" version = "0.44.0" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "python_full_version >= '3.13'", - "python_full_version == '3.12.*'", - "python_full_version == '3.11.*'", - "python_full_version < '3.11'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", ] sdist = { url = "https://files.pythonhosted.org/packages/89/6a/95a3d3610d5c75293d5dbbb2a76480d5d4eeba641557b69fe90af6c5b84e/llvmlite-0.44.0.tar.gz", hash = "sha256:07667d66a5d150abed9157ab6c0b9393c9356f229784a4385c02f99e94fc94d4", size = 171880, upload-time = "2025-01-20T11:14:41.342Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/41/75/d4863ddfd8ab5f6e70f4504cf8cc37f4e986ec6910f4ef8502bb7d3c1c71/llvmlite-0.44.0-cp310-cp310-macosx_10_14_x86_64.whl", hash = "sha256:9fbadbfba8422123bab5535b293da1cf72f9f478a65645ecd73e781f962ca614", size = 28132306, upload-time = "2025-01-20T11:12:18.634Z" }, - { url = "https://files.pythonhosted.org/packages/37/d9/6e8943e1515d2f1003e8278819ec03e4e653e2eeb71e4d00de6cfe59424e/llvmlite-0.44.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:cccf8eb28f24840f2689fb1a45f9c0f7e582dd24e088dcf96e424834af11f791", size = 26201096, upload-time = "2025-01-20T11:12:24.544Z" }, - { url = "https://files.pythonhosted.org/packages/aa/46/8ffbc114def88cc698906bf5acab54ca9fdf9214fe04aed0e71731fb3688/llvmlite-0.44.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7202b678cdf904823c764ee0fe2dfe38a76981f4c1e51715b4cb5abb6cf1d9e8", size = 42361859, upload-time = "2025-01-20T11:12:31.839Z" }, - { url = "https://files.pythonhosted.org/packages/30/1c/9366b29ab050a726af13ebaae8d0dff00c3c58562261c79c635ad4f5eb71/llvmlite-0.44.0-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:40526fb5e313d7b96bda4cbb2c85cd5374e04d80732dd36a282d72a560bb6408", size = 41184199, upload-time = "2025-01-20T11:12:40.049Z" }, - { url = "https://files.pythonhosted.org/packages/69/07/35e7c594b021ecb1938540f5bce543ddd8713cff97f71d81f021221edc1b/llvmlite-0.44.0-cp310-cp310-win_amd64.whl", hash = "sha256:41e3839150db4330e1b2716c0be3b5c4672525b4c9005e17c7597f835f351ce2", size = 30332381, upload-time = "2025-01-20T11:12:47.054Z" }, { url = "https://files.pythonhosted.org/packages/b5/e2/86b245397052386595ad726f9742e5223d7aea999b18c518a50e96c3aca4/llvmlite-0.44.0-cp311-cp311-macosx_10_14_x86_64.whl", hash = "sha256:eed7d5f29136bda63b6d7804c279e2b72e08c952b7c5df61f45db408e0ee52f3", size = 28132305, upload-time = "2025-01-20T11:12:53.936Z" }, { url = "https://files.pythonhosted.org/packages/ff/ec/506902dc6870249fbe2466d9cf66d531265d0f3a1157213c8f986250c033/llvmlite-0.44.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ace564d9fa44bb91eb6e6d8e7754977783c68e90a471ea7ce913bff30bd62427", size = 26201090, upload-time = "2025-01-20T11:12:59.847Z" }, { url = "https://files.pythonhosted.org/packages/99/fe/d030f1849ebb1f394bb3f7adad5e729b634fb100515594aca25c354ffc62/llvmlite-0.44.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c5d22c3bfc842668168a786af4205ec8e3ad29fb1bc03fd11fd48460d0df64c1", size = 42361858, upload-time = "2025-01-20T11:13:07.623Z" }, @@ -2392,21 +3317,53 @@ name = "llvmlite" version = "0.47.0" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "python_full_version >= '3.13' and sys_platform == 'darwin'", - "python_full_version == '3.12.*' and sys_platform == 'darwin'", - "python_full_version >= '3.13' and sys_platform != 'darwin'", - "python_full_version == '3.12.*' and sys_platform != 'darwin'", - "python_full_version == '3.11.*' and sys_platform == 'darwin'", - "python_full_version < '3.11' and sys_platform == 'darwin'", - "python_full_version == '3.11.*' and sys_platform != 'darwin'", - "python_full_version < '3.11' and sys_platform != 'darwin'", + "python_full_version >= '3.13' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", ] sdist = { url = "https://files.pythonhosted.org/packages/01/88/a8952b6d5c21e74cbf158515b779666f692846502623e9e3c39d8e8ba25f/llvmlite-0.47.0.tar.gz", hash = "sha256:62031ce968ec74e95092184d4b0e857e444f8fdff0b8f9213707699570c33ccc", size = 193614, upload-time = "2026-03-31T18:29:53.497Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/f4/f5/a1bde3aa8c43524b0acaf3f72fb3d80a32dd29dbb42d7dc434f84584cdcc/llvmlite-0.47.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:41270b0b1310717f717cf6f2a9c68d3c43bd7905c33f003825aebc361d0d1b17", size = 37232772, upload-time = "2026-03-31T18:28:12.198Z" }, - { url = "https://files.pythonhosted.org/packages/7c/fb/76d88fc05ee1f9c1a6efe39eb493c4a727e5d1690412469017cd23bcb776/llvmlite-0.47.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:f9d118bc1dd7623e0e65ca9ac485ec6dd543c3b77bc9928ddc45ebd34e1e30a7", size = 56275179, upload-time = "2026-03-31T18:28:15.725Z" }, - { url = "https://files.pythonhosted.org/packages/4d/08/29da7f36217abd56a0c389ef9a18bea47960826e691ced1a36c92c6ce93c/llvmlite-0.47.0-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9ea5cfb04a6ab5b18e46be72b41b015975ba5980c4ddb41f1975b83e19031063", size = 55128632, upload-time = "2026-03-31T18:28:19.946Z" }, - { url = "https://files.pythonhosted.org/packages/df/f8/5e12e9ed447d65f04acf6fcf2d79cded2355640b5131a46cee4c99a5949d/llvmlite-0.47.0-cp310-cp310-win_amd64.whl", hash = "sha256:166b896a2262a2039d5fc52df5ee1659bd1ccd081183df7a2fba1b74702dd5ea", size = 38138402, upload-time = "2026-03-31T18:28:23.327Z" }, { url = "https://files.pythonhosted.org/packages/34/0b/b9d1911cfefa61399821dfb37f486d83e0f42630a8d12f7194270c417002/llvmlite-0.47.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:74090f0dcfd6f24ebbef3f21f11e38111c4d7e6919b54c4416e1e357c3446b07", size = 37232770, upload-time = "2026-03-31T18:28:26.765Z" }, { url = "https://files.pythonhosted.org/packages/46/27/5799b020e4cdfb25a7c951c06a96397c135efcdc21b78d853bbd9c814c7d/llvmlite-0.47.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:ca14f02e29134e837982497959a8e2193d6035235de1cb41a9cb2bd6da4eedbb", size = 56275177, upload-time = "2026-03-31T18:28:31.01Z" }, { url = "https://files.pythonhosted.org/packages/7e/51/48a53fedf01cb1f3f43ef200be17ebf83c8d9a04018d3783c1a226c342c2/llvmlite-0.47.0-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:12a69d4bb05f402f30477e21eeabe81911e7c251cecb192bed82cd83c9db10d8", size = 55128631, upload-time = "2026-03-31T18:28:36.046Z" }, @@ -2467,17 +3424,6 @@ version = "3.0.3" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/7e/99/7690b6d4034fffd95959cbe0c02de8deb3098cc577c67bb6a24fe5d7caa7/markupsafe-3.0.3.tar.gz", hash = "sha256:722695808f4b6457b320fdc131280796bdceb04ab50fe1795cd540799ebe1698", size = 80313, upload-time = "2025-09-27T18:37:40.426Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/e8/4b/3541d44f3937ba468b75da9eebcae497dcf67adb65caa16760b0a6807ebb/markupsafe-3.0.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2f981d352f04553a7171b8e44369f2af4055f888dfb147d55e42d29e29e74559", size = 11631, upload-time = "2025-09-27T18:36:05.558Z" }, - { url = "https://files.pythonhosted.org/packages/98/1b/fbd8eed11021cabd9226c37342fa6ca4e8a98d8188a8d9b66740494960e4/markupsafe-3.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e1c1493fb6e50ab01d20a22826e57520f1284df32f2d8601fdd90b6304601419", size = 12057, upload-time = "2025-09-27T18:36:07.165Z" }, - { url = "https://files.pythonhosted.org/packages/40/01/e560d658dc0bb8ab762670ece35281dec7b6c1b33f5fbc09ebb57a185519/markupsafe-3.0.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1ba88449deb3de88bd40044603fafffb7bc2b055d626a330323a9ed736661695", size = 22050, upload-time = "2025-09-27T18:36:08.005Z" }, - { url = "https://files.pythonhosted.org/packages/af/cd/ce6e848bbf2c32314c9b237839119c5a564a59725b53157c856e90937b7a/markupsafe-3.0.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f42d0984e947b8adf7dd6dde396e720934d12c506ce84eea8476409563607591", size = 20681, upload-time = "2025-09-27T18:36:08.881Z" }, - { url = "https://files.pythonhosted.org/packages/c9/2a/b5c12c809f1c3045c4d580b035a743d12fcde53cf685dbc44660826308da/markupsafe-3.0.3-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:c0c0b3ade1c0b13b936d7970b1d37a57acde9199dc2aecc4c336773e1d86049c", size = 20705, upload-time = "2025-09-27T18:36:10.131Z" }, - { url = "https://files.pythonhosted.org/packages/cf/e3/9427a68c82728d0a88c50f890d0fc072a1484de2f3ac1ad0bfc1a7214fd5/markupsafe-3.0.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:0303439a41979d9e74d18ff5e2dd8c43ed6c6001fd40e5bf2e43f7bd9bbc523f", size = 21524, upload-time = "2025-09-27T18:36:11.324Z" }, - { url = "https://files.pythonhosted.org/packages/bc/36/23578f29e9e582a4d0278e009b38081dbe363c5e7165113fad546918a232/markupsafe-3.0.3-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:d2ee202e79d8ed691ceebae8e0486bd9a2cd4794cec4824e1c99b6f5009502f6", size = 20282, upload-time = "2025-09-27T18:36:12.573Z" }, - { url = "https://files.pythonhosted.org/packages/56/21/dca11354e756ebd03e036bd8ad58d6d7168c80ce1fe5e75218e4945cbab7/markupsafe-3.0.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:177b5253b2834fe3678cb4a5f0059808258584c559193998be2601324fdeafb1", size = 20745, upload-time = "2025-09-27T18:36:13.504Z" }, - { url = "https://files.pythonhosted.org/packages/87/99/faba9369a7ad6e4d10b6a5fbf71fa2a188fe4a593b15f0963b73859a1bbd/markupsafe-3.0.3-cp310-cp310-win32.whl", hash = "sha256:2a15a08b17dd94c53a1da0438822d70ebcd13f8c3a95abe3a9ef9f11a94830aa", size = 14571, upload-time = "2025-09-27T18:36:14.779Z" }, - { url = "https://files.pythonhosted.org/packages/d6/25/55dc3ab959917602c96985cb1253efaa4ff42f71194bddeb61eb7278b8be/markupsafe-3.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:c4ffb7ebf07cfe8931028e3e4c85f0357459a3f9f9490886198848f4fa002ec8", size = 15056, upload-time = "2025-09-27T18:36:16.125Z" }, - { url = "https://files.pythonhosted.org/packages/d0/9e/0a02226640c255d1da0b8d12e24ac2aa6734da68bff14c05dd53b94a0fc3/markupsafe-3.0.3-cp310-cp310-win_arm64.whl", hash = "sha256:e2103a929dfa2fcaf9bb4e7c091983a49c9ac3b19c9061b6d5427dd7d14d81a1", size = 13932, upload-time = "2025-09-27T18:36:17.311Z" }, { url = "https://files.pythonhosted.org/packages/08/db/fefacb2136439fc8dd20e797950e749aa1f4997ed584c62cfb8ef7c2be0e/markupsafe-3.0.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1cc7ea17a6824959616c525620e387f6dd30fec8cb44f649e31712db02123dad", size = 11631, upload-time = "2025-09-27T18:36:18.185Z" }, { url = "https://files.pythonhosted.org/packages/e1/2e/5898933336b61975ce9dc04decbc0a7f2fee78c30353c5efba7f2d6ff27a/markupsafe-3.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4bd4cd07944443f5a265608cc6aab442e4f74dff8088b0dfc8238647b8f6ae9a", size = 12058, upload-time = "2025-09-27T18:36:19.444Z" }, { url = "https://files.pythonhosted.org/packages/1d/09/adf2df3699d87d1d8184038df46a9c80d78c0148492323f4693df54e17bb/markupsafe-3.0.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6b5420a1d9450023228968e7e6a9ce57f65d148ab56d2313fcd589eee96a7a50", size = 24287, upload-time = "2025-09-27T18:36:20.768Z" }, @@ -2559,7 +3505,7 @@ dependencies = [ { name = "jsonschema" }, { name = "pydantic" }, { name = "pydantic-settings" }, - { name = "pyjwt", extra = ["crypto"], marker = "extra == 'extra-14-granite-switch-dev' or extra == 'extra-14-granite-switch-dev-vllm20' or extra == 'extra-14-granite-switch-tutorials' or extra == 'extra-14-granite-switch-vllm' or extra == 'extra-14-granite-switch-vllm20'" }, + { name = "pyjwt", extra = ["crypto"], marker = "extra == 'extra-14-granite-switch-tutorials' or extra == 'extra-14-granite-switch-vllm' or extra == 'extra-14-granite-switch-vllm20' or extra == 'group-14-granite-switch-dev' or extra == 'group-14-granite-switch-dev-vllm20' or extra == 'group-14-granite-switch-test' or extra == 'group-14-granite-switch-vllm19' or extra == 'group-14-granite-switch-vllm20'" }, { name = "python-multipart" }, { name = "pywin32", marker = "sys_platform == 'win32'" }, { name = "sse-starlette" }, @@ -2584,64 +3530,25 @@ wheels = [ [[package]] name = "mellea" -version = "0.3.2" +version = "0.6.0" source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.11'", -] dependencies = [ - { name = "ansicolors", marker = "python_full_version < '3.11'" }, - { name = "click", version = "8.1.8", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, - { name = "fastapi", marker = "python_full_version < '3.11'" }, - { name = "granite-common", marker = "python_full_version < '3.11'" }, - { name = "huggingface-hub", marker = "python_full_version < '3.11'" }, - { name = "jinja2", marker = "python_full_version < '3.11'" }, - { name = "json5", marker = "python_full_version < '3.11'" }, - { name = "llm-sandbox", extra = ["docker"], marker = "(python_full_version < '3.11' and extra == 'extra-14-granite-switch-tutorials') or (python_full_version >= '3.11' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm') or (extra == 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra != 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20')" }, - { name = "math-verify", marker = "python_full_version < '3.11'" }, - { name = "mistletoe", marker = "python_full_version < '3.11'" }, - { name = "ollama", marker = "python_full_version < '3.11'" }, - { name = "openai", marker = "python_full_version < '3.11'" }, - { name = "pillow", marker = "python_full_version < '3.11'" }, - { name = "pydantic", marker = "python_full_version < '3.11'" }, - { name = "requests", marker = "python_full_version < '3.11'" }, - { name = "rouge-score", marker = "python_full_version < '3.11'" }, - { name = "typer", version = "0.23.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, - { name = "types-requests", marker = "python_full_version < '3.11'" }, - { name = "types-tqdm", marker = "python_full_version < '3.11'" }, - { name = "uvicorn", marker = "python_full_version < '3.11'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/ca/e9/25d87d92064b9781ef3e15d032f6f50deb2ff70b35d3c27f21ff595666ca/mellea-0.3.2.tar.gz", hash = "sha256:b73c5c1da473891e85005042a8e1ac26eae4026f448306884de3c8ba56df1965", size = 3583161, upload-time = "2026-02-26T13:43:30.979Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/55/d8/4bcf1174810518d7f9fb27ae8d77a9001bd975ef26d24f734f89df051ddc/mellea-0.3.2-py3-none-any.whl", hash = "sha256:ef9beb4b5b3f8c2099d17df592067646ecac2bc47b8f7f8b19951c3acbe37174", size = 3864719, upload-time = "2026-02-26T13:43:29.118Z" }, -] - -[[package]] -name = "mellea" -version = "0.5.0" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.13'", - "python_full_version == '3.12.*'", - "python_full_version == '3.11.*'", -] -dependencies = [ - { name = "jinja2", marker = "python_full_version >= '3.11'" }, - { name = "math-verify", marker = "python_full_version >= '3.11'" }, - { name = "mistletoe", marker = "python_full_version >= '3.11'" }, - { name = "nltk", marker = "python_full_version >= '3.11'" }, - { name = "ollama", marker = "python_full_version >= '3.11'" }, - { name = "openai", marker = "python_full_version >= '3.11'" }, - { name = "packaging", marker = "python_full_version >= '3.11'" }, - { name = "pillow", marker = "python_full_version >= '3.11'" }, - { name = "pydantic", marker = "python_full_version >= '3.11'" }, - { name = "pyyaml", marker = "python_full_version >= '3.11'" }, - { name = "requests", marker = "python_full_version >= '3.11'" }, - { name = "rouge-score", marker = "python_full_version >= '3.11'" }, + { name = "jinja2" }, + { name = "math-verify" }, + { name = "mistletoe" }, + { name = "nltk" }, + { name = "ollama" }, + { name = "openai" }, + { name = "packaging" }, + { name = "pillow" }, + { name = "pydantic" }, + { name = "pyyaml" }, + { name = "requests" }, + { name = "rouge-score" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/5f/0c/bba8f3a32c52ba28f10862e258d7aa625c030eb462f11da69cefb3f0be7f/mellea-0.5.0.tar.gz", hash = "sha256:2f2a37ac286c5f3d950857b5ec214eb37dcd8ef624883aeb09acb0a10cb1a573", size = 4209188, upload-time = "2026-05-05T20:19:10.446Z" } +sdist = { url = "https://files.pythonhosted.org/packages/4a/d5/90cad0dfc7b47bdfbe40eaad56d03845355592afd02b70e28409fd2de062/mellea-0.6.0.tar.gz", hash = "sha256:d1ef5873f28a66ee44448737ce270ac98dc50e57d0a3582fe102d598f5490ebc", size = 4316534, upload-time = "2026-05-19T20:52:13.505Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/3b/b0/04b25e4193e7c67e97090b59c053c9d4905321799b02c3783d3e04ec5acf/mellea-0.5.0-py3-none-any.whl", hash = "sha256:f450d9fe9f7207a4def17d1861fb3516366b3c5abd5e7f63b00ffd1f4681b0a0", size = 4643683, upload-time = "2026-05-05T20:19:07.956Z" }, + { url = "https://files.pythonhosted.org/packages/76/dd/2307b937f22a79ee569a8cc648560476064b13f14d23601ef715a961b912/mellea-0.6.0-py3-none-any.whl", hash = "sha256:8e9fcefc1aa571df88aa726174e8e94f13a24fc97280aafc9954d227edad8b7d", size = 4806315, upload-time = "2026-05-19T20:52:11.378Z" }, ] [[package]] @@ -2659,12 +3566,12 @@ version = "1.11.2" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "jsonschema" }, - { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and extra == 'extra-14-granite-switch-dev-vllm20') or (python_full_version >= '3.11' and extra == 'extra-14-granite-switch-tutorials') or (python_full_version >= '3.11' and extra == 'extra-14-granite-switch-vllm') or (python_full_version < '3.11' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or extra == 'extra-14-granite-switch-dev' or (extra != 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (extra != 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm')" }, - { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and python_full_version < '3.13' and extra == 'extra-14-granite-switch-dev-vllm20') or (python_full_version >= '3.11' and python_full_version < '3.13' and extra == 'extra-14-granite-switch-vllm20') or (python_full_version < '3.11' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20') or (python_full_version < '3.11' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (python_full_version < '3.11' and extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (python_full_version < '3.11' and extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm') or (python_full_version < '3.11' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (python_full_version < '3.11' and extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (python_full_version >= '3.13' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20') or (python_full_version >= '3.13' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (python_full_version >= '3.13' and extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (python_full_version >= '3.13' and extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm') or (python_full_version >= '3.13' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (python_full_version >= '3.13' and extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20')" }, - { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.13' and extra == 'extra-14-granite-switch-dev-vllm20') or (python_full_version >= '3.13' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20')" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-14-granite-switch-tutorials' or extra == 'extra-14-granite-switch-vllm' or extra == 'group-14-granite-switch-dev' or extra == 'group-14-granite-switch-test' or extra == 'group-14-granite-switch-vllm19'" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.13' and extra == 'extra-14-granite-switch-vllm20') or (python_full_version < '3.13' and extra == 'group-14-granite-switch-dev-vllm20') or (python_full_version < '3.13' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20')" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.13' and extra == 'extra-14-granite-switch-vllm20') or (python_full_version >= '3.13' and extra == 'group-14-granite-switch-dev-vllm20') or (python_full_version >= '3.13' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20')" }, { name = "pillow" }, { name = "pydantic" }, - { name = "pydantic-extra-types", extra = ["pycountry"], marker = "extra == 'extra-14-granite-switch-dev' or extra == 'extra-14-granite-switch-dev-vllm20' or extra == 'extra-14-granite-switch-tutorials' or extra == 'extra-14-granite-switch-vllm' or extra == 'extra-14-granite-switch-vllm20'" }, + { name = "pydantic-extra-types", extra = ["pycountry"], marker = "extra == 'extra-14-granite-switch-tutorials' or extra == 'extra-14-granite-switch-vllm' or extra == 'extra-14-granite-switch-vllm20' or extra == 'group-14-granite-switch-dev' or extra == 'group-14-granite-switch-dev-vllm20' or extra == 'group-14-granite-switch-test' or extra == 'group-14-granite-switch-vllm19' or extra == 'group-14-granite-switch-vllm20'" }, { name = "requests" }, { name = "tiktoken" }, { name = "typing-extensions" }, @@ -2684,16 +3591,11 @@ name = "ml-dtypes" version = "0.5.4" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and extra == 'extra-14-granite-switch-dev-vllm20') or (python_full_version < '3.11' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20')" }, - { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and python_full_version < '3.13' and extra == 'extra-14-granite-switch-dev-vllm20') or (python_full_version >= '3.11' and python_full_version < '3.13' and extra == 'extra-14-granite-switch-vllm20') or (python_full_version < '3.11' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20') or (python_full_version < '3.11' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (python_full_version < '3.11' and extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (python_full_version < '3.11' and extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm') or (python_full_version < '3.11' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (python_full_version < '3.11' and extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (python_full_version >= '3.13' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20') or (python_full_version >= '3.13' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (python_full_version >= '3.13' and extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (python_full_version >= '3.13' and extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm') or (python_full_version >= '3.13' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (python_full_version >= '3.13' and extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20')" }, - { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.13' and extra == 'extra-14-granite-switch-dev-vllm20') or (python_full_version >= '3.13' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20')" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.13' and extra == 'extra-14-granite-switch-vllm20') or (python_full_version < '3.13' and extra == 'group-14-granite-switch-dev-vllm20') or (python_full_version < '3.13' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20')" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.13' and extra == 'extra-14-granite-switch-vllm20') or (python_full_version >= '3.13' and extra == 'group-14-granite-switch-dev-vllm20') or (python_full_version >= '3.13' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/0e/4a/c27b42ed9b1c7d13d9ba8b6905dece787d6259152f2309338aed29b2447b/ml_dtypes-0.5.4.tar.gz", hash = "sha256:8ab06a50fb9bf9666dd0fe5dfb4676fa2b0ac0f31ecff72a6c3af8e22c063453", size = 692314, upload-time = "2025-11-17T22:32:31.031Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/fe/3a/c5b855752a70267ff729c349e650263adb3c206c29d28cc8ea7ace30a1d5/ml_dtypes-0.5.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:b95e97e470fe60ed493fd9ae3911d8da4ebac16bd21f87ffa2b7c588bf22ea2c", size = 679735, upload-time = "2025-11-17T22:31:31.367Z" }, - { url = "https://files.pythonhosted.org/packages/41/79/7433f30ee04bd4faa303844048f55e1eb939131c8e5195a00a96a0939b64/ml_dtypes-0.5.4-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b4b801ebe0b477be666696bda493a9be8356f1f0057a57f1e35cd26928823e5a", size = 5051883, upload-time = "2025-11-17T22:31:33.658Z" }, - { url = "https://files.pythonhosted.org/packages/10/b1/8938e8830b0ee2e167fc75a094dea766a1152bde46752cd9bfc57ee78a82/ml_dtypes-0.5.4-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:388d399a2152dd79a3f0456a952284a99ee5c93d3e2f8dfe25977511e0515270", size = 5030369, upload-time = "2025-11-17T22:31:35.595Z" }, - { url = "https://files.pythonhosted.org/packages/c7/a3/51886727bd16e2f47587997b802dd56398692ce8c6c03c2e5bb32ecafe26/ml_dtypes-0.5.4-cp310-cp310-win_amd64.whl", hash = "sha256:4ff7f3e7ca2972e7de850e7b8fcbb355304271e2933dd90814c1cb847414d6e2", size = 210738, upload-time = "2025-11-17T22:31:37.43Z" }, { url = "https://files.pythonhosted.org/packages/c6/5e/712092cfe7e5eb667b8ad9ca7c54442f21ed7ca8979745f1000e24cf8737/ml_dtypes-0.5.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:6c7ecb74c4bd71db68a6bea1edf8da8c34f3d9fe218f038814fd1d310ac76c90", size = 679734, upload-time = "2025-11-17T22:31:39.223Z" }, { url = "https://files.pythonhosted.org/packages/4f/cf/912146dfd4b5c0eea956836c01dcd2fce6c9c844b2691f5152aca196ce4f/ml_dtypes-0.5.4-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bc11d7e8c44a65115d05e2ab9989d1e045125d7be8e05a071a48bc76eb6d6040", size = 5056165, upload-time = "2025-11-17T22:31:41.071Z" }, { url = "https://files.pythonhosted.org/packages/a9/80/19189ea605017473660e43762dc853d2797984b3c7bf30ce656099add30c/ml_dtypes-0.5.4-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:19b9a53598f21e453ea2fbda8aa783c20faff8e1eeb0d7ab899309a0053f1483", size = 5034975, upload-time = "2025-11-17T22:31:42.758Z" }, @@ -2722,22 +3624,6 @@ version = "5.2.1" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/91/1a/edb23803a168f070ded7a3014c6d706f63b90c84ccc024f89d794a3b7a6d/mmh3-5.2.1.tar.gz", hash = "sha256:bbea5b775f0ac84945191fb83f845a6fd9a21a03ea7f2e187defac7e401616ad", size = 33775, upload-time = "2026-03-05T15:55:57.716Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/a6/bb/88ee54afa5644b0f35ab5b435f208394feb963e5bb47c4e404deb625ffa4/mmh3-5.2.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:5d87a3584093e1a89987e3d36d82c98d9621b2cb944e22a420aa1401e096758f", size = 56080, upload-time = "2026-03-05T15:53:40.452Z" }, - { url = "https://files.pythonhosted.org/packages/cc/bf/5404c2fd6ac84819e8ff1b7e34437b37cf55a2b11318894909e7bb88de3f/mmh3-5.2.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:30e4d2084df019880d55f6f7bea35328d9b464ebee090baa372c096dc77556fb", size = 40462, upload-time = "2026-03-05T15:53:41.751Z" }, - { url = "https://files.pythonhosted.org/packages/de/0b/52bffad0b52ae4ea53e222b594bd38c08ecac1fc410323220a7202e43da5/mmh3-5.2.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0bbc17250b10d3466875a40a52520a6bac3c02334ca709207648abd3c223ed5c", size = 40077, upload-time = "2026-03-05T15:53:42.753Z" }, - { url = "https://files.pythonhosted.org/packages/a0/9e/326c93d425b9fa4cbcdc71bc32aaba520db37577d632a24d25d927594eca/mmh3-5.2.1-cp310-cp310-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:76219cd1eefb9bf4af7856e3ae563d15158efa145c0aab01e9933051a1954045", size = 95302, upload-time = "2026-03-05T15:53:43.867Z" }, - { url = "https://files.pythonhosted.org/packages/c6/b1/e20d5f0d19c4c0f3df213fa7dcfa0942c4fb127d38e11f398ae8ddf6cccc/mmh3-5.2.1-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:fb9d44c25244e11c8be3f12c938ca8ba8404620ef8092245d2093c6ab3df260f", size = 101174, upload-time = "2026-03-05T15:53:45.194Z" }, - { url = "https://files.pythonhosted.org/packages/7f/4a/1a9bb3e33c18b1e1cee2c249a3053c4d4d9c93ecb30738f39a62249a7e86/mmh3-5.2.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2d5d542bf2abd0fd0361e8017d03f7cb5786214ceb4a40eef1539d6585d93386", size = 103979, upload-time = "2026-03-05T15:53:46.334Z" }, - { url = "https://files.pythonhosted.org/packages/ff/8d/dab9ee7545429e7acdd38d23d0104471d31de09a0c695f1b751e0ff34532/mmh3-5.2.1-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:08043f7cb1fb9467c3fbbbaea7896986e7fbc81f4d3fd9289a73d9110ab6207a", size = 110898, upload-time = "2026-03-05T15:53:47.443Z" }, - { url = "https://files.pythonhosted.org/packages/72/08/408f11af7fe9e76b883142bb06536007cc7f237be2a5e9ad4e837716e627/mmh3-5.2.1-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:add7ac388d1e0bf57259afbcf9ed05621a3bf11ce5ee337e7536f1e1aaf056b0", size = 118308, upload-time = "2026-03-05T15:53:49.1Z" }, - { url = "https://files.pythonhosted.org/packages/86/2d/0551be7fe0000736d9ad12ffa1f130d7a0c17b49193d6dc41c82bd9404c6/mmh3-5.2.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:41105377f6282e8297f182e393a79cfffd521dde37ace52b106373bdcd9ca5cb", size = 101671, upload-time = "2026-03-05T15:53:50.317Z" }, - { url = "https://files.pythonhosted.org/packages/44/17/6e4f80c4e6ad590139fa2017c3aeca54e7cc9ef68e08aa142a0c90f40a97/mmh3-5.2.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:3cb61db880ec11e984348227b333259994c2c85caa775eb7875decb3768db890", size = 96682, upload-time = "2026-03-05T15:53:51.48Z" }, - { url = "https://files.pythonhosted.org/packages/ad/a7/b82fccd38c1fa815de72e94ebe9874562964a10e21e6c1bc3b01d3f15a0e/mmh3-5.2.1-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:e8b5378de2b139c3a830f0209c1e91f7705919a4b3e563a10955104f5097a70a", size = 110287, upload-time = "2026-03-05T15:53:52.68Z" }, - { url = "https://files.pythonhosted.org/packages/a8/a1/2644069031c8cec0be46f0346f568a53f42fddd843f03cc890306699c1e2/mmh3-5.2.1-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:e904f2417f0d6f6d514f3f8b836416c360f306ddaee1f84de8eef1e722d212e5", size = 111899, upload-time = "2026-03-05T15:53:53.791Z" }, - { url = "https://files.pythonhosted.org/packages/51/7b/6614f3eb8fb33f931fa7616c6d477247e48ec6c5082b02eeeee998cffa94/mmh3-5.2.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:f1fbb0a99125b1287c6d9747f937dc66621426836d1a2d50d05aecfc81911b57", size = 100078, upload-time = "2026-03-05T15:53:55.234Z" }, - { url = "https://files.pythonhosted.org/packages/27/9a/dd4d5a5fb893e64f71b42b69ecae97dd78db35075412488b24036bc5599c/mmh3-5.2.1-cp310-cp310-win32.whl", hash = "sha256:b4cce60d0223074803c9dbe0721ad3fa51dafe7d462fee4b656a1aa01ee07518", size = 40756, upload-time = "2026-03-05T15:53:56.319Z" }, - { url = "https://files.pythonhosted.org/packages/c9/34/0b25889450f8aeffcec840aa73251e853f059c1b72ed1d1c027b956f95f5/mmh3-5.2.1-cp310-cp310-win_amd64.whl", hash = "sha256:6f01f044112d43a20be2f13a11683666d87151542ad627fe41a18b9791d2802f", size = 41519, upload-time = "2026-03-05T15:53:57.41Z" }, - { url = "https://files.pythonhosted.org/packages/fd/31/8fd42e3c526d0bcb1db7f569c0de6729e180860a0495e387a53af33c2043/mmh3-5.2.1-cp310-cp310-win_arm64.whl", hash = "sha256:7501e9be34cb21e72fcfe672aafd0eee65c16ba2afa9dcb5500a587d3a0580f0", size = 39285, upload-time = "2026-03-05T15:53:58.697Z" }, { url = "https://files.pythonhosted.org/packages/65/d7/3312a59df3c1cdd783f4cf0c4ee8e9decff9c5466937182e4cc7dbbfe6c5/mmh3-5.2.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:dae0f0bd7d30c0ad61b9a504e8e272cb8391eed3f1587edf933f4f6b33437450", size = 56082, upload-time = "2026-03-05T15:53:59.702Z" }, { url = "https://files.pythonhosted.org/packages/61/96/6f617baa098ca0d2989bfec6d28b5719532cd8d8848782662f5b755f657f/mmh3-5.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:9aeaf53eaa075dd63e81512522fd180097312fb2c9f476333309184285c49ce0", size = 40458, upload-time = "2026-03-05T15:54:01.548Z" }, { url = "https://files.pythonhosted.org/packages/c1/b4/9cd284bd6062d711e13d26c04d4778ab3f690c1c38a4563e3c767ec8802e/mmh3-5.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:0634581290e6714c068f4aa24020acf7880927d1f0084fa753d9799ae9610082", size = 40079, upload-time = "2026-03-05T15:54:02.743Z" }, @@ -2820,20 +3706,53 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/43/e3/7d92a15f894aa0c9c4b49b8ee9ac9850d6e63b03c9c32c0367a13ae62209/mpmath-1.3.0-py3-none-any.whl", hash = "sha256:a0b2b9fe80bbcd81a6647ff13108738cfb482d481d826cc0e02f5b35e5c88d2c", size = 536198, upload-time = "2023-03-07T16:47:09.197Z" }, ] +[[package]] +name = "msgpack" +version = "1.2.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/92/23/6139781ca7aadf656fa8e384fa84693ffb13f299e6931b6526427fe5e297/msgpack-1.2.0.tar.gz", hash = "sha256:8e17af38197bf58e7e819041678f6178f4491493f5b8c8580414f40f7c2c3c41", size = 183017, upload-time = "2026-06-11T04:16:10.775Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ee/23/35de3182a647fcc84ab304160169edfa5dac7bbd8913fbed0a505ddc0d55/msgpack-1.2.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ec35cd3f127f50806aa10c3f74bf27b749f13ddf1d2217964ada8f38042d1653", size = 82368, upload-time = "2026-06-11T04:14:53.57Z" }, + { url = "https://files.pythonhosted.org/packages/aa/79/8d9bfdab933b1c7a02aba9518605a81aa30d38e9efd4915ec1a6b2d55778/msgpack-1.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:317eb298297121bfad9173d748124a04a36af27b6ac39c2bbc1db1ce57608dcf", size = 82095, upload-time = "2026-06-11T04:14:54.784Z" }, + { url = "https://files.pythonhosted.org/packages/d2/e1/b5accbc1354edbcee107fb35ec247db0547e91c3f90e4fabdeaee500a5a6/msgpack-1.2.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:50fe6434de89073273026dd032a62e8b63f8857a261d7a2df5b07c9e72f3a8f7", size = 413818, upload-time = "2026-06-11T04:14:56.1Z" }, + { url = "https://files.pythonhosted.org/packages/82/31/1141cbbf7118d525834f20dcd614d1b85f1f2ffd33bc2a5ce710e6dd2516/msgpack-1.2.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:106c6d333ff3d4eda075b7d4b9695d1752c5bcc635e40d0dbaf4e276c9ed80e1", size = 423790, upload-time = "2026-06-11T04:14:57.509Z" }, + { url = "https://files.pythonhosted.org/packages/04/e7/9582f2bd4d7546139fe297740de49bd1f7ef2d195eb0bb9fa5efeee88158/msgpack-1.2.0-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:67055a611e871cb1bd0acb732f2e9f64ca8155ca0bba1d0a5bb362e7209e5541", size = 387521, upload-time = "2026-06-11T04:14:59.08Z" }, + { url = "https://files.pythonhosted.org/packages/7d/12/5aadd08ff068bfd42e2ac0be6a20aa9819965df8622e87c1f0c6119c1c22/msgpack-1.2.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:ceec7f8e633d5a4b4a32b0416bef90ee3cd1017ea36247f705e523072e576119", size = 406324, upload-time = "2026-06-11T04:15:00.686Z" }, + { url = "https://files.pythonhosted.org/packages/39/ee/3041564f0cc4c2fe7c53315aec0edf3d84807fc9b9ea714e6ac07dbdb1db/msgpack-1.2.0-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:7ec5851160a3c2c0f77d68ddec620318cd8e7d88d94f9c058190e8ce0dfa1d31", size = 384242, upload-time = "2026-06-11T04:15:02.121Z" }, + { url = "https://files.pythonhosted.org/packages/5d/d4/de94b3dbc266229f4c2ce84485eeb221220351b7f1931029e875995bb232/msgpack-1.2.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:dd7140f7b09dbe1984a0dff3189375d840247e3e4cf4ac45c5a499b3b599c8d2", size = 420392, upload-time = "2026-06-11T04:15:03.692Z" }, + { url = "https://files.pythonhosted.org/packages/f7/5d/c4a3fde69a292eecb202caaa87c29df7728644a65118614b821bcaddc05a/msgpack-1.2.0-cp311-cp311-win32.whl", hash = "sha256:cbfd54018d386da0951c7a2be13de0f58559d251313e613b2155e52ed1cbd8f1", size = 63976, upload-time = "2026-06-11T04:15:05.355Z" }, + { url = "https://files.pythonhosted.org/packages/18/fa/df47f83115375e7717c985265a30f3ba096c5331518e28fb647b55c46d31/msgpack-1.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:653373c4614c31463ba486a67776e4bb396af289921bd5353e209534b71467fa", size = 70273, upload-time = "2026-06-11T04:15:06.529Z" }, + { url = "https://files.pythonhosted.org/packages/54/d1/ffd02e54c064aa73b6b53aa08171f92dc406727077ff275d7050c6aca28a/msgpack-1.2.0-cp311-cp311-win_arm64.whl", hash = "sha256:7a260aea1e5e7d6c7f1d9284c7360d29021627b61dc4dd7df144b81210810537", size = 64783, upload-time = "2026-06-11T04:15:07.677Z" }, + { url = "https://files.pythonhosted.org/packages/44/07/dcb13f37e670257c8d0e944f116c799c34ac6968ecb48c83619f7e91d8b5/msgpack-1.2.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:e2d6047ccd11a12c96a69f2bfe026471abef67334c3d0494a93e5310e45140a2", size = 82888, upload-time = "2026-06-11T04:15:08.992Z" }, + { url = "https://files.pythonhosted.org/packages/84/5f/6643b2a6a36ca4bc73c7674831be1d4d581cceecc7eb019dba1915951739/msgpack-1.2.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0347e3ac0dfee99086d3b68fe959da3f5f657c0019ddbaeaaa259a85f8603422", size = 82223, upload-time = "2026-06-11T04:15:10.182Z" }, + { url = "https://files.pythonhosted.org/packages/2c/c8/9e1668b9897358e5ab39a18142e38be3cf15807e643757782da9f4a53cb3/msgpack-1.2.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:25552ff1f2ff3dc8333e27eabb94f702da5929ed0e07969688194a3e9f12e151", size = 409700, upload-time = "2026-06-11T04:15:11.441Z" }, + { url = "https://files.pythonhosted.org/packages/38/ed/b7728573156d70b6b094233b0f38d876fc37340826cf852347ec2c7ca8ca/msgpack-1.2.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a0d94420d9d52c56568159a69200af7e45eadb29615fa9d09fada140de1c38c7", size = 420090, upload-time = "2026-06-11T04:15:12.868Z" }, + { url = "https://files.pythonhosted.org/packages/3f/f7/5ea755a89868c04f9cdf6d96d2d99da4b3d198af10e76a6082dd0fceccc0/msgpack-1.2.0-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:d16e1f2db4a9eebc07b7cc91898d71e710f2eed8358711a605fee802caff8923", size = 378538, upload-time = "2026-06-11T04:15:14.511Z" }, + { url = "https://files.pythonhosted.org/packages/80/2d/126e59332a439c94ffd682c38ca0102b23480e2784b3dac48d8959b0bbac/msgpack-1.2.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e9cb2e700e85f1e27bbb5c9de6cc1c9a4bc5ac64d5404bdcbcb37a0dc7a947a3", size = 399468, upload-time = "2026-06-11T04:15:16.133Z" }, + { url = "https://files.pythonhosted.org/packages/da/f9/7abcef683a0ad2e5ab3a4940344aad9f20cdf1f42057ecb0982cf55085d6/msgpack-1.2.0-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:717d0b166dd176a5f786aeafff081f6439680acf5af193eb63e6266c12b04d3d", size = 374212, upload-time = "2026-06-11T04:15:17.536Z" }, + { url = "https://files.pythonhosted.org/packages/27/23/2d62cf0e971678e96f8a3cfa9bd77fb719ddb98da73790f63c53fd847ad8/msgpack-1.2.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e87c7a21654d18111eb1a89bd5c42baba42e61887365d9e89585e112b4203f9e", size = 414361, upload-time = "2026-06-11T04:15:18.99Z" }, + { url = "https://files.pythonhosted.org/packages/32/fb/f5c153f614037aaf802d291a4653ba1bb731f56feacba886f7c21c109e56/msgpack-1.2.0-cp312-cp312-win32.whl", hash = "sha256:967e0c891f5f23ab65762f2e5dc95922759c79f1ef99ef4c7e1fdd863e0d0af9", size = 64389, upload-time = "2026-06-11T04:15:20.237Z" }, + { url = "https://files.pythonhosted.org/packages/90/af/8aafce6e5544b43b84cb670aca40c8bea7eb5ae8f42bfcbdc7098739987a/msgpack-1.2.0-cp312-cp312-win_amd64.whl", hash = "sha256:6c23e33cee28dcffa112ae205661da4636fd7b06bd9ad1559a890623b92d060b", size = 71185, upload-time = "2026-06-11T04:15:21.51Z" }, + { url = "https://files.pythonhosted.org/packages/ba/08/9cc94be1fc1fe3d1379d439326259aef0344274f64623a8138feb54dff68/msgpack-1.2.0-cp312-cp312-win_arm64.whl", hash = "sha256:6eeb771571f63f68045433b1a35c0256b946f31ed62f006997e40b8ad8b735af", size = 64481, upload-time = "2026-06-11T04:15:22.639Z" }, + { url = "https://files.pythonhosted.org/packages/7d/26/2902c6946ab5c8fe1e46e40842dfc32b8824464ad5cd4725364fd83f7a58/msgpack-1.2.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:3a1d30df1f302f2b7a7404afbac2ab76d510036c34cf34dffb01f704a7288e45", size = 82621, upload-time = "2026-06-11T04:15:23.844Z" }, + { url = "https://files.pythonhosted.org/packages/c9/59/7e6b812629d2f919e586041bffc130e1af32079f71bb20699eed54ed6d92/msgpack-1.2.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:581e317112260d8ca488d490cad9290a5682276f309c41c7de237a85ed8799c8", size = 81866, upload-time = "2026-06-11T04:15:25.032Z" }, + { url = "https://files.pythonhosted.org/packages/31/13/8c291196e60aafdbae38f482205d79432297749ac5d412fe638154fb6f1d/msgpack-1.2.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c6827d12eacc16873eba62408a1b7bbe8ecfb4a8f7ed78a631ae9bae6ad43cf2", size = 405618, upload-time = "2026-06-11T04:15:26.235Z" }, + { url = "https://files.pythonhosted.org/packages/fb/63/68f5d0ea81e167db5f59ddb94dc6f837667062113feff1c73fabf8907061/msgpack-1.2.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a186027e4279efa4c8bf06ce30605498d7d0d3af0fba0b9799dce85a3fd4a93c", size = 416468, upload-time = "2026-06-11T04:15:27.732Z" }, + { url = "https://files.pythonhosted.org/packages/73/58/567dddf5c5a2790f673bcd7d80c83466d68e5ee9a9674ebca3db8101c0c8/msgpack-1.2.0-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:a96142c14a11cf1a509e8b9aaf72858a3b742b7613e095ce646913e88ce7bd99", size = 374464, upload-time = "2026-06-11T04:15:29.286Z" }, + { url = "https://files.pythonhosted.org/packages/0d/30/0c2342fc9092e4498045f5f60bca6ccbe4f4d87789778c2300e6fd6efe82/msgpack-1.2.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:50c220579b68a6085b95408b2eaa486b259520f55d8e363ddc9b5d7ba5a6ac6d", size = 395879, upload-time = "2026-06-11T04:15:30.973Z" }, + { url = "https://files.pythonhosted.org/packages/b9/11/9565b29b58ce3c33e177b490478b7aaeb8f726ecaaeda26d815893c1db5a/msgpack-1.2.0-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:4dcb9d12ab100ecacdfaaf37a3d72fe8392eacc7054afc1916b12d1b747c8446", size = 371749, upload-time = "2026-06-11T04:15:32.418Z" }, + { url = "https://files.pythonhosted.org/packages/f2/da/7bade19d60b73e2ef73fb76aaf4504c112a70cb760951b7202a0c64b5111/msgpack-1.2.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a804727188ab0ebb237fadb303b743f04925a69d8c3247292d1e33e679767c15", size = 410416, upload-time = "2026-06-11T04:15:34.053Z" }, + { url = "https://files.pythonhosted.org/packages/6d/14/c0c619571c02432208a5977a8dbdd3fc65fe1369f8226ca4b6d08cca87d8/msgpack-1.2.0-cp313-cp313-win32.whl", hash = "sha256:1a1ac6ae1fe23298f79380e7b144c8a454e5d05616b0096584f353ba2d750114", size = 64357, upload-time = "2026-06-11T04:15:35.535Z" }, + { url = "https://files.pythonhosted.org/packages/50/a5/de06718460909aa965737fec4cfe8a15dedc6544a8c55feeb6956fa0d6e3/msgpack-1.2.0-cp313-cp313-win_amd64.whl", hash = "sha256:1c3c80949d79578f9dc85fd9fb91edfe6694e8a729cd5744634d59d8455fdde3", size = 71057, upload-time = "2026-06-11T04:15:36.83Z" }, + { url = "https://files.pythonhosted.org/packages/c7/52/73446b0141c94a856e22b787c56709c0815fc34f185326577e15b26d8cfe/msgpack-1.2.0-cp313-cp313-win_arm64.whl", hash = "sha256:fcf8f76fa587c2395fd0057c7232dbf071241f9ad280b235adb7ab585289989e", size = 64490, upload-time = "2026-06-11T04:15:38.001Z" }, +] + [[package]] name = "msgspec" version = "0.21.1" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/e3/60/f79b9b013a16fa3a58350c9295ddc6789f2e335f36ea61ed10a21b215364/msgspec-0.21.1.tar.gz", hash = "sha256:2313508e394b0d208f8f56892ca9b2799e2561329de9763b19619595a6c0f72c", size = 319193, upload-time = "2026-04-12T21:44:50.394Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/96/38/d591d9f66d43d897ecbd249f2833665823d19c8b043f16619bc8343e23df/msgspec-0.21.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:72d9cd03241b8b2edb2e12dcc66c500fa480d8cbd71a8bac105809d468882064", size = 195172, upload-time = "2026-04-12T21:43:45.062Z" }, - { url = "https://files.pythonhosted.org/packages/69/1a/6899188b5982ec1324e0c629b7801eed2db987f6634fab58abd9fc82d317/msgspec-0.21.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ed2ab278200e743a1d2610a4e0c8fc74f6cecb8548544cdec43f927bd9265238", size = 188316, upload-time = "2026-04-12T21:43:46.641Z" }, - { url = "https://files.pythonhosted.org/packages/9e/95/7e591b4fa11fdbbf9891164473c23420a8c781ef553295abe416bf335f42/msgspec-0.21.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:dd677e3001fdfed9186de72eab434da2976303cd5eb9550921d3d0c3e3e168ce", size = 216565, upload-time = "2026-04-12T21:43:48.081Z" }, - { url = "https://files.pythonhosted.org/packages/19/86/714feeaf3b84cf2027235681725593840153dedd2868578f9f2715e296bb/msgspec-0.21.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f667b90b37fad734a91671abd68e0d7f4d066862771b87e91c53996dcb7a9027", size = 222689, upload-time = "2026-04-12T21:43:49.385Z" }, - { url = "https://files.pythonhosted.org/packages/7d/b9/4384243e814f2579e5205e17d170b9c1a30121afd1393298d904817a7fa7/msgspec-0.21.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:49880fd20fdbcfe1b793f07dd83f12572bab679c9800352c8b2240289aa46a06", size = 222343, upload-time = "2026-04-12T21:43:50.612Z" }, - { url = "https://files.pythonhosted.org/packages/04/01/4b227d9c4057346271043632bad41979cf8c3dca372e41bb1f7d546395b2/msgspec-0.21.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:ae0162e22849a5e91eaad907766525107523b0daea3df267a9fcb5ba4e0936ae", size = 225607, upload-time = "2026-04-12T21:43:52.129Z" }, - { url = "https://files.pythonhosted.org/packages/c1/ce/27021d1c3e5da837743092a7b7a5e8818397e1f4c05ee8b068bd7d1fd78a/msgspec-0.21.1-cp310-cp310-win_amd64.whl", hash = "sha256:f041a2279f31e3a53319005e4d60ba77c085cfcbe394cdc7ce803c2d01fe9449", size = 188392, upload-time = "2026-04-12T21:43:53.384Z" }, - { url = "https://files.pythonhosted.org/packages/80/2b/daf7a8d6d7cf00e0dcd0439178b284ade701234abdcadf3385601da04fbd/msgspec-0.21.1-cp310-cp310-win_arm64.whl", hash = "sha256:1bf17cbd7b28a5dffc7e764c654eed8ccde5e0f1de7970628608304640d4ce4e", size = 174191, upload-time = "2026-04-12T21:43:54.6Z" }, { url = "https://files.pythonhosted.org/packages/ba/7f/bbc4e74cd33d316b75541149e4d35b163b63bce066530ae185a2ec3b5bfc/msgspec-0.21.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b504b6e7f7a22a24b27232b73034421692147865162daaec9f3bf62439007c87", size = 193131, upload-time = "2026-04-12T21:43:56.094Z" }, { url = "https://files.pythonhosted.org/packages/c1/60/504886af1aaf854112663b842d5eea9a15d9588f9bf7d0d2df736424b84d/msgspec-0.21.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4692b7c1609155708c4418f88e92f63c13fdf08aa095c84bae82bad75b53389b", size = 186597, upload-time = "2026-04-12T21:43:57.242Z" }, { url = "https://files.pythonhosted.org/packages/fa/54/d24ddeaa65b5278c9e67f48ce3c17a9831e8f3722f3c8322ee120aca22ef/msgspec-0.21.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d3124010b3815451494c85ff345e693cb9fe5889cfcbbef39ed8622e0e72319c", size = 215158, upload-time = "2026-04-12T21:43:58.442Z" }, @@ -2864,29 +3783,8 @@ wheels = [ name = "multidict" version = "6.7.1" source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "typing-extensions", marker = "python_full_version < '3.11'" }, -] sdist = { url = "https://files.pythonhosted.org/packages/1a/c2/c2d94cbe6ac1753f3fc980da97b3d930efe1da3af3c9f5125354436c073d/multidict-6.7.1.tar.gz", hash = "sha256:ec6652a1bee61c53a3e5776b6049172c53b6aaba34f18c9ad04f82712bac623d", size = 102010, upload-time = "2026-01-26T02:46:45.979Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/84/0b/19348d4c98980c4851d2f943f8ebafdece2ae7ef737adcfa5994ce8e5f10/multidict-6.7.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:c93c3db7ea657dd4637d57e74ab73de31bccefe144d3d4ce370052035bc85fb5", size = 77176, upload-time = "2026-01-26T02:42:59.784Z" }, - { url = "https://files.pythonhosted.org/packages/ef/04/9de3f8077852e3d438215c81e9b691244532d2e05b4270e89ce67b7d103c/multidict-6.7.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:974e72a2474600827abaeda71af0c53d9ebbc3c2eb7da37b37d7829ae31232d8", size = 44996, upload-time = "2026-01-26T02:43:01.674Z" }, - { url = "https://files.pythonhosted.org/packages/31/5c/08c7f7fe311f32e83f7621cd3f99d805f45519cd06fafb247628b861da7d/multidict-6.7.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:cdea2e7b2456cfb6694fb113066fd0ec7ea4d67e3a35e1f4cbeea0b448bf5872", size = 44631, upload-time = "2026-01-26T02:43:03.169Z" }, - { url = "https://files.pythonhosted.org/packages/b7/7f/0e3b1390ae772f27501199996b94b52ceeb64fe6f9120a32c6c3f6b781be/multidict-6.7.1-cp310-cp310-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:17207077e29342fdc2c9a82e4b306f1127bf1ea91f8b71e02d4798a70bb99991", size = 242561, upload-time = "2026-01-26T02:43:04.733Z" }, - { url = "https://files.pythonhosted.org/packages/dd/f4/8719f4f167586af317b69dd3e90f913416c91ca610cac79a45c53f590312/multidict-6.7.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d4f49cb5661344764e4c7c7973e92a47a59b8fc19b6523649ec9dc4960e58a03", size = 242223, upload-time = "2026-01-26T02:43:06.695Z" }, - { url = "https://files.pythonhosted.org/packages/47/ab/7c36164cce64a6ad19c6d9a85377b7178ecf3b89f8fd589c73381a5eedfd/multidict-6.7.1-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:a9fc4caa29e2e6ae408d1c450ac8bf19892c5fca83ee634ecd88a53332c59981", size = 222322, upload-time = "2026-01-26T02:43:08.472Z" }, - { url = "https://files.pythonhosted.org/packages/f5/79/a25add6fb38035b5337bc5734f296d9afc99163403bbcf56d4170f97eb62/multidict-6.7.1-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c5f0c21549ab432b57dcc82130f388d84ad8179824cc3f223d5e7cfbfd4143f6", size = 254005, upload-time = "2026-01-26T02:43:10.127Z" }, - { url = "https://files.pythonhosted.org/packages/4a/7b/64a87cf98e12f756fc8bd444b001232ffff2be37288f018ad0d3f0aae931/multidict-6.7.1-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:7dfb78d966b2c906ae1d28ccf6e6712a3cd04407ee5088cd276fe8cb42186190", size = 251173, upload-time = "2026-01-26T02:43:11.731Z" }, - { url = "https://files.pythonhosted.org/packages/4b/ac/b605473de2bb404e742f2cc3583d12aedb2352a70e49ae8fce455b50c5aa/multidict-6.7.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9b0d9b91d1aa44db9c1f1ecd0d9d2ae610b2f4f856448664e01a3b35899f3f92", size = 243273, upload-time = "2026-01-26T02:43:13.063Z" }, - { url = "https://files.pythonhosted.org/packages/03/65/11492d6a0e259783720f3bc1d9ea55579a76f1407e31ed44045c99542004/multidict-6.7.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:dd96c01a9dcd4889dcfcf9eb5544ca0c77603f239e3ffab0524ec17aea9a93ee", size = 238956, upload-time = "2026-01-26T02:43:14.843Z" }, - { url = "https://files.pythonhosted.org/packages/5f/a7/7ee591302af64e7c196fb63fe856c788993c1372df765102bd0448e7e165/multidict-6.7.1-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:067343c68cd6612d375710f895337b3a98a033c94f14b9a99eff902f205424e2", size = 233477, upload-time = "2026-01-26T02:43:16.025Z" }, - { url = "https://files.pythonhosted.org/packages/9c/99/c109962d58756c35fd9992fed7f2355303846ea2ff054bb5f5e9d6b888de/multidict-6.7.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:5884a04f4ff56c6120f6ccf703bdeb8b5079d808ba604d4d53aec0d55dc33568", size = 243615, upload-time = "2026-01-26T02:43:17.84Z" }, - { url = "https://files.pythonhosted.org/packages/d5/5f/1973e7c771c86e93dcfe1c9cc55a5481b610f6614acfc28c0d326fe6bfad/multidict-6.7.1-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:8affcf1c98b82bc901702eb73b6947a1bfa170823c153fe8a47b5f5f02e48e40", size = 249930, upload-time = "2026-01-26T02:43:19.06Z" }, - { url = "https://files.pythonhosted.org/packages/5d/a5/f170fc2268c3243853580203378cd522446b2df632061e0a5409817854c7/multidict-6.7.1-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:0d17522c37d03e85c8098ec8431636309b2682cf12e58f4dbc76121fb50e4962", size = 243807, upload-time = "2026-01-26T02:43:20.286Z" }, - { url = "https://files.pythonhosted.org/packages/de/01/73856fab6d125e5bc652c3986b90e8699a95e84b48d72f39ade6c0e74a8c/multidict-6.7.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:24c0cf81544ca5e17cfcb6e482e7a82cd475925242b308b890c9452a074d4505", size = 239103, upload-time = "2026-01-26T02:43:21.508Z" }, - { url = "https://files.pythonhosted.org/packages/e7/46/f1220bd9944d8aa40d8ccff100eeeee19b505b857b6f603d6078cb5315b0/multidict-6.7.1-cp310-cp310-win32.whl", hash = "sha256:d82dd730a95e6643802f4454b8fdecdf08667881a9c5670db85bc5a56693f122", size = 41416, upload-time = "2026-01-26T02:43:22.703Z" }, - { url = "https://files.pythonhosted.org/packages/68/00/9b38e272a770303692fc406c36e1a4c740f401522d5787691eb38a8925a8/multidict-6.7.1-cp310-cp310-win_amd64.whl", hash = "sha256:cf37cbe5ced48d417ba045aca1b21bafca67489452debcde94778a576666a1df", size = 46022, upload-time = "2026-01-26T02:43:23.77Z" }, - { url = "https://files.pythonhosted.org/packages/64/65/d8d42490c02ee07b6bbe00f7190d70bb4738b3cce7629aaf9f213ef730dd/multidict-6.7.1-cp310-cp310-win_arm64.whl", hash = "sha256:59bc83d3f66b41dac1e7460aac1d196edc70c9ba3094965c467715a70ecb46db", size = 43238, upload-time = "2026-01-26T02:43:24.882Z" }, { url = "https://files.pythonhosted.org/packages/ce/f1/a90635c4f88fb913fbf4ce660b83b7445b7a02615bda034b2f8eb38fd597/multidict-6.7.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:7ff981b266af91d7b4b3793ca3382e53229088d193a85dfad6f5f4c27fc73e5d", size = 76626, upload-time = "2026-01-26T02:43:26.485Z" }, { url = "https://files.pythonhosted.org/packages/a6/9b/267e64eaf6fc637a15b35f5de31a566634a2740f97d8d094a69d34f524a4/multidict-6.7.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:844c5bca0b5444adb44a623fb0a1310c2f4cd41f402126bb269cd44c9b3f3e1e", size = 44706, upload-time = "2026-01-26T02:43:27.607Z" }, { url = "https://files.pythonhosted.org/packages/dd/a4/d45caf2b97b035c57267791ecfaafbd59c68212004b3842830954bb4b02e/multidict-6.7.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f2a0a924d4c2e9afcd7ec64f9de35fcd96915149b2216e1cb2c10a56df483855", size = 44356, upload-time = "2026-01-26T02:43:28.661Z" }, @@ -2963,76 +3861,37 @@ wheels = [ ] [[package]] -name = "networkx" -version = "3.4.2" +name = "multiprocess" +version = "0.70.19" source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.11' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20'", - "python_full_version < '3.11' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20'", - "python_full_version < '3.11' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20'", - "python_full_version < '3.11' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20'", - "python_full_version < '3.11' and extra == 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version < '3.11' and extra == 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version < '3.11' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version < '3.11' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version < '3.11' and extra == 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version < '3.11' and extra == 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version < '3.11' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version < '3.11' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version < '3.11' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version < '3.11' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", +dependencies = [ + { name = "dill" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/fd/1d/06475e1cd5264c0b870ea2cc6fdb3e37177c1e565c43f56ff17a10e3937f/networkx-3.4.2.tar.gz", hash = "sha256:307c3669428c5362aab27c8a1260aa8f47c4e91d3891f48be0141738d8d053e1", size = 2151368, upload-time = "2024-10-21T12:39:38.695Z" } +sdist = { url = "https://files.pythonhosted.org/packages/a2/f2/e783ac7f2aeeed14e9e12801f22529cc7e6b7ab80928d6dcce4e9f00922d/multiprocess-0.70.19.tar.gz", hash = "sha256:952021e0e6c55a4a9fe4cd787895b86e239a40e76802a789d6305398d3975897", size = 2079989, upload-time = "2026-01-19T06:47:39.744Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/b9/54/dd730b32ea14ea797530a4479b2ed46a6fb250f682a9cfb997e968bf0261/networkx-3.4.2-py3-none-any.whl", hash = "sha256:df5d4365b724cf81b8c6a7312509d0c22386097011ad1abe274afd5e9d3bbc5f", size = 1723263, upload-time = "2024-10-21T12:39:36.247Z" }, + { url = "https://files.pythonhosted.org/packages/7e/aa/714635c727dbfc251139226fa4eaf1b07f00dc12d9cd2eb25f931adaf873/multiprocess-0.70.19-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:1bbf1b69af1cf64cd05f65337d9215b88079ec819cd0ea7bac4dab84e162efe7", size = 144743, upload-time = "2026-01-19T06:47:24.562Z" }, + { url = "https://files.pythonhosted.org/packages/0f/e1/155f6abf5e6b5d9cef29b6d0167c180846157a4aca9b9bee1a217f67c959/multiprocess-0.70.19-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:5be9ec7f0c1c49a4f4a6fd20d5dda4aeabc2d39a50f4ad53720f1cd02b3a7c2e", size = 144738, upload-time = "2026-01-19T06:47:26.636Z" }, + { url = "https://files.pythonhosted.org/packages/af/cb/f421c2869d75750a4f32301cc20c4b63fab6376e9a75c8e5e655bdeb3d9b/multiprocess-0.70.19-pp311-pypy311_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:1c3dce098845a0db43b32a0b76a228ca059a668071cfeaa0f40c36c0b1585d45", size = 144741, upload-time = "2026-01-19T06:47:27.985Z" }, + { url = "https://files.pythonhosted.org/packages/e3/45/8004d1e6b9185c1a444d6b55ac5682acf9d98035e54386d967366035a03a/multiprocess-0.70.19-py310-none-any.whl", hash = "sha256:97404393419dcb2a8385910864eedf47a3cadf82c66345b44f036420eb0b5d87", size = 134948, upload-time = "2026-01-19T06:47:32.325Z" }, + { url = "https://files.pythonhosted.org/packages/86/c2/dec9722dc3474c164a0b6bcd9a7ed7da542c98af8cabce05374abab35edd/multiprocess-0.70.19-py311-none-any.whl", hash = "sha256:928851ae7973aea4ce0eaf330bbdafb2e01398a91518d5c8818802845564f45c", size = 144457, upload-time = "2026-01-19T06:47:33.711Z" }, + { url = "https://files.pythonhosted.org/packages/71/70/38998b950a97ea279e6bd657575d22d1a2047256caf707d9a10fbce4f065/multiprocess-0.70.19-py312-none-any.whl", hash = "sha256:3a56c0e85dd5025161bac5ce138dcac1e49174c7d8e74596537e729fd5c53c28", size = 150281, upload-time = "2026-01-19T06:47:35.037Z" }, + { url = "https://files.pythonhosted.org/packages/7f/74/d2c27e03cb84251dfe7249b8e82923643c6d48fa4883b9476b025e7dc7eb/multiprocess-0.70.19-py313-none-any.whl", hash = "sha256:8d5eb4ec5017ba2fab4e34a747c6d2c2b6fecfe9e7236e77988db91580ada952", size = 156414, upload-time = "2026-01-19T06:47:35.915Z" }, + { url = "https://files.pythonhosted.org/packages/7e/82/69e539c4c2027f1e1697e09aaa2449243085a0edf81ae2c6341e84d769b6/multiprocess-0.70.19-py39-none-any.whl", hash = "sha256:0d4b4397ed669d371c81dcd1ef33fd384a44d6c3de1bd0ca7ac06d837720d3c5", size = 133477, upload-time = "2026-01-19T06:47:38.619Z" }, +] + +[[package]] +name = "narwhals" +version = "2.22.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/62/3c/c4ef2164a71c1a63d7f1ae411c4082c5fa872405106db60a4b7114989ad7/narwhals-2.22.1.tar.gz", hash = "sha256:d62920805a0a43b7ff8b54b0c0d3142d796f8a9301836ada37e573d6a33cbcd9", size = 647493, upload-time = "2026-06-05T12:34:34.051Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/48/ca/36339329c4604adbcc99c899b7eb1ce1a555c499b6a6860757dc9bfed36d/narwhals-2.22.1-py3-none-any.whl", hash = "sha256:60567d774edf77db53906f89d9fbd164e66e56d66d388e1e6990f17ac33cfb53", size = 454815, upload-time = "2026-06-05T12:34:32.289Z" }, ] [[package]] name = "networkx" version = "3.6.1" source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.13' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.12.*' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20'", - "python_full_version >= '3.13' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.12.*' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.11.*' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.11.*' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20'", - "python_full_version >= '3.13' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.12.*' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20'", - "python_full_version >= '3.13' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.12.*' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.11.*' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.11.*' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20'", - "python_full_version >= '3.13' and extra == 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.12.*' and extra == 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.11.*' and extra == 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version >= '3.13' and extra == 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.12.*' and extra == 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.11.*' and extra == 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.11.*' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.11.*' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version >= '3.13' and extra == 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.12.*' and extra == 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.11.*' and extra == 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version >= '3.13' and extra == 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.12.*' and extra == 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.11.*' and extra == 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version >= '3.13' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.12.*' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version >= '3.13' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.12.*' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.11.*' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.11.*' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.11.*' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version >= '3.11' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", -] sdist = { url = "https://files.pythonhosted.org/packages/6a/51/63fe664f3908c97be9d2e4f1158eb633317598cfa6e1fc14af5383f17512/networkx-3.6.1.tar.gz", hash = "sha256:26b7c357accc0c8cde558ad486283728b65b6a95d85ee1cd66bafab4c8168509", size = 2517025, upload-time = "2025-12-08T17:02:39.908Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl", hash = "sha256:d47fbf302e7d9cbbb9e2555a0d267983d2aa476bac30e90dfbe5669bd57f3762", size = 2068504, upload-time = "2025-12-08T17:02:38.159Z" }, @@ -3069,8 +3928,7 @@ name = "nltk" version = "3.9.4" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "click", version = "8.1.8", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and extra == 'extra-14-granite-switch-tutorials') or (python_full_version >= '3.11' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm') or (extra == 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra != 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20')" }, - { name = "click", version = "8.4.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and extra == 'extra-14-granite-switch-tutorials') or (python_full_version < '3.11' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm') or (extra != 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra != 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20')" }, + { name = "click" }, { name = "joblib" }, { name = "regex" }, { name = "tqdm" }, @@ -3085,22 +3943,202 @@ name = "numba" version = "0.61.2" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "python_full_version >= '3.13'", - "python_full_version == '3.12.*'", - "python_full_version == '3.11.*'", - "python_full_version < '3.11'", -] -dependencies = [ - { name = "llvmlite", version = "0.44.0", source = { registry = "https://pypi.org/simple" } }, - { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" } }, + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", +] +dependencies = [ + { name = "llvmlite", version = "0.44.0", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-14-granite-switch-tutorials' or extra == 'extra-14-granite-switch-vllm' or extra == 'group-14-granite-switch-dev' or extra == 'group-14-granite-switch-test' or extra == 'group-14-granite-switch-vllm19'" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-14-granite-switch-tutorials' or extra == 'extra-14-granite-switch-vllm' or extra == 'group-14-granite-switch-dev' or extra == 'group-14-granite-switch-test' or extra == 'group-14-granite-switch-vllm19'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/1c/a0/e21f57604304aa03ebb8e098429222722ad99176a4f979d34af1d1ee80da/numba-0.61.2.tar.gz", hash = "sha256:8750ee147940a6637b80ecf7f95062185ad8726c8c28a2295b8ec1160a196f7d", size = 2820615, upload-time = "2025-04-09T02:58:07.659Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/eb/ca/f470be59552ccbf9531d2d383b67ae0b9b524d435fb4a0d229fef135116e/numba-0.61.2-cp310-cp310-macosx_10_14_x86_64.whl", hash = "sha256:cf9f9fc00d6eca0c23fc840817ce9f439b9f03c8f03d6246c0e7f0cb15b7162a", size = 2775663, upload-time = "2025-04-09T02:57:34.143Z" }, - { url = "https://files.pythonhosted.org/packages/f5/13/3bdf52609c80d460a3b4acfb9fdb3817e392875c0d6270cf3fd9546f138b/numba-0.61.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ea0247617edcb5dd61f6106a56255baab031acc4257bddaeddb3a1003b4ca3fd", size = 2778344, upload-time = "2025-04-09T02:57:36.609Z" }, - { url = "https://files.pythonhosted.org/packages/e2/7d/bfb2805bcfbd479f04f835241ecf28519f6e3609912e3a985aed45e21370/numba-0.61.2-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:ae8c7a522c26215d5f62ebec436e3d341f7f590079245a2f1008dfd498cc1642", size = 3824054, upload-time = "2025-04-09T02:57:38.162Z" }, - { url = "https://files.pythonhosted.org/packages/e3/27/797b2004745c92955470c73c82f0e300cf033c791f45bdecb4b33b12bdea/numba-0.61.2-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:bd1e74609855aa43661edffca37346e4e8462f6903889917e9f41db40907daa2", size = 3518531, upload-time = "2025-04-09T02:57:39.709Z" }, - { url = "https://files.pythonhosted.org/packages/b1/c6/c2fb11e50482cb310afae87a997707f6c7d8a48967b9696271347441f650/numba-0.61.2-cp310-cp310-win_amd64.whl", hash = "sha256:ae45830b129c6137294093b269ef0a22998ccc27bf7cf096ab8dcf7bca8946f9", size = 2831612, upload-time = "2025-04-09T02:57:41.559Z" }, { url = "https://files.pythonhosted.org/packages/3f/97/c99d1056aed767503c228f7099dc11c402906b42a4757fec2819329abb98/numba-0.61.2-cp311-cp311-macosx_10_14_x86_64.whl", hash = "sha256:efd3db391df53aaa5cfbee189b6c910a5b471488749fd6606c3f33fc984c2ae2", size = 2775825, upload-time = "2025-04-09T02:57:43.442Z" }, { url = "https://files.pythonhosted.org/packages/95/9e/63c549f37136e892f006260c3e2613d09d5120672378191f2dc387ba65a2/numba-0.61.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:49c980e4171948ffebf6b9a2520ea81feed113c1f4890747ba7f59e74be84b1b", size = 2778695, upload-time = "2025-04-09T02:57:44.968Z" }, { url = "https://files.pythonhosted.org/packages/97/c8/8740616c8436c86c1b9a62e72cb891177d2c34c2d24ddcde4c390371bf4c/numba-0.61.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:3945615cd73c2c7eba2a85ccc9c1730c21cd3958bfcf5a44302abae0fb07bb60", size = 3829227, upload-time = "2025-04-09T02:57:46.63Z" }, @@ -3123,27 +4161,58 @@ name = "numba" version = "0.65.0" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "python_full_version >= '3.13' and sys_platform == 'darwin'", - "python_full_version == '3.12.*' and sys_platform == 'darwin'", - "python_full_version >= '3.13' and sys_platform != 'darwin'", - "python_full_version == '3.12.*' and sys_platform != 'darwin'", - "python_full_version == '3.11.*' and sys_platform == 'darwin'", - "python_full_version < '3.11' and sys_platform == 'darwin'", - "python_full_version == '3.11.*' and sys_platform != 'darwin'", - "python_full_version < '3.11' and sys_platform != 'darwin'", + "python_full_version >= '3.13' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", ] dependencies = [ { name = "llvmlite", version = "0.47.0", source = { registry = "https://pypi.org/simple" } }, - { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and extra == 'extra-14-granite-switch-dev-vllm20') or (python_full_version < '3.11' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20')" }, - { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and python_full_version < '3.13' and extra == 'extra-14-granite-switch-dev-vllm20') or (python_full_version >= '3.11' and python_full_version < '3.13' and extra == 'extra-14-granite-switch-vllm20') or (python_full_version < '3.11' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20') or (python_full_version < '3.11' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (python_full_version < '3.11' and extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (python_full_version < '3.11' and extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm') or (python_full_version < '3.11' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (python_full_version < '3.11' and extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (python_full_version >= '3.13' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20') or (python_full_version >= '3.13' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (python_full_version >= '3.13' and extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (python_full_version >= '3.13' and extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm') or (python_full_version >= '3.13' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (python_full_version >= '3.13' and extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20')" }, - { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.13' and extra == 'extra-14-granite-switch-dev-vllm20') or (python_full_version >= '3.13' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20')" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.13' and extra == 'extra-14-granite-switch-vllm20') or (python_full_version < '3.13' and extra == 'group-14-granite-switch-dev-vllm20') or (python_full_version < '3.13' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20')" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.13' and extra == 'extra-14-granite-switch-vllm20') or (python_full_version >= '3.13' and extra == 'group-14-granite-switch-dev-vllm20') or (python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20') or (extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/49/61/7299643b9c18d669e04be7c5bcb64d985070d07553274817b45b049e7bfe/numba-0.65.0.tar.gz", hash = "sha256:edad0d9f6682e93624c00125a471ae4df186175d71fd604c983c377cdc03e68b", size = 2764131, upload-time = "2026-04-01T03:52:01.946Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/23/9b/e8453d93d5cb3f53cc956f135024be09d52f4f99643acaf8fdca090a8f3c/numba-0.65.0-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:dff9fd5fbc9a35c517359c5823ea705d9b65f01fb46e42e35a2eabe5a52c2e96", size = 2680537, upload-time = "2026-04-01T03:51:17.325Z" }, - { url = "https://files.pythonhosted.org/packages/07/95/d6a2f0625e1092624228301eea11cdaff21ddcaf917ef3d631846a38b2f4/numba-0.65.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:4c894c94afa5ffd627c7e3b693df10cb0d905bd5eb06de3dfc31775140cf4f89", size = 3739444, upload-time = "2026-04-01T03:51:19.629Z" }, - { url = "https://files.pythonhosted.org/packages/49/ed/fe518c97af035e4ec670c2edc3f0ff7a518cbed2f0b5053124d7c979bd8a/numba-0.65.0-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b7325b1aab88f0339057288ee32f39dc660e14f93872a6fda14fa6eb9f95b047", size = 3446390, upload-time = "2026-04-01T03:51:21.55Z" }, - { url = "https://files.pythonhosted.org/packages/d0/06/5010939854249c290c6217e3fb7404914f4ed953f9923e340c3e166bcaf0/numba-0.65.0-cp310-cp310-win_amd64.whl", hash = "sha256:71e72e9ca2f619df4768f9c3962bfec60191a5a26fe2b6a8c6a07532b6146169", size = 2747200, upload-time = "2026-04-01T03:51:23.674Z" }, { url = "https://files.pythonhosted.org/packages/ba/ce/d67c499703eb5479ce02420e8ccd65c5753d87d2e16d563f152d71405346/numba-0.65.0-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:28e547d0b18024f19cbaf9de02fc5c145790213d9be8a2c95b43f93ec162b9e4", size = 2680228, upload-time = "2026-04-01T03:51:25.401Z" }, { url = "https://files.pythonhosted.org/packages/c1/a7/11e2b24251d57cf41fc9ad83f378d890d61a890e3f8eb6338b39833f67a4/numba-0.65.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:032b0b8e879512cd424d79eed6d772a1399c6387ded184c2cf3cc22c08d750a6", size = 3744674, upload-time = "2026-04-01T03:51:27.311Z" }, { url = "https://files.pythonhosted.org/packages/fe/0b/7c63eb742859a6243f42288441f65ac9dac96ea59f409e43b713aafbe867/numba-0.65.0-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:af143d823624033a128b5950c0aaf9ffc2386dfe954eb757119cf0432335534c", size = 3450620, upload-time = "2026-04-01T03:51:29.092Z" }, @@ -3163,54 +4232,198 @@ name = "numpy" version = "2.2.6" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "python_full_version < '3.11' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20'", - "python_full_version < '3.11' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20'", - "python_full_version < '3.11' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20'", - "python_full_version < '3.11' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20'", - "python_full_version >= '3.13' and extra == 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.12.*' and extra == 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.11.*' and extra == 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version < '3.11' and extra == 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version >= '3.13' and extra == 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.12.*' and extra == 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.11.*' and extra == 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version < '3.11' and extra == 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.11.*' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version < '3.11' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.11.*' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version < '3.11' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version >= '3.13' and extra == 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.12.*' and extra == 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.11.*' and extra == 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version < '3.11' and extra == 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version >= '3.13' and extra == 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.12.*' and extra == 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.11.*' and extra == 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version < '3.11' and extra == 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version < '3.11' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version < '3.11' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.11.*' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version < '3.11' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version < '3.11' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", ] sdist = { url = "https://files.pythonhosted.org/packages/76/21/7d2a95e4bba9dc13d043ee156a356c0a8f0c6309dff6b21b4d71a073b8a8/numpy-2.2.6.tar.gz", hash = "sha256:e29554e2bef54a90aa5cc07da6ce955accb83f21ab5de01a62c8478897b264fd", size = 20276440, upload-time = "2025-05-17T22:38:04.611Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/9a/3e/ed6db5be21ce87955c0cbd3009f2803f59fa08df21b5df06862e2d8e2bdd/numpy-2.2.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b412caa66f72040e6d268491a59f2c43bf03eb6c96dd8f0307829feb7fa2b6fb", size = 21165245, upload-time = "2025-05-17T21:27:58.555Z" }, - { url = "https://files.pythonhosted.org/packages/22/c2/4b9221495b2a132cc9d2eb862e21d42a009f5a60e45fc44b00118c174bff/numpy-2.2.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8e41fd67c52b86603a91c1a505ebaef50b3314de0213461c7a6e99c9a3beff90", size = 14360048, upload-time = "2025-05-17T21:28:21.406Z" }, - { url = "https://files.pythonhosted.org/packages/fd/77/dc2fcfc66943c6410e2bf598062f5959372735ffda175b39906d54f02349/numpy-2.2.6-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:37e990a01ae6ec7fe7fa1c26c55ecb672dd98b19c3d0e1d1f326fa13cb38d163", size = 5340542, upload-time = "2025-05-17T21:28:30.931Z" }, - { url = "https://files.pythonhosted.org/packages/7a/4f/1cb5fdc353a5f5cc7feb692db9b8ec2c3d6405453f982435efc52561df58/numpy-2.2.6-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:5a6429d4be8ca66d889b7cf70f536a397dc45ba6faeb5f8c5427935d9592e9cf", size = 6878301, upload-time = "2025-05-17T21:28:41.613Z" }, - { url = "https://files.pythonhosted.org/packages/eb/17/96a3acd228cec142fcb8723bd3cc39c2a474f7dcf0a5d16731980bcafa95/numpy-2.2.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:efd28d4e9cd7d7a8d39074a4d44c63eda73401580c5c76acda2ce969e0a38e83", size = 14297320, upload-time = "2025-05-17T21:29:02.78Z" }, - { url = "https://files.pythonhosted.org/packages/b4/63/3de6a34ad7ad6646ac7d2f55ebc6ad439dbbf9c4370017c50cf403fb19b5/numpy-2.2.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc7b73d02efb0e18c000e9ad8b83480dfcd5dfd11065997ed4c6747470ae8915", size = 16801050, upload-time = "2025-05-17T21:29:27.675Z" }, - { url = "https://files.pythonhosted.org/packages/07/b6/89d837eddef52b3d0cec5c6ba0456c1bf1b9ef6a6672fc2b7873c3ec4e2e/numpy-2.2.6-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:74d4531beb257d2c3f4b261bfb0fc09e0f9ebb8842d82a7b4209415896adc680", size = 15807034, upload-time = "2025-05-17T21:29:51.102Z" }, - { url = "https://files.pythonhosted.org/packages/01/c8/dc6ae86e3c61cfec1f178e5c9f7858584049b6093f843bca541f94120920/numpy-2.2.6-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:8fc377d995680230e83241d8a96def29f204b5782f371c532579b4f20607a289", size = 18614185, upload-time = "2025-05-17T21:30:18.703Z" }, - { url = "https://files.pythonhosted.org/packages/5b/c5/0064b1b7e7c89137b471ccec1fd2282fceaae0ab3a9550f2568782d80357/numpy-2.2.6-cp310-cp310-win32.whl", hash = "sha256:b093dd74e50a8cba3e873868d9e93a85b78e0daf2e98c6797566ad8044e8363d", size = 6527149, upload-time = "2025-05-17T21:30:29.788Z" }, - { url = "https://files.pythonhosted.org/packages/a3/dd/4b822569d6b96c39d1215dbae0582fd99954dcbcf0c1a13c61783feaca3f/numpy-2.2.6-cp310-cp310-win_amd64.whl", hash = "sha256:f0fd6321b839904e15c46e0d257fdd101dd7f530fe03fd6359c1ea63738703f3", size = 12904620, upload-time = "2025-05-17T21:30:48.994Z" }, { url = "https://files.pythonhosted.org/packages/da/a8/4f83e2aa666a9fbf56d6118faaaf5f1974d456b1823fda0a176eff722839/numpy-2.2.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f9f1adb22318e121c5c69a09142811a201ef17ab257a1e66ca3025065b7f53ae", size = 21176963, upload-time = "2025-05-17T21:31:19.36Z" }, { url = "https://files.pythonhosted.org/packages/b3/2b/64e1affc7972decb74c9e29e5649fac940514910960ba25cd9af4488b66c/numpy-2.2.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c820a93b0255bc360f53eca31a0e676fd1101f673dda8da93454a12e23fc5f7a", size = 14406743, upload-time = "2025-05-17T21:31:41.087Z" }, { url = "https://files.pythonhosted.org/packages/4a/9f/0121e375000b5e50ffdd8b25bf78d8e1a5aa4cca3f185d41265198c7b834/numpy-2.2.6-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:3d70692235e759f260c3d837193090014aebdf026dfd167834bcba43e30c2a42", size = 5352616, upload-time = "2025-05-17T21:31:50.072Z" }, @@ -3251,10 +4464,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/76/95/bef5b37f29fc5e739947e9ce5179ad402875633308504a52d188302319c8/numpy-2.2.6-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:8e9ace4a37db23421249ed236fdcdd457d671e25146786dfc96835cd951aa7c1", size = 18385260, upload-time = "2025-05-17T21:43:05.189Z" }, { url = "https://files.pythonhosted.org/packages/09/04/f2f83279d287407cf36a7a8053a5abe7be3622a4363337338f2585e4afda/numpy-2.2.6-cp313-cp313t-win32.whl", hash = "sha256:038613e9fb8c72b0a41f025a7e4c3f0b7a1b5d768ece4796b674c8f3fe13efff", size = 6377225, upload-time = "2025-05-17T21:43:16.254Z" }, { url = "https://files.pythonhosted.org/packages/67/0e/35082d13c09c02c011cf21570543d202ad929d961c02a147493cb0c2bdf5/numpy-2.2.6-cp313-cp313t-win_amd64.whl", hash = "sha256:6031dd6dfecc0cf9f668681a37648373bddd6421fff6c66ec1624eed0180ee06", size = 12771374, upload-time = "2025-05-17T21:43:35.479Z" }, - { url = "https://files.pythonhosted.org/packages/9e/3b/d94a75f4dbf1ef5d321523ecac21ef23a3cd2ac8b78ae2aac40873590229/numpy-2.2.6-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:0b605b275d7bd0c640cad4e5d30fa701a8d59302e127e5f79138ad62762c3e3d", size = 21040391, upload-time = "2025-05-17T21:44:35.948Z" }, - { url = "https://files.pythonhosted.org/packages/17/f4/09b2fa1b58f0fb4f7c7963a1649c64c4d315752240377ed74d9cd878f7b5/numpy-2.2.6-pp310-pypy310_pp73-macosx_14_0_x86_64.whl", hash = "sha256:7befc596a7dc9da8a337f79802ee8adb30a552a94f792b9c9d18c840055907db", size = 6786754, upload-time = "2025-05-17T21:44:47.446Z" }, - { url = "https://files.pythonhosted.org/packages/af/30/feba75f143bdc868a1cc3f44ccfa6c4b9ec522b36458e738cd00f67b573f/numpy-2.2.6-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ce47521a4754c8f4593837384bd3424880629f718d87c5d44f8ed763edd63543", size = 16643476, upload-time = "2025-05-17T21:45:11.871Z" }, - { url = "https://files.pythonhosted.org/packages/37/48/ac2a9584402fb6c0cd5b5d1a91dcf176b15760130dd386bbafdbfe3640bf/numpy-2.2.6-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:d042d24c90c41b54fd506da306759e06e568864df8ec17ccc17e9e884634fd00", size = 12812666, upload-time = "2025-05-17T21:45:31.426Z" }, ] [[package]] @@ -3264,8 +4473,8 @@ source = { registry = "https://pypi.org/simple" } resolution-markers = [ "python_full_version == '3.12.*' and sys_platform == 'darwin'", "python_full_version == '3.12.*' and sys_platform != 'darwin'", - "python_full_version == '3.11.*' and sys_platform == 'darwin'", - "python_full_version == '3.11.*' and sys_platform != 'darwin'", + "python_full_version < '3.12' and sys_platform == 'darwin'", + "python_full_version < '3.12' and sys_platform != 'darwin'", ] sdist = { url = "https://files.pythonhosted.org/packages/76/65/21b3bc86aac7b8f2862db1e808f1ea22b028e30a225a34a5ede9bf8678f2/numpy-2.3.5.tar.gz", hash = "sha256:784db1dcdab56bf0517743e746dfb0f885fc68d948aba86eeec2cba234bdf1c0", size = 20584950, upload-time = "2025-11-16T22:52:42.067Z" } wheels = [ @@ -3327,13 +4536,22 @@ name = "numpy" version = "2.4.6" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "python_full_version >= '3.13' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20'", - "python_full_version >= '3.13' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20'", - "python_full_version >= '3.13' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20'", - "python_full_version >= '3.13' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20'", - "python_full_version >= '3.13' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version >= '3.13' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version >= '3.11' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", ] sdist = { url = "https://files.pythonhosted.org/packages/d0/ad/fed0499ce6a338d2a03ebae59cd15093910c8875328855781952abf6c2fe/numpy-2.4.6.tar.gz", hash = "sha256:f3a3570c4a2a16746ac2c31a7c7c7b0c186b95ce902e33db6f28094ed7387dda", size = 20735807, upload-time = "2026-05-18T23:37:14.07Z" } wheels = [ @@ -3474,7 +4692,7 @@ name = "nvidia-cudnn-cu12" version = "9.10.2.21" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "nvidia-cublas-cu12", marker = "extra == 'extra-14-granite-switch-dev' or extra == 'extra-14-granite-switch-tutorials' or extra == 'extra-14-granite-switch-vllm'" }, + { name = "nvidia-cublas-cu12", marker = "extra == 'extra-14-granite-switch-tutorials' or extra == 'extra-14-granite-switch-vllm' or extra == 'group-14-granite-switch-dev' or extra == 'group-14-granite-switch-test' or extra == 'group-14-granite-switch-vllm19'" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/fa/41/e79269ce215c857c935fd86bcfe91a451a584dfc27f1e068f568b9ad1ab7/nvidia_cudnn_cu12-9.10.2.21-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:c9132cc3f8958447b4910a1720036d9eff5928cc3179b0a51fb6d167c6cc87d8", size = 705026878, upload-time = "2025-06-06T21:52:51.348Z" }, @@ -3487,7 +4705,7 @@ name = "nvidia-cudnn-cu13" version = "9.19.0.56" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "nvidia-cublas", marker = "extra == 'extra-14-granite-switch-dev-vllm20' or (extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm')" }, + { name = "nvidia-cublas", marker = "extra == 'extra-14-granite-switch-vllm20' or extra == 'group-14-granite-switch-dev-vllm20' or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20') or (extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19')" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/f1/84/26025437c1e6b61a707442184fa0c03d083b661adf3a3eecfd6d21677740/nvidia_cudnn_cu13-9.19.0.56-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:6ed29ffaee1176c612daf442e4dd6cfeb6a0caa43ddcbeb59da94953030b1be4", size = 433781201, upload-time = "2026-02-03T20:40:53.805Z" }, @@ -3500,9 +4718,6 @@ name = "nvidia-cudnn-frontend" version = "1.18.0" source = { registry = "https://pypi.org/simple" } wheels = [ - { url = "https://files.pythonhosted.org/packages/86/be/f5a1e633c524c13c0182213ab27dab42dca29a3c785be5ff74d2d185aed1/nvidia_cudnn_frontend-1.18.0-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:baa6fbc8e7c55f1c78c0374ed9a890e1cf81acaca0c92d6135d18a8e3c985244", size = 2023500, upload-time = "2026-01-27T23:31:34.747Z" }, - { url = "https://files.pythonhosted.org/packages/82/a7/765a17c6a9496196c34f269d17dfb902b6c618c0261c0962511e95302e81/nvidia_cudnn_frontend-1.18.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2e4bcca42259e358002c8867e3624a558f66cd5dff2cc6c3aafd860ef2f41730", size = 2154278, upload-time = "2026-01-27T23:06:55.784Z" }, - { url = "https://files.pythonhosted.org/packages/19/a1/7caae2243540bc60e47eae95f0fd913c9baa05cf94df0471914f70d45158/nvidia_cudnn_frontend-1.18.0-cp310-cp310-win_amd64.whl", hash = "sha256:06252021ef1e5a7256f1e70429a426b01792636c05cc547fe8e64c6885a9652e", size = 1590158, upload-time = "2026-01-27T23:08:26.703Z" }, { url = "https://files.pythonhosted.org/packages/e2/9a/83d3d080118de4a7810fa019349edec634b8b37b9cafaacd05719de62dd6/nvidia_cudnn_frontend-1.18.0-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f6d4d0b88d617b233a503c84980b54d840b60b2734497d1a7a071ec5293daec2", size = 2023709, upload-time = "2026-01-27T23:32:10.912Z" }, { url = "https://files.pythonhosted.org/packages/13/c7/c3624b3ed77b102618f26295e816b27f1c3ebb1143730237a9f51d403c3f/nvidia_cudnn_frontend-1.18.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:382ea063b92cbfd5b442cb75ff8422932d78276aecf139e46713ed1ad3d07af4", size = 2155568, upload-time = "2026-01-27T23:07:13.277Z" }, { url = "https://files.pythonhosted.org/packages/52/dd/8613dfd029d076b86a8a87efe3f4bb4ab73cec15fa8fc27e665098f4d167/nvidia_cudnn_frontend-1.18.0-cp311-cp311-win_amd64.whl", hash = "sha256:baa509effc4d299d3f04e549d4188f88bca8a8b527f483cbd2f66bc18f13a8b1", size = 1591244, upload-time = "2026-01-27T23:08:44.691Z" }, @@ -3519,7 +4734,7 @@ name = "nvidia-cufft" version = "12.0.0.61" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "nvidia-nvjitlink", marker = "extra == 'extra-14-granite-switch-dev-vllm20' or (extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm')" }, + { name = "nvidia-nvjitlink", marker = "extra == 'extra-14-granite-switch-vllm20' or extra == 'group-14-granite-switch-dev-vllm20' or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20') or (extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19')" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/8b/ae/f417a75c0259e85c1d2f83ca4e960289a5f814ed0cea74d18c353d3e989d/nvidia_cufft-12.0.0.61-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:2708c852ef8cd89d1d2068bdbece0aa188813a0c934db3779b9b1faa8442e5f5", size = 214053554, upload-time = "2025-09-04T08:31:38.196Z" }, @@ -3532,7 +4747,7 @@ name = "nvidia-cufft-cu12" version = "11.3.3.83" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "nvidia-nvjitlink-cu12", marker = "extra == 'extra-14-granite-switch-dev' or extra == 'extra-14-granite-switch-tutorials' or extra == 'extra-14-granite-switch-vllm'" }, + { name = "nvidia-nvjitlink-cu12", marker = "extra == 'extra-14-granite-switch-tutorials' or extra == 'extra-14-granite-switch-vllm' or extra == 'group-14-granite-switch-dev' or extra == 'group-14-granite-switch-test' or extra == 'group-14-granite-switch-vllm19'" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/60/bc/7771846d3a0272026c416fbb7e5f4c1f146d6d80704534d0b187dd6f4800/nvidia_cufft_cu12-11.3.3.83-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:848ef7224d6305cdb2a4df928759dca7b1201874787083b6e7550dd6765ce69a", size = 193109211, upload-time = "2025-03-07T01:44:56.873Z" }, @@ -3583,9 +4798,9 @@ name = "nvidia-cusolver" version = "12.0.4.66" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "nvidia-cublas", marker = "extra == 'extra-14-granite-switch-dev-vllm20' or (extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm')" }, - { name = "nvidia-cusparse", marker = "extra == 'extra-14-granite-switch-dev-vllm20' or (extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm')" }, - { name = "nvidia-nvjitlink", marker = "extra == 'extra-14-granite-switch-dev-vllm20' or (extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm')" }, + { name = "nvidia-cublas", marker = "extra == 'extra-14-granite-switch-vllm20' or extra == 'group-14-granite-switch-dev-vllm20' or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20') or (extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19')" }, + { name = "nvidia-cusparse", marker = "extra == 'extra-14-granite-switch-vllm20' or extra == 'group-14-granite-switch-dev-vllm20' or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20') or (extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19')" }, + { name = "nvidia-nvjitlink", marker = "extra == 'extra-14-granite-switch-vllm20' or extra == 'group-14-granite-switch-dev-vllm20' or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20') or (extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19')" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/c8/c3/b30c9e935fc01e3da443ec0116ed1b2a009bb867f5324d3f2d7e533e776b/nvidia_cusolver-12.0.4.66-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:02c2457eaa9e39de20f880f4bd8820e6a1cfb9f9a34f820eb12a155aa5bc92d2", size = 223467760, upload-time = "2025-09-04T08:33:04.222Z" }, @@ -3598,9 +4813,9 @@ name = "nvidia-cusolver-cu12" version = "11.7.3.90" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "nvidia-cublas-cu12", marker = "extra == 'extra-14-granite-switch-dev' or extra == 'extra-14-granite-switch-tutorials' or extra == 'extra-14-granite-switch-vllm'" }, - { name = "nvidia-cusparse-cu12", marker = "extra == 'extra-14-granite-switch-dev' or extra == 'extra-14-granite-switch-tutorials' or extra == 'extra-14-granite-switch-vllm'" }, - { name = "nvidia-nvjitlink-cu12", marker = "extra == 'extra-14-granite-switch-dev' or extra == 'extra-14-granite-switch-tutorials' or extra == 'extra-14-granite-switch-vllm'" }, + { name = "nvidia-cublas-cu12", marker = "extra == 'extra-14-granite-switch-tutorials' or extra == 'extra-14-granite-switch-vllm' or extra == 'group-14-granite-switch-dev' or extra == 'group-14-granite-switch-test' or extra == 'group-14-granite-switch-vllm19'" }, + { name = "nvidia-cusparse-cu12", marker = "extra == 'extra-14-granite-switch-tutorials' or extra == 'extra-14-granite-switch-vllm' or extra == 'group-14-granite-switch-dev' or extra == 'group-14-granite-switch-test' or extra == 'group-14-granite-switch-vllm19'" }, + { name = "nvidia-nvjitlink-cu12", marker = "extra == 'extra-14-granite-switch-tutorials' or extra == 'extra-14-granite-switch-vllm' or extra == 'group-14-granite-switch-dev' or extra == 'group-14-granite-switch-test' or extra == 'group-14-granite-switch-vllm19'" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/c8/32/f7cd6ce8a7690544d084ea21c26e910a97e077c9b7f07bf5de623ee19981/nvidia_cusolver_cu12-11.7.3.90-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:db9ed69dbef9715071232caa9b69c52ac7de3a95773c2db65bdba85916e4e5c0", size = 267229841, upload-time = "2025-03-07T01:46:54.356Z" }, @@ -3613,7 +4828,7 @@ name = "nvidia-cusparse" version = "12.6.3.3" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "nvidia-nvjitlink", marker = "extra == 'extra-14-granite-switch-dev-vllm20' or (extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm')" }, + { name = "nvidia-nvjitlink", marker = "extra == 'extra-14-granite-switch-vllm20' or extra == 'group-14-granite-switch-dev-vllm20' or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20') or (extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19')" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/f8/94/5c26f33738ae35276672f12615a64bd008ed5be6d1ebcb23579285d960a9/nvidia_cusparse-12.6.3.3-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:80bcc4662f23f1054ee334a15c72b8940402975e0eab63178fc7e670aa59472c", size = 162155568, upload-time = "2025-09-04T08:33:42.864Z" }, @@ -3626,7 +4841,7 @@ name = "nvidia-cusparse-cu12" version = "12.5.8.93" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "nvidia-nvjitlink-cu12", marker = "extra == 'extra-14-granite-switch-dev' or extra == 'extra-14-granite-switch-tutorials' or extra == 'extra-14-granite-switch-vllm'" }, + { name = "nvidia-nvjitlink-cu12", marker = "extra == 'extra-14-granite-switch-tutorials' or extra == 'extra-14-granite-switch-vllm' or extra == 'group-14-granite-switch-dev' or extra == 'group-14-granite-switch-test' or extra == 'group-14-granite-switch-vllm19'" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/bc/f7/cd777c4109681367721b00a106f491e0d0d15cfa1fd59672ce580ce42a97/nvidia_cusparse_cu12-12.5.8.93-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:9b6c161cb130be1a07a27ea6923df8141f3c295852f4b260c65f18f3e0a091dc", size = 288117129, upload-time = "2025-03-07T01:47:40.407Z" }, @@ -3670,16 +4885,14 @@ name = "nvidia-cutlass-dsl-libs-base" version = "4.5.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "cuda-python", version = "12.9.4", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-14-granite-switch-dev' or extra == 'extra-14-granite-switch-tutorials' or extra == 'extra-14-granite-switch-vllm'" }, - { name = "cuda-python", version = "13.2.0", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-14-granite-switch-dev-vllm20' or extra == 'extra-14-granite-switch-vllm20'" }, - { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and extra == 'extra-14-granite-switch-dev-vllm20') or (python_full_version >= '3.11' and extra == 'extra-14-granite-switch-tutorials') or (python_full_version >= '3.11' and extra == 'extra-14-granite-switch-vllm') or (python_full_version < '3.11' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or extra == 'extra-14-granite-switch-dev' or (extra != 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (extra != 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm')" }, - { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and python_full_version < '3.13' and extra == 'extra-14-granite-switch-dev-vllm20') or (python_full_version >= '3.11' and python_full_version < '3.13' and extra == 'extra-14-granite-switch-vllm20') or (python_full_version < '3.11' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20') or (python_full_version < '3.11' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (python_full_version < '3.11' and extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (python_full_version < '3.11' and extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm') or (python_full_version < '3.11' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (python_full_version < '3.11' and extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (python_full_version >= '3.13' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20') or (python_full_version >= '3.13' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (python_full_version >= '3.13' and extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (python_full_version >= '3.13' and extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm') or (python_full_version >= '3.13' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (python_full_version >= '3.13' and extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20')" }, - { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.13' and extra == 'extra-14-granite-switch-dev-vllm20') or (python_full_version >= '3.13' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20')" }, + { name = "cuda-python", version = "12.9.4", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-14-granite-switch-tutorials' or extra == 'extra-14-granite-switch-vllm' or extra == 'group-14-granite-switch-dev' or extra == 'group-14-granite-switch-test' or extra == 'group-14-granite-switch-vllm19'" }, + { name = "cuda-python", version = "13.2.0", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-14-granite-switch-vllm20' or extra == 'group-14-granite-switch-dev-vllm20' or extra == 'group-14-granite-switch-vllm20'" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-14-granite-switch-tutorials' or extra == 'extra-14-granite-switch-vllm' or extra == 'group-14-granite-switch-dev' or extra == 'group-14-granite-switch-test' or extra == 'group-14-granite-switch-vllm19'" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.13' and extra == 'extra-14-granite-switch-vllm20') or (python_full_version < '3.13' and extra == 'group-14-granite-switch-dev-vllm20') or (python_full_version < '3.13' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20')" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.13' and extra == 'extra-14-granite-switch-vllm20') or (python_full_version >= '3.13' and extra == 'group-14-granite-switch-dev-vllm20') or (python_full_version >= '3.13' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20')" }, { name = "typing-extensions" }, ] wheels = [ - { url = "https://files.pythonhosted.org/packages/8a/4a/46d0698f30b27350ae96872bb5727b94c6379ac47cd142f1e2b9129ffeb9/nvidia_cutlass_dsl_libs_base-4.5.1-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:7833ba3524b1e972e8502499a1b2445ee1971b1fd6ed5a165ef6ce1c7c0e810b", size = 75634359, upload-time = "2026-05-15T14:44:02.592Z" }, - { url = "https://files.pythonhosted.org/packages/be/d5/9fb56397b16c94ce4a5cc0d632606bd52ca9f68c6beb46990b3e7ba96e57/nvidia_cutlass_dsl_libs_base-4.5.1-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:37c1197ddbffa12926ce968fc854ca12edec2d466f8076031222959ac8893e4d", size = 74510639, upload-time = "2026-05-15T14:47:07.117Z" }, { url = "https://files.pythonhosted.org/packages/cf/ed/a6480ed25d1f0a29f95f9b90c6eb0b3a0500e28d19f4f87bcde342d9f560/nvidia_cutlass_dsl_libs_base-4.5.1-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:e460a8ecccd71b99204e87fc68509beba3d9f3b7a21cff29341cece3c4a05abf", size = 75633793, upload-time = "2026-05-15T14:43:33.883Z" }, { url = "https://files.pythonhosted.org/packages/1d/61/5f4282b2e0eeb9256acd8cbb2a088c5e75c90e2e180c442c5a7e63c0ac84/nvidia_cutlass_dsl_libs_base-4.5.1-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:7581e03f1537ce707732ad561a0555ce6048d2b27380403dfe1b295314fbe7b8", size = 74509964, upload-time = "2026-05-15T14:47:39.393Z" }, { url = "https://files.pythonhosted.org/packages/17/22/16bfee73a53195ca06a738d92aefd740f5af5eef32be8aec4f5c18a8e1d2/nvidia_cutlass_dsl_libs_base-4.5.1-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:e9825fc281b72b2b10e5a397c211ce0f16e6df55178230da4b3f141aeffbe6d6", size = 75636465, upload-time = "2026-05-15T14:45:29.803Z" }, @@ -3795,54 +5008,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/c4/ab/d6722beeb2d10f7a3b9ff49375708904fde18f82b5609a0bc4aeb5996a4d/ollama-0.6.2-py3-none-any.whl", hash = "sha256:3ad7daab28e5a973445c36a73882a3ef698c2ebb00e21e308652741577509f7d", size = 15115, upload-time = "2026-04-29T21:21:13.794Z" }, ] -[[package]] -name = "onnxruntime" -version = "1.24.3" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.11'", -] -dependencies = [ - { name = "flatbuffers", marker = "python_full_version < '3.11'" }, - { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, - { name = "packaging", marker = "python_full_version < '3.11'" }, - { name = "protobuf", marker = "python_full_version < '3.11'" }, - { name = "sympy", marker = "python_full_version < '3.11'" }, -] -wheels = [ - { url = "https://files.pythonhosted.org/packages/15/41/3253db975a90c3ce1d475e2a230773a21cd7998537f0657947df6fb79861/onnxruntime-1.24.3-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:3e6456801c66b095c5cd68e690ca25db970ea5202bd0c5b84a2c3ef7731c5a3c", size = 17332766, upload-time = "2026-03-05T17:18:59.714Z" }, - { url = "https://files.pythonhosted.org/packages/7e/c5/3af6b325f1492d691b23844d88ed26844c1164620860c5efe95c0e22782d/onnxruntime-1.24.3-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8b2ebc54c6d8281dccff78d4b06e47d4cf07535937584ab759448390a70f4978", size = 15130330, upload-time = "2026-03-05T16:34:53.831Z" }, - { url = "https://files.pythonhosted.org/packages/03/4b/f96b46c1866a293ed23ca2cf5e5a63d413ad3a951da60dd877e3c56cbbca/onnxruntime-1.24.3-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fb56575d7794bf0781156955610c9e651c9504c64d42ec880784b6106244882d", size = 17213247, upload-time = "2026-03-05T17:17:59.812Z" }, - { url = "https://files.pythonhosted.org/packages/36/13/27cf4d8df2578747584e8758aeb0b673b60274048510257f1f084b15e80e/onnxruntime-1.24.3-cp311-cp311-win_amd64.whl", hash = "sha256:c958222ef9eff54018332beecd32d5d94a3ab079d8821937b333811bf4da0d39", size = 12595530, upload-time = "2026-03-05T17:18:49.356Z" }, - { url = "https://files.pythonhosted.org/packages/19/8c/6d9f31e6bae72a8079be12ed8ba36c4126a571fad38ded0a1b96f60f6896/onnxruntime-1.24.3-cp311-cp311-win_arm64.whl", hash = "sha256:a8f761857ebaf58a85b9e42422d03207f1d39e6bb8fecfdbf613bac5b9710723", size = 12261715, upload-time = "2026-03-05T17:18:39.699Z" }, - { url = "https://files.pythonhosted.org/packages/d0/7f/dfdc4e52600fde4c02d59bfe98c4b057931c1114b701e175aee311a9bc11/onnxruntime-1.24.3-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:0d244227dc5e00a9ae15a7ac1eba4c4460d7876dfecafe73fb00db9f1d914d91", size = 17342578, upload-time = "2026-03-05T17:19:02.403Z" }, - { url = "https://files.pythonhosted.org/packages/1c/dc/1f5489f7b21817d4ad352bf7a92a252bd5b438bcbaa7ad20ea50814edc79/onnxruntime-1.24.3-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0a9847b870b6cb462652b547bc98c49e0efb67553410a082fde1918a38707452", size = 15150105, upload-time = "2026-03-05T16:34:56.897Z" }, - { url = "https://files.pythonhosted.org/packages/28/7c/fd253da53594ab8efbefdc85b3638620ab1a6aab6eb7028a513c853559ce/onnxruntime-1.24.3-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b354afce3333f2859c7e8706d84b6c552beac39233bcd3141ce7ab77b4cabb5d", size = 17237101, upload-time = "2026-03-05T17:18:02.561Z" }, - { url = "https://files.pythonhosted.org/packages/71/5f/eaabc5699eeed6a9188c5c055ac1948ae50138697a0428d562ac970d7db5/onnxruntime-1.24.3-cp312-cp312-win_amd64.whl", hash = "sha256:44ea708c34965439170d811267c51281d3897ecfc4aa0087fa25d4a4c3eb2e4a", size = 12597638, upload-time = "2026-03-05T17:18:52.141Z" }, - { url = "https://files.pythonhosted.org/packages/cc/5c/d8066c320b90610dbeb489a483b132c3b3879b2f93f949fb5d30cfa9b119/onnxruntime-1.24.3-cp312-cp312-win_arm64.whl", hash = "sha256:48d1092b44ca2ba6f9543892e7c422c15a568481403c10440945685faf27a8d8", size = 12270943, upload-time = "2026-03-05T17:18:42.006Z" }, - { url = "https://files.pythonhosted.org/packages/51/8d/487ece554119e2991242d4de55de7019ac6e47ee8dfafa69fcf41d37f8ed/onnxruntime-1.24.3-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:34a0ea5ff191d8420d9c1332355644148b1bf1a0d10c411af890a63a9f662aa7", size = 17342706, upload-time = "2026-03-05T16:35:10.813Z" }, - { url = "https://files.pythonhosted.org/packages/dd/25/8b444f463c1ac6106b889f6235c84f01eec001eaf689c3eff8c69cf48fae/onnxruntime-1.24.3-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1fd2ec7bb0fabe42f55e8337cfc9b1969d0d14622711aac73d69b4bd5abb5ed7", size = 15149956, upload-time = "2026-03-05T16:34:59.264Z" }, - { url = "https://files.pythonhosted.org/packages/34/fc/c9182a3e1ab46940dd4f30e61071f59eee8804c1f641f37ce6e173633fb6/onnxruntime-1.24.3-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:df8e70e732fe26346faaeec9147fa38bef35d232d2495d27e93dd221a2d473a9", size = 17237370, upload-time = "2026-03-05T17:18:05.258Z" }, - { url = "https://files.pythonhosted.org/packages/05/7e/3b549e1f4538514118bff98a1bcd6481dd9a17067f8c9af77151621c9a5c/onnxruntime-1.24.3-cp313-cp313-win_amd64.whl", hash = "sha256:2d3706719be6ad41d38a2250998b1d87758a20f6ea4546962e21dc79f1f1fd2b", size = 12597939, upload-time = "2026-03-05T17:18:54.772Z" }, - { url = "https://files.pythonhosted.org/packages/80/41/9696a5c4631a0caa75cc8bc4efd30938fd483694aa614898d087c3ee6d29/onnxruntime-1.24.3-cp313-cp313-win_arm64.whl", hash = "sha256:b082f3ba9519f0a1a1e754556bc7e635c7526ef81b98b3f78da4455d25f0437b", size = 12270705, upload-time = "2026-03-05T17:18:44.774Z" }, - { url = "https://files.pythonhosted.org/packages/b7/65/a26c5e59e3b210852ee04248cf8843c81fe7d40d94cf95343b66efe7eec9/onnxruntime-1.24.3-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:72f956634bc2e4bd2e8b006bef111849bd42c42dea37bd0a4c728404fdaf4d34", size = 15161796, upload-time = "2026-03-05T16:35:02.871Z" }, - { url = "https://files.pythonhosted.org/packages/f3/25/2035b4aa2ccb5be6acf139397731ec507c5f09e199ab39d3262b22ffa1ac/onnxruntime-1.24.3-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:78d1f25eed4ab9959db70a626ed50ee24cf497e60774f59f1207ac8556399c4d", size = 17240936, upload-time = "2026-03-05T17:18:09.534Z" }, -] - [[package]] name = "onnxruntime" version = "1.26.0" source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.13'", - "python_full_version == '3.12.*'", - "python_full_version == '3.11.*'", -] dependencies = [ - { name = "flatbuffers", marker = "python_full_version >= '3.11'" }, - { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, - { name = "packaging", marker = "python_full_version >= '3.11'" }, - { name = "protobuf", marker = "python_full_version >= '3.11'" }, + { name = "flatbuffers" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" } }, + { name = "packaging" }, + { name = "protobuf" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/d4/81/29a9eb470994a75eb7b3ccf32be314d7c66675a00ac7b50294816cc2db27/onnxruntime-1.26.0-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:ee1109ef4ef27cad90e823399e61e03b3c6c7bfe0fb820b4baf3678c15be8b3c", size = 18005108, upload-time = "2026-05-08T19:08:11.728Z" }, @@ -3911,9 +5085,9 @@ name = "opencv-python-headless" version = "4.13.0.92" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and extra == 'extra-14-granite-switch-dev-vllm20') or (python_full_version >= '3.11' and extra == 'extra-14-granite-switch-tutorials') or (python_full_version >= '3.11' and extra == 'extra-14-granite-switch-vllm') or (python_full_version < '3.11' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or extra == 'extra-14-granite-switch-dev' or (extra != 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (extra != 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm')" }, - { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and python_full_version < '3.13' and extra == 'extra-14-granite-switch-dev-vllm20') or (python_full_version >= '3.11' and python_full_version < '3.13' and extra == 'extra-14-granite-switch-vllm20') or (python_full_version < '3.11' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20') or (python_full_version < '3.11' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (python_full_version < '3.11' and extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (python_full_version < '3.11' and extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm') or (python_full_version < '3.11' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (python_full_version < '3.11' and extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (python_full_version >= '3.13' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20') or (python_full_version >= '3.13' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (python_full_version >= '3.13' and extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (python_full_version >= '3.13' and extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm') or (python_full_version >= '3.13' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (python_full_version >= '3.13' and extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20')" }, - { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.13' and extra == 'extra-14-granite-switch-dev-vllm20') or (python_full_version >= '3.13' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20')" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-14-granite-switch-tutorials' or extra == 'extra-14-granite-switch-vllm' or extra == 'group-14-granite-switch-dev' or extra == 'group-14-granite-switch-test' or extra == 'group-14-granite-switch-vllm19'" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.13' and extra == 'extra-14-granite-switch-vllm20') or (python_full_version < '3.13' and extra == 'group-14-granite-switch-dev-vllm20') or (python_full_version < '3.13' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20')" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.13' and extra == 'extra-14-granite-switch-vllm20') or (python_full_version >= '3.13' and extra == 'group-14-granite-switch-dev-vllm20') or (python_full_version >= '3.13' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20')" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/79/42/2310883be3b8826ac58c3f2787b9358a2d46923d61f88fedf930bc59c60c/opencv_python_headless-4.13.0.92-cp37-abi3-macosx_13_0_arm64.whl", hash = "sha256:1a7d040ac656c11b8c38677cc8cccdc149f98535089dbe5b081e80a4e5903209", size = 46247192, upload-time = "2026-02-05T07:01:35.187Z" }, @@ -4058,12 +5232,9 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "huggingface-hub" }, { name = "ninja" }, - { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' or extra == 'extra-14-granite-switch-dev' or extra == 'extra-14-granite-switch-tutorials' or extra == 'extra-14-granite-switch-vllm'" }, - { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and python_full_version < '3.13' and extra == 'extra-14-granite-switch-dev-vllm20') or (python_full_version >= '3.11' and python_full_version < '3.13' and extra == 'extra-14-granite-switch-vllm20') or (python_full_version < '3.11' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20') or (python_full_version < '3.11' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (python_full_version < '3.11' and extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (python_full_version < '3.11' and extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm') or (python_full_version < '3.11' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (python_full_version < '3.11' and extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (python_full_version >= '3.13' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20') or (python_full_version >= '3.13' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (python_full_version >= '3.13' and extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (python_full_version >= '3.13' and extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm') or (python_full_version >= '3.13' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (python_full_version >= '3.13' and extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20')" }, - { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.13' and extra == 'extra-14-granite-switch-dev-vllm20') or (python_full_version >= '3.13' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm') or (python_full_version >= '3.11' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm') or (extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20')" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" } }, { name = "safetensors" }, - { name = "torch", version = "2.10.0", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-14-granite-switch-dev' or extra == 'extra-14-granite-switch-tutorials' or extra == 'extra-14-granite-switch-vllm'" }, - { name = "torch", version = "2.11.0", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-14-granite-switch-dev-vllm20' or (extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm')" }, + { name = "torch", version = "2.10.0", source = { registry = "https://pypi.org/simple" } }, ] 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 = [ @@ -4076,19 +5247,6 @@ version = "3.11.9" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/7e/0c/964746fcafbd16f8ff53219ad9f6b412b34f345c75f384ad434ceaadb538/orjson-3.11.9.tar.gz", hash = "sha256:4fef17e1f8722c11587a6ef18e35902450221da0028e65dbaaa543619e68e48f", size = 5599163, upload-time = "2026-05-06T15:11:08.309Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/10/5d/b95ca542a001135cc250a49370f282f578c8f4e46cc8617d73775297eea8/orjson-3.11.9-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:135869ef917b8704ea0a94e01620e0c05021c15c52036e4663baffe75e72f8ce", size = 228986, upload-time = "2026-05-06T15:09:14.765Z" }, - { url = "https://files.pythonhosted.org/packages/80/01/be33fbff646e22f93398429ea645f20d2097aea1a6cdc1e6628e70125f83/orjson-3.11.9-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:115ab5f5f4a0f203cc2a5f0fb09aee503a3f771aa08392949ab5ca230c4fbdbd", size = 132558, upload-time = "2026-05-06T15:09:17.431Z" }, - { url = "https://files.pythonhosted.org/packages/4e/61/73d49333bba660a075daccca10970dc6409ce1cf42ae4046646a19468aad/orjson-3.11.9-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4da3c38a2083ca4aaf9c2a36776cce3e9328e6647b10d118948f3cfb4913ffe4", size = 128213, upload-time = "2026-05-06T15:09:18.719Z" }, - { url = "https://files.pythonhosted.org/packages/1f/7d/30e844b3dac3f74aed66b1f984daf9db3c98c0328c03d965a9e8dc06449e/orjson-3.11.9-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:53b50b0e14084b8f7e29c5ce84c5af0f1160169b30d8a6914231d97d2fe297d4", size = 135430, upload-time = "2026-05-06T15:09:20.257Z" }, - { url = "https://files.pythonhosted.org/packages/16/64/bd815f5c610b3facc204f26ba94e87a9eb49b0d83de3d5fc1eee2402d91b/orjson-3.11.9-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:231742b4a11dad8d5380a435962c57e91b7c37b79be858f4ef1c0df1a259897e", size = 146178, upload-time = "2026-05-06T15:09:21.616Z" }, - { url = "https://files.pythonhosted.org/packages/c7/35/e744fd36c79b339d27beb06068b5a08a8882ef5418804d0ce545a31f718d/orjson-3.11.9-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:34fd2317602587321faab75ab76c623a0117e80841a6413654f04e47f339a8fb", size = 133068, upload-time = "2026-05-06T15:09:23.228Z" }, - { url = "https://files.pythonhosted.org/packages/2a/56/d54152b67b63a0b3e556cfc549d6ce84f74d7f425ddeadc6c8a74d913da7/orjson-3.11.9-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:71f3db16e69b667b132e0f305a833d5497da302d801508cbb051ed9a9819da47", size = 134217, upload-time = "2026-05-06T15:09:24.847Z" }, - { url = "https://files.pythonhosted.org/packages/0b/ee/66154baf69f71c7164a268a5e888908aec5a0819d13c81d5e2755a257758/orjson-3.11.9-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:0b34789fa0da61cf7bef0546b09c738fb195331e017e477096d129e9105ab03d", size = 141917, upload-time = "2026-05-06T15:09:26.647Z" }, - { url = "https://files.pythonhosted.org/packages/09/d3/c5824260ca8b9d7ba82648d042a3f8f4815d18c15bb98a1f30edd1bb2d83/orjson-3.11.9-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:87e4d4ab280b0c87424d47695bec2182caf8cfc17879ea78dab76680194abc13", size = 415356, upload-time = "2026-05-06T15:09:28.252Z" }, - { url = "https://files.pythonhosted.org/packages/64/cb/509c2e816fe4df641d93dc92f6a89adc8df3ada8ebdee2bd44aba3264c3c/orjson-3.11.9-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:ace6c58523302d3b97b6ac5c38a5298a54b473762b6be82726b4265c41029f92", size = 148112, upload-time = "2026-05-06T15:09:29.783Z" }, - { url = "https://files.pythonhosted.org/packages/db/b5/3ceae56d2e4962979eedb023ba6a46a4bb65f333960379be0ca470686220/orjson-3.11.9-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:97d0d932803c1b164fde11cb542a9efcb1e0f63b184537cca65887147906ff48", size = 137112, upload-time = "2026-05-06T15:09:31.432Z" }, - { url = "https://files.pythonhosted.org/packages/d7/7a/81fa3f2c7bef79b04cf2ab7838e5ac74b1f12511ceab979759b0275d6bb4/orjson-3.11.9-cp310-cp310-win32.whl", hash = "sha256:b3afcf569c15577a9fe64627292daa3e6b3a70f4fb77a5df246a87ec21681b94", size = 131706, upload-time = "2026-05-06T15:09:32.707Z" }, - { url = "https://files.pythonhosted.org/packages/ae/d8/b64600f9083c7f151ad39717a5877fccbeb0ef6d7efcb55f971ce00b6bee/orjson-3.11.9-cp310-cp310-win_amd64.whl", hash = "sha256:8697ab6a080a5c46edaad50e2bc5bd8c7ca5c66442d24104fa44ec74910a8244", size = 127282, upload-time = "2026-05-06T15:09:33.955Z" }, { url = "https://files.pythonhosted.org/packages/1e/51/3fb9e65ae76ee97bd611869a503fa3fc0a6e81dd8b737cf3003f682df7ff/orjson-3.11.9-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:f01c4818b3fc9b0da8e096722a84318071eaa118df35f6ed2344da0e73a5444f", size = 228522, upload-time = "2026-05-06T15:09:35.362Z" }, { url = "https://files.pythonhosted.org/packages/16/fa/9d54b07cb3f3b0bfd57841478e42d7a0ece4a9f49f9907eecf5a45461687/orjson-3.11.9-cp311-cp311-macosx_15_0_arm64.whl", hash = "sha256:3ebca4179031ee716ed076ffadc29428e900512f6fccee8614c9983157fcf19c", size = 128463, upload-time = "2026-05-06T15:09:37.063Z" }, { url = "https://files.pythonhosted.org/packages/88/b1/6ceafc2eefd0a553e3be77ce6c49d107e772485d9568629376171c50e634/orjson-3.11.9-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:48ee05097750de0ff69ed5b7bbcf0732182fd57a24043dcc2a1da780a5ead3a5", size = 132306, upload-time = "2026-05-06T15:09:38.299Z" }, @@ -4141,21 +5299,198 @@ name = "outlines-core" version = "0.2.11" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "python_full_version >= '3.13'", - "python_full_version == '3.12.*'", - "python_full_version == '3.11.*'", - "python_full_version < '3.11'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", ] sdist = { url = "https://files.pythonhosted.org/packages/1a/d3/e04e9145f8f806723dec9b9e5227ad695a3efcd3ced7794cf7c22b15df5e/outlines_core-0.2.11.tar.gz", hash = "sha256:dfce56f717ff5083e54cbcfdb66cad243365437fccbb5509adaa7e31e030f1d8", size = 197263, upload-time = "2025-05-19T10:12:51.719Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/cf/8f/83c83e2afd142067c7f3cf2e152809195eee72d6a9b6c8745f13b827273d/outlines_core-0.2.11-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:89d79d8454b321f60047541a896d410ca9db631d241960266c4fe839cf5cd1b1", size = 1961650, upload-time = "2025-05-19T10:11:53.12Z" }, - { url = "https://files.pythonhosted.org/packages/f5/e9/c6b99b4364b7026b71badc06b9809a2fc4154d6b0c475bc03ab4471f81e5/outlines_core-0.2.11-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:44d581893f8644da02db7be11887229a40d26077cbdd22072ad1ed1db0ad0b2d", size = 2133920, upload-time = "2025-05-19T10:11:55.15Z" }, - { url = "https://files.pythonhosted.org/packages/f7/b8/cfa2bd8e1260eb1870c42a1a34389e9673a12335d09004ea6f1c82266a5e/outlines_core-0.2.11-cp310-cp310-macosx_15_0_arm64.whl", hash = "sha256:e88b7f717915d91136d915adb65c2603d2aa6457ec3fc336884bdb0b28d3188a", size = 1960688, upload-time = "2025-05-19T10:11:56.773Z" }, - { url = "https://files.pythonhosted.org/packages/b9/02/4cffd04e360e315b060692bf1a80f84bac1671ef90f12daf765db6d68791/outlines_core-0.2.11-cp310-cp310-macosx_15_0_x86_64.whl", hash = "sha256:8c7ecdba2162e9b30b837251387c26b1a23f80f58d01d02e7600e4b1962c5333", size = 2130263, upload-time = "2025-05-19T10:11:58.1Z" }, - { url = "https://files.pythonhosted.org/packages/4e/85/69a450a486824026eca181a8d573aae3ecfdb25f0c2af852065dde17a372/outlines_core-0.2.11-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd5fcefd221c10c95ce74838869450c6fdbbe2f581f0ba27e57a95232bd88c3a", size = 2289453, upload-time = "2025-05-19T10:11:59.919Z" }, - { url = "https://files.pythonhosted.org/packages/d1/3c/d7cb3eac6870a68b9034854fbfa07e67abfa1fa0d92198b9fee83fe6d044/outlines_core-0.2.11-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:a3c7774b112106f3afe931c65637fb3e0725d43707ceff1d34d6899cf0fa8200", size = 2115289, upload-time = "2025-05-19T10:12:01.527Z" }, - { url = "https://files.pythonhosted.org/packages/cc/5f/4cef22e2cf1ec286bd78c0052a0fa7ecf8519144477e7d4e276cbd70c625/outlines_core-0.2.11-cp310-cp310-win32.whl", hash = "sha256:1cfbb4cdcf34be5c6b08d279928b2b1050ed4c5e96e6e8405e3e624305c6799e", size = 1768059, upload-time = "2025-05-19T10:12:03.058Z" }, - { url = "https://files.pythonhosted.org/packages/4a/3a/ce6aceb6545bb1e13cf05c1f34468c5c14c8c8be92cdabcf777b4bb067ef/outlines_core-0.2.11-cp310-cp310-win_amd64.whl", hash = "sha256:670c1c1fca26fb5c7f00dbb11d1f81cca4204863c3dfdeee82017a6846397bf9", size = 2062413, upload-time = "2025-05-19T10:12:05.097Z" }, { url = "https://files.pythonhosted.org/packages/4d/ca/d5e92e197b40f62deb46dcc55567a51c8bf37943df7bc6658d93f30740f1/outlines_core-0.2.11-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:e96b8d0b56afcd3b86f4efca466c578f3725da1148ef62423249c92993841762", size = 1961746, upload-time = "2025-05-19T10:12:06.723Z" }, { url = "https://files.pythonhosted.org/packages/02/b2/f3d6e7e37ebe1de3c345b53d8dc01e9b5c5f05b20e494fe94bf8972db4b0/outlines_core-0.2.11-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:d108ee8cd5e2fe71c2b0720b949d004901fec8bdb64bcd0c01b8abe38ab7ae1c", size = 2133815, upload-time = "2025-05-19T10:12:07.934Z" }, { url = "https://files.pythonhosted.org/packages/07/21/62a680da6941b53d765160d22bdcf35849c22b7a987f4e9e8b7db7885c9f/outlines_core-0.2.11-cp311-cp311-macosx_15_0_arm64.whl", hash = "sha256:ebf42ab5b7ae38235d3c3333b5cacd6e91449b87b8a48a85094ea28ad9de9878", size = 1960539, upload-time = "2025-05-19T10:12:09.23Z" }, @@ -4188,24 +5523,14 @@ version = "0.2.14" source = { registry = "https://pypi.org/simple" } resolution-markers = [ "python_full_version >= '3.13' and sys_platform == 'darwin'", - "python_full_version == '3.12.*' and sys_platform == 'darwin'", "python_full_version >= '3.13' and sys_platform != 'darwin'", + "python_full_version == '3.12.*' and sys_platform == 'darwin'", "python_full_version == '3.12.*' and sys_platform != 'darwin'", - "python_full_version == '3.11.*' and sys_platform == 'darwin'", - "python_full_version < '3.11' and sys_platform == 'darwin'", - "python_full_version == '3.11.*' and sys_platform != 'darwin'", - "python_full_version < '3.11' and sys_platform != 'darwin'", + "python_full_version < '3.12' and sys_platform == 'darwin'", + "python_full_version < '3.12' and sys_platform != 'darwin'", ] sdist = { url = "https://files.pythonhosted.org/packages/6a/04/4a0812eb27c086cfd2e66e7ec9150f33e105912a9b7f8b335e3479f03a06/outlines_core-0.2.14.tar.gz", hash = "sha256:64808deed1591ca3029ff64346ceb974cd5d780c916ea82504951fe83523039e", size = 191539, upload-time = "2026-01-09T15:59:10.016Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/d1/d0/e7719044b3ed57fde6f700211be67682eec4a2735fcf8d4199400ac8f7a3/outlines_core-0.2.14-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:056f656ea6e4807338963377afb50b9d936593ba3545a819f1aba56fd6e14920", size = 2050100, upload-time = "2026-01-09T15:58:07.323Z" }, - { url = "https://files.pythonhosted.org/packages/fb/ff/f41c933bc5b69b7080e763af375d7632d419859b6cd4492c5a12d5c89c80/outlines_core-0.2.14-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:c76f28feb6ea71b1ff4b0ba5901dc383273a32b156213dc1bc753fc634645a1e", size = 2200812, upload-time = "2026-01-09T15:58:08.876Z" }, - { url = "https://files.pythonhosted.org/packages/ab/3c/05b3e5b9fa4f7f40da459022b2292c6bca48492df920eebd3572844e7fe6/outlines_core-0.2.14-cp310-cp310-macosx_15_0_arm64.whl", hash = "sha256:e604925d6525f669253160568397df6d6c8124b2e01f1fde553e3b9f28ce9e21", size = 2050299, upload-time = "2026-01-09T15:58:10.176Z" }, - { url = "https://files.pythonhosted.org/packages/d6/ee/abcee1d35c7a7fde984ce4299de2db72add3c8a88a0f6e9e7f8c4836151d/outlines_core-0.2.14-cp310-cp310-macosx_15_0_x86_64.whl", hash = "sha256:f0e5037153b5b3abfb617f6dfdc3ff28b6fab50f0de5936ea6995f5675d23e0b", size = 2197822, upload-time = "2026-01-09T15:58:11.253Z" }, - { url = "https://files.pythonhosted.org/packages/19/cc/6f5d1b92e79b30c2ac187b23ab66b0365e06007a9405b35709d02e94615b/outlines_core-0.2.14-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0e4b5b7c8e50489bea444b095692ddb5d8fb92ea6b949c4a6a3381eca9b691a7", size = 2339071, upload-time = "2026-01-09T15:58:12.488Z" }, - { url = "https://files.pythonhosted.org/packages/66/f7/252c0d4ecc5020d698b23257b9860fbab020c1120c15417ed02a9fd82d19/outlines_core-0.2.14-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:b582b5d2f773cff966f37d7a5680d97506792647c93fb2e522283e8a14726e9d", size = 2236310, upload-time = "2026-01-09T15:58:13.942Z" }, - { url = "https://files.pythonhosted.org/packages/b6/60/5599fef9e4184a99684c9cc285081a1b5f4a741b2d6c676466a0ca365d39/outlines_core-0.2.14-cp310-cp310-win32.whl", hash = "sha256:f753edd430ac27e6dcde5a614665888db72b78c666aa160c478afd1eb986fb8b", size = 1841873, upload-time = "2026-01-09T15:58:15.282Z" }, - { url = "https://files.pythonhosted.org/packages/8b/5f/da4daf605ab9c26e854a741c3567eb717e8622d4d17bcd751da5238b039f/outlines_core-0.2.14-cp310-cp310-win_amd64.whl", hash = "sha256:060a0174a6262bfd378763f210e374e52011776849a3a767df9863fb6839c142", size = 2136404, upload-time = "2026-01-09T15:58:16.939Z" }, { url = "https://files.pythonhosted.org/packages/05/12/a67f0be9546776f71c5df373f38ce6db965abc9845fbcd291b393a20712e/outlines_core-0.2.14-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:7770b5e0497e6f4548a8923299d4438d7dd61dc17c2f58acfd5df4d3101bb991", size = 2050098, upload-time = "2026-01-09T15:58:18.399Z" }, { url = "https://files.pythonhosted.org/packages/34/31/f2e19cc32ea97c1bac4882dbfa693671175a330ad5a735af5b97c2258056/outlines_core-0.2.14-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:a2795dc2047821b229457f941a303639e0c14e4c3c5718797540a27b529a062e", size = 2200792, upload-time = "2026-01-09T15:58:19.775Z" }, { url = "https://files.pythonhosted.org/packages/e3/ea/19e859d4cfcbeceace30ad490f5369c87eab81767238593e20c17f55a390/outlines_core-0.2.14-cp311-cp311-macosx_15_0_arm64.whl", hash = "sha256:4daa22d677dc6a74c44f9266ec9e3151332dcea4250dd019ea0c75b98ae32938", size = 2050363, upload-time = "2026-01-09T15:58:20.981Z" }, @@ -4250,6 +5575,50 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/df/b2/87e62e8c3e2f4b32e5fe99e0b86d576da1312593b39f47d8ceef365e95ed/packaging-26.2-py3-none-any.whl", hash = "sha256:5fc45236b9446107ff2415ce77c807cee2862cb6fac22b8a73826d0693b0980e", size = 100195, upload-time = "2026-04-24T20:15:22.081Z" }, ] +[[package]] +name = "pandas" +version = "3.0.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" } }, + { name = "python-dateutil" }, + { name = "tzdata", marker = "sys_platform == 'emscripten' or sys_platform == 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/f8/87/4341c6252d1c47b08768c3d25ac487362bf403f0313ddae4a2a26c9b1b4c/pandas-3.0.3.tar.gz", hash = "sha256:696a4a00a2a2a35d4e5deb3fc946641b96c944f02230e4f76137fe35d806c4fc", size = 4651414, upload-time = "2026-05-11T18:54:29.21Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/42/16/b5c76b838fd9bf6ce84d3a53346b8874ec05c5f0040d75ef2c320100cd2a/pandas-3.0.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:455f6f8139d4282188f526868dbc3c828470e88a3d9d59a891bd46a455f21b98", size = 10338495, upload-time = "2026-05-11T18:52:11.558Z" }, + { url = "https://files.pythonhosted.org/packages/5a/b0/a4ffc4ae74d2d822200dcc46898987d8eb6032d1e2b219cae39da6f5cbcc/pandas-3.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4e15135e2ee5df1063313e2425ceef8ac0f4ae775893815b0923651b806a5639", size = 9938250, upload-time = "2026-05-11T18:52:17.005Z" }, + { url = "https://files.pythonhosted.org/packages/2e/b2/3323601a52caee42c019e370090ca4544b241437240ca04f786cce82b0cf/pandas-3.0.3-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:05f1f1752b8533ea03f7f39a9c15b1a058d067bb48f4748948e7a8691e0510f2", size = 10770558, upload-time = "2026-05-11T18:52:19.865Z" }, + { url = "https://files.pythonhosted.org/packages/32/f1/bbecd2f867b97abebe0f9b53d750f862251b40337e061b36676ded3d920f/pandas-3.0.3-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8a1e45c80cceb3b4a21bc5939d52e8cbd8d9b7305309219d59e9754d9ce09e27", size = 11274611, upload-time = "2026-05-11T18:52:22.622Z" }, + { url = "https://files.pythonhosted.org/packages/7f/4f/eafabf2d5fae5adf143b4d18d3706c5efdc368a7c4eb1ee8a3eddabbd0f6/pandas-3.0.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:14da8316da4d0c5a77618425996bfb1248ca87fc2c1486e6fde4652bd18b5824", size = 11784670, upload-time = "2026-05-11T18:52:25.4Z" }, + { url = "https://files.pythonhosted.org/packages/49/44/1eb20389301b57b19cc099a1c2f662501f72f08a65f912d05822613c1532/pandas-3.0.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a55066a0505dae0ba2b50a46637db34b46f9094c65c5d4800794ef6335010938", size = 12353708, upload-time = "2026-05-11T18:52:28.139Z" }, + { url = "https://files.pythonhosted.org/packages/eb/62/c321f13b5ba1819fc8dca456c7fce578da2dcfecff1abbf0eaddf8406c0f/pandas-3.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:6674ab18ad8c57802867264b00e15e7bb904700cdd9046e3b2fa1fce237439ea", size = 9907609, upload-time = "2026-05-11T18:52:30.982Z" }, + { url = "https://files.pythonhosted.org/packages/53/85/1b7f563ebc6357c27233a02a96b589bcce1fa9c6eb89fb4f0e56421d277e/pandas-3.0.3-cp311-cp311-win_arm64.whl", hash = "sha256:5cc09a68b3120e0f54870dede8287a7bb1fa463907e4fcec1ea77cab6179bf7a", size = 9165596, upload-time = "2026-05-11T18:52:33.334Z" }, + { url = "https://files.pythonhosted.org/packages/24/f1/392f8c5bfc16f66a0d2d41561c01627c228fe7ed2a0d056ef11315042570/pandas-3.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:fed2ff7fd9779120e388e285fc029bd5cf9490cdd2e4166a9ee22c0e49a9ab09", size = 10357846, upload-time = "2026-05-11T18:52:36.143Z" }, + { url = "https://files.pythonhosted.org/packages/cf/3d/b16412745651e855f357e5e66930248688378853a6e2698a214e331fba1f/pandas-3.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b168fc218fd80a6cbdbdbc1a97ddc7889ed057d7eb45f50d866ceab5f39904c4", size = 9899550, upload-time = "2026-05-11T18:52:38.976Z" }, + { url = "https://files.pythonhosted.org/packages/31/a8/fa2535168fffcedf67f4f6de28d2dd903a747ca7c8ea6989451aaeb3a92f/pandas-3.0.3-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0383c72c75cdcca61a9e116e611143902dbfd08bff356829c2f6d1cf40a9ca8c", size = 10412965, upload-time = "2026-05-11T18:52:41.915Z" }, + { url = "https://files.pythonhosted.org/packages/65/b6/09b01cdbc15224e2850365192d17b7bdebb8bdbd8780ed221fcdf0d9a515/pandas-3.0.3-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6dc0b3fd2169c9157deed50b4d519553a3655c8c6a96027136d654592be973a9", size = 10894600, upload-time = "2026-05-11T18:52:45.02Z" }, + { url = "https://files.pythonhosted.org/packages/c9/a4/2eb28f2fccb4ced4a2c79ab2a5dee9ade1ebf44922ebad6fea158c9f95d4/pandas-3.0.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:7e65d5407dc0b394f509699650e4a2ec01c0514f21850f453fa60f3be79a5dbf", size = 11422824, upload-time = "2026-05-11T18:52:48.058Z" }, + { url = "https://files.pythonhosted.org/packages/f8/45/830bb57f533a4604b355e07edcb8ea18cf88b5f94e5fca92f27052d7c597/pandas-3.0.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:f8894dc474d648fe7b6ff0ca9b0bd73950d19952bc1a6534540762c5d79d305c", size = 11950889, upload-time = "2026-05-11T18:52:50.905Z" }, + { url = "https://files.pythonhosted.org/packages/b9/c5/fc1b368f303087d20e8c9bf3d6ceb186263cfac0ade735cd938538bea839/pandas-3.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:c7be265b62cef88e253a941e4698604973736dcfe242fdb5198f0f7bc473cdcc", size = 9755463, upload-time = "2026-05-11T18:52:53.386Z" }, + { url = "https://files.pythonhosted.org/packages/86/bd/fda8f9705b1b09c6ebe14bfc0fa0e4ec8584d54ea673628f157ff55131af/pandas-3.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:557409bc4178e70ee8d9ddb494798e51ebf6ea59330f6be22c51bab2a7db6c49", size = 9066158, upload-time = "2026-05-11T18:52:56.038Z" }, + { url = "https://files.pythonhosted.org/packages/c5/90/62d8302883c44308c477e222c3daf7c813a34c8e96985882fbd53d964352/pandas-3.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:67b3b64c11910cfa29f4e94a14d3bff9ee693b6fc76055e7cad549cee0aec5fa", size = 10331071, upload-time = "2026-05-11T18:52:58.838Z" }, + { url = "https://files.pythonhosted.org/packages/7f/ae/6a6493c783a101f165e4356953ba3c74d6f77f0042fa7d753da9dfbb640c/pandas-3.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:39436b377d56d2a2e52d0395bdbee171f01068e99af5250509aceeb929f765c7", size = 9875690, upload-time = "2026-05-11T18:53:01.431Z" }, + { url = "https://files.pythonhosted.org/packages/62/7c/5df8e9f56c69a2769fbe9382a5ef8f2658c007e376434e1e2cbb57ad895f/pandas-3.0.3-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d4be06d68f9ddcfc645b87534911da79a8fbffc7573c80e0edcf42a5020624d8", size = 10381634, upload-time = "2026-05-11T18:53:04.393Z" }, + { url = "https://files.pythonhosted.org/packages/99/68/1237369725aa617bb358263d535803e3053fdbc593513ec5ed9c9896b5b6/pandas-3.0.3-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a4eeb6830daf35a71cc09649bd823e2b542dac246cdee9614c6e4bd65028cd6a", size = 10891243, upload-time = "2026-05-11T18:53:07.643Z" }, + { url = "https://files.pythonhosted.org/packages/25/93/77d108e8af7222b4a503ebde0e30215b1c2e4f8e53a526431890f22d5586/pandas-3.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:1928e07221f82db493cd4af1e23c1bfca524a19a4699887975bff68f49a72bfb", size = 11388659, upload-time = "2026-05-11T18:53:10.634Z" }, + { url = "https://files.pythonhosted.org/packages/d0/bd/eff5b4399f332ac386c853f6cd2bd3fa2ca0061b9f36ecd9c4d7c4265649/pandas-3.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:51b1fe551acb77dac643c6fda86084d8d446c10fe64b06a9cc29c4cc8540e7f2", size = 11942880, upload-time = "2026-05-11T18:53:13.536Z" }, + { url = "https://files.pythonhosted.org/packages/2c/20/559ace4200982c3887d0b86bfd0d856a2143ef8ddab63cc07934951a964c/pandas-3.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:a82d532a3351d435432cd913edbccaf8b8e01d4dd0e5ced5a8d2e8ecd94c7e44", size = 9757091, upload-time = "2026-05-11T18:53:16.306Z" }, + { url = "https://files.pythonhosted.org/packages/3a/66/69055a09fe200f29f922a3eeec4804611900b95f52d932ece3393c3c0c19/pandas-3.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:275c14e0fce14a2ec20eee474aecd305478ea3c1e6f6a9d8fe219a165542717e", size = 9057282, upload-time = "2026-05-11T18:53:18.768Z" }, + { url = "https://files.pythonhosted.org/packages/57/0e/efe801b0e6811e8e650cd21b7f2608e30f08a7067e2bf6e8752b0d56ee3c/pandas-3.0.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:46997386d528eb40376ecd6b033cf4a8a1e5282580f68f43de875b78cba2199d", size = 10767016, upload-time = "2026-05-11T18:53:21.227Z" }, + { url = "https://files.pythonhosted.org/packages/ea/dc/eb55135a1d5f0f0519f28da1f609a206d2cad1f9c35c32d51e38dd7261ae/pandas-3.0.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:261e308dfb22448384b7580cf719d2f998fe2966c92893c3e77d14008af1f066", size = 10420210, upload-time = "2026-05-11T18:53:23.982Z" }, + { url = "https://files.pythonhosted.org/packages/c6/3e/b1d5d955ce33ffecb407465a60bc32769d74fcf68224b7ae67ae11d4dea4/pandas-3.0.3-cp313-cp313t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:dd1a5d1def6a46002e964510bdc67c368aa0951df5d1d9f8365336f5a1f490cd", size = 10336126, upload-time = "2026-05-11T18:53:26.731Z" }, + { url = "https://files.pythonhosted.org/packages/f5/76/a01261711ab60a22d71b862f0de20e4c504bf80457270ad8cb42110f6abc/pandas-3.0.3-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d72828c20c6d6e83e1e22a6a3b47b326b71664112fa9705dcbccfd7a39b62085", size = 10728051, upload-time = "2026-05-11T18:53:29.125Z" }, + { url = "https://files.pythonhosted.org/packages/e9/21/ea191195e587b18cf682e97f433f81b2d0fbe341380e80a3e0d6e4403c8e/pandas-3.0.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:d26cbe1fcfc12e8fd900e2454163e466b2d3af84f7c75481df7683ffc073d870", size = 11350796, upload-time = "2026-05-11T18:53:32.056Z" }, + { url = "https://files.pythonhosted.org/packages/64/69/f0eaaf54939f0e8c6768fd06be9af2cef9b36048b96dfb9e1b2c685a807e/pandas-3.0.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:3e91cec1879ada0624fc3dc9953c5cbd60208e59c0db28f540c5d6d47502422f", size = 11799741, upload-time = "2026-05-11T18:53:34.985Z" }, + { url = "https://files.pythonhosted.org/packages/45/a4/865e0e510cae5fc2194de4db28be638952de942571ba9125934fd9c01d47/pandas-3.0.3-cp313-cp313t-win_amd64.whl", hash = "sha256:08d789b41f87e0905880e293cedf6197ce71fe67cc081358b1e148a491b9bd13", size = 10499958, upload-time = "2026-05-11T18:53:37.857Z" }, +] + [[package]] name = "parso" version = "0.8.7" @@ -4286,17 +5655,6 @@ version = "12.2.0" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/8c/21/c2bcdd5906101a30244eaffc1b6e6ce71a31bd0742a01eb89e660ebfac2d/pillow-12.2.0.tar.gz", hash = "sha256:a830b1a40919539d07806aa58e1b114df53ddd43213d9c8b75847eee6c0182b5", size = 46987819, upload-time = "2026-04-01T14:46:17.687Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/3a/aa/d0b28e1c811cd4d5f5c2bfe2e022292bd255ae5744a3b9ac7d6c8f72dd75/pillow-12.2.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:a4e8f36e677d3336f35089648c8955c51c6d386a13cf6ee9c189c5f5bd713a9f", size = 5354355, upload-time = "2026-04-01T14:42:15.402Z" }, - { url = "https://files.pythonhosted.org/packages/27/8e/1d5b39b8ae2bd7650d0c7b6abb9602d16043ead9ebbfef4bc4047454da2a/pillow-12.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2e589959f10d9824d39b350472b92f0ce3b443c0a3442ebf41c40cb8361c5b97", size = 4695871, upload-time = "2026-04-01T14:42:18.234Z" }, - { url = "https://files.pythonhosted.org/packages/f0/c5/dcb7a6ca6b7d3be41a76958e90018d56c8462166b3ef223150360850c8da/pillow-12.2.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:a52edc8bfff4429aaabdf4d9ee0daadbbf8562364f940937b941f87a4290f5ff", size = 6269734, upload-time = "2026-04-01T14:42:20.608Z" }, - { url = "https://files.pythonhosted.org/packages/ea/f1/aa1bb13b2f4eba914e9637893c73f2af8e48d7d4023b9d3750d4c5eb2d0c/pillow-12.2.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:975385f4776fafde056abb318f612ef6285b10a1f12b8570f3647ad0d74b48ec", size = 8076080, upload-time = "2026-04-01T14:42:23.095Z" }, - { url = "https://files.pythonhosted.org/packages/a1/2a/8c79d6a53169937784604a8ae8d77e45888c41537f7f6f65ed1f407fe66d/pillow-12.2.0-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bd9c0c7a0c681a347b3194c500cb1e6ca9cab053ea4d82a5cf45b6b754560136", size = 6382236, upload-time = "2026-04-01T14:42:25.82Z" }, - { url = "https://files.pythonhosted.org/packages/b5/42/bbcb6051030e1e421d103ce7a8ecadf837aa2f39b8f82ef1a8d37c3d4ebc/pillow-12.2.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:88d387ff40b3ff7c274947ed3125dedf5262ec6919d83946753b5f3d7c67ea4c", size = 7070220, upload-time = "2026-04-01T14:42:28.68Z" }, - { url = "https://files.pythonhosted.org/packages/3f/e1/c2a7d6dd8cfa6b231227da096fd2d58754bab3603b9d73bf609d3c18b64f/pillow-12.2.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:51c4167c34b0d8ba05b547a3bb23578d0ba17b80a5593f93bd8ecb123dd336a3", size = 6493124, upload-time = "2026-04-01T14:42:31.579Z" }, - { url = "https://files.pythonhosted.org/packages/5f/41/7c8617da5d32e1d2f026e509484fdb6f3ad7efaef1749a0c1928adbb099e/pillow-12.2.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:34c0d99ecccea270c04882cb3b86e7b57296079c9a4aff88cb3b33563d95afaa", size = 7194324, upload-time = "2026-04-01T14:42:34.615Z" }, - { url = "https://files.pythonhosted.org/packages/2d/de/a777627e19fd6d62f84070ee1521adde5eeda4855b5cf60fe0b149118bca/pillow-12.2.0-cp310-cp310-win32.whl", hash = "sha256:b85f66ae9eb53e860a873b858b789217ba505e5e405a24b85c0464822fe88032", size = 6376363, upload-time = "2026-04-01T14:42:37.19Z" }, - { url = "https://files.pythonhosted.org/packages/e7/34/fc4cb5204896465842767b96d250c08410f01f2f28afc43b257de842eed5/pillow-12.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:673aa32138f3e7531ccdbca7b3901dba9b70940a19ccecc6a37c77d5fdeb05b5", size = 7083523, upload-time = "2026-04-01T14:42:39.62Z" }, - { url = "https://files.pythonhosted.org/packages/2d/a0/32852d36bc7709f14dc3f64f929a275e958ad8c19a6deba9610d458e28b3/pillow-12.2.0-cp310-cp310-win_arm64.whl", hash = "sha256:3e080565d8d7c671db5802eedfb438e5565ffa40115216eabb8cd52d0ecce024", size = 2463318, upload-time = "2026-04-01T14:42:42.063Z" }, { url = "https://files.pythonhosted.org/packages/68/e1/748f5663efe6edcfc4e74b2b93edfb9b8b99b67f21a854c3ae416500a2d9/pillow-12.2.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:8be29e59487a79f173507c30ddf57e733a357f67881430449bb32614075a40ab", size = 5354347, upload-time = "2026-04-01T14:42:44.255Z" }, { url = "https://files.pythonhosted.org/packages/47/a1/d5ff69e747374c33a3b53b9f98cca7889fce1fd03d79cdc4e1bccc6c5a87/pillow-12.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:71cde9a1e1551df7d34a25462fc60325e8a11a82cc2e2f54578e5e9a1e153d65", size = 4695873, upload-time = "2026-04-01T14:42:46.452Z" }, { url = "https://files.pythonhosted.org/packages/df/21/e3fbdf54408a973c7f7f89a23b2cb97a7ef30c61ab4142af31eee6aebc88/pillow-12.2.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:f490f9368b6fc026f021db16d7ec2fbf7d89e2edb42e8ec09d2c60505f5729c7", size = 6280168, upload-time = "2026-04-01T14:42:49.228Z" }, @@ -4353,6 +5711,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/bc/60/5382c03e1970de634027cee8e1b7d39776b778b81812aaf45b694dfe9e28/pillow-12.2.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:bfa9c230d2fe991bed5318a5f119bd6780cda2915cca595393649fc118ab895e", size = 7080946, upload-time = "2026-04-01T14:46:11.734Z" }, ] +[[package]] +name = "platformdirs" +version = "4.10.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d7/47/e4501f49c178ae1d9f4a75073fda4204f52647993f075a9db4d14930e0c5/platformdirs-4.10.0.tar.gz", hash = "sha256:31e761a6a0ca04faf7353ea759bdba55652be214725111e5aac52dfa29d4bef7", size = 31224, upload-time = "2026-05-28T03:32:53.587Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/81/e6/cd9575ac904136b3cbf7aa7ee819ef86eedb7274e46f230e94ea4342e729/platformdirs-4.10.0-py3-none-any.whl", hash = "sha256:fb516cdb12eb0d857d0cd85a7c57cea4d060bee4578d6cf5a14dfdf8cbf8784a", size = 22743, upload-time = "2026-05-28T03:32:52.175Z" }, +] + [[package]] name = "pluggy" version = "1.6.0" @@ -4362,6 +5729,20 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl", hash = "sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746", size = 20538, upload-time = "2025-05-15T12:30:06.134Z" }, ] +[[package]] +name = "pooch" +version = "1.9.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "packaging" }, + { name = "platformdirs" }, + { name = "requests" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/83/43/85ef45e8b36c6a48546af7b266592dc32d7f67837a6514d111bced6d7d75/pooch-1.9.0.tar.gz", hash = "sha256:de46729579b9857ffd3e741987a2f6d5e0e03219892c167c6578c0091fb511ed", size = 61788, upload-time = "2026-01-30T19:15:09.649Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2a/2d/d4bf65e47cea8ff2c794a600c4fd1273a7902f268757c531e0ee9f18aa58/pooch-1.9.0-py3-none-any.whl", hash = "sha256:f265597baa9f760d25ceb29d0beb8186c243d6607b0f60b83ecf14078dbc703b", size = 67175, upload-time = "2026-01-30T19:15:08.36Z" }, +] + [[package]] name = "prometheus-client" version = "0.25.0" @@ -4402,23 +5783,6 @@ version = "0.5.2" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/ec/44/c87281c333769159c50594f22610f77398a47ccbfbbf23074e744e86f87c/propcache-0.5.2.tar.gz", hash = "sha256:01c4fc7480cd0598bb4b57022df55b9ca296da7fc5a8760bd8451a7e63a7d427", size = 50208, upload-time = "2026-05-08T21:02:12.199Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/5b/56/030b7b4719d53085722893e0009dffb9236aa10bca1b12121bdc5626ef16/propcache-0.5.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d5a81be28596d6559f6131ef33e10200de6e17643b3c74ce03f9eb103be6ae8b", size = 93417, upload-time = "2026-05-08T20:59:15.597Z" }, - { url = "https://files.pythonhosted.org/packages/1a/55/1140a8e067b8ec093a18a4ae7bb0045d9db65da38a08618ddc5e2f1994aa/propcache-0.5.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:29cbaac5ea0212663e6845e04b5e188d5a6ae6dd919810ac835bf1d3b42c3f4c", size = 53847, upload-time = "2026-05-08T20:59:17.096Z" }, - { url = "https://files.pythonhosted.org/packages/20/42/0e7443c90310498561addf346e7d57fe3c6ba1914e1ba938b5464c7bbfd2/propcache-0.5.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6bf3be92233808fcd338eba0fb4d0b59ec5772af4f4ecfcec450d1bfc0f8b5eb", size = 53512, upload-time = "2026-05-08T20:59:18.64Z" }, - { url = "https://files.pythonhosted.org/packages/b7/db/cf51a71bab2009517d1a7f0ee07657e3bd446c4d69f67e6966cf17bcf956/propcache-0.5.2-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2f8ea531c794b9d6274acd4e8d2c2ebcac590a4361d27482edd3010b79f1325e", size = 58068, upload-time = "2026-05-08T20:59:20.683Z" }, - { url = "https://files.pythonhosted.org/packages/b7/43/39b6bdee9699fa1e1641c519feeb64a67e2a9f93bb465c70776b37a7333f/propcache-0.5.2-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:decfca4c79dd53ebab484b00cc4b6717d8c369f86e74aa4ca395a64ac651495e", size = 61020, upload-time = "2026-05-08T20:59:22.112Z" }, - { url = "https://files.pythonhosted.org/packages/26/0b/843726fbb0a29a8c5684fdb25971823638399f31e52e9d1f06a02dc9aa6b/propcache-0.5.2-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:4621064bbf28fa77ff64dd5d94367c04684c67d3a5bf1dff25f0cd0d98a38f3b", size = 62732, upload-time = "2026-05-08T20:59:23.805Z" }, - { url = "https://files.pythonhosted.org/packages/39/6e/899fed76dc1942b8a64193a4f059d7f1a2c7ef65085e8a9366ed8ec0d199/propcache-0.5.2-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b96db7141a592cbc968daf1feea83a118e6ab378af4abbc72b248c895414c22d", size = 60140, upload-time = "2026-05-08T20:59:25.389Z" }, - { url = "https://files.pythonhosted.org/packages/ab/09/3da4be9b5b879219ad234aa535b3dd4a080ed1ad48d3a73ca07a9e798f22/propcache-0.5.2-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:1ca071adabaab6e9219924bbe00af821f1ee7de113a9eca1cdc292de3d120f4d", size = 60400, upload-time = "2026-05-08T20:59:27.238Z" }, - { url = "https://files.pythonhosted.org/packages/60/2f/09b72b874a9aa0044faf52a69807a6ed618e267ceaa9ec4a63195fa5b504/propcache-0.5.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:e4294d04a94dcab1b3bccd8b66d962dcad411a1d19414b2a41d1445f1de32ad0", size = 58155, upload-time = "2026-05-08T20:59:28.48Z" }, - { url = "https://files.pythonhosted.org/packages/8a/37/97489848c54c95578045473954f10956d619ce6a09e7ac137b71cdcb698b/propcache-0.5.2-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:a0e399a2eccb91ed18721f86aa85757727400b6865c89e88934781deb9c8498b", size = 57037, upload-time = "2026-05-08T20:59:30.146Z" }, - { url = "https://files.pythonhosted.org/packages/22/db/6c695285ccfc49012743ee9c98212b8c5dd0aed7b63cfd816d4a0f7a1601/propcache-0.5.2-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:823581fd5cb08b12a48bfa11fe962a7916766b6170c17b028fbdf762b85eb9bf", size = 61103, upload-time = "2026-05-08T20:59:31.626Z" }, - { url = "https://files.pythonhosted.org/packages/98/a9/1e500401ca593b0bdb6bf75a70bc2d723835fd53360edff6af70692c7546/propcache-0.5.2-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:949c91d1a990cf3b2e8188dfcfb25005e0b834a06c63fa4ef9f360878ce21ecf", size = 60394, upload-time = "2026-05-08T20:59:32.829Z" }, - { url = "https://files.pythonhosted.org/packages/1f/87/f638b6e375eae0f30a1a2325d8b34fd85fdc785bb9960cf805f3bf1ec69a/propcache-0.5.2-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:cc1177027eda740fdb152706bd215a3f124e3eea15afc39f2cb9fe351b50619e", size = 63084, upload-time = "2026-05-08T20:59:35.964Z" }, - { url = "https://files.pythonhosted.org/packages/f6/18/884573f5d97b6d9eba68de759a82c901b7e39d7904d30f7b8d58d42d2a12/propcache-0.5.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:b05d643f944a8c3c4bd86d65ffd87bf3264b617f87791940302bc474d2ff5274", size = 60999, upload-time = "2026-05-08T20:59:38.481Z" }, - { url = "https://files.pythonhosted.org/packages/8f/1a/c3915eb059ceec9e758a56e4cfd955292bc0f201be2176a46b76d94b303a/propcache-0.5.2-cp310-cp310-win32.whl", hash = "sha256:8114f28879e0904748e831c3a7774261bd9e75f49be089f389a76f959dcd13fe", size = 39036, upload-time = "2026-05-08T20:59:40.323Z" }, - { url = "https://files.pythonhosted.org/packages/5b/02/1dfd5607501a602d19c1c449d2d193b7d1c611f9246b4059026a1189a80e/propcache-0.5.2-cp310-cp310-win_amd64.whl", hash = "sha256:5fcb98e7598b1ee0addab320d90f65b530297a867dbfe9de52ea838077e16e3d", size = 42190, upload-time = "2026-05-08T20:59:42.232Z" }, - { url = "https://files.pythonhosted.org/packages/57/93/f71588ad08b3e6f4b555b5ef215808a3c02b042d0151ad82fa6f15be677a/propcache-0.5.2-cp310-cp310-win_arm64.whl", hash = "sha256:04dc2390d9edbbaef7461f33322555976ffddf0b650a038649d026358714e6c5", size = 38545, upload-time = "2026-05-08T20:59:44.087Z" }, { url = "https://files.pythonhosted.org/packages/e7/f1/8a8cc1c2c7e7934ab77e0163414f736fadbc0f5e8dd9673b952355ac175b/propcache-0.5.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:74b70780220e2dd89175ca24b81b68b67c83db499ae611e7f2313cb329801c78", size = 90744, upload-time = "2026-05-08T20:59:45.799Z" }, { url = "https://files.pythonhosted.org/packages/c2/f4/651b1225e976bd1a2ba5cfba0c29d096581c2636b437e3a9a7ab6276270a/propcache-0.5.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a4840ab0ae0216d952f4b53dc6d0b992bfc2bedbfe360bdd9b548bc184c08959", size = 52033, upload-time = "2026-05-08T20:59:47.408Z" }, { url = "https://files.pythonhosted.org/packages/15/a8/8ede85d6aa1f79fc7dc2f8fd2c8d65920b8272c3892903c8a1affde48cfb/propcache-0.5.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c6844ba6364fb12f403928a82cfd295ab103a2b315c77c747b2dbe4a41894ea7", size = 52754, upload-time = "2026-05-08T20:59:49.202Z" }, @@ -4554,31 +5918,48 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/e0/a9/023730ba63db1e494a271cb018dcd361bd2c917ba7004c3e49d5daf795a2/py_cpuinfo-9.0.0-py3-none-any.whl", hash = "sha256:859625bc251f64e21f077d099d4162689c762b5d6a4c3c97553d56241c9674d5", size = 22335, upload-time = "2022-10-25T20:38:27.636Z" }, ] +[[package]] +name = "pyarrow" +version = "24.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/91/13/13e1069b351bdc3881266e11147ffccf687505dbb0ea74036237f5d454a5/pyarrow-24.0.0.tar.gz", hash = "sha256:85fe721a14dd823aca09127acbb06c3ca723efbd436c004f16bca601b04dcc83", size = 1180261, upload-time = "2026-04-21T10:51:25.837Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/62/c9/a47ab7ece0d86cbe6678418a0fbd1ac4bb493b9184a3891dfa0e7f287ae0/pyarrow-24.0.0-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:b0e131f880cda8d04e076cee175a46fc0e8bc8b65c99c6c09dff6669335fde74", size = 35068898, upload-time = "2026-04-21T10:46:36.599Z" }, + { url = "https://files.pythonhosted.org/packages/d1/bc/8db86617a9a58008acf8913d6fed68ea2a46acb6de928db28d724c891a68/pyarrow-24.0.0-cp311-cp311-macosx_12_0_x86_64.whl", hash = "sha256:1b2fe7f9a5566401a0ef2571f197eb92358925c1f0c8dba305d6e43ea0871bb3", size = 36679915, upload-time = "2026-04-21T10:46:42.602Z" }, + { url = "https://files.pythonhosted.org/packages/eb/8e/fb178720400ef69db251eb4a9c3ccf4af269bc1feb5055529b8fc87170d1/pyarrow-24.0.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:0b3537c00fb8d384f15ac1e79b6eb6db04a16514c8c1d22e59a9b95c8ba42868", size = 45697931, upload-time = "2026-04-21T10:46:48.403Z" }, + { url = "https://files.pythonhosted.org/packages/f3/27/99c42abe8e21b44f4917f62631f3aa31404882a2c41d8a4cd5c110e13d52/pyarrow-24.0.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:14e31a3c9e35f1ab6356c6378f6f72830e6d2d5f1791df3774a7b097d18a6a1e", size = 48837449, upload-time = "2026-04-21T10:46:55.329Z" }, + { url = "https://files.pythonhosted.org/packages/36/b6/333749e2666e9032891125bf9c691146e92901bece62030ac1430e2e7c88/pyarrow-24.0.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:b7d9a514e73bc42711e6a35aaccf3587c520024fe0a25d830a1a8a27c15f4f57", size = 49395949, upload-time = "2026-04-21T10:47:01.869Z" }, + { url = "https://files.pythonhosted.org/packages/17/25/c5201706a2dd374e8ba6ee3fd7a8c89fb7ffc16eed5217a91fd2bd7f7626/pyarrow-24.0.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b196eb3f931862af3fa84c2a253514d859c08e0d8fe020e07be12e75a5a9780c", size = 51912986, upload-time = "2026-04-21T10:47:09.872Z" }, + { url = "https://files.pythonhosted.org/packages/f8/d2/4d1bbba65320b21a49678d6fbdc6ff7c649251359fdcfc03568c4136231d/pyarrow-24.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:35405aecb474e683fb36af650618fd5340ee5471fc65a21b36076a18bbc6c981", size = 27255371, upload-time = "2026-04-21T10:47:15.943Z" }, + { url = "https://files.pythonhosted.org/packages/b4/a9/9686d9f07837f91f775e8932659192e02c74f9d8920524b480b85212cc68/pyarrow-24.0.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:6233c9ed9ab9d1db47de57d9753256d9dcffbf42db341576099f0fd9f6bf4810", size = 34981559, upload-time = "2026-04-21T10:47:22.17Z" }, + { url = "https://files.pythonhosted.org/packages/80/b6/0ddf0e9b6ead3474ab087ae598c76b031fc45532bf6a63f3a553440fb258/pyarrow-24.0.0-cp312-cp312-macosx_12_0_x86_64.whl", hash = "sha256:f7616236ec1bc2b15bfdec22a71ab38851c86f8f05ff64f379e1278cf20c634a", size = 36663654, upload-time = "2026-04-21T10:47:28.315Z" }, + { url = "https://files.pythonhosted.org/packages/7c/3b/926382efe8ce27ba729071d3566ade6dfb86bdf112f366000196b2f5780a/pyarrow-24.0.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:1617043b99bd33e5318ae18eb2919af09c71322ef1ca46566cdafc6e6712fb66", size = 45679394, upload-time = "2026-04-21T10:47:34.821Z" }, + { url = "https://files.pythonhosted.org/packages/b3/7a/829f7d9dfd37c207206081d6dad474d81dde29952401f07f2ba507814818/pyarrow-24.0.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:6165461f55ef6314f026de6638d661188e3455d3ec49834556a0ebbdbace18bb", size = 48863122, upload-time = "2026-04-21T10:47:42.056Z" }, + { url = "https://files.pythonhosted.org/packages/5f/e8/f88ce625fe8babaae64e8db2d417c7653adb3019b08aae85c5ed787dc816/pyarrow-24.0.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3b13dedfe76a0ad2d1d859b0811b53827a4e9d93a0bcb05cf59333ab4980cc7e", size = 49376032, upload-time = "2026-04-21T10:47:48.967Z" }, + { url = "https://files.pythonhosted.org/packages/36/7a/82c363caa145fff88fb475da50d3bf52bb024f61917be5424c3392eaf878/pyarrow-24.0.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:25ea65d868eb04015cd18e6df2fbe98f07e5bda2abefabcb88fce39a947716f6", size = 51929490, upload-time = "2026-04-21T10:47:55.981Z" }, + { url = "https://files.pythonhosted.org/packages/66/1c/e3e72c8014ad2743ca64a701652c733cc5cbcee15c0463a32a8c55518d9e/pyarrow-24.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:295f0a7f2e242dabd513737cf076007dc5b2d59237e3eca37b05c0c6446f3826", size = 27355660, upload-time = "2026-04-21T10:48:01.718Z" }, + { url = "https://files.pythonhosted.org/packages/6f/d3/a1abf004482026ddc17f4503db227787fa3cfe41ec5091ff20e4fea55e57/pyarrow-24.0.0-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:02b001b3ed4723caa44f6cd1af2d5c86aa2cf9971dacc2ffa55b21237713dfba", size = 34976759, upload-time = "2026-04-21T10:48:07.258Z" }, + { url = "https://files.pythonhosted.org/packages/4f/4a/34f0a36d28a2dd32225301b79daad44e243dc1a2bb77d43b60749be255c4/pyarrow-24.0.0-cp313-cp313-macosx_12_0_x86_64.whl", hash = "sha256:04920d6a71aabd08a0417709efce97d45ea8e6fb733d9ca9ecffb13c67839f68", size = 36658471, upload-time = "2026-04-21T10:48:13.347Z" }, + { url = "https://files.pythonhosted.org/packages/1f/78/543b94712ae8bb1a6023bcc1acf1a740fbff8286747c289cd9468fced2a5/pyarrow-24.0.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:a964266397740257f16f7bb2e4f08a0c81454004beab8ff59dd531b73610e9f2", size = 45675981, upload-time = "2026-04-21T10:48:20.201Z" }, + { url = "https://files.pythonhosted.org/packages/84/9f/8fb7c222b100d314137fa40ec050de56cd8c6d957d1cfff685ce72f15b17/pyarrow-24.0.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:6f066b179d68c413374294bc1735f68475457c933258df594443bb9d88ddc2a0", size = 48859172, upload-time = "2026-04-21T10:48:27.541Z" }, + { url = "https://files.pythonhosted.org/packages/a7/d3/1ea72538e6c8b3b475ed78d1049a2c518e655761ea50fe1171fc855fcab7/pyarrow-24.0.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:1183baeb14c5f587b1ec52831e665718ce632caab84b7cd6b85fd44f96114495", size = 49385733, upload-time = "2026-04-21T10:48:34.7Z" }, + { url = "https://files.pythonhosted.org/packages/c3/be/c3d8b06a1ba35f2260f8e1f771abbee7d5e345c0937aab90675706b1690a/pyarrow-24.0.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:806f24b4085453c197a5078218d1ee08783ebbba271badd153d1ae22a3ee804f", size = 51934335, upload-time = "2026-04-21T10:48:42.099Z" }, + { url = "https://files.pythonhosted.org/packages/9c/62/89e07a1e7329d2cde3e3c6994ba0839a24977a2beda8be6005ea3d860b99/pyarrow-24.0.0-cp313-cp313-win_amd64.whl", hash = "sha256:e4505fc6583f7b05ab854934896bcac8253b04ac1171a77dfb73efef92076d91", size = 27271748, upload-time = "2026-04-21T10:49:42.532Z" }, + { url = "https://files.pythonhosted.org/packages/17/1a/cff3a59f80b5b1658549d46611b67163f65e0664431c076ad728bf9d5af4/pyarrow-24.0.0-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:1a4e45017efbf115032e4475ee876d525e0e36c742214fbe405332480ecd6275", size = 35238554, upload-time = "2026-04-21T10:48:48.526Z" }, + { url = "https://files.pythonhosted.org/packages/a8/99/cce0f42a327bfef2c420fb6078a3eb834826e5d6697bf3009fe11d2ad051/pyarrow-24.0.0-cp313-cp313t-macosx_12_0_x86_64.whl", hash = "sha256:7986f1fa71cee060ad00758bcc79d3a93bab8559bf978fab9e53472a2e25a17b", size = 36782301, upload-time = "2026-04-21T10:48:55.181Z" }, + { url = "https://files.pythonhosted.org/packages/2a/66/8e560d5ff6793ca29aca213c53eec0dd482dd46cb93b2819e5aab52e4252/pyarrow-24.0.0-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:d3e0b61e8efb24ed38898e5cdc5fffa9124be480008d401a1f8071500494ae42", size = 45721929, upload-time = "2026-04-21T10:49:03.676Z" }, + { url = "https://files.pythonhosted.org/packages/27/0c/a26e25505d030716e078d9f16eb74973cbf0b33b672884e9f9da1c83b871/pyarrow-24.0.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:55a3bc1e3df3b5567b7d27ef551b2283f0c68a5e86f1cd56abc569da4f31335b", size = 48825365, upload-time = "2026-04-21T10:49:11.714Z" }, + { url = "https://files.pythonhosted.org/packages/5f/eb/771f9ecb0c65e73fe9dccdd1717901b9594f08c4515d000c7c62df573811/pyarrow-24.0.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:641f795b361874ac9da5294f8f443dfdbee355cf2bd9e3b8d97aaac2306b9b37", size = 49451819, upload-time = "2026-04-21T10:49:21.474Z" }, + { url = "https://files.pythonhosted.org/packages/48/da/61ae89a88732f5a785646f3ec6125dbb640fa98a540eb2b9889caa561403/pyarrow-24.0.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:8adc8e6ce5fccf5dc707046ae4914fd537def529709cc0d285d37a7f9cd442ca", size = 51909252, upload-time = "2026-04-21T10:49:31.164Z" }, + { url = "https://files.pythonhosted.org/packages/cb/1a/8dd5cafab7b66573fa91c03d06d213356ad4edd71813aa75e08ce2b3a844/pyarrow-24.0.0-cp313-cp313t-win_amd64.whl", hash = "sha256:9b18371ad2f44044b81a8d23bc2d8a9b6a6226dca775e8e16cfee640473d6c5d", size = 27388127, upload-time = "2026-04-21T10:49:37.334Z" }, +] + [[package]] name = "pybase64" version = "1.4.3" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/aa/b8/4ed5c7ad5ec15b08d35cc79ace6145d5c1ae426e46435f4987379439dfea/pybase64-1.4.3.tar.gz", hash = "sha256:c2ed274c9e0ba9c8f9c4083cfe265e66dd679126cd9c2027965d807352f3f053", size = 137272, upload-time = "2025-12-06T13:27:04.013Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/39/47/16d7af6fae7803f4c691856bc0d8d433ccf30e106432e2ef7707ee19a38a/pybase64-1.4.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f63aa7f29139b8a05ce5f97cdb7fad63d29071e5bdc8a638a343311fe996112a", size = 38241, upload-time = "2025-12-06T13:22:27.396Z" }, - { url = "https://files.pythonhosted.org/packages/4d/3e/268beb8d2240ab55396af4d1b45d2494935982212549b92a5f5b57079bd3/pybase64-1.4.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f5943ec1ae87a8b4fe310905bb57205ea4330c75e2c628433a7d9dd52295b588", size = 31672, upload-time = "2025-12-06T13:22:28.854Z" }, - { url = "https://files.pythonhosted.org/packages/80/14/4365fa33222edcc46b6db4973f9e22bda82adfb6ab2a01afff591f1e41c8/pybase64-1.4.3-cp310-cp310-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:5f2b8aef86f35cd5894c13681faf433a1fffc5b2e76544dcb5416a514a1a8347", size = 65978, upload-time = "2025-12-06T13:22:30.191Z" }, - { url = "https://files.pythonhosted.org/packages/1c/22/e89739d8bc9b96c68ead44b4eec42fe555683d9997e4ba65216d384920fc/pybase64-1.4.3-cp310-cp310-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:a6ec7e53dd09b0a8116ccf5c3265c7c7fce13c980747525be76902aef36a514a", size = 68903, upload-time = "2025-12-06T13:22:31.29Z" }, - { url = "https://files.pythonhosted.org/packages/77/e1/7e59a19f8999cdefe9eb0d56bfd701dd38263b0f6fb4a4d29fce165a1b36/pybase64-1.4.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:7528604cd69c538e1dbaafded46e9e4915a2adcd6f2a60fcef6390d87ca922ea", size = 57516, upload-time = "2025-12-06T13:22:32.395Z" }, - { url = "https://files.pythonhosted.org/packages/42/ad/f47dc7e6fe32022b176868b88b671a32dab389718c8ca905cab79280aaaf/pybase64-1.4.3-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.whl", hash = "sha256:4ec645f32b50593879031e09158f8681a1db9f5df0f72af86b3969a1c5d1fa2b", size = 54533, upload-time = "2025-12-06T13:22:33.457Z" }, - { url = "https://files.pythonhosted.org/packages/7c/9a/7ab312b5a324833953b00e47b23eb4f83d45bd5c5c854b4b4e51b2a0cf5b/pybase64-1.4.3-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:634a000c5b3485ccc18bb9b244e0124f74b6fbc7f43eade815170237a7b34c64", size = 57187, upload-time = "2025-12-06T13:22:34.566Z" }, - { url = "https://files.pythonhosted.org/packages/2c/84/80acab1fcbaaae103e6b862ef5019192c8f2cd8758433595a202179a0d1d/pybase64-1.4.3-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:309ea32ad07639a485580af1be0ad447a434deb1924e76adced63ac2319cfe15", size = 57730, upload-time = "2025-12-06T13:22:35.581Z" }, - { url = "https://files.pythonhosted.org/packages/1f/24/84256d472400ea3163d7d69c44bb7e2e1027f0f1d4d20c47629a7dc4578e/pybase64-1.4.3-cp310-cp310-manylinux_2_31_riscv64.whl", hash = "sha256:d10d517566b748d3f25f6ac7162af779360c1c6426ad5f962927ee205990d27c", size = 53036, upload-time = "2025-12-06T13:22:36.621Z" }, - { url = "https://files.pythonhosted.org/packages/a3/0f/33aecbed312ee0431798a73fa25e00dedbffdd91389ee23121fed397c550/pybase64-1.4.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:a74cc0f4d835400857cc5c6d27ec854f7949491e07a04e6d66e2137812831f4c", size = 56321, upload-time = "2025-12-06T13:22:37.7Z" }, - { url = "https://files.pythonhosted.org/packages/dc/1c/a341b050746658cbec8cab3c733aeb3ef52ce8f11e60d0d47adbdf729ebf/pybase64-1.4.3-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:1b591d774ac09d5eb73c156a03277cb271438fbd8042bae4109ff3a827cd218c", size = 50114, upload-time = "2025-12-06T13:22:38.752Z" }, - { url = "https://files.pythonhosted.org/packages/ba/d3/f7e6680ae6dc4ddff39112ad66e0fa6b2ec346e73881bafc08498c560bc0/pybase64-1.4.3-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:5eb588d35a04302ef6157d17db62354a787ac6f8b1585dd0b90c33d63a97a550", size = 66570, upload-time = "2025-12-06T13:22:40.221Z" }, - { url = "https://files.pythonhosted.org/packages/4c/71/774748eecc7fe23869b7e5df028e3c4c2efa16b506b83ea3fa035ea95dc2/pybase64-1.4.3-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:df8b122d5be2c96962231cc4831d9c2e1eae6736fb12850cec4356d8b06fe6f8", size = 55700, upload-time = "2025-12-06T13:22:41.289Z" }, - { url = "https://files.pythonhosted.org/packages/b3/91/dd15075bb2fe0086193e1cd4bad80a43652c38d8a572f9218d46ba721802/pybase64-1.4.3-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:31b7a85c661fc591bbcce82fb8adaebe2941e6a83b08444b0957b77380452a4b", size = 52491, upload-time = "2025-12-06T13:22:42.628Z" }, - { url = "https://files.pythonhosted.org/packages/7b/27/f357d63ea3774c937fc47160e040419ed528827aa3d4306d5ec9826259c0/pybase64-1.4.3-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:e6d7beaae65979fef250e25e66cf81c68a8f81910bcda1a2f43297ab486a7e4e", size = 53957, upload-time = "2025-12-06T13:22:44.615Z" }, - { url = "https://files.pythonhosted.org/packages/b3/c3/243693771701a54e67ff5ccbf4c038344f429613f5643169a7befc51f007/pybase64-1.4.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:4a6276bc3a3962d172a2b5aba544d89881c4037ea954517b86b00892c703d007", size = 68422, upload-time = "2025-12-06T13:22:45.641Z" }, - { url = "https://files.pythonhosted.org/packages/75/95/f987081bf6bc1d1eda3012dae1b06ad427732ef9933a632cb8b58f9917f8/pybase64-1.4.3-cp310-cp310-win32.whl", hash = "sha256:4bdd07ef017515204ee6eaab17e1ad05f83c0ccb5af8ae24a0fe6d9cb5bb0b7a", size = 33622, upload-time = "2025-12-06T13:22:47.348Z" }, - { url = "https://files.pythonhosted.org/packages/79/28/c169a769fe90128f16d394aad87b2096dd4bf2f035ae0927108a46b617df/pybase64-1.4.3-cp310-cp310-win_amd64.whl", hash = "sha256:5db0b6bbda15110db2740c61970a8fda3bf9c93c3166a3f57f87c7865ed1125c", size = 35799, upload-time = "2025-12-06T13:22:48.731Z" }, - { url = "https://files.pythonhosted.org/packages/ab/f2/bdbe6af0bd4f3fe5bc70e77ead7f7d523bb9d3ca3ad50ac42b9adbb9ca14/pybase64-1.4.3-cp310-cp310-win_arm64.whl", hash = "sha256:f96367dfc82598569aa02b1103ebd419298293e59e1151abda2b41728703284b", size = 31158, upload-time = "2025-12-06T13:22:50.021Z" }, { url = "https://files.pythonhosted.org/packages/2b/63/21e981e9d3f1f123e0b0ee2130112b1956cad9752309f574862c7ae77c08/pybase64-1.4.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:70b0d4a4d54e216ce42c2655315378b8903933ecfa32fced453989a92b4317b2", size = 38237, upload-time = "2025-12-06T13:22:52.159Z" }, { url = "https://files.pythonhosted.org/packages/92/fb/3f448e139516404d2a3963915cc10dc9dde7d3a67de4edba2f827adfef17/pybase64-1.4.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8127f110cdee7a70e576c5c9c1d4e17e92e76c191869085efbc50419f4ae3c72", size = 31673, upload-time = "2025-12-06T13:22:53.241Z" }, { url = "https://files.pythonhosted.org/packages/3c/fb/bb06a5b9885e7d853ac1e801c4d8abfdb4c8506deee33e53d55aa6690e67/pybase64-1.4.3-cp311-cp311-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:f9ef0388878bc15a084bd9bf73ec1b2b4ee513d11009b1506375e10a7aae5032", size = 68331, upload-time = "2025-12-06T13:22:54.197Z" }, @@ -4670,12 +6051,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/fa/8f/43c3bb11ca9bacf81cb0b7a71500bb65b2eda6d5fe07433c09b543de97f3/pybase64-1.4.3-graalpy312-graalpy250_312_native-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:5c29a582b0ea3936d02bd6fe9bf674ab6059e6e45ab71c78404ab2c913224414", size = 43461, upload-time = "2025-12-06T13:26:28.906Z" }, { url = "https://files.pythonhosted.org/packages/2d/4c/2a5258329200be57497d3972b5308558c6de42e3749c6cc2aa1cbe34b25a/pybase64-1.4.3-graalpy312-graalpy250_312_native-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:b6b664758c804fa919b4f1257aa8cf68e95db76fc331de5f70bfc3a34655afe1", size = 36058, upload-time = "2025-12-06T13:26:30.092Z" }, { url = "https://files.pythonhosted.org/packages/ea/6d/41faa414cde66ec023b0ca8402a8f11cb61731c3dc27c082909cbbd1f929/pybase64-1.4.3-graalpy312-graalpy250_312_native-win_amd64.whl", hash = "sha256:f7537fa22ae56a0bf51e4b0ffc075926ad91c618e1416330939f7ef366b58e3b", size = 36231, upload-time = "2025-12-06T13:26:31.656Z" }, - { url = "https://files.pythonhosted.org/packages/2a/cf/6e712491bd665ea8633efb0b484121893ea838d8e830e06f39f2aae37e58/pybase64-1.4.3-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:94cf50c36bb2f8618982ee5a978c4beed9db97d35944fa96e8586dd953c7994a", size = 38007, upload-time = "2025-12-06T13:26:32.804Z" }, - { url = "https://files.pythonhosted.org/packages/38/c0/9272cae1c49176337dcdbd97511e2843faae1aaf5a5fb48569093c6cd4ce/pybase64-1.4.3-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:01bc3ff5ca1341685c6d2d945b035f442f7b9c3b068a5c6ee8408a41fda5754e", size = 31538, upload-time = "2025-12-06T13:26:34.001Z" }, - { url = "https://files.pythonhosted.org/packages/20/f2/17546f97befe429c73f622bbd869ceebb518c40fdb0dec4c4f98312e80a5/pybase64-1.4.3-pp310-pypy310_pp73-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:03d0aa3761a99034960496280c02aa063f856a3cc9b33771bc4eab0e4e72b5c2", size = 40682, upload-time = "2025-12-06T13:26:35.168Z" }, - { url = "https://files.pythonhosted.org/packages/92/a0/464b36d5dfb61f3da17858afaeaa876a9342d58e9f17803ce7f28b5de9e8/pybase64-1.4.3-pp310-pypy310_pp73-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:7ca5b1ce768520acd6440280cdab35235b27ad2faacfcec064bc9c3377066ef1", size = 41306, upload-time = "2025-12-06T13:26:36.351Z" }, - { url = "https://files.pythonhosted.org/packages/07/c9/a748dfc0969a8d960ecf1e82c8a2a16046ffec22f8e7ece582aa3b1c6cf9/pybase64-1.4.3-pp310-pypy310_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:3caa1e2ddad1c50553ffaaa1c86b74b3f9fbd505bea9970326ab88fc68c4c184", size = 35452, upload-time = "2025-12-06T13:26:37.772Z" }, - { url = "https://files.pythonhosted.org/packages/95/b7/4d37bd3577d1aa6c732dc099087fe027c48873e223de3784b095e5653f8b/pybase64-1.4.3-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:bd47076f736b27a8b0f9b30d93b6bb4f5af01b0dc8971f883ed3b75934f39a99", size = 36125, upload-time = "2025-12-06T13:26:39.78Z" }, { url = "https://files.pythonhosted.org/packages/b2/76/160dded493c00d3376d4ad0f38a2119c5345de4a6693419ad39c3565959b/pybase64-1.4.3-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:277de6e03cc9090fb359365c686a2a3036d23aee6cd20d45d22b8c89d1247f17", size = 37939, upload-time = "2025-12-06T13:26:41.014Z" }, { url = "https://files.pythonhosted.org/packages/b7/b8/a0f10be8d648d6f8f26e560d6e6955efa7df0ff1e009155717454d76f601/pybase64-1.4.3-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:ab1dd8b1ed2d1d750260ed58ab40defaa5ba83f76a30e18b9ebd5646f6247ae5", size = 31466, upload-time = "2025-12-06T13:26:42.539Z" }, { url = "https://files.pythonhosted.org/packages/d3/22/832a2f9e76cdf39b52e01e40d8feeb6a04cf105494f2c3e3126d0149717f/pybase64-1.4.3-pp311-pypy311_pp73-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:bd4d2293de9fd212e294c136cec85892460b17d24e8c18a6ba18750928037750", size = 40681, upload-time = "2025-12-06T13:26:43.782Z" }, @@ -4731,20 +6106,6 @@ dependencies = [ ] sdist = { url = "https://files.pythonhosted.org/packages/9d/56/921726b776ace8d8f5db44c4ef961006580d91dc52b803c489fafd1aa249/pydantic_core-2.46.4.tar.gz", hash = "sha256:62f875393d7f270851f20523dd2e29f082bcc82292d66db2b64ea71f64b6e1c1", size = 471464, upload-time = "2026-05-06T13:37:06.98Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/e7/08/f1ba952f1c8ae5581c70fa9c6da89f247b83e3dd8c09c035d5d7931fc23d/pydantic_core-2.46.4-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:a396dcc17e5a0b164dbe026896245a4fa9ff402edca1dff0be3d53a517f74de4", size = 2113146, upload-time = "2026-05-06T13:37:36.537Z" }, - { url = "https://files.pythonhosted.org/packages/56/c6/65f646c7ff09bd257f660434adb45c4dfcbbcebcc030562fecf6f5bf887d/pydantic_core-2.46.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:da4b951fe36dc7c3a1ccb4e3cd1747c3542b8c9ceede8fc86cae054e764485f5", size = 1949769, upload-time = "2026-05-06T13:37:46.365Z" }, - { url = "https://files.pythonhosted.org/packages/64/ba/bfb1d928fd5b49e1258935ff104ae356e9fd89384a55bf9f847e9193ad40/pydantic_core-2.46.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bb63e0198ca18aad131c089b9204c23079c3afa95487e561f4c522d519e55aba", size = 1974958, upload-time = "2026-05-06T13:37:28.611Z" }, - { url = "https://files.pythonhosted.org/packages/4e/74/76223bfb117b64af743c9b6670d1364516f5c0604f96b48f3272f6af6cc6/pydantic_core-2.46.4-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f47286a97f0bc9b8859519809077b91b2cefe4ae47fcbf5e466a009c1c5d742b", size = 2042118, upload-time = "2026-05-06T13:36:55.216Z" }, - { url = "https://files.pythonhosted.org/packages/cb/7b/848732968bc8f48f3187542f08358b9d842db564147b256669426ebb1652/pydantic_core-2.46.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:905a0ed8ea6f2d61c1738835f99b699348d7857379083e5fc497fa0c967a407c", size = 2222876, upload-time = "2026-05-06T13:38:25.455Z" }, - { url = "https://files.pythonhosted.org/packages/b5/2f/e90b63ee2e14bd8d3db8f705a6d75d64e6ee1b7c2c8833747ce706e1e0ce/pydantic_core-2.46.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ea793e075b70290d89d8142074262885d3f7da19634845135751bd6344f73b50", size = 2286703, upload-time = "2026-05-06T13:37:53.304Z" }, - { url = "https://files.pythonhosted.org/packages/ba/1e/acc4d70f88a0a277e4a1fa77ebb985ceabaf900430f875bf9338e11c9420/pydantic_core-2.46.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:395aebd9183f9d112f569aeb5b2214d1a10a33bec8456447f7fbdfa51d38d4cd", size = 2092042, upload-time = "2026-05-06T13:38:46.981Z" }, - { url = "https://files.pythonhosted.org/packages/a9/da/0a422b57bf8504102bf3c4ccea9c41bab5a5cee6a54650acf8faf67f5a24/pydantic_core-2.46.4-cp310-cp310-manylinux_2_31_riscv64.whl", hash = "sha256:b078afbc25f3a1436c7a1d2cd3e322497ee99615ba97c563566fdf46aff1ee01", size = 2117231, upload-time = "2026-05-06T13:39:23.146Z" }, - { url = "https://files.pythonhosted.org/packages/bd/2a/2ac13c3af305843e23c5078c53d135656b3f05a2fd78cb7bbbb12e97b473/pydantic_core-2.46.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f747929cf940cddb5b3668a390056ddd5ba2e5010615ea2dcf4f9c4f3ab8791d", size = 2168388, upload-time = "2026-05-06T13:40:08.06Z" }, - { url = "https://files.pythonhosted.org/packages/72/04/2beacf7e1607e93eefe4aed1b4709f079b905fb77530179d4f7c71745f22/pydantic_core-2.46.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:daa27d92c36f24388fe3ad306b174781c747627f134452e4f128ea00ce1fe8c4", size = 2184769, upload-time = "2026-05-06T13:38:13.901Z" }, - { url = "https://files.pythonhosted.org/packages/9e/29/d2b9fd9f539133548eaf622c06a4ce176cb46ac59f32d0359c4abc0de047/pydantic_core-2.46.4-cp310-cp310-musllinux_1_1_armv7l.whl", hash = "sha256:19e51f073cd3df251856a8a4189fbdf1de4012c3ebacfb1884f94f1eb406079f", size = 2319312, upload-time = "2026-05-06T13:39:08.24Z" }, - { url = "https://files.pythonhosted.org/packages/7c/af/0f7a5b85fec6075bea96e3ef9187de38fccced0de92c1e7feda8d5cc7bb9/pydantic_core-2.46.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c1747f85cee84c26985853c6f3d9bd3e75da5212912443fa111c113b9c246f39", size = 2361817, upload-time = "2026-05-06T13:38:43.2Z" }, - { url = "https://files.pythonhosted.org/packages/25/a4/73363fec545fd3ec025490bdda2743c56d0dd5b6266b1a53bbe9e4265375/pydantic_core-2.46.4-cp310-cp310-win32.whl", hash = "sha256:2f84c03c8607173d16b5a854ec68a2f9079ae03237a54fb506d13af47e1d018d", size = 1987085, upload-time = "2026-05-06T13:39:25.497Z" }, - { url = "https://files.pythonhosted.org/packages/01/aa/62f082da2c91fac1c234bc9ee0066257ce83f0604abd72e4c9d5991f2d84/pydantic_core-2.46.4-cp310-cp310-win_amd64.whl", hash = "sha256:8358a950c8909158e3df31538a7e4edc2d7265a7c54b47f0864d9e5bae9dcebf", size = 2074311, upload-time = "2026-05-06T13:39:59.922Z" }, { url = "https://files.pythonhosted.org/packages/5c/fa/6d7708d2cfc1a832acb6aeb0cd16e801902df8a0f583bb3b4b527fde022e/pydantic_core-2.46.4-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:0e96592440881c74a213e5ad528e2b24d3d4f940de2766bed9010ab1d9e51594", size = 2111872, upload-time = "2026-05-06T13:40:27.596Z" }, { url = "https://files.pythonhosted.org/packages/ae/6f/aa064a3e74b5745afbdf250594f38e7ead05e2d651bcb35994b9417a0d4d/pydantic_core-2.46.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e0d65b8c354be7fb5f720c3caa8bc940bc2d20ce749c8e06135f07f8ed95dd7c", size = 1948255, upload-time = "2026-05-06T13:39:12.574Z" }, { url = "https://files.pythonhosted.org/packages/43/3a/41114a9f7569b84b4d84e7a018c57c56347dac30c0d4a872946ec4e36c46/pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7bfb192b3f4b9e8a89b6277b6ce787564f62cfd272055f6e685726b111dc7826", size = 1972827, upload-time = "2026-05-06T13:38:19.841Z" }, @@ -4853,9 +6214,6 @@ wheels = [ name = "pyjwt" version = "2.12.1" source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "typing-extensions", marker = "python_full_version < '3.11'" }, -] sdist = { url = "https://files.pythonhosted.org/packages/c2/27/a3b6e5bf6ff856d2509292e95c8f57f0df7017cf5394921fc4e4ef40308a/pyjwt-2.12.1.tar.gz", hash = "sha256:c74a7a2adf861c04d002db713dd85f84beb242228e671280bf709d765b03672b", size = 102564, upload-time = "2026-03-13T19:27:37.25Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/e5/7a/8dd906bd22e79e47397a61742927f6747fe93242ef86645ee9092e610244/pyjwt-2.12.1-py3-none-any.whl", hash = "sha256:28ca37c070cad8ba8cd9790cd940535d40274d22f80ab87f3ac6a713e6e8454c", size = 29726, upload-time = "2026-03-13T19:27:35.677Z" }, @@ -4870,9 +6228,6 @@ crypto = [ name = "pypika" version = "0.51.1" source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "typing-extensions", marker = "python_full_version < '3.11'" }, -] sdist = { url = "https://files.pythonhosted.org/packages/f8/78/cbaebba88e05e2dcda13ca203131b38d3640219f20ebb49676d26714861b/pypika-0.51.1.tar.gz", hash = "sha256:c30c7c1048fbf056fd3920c5a2b88b0c29dd190a9b2bee971fd17e4abe4d0ebe", size = 80919, upload-time = "2026-02-04T11:27:48.304Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/57/83/c77dfeed04022e8930b08eedca2b6e5efed256ab3321396fde90066efb65/pypika-0.51.1-py2.py3-none-any.whl", hash = "sha256:77985b4d7ce71b9905255bf12468cf598349e98837c037541cfc240e528aec46", size = 60585, upload-time = "2026-02-04T11:27:46.251Z" }, @@ -4893,12 +6248,10 @@ version = "9.0.3" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "colorama", marker = "sys_platform == 'win32'" }, - { name = "exceptiongroup", marker = "python_full_version < '3.11'" }, { name = "iniconfig" }, { name = "packaging" }, { name = "pluggy" }, { name = "pygments" }, - { name = "tomli", marker = "python_full_version < '3.11'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/7d/0d/549bd94f1a0a402dc8cf64563a117c0f3765662e2e668477624baeec44d5/pytest-9.0.3.tar.gz", hash = "sha256:b86ada508af81d19edeb213c681b1d48246c1a91d304c6c81a427674c17eb91c", size = 1572165, upload-time = "2026-04-07T17:16:18.027Z" } wheels = [ @@ -4949,9 +6302,6 @@ name = "pywin32" version = "311" source = { registry = "https://pypi.org/simple" } wheels = [ - { url = "https://files.pythonhosted.org/packages/7b/40/44efbb0dfbd33aca6a6483191dae0716070ed99e2ecb0c53683f400a0b4f/pywin32-311-cp310-cp310-win32.whl", hash = "sha256:d03ff496d2a0cd4a5893504789d4a15399133fe82517455e78bad62efbb7f0a3", size = 8760432, upload-time = "2025-07-14T20:13:05.9Z" }, - { url = "https://files.pythonhosted.org/packages/5e/bf/360243b1e953bd254a82f12653974be395ba880e7ec23e3731d9f73921cc/pywin32-311-cp310-cp310-win_amd64.whl", hash = "sha256:797c2772017851984b97180b0bebe4b620bb86328e8a884bb626156295a63b3b", size = 9590103, upload-time = "2025-07-14T20:13:07.698Z" }, - { url = "https://files.pythonhosted.org/packages/57/38/d290720e6f138086fb3d5ffe0b6caa019a791dd57866940c82e4eeaf2012/pywin32-311-cp310-cp310-win_arm64.whl", hash = "sha256:0502d1facf1fed4839a9a51ccbcc63d952cf318f78ffc00a7e78528ac27d7a2b", size = 8778557, upload-time = "2025-07-14T20:13:11.11Z" }, { url = "https://files.pythonhosted.org/packages/7c/af/449a6a91e5d6db51420875c54f6aff7c97a86a3b13a0b4f1a5c13b988de3/pywin32-311-cp311-cp311-win32.whl", hash = "sha256:184eb5e436dea364dcd3d2316d577d625c0351bf237c4e9a5fabbcfa5a58b151", size = 8697031, upload-time = "2025-07-14T20:13:13.266Z" }, { url = "https://files.pythonhosted.org/packages/51/8f/9bb81dd5bb77d22243d33c8397f09377056d5c687aa6d4042bea7fbf8364/pywin32-311-cp311-cp311-win_amd64.whl", hash = "sha256:3ce80b34b22b17ccbd937a6e78e7225d80c52f5ab9940fe0506a1a16f3dab503", size = 9508308, upload-time = "2025-07-14T20:13:15.147Z" }, { url = "https://files.pythonhosted.org/packages/44/7b/9c2ab54f74a138c491aba1b1cd0795ba61f144c711daea84a88b63dc0f6c/pywin32-311-cp311-cp311-win_arm64.whl", hash = "sha256:a733f1388e1a842abb67ffa8e7aad0e70ac519e09b0f6a784e65a136ec7cefd2", size = 8703930, upload-time = "2025-07-14T20:13:16.945Z" }, @@ -4969,15 +6319,6 @@ version = "6.0.3" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/05/8e/961c0007c59b8dd7729d542c61a4d537767a59645b82a0b521206e1e25c2/pyyaml-6.0.3.tar.gz", hash = "sha256:d76623373421df22fb4cf8817020cbb7ef15c725b9d5e45f17e189bfc384190f", size = 130960, upload-time = "2025-09-25T21:33:16.546Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/f4/a0/39350dd17dd6d6c6507025c0e53aef67a9293a6d37d3511f23ea510d5800/pyyaml-6.0.3-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:214ed4befebe12df36bcc8bc2b64b396ca31be9304b8f59e25c11cf94a4c033b", size = 184227, upload-time = "2025-09-25T21:31:46.04Z" }, - { url = "https://files.pythonhosted.org/packages/05/14/52d505b5c59ce73244f59c7a50ecf47093ce4765f116cdb98286a71eeca2/pyyaml-6.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:02ea2dfa234451bbb8772601d7b8e426c2bfa197136796224e50e35a78777956", size = 174019, upload-time = "2025-09-25T21:31:47.706Z" }, - { url = "https://files.pythonhosted.org/packages/43/f7/0e6a5ae5599c838c696adb4e6330a59f463265bfa1e116cfd1fbb0abaaae/pyyaml-6.0.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b30236e45cf30d2b8e7b3e85881719e98507abed1011bf463a8fa23e9c3e98a8", size = 740646, upload-time = "2025-09-25T21:31:49.21Z" }, - { url = "https://files.pythonhosted.org/packages/2f/3a/61b9db1d28f00f8fd0ae760459a5c4bf1b941baf714e207b6eb0657d2578/pyyaml-6.0.3-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:66291b10affd76d76f54fad28e22e51719ef9ba22b29e1d7d03d6777a9174198", size = 840793, upload-time = "2025-09-25T21:31:50.735Z" }, - { url = "https://files.pythonhosted.org/packages/7a/1e/7acc4f0e74c4b3d9531e24739e0ab832a5edf40e64fbae1a9c01941cabd7/pyyaml-6.0.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9c7708761fccb9397fe64bbc0395abcae8c4bf7b0eac081e12b809bf47700d0b", size = 770293, upload-time = "2025-09-25T21:31:51.828Z" }, - { url = "https://files.pythonhosted.org/packages/8b/ef/abd085f06853af0cd59fa5f913d61a8eab65d7639ff2a658d18a25d6a89d/pyyaml-6.0.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:418cf3f2111bc80e0933b2cd8cd04f286338bb88bdc7bc8e6dd775ebde60b5e0", size = 732872, upload-time = "2025-09-25T21:31:53.282Z" }, - { url = "https://files.pythonhosted.org/packages/1f/15/2bc9c8faf6450a8b3c9fc5448ed869c599c0a74ba2669772b1f3a0040180/pyyaml-6.0.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:5e0b74767e5f8c593e8c9b5912019159ed0533c70051e9cce3e8b6aa699fcd69", size = 758828, upload-time = "2025-09-25T21:31:54.807Z" }, - { url = "https://files.pythonhosted.org/packages/a3/00/531e92e88c00f4333ce359e50c19b8d1de9fe8d581b1534e35ccfbc5f393/pyyaml-6.0.3-cp310-cp310-win32.whl", hash = "sha256:28c8d926f98f432f88adc23edf2e6d4921ac26fb084b028c733d01868d19007e", size = 142415, upload-time = "2025-09-25T21:31:55.885Z" }, - { url = "https://files.pythonhosted.org/packages/2a/fa/926c003379b19fca39dd4634818b00dec6c62d87faf628d1394e137354d4/pyyaml-6.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:bdb2c67c6c1390b63c6ff89f210c8fd09d9a1217a465701eac7316313c915e4c", size = 158561, upload-time = "2025-09-25T21:31:57.406Z" }, { url = "https://files.pythonhosted.org/packages/6d/16/a95b6757765b7b031c9374925bb718d55e0a9ba8a1b6a12d25962ea44347/pyyaml-6.0.3-cp311-cp311-macosx_10_13_x86_64.whl", hash = "sha256:44edc647873928551a01e7a563d7452ccdebee747728c1080d881d68af7b997e", size = 185826, upload-time = "2025-09-25T21:31:58.655Z" }, { url = "https://files.pythonhosted.org/packages/16/19/13de8e4377ed53079ee996e1ab0a9c33ec2faf808a4647b7b4c0d46dd239/pyyaml-6.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:652cb6edd41e718550aad172851962662ff2681490a8a711af6a4d288dd96824", size = 175577, upload-time = "2025-09-25T21:32:00.088Z" }, { url = "https://files.pythonhosted.org/packages/0c/62/d2eb46264d4b157dae1275b573017abec435397aa59cbcdab6fc978a8af4/pyyaml-6.0.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:10892704fc220243f5305762e276552a0395f7beb4dbf9b14ec8fd43b57f126c", size = 775556, upload-time = "2025-09-25T21:32:01.31Z" }, @@ -5018,16 +6359,6 @@ dependencies = [ ] sdist = { url = "https://files.pythonhosted.org/packages/04/0b/3c9baedbdf613ecaa7aa07027780b8867f57b6293b6ee50de316c9f3222b/pyzmq-27.1.0.tar.gz", hash = "sha256:ac0765e3d44455adb6ddbf4417dcce460fc40a05978c08efdf2948072f6db540", size = 281750, upload-time = "2025-09-08T23:10:18.157Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/67/b9/52aa9ec2867528b54f1e60846728d8b4d84726630874fee3a91e66c7df81/pyzmq-27.1.0-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:508e23ec9bc44c0005c4946ea013d9317ae00ac67778bd47519fdf5a0e930ff4", size = 1329850, upload-time = "2025-09-08T23:07:26.274Z" }, - { url = "https://files.pythonhosted.org/packages/99/64/5653e7b7425b169f994835a2b2abf9486264401fdef18df91ddae47ce2cc/pyzmq-27.1.0-cp310-cp310-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:507b6f430bdcf0ee48c0d30e734ea89ce5567fd7b8a0f0044a369c176aa44556", size = 906380, upload-time = "2025-09-08T23:07:29.78Z" }, - { url = "https://files.pythonhosted.org/packages/73/78/7d713284dbe022f6440e391bd1f3c48d9185673878034cfb3939cdf333b2/pyzmq-27.1.0-cp310-cp310-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bf7b38f9fd7b81cb6d9391b2946382c8237fd814075c6aa9c3b746d53076023b", size = 666421, upload-time = "2025-09-08T23:07:31.263Z" }, - { url = "https://files.pythonhosted.org/packages/30/76/8f099f9d6482450428b17c4d6b241281af7ce6a9de8149ca8c1c649f6792/pyzmq-27.1.0-cp310-cp310-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:03ff0b279b40d687691a6217c12242ee71f0fba28bf8626ff50e3ef0f4410e1e", size = 854149, upload-time = "2025-09-08T23:07:33.17Z" }, - { url = "https://files.pythonhosted.org/packages/59/f0/37fbfff06c68016019043897e4c969ceab18bde46cd2aca89821fcf4fb2e/pyzmq-27.1.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:677e744fee605753eac48198b15a2124016c009a11056f93807000ab11ce6526", size = 1655070, upload-time = "2025-09-08T23:07:35.205Z" }, - { url = "https://files.pythonhosted.org/packages/47/14/7254be73f7a8edc3587609554fcaa7bfd30649bf89cd260e4487ca70fdaa/pyzmq-27.1.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:dd2fec2b13137416a1c5648b7009499bcc8fea78154cd888855fa32514f3dad1", size = 2033441, upload-time = "2025-09-08T23:07:37.432Z" }, - { url = "https://files.pythonhosted.org/packages/22/dc/49f2be26c6f86f347e796a4d99b19167fc94503f0af3fd010ad262158822/pyzmq-27.1.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:08e90bb4b57603b84eab1d0ca05b3bbb10f60c1839dc471fc1c9e1507bef3386", size = 1891529, upload-time = "2025-09-08T23:07:39.047Z" }, - { url = "https://files.pythonhosted.org/packages/a3/3e/154fb963ae25be70c0064ce97776c937ecc7d8b0259f22858154a9999769/pyzmq-27.1.0-cp310-cp310-win32.whl", hash = "sha256:a5b42d7a0658b515319148875fcb782bbf118dd41c671b62dae33666c2213bda", size = 567276, upload-time = "2025-09-08T23:07:40.695Z" }, - { url = "https://files.pythonhosted.org/packages/62/b2/f4ab56c8c595abcb26b2be5fd9fa9e6899c1e5ad54964e93ae8bb35482be/pyzmq-27.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:c0bb87227430ee3aefcc0ade2088100e528d5d3298a0a715a64f3d04c60ba02f", size = 632208, upload-time = "2025-09-08T23:07:42.298Z" }, - { url = "https://files.pythonhosted.org/packages/3b/e3/be2cc7ab8332bdac0522fdb64c17b1b6241a795bee02e0196636ec5beb79/pyzmq-27.1.0-cp310-cp310-win_arm64.whl", hash = "sha256:9a916f76c2ab8d045b19f2286851a38e9ac94ea91faf65bd64735924522a8b32", size = 559766, upload-time = "2025-09-08T23:07:43.869Z" }, { url = "https://files.pythonhosted.org/packages/06/5d/305323ba86b284e6fcb0d842d6adaa2999035f70f8c38a9b6d21ad28c3d4/pyzmq-27.1.0-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:226b091818d461a3bef763805e75685e478ac17e9008f49fce2d3e52b3d58b86", size = 1333328, upload-time = "2025-09-08T23:07:45.946Z" }, { url = "https://files.pythonhosted.org/packages/bd/a0/fc7e78a23748ad5443ac3275943457e8452da67fda347e05260261108cbc/pyzmq-27.1.0-cp311-cp311-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:0790a0161c281ca9723f804871b4027f2e8b5a528d357c8952d08cd1a9c15581", size = 908803, upload-time = "2025-09-08T23:07:47.551Z" }, { url = "https://files.pythonhosted.org/packages/7e/22/37d15eb05f3bdfa4abea6f6d96eb3bb58585fbd3e4e0ded4e743bc650c97/pyzmq-27.1.0-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c895a6f35476b0c3a54e3eb6ccf41bf3018de937016e6e18748317f25d4e925f", size = 668836, upload-time = "2025-09-08T23:07:49.436Z" }, @@ -5060,11 +6391,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/4f/6f/55c10e2e49ad52d080dc24e37adb215e5b0d64990b57598abc2e3f01725b/pyzmq-27.1.0-cp313-cp313t-win32.whl", hash = "sha256:7ccc0700cfdf7bd487bea8d850ec38f204478681ea02a582a8da8171b7f90a1c", size = 574964, upload-time = "2025-09-08T23:08:37.178Z" }, { url = "https://files.pythonhosted.org/packages/87/4d/2534970ba63dd7c522d8ca80fb92777f362c0f321900667c615e2067cb29/pyzmq-27.1.0-cp313-cp313t-win_amd64.whl", hash = "sha256:8085a9fba668216b9b4323be338ee5437a235fe275b9d1610e422ccc279733e2", size = 641029, upload-time = "2025-09-08T23:08:40.595Z" }, { url = "https://files.pythonhosted.org/packages/f6/fa/f8aea7a28b0641f31d40dea42d7ef003fded31e184ef47db696bc74cd610/pyzmq-27.1.0-cp313-cp313t-win_arm64.whl", hash = "sha256:6bb54ca21bcfe361e445256c15eedf083f153811c37be87e0514934d6913061e", size = 561541, upload-time = "2025-09-08T23:08:42.668Z" }, - { url = "https://files.pythonhosted.org/packages/f3/81/a65e71c1552f74dec9dff91d95bafb6e0d33338a8dfefbc88aa562a20c92/pyzmq-27.1.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:c17e03cbc9312bee223864f1a2b13a99522e0dc9f7c5df0177cd45210ac286e6", size = 836266, upload-time = "2025-09-08T23:09:40.048Z" }, - { url = "https://files.pythonhosted.org/packages/58/ed/0202ca350f4f2b69faa95c6d931e3c05c3a397c184cacb84cb4f8f42f287/pyzmq-27.1.0-pp310-pypy310_pp73-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:f328d01128373cb6763823b2b4e7f73bdf767834268c565151eacb3b7a392f90", size = 800206, upload-time = "2025-09-08T23:09:41.902Z" }, - { url = "https://files.pythonhosted.org/packages/47/42/1ff831fa87fe8f0a840ddb399054ca0009605d820e2b44ea43114f5459f4/pyzmq-27.1.0-pp310-pypy310_pp73-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9c1790386614232e1b3a40a958454bdd42c6d1811837b15ddbb052a032a43f62", size = 567747, upload-time = "2025-09-08T23:09:43.741Z" }, - { url = "https://files.pythonhosted.org/packages/d1/db/5c4d6807434751e3f21231bee98109aa57b9b9b55e058e450d0aef59b70f/pyzmq-27.1.0-pp310-pypy310_pp73-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:448f9cb54eb0cee4732b46584f2710c8bc178b0e5371d9e4fc8125201e413a74", size = 747371, upload-time = "2025-09-08T23:09:45.575Z" }, - { url = "https://files.pythonhosted.org/packages/26/af/78ce193dbf03567eb8c0dc30e3df2b9e56f12a670bf7eb20f9fb532c7e8a/pyzmq-27.1.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:05b12f2d32112bf8c95ef2e74ec4f1d4beb01f8b5e703b38537f8849f92cb9ba", size = 544862, upload-time = "2025-09-08T23:09:47.448Z" }, { url = "https://files.pythonhosted.org/packages/4c/c6/c4dcdecdbaa70969ee1fdced6d7b8f60cfabe64d25361f27ac4665a70620/pyzmq-27.1.0-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:18770c8d3563715387139060d37859c02ce40718d1faf299abddcdcc6a649066", size = 836265, upload-time = "2025-09-08T23:09:49.376Z" }, { url = "https://files.pythonhosted.org/packages/3e/79/f38c92eeaeb03a2ccc2ba9866f0439593bb08c5e3b714ac1d553e5c96e25/pyzmq-27.1.0-pp311-pypy311_pp73-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:ac25465d42f92e990f8d8b0546b01c391ad431c3bf447683fdc40565941d0604", size = 800208, upload-time = "2025-09-08T23:09:51.073Z" }, { url = "https://files.pythonhosted.org/packages/49/0e/3f0d0d335c6b3abb9b7b723776d0b21fa7f3a6c819a0db6097059aada160/pyzmq-27.1.0-pp311-pypy311_pp73-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:53b40f8ae006f2734ee7608d59ed661419f087521edbfc2149c3932e9c14808c", size = 567747, upload-time = "2025-09-08T23:09:52.698Z" }, @@ -5080,8 +6406,8 @@ dependencies = [ { name = "apache-tvm-ffi" }, { name = "einops" }, { name = "nvidia-cutlass-dsl" }, - { name = "torch", version = "2.10.0", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-14-granite-switch-dev' or extra == 'extra-14-granite-switch-tutorials' or extra == 'extra-14-granite-switch-vllm'" }, - { name = "torch", version = "2.11.0", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-14-granite-switch-dev-vllm20' or extra == 'extra-14-granite-switch-vllm20'" }, + { name = "torch", version = "2.10.0", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-14-granite-switch-tutorials' or extra == 'extra-14-granite-switch-vllm' or extra == 'group-14-granite-switch-dev' or extra == 'group-14-granite-switch-test' or extra == 'group-14-granite-switch-vllm19'" }, + { name = "torch", version = "2.11.0", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-14-granite-switch-vllm20' or extra == 'group-14-granite-switch-dev-vllm20' or extra == 'group-14-granite-switch-vllm20'" }, { name = "torch-c-dlpack-ext" }, ] sdist = { url = "https://files.pythonhosted.org/packages/2a/58/58b82e91b236539f424ff5681e7095b1f2860ddfb7778fe0be14d8fb58de/quack_kernels-0.4.1.tar.gz", hash = "sha256:9d7d6ba412bc0c8a9b1331c52a73db76280adb9dc2f2750df4851ddabef1466b", size = 274766, upload-time = "2026-04-30T14:37:55.65Z" } @@ -5109,23 +6435,6 @@ version = "2026.5.9" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/dc/0e/49aee608ad09480e7fd276898c99ec6192985fa331abe4eb3a986094490b/regex-2026.5.9.tar.gz", hash = "sha256:a8234aa23ec39894bfe4a3f1b85616a7032481964a13ac6fc9f10de4f6fca270", size = 416074, upload-time = "2026-05-09T23:15:19.37Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/fe/ed/0ad2c8edf634918eb4484365d3819fa7bd7f58daf807fe7fb21812c316e5/regex-2026.5.9-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a9e1328e17c84c1a5d22ec9f785ecef4a967fab9a42b6a8dc3bcbebd0a0c9e44", size = 489438, upload-time = "2026-05-09T23:11:29.374Z" }, - { url = "https://files.pythonhosted.org/packages/89/a9/4ed972ad263963b860b7c3e86e0e1bcc791def47b43b8c8efe57e710f139/regex-2026.5.9-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bfe1ce50cbfb569d74e1e4337da6468961f31dbea55fd85aa5de59c0947a805a", size = 291270, upload-time = "2026-05-09T23:11:33.254Z" }, - { url = "https://files.pythonhosted.org/packages/16/81/075930d9fa28c4ea1f53398dd015ee7c882f623539759113cda1257f4b82/regex-2026.5.9-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:15ee42209947f4ca045412eae98416317238163618ace2a8e54f99586a466733", size = 289198, upload-time = "2026-05-09T23:11:35.769Z" }, - { url = "https://files.pythonhosted.org/packages/d4/c8/5cdfbf0b5dc6599e1b6131eff43262e5275d4ec3469ce10216061659aadb/regex-2026.5.9-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b4bb445ff3f725f59df8f6014edb547ee928ec7023a774f6a39a3f953038cbb2", size = 784765, upload-time = "2026-05-09T23:11:37.689Z" }, - { url = "https://files.pythonhosted.org/packages/cd/ca/ae5fd6edc59b7f84b904b31d6ec39a860cbcecd10f64bd5a062ca83a4864/regex-2026.5.9-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:446ddd671e43ab535810c4b21cff7104945c701d4a14d1e6d1cd6f4e445a8bea", size = 852115, upload-time = "2026-05-09T23:11:39.973Z" }, - { url = "https://files.pythonhosted.org/packages/f6/ce/a91cf555afb51f3b74a182e24ba073b91ea7bb64592fc4b315c111bb19fd/regex-2026.5.9-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:7b92817338591505f282cf3864c145244b1edcf5381d237038df955001091538", size = 899503, upload-time = "2026-05-09T23:11:42.48Z" }, - { url = "https://files.pythonhosted.org/packages/55/7f/725a0a2b245a4cf0c4bab29d0e97c74285d94136a65d1b55a6459a583502/regex-2026.5.9-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d6b8a143aca6c39b446ea8092cde25cc8fe9304d4f5fecfbc1a9dbb0282703c2", size = 794093, upload-time = "2026-05-09T23:11:44.681Z" }, - { url = "https://files.pythonhosted.org/packages/e3/2a/996efbd59ce6b5d4a09e3af6180ceb62af171f4a9a6fb557d2f0ae0d462b/regex-2026.5.9-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:0f03aa6898aaaac4592479821df16e68e8d0e29e903e65d8f2dfb2f19028a989", size = 786234, upload-time = "2026-05-09T23:11:46.882Z" }, - { url = "https://files.pythonhosted.org/packages/4b/0a/8731e8b8806174c9cdd5903f80a14990331c1f42fc4209b540952e9e010d/regex-2026.5.9-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:ed457d8e98ae812ed7732bef7bf78de78e834eae0372a74e23ca90ef21d910f9", size = 769895, upload-time = "2026-05-09T23:11:49.324Z" }, - { url = "https://files.pythonhosted.org/packages/9a/0b/932473194bd563f342a412ae2ffbbd6da608306a2bc4e99249a41c2b0b92/regex-2026.5.9-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:71b61c5bfe1c806332defc42ad6c780b3c55f661986d7f40283a3a88274b4c00", size = 774991, upload-time = "2026-05-09T23:11:51.261Z" }, - { url = "https://files.pythonhosted.org/packages/98/80/9523d196010031df25f7177ee0a467efbee436324038e5d99def17a57515/regex-2026.5.9-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:3b1e39888c5e0c7d92cea4fc777396c4a90363b05de75d02eb459a4752200808", size = 848790, upload-time = "2026-05-09T23:11:53.232Z" }, - { url = "https://files.pythonhosted.org/packages/3c/07/56987b35e89edf47e4a38cf2845aeee476bfa688a6bdbd3e820cda461dc1/regex-2026.5.9-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:6ba42b2e7e7f46cf68cc6a5ca36fa07959f9bbd9c6bdcc47b6ee76549a590248", size = 757679, upload-time = "2026-05-09T23:11:55.82Z" }, - { url = "https://files.pythonhosted.org/packages/04/2a/ff713fff0c566507c06a4ce2dc0ae8e7eeebc88811a95fc81cf1e7d534dd/regex-2026.5.9-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:c010eb8caca74bdb40c07498d7ece26b4428fd3f04aa8a72c9ac6f79e8faaac6", size = 837116, upload-time = "2026-05-09T23:11:57.934Z" }, - { url = "https://files.pythonhosted.org/packages/77/90/df6d982b03e3614785c6937ba51b57f6733d97d2ee1c9bc7531dbfab3a54/regex-2026.5.9-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:a6a563446a41adc451393dc6b8e6ad87979efaee3c8738690a8d1b08ebead1b4", size = 782081, upload-time = "2026-05-09T23:11:59.607Z" }, - { url = "https://files.pythonhosted.org/packages/c7/8a/4e88a5f7c3e98489aac4dd23142723d907b2a595b4a6abcbacabefeded09/regex-2026.5.9-cp310-cp310-win32.whl", hash = "sha256:954cc214c04663ee6d266fc61739cad83054683048de65c5bd1d640ad28098ac", size = 266247, upload-time = "2026-05-09T23:12:01.116Z" }, - { url = "https://files.pythonhosted.org/packages/6a/40/4b224cb0582b2dca1786726e6cdabe26abbf757d7f6718332f186da155d2/regex-2026.5.9-cp310-cp310-win_amd64.whl", hash = "sha256:b310768746dd314ea6e2ff4cc89ef215426813396ff4e94ee8e6f7096c8b6e03", size = 278416, upload-time = "2026-05-09T23:12:03.2Z" }, - { url = "https://files.pythonhosted.org/packages/12/4d/014fbe803204cab0947ee428f09f658a29632053dde1d3c6176bb4f0fd4c/regex-2026.5.9-cp310-cp310-win_arm64.whl", hash = "sha256:19c16ceb4a267a8789e25733e583983eeab9f0f8664e66b0bd1c5d21f14c2d4b", size = 270413, upload-time = "2026-05-09T23:12:04.649Z" }, { url = "https://files.pythonhosted.org/packages/c2/dc/c1f2df4027e82fc54b5a473e4b250f5139faca49a0fbe29a48668d228f34/regex-2026.5.9-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ccf5249114cc3e772ecdd88a98a86eca0fd74c61ce32a94743758c083fc05d48", size = 489445, upload-time = "2026-05-09T23:12:06.111Z" }, { url = "https://files.pythonhosted.org/packages/03/d2/59f01110660081cce9c0bc30ebd0b5ee250dacf658e3248ed92f01e0e8ee/regex-2026.5.9-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:46f1326ca6e65b0879d23ca302c0f2415aad42ff0309b9c818e7949fe19a41d8", size = 291271, upload-time = "2026-05-09T23:12:07.731Z" }, { url = "https://files.pythonhosted.org/packages/58/b6/14b2c84ff90ddb370c81d27503f4a0fcf071496416f4855f6cc8c5d81c35/regex-2026.5.9-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ef31cbfe458e21c6122ba8150ff060e0c7789ed0d26eb423f25472584920b555", size = 289212, upload-time = "2026-05-09T23:12:09.266Z" }, @@ -5238,8 +6547,7 @@ name = "rich-toolkit" version = "0.19.9" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "click", version = "8.1.8", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and extra == 'extra-14-granite-switch-tutorials') or (python_full_version >= '3.11' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm') or (extra == 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra != 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20')" }, - { name = "click", version = "8.4.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and extra == 'extra-14-granite-switch-dev') or (python_full_version >= '3.11' and extra == 'extra-14-granite-switch-tutorials') or extra == 'extra-14-granite-switch-dev-vllm20' or (extra == 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-tutorials') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm') or (extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20')" }, + { name = "click" }, { name = "rich" }, { name = "typing-extensions" }, ] @@ -5254,20 +6562,6 @@ version = "0.7.6" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/e5/f5/8bed2310abe4ae04b67a38374a4d311dd85220f5d8da56f47ae9361be0b0/rignore-0.7.6.tar.gz", hash = "sha256:00d3546cd793c30cb17921ce674d2c8f3a4b00501cb0e3dd0e82217dbeba2671", size = 57140, upload-time = "2025-11-05T21:41:21.968Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/86/7a/b970cd0138b0ece72eb28f086e933f9ed75b795716ad3de5ab22994b3b54/rignore-0.7.6-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:f3c74a7e5ee77aea669c95fdb3933f2a6c7549893700082e759128a29cf67e45", size = 884999, upload-time = "2025-11-05T20:42:38.373Z" }, - { url = "https://files.pythonhosted.org/packages/ca/05/23faca29616d8966ada63fb0e13c214107811fa9a0aba2275e4c7ca63bd5/rignore-0.7.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b7202404958f5fe3474bac91f65350f0b1dde1a5e05089f2946549b7e91e79ec", size = 824824, upload-time = "2025-11-05T20:42:22.1Z" }, - { url = "https://files.pythonhosted.org/packages/fa/2e/05a1e61f04cf2548524224f0b5f21ca19ea58f7273a863bac10846b8ff69/rignore-0.7.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6bde7c5835fa3905bfb7e329a4f1d7eccb676de63da7a3f934ddd5c06df20597", size = 899121, upload-time = "2025-11-05T20:40:48.94Z" }, - { url = "https://files.pythonhosted.org/packages/ff/35/71518847e10bdbf359badad8800e4681757a01f4777b3c5e03dbde8a42d8/rignore-0.7.6-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:626c3d4ba03af266694d25101bc1d8d16eda49c5feb86cedfec31c614fceca7d", size = 873813, upload-time = "2025-11-05T20:41:04.71Z" }, - { url = "https://files.pythonhosted.org/packages/f6/c8/32ae405d3e7fd4d9f9b7838f2fcca0a5005bb87fa514b83f83fd81c0df22/rignore-0.7.6-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0a43841e651e7a05a4274b9026cc408d1912e64016ede8cd4c145dae5d0635be", size = 1168019, upload-time = "2025-11-05T20:41:20.723Z" }, - { url = "https://files.pythonhosted.org/packages/25/98/013c955982bc5b4719bf9a5bea58be317eea28aa12bfd004025e3cd7c000/rignore-0.7.6-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7978c498dbf7f74d30cdb8859fe612167d8247f0acd377ae85180e34490725da", size = 942822, upload-time = "2025-11-05T20:41:36.99Z" }, - { url = "https://files.pythonhosted.org/packages/90/fb/9a3f3156c6ed30bcd597e63690353edac1fcffe9d382ad517722b56ac195/rignore-0.7.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2d22f72ab695c07d2d96d2a645208daff17084441b5d58c07378c9dd6f9c4c87", size = 959820, upload-time = "2025-11-05T20:42:06.364Z" }, - { url = "https://files.pythonhosted.org/packages/5e/b2/93bf609633021e9658acaff24cfb055d8cdaf7f5855d10ebb35307900dda/rignore-0.7.6-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d5bd8e1a91ed1a789b2cbe39eeea9204a6719d4f2cf443a9544b521a285a295f", size = 985050, upload-time = "2025-11-05T20:41:51.124Z" }, - { url = "https://files.pythonhosted.org/packages/69/bc/ec2d040469bdfd7b743df10f2201c5d285009a4263d506edbf7a06a090bb/rignore-0.7.6-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:bc1fc03efad5789365018e94ac4079f851a999bc154d1551c45179f7fcf45322", size = 1079164, upload-time = "2025-11-05T21:40:10.368Z" }, - { url = "https://files.pythonhosted.org/packages/df/26/4b635f4ea5baf4baa8ba8eee06163f6af6e76dfbe72deb57da34bb24b19d/rignore-0.7.6-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:ce2617fe28c51367fd8abfd4eeea9e61664af63c17d4ea00353d8ef56dfb95fa", size = 1139028, upload-time = "2025-11-05T21:40:27.977Z" }, - { url = "https://files.pythonhosted.org/packages/6a/54/a3147ebd1e477b06eb24e2c2c56d951ae5faa9045b7b36d7892fec5080d9/rignore-0.7.6-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:7c4ad2cee85068408e7819a38243043214e2c3047e9bd4c506f8de01c302709e", size = 1119024, upload-time = "2025-11-05T21:40:45.148Z" }, - { url = "https://files.pythonhosted.org/packages/fb/f4/27475db769a57cff18fe7e7267b36e6cdb5b1281caa185ba544171106cba/rignore-0.7.6-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:02cd240bfd59ecc3907766f4839cbba20530a2e470abca09eaa82225e4d946fb", size = 1128531, upload-time = "2025-11-05T21:41:02.734Z" }, - { url = "https://files.pythonhosted.org/packages/97/32/6e782d3b352e4349fa0e90bf75b13cb7f11d8908b36d9e2b262224b65d9a/rignore-0.7.6-cp310-cp310-win32.whl", hash = "sha256:fe2bd8fa1ff555259df54c376abc73855cb02628a474a40d51b358c3a1ddc55b", size = 646817, upload-time = "2025-11-05T21:41:47.51Z" }, - { url = "https://files.pythonhosted.org/packages/c0/8a/53185c69abb3bb362e8a46b8089999f820bf15655629ff8395107633c8ab/rignore-0.7.6-cp310-cp310-win_amd64.whl", hash = "sha256:d80afd6071c78baf3765ec698841071b19e41c326f994cfa69b5a1df676f5d39", size = 727001, upload-time = "2025-11-05T21:41:32.778Z" }, { url = "https://files.pythonhosted.org/packages/25/41/b6e2be3069ef3b7f24e35d2911bd6deb83d20ed5642ad81d5a6d1c015473/rignore-0.7.6-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:40be8226e12d6653abbebaffaea2885f80374c1c8f76fe5ca9e0cadd120a272c", size = 885285, upload-time = "2025-11-05T20:42:39.763Z" }, { url = "https://files.pythonhosted.org/packages/52/66/ba7f561b6062402022887706a7f2b2c2e2e2a28f1e3839202b0a2f77e36d/rignore-0.7.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:182f4e5e4064d947c756819446a7d4cdede8e756b8c81cf9e509683fe38778d7", size = 823882, upload-time = "2025-11-05T20:42:23.488Z" }, { url = "https://files.pythonhosted.org/packages/f5/81/4087453df35a90b07370647b19017029324950c1b9137d54bf1f33843f17/rignore-0.7.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:16b63047648a916a87be1e51bb5c009063f1b8b6f5afe4f04f875525507e63dc", size = 899362, upload-time = "2025-11-05T20:40:51.111Z" }, @@ -5313,18 +6607,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/dc/76/a264ab38bfa1620ec12a8ff1c07778da89e16d8c0f3450b0333020d3d6dc/rignore-0.7.6-cp313-cp313-win32.whl", hash = "sha256:a7d7148b6e5e95035d4390396895adc384d37ff4e06781a36fe573bba7c283e5", size = 646097, upload-time = "2025-11-05T21:41:53.201Z" }, { url = "https://files.pythonhosted.org/packages/62/44/3c31b8983c29ea8832b6082ddb1d07b90379c2d993bd20fce4487b71b4f4/rignore-0.7.6-cp313-cp313-win_amd64.whl", hash = "sha256:b037c4b15a64dced08fc12310ee844ec2284c4c5c1ca77bc37d0a04f7bff386e", size = 726170, upload-time = "2025-11-05T21:41:38.131Z" }, { url = "https://files.pythonhosted.org/packages/aa/41/e26a075cab83debe41a42661262f606166157df84e0e02e2d904d134c0d8/rignore-0.7.6-cp313-cp313-win_arm64.whl", hash = "sha256:e47443de9b12fe569889bdbe020abe0e0b667516ee2ab435443f6d0869bd2804", size = 656184, upload-time = "2025-11-05T21:41:27.396Z" }, - { url = "https://files.pythonhosted.org/packages/85/12/62d690b4644c330d7ac0f739b7f078190ab4308faa909a60842d0e4af5b2/rignore-0.7.6-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:c3d3a523af1cd4ed2c0cba8d277a32d329b0c96ef9901fb7ca45c8cfaccf31a5", size = 887462, upload-time = "2025-11-05T20:42:50.804Z" }, - { url = "https://files.pythonhosted.org/packages/05/bc/6528a0e97ed2bd7a7c329183367d1ffbc5b9762ae8348d88dae72cc9d1f5/rignore-0.7.6-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:990853566e65184a506e1e2af2d15045afad3ebaebb8859cb85b882081915110", size = 826918, upload-time = "2025-11-05T20:42:33.689Z" }, - { url = "https://files.pythonhosted.org/packages/3e/2c/7d7bad116e09a04e9e1688c6f891fa2d4fd33f11b69ac0bd92419ddebeae/rignore-0.7.6-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1cab9ff2e436ce7240d7ee301c8ef806ed77c1fd6b8a8239ff65f9bbbcb5b8a3", size = 900922, upload-time = "2025-11-05T20:41:00.361Z" }, - { url = "https://files.pythonhosted.org/packages/09/ba/e5ea89fbde8e37a90ce456e31c5e9d85512cef5ae38e0f4d2426eb776a19/rignore-0.7.6-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d1a6671b2082c13bfd9a5cf4ce64670f832a6d41470556112c4ab0b6519b2fc4", size = 876987, upload-time = "2025-11-05T20:41:16.219Z" }, - { url = "https://files.pythonhosted.org/packages/d0/fb/93d14193f0ec0c3d35b763f0a000e9780f63b2031f3d3756442c2152622d/rignore-0.7.6-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2468729b4c5295c199d084ab88a40afcb7c8b974276805105239c07855bbacee", size = 1171110, upload-time = "2025-11-05T20:41:32.631Z" }, - { url = "https://files.pythonhosted.org/packages/9e/46/08436312ff96ffa29cfa4e1a987efc37e094531db46ba5e9fda9bb792afd/rignore-0.7.6-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:775710777fd71e5fdf54df69cdc249996a1d6f447a2b5bfb86dbf033fddd9cf9", size = 943339, upload-time = "2025-11-05T20:41:47.128Z" }, - { url = "https://files.pythonhosted.org/packages/34/28/3b3c51328f505cfaf7e53f408f78a1e955d561135d02f9cb0341ea99f69a/rignore-0.7.6-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4565407f4a77f72cf9d91469e75d15d375f755f0a01236bb8aaa176278cc7085", size = 961680, upload-time = "2025-11-05T20:42:18.061Z" }, - { url = "https://files.pythonhosted.org/packages/5c/9e/cbff75c8676d4f4a90bd58a1581249d255c7305141b0868f0abc0324836b/rignore-0.7.6-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:dc44c33f8fb2d5c9da748de7a6e6653a78aa740655e7409895e94a247ffa97c8", size = 987045, upload-time = "2025-11-05T20:42:02.315Z" }, - { url = "https://files.pythonhosted.org/packages/8c/25/d802d1d369502a7ddb8816059e7c79d2d913e17df975b863418e0aca4d8a/rignore-0.7.6-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:8f32478f05540513c11923e8838afab9efef0131d66dca7f67f0e1bbd118af6a", size = 1080310, upload-time = "2025-11-05T21:40:23.184Z" }, - { url = "https://files.pythonhosted.org/packages/43/f0/250b785c2e473b1ab763eaf2be820934c2a5409a722e94b279dddac21c7d/rignore-0.7.6-pp310-pypy310_pp73-musllinux_1_2_armv7l.whl", hash = "sha256:1b63a3dd76225ea35b01dd6596aa90b275b5d0f71d6dc28fce6dd295d98614aa", size = 1140998, upload-time = "2025-11-05T21:40:40.603Z" }, - { url = "https://files.pythonhosted.org/packages/f5/d6/bb42fd2a8bba6aea327962656e20621fd495523259db40cfb4c5f760f05c/rignore-0.7.6-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:fe6c41175c36554a4ef0994cd1b4dbd6d73156fca779066456b781707402048e", size = 1121178, upload-time = "2025-11-05T21:40:57.585Z" }, - { url = "https://files.pythonhosted.org/packages/97/f4/aeb548374129dce3dc191a4bb598c944d9ed663f467b9af830315d86059c/rignore-0.7.6-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:9a0c6792406ae36f4e7664dc772da909451d46432ff8485774526232d4885063", size = 1130190, upload-time = "2025-11-05T21:41:16.403Z" }, { url = "https://files.pythonhosted.org/packages/82/78/a6250ff0c49a3cdb943910ada4116e708118e9b901c878cfae616c80a904/rignore-0.7.6-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:a20b6fb61bcced9a83dfcca6599ad45182b06ba720cff7c8d891e5b78db5b65f", size = 886470, upload-time = "2025-11-05T20:42:52.314Z" }, { url = "https://files.pythonhosted.org/packages/35/af/c69c0c51b8f9f7914d95c4ea91c29a2ac067572048cae95dd6d2efdbe05d/rignore-0.7.6-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:392dcabfecbe176c9ebbcb40d85a5e86a5989559c4f988c2741da7daf1b5be25", size = 825976, upload-time = "2025-11-05T20:42:35.118Z" }, { url = "https://files.pythonhosted.org/packages/f1/d2/1b264f56132264ea609d3213ab603d6a27016b19559a1a1ede1a66a03dcd/rignore-0.7.6-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22baa462abdc36fdd5a5e2dae423107723351b85ff093762f9261148b9d0a04a", size = 899739, upload-time = "2025-11-05T20:41:01.518Z" }, @@ -5357,20 +6639,6 @@ version = "0.30.0" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/20/af/3f2f423103f1113b36230496629986e0ef7e199d2aa8392452b484b38ced/rpds_py-0.30.0.tar.gz", hash = "sha256:dd8ff7cf90014af0c0f787eea34794ebf6415242ee1d6fa91eaba725cc441e84", size = 69469, upload-time = "2025-11-30T20:24:38.837Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/06/0c/0c411a0ec64ccb6d104dcabe0e713e05e153a9a2c3c2bd2b32ce412166fe/rpds_py-0.30.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:679ae98e00c0e8d68a7fda324e16b90fd5260945b45d3b824c892cec9eea3288", size = 370490, upload-time = "2025-11-30T20:21:33.256Z" }, - { url = "https://files.pythonhosted.org/packages/19/6a/4ba3d0fb7297ebae71171822554abe48d7cab29c28b8f9f2c04b79988c05/rpds_py-0.30.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:4cc2206b76b4f576934f0ed374b10d7ca5f457858b157ca52064bdfc26b9fc00", size = 359751, upload-time = "2025-11-30T20:21:34.591Z" }, - { url = "https://files.pythonhosted.org/packages/cd/7c/e4933565ef7f7a0818985d87c15d9d273f1a649afa6a52ea35ad011195ea/rpds_py-0.30.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:389a2d49eded1896c3d48b0136ead37c48e221b391c052fba3f4055c367f60a6", size = 389696, upload-time = "2025-11-30T20:21:36.122Z" }, - { url = "https://files.pythonhosted.org/packages/5e/01/6271a2511ad0815f00f7ed4390cf2567bec1d4b1da39e2c27a41e6e3b4de/rpds_py-0.30.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:32c8528634e1bf7121f3de08fa85b138f4e0dc47657866630611b03967f041d7", size = 403136, upload-time = "2025-11-30T20:21:37.728Z" }, - { url = "https://files.pythonhosted.org/packages/55/64/c857eb7cd7541e9b4eee9d49c196e833128a55b89a9850a9c9ac33ccf897/rpds_py-0.30.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f207f69853edd6f6700b86efb84999651baf3789e78a466431df1331608e5324", size = 524699, upload-time = "2025-11-30T20:21:38.92Z" }, - { url = "https://files.pythonhosted.org/packages/9c/ed/94816543404078af9ab26159c44f9e98e20fe47e2126d5d32c9d9948d10a/rpds_py-0.30.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:67b02ec25ba7a9e8fa74c63b6ca44cf5707f2fbfadae3ee8e7494297d56aa9df", size = 412022, upload-time = "2025-11-30T20:21:40.407Z" }, - { url = "https://files.pythonhosted.org/packages/61/b5/707f6cf0066a6412aacc11d17920ea2e19e5b2f04081c64526eb35b5c6e7/rpds_py-0.30.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0c0e95f6819a19965ff420f65578bacb0b00f251fefe2c8b23347c37174271f3", size = 390522, upload-time = "2025-11-30T20:21:42.17Z" }, - { url = "https://files.pythonhosted.org/packages/13/4e/57a85fda37a229ff4226f8cbcf09f2a455d1ed20e802ce5b2b4a7f5ed053/rpds_py-0.30.0-cp310-cp310-manylinux_2_31_riscv64.whl", hash = "sha256:a452763cc5198f2f98898eb98f7569649fe5da666c2dc6b5ddb10fde5a574221", size = 404579, upload-time = "2025-11-30T20:21:43.769Z" }, - { url = "https://files.pythonhosted.org/packages/f9/da/c9339293513ec680a721e0e16bf2bac3db6e5d7e922488de471308349bba/rpds_py-0.30.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e0b65193a413ccc930671c55153a03ee57cecb49e6227204b04fae512eb657a7", size = 421305, upload-time = "2025-11-30T20:21:44.994Z" }, - { url = "https://files.pythonhosted.org/packages/f9/be/522cb84751114f4ad9d822ff5a1aa3c98006341895d5f084779b99596e5c/rpds_py-0.30.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:858738e9c32147f78b3ac24dc0edb6610000e56dc0f700fd5f651d0a0f0eb9ff", size = 572503, upload-time = "2025-11-30T20:21:46.91Z" }, - { url = "https://files.pythonhosted.org/packages/a2/9b/de879f7e7ceddc973ea6e4629e9b380213a6938a249e94b0cdbcc325bb66/rpds_py-0.30.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:da279aa314f00acbb803da1e76fa18666778e8a8f83484fba94526da5de2cba7", size = 598322, upload-time = "2025-11-30T20:21:48.709Z" }, - { url = "https://files.pythonhosted.org/packages/48/ac/f01fc22efec3f37d8a914fc1b2fb9bcafd56a299edbe96406f3053edea5a/rpds_py-0.30.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:7c64d38fb49b6cdeda16ab49e35fe0da2e1e9b34bc38bd78386530f218b37139", size = 560792, upload-time = "2025-11-30T20:21:50.024Z" }, - { url = "https://files.pythonhosted.org/packages/e2/da/4e2b19d0f131f35b6146425f846563d0ce036763e38913d917187307a671/rpds_py-0.30.0-cp310-cp310-win32.whl", hash = "sha256:6de2a32a1665b93233cde140ff8b3467bdb9e2af2b91079f0333a0974d12d464", size = 221901, upload-time = "2025-11-30T20:21:51.32Z" }, - { url = "https://files.pythonhosted.org/packages/96/cb/156d7a5cf4f78a7cc571465d8aec7a3c447c94f6749c5123f08438bcf7bc/rpds_py-0.30.0-cp310-cp310-win_amd64.whl", hash = "sha256:1726859cd0de969f88dc8673bdd954185b9104e05806be64bcd87badbe313169", size = 235823, upload-time = "2025-11-30T20:21:52.505Z" }, { url = "https://files.pythonhosted.org/packages/4d/6e/f964e88b3d2abee2a82c1ac8366da848fce1c6d834dc2132c3fda3970290/rpds_py-0.30.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:a2bffea6a4ca9f01b3f8e548302470306689684e61602aa3d141e34da06cf425", size = 370157, upload-time = "2025-11-30T20:21:53.789Z" }, { url = "https://files.pythonhosted.org/packages/94/ba/24e5ebb7c1c82e74c4e4f33b2112a5573ddc703915b13a073737b59b86e0/rpds_py-0.30.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:dc4f992dfe1e2bc3ebc7444f6c7051b4bc13cd8e33e43511e8ffd13bf407010d", size = 359676, upload-time = "2025-11-30T20:21:55.475Z" }, { url = "https://files.pythonhosted.org/packages/84/86/04dbba1b087227747d64d80c3b74df946b986c57af0a9f0c98726d4d7a3b/rpds_py-0.30.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:422c3cb9856d80b09d30d2eb255d0754b23e090034e1deb4083f8004bd0761e4", size = 389938, upload-time = "2025-11-30T20:21:57.079Z" }, @@ -5464,10 +6732,113 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/4a/d8/0c8a7dc9b41dcac53c4cbf9df2b9c83e0e0097203de8b37a712b345c0be5/safetensors-0.7.0-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:b0f6d66c1c538d5a94a73aa9ddca8ccc4227e6c9ff555322ea40bdd142391dd4", size = 677368, upload-time = "2025-11-19T15:18:41.627Z" }, { url = "https://files.pythonhosted.org/packages/05/e5/cb4b713c8a93469e3c5be7c3f8d77d307e65fe89673e731f5c2bfd0a9237/safetensors-0.7.0-cp38-abi3-win32.whl", hash = "sha256:c74af94bf3ac15ac4d0f2a7c7b4663a15f8c2ab15ed0fc7531ca61d0835eccba", size = 326423, upload-time = "2025-11-19T15:18:45.74Z" }, { url = "https://files.pythonhosted.org/packages/5d/e6/ec8471c8072382cb91233ba7267fd931219753bb43814cbc71757bfd4dab/safetensors-0.7.0-cp38-abi3-win_amd64.whl", hash = "sha256:d1239932053f56f3456f32eb9625590cc7582e905021f94636202a864d470755", size = 341380, upload-time = "2025-11-19T15:18:44.427Z" }, - { url = "https://files.pythonhosted.org/packages/a7/6a/4d08d89a6fcbe905c5ae68b8b34f0791850882fc19782d0d02c65abbdf3b/safetensors-0.7.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f4729811a6640d019a4b7ba8638ee2fd21fa5ca8c7e7bdf0fed62068fcaac737", size = 492430, upload-time = "2025-11-19T15:18:11.884Z" }, - { url = "https://files.pythonhosted.org/packages/dd/29/59ed8152b30f72c42d00d241e58eaca558ae9dbfa5695206e2e0f54c7063/safetensors-0.7.0-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:12f49080303fa6bb424b362149a12949dfbbf1e06811a88f2307276b0c131afd", size = 503977, upload-time = "2025-11-19T15:18:17.523Z" }, - { url = "https://files.pythonhosted.org/packages/d3/0b/4811bfec67fa260e791369b16dab105e4bae82686120554cc484064e22b4/safetensors-0.7.0-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0071bffba4150c2f46cae1432d31995d77acfd9f8db598b5d1a2ce67e8440ad2", size = 623890, upload-time = "2025-11-19T15:18:22.666Z" }, - { url = "https://files.pythonhosted.org/packages/58/5b/632a58724221ef03d78ab65062e82a1010e1bef8e8e0b9d7c6d7b8044841/safetensors-0.7.0-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:473b32699f4200e69801bf5abf93f1a4ecd432a70984df164fc22ccf39c4a6f3", size = 531885, upload-time = "2025-11-19T15:18:27.146Z" }, +] + +[[package]] +name = "scikit-learn" +version = "1.9.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "joblib" }, + { name = "narwhals" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-14-granite-switch-tutorials' or extra == 'extra-14-granite-switch-vllm' or extra == 'group-14-granite-switch-dev' or extra == 'group-14-granite-switch-test' or extra == 'group-14-granite-switch-vllm19'" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.13' and extra == 'extra-14-granite-switch-vllm20') or (python_full_version < '3.13' and extra == 'group-14-granite-switch-dev-vllm20') or (python_full_version < '3.13' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20')" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.13' and extra == 'extra-14-granite-switch-vllm20') or (python_full_version >= '3.13' and extra == 'group-14-granite-switch-dev-vllm20') or (python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20') or (extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20')" }, + { name = "scipy" }, + { name = "threadpoolctl" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/fa/6f/37092bdb25f712817231799fc5674d8e704066a8a70c1d2d40517e18b4ab/scikit_learn-1.9.0.tar.gz", hash = "sha256:8833266989d3a5110178a9fae30783675460724d0e1efb13b14901d2c660c557", size = 7750767, upload-time = "2026-06-02T11:54:32.706Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f5/be/e844fd9586e66540a15b71924d17a6cbc1bb749e81ddd0a796bcdba4c055/scikit_learn-1.9.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:9db6f4d34e68c8899e4cab27fdf8eafe6ed21f2ba52ceb25ea250cd237f8e47b", size = 8789686, upload-time = "2026-06-02T11:53:05.439Z" }, + { url = "https://files.pythonhosted.org/packages/42/e2/ff880f62677a17d035817d543cb0fc8727d01eccbee81c5f7fc733a9d856/scikit_learn-1.9.0-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:f401448645a3e7bc115aa3c094097865155b34bff1cba8101857d9104e99074c", size = 8256782, upload-time = "2026-06-02T11:53:08.904Z" }, + { url = "https://files.pythonhosted.org/packages/25/64/eb40435e1a508ab1b4e284ce43ae80f6a162e5be5e38ed5a6fab467a9ea4/scikit_learn-1.9.0-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:fd3a8ef0c758555a3b23c03adaa858af32f7736785ded50ad5991f59c4ed03fa", size = 8992419, upload-time = "2026-06-02T11:53:11.551Z" }, + { url = "https://files.pythonhosted.org/packages/8d/da/4810a28e473185429e45a57eebcc91fc991b33d889cc0676063e671db03d/scikit_learn-1.9.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f7e254636164090da847715a27f8e5478feb98c40a9e0ee90cbd277de9e5ceb8", size = 9281411, upload-time = "2026-06-02T11:53:15.063Z" }, + { url = "https://files.pythonhosted.org/packages/3b/67/be3d369f40d8178ba3bd86635d132e08cb5329b023e4669d9426d84bc007/scikit_learn-1.9.0-cp311-cp311-win_amd64.whl", hash = "sha256:5dc1818c77575d149e25fce9ef82dd7b7263ae372f03494158668ad632a69759", size = 8272736, upload-time = "2026-06-02T11:53:18.108Z" }, + { url = "https://files.pythonhosted.org/packages/37/79/a733f02dc2118da7e77a134b34f39f40201a353311b011d20859d2db3556/scikit_learn-1.9.0-cp311-cp311-win_arm64.whl", hash = "sha256:366652351f092b219c248f1e72821e841960a63d8f358f1dcfd54dc1cbdbbc28", size = 7919564, upload-time = "2026-06-02T11:53:21.2Z" }, + { url = "https://files.pythonhosted.org/packages/ac/20/75f915ff375d6249e6550ac740fdbbd66159a068fd3af1400ff62036b07a/scikit_learn-1.9.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:2bd41b0d201bc81575531b96b713d3eb5e5f50fb0b82101ff0f92294fdc236ac", size = 8741122, upload-time = "2026-06-02T11:53:24.08Z" }, + { url = "https://files.pythonhosted.org/packages/cc/d5/2b5148f2279196775e1db2aeb85d14b70ac80e7e32b3b28e7ebeafb0901d/scikit_learn-1.9.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:5be45aa4a42a68a533913a6ed736cf309de2226411c79ef8d609a5456f1939b1", size = 8261512, upload-time = "2026-06-02T11:53:27.183Z" }, + { url = "https://files.pythonhosted.org/packages/a0/ee/5adbc77656b71f9456a2f5a7a9fdb4bcf9207a6b962889f1c2f9323afa4e/scikit_learn-1.9.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5e50ed4da51974e86e940690e9a3d82e729b62b5a49f7c9bac534d515d39d86f", size = 8837603, upload-time = "2026-06-02T11:53:30.328Z" }, + { url = "https://files.pythonhosted.org/packages/6c/c2/63fdda36c56437eeb44aaf9493c8bcd62ce230ab1598924fc626ffbfa943/scikit_learn-1.9.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:056c92bb67ad4c28463c2f2653d9701449201e7e7a9e94e321be0f71c4fef2b8", size = 9132097, upload-time = "2026-06-02T11:53:33.456Z" }, + { url = "https://files.pythonhosted.org/packages/83/a4/c8e67227c680e2259c8864ae72ff48b06e16a6f51253a22167aa02a8aa4e/scikit_learn-1.9.0-cp312-cp312-win_amd64.whl", hash = "sha256:4306775fad04cc4b472a1b15af1ae9cede1540fbfcc17fbce3767cd8dc7ae283", size = 8211173, upload-time = "2026-06-02T11:53:36.602Z" }, + { url = "https://files.pythonhosted.org/packages/cf/fd/3c0863792e98e67e9184aa4029288a175935eb65443afcd30d4f143450cf/scikit_learn-1.9.0-cp312-cp312-win_arm64.whl", hash = "sha256:26e22435f63bcdcf396b574273f29f13dd531f5ea035801f5be10ba1540a4e60", size = 7867451, upload-time = "2026-06-02T11:53:39.075Z" }, + { url = "https://files.pythonhosted.org/packages/3c/01/cf3310626b6d48d3e9be69a1223f9180360b5e6edb045f50fade723ce494/scikit_learn-1.9.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:80746d63bd4b6eaca54d36fe5feaf4d28bb38dc6f9470f81c7cad7c40155f119", size = 8705188, upload-time = "2026-06-02T11:53:41.964Z" }, + { url = "https://files.pythonhosted.org/packages/3e/04/5acd7ae280c5f93b6ac5ef6cdec14eef4c8d1cd91d85b3292989c94d96b1/scikit_learn-1.9.0-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:5b934c45c252844a91d69fda3a34cff5e7307e1db10d77cb10a3980312c74713", size = 8228299, upload-time = "2026-06-02T11:53:44.817Z" }, + { url = "https://files.pythonhosted.org/packages/0c/39/ffe829a5b8ecb40a518724a997794657fdc354ada5e8fe8e64d998c0bac9/scikit_learn-1.9.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:38c3dcb9a1ffb85505ec53d54c7b4aea0cff70050425a7760c2af661ac85df05", size = 8789690, upload-time = "2026-06-02T11:53:47.461Z" }, + { url = "https://files.pythonhosted.org/packages/1f/88/8dab5de10c638c083772a6be83a3d8106ced492f74a928c8693638e5bb50/scikit_learn-1.9.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:da76d09304a4706db7cc1e3ebaa3b6b98a67365cc11d2996c4f1e58ba47df714", size = 9087723, upload-time = "2026-06-02T11:53:50.702Z" }, + { url = "https://files.pythonhosted.org/packages/20/3f/7917ca72464038f6240ec70c29f94862d08a34a74291ae4d4ec5eb8186a0/scikit_learn-1.9.0-cp313-cp313-win_amd64.whl", hash = "sha256:5808d98f15c6bf6d9d96d2348c1997392a5888ce7097e664105f930c4bca1277", size = 8184330, upload-time = "2026-06-02T11:53:53.396Z" }, + { url = "https://files.pythonhosted.org/packages/78/c7/15739eb2f61fda3c54639e9942414e5a19ad8a8d1f5a3266afad7cb7df80/scikit_learn-1.9.0-cp313-cp313-win_arm64.whl", hash = "sha256:d77f54c017633791bc0225a43e2f8d03745fdcfe4880268fcc4df15f505dec2e", size = 7840653, upload-time = "2026-06-02T11:53:56.035Z" }, +] + +[[package]] +name = "scipy" +version = "1.17.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-14-granite-switch-tutorials' or extra == 'extra-14-granite-switch-vllm' or extra == 'group-14-granite-switch-dev' or extra == 'group-14-granite-switch-test' or extra == 'group-14-granite-switch-vllm19'" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.13' and extra == 'extra-14-granite-switch-vllm20') or (python_full_version < '3.13' and extra == 'group-14-granite-switch-dev-vllm20') or (python_full_version < '3.13' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20')" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.13' and extra == 'extra-14-granite-switch-vllm20') or (python_full_version >= '3.13' and extra == 'group-14-granite-switch-dev-vllm20') or (python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20') or (extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20')" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/7a/97/5a3609c4f8d58b039179648e62dd220f89864f56f7357f5d4f45c29eb2cc/scipy-1.17.1.tar.gz", hash = "sha256:95d8e012d8cb8816c226aef832200b1d45109ed4464303e997c5b13122b297c0", size = 30573822, upload-time = "2026-02-23T00:26:24.851Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/df/75/b4ce781849931fef6fd529afa6b63711d5a733065722d0c3e2724af9e40a/scipy-1.17.1-cp311-cp311-macosx_10_14_x86_64.whl", hash = "sha256:1f95b894f13729334fb990162e911c9e5dc1ab390c58aa6cbecb389c5b5e28ec", size = 31613675, upload-time = "2026-02-23T00:16:00.13Z" }, + { url = "https://files.pythonhosted.org/packages/f7/58/bccc2861b305abdd1b8663d6130c0b3d7cc22e8d86663edbc8401bfd40d4/scipy-1.17.1-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:e18f12c6b0bc5a592ed23d3f7b891f68fd7f8241d69b7883769eb5d5dfb52696", size = 28162057, upload-time = "2026-02-23T00:16:09.456Z" }, + { url = "https://files.pythonhosted.org/packages/6d/ee/18146b7757ed4976276b9c9819108adbc73c5aad636e5353e20746b73069/scipy-1.17.1-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:a3472cfbca0a54177d0faa68f697d8ba4c80bbdc19908c3465556d9f7efce9ee", size = 20334032, upload-time = "2026-02-23T00:16:17.358Z" }, + { url = "https://files.pythonhosted.org/packages/ec/e6/cef1cf3557f0c54954198554a10016b6a03b2ec9e22a4e1df734936bd99c/scipy-1.17.1-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:766e0dc5a616d026a3a1cffa379af959671729083882f50307e18175797b3dfd", size = 22709533, upload-time = "2026-02-23T00:16:25.791Z" }, + { url = "https://files.pythonhosted.org/packages/4d/60/8804678875fc59362b0fb759ab3ecce1f09c10a735680318ac30da8cd76b/scipy-1.17.1-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:744b2bf3640d907b79f3fd7874efe432d1cf171ee721243e350f55234b4cec4c", size = 33062057, upload-time = "2026-02-23T00:16:36.931Z" }, + { url = "https://files.pythonhosted.org/packages/09/7d/af933f0f6e0767995b4e2d705a0665e454d1c19402aa7e895de3951ebb04/scipy-1.17.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:43af8d1f3bea642559019edfe64e9b11192a8978efbd1539d7bc2aaa23d92de4", size = 35349300, upload-time = "2026-02-23T00:16:49.108Z" }, + { url = "https://files.pythonhosted.org/packages/b4/3d/7ccbbdcbb54c8fdc20d3b6930137c782a163fa626f0aef920349873421ba/scipy-1.17.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:cd96a1898c0a47be4520327e01f874acfd61fb48a9420f8aa9f6483412ffa444", size = 35127333, upload-time = "2026-02-23T00:17:01.293Z" }, + { url = "https://files.pythonhosted.org/packages/e8/19/f926cb11c42b15ba08e3a71e376d816ac08614f769b4f47e06c3580c836a/scipy-1.17.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:4eb6c25dd62ee8d5edf68a8e1c171dd71c292fdae95d8aeb3dd7d7de4c364082", size = 37741314, upload-time = "2026-02-23T00:17:12.576Z" }, + { url = "https://files.pythonhosted.org/packages/95/da/0d1df507cf574b3f224ccc3d45244c9a1d732c81dcb26b1e8a766ae271a8/scipy-1.17.1-cp311-cp311-win_amd64.whl", hash = "sha256:d30e57c72013c2a4fe441c2fcb8e77b14e152ad48b5464858e07e2ad9fbfceff", size = 36607512, upload-time = "2026-02-23T00:17:23.424Z" }, + { url = "https://files.pythonhosted.org/packages/68/7f/bdd79ceaad24b671543ffe0ef61ed8e659440eb683b66f033454dcee90eb/scipy-1.17.1-cp311-cp311-win_arm64.whl", hash = "sha256:9ecb4efb1cd6e8c4afea0daa91a87fbddbce1b99d2895d151596716c0b2e859d", size = 24599248, upload-time = "2026-02-23T00:17:34.561Z" }, + { url = "https://files.pythonhosted.org/packages/35/48/b992b488d6f299dbe3f11a20b24d3dda3d46f1a635ede1c46b5b17a7b163/scipy-1.17.1-cp312-cp312-macosx_10_14_x86_64.whl", hash = "sha256:35c3a56d2ef83efc372eaec584314bd0ef2e2f0d2adb21c55e6ad5b344c0dcb8", size = 31610954, upload-time = "2026-02-23T00:17:49.855Z" }, + { url = "https://files.pythonhosted.org/packages/b2/02/cf107b01494c19dc100f1d0b7ac3cc08666e96ba2d64db7626066cee895e/scipy-1.17.1-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:fcb310ddb270a06114bb64bbe53c94926b943f5b7f0842194d585c65eb4edd76", size = 28172662, upload-time = "2026-02-23T00:18:01.64Z" }, + { url = "https://files.pythonhosted.org/packages/cf/a9/599c28631bad314d219cf9ffd40e985b24d603fc8a2f4ccc5ae8419a535b/scipy-1.17.1-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:cc90d2e9c7e5c7f1a482c9875007c095c3194b1cfedca3c2f3291cdc2bc7c086", size = 20344366, upload-time = "2026-02-23T00:18:12.015Z" }, + { url = "https://files.pythonhosted.org/packages/35/f5/906eda513271c8deb5af284e5ef0206d17a96239af79f9fa0aebfe0e36b4/scipy-1.17.1-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:c80be5ede8f3f8eded4eff73cc99a25c388ce98e555b17d31da05287015ffa5b", size = 22704017, upload-time = "2026-02-23T00:18:21.502Z" }, + { url = "https://files.pythonhosted.org/packages/da/34/16f10e3042d2f1d6b66e0428308ab52224b6a23049cb2f5c1756f713815f/scipy-1.17.1-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e19ebea31758fac5893a2ac360fedd00116cbb7628e650842a6691ba7ca28a21", size = 32927842, upload-time = "2026-02-23T00:18:35.367Z" }, + { url = "https://files.pythonhosted.org/packages/01/8e/1e35281b8ab6d5d72ebe9911edcdffa3f36b04ed9d51dec6dd140396e220/scipy-1.17.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:02ae3b274fde71c5e92ac4d54bc06c42d80e399fec704383dcd99b301df37458", size = 35235890, upload-time = "2026-02-23T00:18:49.188Z" }, + { url = "https://files.pythonhosted.org/packages/c5/5c/9d7f4c88bea6e0d5a4f1bc0506a53a00e9fcb198de372bfe4d3652cef482/scipy-1.17.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8a604bae87c6195d8b1045eddece0514d041604b14f2727bbc2b3020172045eb", size = 35003557, upload-time = "2026-02-23T00:18:54.74Z" }, + { url = "https://files.pythonhosted.org/packages/65/94/7698add8f276dbab7a9de9fb6b0e02fc13ee61d51c7c3f85ac28b65e1239/scipy-1.17.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:f590cd684941912d10becc07325a3eeb77886fe981415660d9265c4c418d0bea", size = 37625856, upload-time = "2026-02-23T00:19:00.307Z" }, + { url = "https://files.pythonhosted.org/packages/a2/84/dc08d77fbf3d87d3ee27f6a0c6dcce1de5829a64f2eae85a0ecc1f0daa73/scipy-1.17.1-cp312-cp312-win_amd64.whl", hash = "sha256:41b71f4a3a4cab9d366cd9065b288efc4d4f3c0b37a91a8e0947fb5bd7f31d87", size = 36549682, upload-time = "2026-02-23T00:19:07.67Z" }, + { url = "https://files.pythonhosted.org/packages/bc/98/fe9ae9ffb3b54b62559f52dedaebe204b408db8109a8c66fdd04869e6424/scipy-1.17.1-cp312-cp312-win_arm64.whl", hash = "sha256:f4115102802df98b2b0db3cce5cb9b92572633a1197c77b7553e5203f284a5b3", size = 24547340, upload-time = "2026-02-23T00:19:12.024Z" }, + { url = "https://files.pythonhosted.org/packages/76/27/07ee1b57b65e92645f219b37148a7e7928b82e2b5dbeccecb4dff7c64f0b/scipy-1.17.1-cp313-cp313-macosx_10_14_x86_64.whl", hash = "sha256:5e3c5c011904115f88a39308379c17f91546f77c1667cea98739fe0fccea804c", size = 31590199, upload-time = "2026-02-23T00:19:17.192Z" }, + { url = "https://files.pythonhosted.org/packages/ec/ae/db19f8ab842e9b724bf5dbb7db29302a91f1e55bc4d04b1025d6d605a2c5/scipy-1.17.1-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:6fac755ca3d2c3edcb22f479fceaa241704111414831ddd3bc6056e18516892f", size = 28154001, upload-time = "2026-02-23T00:19:22.241Z" }, + { url = "https://files.pythonhosted.org/packages/5b/58/3ce96251560107b381cbd6e8413c483bbb1228a6b919fa8652b0d4090e7f/scipy-1.17.1-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:7ff200bf9d24f2e4d5dc6ee8c3ac64d739d3a89e2326ba68aaf6c4a2b838fd7d", size = 20325719, upload-time = "2026-02-23T00:19:26.329Z" }, + { url = "https://files.pythonhosted.org/packages/b2/83/15087d945e0e4d48ce2377498abf5ad171ae013232ae31d06f336e64c999/scipy-1.17.1-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:4b400bdc6f79fa02a4d86640310dde87a21fba0c979efff5248908c6f15fad1b", size = 22683595, upload-time = "2026-02-23T00:19:30.304Z" }, + { url = "https://files.pythonhosted.org/packages/b4/e0/e58fbde4a1a594c8be8114eb4aac1a55bcd6587047efc18a61eb1f5c0d30/scipy-1.17.1-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2b64ca7d4aee0102a97f3ba22124052b4bd2152522355073580bf4845e2550b6", size = 32896429, upload-time = "2026-02-23T00:19:35.536Z" }, + { url = "https://files.pythonhosted.org/packages/f5/5f/f17563f28ff03c7b6799c50d01d5d856a1d55f2676f537ca8d28c7f627cd/scipy-1.17.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:581b2264fc0aa555f3f435a5944da7504ea3a065d7029ad60e7c3d1ae09c5464", size = 35203952, upload-time = "2026-02-23T00:19:42.259Z" }, + { url = "https://files.pythonhosted.org/packages/8d/a5/9afd17de24f657fdfe4df9a3f1ea049b39aef7c06000c13db1530d81ccca/scipy-1.17.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:beeda3d4ae615106d7094f7e7cef6218392e4465cc95d25f900bebabfded0950", size = 34979063, upload-time = "2026-02-23T00:19:47.547Z" }, + { url = "https://files.pythonhosted.org/packages/8b/13/88b1d2384b424bf7c924f2038c1c409f8d88bb2a8d49d097861dd64a57b2/scipy-1.17.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6609bc224e9568f65064cfa72edc0f24ee6655b47575954ec6339534b2798369", size = 37598449, upload-time = "2026-02-23T00:19:53.238Z" }, + { url = "https://files.pythonhosted.org/packages/35/e5/d6d0e51fc888f692a35134336866341c08655d92614f492c6860dc45bb2c/scipy-1.17.1-cp313-cp313-win_amd64.whl", hash = "sha256:37425bc9175607b0268f493d79a292c39f9d001a357bebb6b88fdfaff13f6448", size = 36510943, upload-time = "2026-02-23T00:20:50.89Z" }, + { url = "https://files.pythonhosted.org/packages/2a/fd/3be73c564e2a01e690e19cc618811540ba5354c67c8680dce3281123fb79/scipy-1.17.1-cp313-cp313-win_arm64.whl", hash = "sha256:5cf36e801231b6a2059bf354720274b7558746f3b1a4efb43fcf557ccd484a87", size = 24545621, upload-time = "2026-02-23T00:20:55.871Z" }, + { url = "https://files.pythonhosted.org/packages/6f/6b/17787db8b8114933a66f9dcc479a8272e4b4da75fe03b0c282f7b0ade8cd/scipy-1.17.1-cp313-cp313t-macosx_10_14_x86_64.whl", hash = "sha256:d59c30000a16d8edc7e64152e30220bfbd724c9bbb08368c054e24c651314f0a", size = 31936708, upload-time = "2026-02-23T00:19:58.694Z" }, + { url = "https://files.pythonhosted.org/packages/38/2e/524405c2b6392765ab1e2b722a41d5da33dc5c7b7278184a8ad29b6cb206/scipy-1.17.1-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:010f4333c96c9bb1a4516269e33cb5917b08ef2166d5556ca2fd9f082a9e6ea0", size = 28570135, upload-time = "2026-02-23T00:20:03.934Z" }, + { url = "https://files.pythonhosted.org/packages/fd/c3/5bd7199f4ea8556c0c8e39f04ccb014ac37d1468e6cfa6a95c6b3562b76e/scipy-1.17.1-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:2ceb2d3e01c5f1d83c4189737a42d9cb2fc38a6eeed225e7515eef71ad301dce", size = 20741977, upload-time = "2026-02-23T00:20:07.935Z" }, + { url = "https://files.pythonhosted.org/packages/d9/b8/8ccd9b766ad14c78386599708eb745f6b44f08400a5fd0ade7cf89b6fc93/scipy-1.17.1-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:844e165636711ef41f80b4103ed234181646b98a53c8f05da12ca5ca289134f6", size = 23029601, upload-time = "2026-02-23T00:20:12.161Z" }, + { url = "https://files.pythonhosted.org/packages/6d/a0/3cb6f4d2fb3e17428ad2880333cac878909ad1a89f678527b5328b93c1d4/scipy-1.17.1-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:158dd96d2207e21c966063e1635b1063cd7787b627b6f07305315dd73d9c679e", size = 33019667, upload-time = "2026-02-23T00:20:17.208Z" }, + { url = "https://files.pythonhosted.org/packages/f3/c3/2d834a5ac7bf3a0c806ad1508efc02dda3c8c61472a56132d7894c312dea/scipy-1.17.1-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:74cbb80d93260fe2ffa334efa24cb8f2f0f622a9b9febf8b483c0b865bfb3475", size = 35264159, upload-time = "2026-02-23T00:20:23.087Z" }, + { url = "https://files.pythonhosted.org/packages/4d/77/d3ed4becfdbd217c52062fafe35a72388d1bd82c2d0ba5ca19d6fcc93e11/scipy-1.17.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:dbc12c9f3d185f5c737d801da555fb74b3dcfa1a50b66a1a93e09190f41fab50", size = 35102771, upload-time = "2026-02-23T00:20:28.636Z" }, + { url = "https://files.pythonhosted.org/packages/bd/12/d19da97efde68ca1ee5538bb261d5d2c062f0c055575128f11a2730e3ac1/scipy-1.17.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:94055a11dfebe37c656e70317e1996dc197e1a15bbcc351bcdd4610e128fe1ca", size = 37665910, upload-time = "2026-02-23T00:20:34.743Z" }, + { url = "https://files.pythonhosted.org/packages/06/1c/1172a88d507a4baaf72c5a09bb6c018fe2ae0ab622e5830b703a46cc9e44/scipy-1.17.1-cp313-cp313t-win_amd64.whl", hash = "sha256:e30bdeaa5deed6bc27b4cc490823cd0347d7dae09119b8803ae576ea0ce52e4c", size = 36562980, upload-time = "2026-02-23T00:20:40.575Z" }, + { url = "https://files.pythonhosted.org/packages/70/b0/eb757336e5a76dfa7911f63252e3b7d1de00935d7705cf772db5b45ec238/scipy-1.17.1-cp313-cp313t-win_arm64.whl", hash = "sha256:a720477885a9d2411f94a93d16f9d89bad0f28ca23c3f8daa521e2dcc3f44d49", size = 24856543, upload-time = "2026-02-23T00:20:45.313Z" }, +] + +[[package]] +name = "sentence-transformers" +version = "5.6.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "huggingface-hub" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" } }, + { name = "scikit-learn" }, + { name = "scipy" }, + { name = "torch", version = "2.10.0", source = { registry = "https://pypi.org/simple" } }, + { name = "tqdm" }, + { name = "transformers" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/f9/56/d2cb00765a6b15c994a7fccf20f9032f16e8193ca49147cb5155166ad744/sentence_transformers-5.6.0.tar.gz", hash = "sha256:0e7164d051e416c1853ade7c274ff52af3f9da0f4be7f0b83d734c27699e1057", size = 453194, upload-time = "2026-06-16T14:01:56.42Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/76/c1/dc1582b79e9a2eb0cddf9559cd9bcdff084f541d6fe881fdd9d98630dba7/sentence_transformers-5.6.0-py3-none-any.whl", hash = "sha256:d2075b5e687a1611005e20ab04a6846994d51adfcf39610aed066af3c0c0b81f", size = 596411, upload-time = "2026-06-16T14:01:55.103Z" }, ] [[package]] @@ -5476,14 +6847,6 @@ version = "0.2.1" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/15/15/2e7a025fc62d764b151ae6d0f2a92f8081755ebe8d4a64099accc6f77ba6/sentencepiece-0.2.1.tar.gz", hash = "sha256:8138cec27c2f2282f4a34d9a016e3374cd40e5c6e9cb335063db66a0a3b71fad", size = 3228515, upload-time = "2025-08-12T07:00:51.718Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/af/31/5b7cccb307b485db1a2372d6d2980b0a65d067f8be5ca943a103b4acd5b3/sentencepiece-0.2.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e10fa50bdbaa5e2445dbd387979980d391760faf0ec99a09bd7780ff37eaec44", size = 1942557, upload-time = "2025-08-12T06:59:12.379Z" }, - { url = "https://files.pythonhosted.org/packages/1f/41/0ac923a8e685ad290c5afc8ae55c5844977b8d75076fcc04302b9a324274/sentencepiece-0.2.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2f27ae6deea72efdb6f361750c92f6c21fd0ad087445082770cc34015213c526", size = 1325384, upload-time = "2025-08-12T06:59:14.334Z" }, - { url = "https://files.pythonhosted.org/packages/fc/ef/3751555d67daf9003384978f169d31c775cb5c7baf28633caaf1eb2b2b4d/sentencepiece-0.2.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:60937c959e6f44159fdd9f56fbdd302501f96114a5ba436829496d5f32d8de3f", size = 1253317, upload-time = "2025-08-12T06:59:16.247Z" }, - { url = "https://files.pythonhosted.org/packages/46/a5/742c69b7bd144eb32b6e5fd50dbd8abbbc7a95fce2fe16e50156fa400e3b/sentencepiece-0.2.1-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d8b1d91545578852f128650b8cce4ec20f93d39b378ff554ebe66290f2dabb92", size = 1316379, upload-time = "2025-08-12T06:59:17.825Z" }, - { url = "https://files.pythonhosted.org/packages/c8/89/8deeafbba2871e8fa10f20f17447786f4ac38085925335728d360eaf4cae/sentencepiece-0.2.1-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:27e38eee653abc3d387862e67bc5c8b6f428cd604e688b85d29170b7e725c26c", size = 1387926, upload-time = "2025-08-12T06:59:19.395Z" }, - { url = "https://files.pythonhosted.org/packages/c3/ca/67fe73005f0ab617c6a970b199754e28e524b6873aa7025224fad3cda252/sentencepiece-0.2.1-cp310-cp310-win32.whl", hash = "sha256:251874d720ac7f28024a168501f3c7bb15d1802245f6e66de565f18bbb9b5eaa", size = 999550, upload-time = "2025-08-12T06:59:20.844Z" }, - { url = "https://files.pythonhosted.org/packages/6d/33/dc5b54042050d2dda4229c3ce1f862541c99966390b6aa20f54d520d2dc2/sentencepiece-0.2.1-cp310-cp310-win_amd64.whl", hash = "sha256:e52144670738b4b477fade6c2a9b6af71a8d0094514c9853ac9f6fc1fcfabae7", size = 1054613, upload-time = "2025-08-12T06:59:22.255Z" }, - { url = "https://files.pythonhosted.org/packages/fa/19/1ea47f46ff97fe04422b78997da1a37cd632f414aae042d27a9009c5b733/sentencepiece-0.2.1-cp310-cp310-win_arm64.whl", hash = "sha256:9076430ac25dfa7147d9d05751dbc66a04bc1aaac371c07f84952979ea59f0d0", size = 1033884, upload-time = "2025-08-12T06:59:24.194Z" }, { url = "https://files.pythonhosted.org/packages/d8/15/46afbab00733d81788b64be430ca1b93011bb9388527958e26cc31832de5/sentencepiece-0.2.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:6356d0986b8b8dc351b943150fcd81a1c6e6e4d439772e8584c64230e58ca987", size = 1942560, upload-time = "2025-08-12T06:59:25.82Z" }, { url = "https://files.pythonhosted.org/packages/fa/79/7c01b8ef98a0567e9d84a4e7a910f8e7074fcbf398a5cd76f93f4b9316f9/sentencepiece-0.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8f8ba89a3acb3dc1ae90f65ec1894b0b9596fdb98ab003ff38e058f898b39bc7", size = 1325385, upload-time = "2025-08-12T06:59:27.722Z" }, { url = "https://files.pythonhosted.org/packages/bb/88/2b41e07bd24f33dcf2f18ec3b74247aa4af3526bad8907b8727ea3caba03/sentencepiece-0.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:02593eca45440ef39247cee8c47322a34bdcc1d8ae83ad28ba5a899a2cf8d79a", size = 1253319, upload-time = "2025-08-12T06:59:29.306Z" }, @@ -5537,16 +6900,6 @@ version = "1.3.7" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/8d/48/49393a96a2eef1ab418b17475fb92b8fcfad83d099e678751b05472e69de/setproctitle-1.3.7.tar.gz", hash = "sha256:bc2bc917691c1537d5b9bca1468437176809c7e11e5694ca79a9ca12345dcb9e", size = 27002, upload-time = "2025-09-05T12:51:25.278Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/f2/48/fb401ec8c4953d519d05c87feca816ad668b8258448ff60579ac7a1c1386/setproctitle-1.3.7-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:cf555b6299f10a6eb44e4f96d2f5a3884c70ce25dc5c8796aaa2f7b40e72cb1b", size = 18079, upload-time = "2025-09-05T12:49:07.732Z" }, - { url = "https://files.pythonhosted.org/packages/cc/a3/c2b0333c2716fb3b4c9a973dd113366ac51b4f8d56b500f4f8f704b4817a/setproctitle-1.3.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:690b4776f9c15aaf1023bb07d7c5b797681a17af98a4a69e76a1d504e41108b7", size = 13099, upload-time = "2025-09-05T12:49:09.222Z" }, - { url = "https://files.pythonhosted.org/packages/0e/f8/17bda581c517678260e6541b600eeb67745f53596dc077174141ba2f6702/setproctitle-1.3.7-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:00afa6fc507967d8c9d592a887cdc6c1f5742ceac6a4354d111ca0214847732c", size = 31793, upload-time = "2025-09-05T12:49:10.297Z" }, - { url = "https://files.pythonhosted.org/packages/27/d1/76a33ae80d4e788ecab9eb9b53db03e81cfc95367ec7e3fbf4989962fedd/setproctitle-1.3.7-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9e02667f6b9fc1238ba753c0f4b0a37ae184ce8f3bbbc38e115d99646b3f4cd3", size = 32779, upload-time = "2025-09-05T12:49:12.157Z" }, - { url = "https://files.pythonhosted.org/packages/59/27/1a07c38121967061564f5e0884414a5ab11a783260450172d4fc68c15621/setproctitle-1.3.7-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:83fcd271567d133eb9532d3b067c8a75be175b2b3b271e2812921a05303a693f", size = 34578, upload-time = "2025-09-05T12:49:13.393Z" }, - { url = "https://files.pythonhosted.org/packages/d8/d4/725e6353935962d8bb12cbf7e7abba1d0d738c7f6935f90239d8e1ccf913/setproctitle-1.3.7-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:13fe37951dda1a45c35d77d06e3da5d90e4f875c4918a7312b3b4556cfa7ff64", size = 32030, upload-time = "2025-09-05T12:49:15.362Z" }, - { url = "https://files.pythonhosted.org/packages/67/24/e4677ae8e1cb0d549ab558b12db10c175a889be0974c589c428fece5433e/setproctitle-1.3.7-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:a05509cfb2059e5d2ddff701d38e474169e9ce2a298cf1b6fd5f3a213a553fe5", size = 33363, upload-time = "2025-09-05T12:49:16.829Z" }, - { url = "https://files.pythonhosted.org/packages/55/d4/69ce66e4373a48fdbb37489f3ded476bb393e27f514968c3a69a67343ae0/setproctitle-1.3.7-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:6da835e76ae18574859224a75db6e15c4c2aaa66d300a57efeaa4c97ca4c7381", size = 31508, upload-time = "2025-09-05T12:49:18.032Z" }, - { url = "https://files.pythonhosted.org/packages/4b/5a/42c1ed0e9665d068146a68326529b5686a1881c8b9197c2664db4baf6aeb/setproctitle-1.3.7-cp310-cp310-win32.whl", hash = "sha256:9e803d1b1e20240a93bac0bc1025363f7f80cb7eab67dfe21efc0686cc59ad7c", size = 12558, upload-time = "2025-09-05T12:49:19.742Z" }, - { url = "https://files.pythonhosted.org/packages/dc/fe/dd206cc19a25561921456f6cb12b405635319299b6f366e0bebe872abc18/setproctitle-1.3.7-cp310-cp310-win_amd64.whl", hash = "sha256:a97200acc6b64ec4cada52c2ecaf1fba1ef9429ce9c542f8a7db5bcaa9dcbd95", size = 13245, upload-time = "2025-09-05T12:49:21.023Z" }, { url = "https://files.pythonhosted.org/packages/04/cd/1b7ba5cad635510720ce19d7122154df96a2387d2a74217be552887c93e5/setproctitle-1.3.7-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:a600eeb4145fb0ee6c287cb82a2884bd4ec5bbb076921e287039dcc7b7cc6dd0", size = 18085, upload-time = "2025-09-05T12:49:22.183Z" }, { url = "https://files.pythonhosted.org/packages/8f/1a/b2da0a620490aae355f9d72072ac13e901a9fec809a6a24fc6493a8f3c35/setproctitle-1.3.7-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:97a090fed480471bb175689859532709e28c085087e344bca45cf318034f70c4", size = 13097, upload-time = "2025-09-05T12:49:23.322Z" }, { url = "https://files.pythonhosted.org/packages/18/2e/bd03ff02432a181c1787f6fc2a678f53b7dacdd5ded69c318fe1619556e8/setproctitle-1.3.7-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:1607b963e7b53e24ec8a2cb4e0ab3ae591d7c6bf0a160feef0551da63452b37f", size = 32191, upload-time = "2025-09-05T12:49:24.567Z" }, @@ -5587,9 +6940,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/dd/68/17e8aea0ed5ebc17fbf03ed2562bfab277c280e3625850c38d92a7b5fcd9/setproctitle-1.3.7-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:5fa1953126a3b9bd47049d58c51b9dac72e78ed120459bd3aceb1bacee72357c", size = 33727, upload-time = "2025-09-05T12:50:12.032Z" }, { url = "https://files.pythonhosted.org/packages/b2/33/90a3bf43fe3a2242b4618aa799c672270250b5780667898f30663fd94993/setproctitle-1.3.7-cp313-cp313t-win32.whl", hash = "sha256:4a5e212bf438a4dbeece763f4962ad472c6008ff6702e230b4f16a037e2f6f29", size = 12549, upload-time = "2025-09-05T12:50:13.074Z" }, { url = "https://files.pythonhosted.org/packages/0b/0e/50d1f07f3032e1f23d814ad6462bc0a138f369967c72494286b8a5228e40/setproctitle-1.3.7-cp313-cp313t-win_amd64.whl", hash = "sha256:cf2727b733e90b4f874bac53e3092aa0413fe1ea6d4f153f01207e6ce65034d9", size = 13243, upload-time = "2025-09-05T12:50:14.146Z" }, - { url = "https://files.pythonhosted.org/packages/34/8a/aff5506ce89bc3168cb492b18ba45573158d528184e8a9759a05a09088a9/setproctitle-1.3.7-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:eb440c5644a448e6203935ed60466ec8d0df7278cd22dc6cf782d07911bcbea6", size = 12654, upload-time = "2025-09-05T12:51:17.141Z" }, - { url = "https://files.pythonhosted.org/packages/41/89/5b6f2faedd6ced3d3c085a5efbd91380fb1f61f4c12bc42acad37932f4e9/setproctitle-1.3.7-pp310-pypy310_pp73-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:502b902a0e4c69031b87870ff4986c290ebbb12d6038a70639f09c331b18efb2", size = 14284, upload-time = "2025-09-05T12:51:18.393Z" }, - { url = "https://files.pythonhosted.org/packages/0a/c0/4312fed3ca393a29589603fd48f17937b4ed0638b923bac75a728382e730/setproctitle-1.3.7-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:f6f268caeabb37ccd824d749e7ce0ec6337c4ed954adba33ec0d90cc46b0ab78", size = 13282, upload-time = "2025-09-05T12:51:19.703Z" }, { url = "https://files.pythonhosted.org/packages/c3/5b/5e1c117ac84e3cefcf8d7a7f6b2461795a87e20869da065a5c087149060b/setproctitle-1.3.7-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:b1cac6a4b0252b8811d60b6d8d0f157c0fdfed379ac89c25a914e6346cf355a1", size = 12587, upload-time = "2025-09-05T12:51:21.195Z" }, { url = "https://files.pythonhosted.org/packages/73/02/b9eadc226195dcfa90eed37afe56b5dd6fa2f0e5220ab8b7867b8862b926/setproctitle-1.3.7-pp311-pypy311_pp73-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:f1704c9e041f2b1dc38f5be4552e141e1432fba3dd52c72eeffd5bc2db04dc65", size = 14286, upload-time = "2025-09-05T12:51:22.61Z" }, { url = "https://files.pythonhosted.org/packages/28/26/1be1d2a53c2a91ec48fa2ff4a409b395f836798adf194d99de9c059419ea/setproctitle-1.3.7-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:b08b61976ffa548bd5349ce54404bf6b2d51bd74d4f1b241ed1b0f25bce09c3a", size = 13282, upload-time = "2025-09-05T12:51:24.094Z" }, @@ -5631,6 +6981,52 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2", size = 10235, upload-time = "2024-02-25T23:20:01.196Z" }, ] +[[package]] +name = "soundfile" +version = "0.14.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cffi" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-14-granite-switch-tutorials' or extra == 'extra-14-granite-switch-vllm' or extra == 'group-14-granite-switch-dev' or extra == 'group-14-granite-switch-test' or extra == 'group-14-granite-switch-vllm19'" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.13' and extra == 'extra-14-granite-switch-vllm20') or (python_full_version < '3.13' and extra == 'group-14-granite-switch-dev-vllm20') or (python_full_version < '3.13' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20')" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.13' and extra == 'extra-14-granite-switch-vllm20') or (python_full_version >= '3.13' and extra == 'group-14-granite-switch-dev-vllm20') or (python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20') or (extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20')" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/d2/db/949331952a6fb1c5b12e9de80fd08747966c2039d1a61db4764fbd3981c2/soundfile-0.14.0.tar.gz", hash = "sha256:ba1c1a2d618bca5c406647c83b89f07cc8810fa506a50622a6993ba130c1de11", size = 47842, upload-time = "2026-06-06T08:58:47.869Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b1/d1/5e338af9ca6ed0786cd5bb03f6d60de1c325728c1189014f3b59aae7403c/soundfile-0.14.0-py2.py3-none-any.whl", hash = "sha256:8ba81ae3a89fd5ab3bef8a8eb481fbbe794e806309675a89b4df48b8d31908a8", size = 26799, upload-time = "2026-06-06T08:58:33.269Z" }, + { url = "https://files.pythonhosted.org/packages/7e/72/c6b21e58d3113596e7e8de0a08d6f1d95173492cfbca0a4db14148cbba2a/soundfile-0.14.0-py2.py3-none-macosx_10_9_x86_64.whl", hash = "sha256:19be05428da76ed61a4cad29b8e4bcf43a3e5c100089d2ec81dc961eed1b0dd4", size = 1144568, upload-time = "2026-06-06T08:58:35.231Z" }, + { url = "https://files.pythonhosted.org/packages/63/7a/dfdd6f8c748988427119f75eb860a3cedd858d1aea1fe28f39ad8559ef22/soundfile-0.14.0-py2.py3-none-macosx_11_0_arm64.whl", hash = "sha256:d828d35a059626da52f1415b5faee610aeab393319cb3fc4a9aef47b619fc14c", size = 1103726, upload-time = "2026-06-06T08:58:37.948Z" }, + { url = "https://files.pythonhosted.org/packages/4a/f8/fc39fad6f879633461d27394cd1ddaf1f769ffa0597dca35872f51b16461/soundfile-0.14.0-py2.py3-none-manylinux_2_28_aarch64.whl", hash = "sha256:e85724a90bc99a6e8062c0b4ddf725f53b2a3b70afd4da875e9d2cfc4e92f377", size = 1238050, upload-time = "2026-06-06T08:58:39.932Z" }, + { url = "https://files.pythonhosted.org/packages/7b/a2/70fd4432b924684c372df8b0a45708c36c057ef3596c9eb53e0a806b980b/soundfile-0.14.0-py2.py3-none-manylinux_2_28_x86_64.whl", hash = "sha256:1e38bac1853412871318e82a1ba69a8be677619b56025bbfcccdb41b6cafe82d", size = 1315963, upload-time = "2026-06-06T08:58:41.716Z" }, + { url = "https://files.pythonhosted.org/packages/d9/34/c9e80783d83eab739a9531fdee03675d53e0bf1b2ccb4bb3af5844675046/soundfile-0.14.0-py2.py3-none-win32.whl", hash = "sha256:0a6ae43c50c71b4e020cc55382925cb89451c1ed1a0c3d0f5d802da269226849", size = 902199, upload-time = "2026-06-06T08:58:43.289Z" }, + { url = "https://files.pythonhosted.org/packages/ed/97/b39c18ac1df45e755ca22b8b00e872929da5d107998a207a5e4ac831bfda/soundfile-0.14.0-py2.py3-none-win_amd64.whl", hash = "sha256:299491d3499460fb1b74bb4bd78b57ffc2d243a5fafa7b6ec1b264875c78453e", size = 1021480, upload-time = "2026-06-06T08:58:45.016Z" }, + { url = "https://files.pythonhosted.org/packages/f4/83/55c65e61cf457805ce2ec157c1c6ae17715d0851aa2374422de0538838ca/soundfile-0.14.0-py2.py3-none-win_arm64.whl", hash = "sha256:e090704718e124e7c844695236f1fce8d18a5e761eaf7c82dfcd124620805f98", size = 888858, upload-time = "2026-06-06T08:58:46.593Z" }, +] + +[[package]] +name = "soxr" +version = "1.1.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-14-granite-switch-tutorials' or extra == 'extra-14-granite-switch-vllm' or extra == 'group-14-granite-switch-dev' or extra == 'group-14-granite-switch-test' or extra == 'group-14-granite-switch-vllm19'" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.13' and extra == 'extra-14-granite-switch-vllm20') or (python_full_version < '3.13' and extra == 'group-14-granite-switch-dev-vllm20') or (python_full_version < '3.13' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20')" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.13' and extra == 'extra-14-granite-switch-vllm20') or (python_full_version >= '3.13' and extra == 'group-14-granite-switch-dev-vllm20') or (python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20') or (extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20')" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ed/11/27cebce4a108f77afea7c80545115536b45e3f11ebfb914f638fdd9ba847/soxr-1.1.0.tar.gz", hash = "sha256:9f228ae21c78fa9359ca98d8a5e8e91f30639e438e574133dace62c5b5309e44", size = 173067, upload-time = "2026-05-03T00:15:18.214Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8e/49/3e6bc84f87439f222f40b616e9a29a170f41fb564710ea510df19dc26907/soxr-1.1.0-cp311-cp311-macosx_10_14_x86_64.whl", hash = "sha256:34cc92208c3c412c046813e69da639c04a792c6a41fbfd7d909d359cd3e97a2d", size = 205699, upload-time = "2026-05-03T00:14:46.67Z" }, + { url = "https://files.pythonhosted.org/packages/2f/94/216f46096a85b07d1e6ba7fd44491402e912a3d688cd4f36f0a600ca155f/soxr-1.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:bd30f7201eac896ebf5db7b09156e6f1a1b82601900d29d9c8449bdad8365b11", size = 167381, upload-time = "2026-05-03T00:14:48.012Z" }, + { url = "https://files.pythonhosted.org/packages/94/cb/06caa463b8181ec1981bd6376d4a873748b7008193188b8cfb60391eb131/soxr-1.1.0-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1577865e993f98ffb261257c3060fa76ec3db44ed3f181b16464268000424464", size = 210938, upload-time = "2026-05-03T00:14:49.768Z" }, + { url = "https://files.pythonhosted.org/packages/86/47/d5964551ca818b7f0c7ef7f3899056263b60ef098a801066350a9672ca8f/soxr-1.1.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3da87e3ffa3e41823d873b051c7ecb2acebd8d1b6b46b752f5facf10a0d84ab9", size = 245268, upload-time = "2026-05-03T00:14:51.422Z" }, + { url = "https://files.pythonhosted.org/packages/8f/29/371467eb86c7ba6810df0bfe9409bcd9c52ec5615b111190fafe23e4d2e1/soxr-1.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:ae30c48ac795378cf23ba3c7c640b8ff794af714ac388b9fd6b31a40b39e6e86", size = 176779, upload-time = "2026-05-03T00:14:53.09Z" }, + { url = "https://files.pythonhosted.org/packages/06/8a/f3da7973b5f1b05d2d7e94d5376b881dcbc05297900cae6c3d33d95b209b/soxr-1.1.0-cp312-abi3-macosx_10_14_x86_64.whl", hash = "sha256:e0e09fa633ce2e67df08b298afced4d184f6e753fc330f241022250f1d0d61da", size = 204124, upload-time = "2026-05-03T00:14:54.505Z" }, + { url = "https://files.pythonhosted.org/packages/03/dc/200013a74641f8774664bbcd2346c695c05c2e300ea792adcb40a293eed0/soxr-1.1.0-cp312-abi3-macosx_11_0_arm64.whl", hash = "sha256:d6a7ad82b8d5f3fcc04b1d2ca055562b96af571e1d4fa7c6c61d0fb509ac43b4", size = 165457, upload-time = "2026-05-03T00:14:56.007Z" }, + { url = "https://files.pythonhosted.org/packages/88/2b/2e5eba817a762a2ec589ff165b8bc5955b25a0ad140045f7cd8e45410543/soxr-1.1.0-cp312-abi3-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bf98c0d7b7d5ef5bf072fee8d3020e8b664f2d195933ea7bc5089267c2e22a06", size = 206529, upload-time = "2026-05-03T00:14:57.646Z" }, + { url = "https://files.pythonhosted.org/packages/5c/f1/0e55195893228609c9a08c3b13b7a83a46c3a992cd00d3304f0f320cfb07/soxr-1.1.0-cp312-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3b033078e86f3c4a658e5697fac8995764fad9e799563616b630136b613167f1", size = 240413, upload-time = "2026-05-03T00:14:59.363Z" }, + { url = "https://files.pythonhosted.org/packages/b0/4d/621e4150e4815246ad552d215a8a294a90143fedd19ee442cf82d3b3abc8/soxr-1.1.0-cp312-abi3-win_amd64.whl", hash = "sha256:6ae2a174bffea94e8ead857dad85999d3f49f091774dbad5b046c0417d7092f4", size = 174357, upload-time = "2026-05-03T00:15:00.724Z" }, +] + [[package]] name = "sse-starlette" version = "3.4.4" @@ -5658,6 +7054,40 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/f1/7b/ce1eafaf1a76852e2ec9b22edecf1daa58175c090266e9f6c64afcd81d91/stack_data-0.6.3-py3-none-any.whl", hash = "sha256:d5558e0c25a4cb0853cddad3d77da9891a08cb85dd9f9f91b9f8cd66e511e695", size = 24521, upload-time = "2023-09-30T13:58:03.53Z" }, ] +[[package]] +name = "standard-aifc" +version = "3.13.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "audioop-lts", marker = "python_full_version >= '3.13' or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20')" }, + { name = "standard-chunk", marker = "python_full_version >= '3.13' or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20')" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c4/53/6050dc3dde1671eb3db592c13b55a8005e5040131f7509cef0215212cb84/standard_aifc-3.13.0.tar.gz", hash = "sha256:64e249c7cb4b3daf2fdba4e95721f811bde8bdfc43ad9f936589b7bb2fae2e43", size = 15240, upload-time = "2024-10-30T16:01:31.772Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c3/52/5fbb203394cc852334d1575cc020f6bcec768d2265355984dfd361968f36/standard_aifc-3.13.0-py3-none-any.whl", hash = "sha256:f7ae09cc57de1224a0dd8e3eb8f73830be7c3d0bc485de4c1f82b4a7f645ac66", size = 10492, upload-time = "2024-10-30T16:01:07.071Z" }, +] + +[[package]] +name = "standard-chunk" +version = "3.13.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/43/06/ce1bb165c1f111c7d23a1ad17204d67224baa69725bb6857a264db61beaf/standard_chunk-3.13.0.tar.gz", hash = "sha256:4ac345d37d7e686d2755e01836b8d98eda0d1a3ee90375e597ae43aaf064d654", size = 4672, upload-time = "2024-10-30T16:18:28.326Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7a/90/a5c1084d87767d787a6caba615aa50dc587229646308d9420c960cb5e4c0/standard_chunk-3.13.0-py3-none-any.whl", hash = "sha256:17880a26c285189c644bd5bd8f8ed2bdb795d216e3293e6dbe55bbd848e2982c", size = 4944, upload-time = "2024-10-30T16:18:26.694Z" }, +] + +[[package]] +name = "standard-sunau" +version = "3.13.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "audioop-lts", marker = "python_full_version >= '3.13' or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20')" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/66/e3/ce8d38cb2d70e05ffeddc28bb09bad77cfef979eb0a299c9117f7ed4e6a9/standard_sunau-3.13.0.tar.gz", hash = "sha256:b319a1ac95a09a2378a8442f403c66f4fd4b36616d6df6ae82b8e536ee790908", size = 9368, upload-time = "2024-10-30T16:01:41.626Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/34/ae/e3707f6c1bc6f7aa0df600ba8075bfb8a19252140cd595335be60e25f9ee/standard_sunau-3.13.0-py3-none-any.whl", hash = "sha256:53af624a9529c41062f4c2fd33837f297f3baa196b0cfceffea6555654602622", size = 7364, upload-time = "2024-10-30T16:01:28.003Z" }, +] + [[package]] name = "starlette" version = "0.52.1" @@ -5710,6 +7140,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/d7/c1/eb8f9debc45d3b7918a32ab756658a0904732f75e555402972246b0b8e71/tenacity-9.1.4-py3-none-any.whl", hash = "sha256:6095a360c919085f28c6527de529e76a06ad89b23659fa881ae0649b867a9d55", size = 28926, upload-time = "2026-02-07T10:45:32.24Z" }, ] +[[package]] +name = "threadpoolctl" +version = "3.6.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b7/4d/08c89e34946fce2aec4fbb45c9016efd5f4d7f24af8e5d93296e935631d8/threadpoolctl-3.6.0.tar.gz", hash = "sha256:8ab8b4aa3491d812b623328249fab5302a68d2d71745c8a4c719a2fcaba9f44e", size = 21274, upload-time = "2025-03-13T13:49:23.031Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/32/d5/f9a850d79b0851d1d4ef6456097579a9005b31fea68726a4ae5f2d82ddd9/threadpoolctl-3.6.0-py3-none-any.whl", hash = "sha256:43a0b8fd5a2928500110039e43a5eed8480b918967083ea48dc3ab9f13c4a7fb", size = 18638, upload-time = "2025-03-13T13:49:21.846Z" }, +] + [[package]] name = "tiktoken" version = "0.13.0" @@ -5720,13 +7159,6 @@ dependencies = [ ] sdist = { url = "https://files.pythonhosted.org/packages/e4/e5/5f3cb2159769d0f4324c0e9e87f9de3c4b1cd45848a96b2eb3566ad5ca77/tiktoken-0.13.0.tar.gz", hash = "sha256:c9435714c3a84c2319499de9a300c0e604449dd0799ff246458b3bb6a7f433c1", size = 38986, upload-time = "2026-05-15T04:51:27.153Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/38/e3/03c90dadcf5b3f82b83cee9adee60ef666b329c654f58c066af44eae0287/tiktoken-0.13.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:47b1df8d73390a24f94980c75158cdd5c56d256f16d55f30cb49c230caba9ba4", size = 1036627, upload-time = "2026-05-15T04:50:11.229Z" }, - { url = "https://files.pythonhosted.org/packages/5e/30/760463e5b2e8ad2bc229ae0a17ecb06727b6cbc094f08d8f65844315632e/tiktoken-0.13.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:7d40c6c5aab171dcd6eb8455bc567bde404bb9def60cdb8c1299cc782b242bb9", size = 984699, upload-time = "2026-05-15T04:50:12.874Z" }, - { url = "https://files.pythonhosted.org/packages/de/8a/8895f342a6b6aabd1a358e672f6f077b3ae51d0c63ca605d142db3bcd8ab/tiktoken-0.13.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:9b842981fa91accdffd48ff6408a977b7a91c3fbda55d353c3c68114d5c9d69e", size = 1118690, upload-time = "2026-05-15T04:50:14.234Z" }, - { url = "https://files.pythonhosted.org/packages/51/e0/92557768fb0801f0d9dd9243cb9b6d342900b05e4b1006d4771f49ce233e/tiktoken-0.13.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:ed5a30027cb4d8c7ca8b273d4766f3db3cf58fad9e9f3b1a68a351ffb54873d5", size = 1138423, upload-time = "2026-05-15T04:50:15.668Z" }, - { url = "https://files.pythonhosted.org/packages/8f/b9/a3d99feeedb032ffd09cd6652077f86bdee9a70dd0b990b2b272b445d4c3/tiktoken-0.13.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:7ab10f4a21c2999846940113f6dbd72e0fa06a24119feddd74cc47e85818e06d", size = 1185077, upload-time = "2026-05-15T04:50:17.19Z" }, - { url = "https://files.pythonhosted.org/packages/cc/93/bab868277d475dc6d2aaacd34cdd239c282f4908dcc8702e0a3311a8e032/tiktoken-0.13.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:a2937ad042d49d50eac6e1ba07c5661d4bd3942a5b1e0c0d08475c4df83676e1", size = 1241702, upload-time = "2026-05-15T04:50:18.772Z" }, - { url = "https://files.pythonhosted.org/packages/c3/16/27e9f7e0ed76e501cfefc9fb2112df4c7bf70ca96945b15ecb7615aac860/tiktoken-0.13.0-cp310-cp310-win_amd64.whl", hash = "sha256:44733b99bfd72b590cd0936b1c01b3b4dd73122db2d544bc1ceeb18a7678c910", size = 876565, upload-time = "2026-05-15T04:50:20.268Z" }, { url = "https://files.pythonhosted.org/packages/1a/4c/1bc81f4cd53e827c4ee67ca951b5935724716049452d8dfa09b8b82372bb/tiktoken-0.13.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:7bfe1849caa65d1e1d9871817170ec497bbb7984e182012e1bdce72f66608cdb", size = 1036353, upload-time = "2026-05-15T04:50:21.757Z" }, { url = "https://files.pythonhosted.org/packages/75/91/10b9c7076bc02c246c853201fdbbe300a4b8c5ed7b84c25f7403f4e32655/tiktoken-0.13.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:91c180fe255bd5a86d8316210d2833a1d4d33d026cd86a67812f4773743c8d26", size = 984644, upload-time = "2026-05-15T04:50:23.256Z" }, { url = "https://files.pythonhosted.org/packages/4e/e4/fceae98015fab47fcd49b8bd7f46145bcd187a47e0add1e5378ed67ef980/tiktoken-0.13.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:059c8ecf554eb5b41e6e054ba467b871b03277d267dee7244380aca4359747d4", size = 1119261, upload-time = "2026-05-15T04:50:24.348Z" }, @@ -5765,9 +7197,8 @@ dependencies = [ { name = "apache-tvm-ffi" }, { name = "cloudpickle" }, { name = "ml-dtypes" }, - { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and extra == 'extra-14-granite-switch-dev-vllm20') or (python_full_version < '3.11' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20')" }, - { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and python_full_version < '3.13' and extra == 'extra-14-granite-switch-dev-vllm20') or (python_full_version >= '3.11' and python_full_version < '3.13' and extra == 'extra-14-granite-switch-vllm20') or (python_full_version < '3.11' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20') or (python_full_version < '3.11' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (python_full_version < '3.11' and extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (python_full_version < '3.11' and extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm') or (python_full_version < '3.11' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (python_full_version < '3.11' and extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (python_full_version >= '3.13' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20') or (python_full_version >= '3.13' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (python_full_version >= '3.13' and extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (python_full_version >= '3.13' and extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm') or (python_full_version >= '3.13' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (python_full_version >= '3.13' and extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20')" }, - { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.13' and extra == 'extra-14-granite-switch-dev-vllm20') or (python_full_version >= '3.13' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20')" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.13' and extra == 'extra-14-granite-switch-vllm20') or (python_full_version < '3.13' and extra == 'group-14-granite-switch-dev-vllm20') or (python_full_version < '3.13' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20')" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.13' and extra == 'extra-14-granite-switch-vllm20') or (python_full_version >= '3.13' and extra == 'group-14-granite-switch-dev-vllm20') or (python_full_version >= '3.13' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20')" }, { name = "psutil" }, { name = "setuptools", marker = "sys_platform == 'darwin'" }, { name = "torch", version = "2.11.0", source = { registry = "https://pypi.org/simple" } }, @@ -5807,46 +7238,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/fd/18/a545c4ea42af3df6effd7d13d250ba77a0a86fb20393143bbb9a92e434d4/tokenizers-0.22.2-cp39-abi3-win32.whl", hash = "sha256:a6bf3f88c554a2b653af81f3204491c818ae2ac6fbc09e76ef4773351292bc92", size = 2502363, upload-time = "2026-01-05T10:45:20.593Z" }, { url = "https://files.pythonhosted.org/packages/65/71/0670843133a43d43070abeb1949abfdef12a86d490bea9cd9e18e37c5ff7/tokenizers-0.22.2-cp39-abi3-win_amd64.whl", hash = "sha256:c9ea31edff2968b44a88f97d784c2f16dc0729b8b143ed004699ebca91f05c48", size = 2747786, upload-time = "2026-01-05T10:45:18.411Z" }, { url = "https://files.pythonhosted.org/packages/72/f4/0de46cfa12cdcbcd464cc59fde36912af405696f687e53a091fb432f694c/tokenizers-0.22.2-cp39-abi3-win_arm64.whl", hash = "sha256:9ce725d22864a1e965217204946f830c37876eee3b2ba6fc6255e8e903d5fcbc", size = 2612133, upload-time = "2026-01-05T10:45:17.232Z" }, - { url = "https://files.pythonhosted.org/packages/84/04/655b79dbcc9b3ac5f1479f18e931a344af67e5b7d3b251d2dcdcd7558592/tokenizers-0.22.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:753d47ebd4542742ef9261d9da92cd545b2cacbb48349a1225466745bb866ec4", size = 3282301, upload-time = "2026-01-05T10:40:34.858Z" }, - { url = "https://files.pythonhosted.org/packages/46/cd/e4851401f3d8f6f45d8480262ab6a5c8cb9c4302a790a35aa14eeed6d2fd/tokenizers-0.22.2-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e10bf9113d209be7cd046d40fbabbaf3278ff6d18eb4da4c500443185dc1896c", size = 3161308, upload-time = "2026-01-05T10:40:40.737Z" }, - { url = "https://files.pythonhosted.org/packages/6f/6e/55553992a89982cd12d4a66dddb5e02126c58677ea3931efcbe601d419db/tokenizers-0.22.2-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:64d94e84f6660764e64e7e0b22baa72f6cd942279fdbb21d46abd70d179f0195", size = 3718964, upload-time = "2026-01-05T10:40:46.56Z" }, - { url = "https://files.pythonhosted.org/packages/59/8c/b1c87148aa15e099243ec9f0cf9d0e970cc2234c3257d558c25a2c5304e6/tokenizers-0.22.2-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f01a9c019878532f98927d2bacb79bbb404b43d3437455522a00a30718cdedb5", size = 3373542, upload-time = "2026-01-05T10:40:52.803Z" }, -] - -[[package]] -name = "tomli" -version = "2.4.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/22/de/48c59722572767841493b26183a0d1cc411d54fd759c5607c4590b6563a6/tomli-2.4.1.tar.gz", hash = "sha256:7c7e1a961a0b2f2472c1ac5b69affa0ae1132c39adcb67aba98568702b9cc23f", size = 17543, upload-time = "2026-03-25T20:22:03.828Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/f4/11/db3d5885d8528263d8adc260bb2d28ebf1270b96e98f0e0268d32b8d9900/tomli-2.4.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f8f0fc26ec2cc2b965b7a3b87cd19c5c6b8c5e5f436b984e85f486d652285c30", size = 154704, upload-time = "2026-03-25T20:21:10.473Z" }, - { url = "https://files.pythonhosted.org/packages/6d/f7/675db52c7e46064a9aa928885a9b20f4124ecb9bc2e1ce74c9106648d202/tomli-2.4.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4ab97e64ccda8756376892c53a72bd1f964e519c77236368527f758fbc36a53a", size = 149454, upload-time = "2026-03-25T20:21:12.036Z" }, - { url = "https://files.pythonhosted.org/packages/61/71/81c50943cf953efa35bce7646caab3cf457a7d8c030b27cfb40d7235f9ee/tomli-2.4.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:96481a5786729fd470164b47cdb3e0e58062a496f455ee41b4403be77cb5a076", size = 237561, upload-time = "2026-03-25T20:21:13.098Z" }, - { url = "https://files.pythonhosted.org/packages/48/c1/f41d9cb618acccca7df82aaf682f9b49013c9397212cb9f53219e3abac37/tomli-2.4.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5a881ab208c0baf688221f8cecc5401bd291d67e38a1ac884d6736cbcd8247e9", size = 243824, upload-time = "2026-03-25T20:21:14.569Z" }, - { url = "https://files.pythonhosted.org/packages/22/e4/5a816ecdd1f8ca51fb756ef684b90f2780afc52fc67f987e3c61d800a46d/tomli-2.4.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:47149d5bd38761ac8be13a84864bf0b7b70bc051806bc3669ab1cbc56216b23c", size = 242227, upload-time = "2026-03-25T20:21:15.712Z" }, - { url = "https://files.pythonhosted.org/packages/6b/49/2b2a0ef529aa6eec245d25f0c703e020a73955ad7edf73e7f54ddc608aa5/tomli-2.4.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ec9bfaf3ad2df51ace80688143a6a4ebc09a248f6ff781a9945e51937008fcbc", size = 247859, upload-time = "2026-03-25T20:21:17.001Z" }, - { url = "https://files.pythonhosted.org/packages/83/bd/6c1a630eaca337e1e78c5903104f831bda934c426f9231429396ce3c3467/tomli-2.4.1-cp311-cp311-win32.whl", hash = "sha256:ff2983983d34813c1aeb0fa89091e76c3a22889ee83ab27c5eeb45100560c049", size = 97204, upload-time = "2026-03-25T20:21:18.079Z" }, - { url = "https://files.pythonhosted.org/packages/42/59/71461df1a885647e10b6bb7802d0b8e66480c61f3f43079e0dcd315b3954/tomli-2.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:5ee18d9ebdb417e384b58fe414e8d6af9f4e7a0ae761519fb50f721de398dd4e", size = 108084, upload-time = "2026-03-25T20:21:18.978Z" }, - { url = "https://files.pythonhosted.org/packages/b8/83/dceca96142499c069475b790e7913b1044c1a4337e700751f48ed723f883/tomli-2.4.1-cp311-cp311-win_arm64.whl", hash = "sha256:c2541745709bad0264b7d4705ad453b76ccd191e64aa6f0fc66b69a293a45ece", size = 95285, upload-time = "2026-03-25T20:21:20.309Z" }, - { url = "https://files.pythonhosted.org/packages/c1/ba/42f134a3fe2b370f555f44b1d72feebb94debcab01676bf918d0cb70e9aa/tomli-2.4.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:c742f741d58a28940ce01d58f0ab2ea3ced8b12402f162f4d534dfe18ba1cd6a", size = 155924, upload-time = "2026-03-25T20:21:21.626Z" }, - { url = "https://files.pythonhosted.org/packages/dc/c7/62d7a17c26487ade21c5422b646110f2162f1fcc95980ef7f63e73c68f14/tomli-2.4.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7f86fd587c4ed9dd76f318225e7d9b29cfc5a9d43de44e5754db8d1128487085", size = 150018, upload-time = "2026-03-25T20:21:23.002Z" }, - { url = "https://files.pythonhosted.org/packages/5c/05/79d13d7c15f13bdef410bdd49a6485b1c37d28968314eabee452c22a7fda/tomli-2.4.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ff18e6a727ee0ab0388507b89d1bc6a22b138d1e2fa56d1ad494586d61d2eae9", size = 244948, upload-time = "2026-03-25T20:21:24.04Z" }, - { url = "https://files.pythonhosted.org/packages/10/90/d62ce007a1c80d0b2c93e02cab211224756240884751b94ca72df8a875ca/tomli-2.4.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:136443dbd7e1dee43c68ac2694fde36b2849865fa258d39bf822c10e8068eac5", size = 253341, upload-time = "2026-03-25T20:21:25.177Z" }, - { url = "https://files.pythonhosted.org/packages/1a/7e/caf6496d60152ad4ed09282c1885cca4eea150bfd007da84aea07bcc0a3e/tomli-2.4.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:5e262d41726bc187e69af7825504c933b6794dc3fbd5945e41a79bb14c31f585", size = 248159, upload-time = "2026-03-25T20:21:26.364Z" }, - { url = "https://files.pythonhosted.org/packages/99/e7/c6f69c3120de34bbd882c6fba7975f3d7a746e9218e56ab46a1bc4b42552/tomli-2.4.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:5cb41aa38891e073ee49d55fbc7839cfdb2bc0e600add13874d048c94aadddd1", size = 253290, upload-time = "2026-03-25T20:21:27.46Z" }, - { url = "https://files.pythonhosted.org/packages/d6/2f/4a3c322f22c5c66c4b836ec58211641a4067364f5dcdd7b974b4c5da300c/tomli-2.4.1-cp312-cp312-win32.whl", hash = "sha256:da25dc3563bff5965356133435b757a795a17b17d01dbc0f42fb32447ddfd917", size = 98141, upload-time = "2026-03-25T20:21:28.492Z" }, - { url = "https://files.pythonhosted.org/packages/24/22/4daacd05391b92c55759d55eaee21e1dfaea86ce5c571f10083360adf534/tomli-2.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:52c8ef851d9a240f11a88c003eacb03c31fc1c9c4ec64a99a0f922b93874fda9", size = 108847, upload-time = "2026-03-25T20:21:29.386Z" }, - { url = "https://files.pythonhosted.org/packages/68/fd/70e768887666ddd9e9f5d85129e84910f2db2796f9096aa02b721a53098d/tomli-2.4.1-cp312-cp312-win_arm64.whl", hash = "sha256:f758f1b9299d059cc3f6546ae2af89670cb1c4d48ea29c3cacc4fe7de3058257", size = 95088, upload-time = "2026-03-25T20:21:30.677Z" }, - { url = "https://files.pythonhosted.org/packages/07/06/b823a7e818c756d9a7123ba2cda7d07bc2dd32835648d1a7b7b7a05d848d/tomli-2.4.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:36d2bd2ad5fb9eaddba5226aa02c8ec3fa4f192631e347b3ed28186d43be6b54", size = 155866, upload-time = "2026-03-25T20:21:31.65Z" }, - { url = "https://files.pythonhosted.org/packages/14/6f/12645cf7f08e1a20c7eb8c297c6f11d31c1b50f316a7e7e1e1de6e2e7b7e/tomli-2.4.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:eb0dc4e38e6a1fd579e5d50369aa2e10acfc9cace504579b2faabb478e76941a", size = 149887, upload-time = "2026-03-25T20:21:33.028Z" }, - { url = "https://files.pythonhosted.org/packages/5c/e0/90637574e5e7212c09099c67ad349b04ec4d6020324539297b634a0192b0/tomli-2.4.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c7f2c7f2b9ca6bdeef8f0fa897f8e05085923eb091721675170254cbc5b02897", size = 243704, upload-time = "2026-03-25T20:21:34.51Z" }, - { url = "https://files.pythonhosted.org/packages/10/8f/d3ddb16c5a4befdf31a23307f72828686ab2096f068eaf56631e136c1fdd/tomli-2.4.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f3c6818a1a86dd6dca7ddcaaf76947d5ba31aecc28cb1b67009a5877c9a64f3f", size = 251628, upload-time = "2026-03-25T20:21:36.012Z" }, - { url = "https://files.pythonhosted.org/packages/e3/f1/dbeeb9116715abee2485bf0a12d07a8f31af94d71608c171c45f64c0469d/tomli-2.4.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:d312ef37c91508b0ab2cee7da26ec0b3ed2f03ce12bd87a588d771ae15dcf82d", size = 247180, upload-time = "2026-03-25T20:21:37.136Z" }, - { url = "https://files.pythonhosted.org/packages/d3/74/16336ffd19ed4da28a70959f92f506233bd7cfc2332b20bdb01591e8b1d1/tomli-2.4.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:51529d40e3ca50046d7606fa99ce3956a617f9b36380da3b7f0dd3dd28e68cb5", size = 251674, upload-time = "2026-03-25T20:21:38.298Z" }, - { url = "https://files.pythonhosted.org/packages/16/f9/229fa3434c590ddf6c0aa9af64d3af4b752540686cace29e6281e3458469/tomli-2.4.1-cp313-cp313-win32.whl", hash = "sha256:2190f2e9dd7508d2a90ded5ed369255980a1bcdd58e52f7fe24b8162bf9fedbd", size = 97976, upload-time = "2026-03-25T20:21:39.316Z" }, - { url = "https://files.pythonhosted.org/packages/6a/1e/71dfd96bcc1c775420cb8befe7a9d35f2e5b1309798f009dca17b7708c1e/tomli-2.4.1-cp313-cp313-win_amd64.whl", hash = "sha256:8d65a2fbf9d2f8352685bc1364177ee3923d6baf5e7f43ea4959d7d8bc326a36", size = 108755, upload-time = "2026-03-25T20:21:40.248Z" }, - { url = "https://files.pythonhosted.org/packages/83/7a/d34f422a021d62420b78f5c538e5b102f62bea616d1d75a13f0a88acb04a/tomli-2.4.1-cp313-cp313-win_arm64.whl", hash = "sha256:4b605484e43cdc43f0954ddae319fb75f04cc10dd80d830540060ee7cd0243cd", size = 95265, upload-time = "2026-03-25T20:21:41.219Z" }, - { url = "https://files.pythonhosted.org/packages/7b/61/cceae43728b7de99d9b847560c262873a1f6c98202171fd5ed62640b494b/tomli-2.4.1-py3-none-any.whl", hash = "sha256:0d85819802132122da43cb86656f8d1f8c6587d54ae7dcaf30e90533028b49fe", size = 14583, upload-time = "2026-03-25T20:22:03.012Z" }, ] [[package]] @@ -5854,52 +7245,230 @@ name = "torch" version = "2.10.0" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "python_full_version >= '3.13'", - "python_full_version == '3.12.*'", - "python_full_version == '3.11.*'", - "python_full_version < '3.11'", -] -dependencies = [ - { name = "cuda-bindings", version = "12.9.4", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-14-granite-switch-dev') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-14-granite-switch-tutorials') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-14-granite-switch-vllm') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20')" }, - { name = "filelock", marker = "extra == 'extra-14-granite-switch-dev' or extra == 'extra-14-granite-switch-tutorials' or extra == 'extra-14-granite-switch-vllm'" }, - { name = "fsspec", marker = "extra == 'extra-14-granite-switch-dev' or extra == 'extra-14-granite-switch-tutorials' or extra == 'extra-14-granite-switch-vllm'" }, - { name = "jinja2", marker = "extra == 'extra-14-granite-switch-dev' or extra == 'extra-14-granite-switch-tutorials' or extra == 'extra-14-granite-switch-vllm'" }, - { name = "networkx", version = "3.4.2", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and extra == 'extra-14-granite-switch-dev') or (python_full_version < '3.11' and extra == 'extra-14-granite-switch-tutorials') or (python_full_version < '3.11' and extra == 'extra-14-granite-switch-vllm') or (extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20')" }, - { name = "networkx", version = "3.6.1", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and extra == 'extra-14-granite-switch-dev') or (python_full_version >= '3.11' and extra == 'extra-14-granite-switch-tutorials') or (python_full_version >= '3.11' and extra == 'extra-14-granite-switch-vllm') or (extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20')" }, - { name = "nvidia-cublas-cu12", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-14-granite-switch-dev') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-14-granite-switch-tutorials') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-14-granite-switch-vllm') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20')" }, - { name = "nvidia-cuda-cupti-cu12", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-14-granite-switch-dev') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-14-granite-switch-tutorials') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-14-granite-switch-vllm') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20')" }, - { name = "nvidia-cuda-nvrtc-cu12", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-14-granite-switch-dev') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-14-granite-switch-tutorials') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-14-granite-switch-vllm') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20')" }, - { name = "nvidia-cuda-runtime-cu12", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-14-granite-switch-dev') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-14-granite-switch-tutorials') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-14-granite-switch-vllm') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20')" }, - { name = "nvidia-cudnn-cu12", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-14-granite-switch-dev') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-14-granite-switch-tutorials') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-14-granite-switch-vllm') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20')" }, - { name = "nvidia-cufft-cu12", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-14-granite-switch-dev') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-14-granite-switch-tutorials') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-14-granite-switch-vllm') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20')" }, - { name = "nvidia-cufile-cu12", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-14-granite-switch-dev') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-14-granite-switch-tutorials') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-14-granite-switch-vllm') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20')" }, - { name = "nvidia-curand-cu12", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-14-granite-switch-dev') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-14-granite-switch-tutorials') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-14-granite-switch-vllm') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20')" }, - { name = "nvidia-cusolver-cu12", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-14-granite-switch-dev') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-14-granite-switch-tutorials') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-14-granite-switch-vllm') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20')" }, - { name = "nvidia-cusparse-cu12", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-14-granite-switch-dev') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-14-granite-switch-tutorials') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-14-granite-switch-vllm') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20')" }, - { name = "nvidia-cusparselt-cu12", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-14-granite-switch-dev') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-14-granite-switch-tutorials') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-14-granite-switch-vllm') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20')" }, - { name = "nvidia-nccl-cu12", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-14-granite-switch-dev') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-14-granite-switch-tutorials') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-14-granite-switch-vllm') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20')" }, - { name = "nvidia-nvjitlink-cu12", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-14-granite-switch-dev') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-14-granite-switch-tutorials') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-14-granite-switch-vllm') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20')" }, - { name = "nvidia-nvshmem-cu12", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-14-granite-switch-dev') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-14-granite-switch-tutorials') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-14-granite-switch-vllm') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20')" }, - { name = "nvidia-nvtx-cu12", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-14-granite-switch-dev') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-14-granite-switch-tutorials') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-14-granite-switch-vllm') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20')" }, - { name = "setuptools", marker = "(python_full_version >= '3.12' and extra == 'extra-14-granite-switch-dev') or (python_full_version >= '3.12' and extra == 'extra-14-granite-switch-tutorials') or (python_full_version >= '3.12' and extra == 'extra-14-granite-switch-vllm') or (extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20')" }, - { name = "sympy", marker = "extra == 'extra-14-granite-switch-dev' or extra == 'extra-14-granite-switch-tutorials' or extra == 'extra-14-granite-switch-vllm'" }, - { name = "triton", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-14-granite-switch-dev') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-14-granite-switch-tutorials') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-14-granite-switch-vllm') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20')" }, - { name = "typing-extensions", marker = "extra == 'extra-14-granite-switch-dev' or extra == 'extra-14-granite-switch-tutorials' or extra == 'extra-14-granite-switch-vllm'" }, -] -wheels = [ - { url = "https://files.pythonhosted.org/packages/5b/30/bfebdd8ec77db9a79775121789992d6b3b75ee5494971294d7b4b7c999bc/torch-2.10.0-2-cp310-none-macosx_11_0_arm64.whl", hash = "sha256:2b980edd8d7c0a68c4e951ee1856334a43193f98730d97408fbd148c1a933313", size = 79411457, upload-time = "2026-02-10T21:44:59.189Z" }, + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", +] +dependencies = [ + { name = "cuda-bindings", version = "12.9.4", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-14-granite-switch-tutorials') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-14-granite-switch-vllm') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'group-14-granite-switch-dev') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'group-14-granite-switch-test') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'group-14-granite-switch-vllm19') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-dev-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-dev-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-test') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-vllm19') or (platform_machine != 'x86_64' and extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20') or (platform_machine != 'x86_64' and extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-vllm20') or (platform_machine != 'x86_64' and extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test') or (platform_machine != 'x86_64' and extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-vllm19') or (platform_machine != 'x86_64' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm20') or (platform_machine != 'x86_64' and extra == 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-dev-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-dev-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-test') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-vllm19') or (sys_platform != 'linux' and extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20') or (sys_platform != 'linux' and extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test') or (sys_platform != 'linux' and extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-vllm19') or (sys_platform != 'linux' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20')" }, + { name = "filelock", marker = "extra == 'extra-14-granite-switch-tutorials' or extra == 'extra-14-granite-switch-vllm' or extra == 'group-14-granite-switch-dev' or extra == 'group-14-granite-switch-test' or extra == 'group-14-granite-switch-vllm19'" }, + { name = "fsspec", marker = "extra == 'extra-14-granite-switch-tutorials' or extra == 'extra-14-granite-switch-vllm' or extra == 'group-14-granite-switch-dev' or extra == 'group-14-granite-switch-test' or extra == 'group-14-granite-switch-vllm19'" }, + { name = "jinja2", marker = "extra == 'extra-14-granite-switch-tutorials' or extra == 'extra-14-granite-switch-vllm' or extra == 'group-14-granite-switch-dev' or extra == 'group-14-granite-switch-test' or extra == 'group-14-granite-switch-vllm19'" }, + { name = "networkx", marker = "extra == 'extra-14-granite-switch-tutorials' or extra == 'extra-14-granite-switch-vllm' or extra == 'group-14-granite-switch-dev' or extra == 'group-14-granite-switch-test' or extra == 'group-14-granite-switch-vllm19'" }, + { name = "nvidia-cublas-cu12", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-14-granite-switch-tutorials') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-14-granite-switch-vllm') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'group-14-granite-switch-dev') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'group-14-granite-switch-test') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'group-14-granite-switch-vllm19') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-dev-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-dev-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-test') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-vllm19') or (platform_machine != 'x86_64' and extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20') or (platform_machine != 'x86_64' and extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-vllm20') or (platform_machine != 'x86_64' and extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test') or (platform_machine != 'x86_64' and extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-vllm19') or (platform_machine != 'x86_64' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm20') or (platform_machine != 'x86_64' and extra == 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-dev-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-dev-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-test') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-vllm19') or (sys_platform != 'linux' and extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20') or (sys_platform != 'linux' and extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test') or (sys_platform != 'linux' and extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-vllm19') or (sys_platform != 'linux' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20')" }, + { name = "nvidia-cuda-cupti-cu12", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-14-granite-switch-tutorials') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-14-granite-switch-vllm') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'group-14-granite-switch-dev') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'group-14-granite-switch-test') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'group-14-granite-switch-vllm19') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-dev-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-dev-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-test') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-vllm19') or (platform_machine != 'x86_64' and extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20') or (platform_machine != 'x86_64' and extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-vllm20') or (platform_machine != 'x86_64' and extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test') or (platform_machine != 'x86_64' and extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-vllm19') or (platform_machine != 'x86_64' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm20') or (platform_machine != 'x86_64' and extra == 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-dev-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-dev-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-test') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-vllm19') or (sys_platform != 'linux' and extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20') or (sys_platform != 'linux' and extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test') or (sys_platform != 'linux' and extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-vllm19') or (sys_platform != 'linux' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20')" }, + { name = "nvidia-cuda-nvrtc-cu12", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-14-granite-switch-tutorials') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-14-granite-switch-vllm') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'group-14-granite-switch-dev') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'group-14-granite-switch-test') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'group-14-granite-switch-vllm19') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-dev-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-dev-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-test') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-vllm19') or (platform_machine != 'x86_64' and extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20') or (platform_machine != 'x86_64' and extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-vllm20') or (platform_machine != 'x86_64' and extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test') or (platform_machine != 'x86_64' and extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-vllm19') or (platform_machine != 'x86_64' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm20') or (platform_machine != 'x86_64' and extra == 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-dev-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-dev-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-test') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-vllm19') or (sys_platform != 'linux' and extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20') or (sys_platform != 'linux' and extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test') or (sys_platform != 'linux' and extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-vllm19') or (sys_platform != 'linux' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20')" }, + { name = "nvidia-cuda-runtime-cu12", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-14-granite-switch-tutorials') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-14-granite-switch-vllm') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'group-14-granite-switch-dev') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'group-14-granite-switch-test') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'group-14-granite-switch-vllm19') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-dev-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-dev-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-test') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-vllm19') or (platform_machine != 'x86_64' and extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20') or (platform_machine != 'x86_64' and extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-vllm20') or (platform_machine != 'x86_64' and extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test') or (platform_machine != 'x86_64' and extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-vllm19') or (platform_machine != 'x86_64' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm20') or (platform_machine != 'x86_64' and extra == 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-dev-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-dev-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-test') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-vllm19') or (sys_platform != 'linux' and extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20') or (sys_platform != 'linux' and extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test') or (sys_platform != 'linux' and extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-vllm19') or (sys_platform != 'linux' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20')" }, + { name = "nvidia-cudnn-cu12", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-14-granite-switch-tutorials') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-14-granite-switch-vllm') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'group-14-granite-switch-dev') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'group-14-granite-switch-test') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'group-14-granite-switch-vllm19') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-dev-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-dev-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-test') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-vllm19') or (platform_machine != 'x86_64' and extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20') or (platform_machine != 'x86_64' and extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-vllm20') or (platform_machine != 'x86_64' and extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test') or (platform_machine != 'x86_64' and extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-vllm19') or (platform_machine != 'x86_64' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm20') or (platform_machine != 'x86_64' and extra == 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-dev-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-dev-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-test') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-vllm19') or (sys_platform != 'linux' and extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20') or (sys_platform != 'linux' and extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test') or (sys_platform != 'linux' and extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-vllm19') or (sys_platform != 'linux' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20')" }, + { name = "nvidia-cufft-cu12", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-14-granite-switch-tutorials') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-14-granite-switch-vllm') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'group-14-granite-switch-dev') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'group-14-granite-switch-test') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'group-14-granite-switch-vllm19') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-dev-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-dev-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-test') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-vllm19') or (platform_machine != 'x86_64' and extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20') or (platform_machine != 'x86_64' and extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-vllm20') or (platform_machine != 'x86_64' and extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test') or (platform_machine != 'x86_64' and extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-vllm19') or (platform_machine != 'x86_64' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm20') or (platform_machine != 'x86_64' and extra == 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-dev-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-dev-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-test') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-vllm19') or (sys_platform != 'linux' and extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20') or (sys_platform != 'linux' and extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test') or (sys_platform != 'linux' and extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-vllm19') or (sys_platform != 'linux' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20')" }, + { name = "nvidia-cufile-cu12", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-14-granite-switch-tutorials') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-14-granite-switch-vllm') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'group-14-granite-switch-dev') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'group-14-granite-switch-test') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'group-14-granite-switch-vllm19') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-dev-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-dev-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-test') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-vllm19') or (platform_machine != 'x86_64' and extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20') or (platform_machine != 'x86_64' and extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-vllm20') or (platform_machine != 'x86_64' and extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test') or (platform_machine != 'x86_64' and extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-vllm19') or (platform_machine != 'x86_64' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm20') or (platform_machine != 'x86_64' and extra == 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-dev-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-dev-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-test') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-vllm19') or (sys_platform != 'linux' and extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20') or (sys_platform != 'linux' and extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test') or (sys_platform != 'linux' and extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-vllm19') or (sys_platform != 'linux' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20')" }, + { name = "nvidia-curand-cu12", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-14-granite-switch-tutorials') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-14-granite-switch-vllm') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'group-14-granite-switch-dev') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'group-14-granite-switch-test') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'group-14-granite-switch-vllm19') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-dev-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-dev-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-test') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-vllm19') or (platform_machine != 'x86_64' and extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20') or (platform_machine != 'x86_64' and extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-vllm20') or (platform_machine != 'x86_64' and extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test') or (platform_machine != 'x86_64' and extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-vllm19') or (platform_machine != 'x86_64' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm20') or (platform_machine != 'x86_64' and extra == 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-dev-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-dev-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-test') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-vllm19') or (sys_platform != 'linux' and extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20') or (sys_platform != 'linux' and extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test') or (sys_platform != 'linux' and extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-vllm19') or (sys_platform != 'linux' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20')" }, + { name = "nvidia-cusolver-cu12", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-14-granite-switch-tutorials') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-14-granite-switch-vllm') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'group-14-granite-switch-dev') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'group-14-granite-switch-test') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'group-14-granite-switch-vllm19') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-dev-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-dev-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-test') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-vllm19') or (platform_machine != 'x86_64' and extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20') or (platform_machine != 'x86_64' and extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-vllm20') or (platform_machine != 'x86_64' and extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test') or (platform_machine != 'x86_64' and extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-vllm19') or (platform_machine != 'x86_64' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm20') or (platform_machine != 'x86_64' and extra == 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-dev-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-dev-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-test') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-vllm19') or (sys_platform != 'linux' and extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20') or (sys_platform != 'linux' and extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test') or (sys_platform != 'linux' and extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-vllm19') or (sys_platform != 'linux' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20')" }, + { name = "nvidia-cusparse-cu12", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-14-granite-switch-tutorials') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-14-granite-switch-vllm') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'group-14-granite-switch-dev') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'group-14-granite-switch-test') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'group-14-granite-switch-vllm19') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-dev-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-dev-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-test') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-vllm19') or (platform_machine != 'x86_64' and extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20') or (platform_machine != 'x86_64' and extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-vllm20') or (platform_machine != 'x86_64' and extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test') or (platform_machine != 'x86_64' and extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-vllm19') or (platform_machine != 'x86_64' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm20') or (platform_machine != 'x86_64' and extra == 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-dev-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-dev-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-test') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-vllm19') or (sys_platform != 'linux' and extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20') or (sys_platform != 'linux' and extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test') or (sys_platform != 'linux' and extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-vllm19') or (sys_platform != 'linux' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20')" }, + { name = "nvidia-cusparselt-cu12", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-14-granite-switch-tutorials') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-14-granite-switch-vllm') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'group-14-granite-switch-dev') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'group-14-granite-switch-test') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'group-14-granite-switch-vllm19') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-dev-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-dev-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-test') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-vllm19') or (platform_machine != 'x86_64' and extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20') or (platform_machine != 'x86_64' and extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-vllm20') or (platform_machine != 'x86_64' and extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test') or (platform_machine != 'x86_64' and extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-vllm19') or (platform_machine != 'x86_64' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm20') or (platform_machine != 'x86_64' and extra == 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-dev-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-dev-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-test') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-vllm19') or (sys_platform != 'linux' and extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20') or (sys_platform != 'linux' and extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test') or (sys_platform != 'linux' and extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-vllm19') or (sys_platform != 'linux' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20')" }, + { name = "nvidia-nccl-cu12", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-14-granite-switch-tutorials') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-14-granite-switch-vllm') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'group-14-granite-switch-dev') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'group-14-granite-switch-test') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'group-14-granite-switch-vllm19') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-dev-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-dev-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-test') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-vllm19') or (platform_machine != 'x86_64' and extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20') or (platform_machine != 'x86_64' and extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-vllm20') or (platform_machine != 'x86_64' and extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test') or (platform_machine != 'x86_64' and extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-vllm19') or (platform_machine != 'x86_64' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm20') or (platform_machine != 'x86_64' and extra == 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-dev-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-dev-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-test') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-vllm19') or (sys_platform != 'linux' and extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20') or (sys_platform != 'linux' and extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test') or (sys_platform != 'linux' and extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-vllm19') or (sys_platform != 'linux' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20')" }, + { name = "nvidia-nvjitlink-cu12", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-14-granite-switch-tutorials') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-14-granite-switch-vllm') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'group-14-granite-switch-dev') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'group-14-granite-switch-test') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'group-14-granite-switch-vllm19') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-dev-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-dev-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-test') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-vllm19') or (platform_machine != 'x86_64' and extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20') or (platform_machine != 'x86_64' and extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-vllm20') or (platform_machine != 'x86_64' and extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test') or (platform_machine != 'x86_64' and extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-vllm19') or (platform_machine != 'x86_64' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm20') or (platform_machine != 'x86_64' and extra == 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-dev-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-dev-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-test') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-vllm19') or (sys_platform != 'linux' and extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20') or (sys_platform != 'linux' and extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test') or (sys_platform != 'linux' and extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-vllm19') or (sys_platform != 'linux' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20')" }, + { name = "nvidia-nvshmem-cu12", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-14-granite-switch-tutorials') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-14-granite-switch-vllm') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'group-14-granite-switch-dev') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'group-14-granite-switch-test') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'group-14-granite-switch-vllm19') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-dev-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-dev-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-test') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-vllm19') or (platform_machine != 'x86_64' and extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20') or (platform_machine != 'x86_64' and extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-vllm20') or (platform_machine != 'x86_64' and extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test') or (platform_machine != 'x86_64' and extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-vllm19') or (platform_machine != 'x86_64' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm20') or (platform_machine != 'x86_64' and extra == 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-dev-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-dev-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-test') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-vllm19') or (sys_platform != 'linux' and extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20') or (sys_platform != 'linux' and extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test') or (sys_platform != 'linux' and extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-vllm19') or (sys_platform != 'linux' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20')" }, + { name = "nvidia-nvtx-cu12", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-14-granite-switch-tutorials') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-14-granite-switch-vllm') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'group-14-granite-switch-dev') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'group-14-granite-switch-test') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'group-14-granite-switch-vllm19') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-dev-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-dev-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-test') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-vllm19') or (platform_machine != 'x86_64' and extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20') or (platform_machine != 'x86_64' and extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-vllm20') or (platform_machine != 'x86_64' and extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test') or (platform_machine != 'x86_64' and extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-vllm19') or (platform_machine != 'x86_64' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm20') or (platform_machine != 'x86_64' and extra == 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-dev-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-dev-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-test') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-vllm19') or (sys_platform != 'linux' and extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20') or (sys_platform != 'linux' and extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test') or (sys_platform != 'linux' and extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-vllm19') or (sys_platform != 'linux' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20')" }, + { name = "setuptools", marker = "(python_full_version >= '3.12' and extra == 'extra-14-granite-switch-tutorials') or (python_full_version >= '3.12' and extra == 'extra-14-granite-switch-vllm') or (python_full_version >= '3.12' and extra == 'group-14-granite-switch-dev') or (python_full_version >= '3.12' and extra == 'group-14-granite-switch-test') or (python_full_version >= '3.12' and extra == 'group-14-granite-switch-vllm19') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20')" }, + { name = "sympy", marker = "extra == 'extra-14-granite-switch-tutorials' or extra == 'extra-14-granite-switch-vllm' or extra == 'group-14-granite-switch-dev' or extra == 'group-14-granite-switch-test' or extra == 'group-14-granite-switch-vllm19'" }, + { name = "triton", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-14-granite-switch-tutorials') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-14-granite-switch-vllm') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'group-14-granite-switch-dev') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'group-14-granite-switch-test') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'group-14-granite-switch-vllm19') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-dev-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-dev-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-vllm20') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-test') or (platform_machine != 'x86_64' and extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-vllm19') or (platform_machine != 'x86_64' and extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20') or (platform_machine != 'x86_64' and extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-vllm20') or (platform_machine != 'x86_64' and extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test') or (platform_machine != 'x86_64' and extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-vllm19') or (platform_machine != 'x86_64' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm20') or (platform_machine != 'x86_64' and extra == 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-dev-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-dev-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-test') or (sys_platform != 'linux' and extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-vllm19') or (sys_platform != 'linux' and extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20') or (sys_platform != 'linux' and extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test') or (sys_platform != 'linux' and extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-vllm19') or (sys_platform != 'linux' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm20') or (sys_platform != 'linux' and extra == 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20')" }, + { name = "typing-extensions", marker = "extra == 'extra-14-granite-switch-tutorials' or extra == 'extra-14-granite-switch-vllm' or extra == 'group-14-granite-switch-dev' or extra == 'group-14-granite-switch-test' or extra == 'group-14-granite-switch-vllm19'" }, +] +wheels = [ { url = "https://files.pythonhosted.org/packages/0f/8b/4b61d6e13f7108f36910df9ab4b58fd389cc2520d54d81b88660804aad99/torch-2.10.0-2-cp311-none-macosx_11_0_arm64.whl", hash = "sha256:418997cb02d0a0f1497cf6a09f63166f9f5df9f3e16c8a716ab76a72127c714f", size = 79423467, upload-time = "2026-02-10T21:44:48.711Z" }, { url = "https://files.pythonhosted.org/packages/d3/54/a2ba279afcca44bbd320d4e73675b282fcee3d81400ea1b53934efca6462/torch-2.10.0-2-cp312-none-macosx_11_0_arm64.whl", hash = "sha256:13ec4add8c3faaed8d13e0574f5cd4a323c11655546f91fbe6afa77b57423574", size = 79498202, upload-time = "2026-02-10T21:44:52.603Z" }, { url = "https://files.pythonhosted.org/packages/ec/23/2c9fe0c9c27f7f6cb865abcea8a4568f29f00acaeadfc6a37f6801f84cb4/torch-2.10.0-2-cp313-none-macosx_11_0_arm64.whl", hash = "sha256:e521c9f030a3774ed770a9c011751fb47c4d12029a3d6522116e48431f2ff89e", size = 79498254, upload-time = "2026-02-10T21:44:44.095Z" }, - { url = "https://files.pythonhosted.org/packages/16/ee/efbd56687be60ef9af0c9c0ebe106964c07400eade5b0af8902a1d8cd58c/torch-2.10.0-3-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:a1ff626b884f8c4e897c4c33782bdacdff842a165fee79817b1dd549fdda1321", size = 915510070, upload-time = "2026-03-11T14:16:39.386Z" }, { url = "https://files.pythonhosted.org/packages/36/ab/7b562f1808d3f65414cd80a4f7d4bb00979d9355616c034c171249e1a303/torch-2.10.0-3-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:ac5bdcbb074384c66fa160c15b1ead77839e3fe7ed117d667249afce0acabfac", size = 915518691, upload-time = "2026-03-11T14:15:43.147Z" }, { url = "https://files.pythonhosted.org/packages/b3/7a/abada41517ce0011775f0f4eacc79659bc9bc6c361e6bfe6f7052a6b9363/torch-2.10.0-3-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:98c01b8bb5e3240426dcde1446eed6f40c778091c8544767ef1168fc663a05a6", size = 915622781, upload-time = "2026-03-11T14:17:11.354Z" }, { url = "https://files.pythonhosted.org/packages/ab/c6/4dfe238342ffdcec5aef1c96c457548762d33c40b45a1ab7033bb26d2ff2/torch-2.10.0-3-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:80b1b5bfe38eb0e9f5ff09f206dcac0a87aadd084230d4a36eea5ec5232c115b", size = 915627275, upload-time = "2026-03-11T14:16:11.325Z" }, { url = "https://files.pythonhosted.org/packages/d8/f0/72bf18847f58f877a6a8acf60614b14935e2f156d942483af1ffc081aea0/torch-2.10.0-3-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:46b3574d93a2a8134b3f5475cfb98e2eb46771794c57015f6ad1fb795ec25e49", size = 915523474, upload-time = "2026-03-11T14:17:44.422Z" }, - { url = "https://files.pythonhosted.org/packages/0c/1a/c61f36cfd446170ec27b3a4984f072fd06dab6b5d7ce27e11adb35d6c838/torch-2.10.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:5276fa790a666ee8becaffff8acb711922252521b28fbce5db7db5cf9cb2026d", size = 145992962, upload-time = "2026-01-21T16:24:14.04Z" }, - { url = "https://files.pythonhosted.org/packages/b5/60/6662535354191e2d1555296045b63e4279e5a9dbad49acf55a5d38655a39/torch-2.10.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:aaf663927bcd490ae971469a624c322202a2a1e68936eb952535ca4cd3b90444", size = 915599237, upload-time = "2026-01-21T16:23:25.497Z" }, - { url = "https://files.pythonhosted.org/packages/40/b8/66bbe96f0d79be2b5c697b2e0b187ed792a15c6c4b8904613454651db848/torch-2.10.0-cp310-cp310-win_amd64.whl", hash = "sha256:a4be6a2a190b32ff5c8002a0977a25ea60e64f7ba46b1be37093c141d9c49aeb", size = 113720931, upload-time = "2026-01-21T16:24:23.743Z" }, - { url = "https://files.pythonhosted.org/packages/76/bb/d820f90e69cda6c8169b32a0c6a3ab7b17bf7990b8f2c680077c24a3c14c/torch-2.10.0-cp310-none-macosx_11_0_arm64.whl", hash = "sha256:35e407430795c8d3edb07a1d711c41cc1f9eaddc8b2f1cc0a165a6767a8fb73d", size = 79411450, upload-time = "2026-01-21T16:25:30.692Z" }, { url = "https://files.pythonhosted.org/packages/78/89/f5554b13ebd71e05c0b002f95148033e730d3f7067f67423026cc9c69410/torch-2.10.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:3282d9febd1e4e476630a099692b44fdc214ee9bf8ee5377732d9d9dfe5712e4", size = 145992610, upload-time = "2026-01-21T16:25:26.327Z" }, { url = "https://files.pythonhosted.org/packages/ae/30/a3a2120621bf9c17779b169fc17e3dc29b230c29d0f8222f499f5e159aa8/torch-2.10.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:a2f9edd8dbc99f62bc4dfb78af7bf89499bca3d753423ac1b4e06592e467b763", size = 915607863, upload-time = "2026-01-21T16:25:06.696Z" }, { url = "https://files.pythonhosted.org/packages/6f/3d/c87b33c5f260a2a8ad68da7147e105f05868c281c63d65ed85aa4da98c66/torch-2.10.0-cp311-cp311-win_amd64.whl", hash = "sha256:29b7009dba4b7a1c960260fc8ac85022c784250af43af9fb0ebafc9883782ebd", size = 113723116, upload-time = "2026-01-21T16:25:21.916Z" }, @@ -5923,55 +7492,68 @@ name = "torch" version = "2.11.0" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "python_full_version >= '3.13' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.12.*' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20'", - "python_full_version >= '3.13' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.12.*' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.11.*' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20'", - "python_full_version < '3.11' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.11.*' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20'", - "python_full_version < '3.11' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20'", - "python_full_version >= '3.13' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.12.*' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20'", - "python_full_version >= '3.13' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.12.*' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.11.*' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20'", - "python_full_version < '3.11' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.11.*' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20'", - "python_full_version < '3.11' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20'", - "python_full_version >= '3.13' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.12.*' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version >= '3.13' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.12.*' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.11.*' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version < '3.11' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.11.*' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version < '3.11' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version >= '3.11' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version < '3.11' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", -] -dependencies = [ - { name = "cuda-bindings", version = "13.2.0", source = { registry = "https://pypi.org/simple" }, marker = "(sys_platform == 'linux' and extra == 'extra-14-granite-switch-dev-vllm20') or (sys_platform == 'linux' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm') or (extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20')" }, - { name = "cuda-toolkit", extra = ["cublas", "cudart", "cufft", "cufile", "cupti", "curand", "cusolver", "cusparse", "nvjitlink", "nvrtc", "nvtx"], marker = "(sys_platform == 'linux' and extra == 'extra-14-granite-switch-dev-vllm20') or (sys_platform == 'linux' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm') or (extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20')" }, - { name = "filelock", marker = "extra == 'extra-14-granite-switch-dev-vllm20' or (extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm')" }, - { name = "fsspec", marker = "extra == 'extra-14-granite-switch-dev-vllm20' or (extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm')" }, - { name = "jinja2", marker = "extra == 'extra-14-granite-switch-dev-vllm20' or (extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm')" }, - { name = "networkx", version = "3.4.2", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and extra == 'extra-14-granite-switch-dev-vllm20') or (python_full_version < '3.11' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm') or (extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20')" }, - { name = "networkx", version = "3.6.1", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and extra == 'extra-14-granite-switch-dev-vllm20') or (python_full_version >= '3.11' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm') or (extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20')" }, - { name = "nvidia-cudnn-cu13", marker = "(sys_platform == 'linux' and extra == 'extra-14-granite-switch-dev-vllm20') or (sys_platform == 'linux' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm') or (extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20')" }, - { name = "nvidia-cusparselt-cu13", marker = "(sys_platform == 'linux' and extra == 'extra-14-granite-switch-dev-vllm20') or (sys_platform == 'linux' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm') or (extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20')" }, - { name = "nvidia-nccl-cu13", marker = "(sys_platform == 'linux' and extra == 'extra-14-granite-switch-dev-vllm20') or (sys_platform == 'linux' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm') or (extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20')" }, - { name = "nvidia-nvshmem-cu13", marker = "(sys_platform == 'linux' and extra == 'extra-14-granite-switch-dev-vllm20') or (sys_platform == 'linux' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm') or (extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20')" }, - { name = "setuptools", marker = "extra == 'extra-14-granite-switch-dev-vllm20' or (extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm')" }, - { name = "sympy", marker = "extra == 'extra-14-granite-switch-dev-vllm20' or (extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm')" }, - { name = "triton", marker = "(sys_platform == 'linux' and extra == 'extra-14-granite-switch-dev-vllm20') or (sys_platform == 'linux' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm') or (extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20')" }, - { name = "typing-extensions", marker = "extra == 'extra-14-granite-switch-dev-vllm20' or (extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm')" }, -] -wheels = [ - { url = "https://files.pythonhosted.org/packages/ac/f2/c1690994afe461aae2d0cac62251e6802a703dec0a6c549c02ecd0de92a9/torch-2.11.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2c0d7fcfbc0c4e8bb5ebc3907cbc0c6a0da1b8f82b1fc6e14e914fa0b9baf74e", size = 80526521, upload-time = "2026-03-23T18:12:06.86Z" }, - { url = "https://files.pythonhosted.org/packages/a4/f0/98ae802fa8c09d3149b0c8690741f3f5753c90e779bd28c9613257295945/torch-2.11.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:4cf8687f4aec3900f748d553483ef40e0ac38411c3c48d0a86a438f6d7a99b18", size = 419723025, upload-time = "2026-03-23T18:11:43.774Z" }, - { url = "https://files.pythonhosted.org/packages/f9/1e/18a9b10b4bd34f12d4e561c52b0ae7158707b8193c6cfc0aad2b48167090/torch-2.11.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:1b32ceda909818a03b112006709b02be1877240c31750a8d9c6b7bf5f2d8a6e5", size = 530589207, upload-time = "2026-03-23T18:11:23.756Z" }, - { url = "https://files.pythonhosted.org/packages/35/40/2d532e8c0e23705be9d1debce5bc37b68d59a39bda7584c26fe9668076fe/torch-2.11.0-cp310-cp310-win_amd64.whl", hash = "sha256:b3c712ae6fb8e7a949051a953fc412fe0a6940337336c3b6f905e905dac5157f", size = 114518313, upload-time = "2026-03-23T18:11:58.281Z" }, + "python_full_version >= '3.13' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", +] +dependencies = [ + { name = "cuda-bindings", version = "13.2.0", source = { registry = "https://pypi.org/simple" }, marker = "(sys_platform == 'linux' and extra == 'extra-14-granite-switch-vllm20') or (sys_platform == 'linux' and extra == 'group-14-granite-switch-dev-vllm20') or (sys_platform == 'linux' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20')" }, + { name = "cuda-toolkit", extra = ["cublas", "cudart", "cufft", "cufile", "cupti", "curand", "cusolver", "cusparse", "nvjitlink", "nvrtc", "nvtx"], marker = "(sys_platform == 'linux' and extra == 'extra-14-granite-switch-vllm20') or (sys_platform == 'linux' and extra == 'group-14-granite-switch-dev-vllm20') or (sys_platform == 'linux' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20')" }, + { name = "filelock", marker = "extra == 'extra-14-granite-switch-vllm20' or extra == 'group-14-granite-switch-dev-vllm20' or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20') or (extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19')" }, + { name = "fsspec", marker = "extra == 'extra-14-granite-switch-vllm20' or extra == 'group-14-granite-switch-dev-vllm20' or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20') or (extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19')" }, + { name = "jinja2", marker = "extra == 'extra-14-granite-switch-vllm20' or extra == 'group-14-granite-switch-dev-vllm20' or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20') or (extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19')" }, + { name = "networkx", marker = "extra == 'extra-14-granite-switch-vllm20' or extra == 'group-14-granite-switch-dev-vllm20' or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20') or (extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19')" }, + { name = "nvidia-cudnn-cu13", marker = "(sys_platform == 'linux' and extra == 'extra-14-granite-switch-vllm20') or (sys_platform == 'linux' and extra == 'group-14-granite-switch-dev-vllm20') or (sys_platform == 'linux' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20')" }, + { name = "nvidia-cusparselt-cu13", marker = "(sys_platform == 'linux' and extra == 'extra-14-granite-switch-vllm20') or (sys_platform == 'linux' and extra == 'group-14-granite-switch-dev-vllm20') or (sys_platform == 'linux' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20')" }, + { name = "nvidia-nccl-cu13", marker = "(sys_platform == 'linux' and extra == 'extra-14-granite-switch-vllm20') or (sys_platform == 'linux' and extra == 'group-14-granite-switch-dev-vllm20') or (sys_platform == 'linux' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20')" }, + { name = "nvidia-nvshmem-cu13", marker = "(sys_platform == 'linux' and extra == 'extra-14-granite-switch-vllm20') or (sys_platform == 'linux' and extra == 'group-14-granite-switch-dev-vllm20') or (sys_platform == 'linux' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20')" }, + { name = "setuptools", marker = "extra == 'extra-14-granite-switch-vllm20' or extra == 'group-14-granite-switch-dev-vllm20' or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20') or (extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19')" }, + { name = "sympy", marker = "extra == 'extra-14-granite-switch-vllm20' or extra == 'group-14-granite-switch-dev-vllm20' or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20') or (extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19')" }, + { name = "triton", marker = "(sys_platform == 'linux' and extra == 'extra-14-granite-switch-vllm20') or (sys_platform == 'linux' and extra == 'group-14-granite-switch-dev-vllm20') or (sys_platform == 'linux' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20')" }, + { name = "typing-extensions", marker = "extra == 'extra-14-granite-switch-vllm20' or extra == 'group-14-granite-switch-dev-vllm20' or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20') or (extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19')" }, +] +wheels = [ { url = "https://files.pythonhosted.org/packages/ae/0d/98b410492609e34a155fa8b121b55c7dca229f39636851c3a9ec20edea21/torch-2.11.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7b6a60d48062809f58595509c524b88e6ddec3ebe25833d6462eeab81e5f2ce4", size = 80529712, upload-time = "2026-03-23T18:12:02.608Z" }, { url = "https://files.pythonhosted.org/packages/84/03/acea680005f098f79fd70c1d9d5ccc0cb4296ec2af539a0450108232fc0c/torch-2.11.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:d91aac77f24082809d2c5a93f52a5f085032740a1ebc9252a7b052ef5a4fddc6", size = 419718178, upload-time = "2026-03-23T18:10:46.675Z" }, { url = "https://files.pythonhosted.org/packages/8c/8b/d7be22fbec9ffee6cff31a39f8750d4b3a65d349a286cf4aec74c2375662/torch-2.11.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:7aa2f9bbc6d4595ba72138026b2074be1233186150e9292865e04b7a63b8c67a", size = 530604548, upload-time = "2026-03-23T18:10:03.569Z" }, @@ -5995,15 +7577,11 @@ name = "torch-c-dlpack-ext" version = "0.1.5" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "torch", version = "2.10.0", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-14-granite-switch-dev' or extra == 'extra-14-granite-switch-tutorials' or extra == 'extra-14-granite-switch-vllm'" }, - { name = "torch", version = "2.11.0", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-14-granite-switch-dev-vllm20' or extra == 'extra-14-granite-switch-vllm20'" }, + { name = "torch", version = "2.10.0", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-14-granite-switch-tutorials' or extra == 'extra-14-granite-switch-vllm' or extra == 'group-14-granite-switch-dev' or extra == 'group-14-granite-switch-test' or extra == 'group-14-granite-switch-vllm19'" }, + { name = "torch", version = "2.11.0", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-14-granite-switch-vllm20' or extra == 'group-14-granite-switch-dev-vllm20' or extra == 'group-14-granite-switch-vllm20'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/37/de/921b6491efce5c389a5ef9bbed3d2d6660005840dae488124173180859ab/torch_c_dlpack_ext-0.1.5.tar.gz", hash = "sha256:d06f0357d575d22a168cc77acb9020fc4bae30968ceb6718a055dcbe92bacabe", size = 12913, upload-time = "2026-01-12T11:25:08.484Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/b5/49/67a66932ab2fcdda3c5a4dcf606e713d86883a4a9a99a3bb832815b52b8e/torch_c_dlpack_ext-0.1.5-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:e0f6c197d5293884898b9ebf13d07501de39cb94799b374ed43f91731087d557", size = 7056755, upload-time = "2026-01-12T11:24:31.817Z" }, - { url = "https://files.pythonhosted.org/packages/ae/28/d2d6bf90e01a1f4da3277c9a56d9ecac648b6d6adaa8e20c17f802deb7fb/torch_c_dlpack_ext-0.1.5-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ba3d88f0f7d5e1d9c3d4a3179037fc8e261c3b77ac1fad23edc0d3a9214ef193", size = 432066, upload-time = "2026-01-12T11:24:33.619Z" }, - { url = "https://files.pythonhosted.org/packages/a1/e9/a1f9584a3af4ac6ae5ad5cf86927d8c3a9b6bb50d54e54d19313411216a0/torch_c_dlpack_ext-0.1.5-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c7468df84ec152d930fbc3acf460c44a60b3462b95af3d3a676d133629c7e176", size = 879488, upload-time = "2026-01-12T11:24:34.837Z" }, - { url = "https://files.pythonhosted.org/packages/6c/08/478cfcb5814e29f9b720111bdef315fc2fbc8b276e4b1183c8b9c9414a4f/torch_c_dlpack_ext-0.1.5-cp310-cp310-win_amd64.whl", hash = "sha256:78dd4904bd26170a2dd7c0eab56367756ee0a15672ce9b84146169e68f0c6ddc", size = 1461437, upload-time = "2026-01-12T11:24:36.385Z" }, { url = "https://files.pythonhosted.org/packages/65/66/c12a9bb3a5ddc0962c00467891bf1ffdda39a4d4780bf0fbbf54523ff34e/torch_c_dlpack_ext-0.1.5-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:56bd25a2af19280bf8a06aa62cff5510106f43235b9327d8561b3e9a659c4d84", size = 5076782, upload-time = "2026-01-12T11:24:37.868Z" }, { url = "https://files.pythonhosted.org/packages/20/e1/64e1e579d107064785549e70758e38a42376ab7e73d86897ed4beab10e74/torch_c_dlpack_ext-0.1.5-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:fba674110e1fab0b176bb5a28223e157db65c90767d4ba74abdbee9f537b0e9d", size = 440949, upload-time = "2026-01-12T11:24:39.716Z" }, { url = "https://files.pythonhosted.org/packages/64/5c/3e1382a620824f92920ab3fae132d8fb4e85898284c99e0c6a7764e452ce/torch_c_dlpack_ext-0.1.5-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3448c4f0d64104d0b2e58080a7efa72304a04960c18f338024b80b13cd3eca26", size = 897768, upload-time = "2026-01-12T11:24:41.209Z" }, @@ -6023,19 +7601,200 @@ name = "torchaudio" version = "2.10.0" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "python_full_version >= '3.13'", - "python_full_version == '3.12.*'", - "python_full_version == '3.11.*'", - "python_full_version < '3.11'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", ] dependencies = [ { name = "torch", version = "2.10.0", source = { registry = "https://pypi.org/simple" } }, ] wheels = [ - { url = "https://files.pythonhosted.org/packages/04/59/88ab8ebff9d91f1f1365088b30f1b9ccce07c5eeac666038a5dee5e2f9b1/torchaudio-2.10.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:4cde383582a6240c1315443df5c5638863e96b03acf1cb44a298aff07a72d373", size = 734944, upload-time = "2026-01-21T16:28:49.535Z" }, - { url = "https://files.pythonhosted.org/packages/9b/d6/41f25f9ae9b37c191bed4cd474e403626685d2be8f7d20d011e6601fede1/torchaudio-2.10.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:cfb2ad4b7847d81931989127d803487263c8284f21156e9000daec1ac16c0831", size = 390449, upload-time = "2026-01-21T16:28:48.585Z" }, - { url = "https://files.pythonhosted.org/packages/43/ac/a14425fddd1cf56bb052a3bfd38880258008f8c3cd17f37bba55b3a88ce7/torchaudio-2.10.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:316cdb15fb37290fca89894b095d97b4dc14a90c4c61148ae5c96bb334d962cd", size = 1891070, upload-time = "2026-01-21T16:28:47.323Z" }, - { url = "https://files.pythonhosted.org/packages/6e/03/d1898db1bf7ecd47ca9b4e1b70927597d236cf721e3736d953d555901832/torchaudio-2.10.0-cp310-cp310-win_amd64.whl", hash = "sha256:013079d1ba2a652184703e671b8339cbc7991f17e4ed927071fe7635f908a4a1", size = 474045, upload-time = "2026-01-21T16:28:46.191Z" }, { url = "https://files.pythonhosted.org/packages/5c/e7/401fe1d024bf9352371d854be6f339ad9928669e6bc8a5ba08e9dbce81cf/torchaudio-2.10.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:bcab0e39eb18da84cba1a0c87f600abb6ce97c882200cb46e841caea106f037f", size = 736373, upload-time = "2026-01-21T16:28:41.589Z" }, { url = "https://files.pythonhosted.org/packages/6f/b7/c66dc34a27441d78997e20d0ffe2f5ad73db9f7b1267511be255bb94ac9b/torchaudio-2.10.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:87c841a21e82703ebd4a29170c4e60c25a2b47312dc212930087ad58965ac0c8", size = 391843, upload-time = "2026-01-21T16:28:43.093Z" }, { url = "https://files.pythonhosted.org/packages/13/ae/a2a34a64947c4fa4a61b4c86d8f36fbcb4ebfec30fdde140267db260f96c/torchaudio-2.10.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:b2c77fb9114dd463dc805560bf55a1ac2a52e219794cc32b7b32cf2aeffd2826", size = 1894140, upload-time = "2026-01-21T16:28:35.892Z" }, @@ -6060,19 +7819,13 @@ version = "2.11.0" source = { registry = "https://pypi.org/simple" } resolution-markers = [ "python_full_version >= '3.13' and sys_platform == 'darwin'", - "python_full_version == '3.12.*' and sys_platform == 'darwin'", "python_full_version >= '3.13' and sys_platform != 'darwin'", + "python_full_version == '3.12.*' and sys_platform == 'darwin'", "python_full_version == '3.12.*' and sys_platform != 'darwin'", - "python_full_version == '3.11.*' and sys_platform == 'darwin'", - "python_full_version < '3.11' and sys_platform == 'darwin'", - "python_full_version == '3.11.*' and sys_platform != 'darwin'", - "python_full_version < '3.11' and sys_platform != 'darwin'", + "python_full_version < '3.12' and sys_platform == 'darwin'", + "python_full_version < '3.12' and sys_platform != 'darwin'", ] wheels = [ - { url = "https://files.pythonhosted.org/packages/8c/d9/357eb5fe4e19a861e6fa1af4d9f535e8fa8692336e6cf436e8a21262e054/torchaudio-2.11.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6ebb59c694909eccb5d61b7cc199d297692012c43286e36d92983aa7bad7586d", size = 684145, upload-time = "2026-03-23T18:13:46.671Z" }, - { url = "https://files.pythonhosted.org/packages/2a/79/90de77e73f395bba2fe477f8e82e4ae1d14d6452a706838765e850a5e80c/torchaudio-2.11.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:be7ad472acb16d16e98c005f0219b0db06a47dfe8f7b4d177062e1638f871e3b", size = 1626521, upload-time = "2026-03-23T18:13:40.98Z" }, - { url = "https://files.pythonhosted.org/packages/66/dc/5757ed7d8d11a6c14336bcb54e63980979f00005555fec80fb4aa4de5eff/torchaudio-2.11.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:5847fe2022b17c6580aeb39c8797a443411cc09edfd9183cd50ac1a3b8ccf97c", size = 1771929, upload-time = "2026-03-23T18:13:43.432Z" }, - { url = "https://files.pythonhosted.org/packages/cf/f4/8ce2417eac66296e45b7aaa69858403fb6a52b1323f8635ec37b4b0f1fa3/torchaudio-2.11.0-cp310-cp310-win_amd64.whl", hash = "sha256:7e2da1df4f6fe885c46db350a0dc90a0dff4b54541dff8846faa904d255e2bfe", size = 328661, upload-time = "2026-03-23T18:13:45.77Z" }, { url = "https://files.pythonhosted.org/packages/94/77/0eec7f175d88f312296bd5b11c23bd58da37c1021f53da3db4df449ce3ee/torchaudio-2.11.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:492dd64645e9d0bb843e94f1d9a4d1e31426262ffc594fafecc1697df9df5eb9", size = 684142, upload-time = "2026-03-23T18:13:36.805Z" }, { url = "https://files.pythonhosted.org/packages/b3/f9/6f7ebe071b44592c85269762b55b63ab0a091b5f479f73544738f7564a1e/torchaudio-2.11.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:73dab4841f94d888bc7c2aed7b5547c643edc974306919fe1adfb65d57cccf4b", size = 1626527, upload-time = "2026-03-23T18:13:39.011Z" }, { url = "https://files.pythonhosted.org/packages/ac/70/17408e0d154d0c894537a88dcbadc48e8ad3b6e1ef4a1dabda5d40245ee0/torchaudio-2.11.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:1a07ec72fd6f26a588c39b5f029e0130d16bb40bc4221635580bf8fb18fcbc80", size = 1771930, upload-time = "2026-03-23T18:13:37.963Z" }, @@ -6096,10 +7849,195 @@ name = "torchvision" version = "0.25.0" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "python_full_version >= '3.13'", - "python_full_version == '3.12.*'", - "python_full_version == '3.11.*'", - "python_full_version < '3.11'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", ] dependencies = [ { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" } }, @@ -6107,10 +8045,6 @@ dependencies = [ { name = "torch", version = "2.10.0", source = { registry = "https://pypi.org/simple" } }, ] wheels = [ - { url = "https://files.pythonhosted.org/packages/50/ae/cbf727421eb73f1cf907fbe5788326a08f111b3f6b6ddca15426b53fec9a/torchvision-0.25.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a95c47abb817d4e90ea1a8e57bd0d728e3e6b533b3495ae77d84d883c4d11f56", size = 1874919, upload-time = "2026-01-21T16:27:47.617Z" }, - { url = "https://files.pythonhosted.org/packages/64/68/dc7a224f606d53ea09f9a85196a3921ec3a801b0b1d17e84c73392f0c029/torchvision-0.25.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:acc339aba4a858192998c2b91f635827e40d9c469d9cf1455bafdda6e4c28ea4", size = 2343220, upload-time = "2026-01-21T16:27:44.26Z" }, - { url = "https://files.pythonhosted.org/packages/f9/fa/8cce5ca7ffd4da95193232493703d20aa06303f37b119fd23a65df4f239a/torchvision-0.25.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:0d9a3f925a081dd2ebb0b791249b687c2ef2c2717d027946654607494b9b64b6", size = 8068106, upload-time = "2026-01-21T16:27:37.805Z" }, - { url = "https://files.pythonhosted.org/packages/8b/b9/a53bcf8f78f2cd89215e9ded70041765d50ef13bf301f9884ec6041a9421/torchvision-0.25.0-cp310-cp310-win_amd64.whl", hash = "sha256:b57430fbe9e9b697418a395041bb615124d9c007710a2712fda6e35fb310f264", size = 3697295, upload-time = "2026-01-21T16:27:36.574Z" }, { url = "https://files.pythonhosted.org/packages/3e/be/c704bceaf11c4f6b19d64337a34a877fcdfe3bd68160a8c9ae9bea4a35a3/torchvision-0.25.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:db74a551946b75d19f9996c419a799ffdf6a223ecf17c656f90da011f1d75b20", size = 1874923, upload-time = "2026-01-21T16:27:46.574Z" }, { url = "https://files.pythonhosted.org/packages/ae/e9/f143cd71232430de1f547ceab840f68c55e127d72558b1061a71d0b193cd/torchvision-0.25.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:f49964f96644dbac2506dffe1a0a7ec0f2bf8cf7a588c3319fed26e6329ffdf3", size = 2344808, upload-time = "2026-01-21T16:27:43.191Z" }, { url = "https://files.pythonhosted.org/packages/43/ae/ad5d6165797de234c9658752acb4fce65b78a6a18d82efdf8367c940d8da/torchvision-0.25.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:153c0d2cbc34b7cf2da19d73450f24ba36d2b75ec9211b9962b5022fb9e4ecee", size = 8070752, upload-time = "2026-01-21T16:27:33.748Z" }, @@ -6135,26 +8069,19 @@ version = "0.26.0" source = { registry = "https://pypi.org/simple" } resolution-markers = [ "python_full_version >= '3.13' and sys_platform == 'darwin'", - "python_full_version == '3.12.*' and sys_platform == 'darwin'", "python_full_version >= '3.13' and sys_platform != 'darwin'", + "python_full_version == '3.12.*' and sys_platform == 'darwin'", "python_full_version == '3.12.*' and sys_platform != 'darwin'", - "python_full_version == '3.11.*' and sys_platform == 'darwin'", - "python_full_version < '3.11' and sys_platform == 'darwin'", - "python_full_version == '3.11.*' and sys_platform != 'darwin'", - "python_full_version < '3.11' and sys_platform != 'darwin'", + "python_full_version < '3.12' and sys_platform == 'darwin'", + "python_full_version < '3.12' and sys_platform != 'darwin'", ] dependencies = [ - { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and extra == 'extra-14-granite-switch-dev-vllm20') or (python_full_version < '3.11' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20')" }, - { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and python_full_version < '3.13' and extra == 'extra-14-granite-switch-dev-vllm20') or (python_full_version >= '3.11' and python_full_version < '3.13' and extra == 'extra-14-granite-switch-vllm20') or (python_full_version < '3.11' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20') or (python_full_version < '3.11' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (python_full_version < '3.11' and extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (python_full_version < '3.11' and extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm') or (python_full_version < '3.11' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (python_full_version < '3.11' and extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (python_full_version >= '3.13' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20') or (python_full_version >= '3.13' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (python_full_version >= '3.13' and extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (python_full_version >= '3.13' and extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm') or (python_full_version >= '3.13' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (python_full_version >= '3.13' and extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20')" }, - { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.13' and extra == 'extra-14-granite-switch-dev-vllm20') or (python_full_version >= '3.13' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20')" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.13' and extra == 'extra-14-granite-switch-vllm20') or (python_full_version < '3.13' and extra == 'group-14-granite-switch-dev-vllm20') or (python_full_version < '3.13' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20')" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.13' and extra == 'extra-14-granite-switch-vllm20') or (python_full_version >= '3.13' and extra == 'group-14-granite-switch-dev-vllm20') or (python_full_version >= '3.13' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20')" }, { name = "pillow" }, { name = "torch", version = "2.11.0", source = { registry = "https://pypi.org/simple" } }, ] wheels = [ - { url = "https://files.pythonhosted.org/packages/74/b4/cdfee31e0402ea035135462cb0ab496e974d56fab6b4e7a1f0cbccb8cd28/torchvision-0.26.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a06d4772a8e13e772906ed736cc53ec6639e5e60554f8e5fa6ca165aabebc464", size = 1863503, upload-time = "2026-03-23T18:13:01.384Z" }, - { url = "https://files.pythonhosted.org/packages/e4/74/11fee109841e80ad14e5ca2d80bff6b10eb11b7838ff06f35bfeaa9f7251/torchvision-0.26.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:2adfbe438473236191ff077a4a9a0c767436879c89628aa97137e959b0c11a94", size = 7766423, upload-time = "2026-03-23T18:12:56.049Z" }, - { url = "https://files.pythonhosted.org/packages/5e/00/24d8c7845c3f270153fb81395a5135b2778e2538e81d14c6aea5106c689c/torchvision-0.26.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:b6f9ad1ecc0eab52647298b379ee9426845f8903703e6127973f8f3d049a798b", size = 7518249, upload-time = "2026-03-23T18:12:51.743Z" }, - { url = "https://files.pythonhosted.org/packages/d7/ed/e53cd7c0da7ae002e5e929c1796ebbe7ec0c700c29f7a0a6696497fb3d8b/torchvision-0.26.0-cp310-cp310-win_amd64.whl", hash = "sha256:f13f12b3791a266de2d599cb8162925261622a037d87fc03132848343cf68f75", size = 3669784, upload-time = "2026-03-23T18:12:49.949Z" }, { url = "https://files.pythonhosted.org/packages/b4/bd/d552a2521bade3295b2c6e7a4a0d1022261cab7ca7011f4e2a330dbb3caa/torchvision-0.26.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:55bd6ad4ae77be01ba67a410b05b51f53b0d0ee45f146eb6a0dfb9007e70ab3c", size = 1863499, upload-time = "2026-03-23T18:12:58.696Z" }, { url = "https://files.pythonhosted.org/packages/33/bf/21b899792b08cae7a298551c68398a79e333697479ed311b3b067aab4bdc/torchvision-0.26.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:1c55dc8affbcc0eb2060fbabbe996ae9e5839b24bb6419777f17848945a411b1", size = 7767527, upload-time = "2026-03-23T18:12:44.348Z" }, { url = "https://files.pythonhosted.org/packages/9a/45/57bbf9e216850d065e66dd31a50f57424b607f1d878ab8956e56a1f4e36b/torchvision-0.26.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:fd10b5f994c210f4f6d6761cf686f82d748554adf486cb0979770c3252868c8f", size = 7519925, upload-time = "2026-03-23T18:12:53.283Z" }, @@ -6200,17 +8127,16 @@ version = "5.8.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "huggingface-hub" }, - { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' or extra == 'extra-14-granite-switch-dev' or extra == 'extra-14-granite-switch-tutorials' or extra == 'extra-14-granite-switch-vllm'" }, - { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and python_full_version < '3.13' and extra == 'extra-14-granite-switch-dev-vllm20') or (python_full_version >= '3.11' and python_full_version < '3.13' and extra == 'extra-14-granite-switch-vllm20') or (python_full_version < '3.11' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20') or (python_full_version < '3.11' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (python_full_version < '3.11' and extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (python_full_version < '3.11' and extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm') or (python_full_version < '3.11' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (python_full_version < '3.11' and extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (python_full_version >= '3.13' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20') or (python_full_version >= '3.13' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (python_full_version >= '3.13' and extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (python_full_version >= '3.13' and extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm') or (python_full_version >= '3.13' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (python_full_version >= '3.13' and extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20')" }, - { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.13' and extra == 'extra-14-granite-switch-dev-vllm20') or (python_full_version >= '3.13' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm') or (python_full_version >= '3.11' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm') or (extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20')" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-14-granite-switch-tutorials' or extra == 'extra-14-granite-switch-vllm' or extra == 'group-14-granite-switch-dev' or extra == 'group-14-granite-switch-test' or extra == 'group-14-granite-switch-vllm19'" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.13' and extra == 'extra-14-granite-switch-vllm20') or (python_full_version < '3.13' and extra == 'group-14-granite-switch-dev-vllm20') or (python_full_version < '3.13' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20')" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.13' and extra == 'extra-14-granite-switch-vllm20') or (python_full_version >= '3.13' and extra == 'group-14-granite-switch-dev-vllm20') or (python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20') or (extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20')" }, { name = "packaging" }, { name = "pyyaml" }, { name = "regex" }, { name = "safetensors" }, { name = "tokenizers" }, { name = "tqdm" }, - { name = "typer", version = "0.23.1", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and extra == 'extra-14-granite-switch-tutorials') or (python_full_version >= '3.11' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm') or (extra == 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra != 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20')" }, - { name = "typer", version = "0.25.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' or extra == 'extra-14-granite-switch-dev-vllm20' or extra != 'extra-14-granite-switch-tutorials' or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20')" }, + { name = "typer" }, ] sdist = { url = "https://files.pythonhosted.org/packages/e7/e6/4134ea2fbea322cddc7ffc94a0d8ee47fe32ce8e876b320cd37d88edfc4d/transformers-5.8.1.tar.gz", hash = "sha256:4dd5b6de4105725104d84fd6abd74b305f4debfc251b38c648ee5dd087cf543b", size = 8532019, upload-time = "2026-05-13T03:21:57.234Z" } wheels = [ @@ -6222,8 +8148,6 @@ name = "triton" version = "3.6.0" source = { registry = "https://pypi.org/simple" } wheels = [ - { url = "https://files.pythonhosted.org/packages/44/ba/b1b04f4b291a3205d95ebd24465de0e5bf010a2df27a4e58a9b5f039d8f2/triton-3.6.0-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6c723cfb12f6842a0ae94ac307dba7e7a44741d720a40cf0e270ed4a4e3be781", size = 175972180, upload-time = "2026-01-20T16:15:53.664Z" }, - { url = "https://files.pythonhosted.org/packages/8c/f7/f1c9d3424ab199ac53c2da567b859bcddbb9c9e7154805119f8bd95ec36f/triton-3.6.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a6550fae429e0667e397e5de64b332d1e5695b73650ee75a6146e2e902770bea", size = 188105201, upload-time = "2026-01-20T16:00:29.272Z" }, { url = "https://files.pythonhosted.org/packages/0f/2c/96f92f3c60387e14cc45aed49487f3486f89ea27106c1b1376913c62abe4/triton-3.6.0-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:49df5ef37379c0c2b5c0012286f80174fcf0e073e5ade1ca9a86c36814553651", size = 176081190, upload-time = "2026-01-20T16:16:00.523Z" }, { url = "https://files.pythonhosted.org/packages/e0/12/b05ba554d2c623bffa59922b94b0775673de251f468a9609bc9e45de95e9/triton-3.6.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e8e323d608e3a9bfcc2d9efcc90ceefb764a82b99dea12a86d643c72539ad5d3", size = 188214640, upload-time = "2026-01-20T16:00:35.869Z" }, { url = "https://files.pythonhosted.org/packages/17/5d/08201db32823bdf77a0e2b9039540080b2e5c23a20706ddba942924ebcd6/triton-3.6.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:374f52c11a711fd062b4bfbb201fd9ac0a5febd28a96fb41b4a0f51dde3157f4", size = 176128243, upload-time = "2026-01-20T16:16:07.857Z" }, @@ -6234,83 +8158,13 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/35/f8/9c66bfc55361ec6d0e4040a0337fb5924ceb23de4648b8a81ae9d33b2b38/triton-3.6.0-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d002e07d7180fd65e622134fbd980c9a3d4211fb85224b56a0a0efbd422ab72f", size = 188400296, upload-time = "2026-01-20T16:00:56.042Z" }, ] -[[package]] -name = "typer" -version = "0.23.1" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.11'", -] -dependencies = [ - { name = "annotated-doc", marker = "(python_full_version < '3.11' and extra == 'extra-14-granite-switch-tutorials') or (python_full_version >= '3.11' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm') or (extra == 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra != 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20')" }, - { name = "click", version = "8.1.8", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and extra == 'extra-14-granite-switch-tutorials') or (python_full_version >= '3.11' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm') or (extra == 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra != 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20')" }, - { name = "rich", marker = "(python_full_version < '3.11' and extra == 'extra-14-granite-switch-tutorials') or (python_full_version >= '3.11' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm') or (extra == 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra != 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20')" }, - { name = "shellingham", marker = "(python_full_version < '3.11' and extra == 'extra-14-granite-switch-tutorials') or (python_full_version >= '3.11' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm') or (extra == 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra != 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20')" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/fd/07/b822e1b307d40e263e8253d2384cf98c51aa2368cc7ba9a07e523a1d964b/typer-0.23.1.tar.gz", hash = "sha256:2070374e4d31c83e7b61362fd859aa683576432fd5b026b060ad6b4cd3b86134", size = 120047, upload-time = "2026-02-13T10:04:30.984Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/d5/91/9b286ab899c008c2cb05e8be99814807e7fbbd33f0c0c960470826e5ac82/typer-0.23.1-py3-none-any.whl", hash = "sha256:3291ad0d3c701cbf522012faccfbb29352ff16ad262db2139e6b01f15781f14e", size = 56813, upload-time = "2026-02-13T10:04:32.008Z" }, -] - [[package]] name = "typer" version = "0.25.1" source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.13' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.12.*' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20'", - "python_full_version >= '3.13' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.12.*' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.11.*' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20'", - "python_full_version < '3.11' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.11.*' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20'", - "python_full_version < '3.11' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20'", - "python_full_version >= '3.13' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.12.*' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20'", - "python_full_version >= '3.13' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.12.*' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.11.*' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20'", - "python_full_version < '3.11' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.11.*' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20'", - "python_full_version < '3.11' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20'", - "python_full_version >= '3.13' and extra == 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.12.*' and extra == 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.11.*' and extra == 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version >= '3.13' and extra == 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.12.*' and extra == 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.11.*' and extra == 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version < '3.11' and extra == 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.11.*' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.11.*' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version < '3.11' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version >= '3.13' and extra == 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.12.*' and extra == 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.11.*' and extra == 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version >= '3.13' and extra == 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.12.*' and extra == 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.11.*' and extra == 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version < '3.11' and extra == 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version >= '3.13' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.12.*' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version >= '3.13' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.12.*' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.11.*' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version < '3.11' and sys_platform == 'darwin' and extra != 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.11.*' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version < '3.11' and sys_platform != 'darwin' and extra != 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version == '3.11.*' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version >= '3.11' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", - "python_full_version < '3.11' and extra != 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-dev-vllm20' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20'", -] dependencies = [ { name = "annotated-doc" }, - { name = "click", version = "8.4.0", source = { registry = "https://pypi.org/simple" } }, + { name = "click" }, { name = "rich" }, { name = "shellingham" }, ] @@ -6319,30 +8173,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/3f/f9/2b3ff4e56e5fa7debfaf9eb135d0da96f3e9a1d5b27222223c7296336e5f/typer-0.25.1-py3-none-any.whl", hash = "sha256:75caa44ed46a03fb2dab8808753ffacdbfea88495e74c85a28c5eefcf5f39c89", size = 58409, upload-time = "2026-04-30T19:32:18.271Z" }, ] -[[package]] -name = "types-requests" -version = "2.33.0.20260518" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "urllib3", marker = "python_full_version < '3.11'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/e0/01/c5a19253fe1ac159159ddf9a3a07cec8bb5e486ec4d9002ad2821da0e5d2/types_requests-2.33.0.20260518.tar.gz", hash = "sha256:df7bd3bfe0ca8402dfb841e7d9be714bb5578203283d66d7dc4ef69343449a5e", size = 24752, upload-time = "2026-05-18T06:07:37.966Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/1c/bc/b139710a3b6018f7fb2b9508b35c8af564e61bf2bf4fa619d088f3e16f85/types_requests-2.33.0.20260518-py3-none-any.whl", hash = "sha256:626d697d1adaaff76e2044dc8c5c051d8f21abc157bdfe204a75558076fe0bf0", size = 21391, upload-time = "2026-05-18T06:07:37.044Z" }, -] - -[[package]] -name = "types-tqdm" -version = "4.67.3.20260518" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "types-requests", marker = "python_full_version < '3.11'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/72/8c/8216f9030027dc96c776b0307cb06da9f3c3756ef00e98f1eb332e04a33c/types_tqdm-4.67.3.20260518.tar.gz", hash = "sha256:1f0cf61de56a76a454fbe2c6cc48d05e483470a38f8a9071893b923e7be47190", size = 18208, upload-time = "2026-05-18T06:08:04.417Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/56/59/dbe84f71186645b821cf63f71fc746e1455fbce074594a86f486bee8dc89/types_tqdm-4.67.3.20260518-py3-none-any.whl", hash = "sha256:4969f5b97257c6d082c163d7a0715fffe7a83cb6863e108eac45c3fb82305a68", size = 24586, upload-time = "2026-05-18T06:08:03.568Z" }, -] - [[package]] name = "typing-extensions" version = "4.15.0" @@ -6364,6 +8194,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl", hash = "sha256:4ed1cacbdc298c220f1bd249ed5287caa16f34d44ef4e9c3d0cbad5b521545e7", size = 14611, upload-time = "2025-10-01T02:14:40.154Z" }, ] +[[package]] +name = "tzdata" +version = "2026.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ba/19/1b9b0e29f30c6d35cb345486df41110984ea67ae69dddbc0e8a100999493/tzdata-2026.2.tar.gz", hash = "sha256:9173fde7d80d9018e02a662e168e5a2d04f87c41ea174b139fbef642eda62d10", size = 198254, upload-time = "2026-04-24T15:22:08.651Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ce/e4/dccd7f47c4b64213ac01ef921a1337ee6e30e8c6466046018326977efd95/tzdata-2026.2-py2.py3-none-any.whl", hash = "sha256:bbe9af844f658da81a5f95019480da3a89415801f6cc966806612cc7169bffe7", size = 349321, upload-time = "2026-04-24T15:22:05.876Z" }, +] + [[package]] name = "urllib3" version = "2.7.0" @@ -6378,10 +8217,8 @@ name = "uvicorn" version = "0.47.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "click", version = "8.1.8", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and extra == 'extra-14-granite-switch-tutorials') or (python_full_version >= '3.11' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm') or (extra == 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra != 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20')" }, - { name = "click", version = "8.4.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and extra == 'extra-14-granite-switch-dev') or (python_full_version >= '3.11' and extra == 'extra-14-granite-switch-tutorials') or extra == 'extra-14-granite-switch-dev-vllm20' or (extra == 'extra-14-granite-switch-dev' and extra != 'extra-14-granite-switch-tutorials') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm') or (extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20')" }, + { name = "click" }, { name = "h11" }, - { name = "typing-extensions", marker = "python_full_version < '3.11'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/f6/b1/8e7077a8641086aea449e1b5752a570f1b5906c64e0a33cd6d93b63a066b/uvicorn-0.47.0.tar.gz", hash = "sha256:7c9a0ea1a9414106bbab7324609c162d8fa0cdcdcb703060987269d77c7bb533", size = 90582, upload-time = "2026-05-14T18:16:54.455Z" } wheels = [ @@ -6405,12 +8242,6 @@ version = "0.22.1" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/06/f0/18d39dbd1971d6d62c4629cc7fa67f74821b0dc1f5a77af43719de7936a7/uvloop-0.22.1.tar.gz", hash = "sha256:6c84bae345b9147082b17371e3dd5d42775bddce91f885499017f4607fdaf39f", size = 2443250, upload-time = "2025-10-16T22:17:19.342Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/eb/14/ecceb239b65adaaf7fde510aa8bd534075695d1e5f8dadfa32b5723d9cfb/uvloop-0.22.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:ef6f0d4cc8a9fa1f6a910230cd53545d9a14479311e87e3cb225495952eb672c", size = 1343335, upload-time = "2025-10-16T22:16:11.43Z" }, - { url = "https://files.pythonhosted.org/packages/ba/ae/6f6f9af7f590b319c94532b9567409ba11f4fa71af1148cab1bf48a07048/uvloop-0.22.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7cd375a12b71d33d46af85a3343b35d98e8116134ba404bd657b3b1d15988792", size = 742903, upload-time = "2025-10-16T22:16:12.979Z" }, - { url = "https://files.pythonhosted.org/packages/09/bd/3667151ad0702282a1f4d5d29288fce8a13c8b6858bf0978c219cd52b231/uvloop-0.22.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ac33ed96229b7790eb729702751c0e93ac5bc3bcf52ae9eccbff30da09194b86", size = 3648499, upload-time = "2025-10-16T22:16:14.451Z" }, - { url = "https://files.pythonhosted.org/packages/b3/f6/21657bb3beb5f8c57ce8be3b83f653dd7933c2fd00545ed1b092d464799a/uvloop-0.22.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:481c990a7abe2c6f4fc3d98781cc9426ebd7f03a9aaa7eb03d3bfc68ac2a46bd", size = 3700133, upload-time = "2025-10-16T22:16:16.272Z" }, - { url = "https://files.pythonhosted.org/packages/09/e0/604f61d004ded805f24974c87ddd8374ef675644f476f01f1df90e4cdf72/uvloop-0.22.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:a592b043a47ad17911add5fbd087c76716d7c9ccc1d64ec9249ceafd735f03c2", size = 3512681, upload-time = "2025-10-16T22:16:18.07Z" }, - { url = "https://files.pythonhosted.org/packages/bb/ce/8491fd370b0230deb5eac69c7aae35b3be527e25a911c0acdffb922dc1cd/uvloop-0.22.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:1489cf791aa7b6e8c8be1c5a080bae3a672791fcb4e9e12249b05862a2ca9cec", size = 3615261, upload-time = "2025-10-16T22:16:19.596Z" }, { url = "https://files.pythonhosted.org/packages/c7/d5/69900f7883235562f1f50d8184bb7dd84a2fb61e9ec63f3782546fdbd057/uvloop-0.22.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:c60ebcd36f7b240b30788554b6f0782454826a0ed765d8430652621b5de674b9", size = 1352420, upload-time = "2025-10-16T22:16:21.187Z" }, { url = "https://files.pythonhosted.org/packages/a8/73/c4e271b3bce59724e291465cc936c37758886a4868787da0278b3b56b905/uvloop-0.22.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3b7f102bf3cb1995cfeaee9321105e8f5da76fdb104cdad8986f85461a1b7b77", size = 748677, upload-time = "2025-10-16T22:16:22.558Z" }, { url = "https://files.pythonhosted.org/packages/86/94/9fb7fad2f824d25f8ecac0d70b94d0d48107ad5ece03769a9c543444f78a/uvloop-0.22.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:53c85520781d84a4b8b230e24a5af5b0778efdb39142b424990ff1ef7c48ba21", size = 3753819, upload-time = "2025-10-16T22:16:23.903Z" }, @@ -6436,10 +8267,195 @@ name = "vllm" version = "0.19.1" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "python_full_version >= '3.13'", - "python_full_version == '3.12.*'", - "python_full_version == '3.11.*'", - "python_full_version < '3.11'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform == 'emscripten' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version == '3.12.*' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", + "python_full_version < '3.12' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", ] dependencies = [ { name = "aiohttp" }, @@ -6452,7 +8468,7 @@ dependencies = [ { name = "depyf" }, { name = "diskcache" }, { name = "einops" }, - { name = "fastapi", extra = ["standard"], marker = "extra == 'extra-14-granite-switch-dev' or extra == 'extra-14-granite-switch-tutorials' or extra == 'extra-14-granite-switch-vllm'" }, + { name = "fastapi", extra = ["standard"], marker = "extra == 'extra-14-granite-switch-tutorials' or extra == 'extra-14-granite-switch-vllm' or extra == 'group-14-granite-switch-dev' or extra == 'group-14-granite-switch-test' or extra == 'group-14-granite-switch-vllm19'" }, { name = "filelock" }, { name = "flashinfer-cubin", version = "0.6.6", source = { registry = "https://pypi.org/simple" } }, { name = "flashinfer-python", version = "0.6.6", source = { registry = "https://pypi.org/simple" } }, @@ -6462,7 +8478,7 @@ dependencies = [ { name = "llguidance", marker = "platform_machine == 'aarch64' or platform_machine == 'arm64' or platform_machine == 'ppc64le' or platform_machine == 's390x' or platform_machine == 'x86_64'" }, { name = "lm-format-enforcer" }, { name = "mcp" }, - { name = "mistral-common", extra = ["image"], marker = "extra == 'extra-14-granite-switch-dev' or extra == 'extra-14-granite-switch-tutorials' or extra == 'extra-14-granite-switch-vllm'" }, + { name = "mistral-common", extra = ["image"], marker = "extra == 'extra-14-granite-switch-tutorials' or extra == 'extra-14-granite-switch-vllm' or extra == 'group-14-granite-switch-dev' or extra == 'group-14-granite-switch-test' or extra == 'group-14-granite-switch-vllm19'" }, { name = "model-hosting-container-standards" }, { name = "msgspec" }, { name = "ninja" }, @@ -6520,13 +8536,11 @@ version = "0.20.2" source = { registry = "https://pypi.org/simple" } resolution-markers = [ "python_full_version >= '3.13' and sys_platform == 'darwin'", - "python_full_version == '3.12.*' and sys_platform == 'darwin'", "python_full_version >= '3.13' and sys_platform != 'darwin'", + "python_full_version == '3.12.*' and sys_platform == 'darwin'", "python_full_version == '3.12.*' and sys_platform != 'darwin'", - "python_full_version == '3.11.*' and sys_platform == 'darwin'", - "python_full_version < '3.11' and sys_platform == 'darwin'", - "python_full_version == '3.11.*' and sys_platform != 'darwin'", - "python_full_version < '3.11' and sys_platform != 'darwin'", + "python_full_version < '3.12' and sys_platform == 'darwin'", + "python_full_version < '3.12' and sys_platform != 'darwin'", ] dependencies = [ { name = "aiohttp" }, @@ -6540,7 +8554,7 @@ dependencies = [ { name = "depyf" }, { name = "diskcache" }, { name = "einops" }, - { name = "fastapi", extra = ["standard"], marker = "extra == 'extra-14-granite-switch-dev-vllm20' or extra == 'extra-14-granite-switch-vllm20'" }, + { name = "fastapi", extra = ["standard"], marker = "extra == 'extra-14-granite-switch-vllm20' or extra == 'group-14-granite-switch-dev-vllm20' or extra == 'group-14-granite-switch-vllm20'" }, { name = "fastsafetensors" }, { name = "filelock" }, { name = "flashinfer-cubin", version = "0.6.8.post1", source = { registry = "https://pypi.org/simple" } }, @@ -6551,14 +8565,13 @@ dependencies = [ { name = "llguidance", marker = "platform_machine == 'aarch64' or platform_machine == 'arm64' or platform_machine == 'ppc64le' or platform_machine == 'x86_64'" }, { name = "lm-format-enforcer" }, { name = "mcp" }, - { name = "mistral-common", extra = ["image"], marker = "extra == 'extra-14-granite-switch-dev-vllm20' or extra == 'extra-14-granite-switch-vllm20'" }, + { name = "mistral-common", extra = ["image"], marker = "extra == 'extra-14-granite-switch-vllm20' or extra == 'group-14-granite-switch-dev-vllm20' or extra == 'group-14-granite-switch-vllm20'" }, { name = "model-hosting-container-standards" }, { name = "msgspec" }, { name = "ninja" }, { name = "numba", version = "0.65.0", source = { registry = "https://pypi.org/simple" } }, - { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and extra == 'extra-14-granite-switch-dev-vllm20') or (python_full_version < '3.11' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20')" }, - { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and python_full_version < '3.13' and extra == 'extra-14-granite-switch-dev-vllm20') or (python_full_version >= '3.11' and python_full_version < '3.13' and extra == 'extra-14-granite-switch-vllm20') or (python_full_version < '3.11' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20') or (python_full_version < '3.11' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (python_full_version < '3.11' and extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (python_full_version < '3.11' and extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm') or (python_full_version < '3.11' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (python_full_version < '3.11' and extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (python_full_version >= '3.13' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20') or (python_full_version >= '3.13' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (python_full_version >= '3.13' and extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (python_full_version >= '3.13' and extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm') or (python_full_version >= '3.13' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (python_full_version >= '3.13' and extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20')" }, - { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.13' and extra == 'extra-14-granite-switch-dev-vllm20') or (python_full_version >= '3.13' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20')" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.13' and extra == 'extra-14-granite-switch-vllm20') or (python_full_version < '3.13' and extra == 'group-14-granite-switch-dev-vllm20') or (python_full_version < '3.13' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20')" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.13' and extra == 'extra-14-granite-switch-vllm20') or (python_full_version >= '3.13' and extra == 'group-14-granite-switch-dev-vllm20') or (python_full_version >= '3.13' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20')" }, { name = "nvidia-cudnn-frontend" }, { name = "nvidia-cutlass-dsl" }, { name = "openai" }, @@ -6615,19 +8628,6 @@ dependencies = [ ] sdist = { url = "https://files.pythonhosted.org/packages/cd/41/5e1a4bb12aac5f1493fa1bdc11154eca3b258ca4eba65d39c473fe19d8e9/watchfiles-1.2.0.tar.gz", hash = "sha256:c995fba777f1ea992f090f9236e9284cf7a5d1a0130dd5a3d82c598cacd76838", size = 108252, upload-time = "2026-05-18T04:32:04.251Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/0d/5a/2bf22ecb24916983bf1cc0095e7dea2741d14d6553b0d6a2ac8bc96eca93/watchfiles-1.2.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:bb68bf4df85abebe5efddc53cf2075520f243a59868d9b3973278b23e76962a9", size = 400471, upload-time = "2026-05-18T04:31:08.908Z" }, - { url = "https://files.pythonhosted.org/packages/55/70/dea1f6a0e76607841a60fb51af150e70124864673f61704abb62b90cdcc7/watchfiles-1.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c16cb06dd17d43b9d185094268459eac92c9538356f050e55b54e82cf700e1d4", size = 394599, upload-time = "2026-05-18T04:30:19.845Z" }, - { url = "https://files.pythonhosted.org/packages/18/52/752dcc7dc817baef5e89518732925795ce52e36a683a9a3c9fb68b21504e/watchfiles-1.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77a0feab9af4c021c581f695258c642b3d10c5fd4c676e33a0d8606425d82631", size = 455458, upload-time = "2026-05-18T04:30:29.126Z" }, - { url = "https://files.pythonhosted.org/packages/12/48/366ebbb22fcc504c2f72b45f0b7e72f40a18795cc01752c16066d597b67a/watchfiles-1.2.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a16ffe19bf5cf9f5edaa1ad1dd830c5a816e8feec430c522302ab55483a4b994", size = 460513, upload-time = "2026-05-18T04:31:40.85Z" }, - { url = "https://files.pythonhosted.org/packages/ad/44/1f9e1b15e7a729062e0d0c3d0d7225ea4ab98b2267ef87287153be2495fc/watchfiles-1.2.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:204f299afcbd65918ab78dbc52626b0ae45e9d8cef403fdbf33ecf9e40eac66e", size = 493616, upload-time = "2026-05-18T04:30:58.47Z" }, - { url = "https://files.pythonhosted.org/packages/7e/55/8b1086dcc8a1d6a697a62767bd7ea368e74c61c6fd171683cfe24a3fe5d2/watchfiles-1.2.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:11743adfa510bfffebe97659fb280182b5c9b238708f667e866f308c3430dc19", size = 573154, upload-time = "2026-05-18T04:30:37.903Z" }, - { url = "https://files.pythonhosted.org/packages/14/7a/242f400cc77fafa7b18d53d19d9cb64fc6a6f61f28c55913bae7c674d92a/watchfiles-1.2.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:eb72919d93e3a16fc451d3aa3d4b1698423daca1b382d3d959c9ac51297c12a8", size = 467046, upload-time = "2026-05-18T04:30:41.869Z" }, - { url = "https://files.pythonhosted.org/packages/02/c8/79eee650c62d2c186598489814468e389b5def0ebe755399ff645b35b1b2/watchfiles-1.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b62f042afde2dde21ec1d2c1a74361e804673df86f51e418a999c9acfe671b07", size = 457100, upload-time = "2026-05-18T04:31:13.064Z" }, - { url = "https://files.pythonhosted.org/packages/81/36/519f6dbb7a95e4fe7c1513ed25b1520295ef9905a27f1f2226a73892bfb7/watchfiles-1.2.0-cp310-cp310-manylinux_2_31_riscv64.whl", hash = "sha256:027ae72bfdfd254862065d8b3e2a815c6ab9b1853ce41e6648ece84afd34a551", size = 467038, upload-time = "2026-05-18T04:30:32.915Z" }, - { url = "https://files.pythonhosted.org/packages/2f/12/951af6b9f89097e02511122258402cb3578443021930b70cf968d6310dc0/watchfiles-1.2.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e1cfd51e97e13ff3bd047c140764d277fc9b95b7cb5da59e46a47d167adab310", size = 632563, upload-time = "2026-05-18T04:30:11.539Z" }, - { url = "https://files.pythonhosted.org/packages/28/cc/0cba1f0a6117b7ec117271bdc3cb3a5a252005959755a2c09a745e0942cc/watchfiles-1.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:24b2405c0a46738dd9e1cf7135aa5dbdb9d42d024628651b3b13d5117e99f8df", size = 660851, upload-time = "2026-05-18T04:31:53.186Z" }, - { url = "https://files.pythonhosted.org/packages/d0/f2/26347558cc8bf6877845e66b315f644d03c173906aa09e233a3f4fd23928/watchfiles-1.2.0-cp310-cp310-win32.whl", hash = "sha256:8c520725602756229f045b032a1ff33d7ef0f7404189d62f6c2438cb6d8ef6a1", size = 277023, upload-time = "2026-05-18T04:30:18.825Z" }, - { url = "https://files.pythonhosted.org/packages/6d/68/a5e67b6b68e94f4c1511d61c46c55eba0737583620b6febf194c7b9cc23f/watchfiles-1.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:03b14855c6f35539e2d95c442ae9530a75762f1e26567152b9ed05f96534a74d", size = 290107, upload-time = "2026-05-18T04:32:09.677Z" }, { url = "https://files.pythonhosted.org/packages/fc/3d/8024c801df84d1587740d0359e7fdd80afeae3d159011f3d5376dd82f18e/watchfiles-1.2.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:704fd259e332e01f9b9c178f4bce9e49027e5587cc2600eeeaf8e76e1c846201", size = 400242, upload-time = "2026-05-18T04:31:19.014Z" }, { url = "https://files.pythonhosted.org/packages/87/5b/f4dfd45323e949984a3a7f9dc31d1cbb049921e7d98253488dda72ccdaa9/watchfiles-1.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:6543cf55d170003296d185c0af981f3e1311564907e1f4e08671fc7693a890a5", size = 394562, upload-time = "2026-05-18T04:30:08.46Z" }, { url = "https://files.pythonhosted.org/packages/98/d8/19483ef075d601c409bce8bcbb5c0f81a10876fff870400568f08ce484a1/watchfiles-1.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:89d8c2394a065ca86f5d2910ff263ae67c127e1376ccc4f9fc35c71db879f80a", size = 456611, upload-time = "2026-05-18T04:30:45.723Z" }, @@ -6711,15 +8711,6 @@ version = "16.0" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/04/24/4b2031d72e840ce4c1ccb255f693b15c334757fc50023e4db9537080b8c4/websockets-16.0.tar.gz", hash = "sha256:5f6261a5e56e8d5c42a4497b364ea24d94d9563e8fbd44e78ac40879c60179b5", size = 179346, upload-time = "2026-01-10T09:23:47.181Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/20/74/221f58decd852f4b59cc3354cccaf87e8ef695fede361d03dc9a7396573b/websockets-16.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:04cdd5d2d1dacbad0a7bf36ccbcd3ccd5a30ee188f2560b7a62a30d14107b31a", size = 177343, upload-time = "2026-01-10T09:22:21.28Z" }, - { url = "https://files.pythonhosted.org/packages/19/0f/22ef6107ee52ab7f0b710d55d36f5a5d3ef19e8a205541a6d7ffa7994e5a/websockets-16.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8ff32bb86522a9e5e31439a58addbb0166f0204d64066fb955265c4e214160f0", size = 175021, upload-time = "2026-01-10T09:22:22.696Z" }, - { url = "https://files.pythonhosted.org/packages/10/40/904a4cb30d9b61c0e278899bf36342e9b0208eb3c470324a9ecbaac2a30f/websockets-16.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:583b7c42688636f930688d712885cf1531326ee05effd982028212ccc13e5957", size = 175320, upload-time = "2026-01-10T09:22:23.94Z" }, - { url = "https://files.pythonhosted.org/packages/9d/2f/4b3ca7e106bc608744b1cdae041e005e446124bebb037b18799c2d356864/websockets-16.0-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:7d837379b647c0c4c2355c2499723f82f1635fd2c26510e1f587d89bc2199e72", size = 183815, upload-time = "2026-01-10T09:22:25.469Z" }, - { url = "https://files.pythonhosted.org/packages/86/26/d40eaa2a46d4302becec8d15b0fc5e45bdde05191e7628405a19cf491ccd/websockets-16.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:df57afc692e517a85e65b72e165356ed1df12386ecb879ad5693be08fac65dde", size = 185054, upload-time = "2026-01-10T09:22:27.101Z" }, - { url = "https://files.pythonhosted.org/packages/b0/ba/6500a0efc94f7373ee8fefa8c271acdfd4dca8bd49a90d4be7ccabfc397e/websockets-16.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:2b9f1e0d69bc60a4a87349d50c09a037a2607918746f07de04df9e43252c77a3", size = 184565, upload-time = "2026-01-10T09:22:28.293Z" }, - { url = "https://files.pythonhosted.org/packages/04/b4/96bf2cee7c8d8102389374a2616200574f5f01128d1082f44102140344cc/websockets-16.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:335c23addf3d5e6a8633f9f8eda77efad001671e80b95c491dd0924587ece0b3", size = 183848, upload-time = "2026-01-10T09:22:30.394Z" }, - { url = "https://files.pythonhosted.org/packages/02/8e/81f40fb00fd125357814e8c3025738fc4ffc3da4b6b4a4472a82ba304b41/websockets-16.0-cp310-cp310-win32.whl", hash = "sha256:37b31c1623c6605e4c00d466c9d633f9b812ea430c11c8a278774a1fde1acfa9", size = 178249, upload-time = "2026-01-10T09:22:32.083Z" }, - { url = "https://files.pythonhosted.org/packages/b4/5f/7e40efe8df57db9b91c88a43690ac66f7b7aa73a11aa6a66b927e44f26fa/websockets-16.0-cp310-cp310-win_amd64.whl", hash = "sha256:8e1dab317b6e77424356e11e99a432b7cb2f3ec8c5ab4dabbcee6add48f72b35", size = 178685, upload-time = "2026-01-10T09:22:33.345Z" }, { url = "https://files.pythonhosted.org/packages/f2/db/de907251b4ff46ae804ad0409809504153b3f30984daf82a1d84a9875830/websockets-16.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:31a52addea25187bde0797a97d6fc3d2f92b6f72a9370792d65a6e84615ac8a8", size = 177340, upload-time = "2026-01-10T09:22:34.539Z" }, { url = "https://files.pythonhosted.org/packages/f3/fa/abe89019d8d8815c8781e90d697dec52523fb8ebe308bf11664e8de1877e/websockets-16.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:417b28978cdccab24f46400586d128366313e8a96312e4b9362a4af504f3bbad", size = 175022, upload-time = "2026-01-10T09:22:36.332Z" }, { url = "https://files.pythonhosted.org/packages/58/5d/88ea17ed1ded2079358b40d31d48abe90a73c9e5819dbcde1606e991e2ad/websockets-16.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:af80d74d4edfa3cb9ed973a0a5ba2b2a549371f8a741e0800cb07becdd20f23d", size = 175319, upload-time = "2026-01-10T09:22:37.602Z" }, @@ -6770,23 +8761,18 @@ version = "0.2.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "apache-tvm-ffi" }, - { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and extra == 'extra-14-granite-switch-dev-vllm20') or (python_full_version >= '3.11' and extra == 'extra-14-granite-switch-tutorials') or (python_full_version >= '3.11' and extra == 'extra-14-granite-switch-vllm') or (python_full_version < '3.11' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or extra == 'extra-14-granite-switch-dev' or (extra != 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (extra != 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm')" }, - { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and python_full_version < '3.13' and extra == 'extra-14-granite-switch-dev-vllm20') or (python_full_version >= '3.11' and python_full_version < '3.13' and extra == 'extra-14-granite-switch-vllm20') or (python_full_version < '3.11' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20') or (python_full_version < '3.11' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (python_full_version < '3.11' and extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (python_full_version < '3.11' and extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm') or (python_full_version < '3.11' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (python_full_version < '3.11' and extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (python_full_version >= '3.13' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20') or (python_full_version >= '3.13' and extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (python_full_version >= '3.13' and extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (python_full_version >= '3.13' and extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm') or (python_full_version >= '3.13' and extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (python_full_version >= '3.13' and extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20')" }, - { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.13' and extra == 'extra-14-granite-switch-dev-vllm20') or (python_full_version >= '3.13' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-dev' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-tutorials') or (extra == 'extra-14-granite-switch-dev-vllm20' and extra == 'extra-14-granite-switch-vllm') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20')" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-14-granite-switch-tutorials' or extra == 'extra-14-granite-switch-vllm' or extra == 'group-14-granite-switch-dev' or extra == 'group-14-granite-switch-test' or extra == 'group-14-granite-switch-vllm19'" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.13' and extra == 'extra-14-granite-switch-vllm20') or (python_full_version < '3.13' and extra == 'group-14-granite-switch-dev-vllm20') or (python_full_version < '3.13' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20')" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.13' and extra == 'extra-14-granite-switch-vllm20') or (python_full_version >= '3.13' and extra == 'group-14-granite-switch-dev-vllm20') or (python_full_version >= '3.13' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20')" }, { name = "pydantic" }, - { name = "torch", version = "2.10.0", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-14-granite-switch-dev' or extra == 'extra-14-granite-switch-tutorials' or extra == 'extra-14-granite-switch-vllm'" }, - { name = "torch", version = "2.11.0", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-14-granite-switch-dev-vllm20' or extra == 'extra-14-granite-switch-vllm20'" }, + { name = "torch", version = "2.10.0", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-14-granite-switch-tutorials' or extra == 'extra-14-granite-switch-vllm' or extra == 'group-14-granite-switch-dev' or extra == 'group-14-granite-switch-test' or extra == 'group-14-granite-switch-vllm19'" }, + { name = "torch", version = "2.11.0", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-14-granite-switch-vllm20' or extra == 'group-14-granite-switch-dev-vllm20' or extra == 'group-14-granite-switch-vllm20'" }, { name = "transformers" }, { name = "triton", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, { name = "typing-extensions" }, ] sdist = { url = "https://files.pythonhosted.org/packages/d8/ea/6394caddd078d33772070eefaaf77cb0a826a3047b908b688dece7d040b5/xgrammar-0.2.1.tar.gz", hash = "sha256:4c48c251b75d211e9ffa7f4f4ac8b5b0164f89fd5f0d1883ad7ff4554922030d", size = 2427065, upload-time = "2026-05-17T21:39:26.576Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/b0/ed/85178e99768b9624a66f5f52840265f92bf8f52fc5ec22332ca8bed84676/xgrammar-0.2.1-cp310-cp310-macosx_10_14_x86_64.whl", hash = "sha256:b8affc93b5c48b1db52d82b9f32a72ebee9f1f54322a1abd25aee63ed7c4c31d", size = 23291014, upload-time = "2026-05-17T21:37:04.21Z" }, - { url = "https://files.pythonhosted.org/packages/93/23/a76aa8db4b058168e22d6fa118b8e040681d11ef2295cbebc7c6530efce8/xgrammar-0.2.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f4a37e1676346b9c87858f5252f35148eab4a3d6aecae9361906b870635d7cc0", size = 23202372, upload-time = "2026-05-17T21:37:08.288Z" }, - { url = "https://files.pythonhosted.org/packages/e4/19/52d1d1c767582e33e4544f6f63e1025b2b6899751e6bedcc2f2d52e52498/xgrammar-0.2.1-cp310-cp310-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2b4f2d570db0da6e85533f6a46c714f59fafaa0fb5b83734c824020318c61c94", size = 44218937, upload-time = "2026-05-17T21:37:13.201Z" }, - { url = "https://files.pythonhosted.org/packages/1a/62/4fba98477159f4f79b2baa33f891708df3585ff6a1ac77b4c64895ec462b/xgrammar-0.2.1-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5b80b8060fcf6c94324f563e1d4778029b21d35c556dca5bbf49428d307eca37", size = 44678431, upload-time = "2026-05-17T21:37:18.087Z" }, - { url = "https://files.pythonhosted.org/packages/d7/3c/07a346bf24db5e7029cf6d851aa8bcdfb7df3ecbdc7ab81bbe9bc0fbd371/xgrammar-0.2.1-cp310-cp310-win_amd64.whl", hash = "sha256:a6406aac801b1cea342477ab1fb26784d2a88d41402619681b87d9f2ddc85343", size = 7409600, upload-time = "2026-05-17T21:37:21.428Z" }, { url = "https://files.pythonhosted.org/packages/82/9e/e1f35da58272099af49eee18545a60d0834d5058b3ad11a7a754d084ca5b/xgrammar-0.2.1-cp311-cp311-macosx_10_14_x86_64.whl", hash = "sha256:62ac4b8ed9eeb7d48c71c3d4c641bdc0e11f1b4c20c4b36ee670412238d9854d", size = 23290996, upload-time = "2026-05-17T21:37:24.886Z" }, { url = "https://files.pythonhosted.org/packages/df/4c/2839328d7577378968db54c5dc2324ed1ffd1f212219f8543f24a7becd4c/xgrammar-0.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7dfe4b50d12325dc50f65ec837c03e02f2e2c366b7ae88d93bdcf4351e8bd440", size = 23202401, upload-time = "2026-05-17T21:37:29.298Z" }, { url = "https://files.pythonhosted.org/packages/0a/a6/838795496cd32429cbb6a05aeb3f9fec92d33a0ad47784666b251c52ef23/xgrammar-0.2.1-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f16c1adf6bf31d0f2ba40a7fc5df69a01757641a06e1cbf17f2143a830180646", size = 44218971, upload-time = "2026-05-17T21:37:35.158Z" }, @@ -6803,6 +8789,101 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/98/67/f99c7a0cd6221d6db6b67d7d987ef7bbb99e52bdd97d6d7d515e28c57e64/xgrammar-0.2.1-cp313-cp313-win_amd64.whl", hash = "sha256:58ab4d1b2a9f23e38e9a53ceb30ae5c8363e9a9e14d686bbb9f06147fb2e050c", size = 7409601, upload-time = "2026-05-17T21:38:22.229Z" }, ] +[[package]] +name = "xxhash" +version = "3.7.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/24/2f/e183a1b407002f5af81822bee18b61cdb94b8670208ef34734d8d2b8ebe9/xxhash-3.7.0.tar.gz", hash = "sha256:6cc4eefbb542a5d6ffd6d70ea9c502957c925e800f998c5630ecc809d6702bae", size = 82022, upload-time = "2026-04-25T11:10:32.553Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3b/f4/7bd35089ff1f8e2c96baa2dce05775a122aacd2e3830a73165e27a4d0848/xxhash-3.7.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:fdc7d06929ae28dda98297a18eef7b0fd38991a3b405d8d7b55c9ef24c296958", size = 33423, upload-time = "2026-04-25T11:05:47.628Z" }, + { url = "https://files.pythonhosted.org/packages/a3/26/4e00c88a6a2c8a759cfb77d2a9a405f901e8aa66e60ef1fd0aeb35edda48/xxhash-3.7.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ea6daa712f4e094a30830cf01e9b47d03b24d05cc9dab8609f0d9a9db8454712", size = 30857, upload-time = "2026-04-25T11:05:49.189Z" }, + { url = "https://files.pythonhosted.org/packages/82/2f/eeb942c17a5a761a8f01cb9180a0b76bfb62a2c39e6f46b1f9001899027a/xxhash-3.7.0-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:9e6c0d843f1daf85ea23aeb053579135552bde575b7b98af20bfc667b6e4548d", size = 194702, upload-time = "2026-04-25T11:05:50.457Z" }, + { url = "https://files.pythonhosted.org/packages/0e/fd/96f132c08b1e5951c68691d3b9ec351ec2edc028f6a01fcd294f46b9d9f0/xxhash-3.7.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:363c139bf15e1ac5f136b981d3c077eb551299b1effede7f12faa010b8590a60", size = 213613, upload-time = "2026-04-25T11:05:52.571Z" }, + { url = "https://files.pythonhosted.org/packages/82/89/d4e92b796c5ed052d29ed324dbfc1dc1188e0c4bf64bebbf0f8fc20698df/xxhash-3.7.0-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:a778b25874cb0f862eaab5986bff4ca49ffb0def7c0a34c237b948b3c6c775b2", size = 236726, upload-time = "2026-04-25T11:05:54.395Z" }, + { url = "https://files.pythonhosted.org/packages/40/f1/81fc4361921dc6e557a9c60cb3712f36d244d06eeeb71cd2f4252ac42678/xxhash-3.7.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:3e1860f1e43d40e9d904cf22d93e587ea42e010ebce4160877e46bcab4bc232a", size = 212443, upload-time = "2026-04-25T11:05:56.334Z" }, + { url = "https://files.pythonhosted.org/packages/6a/d0/afeddd4cff50a332f50d4b8a2e8857673153ab0564ef472fcdeb0b5430df/xxhash-3.7.0-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:9122ad6f867c4a0f5e655f5c3bdf89103852009dbb442a3d23e688b9e699e800", size = 445793, upload-time = "2026-04-25T11:05:58.953Z" }, + { url = "https://files.pythonhosted.org/packages/f7/d0/3c91e4e6a05ca4d7df8e39ec3a75b713609258ec84705ab34be6430826a1/xxhash-3.7.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d7d9110d0c3fb02679972837a033251fd186c529aa62f19c132fc909c74052b8", size = 193937, upload-time = "2026-04-25T11:06:00.546Z" }, + { url = "https://files.pythonhosted.org/packages/4e/3a/a6b0772d9801dd4bea4ca4fd34734d6e9b51a711c8a611a24a79de26a878/xxhash-3.7.0-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:347a93f2b4ce67ce61959665e32a7447c380f8347e55e100daa23766baacf0e5", size = 285188, upload-time = "2026-04-25T11:06:01.96Z" }, + { url = "https://files.pythonhosted.org/packages/6c/f8/cf8e31fd7282230fe7367cd501a2e75b4b67b222bfc7eacccfc20d2652cb/xxhash-3.7.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:acbb48679ddf3852c45280c10ff10d52ca2cd1da2e552fb81db1ff786c75d0e4", size = 210966, upload-time = "2026-04-25T11:06:03.453Z" }, + { url = "https://files.pythonhosted.org/packages/cc/f0/fd36cc4a81bf52ee5633275daae2b93dd958aace67fd4f5d466ec83b5f35/xxhash-3.7.0-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:fe14c356f8b23ad811dc026077a6d4abccdaa7bce5ca98579605550657b6fcfb", size = 241994, upload-time = "2026-04-25T11:06:05.264Z" }, + { url = "https://files.pythonhosted.org/packages/08/e1/67f5d9c9369be42eaf99ba02c01bf14c5ecd67087b02567960bfcee43b63/xxhash-3.7.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:f420ad3d41e38194353a498bbc9561fd5a9973a27b536ce46d8583479cf44335", size = 198707, upload-time = "2026-04-25T11:06:07.044Z" }, + { url = "https://files.pythonhosted.org/packages/50/17/a4c865ca22d2da6b1bc7d739bf88cab209533cf52ba06ca9da27c3039bee/xxhash-3.7.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:693d02c6dc7d1aa0a45921d54cd8c1ff629e09dfdc2238471507af1f7a1c6f04", size = 210917, upload-time = "2026-04-25T11:06:08.853Z" }, + { url = "https://files.pythonhosted.org/packages/49/8b/453b35810d697abac3c96bde3528bece685869227da274eb80a4a4d4a119/xxhash-3.7.0-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:14bf7a54e43825ec131ee7fe3c60e142e7c2c1e676ad0f93fc893432d15414af", size = 275772, upload-time = "2026-04-25T11:06:10.645Z" }, + { url = "https://files.pythonhosted.org/packages/b5/ad/4eed7eab07fd3ee6678f416190f0413d097ab5d7c1278906bf1e9549d789/xxhash-3.7.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:ae3a39a4d96bdb6f8d154fd7f490c4ad06f0532fcd2bb656052a9a7762cf5d31", size = 414068, upload-time = "2026-04-25T11:06:12.511Z" }, + { url = "https://files.pythonhosted.org/packages/d3/4e/fd6f8a680ba248fdb83054fa71a8bfa3891225200de1708b888ef2c49829/xxhash-3.7.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:1cc07c639e3a77ef1d32987464d3e408565b8a3be57b545d3542b191054d9923", size = 191459, upload-time = "2026-04-25T11:06:14.07Z" }, + { url = "https://files.pythonhosted.org/packages/50/7c/8cb34b3bed4f44ca6827a534d50833f9bc6c006e83b0eb410ac9fa0793bd/xxhash-3.7.0-cp311-cp311-win32.whl", hash = "sha256:3281ba1d1e60ee7a382a7b958513ba03c2c0d5fcbd9a6f7517c0a81251a23422", size = 30628, upload-time = "2026-04-25T11:06:15.802Z" }, + { url = "https://files.pythonhosted.org/packages/0b/47/a49767bd7b40782bedae9ff0721bfe1d7e4dd9dc1585dea684e57ba67c20/xxhash-3.7.0-cp311-cp311-win_amd64.whl", hash = "sha256:a7f25baec4c5d851d40718d6fae52285b31683093d4ff5207e63ab306ccf14a5", size = 31461, upload-time = "2026-04-25T11:06:17.104Z" }, + { url = "https://files.pythonhosted.org/packages/7c/c6/3957bfacfb706bd687be246dfa8dd60f8df97c44186d229f7fd6e26c4b7e/xxhash-3.7.0-cp311-cp311-win_arm64.whl", hash = "sha256:4c2454448ce847c72635827bb75c15c5a3434b03ee1afd28cb6dc6fb2597d830", size = 27746, upload-time = "2026-04-25T11:06:18.716Z" }, + { url = "https://files.pythonhosted.org/packages/f2/8a/51a14cdef4728c6c2337db8a7d8704422cc65676d9199d77215464c880af/xxhash-3.7.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:082c87bfdd2b9f457606c7a4a53457f4c4b48b0cdc48de0277f4349d79bb3d7a", size = 33357, upload-time = "2026-04-25T11:06:20.44Z" }, + { url = "https://files.pythonhosted.org/packages/b9/1b/0c2c933809421ffd9bf42b59315552c143c755db5d9a816b2f1ae273e884/xxhash-3.7.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5e7ce913b61f35b0c1c839a49ac9c8e75dd8d860150688aed353b0ce1bf409d8", size = 30869, upload-time = "2026-04-25T11:06:21.989Z" }, + { url = "https://files.pythonhosted.org/packages/03/a8/89d5fdd6ee12d70ba99451de46dd0e8010167468dcd913ec855653f4dd50/xxhash-3.7.0-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:3beb1de3b1e9694fcdd853e570ee64c631c7062435d2f8c69c1adf809bc086f0", size = 194100, upload-time = "2026-04-25T11:06:23.586Z" }, + { url = "https://files.pythonhosted.org/packages/87/ee/2f9f2ed993e77206d1e66991290a1ebe22e843351ca3ebec8e49e01ba186/xxhash-3.7.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f3e7b689c3bce16699efcf736066f5c6cc4472c3840fe4b22bd8279daf4abdac", size = 212977, upload-time = "2026-04-25T11:06:25.019Z" }, + { url = "https://files.pythonhosted.org/packages/de/60/5a91644615a9e9d4e42c2e9925f1908e3a24e4e691d9de7340d565bea024/xxhash-3.7.0-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:a6545e6b409e3d5cbafc850fb84c55a1ca26ed15a6b11e3bf07a0e0cd84517c8", size = 236373, upload-time = "2026-04-25T11:06:26.482Z" }, + { url = "https://files.pythonhosted.org/packages/22/c0/f3a9384eaaed9d14d4d062a5d953aa0da489bfe9747877aa994caa87cd0b/xxhash-3.7.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:31ab1461c77a11461d703c88eb949e132a1c6515933cf675d97ec680f4bd18de", size = 212229, upload-time = "2026-04-25T11:06:28.065Z" }, + { url = "https://files.pythonhosted.org/packages/2e/67/02f07a9fd79726804190f2172c4894c3ed9a4ebccaca05653c84beb58025/xxhash-3.7.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:7c4d596b7676f811172687ec567cbafb9e4dea2f9be1bbb4f622410cb7f40f40", size = 445462, upload-time = "2026-04-25T11:06:30.048Z" }, + { url = "https://files.pythonhosted.org/packages/40/37/558f5a90c0672fc9b4402dc25d87ac5b7406616e8969430c9ca4e52ee74d/xxhash-3.7.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:13805f0461cba0a857924e70ff91ae6d52d2598f79a884e788db80532614a4a1", size = 193932, upload-time = "2026-04-25T11:06:31.857Z" }, + { url = "https://files.pythonhosted.org/packages/d5/90/aaa09cd58661d32044dbbad7df55bbe22a623032b810e7ed3b8c569a2a6f/xxhash-3.7.0-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:1d398f372496152f1c6933a33566373f8d1b37b98b8c9d608fa6edc0976f23b2", size = 284807, upload-time = "2026-04-25T11:06:33.697Z" }, + { url = "https://files.pythonhosted.org/packages/d6/f3/53df3719ab127a02c174f0c1c74924fcd110866e89c966bc7909cfa8fa84/xxhash-3.7.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:d610aa62cdb7d4d497740741772a24a794903bf3e79eaa51d2e800082abe11e5", size = 210445, upload-time = "2026-04-25T11:06:35.488Z" }, + { url = "https://files.pythonhosted.org/packages/72/33/d219975c0e8b6fa2eb9ccd486fe47e21bf1847985b878dd2fbc3126e0d5c/xxhash-3.7.0-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:073c23900a9fbf3d26616c17c830db28af9803677cd5b33aea3224d824111514", size = 241273, upload-time = "2026-04-25T11:06:37.24Z" }, + { url = "https://files.pythonhosted.org/packages/3e/50/49b1afe610eb3964cedcb90a4d4c3d46a261ee8669cbd4f060652619ae3c/xxhash-3.7.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:418a463c3e6a590c0cdc890f8be19adb44a8c8acd175ca5b2a6de77e61d0b386", size = 197950, upload-time = "2026-04-25T11:06:39.148Z" }, + { url = "https://files.pythonhosted.org/packages/c6/75/5f42a1a4c78717d906a4b6a140c6dbf837ab1f547a54d23c4e2903310936/xxhash-3.7.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:03f8ff4474ee61c845758ce00711d7087a770d77efb36f7e74a6e867301000b8", size = 210709, upload-time = "2026-04-25T11:06:40.958Z" }, + { url = "https://files.pythonhosted.org/packages/8a/85/237e446c25abced71e9c53d269f2cef5bab8a82b3f88a12e00c5368e7368/xxhash-3.7.0-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:44fba4a5f1d179b7ddc7b3dc40f56f9209046421679b57025d4d8821b376fd8d", size = 275345, upload-time = "2026-04-25T11:06:42.525Z" }, + { url = "https://files.pythonhosted.org/packages/62/34/c2c26c0a6a9cc739bc2a5f0ae03ba8b87deb12b8bce35f7ac495e790dc6d/xxhash-3.7.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:31e3516a0f829d06ded4a2c0f3c7c5561993256bfa1c493975fb9dc7bfa828a1", size = 414056, upload-time = "2026-04-25T11:06:44.343Z" }, + { url = "https://files.pythonhosted.org/packages/a0/aa/5c58e9bc8071b8afd8dcf297ff362f723c4892168faba149f19904132bf4/xxhash-3.7.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b59ee2ac81de57771a09ecad09191e840a1d2fae1ef684208320591055768f83", size = 191485, upload-time = "2026-04-25T11:06:46.262Z" }, + { url = "https://files.pythonhosted.org/packages/d4/69/a929cf9d1e2e65a48b818cdce72cb6b69eab2e6877f21436d0a1942aff43/xxhash-3.7.0-cp312-cp312-win32.whl", hash = "sha256:74bbd92f8c7fcc397ba0a11bfdc106bc72ad7f11e3a60277753f87e7532b4d81", size = 30671, upload-time = "2026-04-25T11:06:48.039Z" }, + { url = "https://files.pythonhosted.org/packages/b9/1b/104b41a8947f4e1d4a66ce1e628eea752f37d1890bfd7453559ca7a3d950/xxhash-3.7.0-cp312-cp312-win_amd64.whl", hash = "sha256:7bd7bc82dd4f185f28f35193c2e968ef46131628e3cac62f639dadf321cba4d1", size = 31514, upload-time = "2026-04-25T11:06:49.279Z" }, + { url = "https://files.pythonhosted.org/packages/98/a0/1fd0ea1f1b886d9e7c73f0397571e22333a7d79e31da6d7127c2a4a71d75/xxhash-3.7.0-cp312-cp312-win_arm64.whl", hash = "sha256:7d7148180ec99ba36585b42c8c5de25e9b40191613bc4be68909b4d25a77a852", size = 27761, upload-time = "2026-04-25T11:06:50.448Z" }, + { url = "https://files.pythonhosted.org/packages/c1/ca/d5174b4c36d10f64d4ca7050563138c5a599efb01a765858ddefc9c1202a/xxhash-3.7.0-cp313-cp313-android_21_arm64_v8a.whl", hash = "sha256:4b6d6b33f141158692bd4eafbb96edbc5aa0dabdb593a962db01a91983d4f8fa", size = 36813, upload-time = "2026-04-25T11:06:51.73Z" }, + { url = "https://files.pythonhosted.org/packages/41/d0/abc6c9d347ba1f1e1e1d98125d0881a0452c7f9a76a9dd03a7b5d2197f23/xxhash-3.7.0-cp313-cp313-android_21_x86_64.whl", hash = "sha256:845d347df254d6c619f616afa921331bada8614b8d373d58725c663ba97c3605", size = 35121, upload-time = "2026-04-25T11:06:53.048Z" }, + { url = "https://files.pythonhosted.org/packages/bf/11/4cc834eb3d79f2f2b3a6ef7324195208bcdfbdcf7534d2b17267aa5f3a8f/xxhash-3.7.0-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:fddbbb69a6fff4f421e7a0d1fa28f894b20112e9e3fab306af451e2dfd0e459b", size = 29624, upload-time = "2026-04-25T11:06:54.311Z" }, + { url = "https://files.pythonhosted.org/packages/23/83/e97d3e7b635fe73a1dfb1e91f805324dd6d930bb42041cbf18f183bc0b6d/xxhash-3.7.0-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:54876a4e45101cec2bf8f31a973cda073a23e2e108538dad224ba07f85f22487", size = 30638, upload-time = "2026-04-25T11:06:55.864Z" }, + { url = "https://files.pythonhosted.org/packages/f4/40/d84951d80c35db1f4c40a29a64a8520eea5d56e764c603906b4fe763580f/xxhash-3.7.0-cp313-cp313-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:0c72fe9c7e3d6dfd7f1e21e224a877917fa09c465694ba4e06464b9511b65544", size = 33323, upload-time = "2026-04-25T11:06:57.336Z" }, + { url = "https://files.pythonhosted.org/packages/89/cc/c7dc6558d97e9ab023f663d69ab28b340ed9bf4d2d94f2c259cf896bb354/xxhash-3.7.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:a6d73a830b17ef49bc04e00182bd839164c1b3c59c127cd7c54fcb10c7ed8ee8", size = 33362, upload-time = "2026-04-25T11:06:58.656Z" }, + { url = "https://files.pythonhosted.org/packages/2a/6e/46b84017b1301d54091430353d4ad5901654a3e0871649877a416f7f1644/xxhash-3.7.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:91c3b07cf3362086d8f126c6aecd8e5e9396ad8b2f2219ea7e49a8250c318acd", size = 30874, upload-time = "2026-04-25T11:06:59.834Z" }, + { url = "https://files.pythonhosted.org/packages/df/5e/8f9158e3ab906ad3fec51e09b5ea0093e769f12207bfa42a368ca204e7ab/xxhash-3.7.0-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:50e879ebbac351c81565ca108db766d7832f5b8b6a5b14b8c0151f7190028e3d", size = 194185, upload-time = "2026-04-25T11:07:01.658Z" }, + { url = "https://files.pythonhosted.org/packages/f3/29/a804ded9f5d3d3758292678d23e7528b08fda7b7e750688d08b052322475/xxhash-3.7.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:921c14e93817842dd0dd9f372890a0f0c72e534650b6ab13c5be5cd0db11d47e", size = 213033, upload-time = "2026-04-25T11:07:03.606Z" }, + { url = "https://files.pythonhosted.org/packages/8b/91/1ce5a7d2fdc975267320e2c78fc1cecfe7ab735ccbcf6993ec5dd541cb2c/xxhash-3.7.0-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:e64a7c9d7dfca3e0fafcbc5e455519090706a3e36e95d655cec3e04e79f95aaa", size = 236140, upload-time = "2026-04-25T11:07:05.396Z" }, + { url = "https://files.pythonhosted.org/packages/34/04/fd595a4fd8617b05fa27bd9b684ecb4985bfed27917848eea85d54036d06/xxhash-3.7.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:2220af08163baf5fa36c2b8af079dc2cbe6e66ae061385267f9472362dfd53c6", size = 212291, upload-time = "2026-04-25T11:07:06.966Z" }, + { url = "https://files.pythonhosted.org/packages/03/fb/f1a379cbc372ae5b9f4ab36154c48a849ca6ebe3ac477067a57865bf3bc6/xxhash-3.7.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:f14bb8b22a4a91325813e3d553b8963c10cf8c756cff65ee50c194431296c655", size = 445532, upload-time = "2026-04-25T11:07:08.525Z" }, + { url = "https://files.pythonhosted.org/packages/65/59/172424b79f8cfd4b6d8a122b2193e6b8ad4b11f7159bb3b6f9b3191329bb/xxhash-3.7.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:496736f86a9bedaf64b0dc70e3539d0766df01c71ea22032698e88f3f04a1ce9", size = 193990, upload-time = "2026-04-25T11:07:10.315Z" }, + { url = "https://files.pythonhosted.org/packages/b9/19/aeac22161d953f139f07ba5586cb4a17c5b7b6dff985122803bb12933500/xxhash-3.7.0-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:0ff71596bd79816975b3de7130ab1ff4541410285a3c084584eeb1c8239996fd", size = 284876, upload-time = "2026-04-25T11:07:12.15Z" }, + { url = "https://files.pythonhosted.org/packages/77/d5/4fd0b59e7a02242953da05ff679fbb961b0a4368eac97a217e11dae110c1/xxhash-3.7.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:1ad86695c19b1d46fe106925db3c7a37f16be37669dcf58dcc70a9dd6e324676", size = 210495, upload-time = "2026-04-25T11:07:13.952Z" }, + { url = "https://files.pythonhosted.org/packages/aa/fb/976a3165c728c7faf74aa1b5ab3cf6a85e6d731612894741840524c7d28c/xxhash-3.7.0-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:970f9f8c50961d639cbd0d988c96f80ddf66006de93641719282c4fe7a87c5e6", size = 241331, upload-time = "2026-04-25T11:07:15.557Z" }, + { url = "https://files.pythonhosted.org/packages/4a/2c/6763d5901d53ac9e6ba296e5717ae599025c9d268396e8faa8b4b0a8e0ac/xxhash-3.7.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:5886ad85e9e347911783760a1d16cb6b393e8f9e3b52c982568226cb56927bdc", size = 198037, upload-time = "2026-04-25T11:07:17.563Z" }, + { url = "https://files.pythonhosted.org/packages/61/2b/876e722d533833f5f9a83473e6ba993e48745701096944e77bbecf29b2c3/xxhash-3.7.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:6e934bbae1e0ec74e27d5f0d7f37ef547ce5ff9f0a7e63fb39e559fc99526734", size = 210744, upload-time = "2026-04-25T11:07:19.055Z" }, + { url = "https://files.pythonhosted.org/packages/21/e6/d7e7baef7ce24166b4668d3c48557bb35a23b92ecadcac7e7718d099ab69/xxhash-3.7.0-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:3b6b3d28228af044ebcded71c4a3dd86e1dbd7e2f4645bf40f7b5da65bb5fb5a", size = 275406, upload-time = "2026-04-25T11:07:20.908Z" }, + { url = "https://files.pythonhosted.org/packages/92/fe/198b3763b2e01ca908f2154969a2352ec99bda892b574a11a9a151c5ede4/xxhash-3.7.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:6be4d70d9ab76c9f324ead9c01af6ff52c324745ea0c3731682a0cf99720f1fe", size = 414125, upload-time = "2026-04-25T11:07:23.037Z" }, + { url = "https://files.pythonhosted.org/packages/3a/6d/019a11affd5a5499137cacca53808659964785439855b5aa40dfd3412916/xxhash-3.7.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:151d7520838d4465461a0b7f4ae488b3b00de16183dd3214c1a6b14bf89d7fb6", size = 191555, upload-time = "2026-04-25T11:07:24.991Z" }, + { url = "https://files.pythonhosted.org/packages/76/21/b96d58568df2d01533244c3e0e5cbdd0c8b2b25c4bec4d72f19259a292d7/xxhash-3.7.0-cp313-cp313-win32.whl", hash = "sha256:d798c1e291bffb8e37b5bbe0dda77fc767cd19e89cadaf66e6ed5d0ff88c9fe6", size = 30668, upload-time = "2026-04-25T11:07:26.665Z" }, + { url = "https://files.pythonhosted.org/packages/99/57/d849a8d3afa1f8f4bc6a831cd89f49f9706fbbad94d2975d6140a171988c/xxhash-3.7.0-cp313-cp313-win_amd64.whl", hash = "sha256:875811ba23c543b1a1c3143c926e43996eb27ebb8f52d3500744aa608c275aed", size = 31524, upload-time = "2026-04-25T11:07:27.92Z" }, + { url = "https://files.pythonhosted.org/packages/81/52/bacc753e92dee78b058af8dcef0a50815f5f860986c664a92d75f965b6a5/xxhash-3.7.0-cp313-cp313-win_arm64.whl", hash = "sha256:54a675cb300dda83d71daae2a599389d22db8021a0f8db0dd659e14626eb3ecc", size = 27768, upload-time = "2026-04-25T11:07:29.113Z" }, + { url = "https://files.pythonhosted.org/packages/1c/47/ddbd683b7fc7e592c1a8d9d65f73ce9ab513f082b3967eee2baf549b8fc6/xxhash-3.7.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:a3b19a42111c4057c1547a4a1396a53961dca576a0f6b82bfa88a2d1561764b2", size = 33576, upload-time = "2026-04-25T11:07:30.469Z" }, + { url = "https://files.pythonhosted.org/packages/07/f2/36d3310161db7f72efb4562aadde0ed429f1d0531782dd6345b12d2da527/xxhash-3.7.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:8f4608a06e4d61b7a3425665a46d00e0579122e1a2fae97a0c52953a3aad9aa3", size = 31123, upload-time = "2026-04-25T11:07:31.989Z" }, + { url = "https://files.pythonhosted.org/packages/0d/3f/75937a5c69556ed213021e43cbedd84c8e0279d0d74e7d41a255d84ba4b1/xxhash-3.7.0-cp313-cp313t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:ad37c7792479e49cf96c1ab25517d7003fe0d93687a772ba19a097d235bbe41e", size = 196491, upload-time = "2026-04-25T11:07:33.358Z" }, + { url = "https://files.pythonhosted.org/packages/22/29/f10d7ff8c7a733d4403a43b9de18c8fabc005f98cec054644f04418659ee/xxhash-3.7.0-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:dc026e3b89d98e30a8288c95cb696e77d150b3f0fb7a51f73dcd49ee6b5577fa", size = 215793, upload-time = "2026-04-25T11:07:34.919Z" }, + { url = "https://files.pythonhosted.org/packages/8b/fd/778f60aa295f58907938f030a8b514611f391405614a525cccd2ffc00eb5/xxhash-3.7.0-cp313-cp313t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:c9b31ab1f28b078a6a1ac1a54eb35e7d5390deddd56870d0be3a0a733d1c321c", size = 237993, upload-time = "2026-04-25T11:07:36.638Z" }, + { url = "https://files.pythonhosted.org/packages/70/f5/736db5de387b4a540e37a05b84b40dc58a1ce974bfd2b4e5754ce29b68c3/xxhash-3.7.0-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:3bb5fd680c038fd5229e44e9c493782f90df9bef632fd0499d442374688ff70b", size = 214887, upload-time = "2026-04-25T11:07:38.564Z" }, + { url = "https://files.pythonhosted.org/packages/4d/aa/09a095f22fdb9a27fbb716841fbff52119721f9ca4261952d07a912f7839/xxhash-3.7.0-cp313-cp313t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:030c0fd688fce3569fbb49a2feefd4110cbb0b650186fb4610759ecfac677548", size = 448407, upload-time = "2026-04-25T11:07:40.552Z" }, + { url = "https://files.pythonhosted.org/packages/74/8a/b745efeeca9e34a91c26fdc97ad8514c43d5a81ac78565cba80a1353870a/xxhash-3.7.0-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5b1bde10324f4c31812ae0d0502e92d916ae8917cad7209353f122b8b8f610c3", size = 196119, upload-time = "2026-04-25T11:07:42.101Z" }, + { url = "https://files.pythonhosted.org/packages/8a/5c/0cfceb024af90c191f665c7933b1f318ee234f4797858383bebd1881d52f/xxhash-3.7.0-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:503722d52a615f2604f5e7611de7d43878df010dc0053094ef91cb9a9ac3d987", size = 286751, upload-time = "2026-04-25T11:07:43.568Z" }, + { url = "https://files.pythonhosted.org/packages/0b/0a/0793e405dc3cf8f4ebe2c1acec1e4e4608cd9e7e50ea691dabbc2a95ccbb/xxhash-3.7.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:c72500a3b6d6c30ebfc135035bcace9eb5884f2dc220804efcaaba43e9f611dd", size = 212961, upload-time = "2026-04-25T11:07:45.388Z" }, + { url = "https://files.pythonhosted.org/packages/0c/7e/721118ffc63bfff94aa565bcf2555a820f9f4bdb0f001e0d609bdfad70de/xxhash-3.7.0-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:43475925a766d01ca8cd9a857fd87f3d50406983c8506a4c07c4df12adcc867f", size = 243703, upload-time = "2026-04-25T11:07:47.053Z" }, + { url = "https://files.pythonhosted.org/packages/6e/18/16f6267160488b8276fd3d449d425712512add292ba545c1b6946bfdb7dd/xxhash-3.7.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:8d09dfd2ab135b985daf868b594315ebe11ad86cd9fea46e6c69f19b28f7d25a", size = 200894, upload-time = "2026-04-25T11:07:48.657Z" }, + { url = "https://files.pythonhosted.org/packages/2d/94/80ba841287fd97e3e9cac1d228788c8ef623746f570404961eec748ecb5c/xxhash-3.7.0-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:c50269d0055ac1faecfd559886d2cbe4b730de236585aba0e873f9d9dadbe585", size = 213357, upload-time = "2026-04-25T11:07:50.257Z" }, + { url = "https://files.pythonhosted.org/packages/a1/7e/106d4067130c59f1e18a55ffadcd876d8c68534883a1e02685b29d3d8153/xxhash-3.7.0-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:1910df4756a5ab58cfad8744fc2d0f23926e3efcc346ee76e87b974abab922f4", size = 277600, upload-time = "2026-04-25T11:07:51.745Z" }, + { url = "https://files.pythonhosted.org/packages/c5/86/a081dd30da71d720b2612a792bfd55e45fa9a07ac76a0507f60487473c25/xxhash-3.7.0-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:d006faf3b491957efcb433489be3c149efe4787b7063d5cddb8ddaefdc60e0c1", size = 416980, upload-time = "2026-04-25T11:07:53.504Z" }, + { url = "https://files.pythonhosted.org/packages/35/29/1a95221a029a3c1293773869e1ab47b07cbbdd82444a42809e8c60156626/xxhash-3.7.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:abb65b4e947e958f7b3b0d71db3ce447d1bc5f37f5eab871ce7223bda8768a04", size = 193840, upload-time = "2026-04-25T11:07:55.103Z" }, + { url = "https://files.pythonhosted.org/packages/c5/e0/db909dd0823285de2286f67e10ee4d81e96ad35d7d8e964ecb07fccd8af9/xxhash-3.7.0-cp313-cp313t-win32.whl", hash = "sha256:178959906cb1716a1ce08e0d69c82886c70a15a6f2790fc084fdd146ca30cd49", size = 30966, upload-time = "2026-04-25T11:07:56.524Z" }, + { url = "https://files.pythonhosted.org/packages/7b/ff/d705b15b22f21ee106adce239cb65d35067a158c630b240270f09b17c2e6/xxhash-3.7.0-cp313-cp313t-win_amd64.whl", hash = "sha256:2524a1e20d4c231d13b50f7cf39e44265b055669a64a7a4b9a2a44faa03f19b6", size = 31784, upload-time = "2026-04-25T11:07:57.758Z" }, + { url = "https://files.pythonhosted.org/packages/a2/1f/b2cf83c3638fd0588e0b17f22e5a9400bdfb1a3e3755324ac0aee2250b88/xxhash-3.7.0-cp313-cp313t-win_arm64.whl", hash = "sha256:37d994d0ffe81ef087bb330d392caa809bb5853c77e22ea3f71db024a0543dba", size = 27932, upload-time = "2026-04-25T11:07:59.109Z" }, + { url = "https://files.pythonhosted.org/packages/54/c1/e57ac7317b1f58a92bab692da6d497e2a7ce44735b224e296347a7ecc754/xxhash-3.7.0-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:ad3aa71e12ee634f22b39a0ff439357583706e50765f17f05550f92dbf128a23", size = 31232, upload-time = "2026-04-25T11:10:21.51Z" }, + { url = "https://files.pythonhosted.org/packages/4f/4e/075559bd712bc62e84915ea46bbee859f935d285659082c129bdbff679dd/xxhash-3.7.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:5de686e73690cdaf72b96d4fa083c230ec9020bcc2627ce6316138e2cf2fe2d1", size = 28553, upload-time = "2026-04-25T11:10:23.1Z" }, + { url = "https://files.pythonhosted.org/packages/92/ca/a9c78cb384d4b033b0c58196bd5c8509873cabe76389e195127b0302a741/xxhash-3.7.0-pp311-pypy311_pp73-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:7fbec49f5341bbdea0c471f7d1e2fb41ae8925af9b6f28025c28defd8eb94274", size = 41109, upload-time = "2026-04-25T11:10:25.022Z" }, + { url = "https://files.pythonhosted.org/packages/bd/b1/dfe2629f7c77eb2fa234c72ff537cdd64939763df704e256446ed364a16d/xxhash-3.7.0-pp311-pypy311_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:48b542c347c2089f43dc5a6db31d2a6f3cdb04ee33505ec6e9f653834dbb0bde", size = 36307, upload-time = "2026-04-25T11:10:26.949Z" }, + { url = "https://files.pythonhosted.org/packages/e7/f7/5a484afce0f48dd8083208b42e4911f290a82c7b52458ef2927e4d421a45/xxhash-3.7.0-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a169a036bed0995e090d1493b283cc2cc8a6f5046821086b843abefff80643bc", size = 32534, upload-time = "2026-04-25T11:10:29.01Z" }, + { url = "https://files.pythonhosted.org/packages/0f/5f/4acfcd490db9780cf36c58534d828003c564cde5350220a1c783c4d10776/xxhash-3.7.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:ec101643395d7f21405b640f728f6f627e6986557027d740f2f9b220955edafe", size = 31552, upload-time = "2026-04-25T11:10:30.727Z" }, +] + [[package]] name = "yarl" version = "1.23.0" @@ -6814,24 +8895,6 @@ dependencies = [ ] sdist = { url = "https://files.pythonhosted.org/packages/23/6e/beb1beec874a72f23815c1434518bfc4ed2175065173fb138c3705f658d4/yarl-1.23.0.tar.gz", hash = "sha256:53b1ea6ca88ebd4420379c330aea57e258408dd0df9af0992e5de2078dc9f5d5", size = 194676, upload-time = "2026-03-01T22:07:53.373Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/8b/0d/9cc638702f6fc3c7a3685bcc8cf2a9ed7d6206e932a49f5242658047ef51/yarl-1.23.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:cff6d44cb13d39db2663a22b22305d10855efa0fa8015ddeacc40bc59b9d8107", size = 123764, upload-time = "2026-03-01T22:04:09.7Z" }, - { url = "https://files.pythonhosted.org/packages/7a/35/5a553687c5793df5429cd1db45909d4f3af7eee90014888c208d086a44f0/yarl-1.23.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e4c53f8347cd4200f0d70a48ad059cabaf24f5adc6ba08622a23423bc7efa10d", size = 86282, upload-time = "2026-03-01T22:04:11.892Z" }, - { url = "https://files.pythonhosted.org/packages/68/2e/c5a2234238f8ce37a8312b52801ee74117f576b1539eec8404a480434acc/yarl-1.23.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2a6940a074fb3c48356ed0158a3ca5699c955ee4185b4d7d619be3c327143e05", size = 86053, upload-time = "2026-03-01T22:04:13.292Z" }, - { url = "https://files.pythonhosted.org/packages/74/3f/bbd8ff36fb038622797ffbaf7db314918bb4d76f1cc8a4f9ca7a55fe5195/yarl-1.23.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ed5f69ce7be7902e5c70ea19eb72d20abf7d725ab5d49777d696e32d4fc1811d", size = 99395, upload-time = "2026-03-01T22:04:15.133Z" }, - { url = "https://files.pythonhosted.org/packages/77/04/9516bc4e269d2a3ec9c6779fcdeac51ce5b3a9b0156f06ac7152e5bba864/yarl-1.23.0-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:389871e65468400d6283c0308e791a640b5ab5c83bcee02a2f51295f95e09748", size = 92143, upload-time = "2026-03-01T22:04:16.829Z" }, - { url = "https://files.pythonhosted.org/packages/c7/63/88802d1f6b1cb1fc67d67a58cd0cf8a1790de4ce7946e434240f1d60ab4a/yarl-1.23.0-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:dda608c88cf709b1d406bdfcd84d8d63cff7c9e577a403c6108ce8ce9dcc8764", size = 107643, upload-time = "2026-03-01T22:04:18.519Z" }, - { url = "https://files.pythonhosted.org/packages/8e/db/4f9b838f4d8bdd6f0f385aed8bbf21c71ed11a0b9983305c302cbd557815/yarl-1.23.0-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:8c4fe09e0780c6c3bf2b7d4af02ee2394439d11a523bbcf095cf4747c2932007", size = 108700, upload-time = "2026-03-01T22:04:20.373Z" }, - { url = "https://files.pythonhosted.org/packages/50/12/95a1d33f04a79c402664070d43b8b9f72dc18914e135b345b611b0b1f8cc/yarl-1.23.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:31c9921eb8bd12633b41ad27686bbb0b1a2a9b8452bfdf221e34f311e9942ed4", size = 102769, upload-time = "2026-03-01T22:04:23.055Z" }, - { url = "https://files.pythonhosted.org/packages/86/65/91a0285f51321369fd1a8308aa19207520c5f0587772cfc2e03fc2467e90/yarl-1.23.0-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:5f10fd85e4b75967468af655228fbfd212bdf66db1c0d135065ce288982eda26", size = 101114, upload-time = "2026-03-01T22:04:25.031Z" }, - { url = "https://files.pythonhosted.org/packages/58/80/c7c8244fc3e5bc483dc71a09560f43b619fab29301a0f0a8f936e42865c7/yarl-1.23.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:dbf507e9ef5688bada447a24d68b4b58dd389ba93b7afc065a2ba892bea54769", size = 98883, upload-time = "2026-03-01T22:04:27.281Z" }, - { url = "https://files.pythonhosted.org/packages/86/e7/71ca9cc9ca79c0b7d491216177d1aed559d632947b8ffb0ee60f7d8b23e3/yarl-1.23.0-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:85e9beda1f591bc73e77ea1c51965c68e98dafd0fec72cdd745f77d727466716", size = 94172, upload-time = "2026-03-01T22:04:28.554Z" }, - { url = "https://files.pythonhosted.org/packages/6a/3f/6c6c8a0fe29c26fb2db2e8d32195bb84ec1bfb8f1d32e7f73b787fcf349b/yarl-1.23.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:0e1fdaa14ef51366d7757b45bde294e95f6c8c049194e793eedb8387c86d5993", size = 107010, upload-time = "2026-03-01T22:04:30.385Z" }, - { url = "https://files.pythonhosted.org/packages/56/38/12730c05e5ad40a76374d440ed8b0899729a96c250516d91c620a6e38fc2/yarl-1.23.0-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:75e3026ab649bf48f9a10c0134512638725b521340293f202a69b567518d94e0", size = 100285, upload-time = "2026-03-01T22:04:31.752Z" }, - { url = "https://files.pythonhosted.org/packages/34/92/6a7be9239f2347234e027284e7a5f74b1140cc86575e7b469d13fba1ebfe/yarl-1.23.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:80e6d33a3d42a7549b409f199857b4fb54e2103fc44fb87605b6663b7a7ff750", size = 108230, upload-time = "2026-03-01T22:04:33.844Z" }, - { url = "https://files.pythonhosted.org/packages/5e/81/4aebccfa9376bd98b9d8bfad20621a57d3e8cfc5b8631c1fa5f62cdd03f4/yarl-1.23.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:5ec2f42d41ccbd5df0270d7df31618a8ee267bfa50997f5d720ddba86c4a83a6", size = 103008, upload-time = "2026-03-01T22:04:35.856Z" }, - { url = "https://files.pythonhosted.org/packages/38/0f/0b4e3edcec794a86b853b0c6396c0a888d72dfce19b2d88c02ac289fb6c1/yarl-1.23.0-cp310-cp310-win32.whl", hash = "sha256:debe9c4f41c32990771be5c22b56f810659f9ddf3d63f67abfdcaa2c6c9c5c1d", size = 83073, upload-time = "2026-03-01T22:04:38.268Z" }, - { url = "https://files.pythonhosted.org/packages/a0/71/ad95c33da18897e4c636528bbc24a1dd23fe16797de8bc4ec667b8db0ba4/yarl-1.23.0-cp310-cp310-win_amd64.whl", hash = "sha256:ab5f043cb8a2d71c981c09c510da013bc79fd661f5c60139f00dd3c3cc4f2ffb", size = 87328, upload-time = "2026-03-01T22:04:39.558Z" }, - { url = "https://files.pythonhosted.org/packages/e2/14/dfa369523c79bccf9c9c746b0a63eb31f65db9418ac01275f7950962e504/yarl-1.23.0-cp310-cp310-win_arm64.whl", hash = "sha256:263cd4f47159c09b8b685890af949195b51d1aa82ba451c5847ca9bc6413c220", size = 82463, upload-time = "2026-03-01T22:04:41.454Z" }, { url = "https://files.pythonhosted.org/packages/a2/aa/60da938b8f0997ba3a911263c40d82b6f645a67902a490b46f3355e10fae/yarl-1.23.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:b35d13d549077713e4414f927cdc388d62e543987c572baee613bf82f11a4b99", size = 123641, upload-time = "2026-03-01T22:04:42.841Z" }, { url = "https://files.pythonhosted.org/packages/24/84/e237607faf4e099dbb8a4f511cfd5efcb5f75918baad200ff7380635631b/yarl-1.23.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cbb0fef01f0c6b38cb0f39b1f78fc90b807e0e3c86a7ff3ce74ad77ce5c7880c", size = 86248, upload-time = "2026-03-01T22:04:44.757Z" }, { url = "https://files.pythonhosted.org/packages/b2/0d/71ceabc14c146ba8ee3804ca7b3d42b1664c8440439de5214d366fec7d3a/yarl-1.23.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:dc52310451fc7c629e13c4e061cbe2dd01684d91f2f8ee2821b083c58bd72432", size = 85988, upload-time = "2026-03-01T22:04:46.365Z" }, @@ -6920,12 +8983,3 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/26/91/33de49538444d4aafbe47415c450c2f9abab1733e1226f276b496672f46c/z3_solver-4.15.4.0-py3-none-win32.whl", hash = "sha256:be3bc916545c96ffbf89e00d07104ff14f78336e55db069177a1bfbcc01b269d", size = 13191672, upload-time = "2025-10-29T18:11:58.424Z" }, { url = "https://files.pythonhosted.org/packages/03/d6/a0b135e4419df475177ae78fc93c422430b0fd8875649486f9a5989772e6/z3_solver-4.15.4.0-py3-none-win_amd64.whl", hash = "sha256:00e35b02632ed085ea8199fb230f6015e6fc40554a6680c097bd5f060e827431", size = 16259597, upload-time = "2025-10-29T18:12:01.14Z" }, ] - -[[package]] -name = "zipp" -version = "4.1.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/b9/d8/eab98a517c14134c0b2eb4e2387bc5f457334293ec5d2dd3857ec2966802/zipp-4.1.0.tar.gz", hash = "sha256:4cb57381f544315db7688e976e922a2b18cdb513d21cc194eb42232ba2a3e602", size = 26214, upload-time = "2026-05-18T20:08:57.967Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/3a/13/547360d81e6d88d58492968ffda9f9542854f11310ee556fef14260cc886/zipp-4.1.0-py3-none-any.whl", hash = "sha256:25ad4e16390cd314347dd8f1de67a2ac538ae658ed4ab9db16029c07c188e97f", size = 10238, upload-time = "2026-05-18T20:08:57.045Z" }, -] From 73f9894e3dfc3858e1bb98b85836ec04850b2ef2 Mon Sep 17 00:00:00 2001 From: aviv ron Date: Tue, 14 Jul 2026 07:27:48 +0300 Subject: [PATCH 12/23] allow kw args to be passed to audio transcriber. allow per request overrides in config Signed-off-by: aviv ron --- docs/AUDIO.md | 60 ++++- .../composer/compose_granite_switch.py | 34 ++- src/granite_switch/config.py | 18 ++ src/granite_switch/vllm/audio/asr.py | 107 +++++++-- src/granite_switch/vllm/audio/processor.py | 32 ++- tests/unit/test_asr.py | 118 ++++++++++ tests/unit/test_config.py | 33 +++ tests/vllm/test_audio_processor.py | 213 ++++++++++++++++++ 8 files changed, 590 insertions(+), 25 deletions(-) create mode 100644 tests/vllm/test_audio_processor.py diff --git a/docs/AUDIO.md b/docs/AUDIO.md index 2019482..e92aefa 100644 --- a/docs/AUDIO.md +++ b/docs/AUDIO.md @@ -37,6 +37,55 @@ settings into `config.json` so the checkpoint is self-describing: Audio capability is **gated per checkpoint** by `asr_enabled`: a checkpoint built without `--enable-audio` reports no audio modality and never loads the ASR model. +### Tuning the ASR model + +Two optional config fields let a checkpoint carry ASR tuning so no code change is +needed to swap or steer any HF `automatic-speech-recognition` model: + +- `asr_pipeline_kwargs` — extra kwargs merged into the `transformers.pipeline(...)` + **construction** (e.g. `chunk_length_s`, `batch_size`). These change how the + pipeline is built, so they are folded into the transcriber cache key. +- `asr_generate_kwargs` — **decode-time** defaults applied on every transcription + (e.g. `language`, `task` for a multilingual Whisper). Applied at call time, so + one loaded pipeline is reused. Ignored by non-generative backends (e.g. CTC). + +Set them at compose time (JSON), which writes them into `config.json`: + +```bash +python -m granite_switch.composer.compose_granite_switch \ + --adapters ... \ + --asr-model openai/whisper-large-v3 \ + --asr-pipeline-kwargs '{"chunk_length_s": 15}' \ + --asr-generate-kwargs '{"language": "de", "task": "transcribe"}' +``` + +Because they live in `config.json`, an existing audio checkpoint can be retuned by +editing that file directly — no re-compose and no patched package: + +```json +{ "asr_enabled": true, "asr_model_id": "openai/whisper-large-v3", + "asr_pipeline_kwargs": {"chunk_length_s": 15}, + "asr_generate_kwargs": {"language": "de", "task": "transcribe"} } +``` + +### Per-request language (multilingual) + +For one deployment that serves many languages, a request can override the config +default via `mm_processor_kwargs`. Only `language` and `task` are honored from a +request (an allowlist — clients cannot inject arbitrary generation options); the +config default supplies everything else, and request values win: + +```python +out = llm.generate({ + "prompt": "Transcript of the audio: <|audio|>\nAnswer:", + "multi_modal_data": {"audio": [(audio, sr)]}, + "mm_processor_kwargs": {"language": "fr"}, # this request, French +}, SamplingParams(max_tokens=128)) +``` + +The same cached pipeline serves every language — the decode kwargs are applied per +call, so there is no per-language reload. + ## Calling it ### Python (offline) @@ -104,7 +153,11 @@ tokens. - **Cascade, not end-to-end.** Prosody/emotion/uncertainty are lost; ASR errors propagate to the LLM. Two models run sequentially (ASR then LLM). - **English by default** (`distil-whisper/distil-small.en`). Use `--asr-model` - for multilingual. + with a multilingual model and set the language via `asr_generate_kwargs` (or + per request via `mm_processor_kwargs`; see *Tuning the ASR model* above). +- **HF `pipeline` backends only.** Any `automatic-speech-recognition` pipeline + model works via config alone; a non-pipeline backend (cloud STT, faster-whisper, + a custom encoder) still needs a code-level plug point — tracked as future work. - One audio clip per request. ## Audio + adapters @@ -119,6 +172,9 @@ adapter behaves identically to the text equivalent. ## Tests - `tests/unit/test_asr.py` — CPU unit tests for the ASR backend (audio coercion, - resampling, transcription with a mocked pipeline). No GPU/vLLM required. + resampling, transcription with a mocked pipeline, pipeline-kwargs cache keying, + and per-request decode-kwargs resolution). No GPU/vLLM required. +- `tests/unit/test_config.py` — round-trips `asr_pipeline_kwargs` / + `asr_generate_kwargs` through save/load. - End-to-end (GPU): compose an `--enable-audio` checkpoint, then an audio request through vLLM produces an answer and text-only requests are unaffected. diff --git a/src/granite_switch/composer/compose_granite_switch.py b/src/granite_switch/composer/compose_granite_switch.py index 5806062..d6aeb4e 100755 --- a/src/granite_switch/composer/compose_granite_switch.py +++ b/src/granite_switch/composer/compose_granite_switch.py @@ -593,6 +593,23 @@ def _compose_argparser(): help="Device the ASR model runs on (default: cpu). Use e.g. cuda:0 to " "run transcription on GPU (watch vLLM's KV-cache memory budget).", ) + parser.add_argument( + "--asr-pipeline-kwargs", + type=json.loads, + default=None, + help="JSON object of extra kwargs merged into the transformers ASR " + "pipeline() construction, e.g. '{\"chunk_length_s\": 15}'. Baked " + "into the checkpoint config. Implies --enable-audio.", + ) + parser.add_argument( + "--asr-generate-kwargs", + type=json.loads, + default=None, + help="JSON object of default decode kwargs applied on every " + "transcription, e.g. '{\"language\": \"de\", \"task\": " + "\"transcribe\"}' for multilingual Whisper. Per-request " + "mm_processor_kwargs override these. Implies --enable-audio.", + ) return parser @@ -798,7 +815,12 @@ def build(): # Audio cascade: add the <|audio|> marker token before the embedding resize. # Enabled by --enable-audio or by naming an --asr-model. - audio_enabled = args.enable_audio or args.asr_model is not None + audio_enabled = ( + args.enable_audio + or args.asr_model is not None + or args.asr_pipeline_kwargs is not None + or args.asr_generate_kwargs is not None + ) audio_token_id = add_audio_token(tokenizer) if audio_enabled else None # Configure chat template with adapter mappings (Granite models only). @@ -872,10 +894,18 @@ def build(): model.config.asr_enabled = True model.config.asr_model_id = args.asr_model model.config.asr_device = args.asr_device + # Optional pipeline-construction extras and default decode kwargs. Only + # set when provided so the config stays minimal for the common case. + if args.asr_pipeline_kwargs is not None: + model.config.asr_pipeline_kwargs = args.asr_pipeline_kwargs + if args.asr_generate_kwargs is not None: + model.config.asr_generate_kwargs = args.asr_generate_kwargs print( f" Audio cascade enabled " f"(asr_model_id={args.asr_model or 'default'}, " - f"asr_device={args.asr_device}, audio_token_id={audio_token_id})" + f"asr_device={args.asr_device}, audio_token_id={audio_token_id}, " + f"pipeline_kwargs={args.asr_pipeline_kwargs or {}}, " + f"generate_kwargs={args.asr_generate_kwargs or {}})" ) # Base model size (best effort) diff --git a/src/granite_switch/config.py b/src/granite_switch/config.py index ae5acf4..3b80b4c 100644 --- a/src/granite_switch/config.py +++ b/src/granite_switch/config.py @@ -52,6 +52,18 @@ class GraniteSwitchConfig(GraniteMoeHybridConfig): asr_device (str): Device the ASR model runs on. Default "cpu" keeps vLLM's GPU KV-cache budget clean; set to a CUDA device to trade GPU memory for transcription latency. + asr_pipeline_kwargs (Optional[dict]): Extra keyword arguments merged + into the ``transformers.pipeline(...)`` construction call for the + ASR model (e.g. ``{"chunk_length_s": 15}``). These affect how the + pipeline is built, so they are baked into the transcriber cache + key. None means "no extras". Default: None. + asr_generate_kwargs (Optional[dict]): Default decode-time keyword + arguments passed to the ASR model on every transcription (e.g. + ``{"language": "de", "task": "transcribe"}`` for a multilingual + Whisper). Applied at call time, so a single loaded pipeline can be + reused; per-request values (via ``mm_processor_kwargs``) override + these. Ignored by models that do not generate (e.g. CTC). Default: + None. **kwargs: Additional arguments passed to GraniteConfig. """ @@ -74,6 +86,8 @@ def __init__( asr_enabled: bool = False, asr_model_id: Optional[str] = None, asr_device: str = "cpu", + asr_pipeline_kwargs: Optional[dict] = None, + asr_generate_kwargs: Optional[dict] = None, # vLLM residual-norm convention (for bit-exact skinning equivalence) fused_add_norm: bool = False, # Parent class defaults (Granite 4 dense configuration) @@ -162,6 +176,10 @@ def __init__( self.asr_enabled = asr_enabled self.asr_model_id = asr_model_id self.asr_device = asr_device + # Pipeline-construction extras (affect the built pipeline → cache key) + # and default decode kwargs (applied per call, per-request overridable). + self.asr_pipeline_kwargs = asr_pipeline_kwargs + self.asr_generate_kwargs = asr_generate_kwargs # Adapter names self.adapter_names = adapter_names diff --git a/src/granite_switch/vllm/audio/asr.py b/src/granite_switch/vllm/audio/asr.py index c9abc02..dc5a287 100644 --- a/src/granite_switch/vllm/audio/asr.py +++ b/src/granite_switch/vllm/audio/asr.py @@ -23,7 +23,7 @@ from __future__ import annotations import threading -from typing import Dict, Optional, Tuple, Union +from typing import Any, Dict, Mapping, Optional, Tuple, Union import numpy as np @@ -54,9 +54,14 @@ def __init__( self, model_id: str = DEFAULT_ASR_MODEL_ID, device: str = "cpu", + pipeline_kwargs: Optional[Mapping[str, Any]] = None, ) -> None: self.model_id = model_id self.device = device + # Extra kwargs merged into the pipeline() construction. Because they + # change the built pipeline, get_transcriber folds them into the cache + # key so distinct construction options get distinct cached instances. + self.pipeline_kwargs: Dict[str, Any] = dict(pipeline_kwargs or {}) self._pipeline = None self._load_lock = threading.Lock() @@ -77,20 +82,26 @@ def load(self) -> None: if isinstance(self.device, str) and self.device.startswith("cuda") else torch.float32 ) - self._pipeline = pipeline( - task="automatic-speech-recognition", - model=self.model_id, - device=self.device, - torch_dtype=torch_dtype, + # Built-in defaults, then let checkpoint-supplied pipeline_kwargs + # override any of them (e.g. a different chunk_length_s, or model + # kwargs a non-Whisper backend needs). + kwargs: Dict[str, Any] = { + "task": "automatic-speech-recognition", + "model": self.model_id, + "device": self.device, + "torch_dtype": torch_dtype, # Enable internal 30s chunking so audio longer than the model's # native window is handled without us re-implementing it. - chunk_length_s=30, - ) + "chunk_length_s": 30, + } + kwargs.update(self.pipeline_kwargs) + self._pipeline = pipeline(**kwargs) def transcribe( self, audio: AudioInput, sampling_rate: Optional[int] = None, + generate_kwargs: Optional[Mapping[str, Any]] = None, ) -> str: """Transcribe one audio clip to a text string. @@ -101,6 +112,10 @@ def transcribe( sampling_rate: Sample rate of ``audio`` in Hz. Required unless ``audio`` is an ``(array, sampling_rate)`` tuple. Audio is resampled to 16 kHz when needed. + generate_kwargs: Decode-time kwargs forwarded to the ASR model for + this call (e.g. ``{"language": "fr"}``). Applied per call so the + same loaded pipeline serves many languages. Passed only when + non-empty, so CTC/non-generative backends are unaffected. Returns: The transcript with surrounding whitespace stripped. @@ -112,8 +127,12 @@ def transcribe( self.load() # Pass the already-resampled mono waveform; tell the pipeline its rate so # it does not attempt its own resampling. + call_kwargs: Dict[str, Any] = {} + if generate_kwargs: + call_kwargs["generate_kwargs"] = dict(generate_kwargs) result = self._pipeline( - {"raw": samples, "sampling_rate": _TARGET_SAMPLE_RATE} + {"raw": samples, "sampling_rate": _TARGET_SAMPLE_RATE}, + **call_kwargs, ) text = result["text"] if isinstance(result, dict) else str(result) return text.strip() @@ -121,26 +140,78 @@ def transcribe( # ── Module-level cache + convenience function ──────────────────────────────── -_TRANSCRIBERS: Dict[Tuple[str, str], ASRTranscriber] = {} +# Keyed on (model_id, device, frozen pipeline_kwargs). pipeline_kwargs are in +# the key because they change the constructed pipeline; generate_kwargs are NOT +# — they are applied per transcribe() call, so one cached pipeline serves them +# all (that is what makes per-request language selection cheap). +_TRANSCRIBERS: Dict[Tuple, ASRTranscriber] = {} _CACHE_LOCK = threading.Lock() +# Decode kwargs a client may set per request. Kept to language/task so a client +# cannot inject arbitrary (potentially expensive or unsafe) generation options; +# everything else is fixed by the checkpoint author in config.asr_generate_kwargs. +DEFAULT_ALLOWED_REQUEST_GENERATE_KEYS = frozenset({"language", "task"}) + + +def resolve_generate_kwargs( + config_defaults: Optional[Mapping[str, Any]], + request: Optional[Mapping[str, Any]] = None, + allowed_keys: "frozenset[str]" = DEFAULT_ALLOWED_REQUEST_GENERATE_KEYS, +) -> Dict[str, Any]: + """Merge config-default decode kwargs with allowlisted per-request overrides. + + ``config_defaults`` come from ``config.asr_generate_kwargs``. ``request`` is + the per-request mapping (vLLM's ``mm_processor_kwargs``); a top-level + ``language`` or a nested ``asr_generate_kwargs`` object may override the + defaults, but only keys in ``allowed_keys`` are honored. Request values win + so one deployed model can serve many languages. Pure and vLLM-free so it can + be unit-tested on CPU. + """ + merged: Dict[str, Any] = dict(config_defaults or {}) + if isinstance(request, Mapping): + nested = request.get("asr_generate_kwargs") + if isinstance(nested, Mapping): + merged.update( + {k: v for k, v in nested.items() if k in allowed_keys} + ) + language = request.get("language") + if language is not None: + merged["language"] = language + return merged + + +def _freeze(value: Any) -> Any: + """Recursively convert dicts/lists into a hashable, order-stable form.""" + if isinstance(value, Mapping): + return tuple(sorted((k, _freeze(v)) for k, v in value.items())) + if isinstance(value, (list, tuple)): + return tuple(_freeze(v) for v in value) + return value + + def get_transcriber( model_id: Optional[str] = None, device: str = "cpu", + pipeline_kwargs: Optional[Mapping[str, Any]] = None, ) -> ASRTranscriber: - """Return a process-wide cached :class:`ASRTranscriber` for (model_id, device). + """Return a process-wide cached :class:`ASRTranscriber`. - ``model_id`` of None resolves to :data:`DEFAULT_ASR_MODEL_ID`. + Cached per ``(model_id, device, pipeline_kwargs)``. ``model_id`` of None + resolves to :data:`DEFAULT_ASR_MODEL_ID`. """ resolved = model_id or DEFAULT_ASR_MODEL_ID - key = (resolved, device) + key = (resolved, device, _freeze(pipeline_kwargs or {})) transcriber = _TRANSCRIBERS.get(key) if transcriber is None: with _CACHE_LOCK: transcriber = _TRANSCRIBERS.get(key) if transcriber is None: - transcriber = ASRTranscriber(model_id=resolved, device=device) + transcriber = ASRTranscriber( + model_id=resolved, + device=device, + pipeline_kwargs=pipeline_kwargs, + ) _TRANSCRIBERS[key] = transcriber return transcriber @@ -151,11 +222,13 @@ def transcribe( *, model_id: Optional[str] = None, device: str = "cpu", + pipeline_kwargs: Optional[Mapping[str, Any]] = None, + generate_kwargs: Optional[Mapping[str, Any]] = None, ) -> str: """Convenience wrapper: transcribe with the cached transcriber for the args.""" - return get_transcriber(model_id=model_id, device=device).transcribe( - audio, sampling_rate - ) + return get_transcriber( + model_id=model_id, device=device, pipeline_kwargs=pipeline_kwargs + ).transcribe(audio, sampling_rate, generate_kwargs=generate_kwargs) # ── Audio coercion helpers ─────────────────────────────────────────────────── diff --git a/src/granite_switch/vllm/audio/processor.py b/src/granite_switch/vllm/audio/processor.py index f8c41f2..c34c060 100644 --- a/src/granite_switch/vllm/audio/processor.py +++ b/src/granite_switch/vllm/audio/processor.py @@ -48,7 +48,12 @@ PromptUpdate, ) -from .asr import DEFAULT_ASR_MODEL_ID, get_transcriber +from .asr import ( + DEFAULT_ALLOWED_REQUEST_GENERATE_KEYS, + DEFAULT_ASR_MODEL_ID, + get_transcriber, + resolve_generate_kwargs, +) # The chat-template marker that stands in for an audio clip before replacement. AUDIO_MARKER = "<|audio|>" @@ -104,6 +109,14 @@ def _asr_device(self) -> str: cfg = self.get_hf_config() return getattr(cfg, "asr_device", "cpu") or "cpu" + def _asr_pipeline_kwargs(self) -> Mapping[str, object]: + cfg = self.get_hf_config() + return getattr(cfg, "asr_pipeline_kwargs", None) or {} + + def _asr_generate_kwargs(self) -> Mapping[str, object]: + cfg = self.get_hf_config() + return getattr(cfg, "asr_generate_kwargs", None) or {} + class GraniteSwitchASRDummyInputsBuilder( BaseDummyInputsBuilder[GraniteSwitchASRProcessingInfo] @@ -130,14 +143,17 @@ class GraniteSwitchASRMultiModalProcessor( ): """Runs ASR and splices the transcript tokens into the prompt.""" - def _transcribe(self, audio) -> list[int]: + def _transcribe(self, audio, generate_kwargs: Optional[Mapping[str, object]] = None) -> list[int]: """Transcribe one audio item to a list of token ids.""" transcriber = get_transcriber( model_id=self.info._asr_model_id(), device=self.info._asr_device(), + pipeline_kwargs=self.info._asr_pipeline_kwargs(), ) # The data parser already resampled to _TARGET_SR. - text = transcriber.transcribe(audio, sampling_rate=_TARGET_SR) + text = transcriber.transcribe( + audio, sampling_rate=_TARGET_SR, generate_kwargs=generate_kwargs or None + ) tokenizer = self.info.get_tokenizer() ids = tokenizer.encode(text, add_special_tokens=False) # Guard the profiling bound. @@ -158,8 +174,16 @@ def _call_hf_processor( input_ids = tokenizer.encode(prompt, add_special_tokens=False) return BatchFeature(dict(input_ids=[input_ids]), tensor_type="pt") + # Resolve decode kwargs once (config defaults + allowlisted per-request + # overrides) and apply them to every audio item in this request. + generate_kwargs = resolve_generate_kwargs( + self.info._asr_generate_kwargs(), + mm_kwargs, + DEFAULT_ALLOWED_REQUEST_GENERATE_KEYS, + ) + # Transcribe each audio to token ids; concatenate flat with per-item sizes. - per_item_ids = [self._transcribe(a) for a in audios] + per_item_ids = [self._transcribe(a, generate_kwargs) for a in audios] sizes = [len(ids) for ids in per_item_ids] flat_ids = [tid for ids in per_item_ids for tid in ids] diff --git a/tests/unit/test_asr.py b/tests/unit/test_asr.py index f5fd4d0..fd2d0e3 100644 --- a/tests/unit/test_asr.py +++ b/tests/unit/test_asr.py @@ -127,3 +127,121 @@ def test_different_device_distinct_instance(self): a = asr.get_transcriber("m", "cpu") b = asr.get_transcriber("m", "cuda:0") assert a is not b + + def test_pipeline_kwargs_stored_on_instance(self): + t = asr.get_transcriber("m", "cpu", pipeline_kwargs={"chunk_length_s": 15}) + assert t.pipeline_kwargs == {"chunk_length_s": 15} + + def test_pipeline_kwargs_are_part_of_cache_key(self): + # Different pipeline_kwargs → different cached pipeline (they change how + # the pipeline is constructed), same kwargs → same instance. + a = asr.get_transcriber("pk", "cpu", pipeline_kwargs={"chunk_length_s": 15}) + b = asr.get_transcriber("pk", "cpu", pipeline_kwargs={"chunk_length_s": 30}) + c = asr.get_transcriber("pk", "cpu", pipeline_kwargs={"chunk_length_s": 15}) + assert a is not b + assert a is c + + def test_pipeline_kwargs_key_is_order_independent(self): + a = asr.get_transcriber("pk2", "cpu", pipeline_kwargs={"x": 1, "y": 2}) + b = asr.get_transcriber("pk2", "cpu", pipeline_kwargs={"y": 2, "x": 1}) + assert a is b + + +class TestFreeze: + def test_dict_order_independent(self): + assert asr._freeze({"a": 1, "b": 2}) == asr._freeze({"b": 2, "a": 1}) + + def test_nested_and_list(self): + frozen = asr._freeze({"a": [1, 2], "b": {"c": 3}}) + # Result must be hashable (usable as a dict key). + assert hash(frozen) == hash(asr._freeze({"b": {"c": 3}, "a": [1, 2]})) + + +class TestGenerateKwargsPassthrough: + def test_generate_kwargs_forwarded_to_pipeline_call(self): + t = asr.ASRTranscriber(model_id="x", device="cpu") + fake_pipe = mock.Mock(return_value={"text": "hola"}) + t._pipeline = fake_pipe + t.transcribe( + np.zeros(1600, dtype=np.float32), + sampling_rate=16000, + generate_kwargs={"language": "es"}, + ) + # generate_kwargs is forwarded to the pipeline call as a kwarg. + assert fake_pipe.call_args_list[-1].kwargs["generate_kwargs"] == {"language": "es"} + + def test_empty_generate_kwargs_not_passed(self): + # CTC / non-generative backends must not receive a generate_kwargs kwarg. + t = asr.ASRTranscriber(model_id="x", device="cpu") + fake_pipe = mock.Mock(return_value={"text": "ok"}) + t._pipeline = fake_pipe + t.transcribe(np.zeros(1600, dtype=np.float32), sampling_rate=16000) + assert "generate_kwargs" not in fake_pipe.call_args_list[-1].kwargs + t.transcribe( + np.zeros(1600, dtype=np.float32), sampling_rate=16000, generate_kwargs={} + ) + assert "generate_kwargs" not in fake_pipe.call_args_list[-1].kwargs + + +class TestResolveGenerateKwargs: + def test_config_defaults_only(self): + out = asr.resolve_generate_kwargs({"language": "de", "task": "transcribe"}) + assert out == {"language": "de", "task": "transcribe"} + + def test_none_config_is_empty(self): + assert asr.resolve_generate_kwargs(None) == {} + + def test_top_level_language_overrides_config(self): + out = asr.resolve_generate_kwargs({"language": "de"}, {"language": "fr"}) + assert out == {"language": "fr"} + + def test_nested_request_allowlisted_keys_merge(self): + out = asr.resolve_generate_kwargs( + {"language": "de"}, + {"asr_generate_kwargs": {"task": "translate"}}, + ) + assert out == {"language": "de", "task": "translate"} + + def test_disallowed_request_keys_dropped(self): + # A client cannot inject arbitrary generation options. + out = asr.resolve_generate_kwargs( + {"language": "de"}, + {"asr_generate_kwargs": {"num_beams": 99, "task": "translate"}}, + ) + assert out == {"language": "de", "task": "translate"} + assert "num_beams" not in out + + def test_request_wins_over_config(self): + out = asr.resolve_generate_kwargs( + {"language": "de", "task": "transcribe"}, + {"asr_generate_kwargs": {"language": "ja"}}, + ) + assert out["language"] == "ja" + assert out["task"] == "transcribe" + + def test_config_not_mutated(self): + cfg = {"language": "de"} + asr.resolve_generate_kwargs(cfg, {"language": "fr"}) + assert cfg == {"language": "de"} + + +class TestLoadMergesPipelineKwargs: + def test_pipeline_kwargs_override_defaults(self): + # load() must merge config-supplied pipeline_kwargs over the built-in + # defaults (e.g. override chunk_length_s, add extra kwargs). + pytest.importorskip("torch") + fake_pipe_factory = mock.Mock(return_value=mock.Mock()) + # transformers is a lazy module: `from transformers import pipeline` + # re-resolves to transformers.pipelines.pipeline, so patch there. + with mock.patch("transformers.pipelines.pipeline", fake_pipe_factory): + t = asr.ASRTranscriber( + model_id="m", + device="cpu", + pipeline_kwargs={"chunk_length_s": 15, "batch_size": 4}, + ) + t.load() + kwargs = fake_pipe_factory.call_args.kwargs + assert kwargs["model"] == "m" + assert kwargs["task"] == "automatic-speech-recognition" + assert kwargs["chunk_length_s"] == 15 # overrode the default 30 + assert kwargs["batch_size"] == 4 # extra kwarg passed through diff --git a/tests/unit/test_config.py b/tests/unit/test_config.py index 7225958..7d48edf 100644 --- a/tests/unit/test_config.py +++ b/tests/unit/test_config.py @@ -100,3 +100,36 @@ def test_zero_adapter_default(self): def test_projection_head_dim_inferred_from_hidden_size(self): cfg = GraniteSwitchConfig(**_valid_kwargs()) assert cfg.projection_head_dim == 64 // 4 + + +# ════════════════════════════════════════════════════════════════════ +# 3. Audio (ASR) preprocessing fields +# ════════════════════════════════════════════════════════════════════ + + +class TestAudioConfig: + + def test_asr_defaults_off(self): + cfg = GraniteSwitchConfig(num_adapters=0) + assert cfg.asr_enabled is False + assert cfg.asr_model_id is None + assert cfg.asr_device == "cpu" + assert cfg.asr_pipeline_kwargs is None + assert cfg.asr_generate_kwargs is None + + def test_asr_kwargs_round_trip(self, tmp_path): + # Pipeline/generate kwargs must survive save_pretrained → from_pretrained + # so the checkpoint stays self-describing about its ASR front-end. + cfg = GraniteSwitchConfig( + num_adapters=0, + asr_enabled=True, + asr_model_id="openai/whisper-large-v3", + asr_pipeline_kwargs={"chunk_length_s": 15, "batch_size": 4}, + asr_generate_kwargs={"language": "de", "task": "transcribe"}, + ) + cfg.save_pretrained(tmp_path) + loaded = GraniteSwitchConfig.from_pretrained(tmp_path) + assert loaded.asr_enabled is True + assert loaded.asr_model_id == "openai/whisper-large-v3" + assert loaded.asr_pipeline_kwargs == {"chunk_length_s": 15, "batch_size": 4} + assert loaded.asr_generate_kwargs == {"language": "de", "task": "transcribe"} diff --git a/tests/vllm/test_audio_processor.py b/tests/vllm/test_audio_processor.py new file mode 100644 index 0000000..e991c67 --- /dev/null +++ b/tests/vllm/test_audio_processor.py @@ -0,0 +1,213 @@ +# SPDX-License-Identifier: Apache-2.0 +"""vLLM-tier tests for the audio ASR multimodal processor. + +These exercise the code that lives in ``granite_switch.vllm.audio.processor`` +and therefore needs vLLM importable (the base classes come from vLLM). They do +NOT need a GPU or a real ASR model: the transcriber is faked, so what is under +test is our plumbing — + +- per-checkpoint gating of the audio modality on ``asr_enabled``, +- the config accessors for ``asr_model_id`` / ``asr_device`` / + ``asr_pipeline_kwargs`` / ``asr_generate_kwargs``, +- and the Level-2 seam: config-default decode kwargs merged with an allowlisted + per-request override (vLLM's ``mm_processor_kwargs``) reaching the transcriber. + +The pure merge/kwargs logic itself is unit-tested on CPU in +``tests/unit/test_asr.py``; this file checks it is wired through the processor. + +Requires vLLM installed. Skipped otherwise (e.g. CPU-only dev machines). +""" + +import importlib.util +from types import SimpleNamespace + +import numpy as np +import pytest + +_VLLM_AVAILABLE = importlib.util.find_spec("vllm") is not None + +pytestmark = pytest.mark.skipif( + not _VLLM_AVAILABLE, + reason="requires vLLM installed", +) + +if _VLLM_AVAILABLE: + from granite_switch.vllm.audio import processor as proc_mod + from granite_switch.vllm.audio.processor import ( + GraniteSwitchASRProcessingInfo, + GraniteSwitchASRMultiModalProcessor, + ) + from granite_switch.vllm.audio.asr import DEFAULT_ASR_MODEL_ID + + +def _make_info(**cfg_attrs): + """A ProcessingInfo whose get_hf_config() returns a stub config. + + Bypasses __init__ (which needs a full vLLM InputProcessingContext) — we only + exercise methods that read the config. + """ + info = object.__new__(GraniteSwitchASRProcessingInfo) + cfg = SimpleNamespace(**cfg_attrs) + info.get_hf_config = lambda: cfg + return info + + +class TestProcessingInfoGating: + def test_disabled_reports_no_modalities(self): + info = _make_info(asr_enabled=False) + assert info.get_supported_mm_limits() == {} + assert info.get_mm_max_tokens_per_item(128, {"audio": 1}) == {} + + def test_missing_flag_defaults_disabled(self): + # A pre-audio checkpoint has no asr_enabled key at all. + info = _make_info() + assert info.get_supported_mm_limits() == {} + + def test_enabled_reports_one_audio(self): + info = _make_info(asr_enabled=True) + assert info.get_supported_mm_limits() == {"audio": 1} + assert info.get_mm_max_tokens_per_item(128, {"audio": 1}) == { + "audio": proc_mod._MAX_TRANSCRIPT_TOKENS + } + + +class TestProcessingInfoAsrAccessors: + def test_model_id_defaults_when_none(self): + info = _make_info(asr_enabled=True, asr_model_id=None) + assert info._asr_model_id() == DEFAULT_ASR_MODEL_ID + + def test_model_id_explicit(self): + info = _make_info(asr_enabled=True, asr_model_id="openai/whisper-small") + assert info._asr_model_id() == "openai/whisper-small" + + def test_device_default_cpu(self): + assert _make_info(asr_enabled=True)._asr_device() == "cpu" + + def test_pipeline_and_generate_kwargs_default_empty(self): + info = _make_info(asr_enabled=True) + assert info._asr_pipeline_kwargs() == {} + assert info._asr_generate_kwargs() == {} + + def test_pipeline_and_generate_kwargs_from_config(self): + info = _make_info( + asr_enabled=True, + asr_pipeline_kwargs={"chunk_length_s": 15}, + asr_generate_kwargs={"language": "de"}, + ) + assert info._asr_pipeline_kwargs() == {"chunk_length_s": 15} + assert info._asr_generate_kwargs() == {"language": "de"} + + +def _make_processor(info, monkeypatch, capture): + """A processor whose transcriber is faked; records what it was called with.""" + info.get_tokenizer = lambda: SimpleNamespace( + encode=lambda text, add_special_tokens=False: [1, 2, 3] + ) + proc = object.__new__(GraniteSwitchASRMultiModalProcessor) + proc.info = info + + class FakeTranscriber: + def transcribe(self, audio, sampling_rate=None, generate_kwargs=None): + capture["sampling_rate"] = sampling_rate + capture["generate_kwargs"] = generate_kwargs + return "hello world" + + def fake_get_transcriber(model_id=None, device="cpu", pipeline_kwargs=None): + capture["model_id"] = model_id + capture["device"] = device + capture["pipeline_kwargs"] = pipeline_kwargs + return FakeTranscriber() + + monkeypatch.setattr(proc_mod, "get_transcriber", fake_get_transcriber) + return proc + + +class TestTranscribeWiring: + def test_transcribe_forwards_pipeline_and_generate_kwargs(self, monkeypatch): + capture = {} + info = _make_info( + asr_enabled=True, + asr_model_id="whisper-x", + asr_device="cpu", + asr_pipeline_kwargs={"chunk_length_s": 15}, + asr_generate_kwargs={}, + ) + proc = _make_processor(info, monkeypatch, capture) + + ids = proc._transcribe( + np.zeros(1600, dtype=np.float32), {"language": "fr"} + ) + assert ids == [1, 2, 3] + assert capture["model_id"] == "whisper-x" + assert capture["pipeline_kwargs"] == {"chunk_length_s": 15} + assert capture["generate_kwargs"] == {"language": "fr"} + assert capture["sampling_rate"] == proc_mod._TARGET_SR + + def test_empty_generate_kwargs_becomes_none(self, monkeypatch): + capture = {} + info = _make_info(asr_enabled=True, asr_model_id="w", asr_device="cpu") + proc = _make_processor(info, monkeypatch, capture) + proc._transcribe(np.zeros(1600, dtype=np.float32), {}) + assert capture["generate_kwargs"] is None + + +class TestCallHfProcessorMerge: + """The Level-2 seam end to end (short of a real model): config defaults + + allowlisted per-request override reach the transcriber.""" + + def test_request_language_overrides_config_default(self, monkeypatch): + capture = {} + info = _make_info( + asr_enabled=True, + asr_model_id="w", + asr_device="cpu", + asr_pipeline_kwargs=None, + asr_generate_kwargs={"task": "transcribe", "language": "de"}, + ) + proc = _make_processor(info, monkeypatch, capture) + + bf = proc._call_hf_processor( + prompt="<|audio|>", + mm_data={"audios": [np.zeros(1600, dtype=np.float32)]}, + mm_kwargs={"language": "fr"}, # per-request override + tok_kwargs={}, + ) + # config 'task' retained, request 'language' wins over config 'de'. + assert capture["generate_kwargs"] == {"task": "transcribe", "language": "fr"} + assert "audio_token_ids" in bf + + def test_disallowed_request_key_dropped(self, monkeypatch): + capture = {} + info = _make_info( + asr_enabled=True, + asr_model_id="w", + asr_device="cpu", + asr_pipeline_kwargs=None, + asr_generate_kwargs={"language": "de"}, + ) + proc = _make_processor(info, monkeypatch, capture) + + proc._call_hf_processor( + prompt="<|audio|>", + mm_data={"audios": [np.zeros(1600, dtype=np.float32)]}, + mm_kwargs={"asr_generate_kwargs": {"num_beams": 99, "task": "translate"}}, + tok_kwargs={}, + ) + gk = capture["generate_kwargs"] + assert gk == {"language": "de", "task": "translate"} + assert "num_beams" not in gk + + def test_text_only_request_does_not_transcribe(self, monkeypatch): + capture = {} + info = _make_info(asr_enabled=True, asr_model_id="w", asr_device="cpu") + proc = _make_processor(info, monkeypatch, capture) + + bf = proc._call_hf_processor( + prompt="just text", + mm_data={}, + mm_kwargs={}, + tok_kwargs={}, + ) + # No audio → transcriber never touched, no audio fields emitted. + assert capture == {} + assert "audio_token_ids" not in bf From 2aeffa7ea28f491596a2bcabd5fce2484a900dcd Mon Sep 17 00:00:00 2001 From: aviv ron Date: Mon, 20 Jul 2026 14:42:17 +0300 Subject: [PATCH 13/23] audio: long-audio, multi-clip, and context-derived transcript budget Remove the two hard caps in the audio cascade and add an encoder-agnostic long-audio chunker: 1. Multiple clips per request. get_supported_mm_limits is now a configurable ceiling (asr_max_audio_clips, default 32) instead of a hardcoded 1; each clip's transcript is spliced at its own <|audio|> marker (the splice loop already supported N). For the cascade the clips cost no extra KV (transcripts are ordinary text tokens bounded by the context); the ceiling exists to bound the per-request synchronous-ASR work and the startup profiling pass. 2. Context-derived transcript budget. The fixed 2048-token cap is replaced by audio_token_budget() = (context - generation_reserve - prompt) / clips, floored at 1. get_mm_max_tokens_per_item derives from the seq_len vLLM passes; _call_hf_processor reads the served max_model_len and subtracts the actual prompt. New asr_generation_reserve_tokens (default 8192). 3. Encoder-agnostic chunker (chunking.py): split_waveform + merge_transcripts (word-level overlap de-dup). ASRTranscriber.transcribe gains a self_chunks flag: Whisper (self_chunks=True) keeps its internal timestamp stitching; backends with a fixed input window route through our split/transcribe/merge. New config: asr_self_chunks, asr_chunk_length_s, asr_chunk_overlap_s. Compose CLI flags and docs/AUDIO.md updated. Tests: new test_chunking.py; budget and chunked-path tests in test_asr.py; config round-trip/validation in test_config.py; multi-clip, budget, and flag-forwarding in test_audio_processor.py. Already-composed checkpoints inherit the new behavior via getattr defaults; no re-compose required (only self_chunks=False needs a config change). Signed-off-by: aviv ron --- docs/AUDIO.md | 44 ++++++- .../composer/compose_granite_switch.py | 66 +++++++++- src/granite_switch/config.py | 60 +++++++++ src/granite_switch/vllm/audio/asr.py | 103 ++++++++++++++- src/granite_switch/vllm/audio/chunking.py | 121 ++++++++++++++++++ src/granite_switch/vllm/audio/processor.py | 104 ++++++++++++--- tests/unit/test_asr.py | 61 +++++++++ tests/unit/test_chunking.py | 96 ++++++++++++++ tests/unit/test_config.py | 36 ++++++ tests/vllm/test_audio_processor.py | 120 ++++++++++++++++- 10 files changed, 782 insertions(+), 29 deletions(-) create mode 100644 src/granite_switch/vllm/audio/chunking.py create mode 100644 tests/unit/test_chunking.py diff --git a/docs/AUDIO.md b/docs/AUDIO.md index e92aefa..edac737 100644 --- a/docs/AUDIO.md +++ b/docs/AUDIO.md @@ -68,6 +68,43 @@ editing that file directly — no re-compose and no patched package: "asr_generate_kwargs": {"language": "de", "task": "transcribe"} } ``` +### Long audio & multiple clips + +The transcript token budget is derived from the **served context window**, not a +fixed cap. Per request, the audio may occupy roughly +`max_model_len − asr_generation_reserve_tokens − prompt_tokens`, split across the +request's clips. Relevant config fields (all optional, sensible defaults): + +- `asr_max_audio_clips` (default `32`) — how many audio clips one request may + carry; each is spliced at its own `<|audio|>` marker. `--limit-mm-per-prompt` + may lower this per deployment but cannot raise it above the declared value. + Clips cost no extra KV (transcripts are ordinary text tokens bounded by the + context); the ceiling guards against one request triggering an unbounded number + of synchronous transcriptions. +- `asr_generation_reserve_tokens` (default `8192`) — context held back for the + generated answer (and prompt overhead) when sizing the transcript budget. + +**Long single clips** are handled two ways, selected by `asr_self_chunks`: + +- `asr_self_chunks: true` (default) — the backend chunks internally. The Whisper + pipeline does this via `chunk_length_s` with timestamp-based stitching, so our + chunker is bypassed. +- `asr_self_chunks: false` — route audio through the **encoder-agnostic** chunker: + split into overlapping windows (`asr_chunk_length_s`, default `30.0`; + `asr_chunk_overlap_s`, default `5.0`), transcribe each, and merge with + overlap de-duplication. Use this for a backend with a fixed input window (e.g. a + speech encoder that cannot self-chunk); the transcript stitching then lives + above the backend so any backend inherits long-audio support. + +These are settable at compose time and are equally editable in `config.json`: + +```bash +python -m granite_switch.composer.compose_granite_switch \ + --adapters ... --enable-audio \ + --asr-max-audio-clips 4 \ + --asr-no-self-chunks --asr-chunk-length-s 20 --asr-chunk-overlap-s 3 +``` + ### Per-request language (multilingual) For one deployment that serves many languages, a request can override the config @@ -158,7 +195,12 @@ tokens. - **HF `pipeline` backends only.** Any `automatic-speech-recognition` pipeline model works via config alone; a non-pipeline backend (cloud STT, faster-whisper, a custom encoder) still needs a code-level plug point — tracked as future work. -- One audio clip per request. +- Multiple clips share one context window: the per-clip transcript budget is the + context split across the request's clips, so many/long clips together are bound + by `max_model_len` (see *Long audio & multiple clips* above). +- Chunk-merge de-duplication is text-level (word overlap at each seam); it can + mis-handle a phrase legitimately repeated across a window boundary. Whisper's + internal timestamp stitching (`asr_self_chunks: true`) is more precise. ## Audio + adapters diff --git a/src/granite_switch/composer/compose_granite_switch.py b/src/granite_switch/composer/compose_granite_switch.py index d6aeb4e..c4715a1 100755 --- a/src/granite_switch/composer/compose_granite_switch.py +++ b/src/granite_switch/composer/compose_granite_switch.py @@ -610,6 +610,49 @@ def _compose_argparser(): "\"transcribe\"}' for multilingual Whisper. Per-request " "mm_processor_kwargs override these. Implies --enable-audio.", ) + parser.add_argument( + "--asr-max-audio-clips", + type=int, + default=None, + help="Max audio clips accepted per request (default 32). Implies " + "--enable-audio.", + ) + parser.add_argument( + "--asr-generation-reserve-tokens", + type=int, + default=None, + help="Context tokens held back for the generated answer when sizing the " + "per-clip transcript budget (default 8192). Implies --enable-audio.", + ) + parser.add_argument( + "--asr-self-chunks", + dest="asr_self_chunks", + action="store_true", + default=None, + help="Backend chunks long audio itself (Whisper default). Mutually " + "exclusive with --asr-no-self-chunks.", + ) + parser.add_argument( + "--asr-no-self-chunks", + dest="asr_self_chunks", + action="store_false", + help="Route long audio through the encoder-agnostic split/merge chunker " + "(for backends with a fixed input window). Implies --enable-audio.", + ) + parser.add_argument( + "--asr-chunk-length-s", + type=float, + default=None, + help="Chunker window length in seconds (default 30.0). Only used when " + "the backend does not self-chunk. Implies --enable-audio.", + ) + parser.add_argument( + "--asr-chunk-overlap-s", + type=float, + default=None, + help="Chunker window overlap in seconds (default 5.0). Only used when " + "the backend does not self-chunk. Implies --enable-audio.", + ) return parser @@ -820,6 +863,11 @@ def build(): or args.asr_model is not None or args.asr_pipeline_kwargs is not None or args.asr_generate_kwargs is not None + or args.asr_max_audio_clips is not None + or args.asr_generation_reserve_tokens is not None + or args.asr_self_chunks is not None + or args.asr_chunk_length_s is not None + or args.asr_chunk_overlap_s is not None ) audio_token_id = add_audio_token(tokenizer) if audio_enabled else None @@ -900,12 +948,28 @@ def build(): model.config.asr_pipeline_kwargs = args.asr_pipeline_kwargs if args.asr_generate_kwargs is not None: model.config.asr_generate_kwargs = args.asr_generate_kwargs + # Long-audio / multi-clip knobs. Only set when explicitly given so the + # config keeps the constructor defaults otherwise. + if args.asr_max_audio_clips is not None: + model.config.asr_max_audio_clips = args.asr_max_audio_clips + if args.asr_generation_reserve_tokens is not None: + model.config.asr_generation_reserve_tokens = ( + args.asr_generation_reserve_tokens + ) + if args.asr_self_chunks is not None: + model.config.asr_self_chunks = args.asr_self_chunks + if args.asr_chunk_length_s is not None: + model.config.asr_chunk_length_s = args.asr_chunk_length_s + if args.asr_chunk_overlap_s is not None: + model.config.asr_chunk_overlap_s = args.asr_chunk_overlap_s print( f" Audio cascade enabled " f"(asr_model_id={args.asr_model or 'default'}, " f"asr_device={args.asr_device}, audio_token_id={audio_token_id}, " f"pipeline_kwargs={args.asr_pipeline_kwargs or {}}, " - f"generate_kwargs={args.asr_generate_kwargs or {}})" + f"generate_kwargs={args.asr_generate_kwargs or {}}, " + f"max_audio_clips={args.asr_max_audio_clips or 'default'}, " + f"self_chunks={args.asr_self_chunks})" ) # Base model size (best effort) diff --git a/src/granite_switch/config.py b/src/granite_switch/config.py index 3b80b4c..2a2fab2 100644 --- a/src/granite_switch/config.py +++ b/src/granite_switch/config.py @@ -64,6 +64,38 @@ class GraniteSwitchConfig(GraniteMoeHybridConfig): reused; per-request values (via ``mm_processor_kwargs``) override these. Ignored by models that do not generate (e.g. CTC). Default: None. + asr_max_audio_clips (int): Maximum number of audio clips accepted in a + single request. Each clip's transcript is spliced at its own + ``<|audio|>`` marker. vLLM enforces this as the modality ceiling + (``--limit-mm-per-prompt`` may lower it, not raise it). For the + cascade the clips cost no extra KV (transcripts are ordinary text + tokens bounded by the context window); the ceiling mainly guards + against one request triggering an unbounded number of synchronous + ASR transcriptions, and bounds the startup profiling pass. Default: + 32. + asr_generation_reserve_tokens (int): Tokens held back from the context + window for the model's generated answer (and prompt overhead) when + computing how many transcript tokens the audio may occupy. The + per-request audio budget is roughly + ``max_model_len - asr_generation_reserve_tokens - prompt_tokens``, + split across the request's clips. Replaces the old fixed 2048-token + transcript cap with a context-derived one. Default: 8192. + asr_chunk_length_s (float): Window length (seconds) our own long-audio + chunker splits a clip into before transcribing each window. Only + used for backends that do not self-chunk (see asr_self_chunks); the + default Whisper backend chunks internally and ignores this. Default: + 30.0. + asr_chunk_overlap_s (float): Overlap (seconds) between consecutive + chunker windows, so words straddling a boundary are whole in at + least one window; the transcript merge de-duplicates the overlap. + Only used when asr_self_chunks is False. Default: 5.0. + asr_self_chunks (bool): Whether the ASR backend handles long audio + itself. True for the Whisper pipeline (its internal + ``chunk_length_s`` does timestamp-based stitching, higher quality + than our text-level merge), so our chunker is bypassed. Set False + for a backend with a fixed input window (e.g. a future speech + encoder) to route audio through our encoder-agnostic + split/transcribe/merge chunker. Default: True. **kwargs: Additional arguments passed to GraniteConfig. """ @@ -88,6 +120,11 @@ def __init__( asr_device: str = "cpu", asr_pipeline_kwargs: Optional[dict] = None, asr_generate_kwargs: Optional[dict] = None, + asr_max_audio_clips: int = 32, + asr_generation_reserve_tokens: int = 8192, + asr_chunk_length_s: float = 30.0, + asr_chunk_overlap_s: float = 5.0, + asr_self_chunks: bool = True, # vLLM residual-norm convention (for bit-exact skinning equivalence) fused_add_norm: bool = False, # Parent class defaults (Granite 4 dense configuration) @@ -180,6 +217,29 @@ def __init__( # and default decode kwargs (applied per call, per-request overridable). self.asr_pipeline_kwargs = asr_pipeline_kwargs self.asr_generate_kwargs = asr_generate_kwargs + # Long-audio / multi-clip preprocessing. The transcript token budget is + # derived from the context window at runtime (max_model_len minus the + # generation reserve, split across clips) rather than a fixed cap; the + # chunker settings only apply to backends that do not self-chunk. + if asr_max_audio_clips < 1: + raise ValueError( + f"asr_max_audio_clips must be >= 1, got {asr_max_audio_clips}" + ) + if asr_generation_reserve_tokens < 0: + raise ValueError( + f"asr_generation_reserve_tokens must be >= 0, got " + f"{asr_generation_reserve_tokens}" + ) + if asr_chunk_overlap_s >= asr_chunk_length_s: + raise ValueError( + f"asr_chunk_overlap_s ({asr_chunk_overlap_s}) must be < " + f"asr_chunk_length_s ({asr_chunk_length_s})" + ) + self.asr_max_audio_clips = asr_max_audio_clips + self.asr_generation_reserve_tokens = asr_generation_reserve_tokens + self.asr_chunk_length_s = asr_chunk_length_s + self.asr_chunk_overlap_s = asr_chunk_overlap_s + self.asr_self_chunks = asr_self_chunks # Adapter names self.adapter_names = adapter_names diff --git a/src/granite_switch/vllm/audio/asr.py b/src/granite_switch/vllm/audio/asr.py index dc5a287..8b5a181 100644 --- a/src/granite_switch/vllm/audio/asr.py +++ b/src/granite_switch/vllm/audio/asr.py @@ -31,6 +31,33 @@ # checkpoint does not name its own (config.asr_model_id is None). DEFAULT_ASR_MODEL_ID = "distil-whisper/distil-small.en" +_CHUNKING = None + + +def _load_chunking(): + """Load the pure chunking helpers, memoized. + + Uses the normal relative import in production (running inside the + ``granite_switch.vllm.audio`` package). Falls back to a direct file-path load + when this module is imported standalone (the CPU unit tests load ``asr.py`` by + path to skip the vLLM-importing package ``__init__``). + """ + global _CHUNKING + if _CHUNKING is not None: + return _CHUNKING + try: + from . import chunking as _chunking # normal package import + except ImportError: + import importlib.util + import pathlib + + path = pathlib.Path(__file__).with_name("chunking.py") + spec = importlib.util.spec_from_file_location("gs_chunking", path) + _chunking = importlib.util.module_from_spec(spec) + spec.loader.exec_module(_chunking) + _CHUNKING = _chunking + return _CHUNKING + # Sample rate expected by Whisper-family feature extractors. _TARGET_SAMPLE_RATE = 16_000 @@ -102,6 +129,9 @@ def transcribe( audio: AudioInput, sampling_rate: Optional[int] = None, generate_kwargs: Optional[Mapping[str, Any]] = None, + self_chunks: bool = True, + chunk_length_s: float = 30.0, + chunk_overlap_s: float = 5.0, ) -> str: """Transcribe one audio clip to a text string. @@ -116,6 +146,16 @@ def transcribe( this call (e.g. ``{"language": "fr"}``). Applied per call so the same loaded pipeline serves many languages. Passed only when non-empty, so CTC/non-generative backends are unaffected. + self_chunks: True when the backend handles long audio itself (the + Whisper pipeline, via its internal ``chunk_length_s``); the whole + clip is passed in one call. False routes long audio through our + encoder-agnostic chunker (:mod:`.chunking`): split into + overlapping windows, transcribe each, and merge with overlap + de-duplication. + chunk_length_s: Window length for our chunker (only used when + ``self_chunks`` is False). + chunk_overlap_s: Window overlap for our chunker (only used when + ``self_chunks`` is False). Returns: The transcript with surrounding whitespace stripped. @@ -125,8 +165,27 @@ def transcribe( samples = _resample(samples, sr, _TARGET_SAMPLE_RATE) self.load() - # Pass the already-resampled mono waveform; tell the pipeline its rate so - # it does not attempt its own resampling. + + # Backend chunks internally (Whisper): one call over the whole clip. + if self_chunks: + return self._run_pipeline(samples, generate_kwargs) + + # Encoder-agnostic path: split into overlapping windows, transcribe each, + # then stitch the per-window transcripts (de-duplicating the overlap). + chunking = _load_chunking() + segments = chunking.split_waveform( + samples, _TARGET_SAMPLE_RATE, chunk_length_s, chunk_overlap_s + ) + texts = [self._run_pipeline(seg, generate_kwargs) for seg in segments] + return chunking.merge_transcripts(texts).strip() + + def _run_pipeline( + self, + samples: np.ndarray, + generate_kwargs: Optional[Mapping[str, Any]] = None, + ) -> str: + """Run the loaded pipeline over an already-resampled mono waveform.""" + # Tell the pipeline the rate so it does not attempt its own resampling. call_kwargs: Dict[str, Any] = {} if generate_kwargs: call_kwargs["generate_kwargs"] = dict(generate_kwargs) @@ -181,6 +240,34 @@ def resolve_generate_kwargs( return merged +def audio_token_budget( + context_len: int, + reserve_tokens: int, + num_clips: int, + prompt_tokens: int = 0, +) -> int: + """Max transcript tokens allowed per audio clip, derived from the context. + + Replaces the old fixed 2048-token cap. The audio in a request may occupy the + context window minus what is held back for the generated answer (and any + prompt text already present), split evenly across the request's clips:: + + (context_len - reserve_tokens - prompt_tokens) // num_clips + + Two call sites, both vLLM-free so this is unit-testable on CPU: + * startup profiling knows only ``context_len`` (seq_len) and the clip count + (``prompt_tokens`` defaults to 0), giving the worst-case per-clip bound; + * at request time the real prompt length is subtracted too, so the actual + transcript is always <= what profiling reserved. + + Floored at 1 so every clip contributes at least one placeholder token (vLLM + rejects a multimodal item with zero placeholders). + """ + clips = max(1, num_clips) + available = context_len - reserve_tokens - prompt_tokens + return max(1, available // clips) + + def _freeze(value: Any) -> Any: """Recursively convert dicts/lists into a hashable, order-stable form.""" if isinstance(value, Mapping): @@ -224,11 +311,21 @@ def transcribe( device: str = "cpu", pipeline_kwargs: Optional[Mapping[str, Any]] = None, generate_kwargs: Optional[Mapping[str, Any]] = None, + self_chunks: bool = True, + chunk_length_s: float = 30.0, + chunk_overlap_s: float = 5.0, ) -> str: """Convenience wrapper: transcribe with the cached transcriber for the args.""" return get_transcriber( model_id=model_id, device=device, pipeline_kwargs=pipeline_kwargs - ).transcribe(audio, sampling_rate, generate_kwargs=generate_kwargs) + ).transcribe( + audio, + sampling_rate, + generate_kwargs=generate_kwargs, + self_chunks=self_chunks, + chunk_length_s=chunk_length_s, + chunk_overlap_s=chunk_overlap_s, + ) # ── Audio coercion helpers ─────────────────────────────────────────────────── diff --git a/src/granite_switch/vllm/audio/chunking.py b/src/granite_switch/vllm/audio/chunking.py new file mode 100644 index 0000000..1638970 --- /dev/null +++ b/src/granite_switch/vllm/audio/chunking.py @@ -0,0 +1,121 @@ +# SPDX-License-Identifier: Apache-2.0 +"""Encoder-agnostic long-audio chunking for the cascade. + +A backend with a fixed input window (e.g. a speech encoder that only accepts a +few seconds at a time) cannot ingest a long clip in one shot. This module splits +a long waveform into overlapping fixed-length windows and stitches the resulting +per-window transcripts back into one string — the same job Whisper's internal +``chunk_length_s`` does, but lifted **above** the backend so *any* transcriber +inherits long-audio support. + +Kept pure (numpy + stdlib, no vLLM / torch / transformers import) so it unit- +tests on CPU. The transcriber decides whether to use it via its ``self_chunks`` +flag: backends that already chunk internally (Whisper) bypass this entirely. + +Why overlap + dedup: cutting on hard boundaries can split a word across two +windows, so consecutive windows overlap and each boundary word is whole in at +least one of them. The overlap region is therefore transcribed twice; the merge +finds the repeated span at each seam and keeps one copy. +""" + +from __future__ import annotations + +import re +from typing import List + +import numpy as np + +# Cap on how many trailing/leading words we search for a seam overlap. Comfortably +# larger than any plausible word count inside a few seconds of overlap, but bounded +# so the merge stays linear in transcript length. +_MAX_SEAM_WORDS = 60 + + +def split_waveform( + samples: np.ndarray, + sr: int, + window_s: float, + overlap_s: float, +) -> List[np.ndarray]: + """Split ``samples`` into overlapping windows of ``window_s`` seconds. + + Consecutive windows advance by ``window_s - overlap_s`` seconds, so each pair + shares ``overlap_s`` of audio. A clip already shorter than one window is + returned as a single segment (no copying/splitting). + + Args: + samples: 1-D mono waveform. + sr: Sample rate of ``samples`` in Hz. + window_s: Window length in seconds (must be > 0). + overlap_s: Overlap between consecutive windows in seconds (0 <= overlap_s + < window_s). + + Returns: + A list of 1-D numpy views/arrays, in order. + """ + if window_s <= 0: + raise ValueError(f"window_s must be > 0, got {window_s}") + if not (0 <= overlap_s < window_s): + raise ValueError( + f"overlap_s must satisfy 0 <= overlap_s < window_s; got " + f"overlap_s={overlap_s}, window_s={window_s}" + ) + + window = int(round(window_s * sr)) + step = int(round((window_s - overlap_s) * sr)) + window = max(1, window) + step = max(1, step) + + n = len(samples) + if n <= window: + return [samples] + + segments: List[np.ndarray] = [] + start = 0 + while start < n: + segments.append(samples[start : start + window]) + if start + window >= n: + break + start += step + return segments + + +def _norm_word(word: str) -> str: + """Lowercase and strip surrounding punctuation for seam comparison.""" + return re.sub(r"[^\w]+", "", word).lower() + + +def _seam_overlap(prev: List[str], nxt: List[str]) -> int: + """Longest k such that the last k words of ``prev`` match the first k of ``nxt``. + + Comparison is punctuation/case-insensitive because ASR often renders the + overlap region slightly differently on each side of the seam. Returns 0 when + there is no matching overlap. + """ + max_k = min(len(prev), len(nxt), _MAX_SEAM_WORDS) + for k in range(max_k, 0, -1): + a = [_norm_word(w) for w in prev[-k:]] + b = [_norm_word(w) for w in nxt[:k]] + if a == b: + return k + return 0 + + +def merge_transcripts(transcripts: List[str]) -> str: + """Concatenate per-window transcripts, de-duplicating the overlap at each seam. + + For each new window, find the longest word-level overlap between the tail of + the text so far and the head of the new window, and drop that duplicated span + from the new window before appending. Empty windows are skipped. + """ + merged: List[str] = [] + for text in transcripts: + words = text.split() + if not words: + continue + if not merged: + merged = words + continue + k = _seam_overlap(merged, words) + merged.extend(words[k:]) + return " ".join(merged) diff --git a/src/granite_switch/vllm/audio/processor.py b/src/granite_switch/vllm/audio/processor.py index c34c060..bb3ecd8 100644 --- a/src/granite_switch/vllm/audio/processor.py +++ b/src/granite_switch/vllm/audio/processor.py @@ -51,6 +51,7 @@ from .asr import ( DEFAULT_ALLOWED_REQUEST_GENERATE_KEYS, DEFAULT_ASR_MODEL_ID, + audio_token_budget, get_transcriber, resolve_generate_kwargs, ) @@ -61,10 +62,9 @@ # ASR feature-extractor sample rate the audio is resampled to. _TARGET_SR = 16_000 -# Upper bound on transcript tokens per audio item, used for startup memory -# profiling (get_mm_max_tokens_per_item). Generous enough for a long clip; the -# real transcript is usually far shorter. ~ a few minutes of dense speech. -_MAX_TRANSCRIPT_TOKENS = 2048 +# Fallback context length if the served max_model_len cannot be read (should not +# happen in practice; keeps the transcript budget finite either way). +_FALLBACK_CONTEXT_LEN = 8192 # Dummy clip length (seconds) used during vLLM's profiling run. _DUMMY_AUDIO_SECONDS = 5 @@ -81,8 +81,11 @@ def get_supported_mm_limits(self) -> Mapping[str, Optional[int]]: # reports no modalities, so vLLM never profiles audio or loads ASR. if not self._asr_enabled(): return {} - # One audio clip per request for the alpha. - return {"audio": 1} + # Configurable ceiling on audio clips per request; each clip's transcript + # is spliced at its own <|audio|> marker. Finite so vLLM can size KV for + # the worst case (clips x per-clip budget). --limit-mm-per-prompt may + # lower this, not raise it above the declared ceiling. + return {"audio": self._asr_max_audio_clips()} def get_mm_max_tokens_per_item( self, @@ -91,9 +94,16 @@ def get_mm_max_tokens_per_item( ) -> Optional[Mapping[str, int]]: if not self._asr_enabled(): return {} - # Bound the transcript length so vLLM can size the KV cache at startup - # instead of running dummy audio through ASR at max size. - return {"audio": _MAX_TRANSCRIPT_TOKENS} + # Per-clip transcript bound derived from the context window vLLM passes in + # (seq_len), minus the generation reserve, split across the max clip count. + # This is the worst case for profiling; the runtime budget also subtracts + # the prompt length, so it is never larger than this. + count = mm_counts.get("audio", 1) or 1 + return { + "audio": audio_token_budget( + seq_len, self._asr_generation_reserve_tokens(), count + ) + } def get_data_parser(self) -> MultiModalDataParser: # Resample incoming audio to the ASR sample rate. @@ -117,6 +127,41 @@ def _asr_generate_kwargs(self) -> Mapping[str, object]: cfg = self.get_hf_config() return getattr(cfg, "asr_generate_kwargs", None) or {} + def _asr_max_audio_clips(self) -> int: + cfg = self.get_hf_config() + return int(getattr(cfg, "asr_max_audio_clips", 32) or 32) + + def _asr_generation_reserve_tokens(self) -> int: + cfg = self.get_hf_config() + return int(getattr(cfg, "asr_generation_reserve_tokens", 8192) or 0) + + def _asr_self_chunks(self) -> bool: + cfg = self.get_hf_config() + return bool(getattr(cfg, "asr_self_chunks", True)) + + def _asr_chunk_length_s(self) -> float: + cfg = self.get_hf_config() + return float(getattr(cfg, "asr_chunk_length_s", 30.0) or 30.0) + + def _asr_chunk_overlap_s(self) -> float: + cfg = self.get_hf_config() + return float(getattr(cfg, "asr_chunk_overlap_s", 5.0) or 0.0) + + def _max_model_len(self) -> int: + """The served context window, or a safe fallback. + + vLLM passes ``seq_len`` into ``get_mm_max_tokens_per_item`` for profiling, + but ``_call_hf_processor`` needs the served context at request time to size + the transcript budget, so read it from the processing context's model + config (falling back to the checkpoint's max_position_embeddings, then a + constant). + """ + model_config = getattr(self.ctx, "model_config", None) + max_len = getattr(model_config, "max_model_len", None) + if not max_len: + max_len = getattr(self.get_hf_config(), "max_position_embeddings", None) + return int(max_len) if max_len else _FALLBACK_CONTEXT_LEN + class GraniteSwitchASRDummyInputsBuilder( BaseDummyInputsBuilder[GraniteSwitchASRProcessingInfo] @@ -143,8 +188,17 @@ class GraniteSwitchASRMultiModalProcessor( ): """Runs ASR and splices the transcript tokens into the prompt.""" - def _transcribe(self, audio, generate_kwargs: Optional[Mapping[str, object]] = None) -> list[int]: - """Transcribe one audio item to a list of token ids.""" + def _transcribe( + self, + audio, + generate_kwargs: Optional[Mapping[str, object]] = None, + budget: Optional[int] = None, + ) -> list[int]: + """Transcribe one audio item to a list of token ids (capped at ``budget``). + + Long audio is handled by the backend itself (Whisper) or by our + encoder-agnostic chunker, per the checkpoint's ``asr_self_chunks`` flag. + """ transcriber = get_transcriber( model_id=self.info._asr_model_id(), device=self.info._asr_device(), @@ -152,12 +206,18 @@ def _transcribe(self, audio, generate_kwargs: Optional[Mapping[str, object]] = N ) # The data parser already resampled to _TARGET_SR. text = transcriber.transcribe( - audio, sampling_rate=_TARGET_SR, generate_kwargs=generate_kwargs or None + audio, + sampling_rate=_TARGET_SR, + generate_kwargs=generate_kwargs or None, + self_chunks=self.info._asr_self_chunks(), + chunk_length_s=self.info._asr_chunk_length_s(), + chunk_overlap_s=self.info._asr_chunk_overlap_s(), ) tokenizer = self.info.get_tokenizer() ids = tokenizer.encode(text, add_special_tokens=False) - # Guard the profiling bound. - return ids[:_MAX_TRANSCRIPT_TOKENS] + # Cap to the per-clip transcript budget so the spliced sequence fits the + # context window vLLM profiled for. + return ids[:budget] if budget is not None else ids def _call_hf_processor( self, @@ -182,13 +242,23 @@ def _call_hf_processor( DEFAULT_ALLOWED_REQUEST_GENERATE_KEYS, ) + input_ids = tokenizer.encode(prompt, add_special_tokens=False) + + # Per-clip transcript budget: the served context minus the generation + # reserve and the prompt already present, split across this request's + # clips. Derived from the context window rather than a fixed cap. + budget = audio_token_budget( + self.info._max_model_len(), + self.info._asr_generation_reserve_tokens(), + len(audios), + prompt_tokens=len(input_ids), + ) + # Transcribe each audio to token ids; concatenate flat with per-item sizes. - per_item_ids = [self._transcribe(a, generate_kwargs) for a in audios] + per_item_ids = [self._transcribe(a, generate_kwargs, budget) for a in audios] sizes = [len(ids) for ids in per_item_ids] flat_ids = [tid for ids in per_item_ids for tid in ids] - input_ids = tokenizer.encode(prompt, add_special_tokens=False) - return BatchFeature( dict( input_ids=[input_ids], diff --git a/tests/unit/test_asr.py b/tests/unit/test_asr.py index fd2d0e3..4bc9b81 100644 --- a/tests/unit/test_asr.py +++ b/tests/unit/test_asr.py @@ -113,6 +113,67 @@ def test_load_is_idempotent_when_pipeline_set(self): assert t._pipeline is sentinel +class TestAudioTokenBudget: + def test_single_clip_uses_context_minus_reserve(self): + assert asr.audio_token_budget(131072, 8192, 1) == 131072 - 8192 + + def test_split_across_clips(self): + # (131072 - 8192) // 4 + assert asr.audio_token_budget(131072, 8192, 4) == (131072 - 8192) // 4 + + def test_prompt_tokens_subtracted(self): + assert asr.audio_token_budget(8192, 4096, 2, prompt_tokens=1000) == ( + (8192 - 4096 - 1000) // 2 + ) + + def test_floors_at_one_when_no_room(self): + # Reserve exceeds context -> still at least one placeholder per clip. + assert asr.audio_token_budget(100, 200, 1) == 1 + + def test_zero_clip_count_treated_as_one(self): + assert asr.audio_token_budget(1000, 0, 0) == 1000 + + +class TestChunkedTranscribe: + """self_chunks=False routes through the split/transcribe/merge chunker.""" + + def _fake_pipe_transcriber(self): + t = asr.ASRTranscriber(model_id="x", device="cpu") + # Each segment "transcribes" to a token tagged by its sample length, so we + # can see how many windows were produced and that merge stitched them. + t._pipeline = lambda inp, **k: {"text": "seg%d" % len(inp["raw"])} + return t + + def test_self_chunks_true_is_single_call(self): + t = asr.ASRTranscriber(model_id="x", device="cpu") + calls = [] + t._pipeline = lambda inp, **k: (calls.append(len(inp["raw"])) or {"text": "x"}) + # 70s clip; with self_chunks the whole thing goes in one call. + t.transcribe(np.zeros(70 * 16000, dtype=np.float32), sampling_rate=16000, + self_chunks=True) + assert len(calls) == 1 + assert calls[0] == 70 * 16000 + + def test_non_self_chunking_splits_and_merges(self): + t = self._fake_pipe_transcriber() + # 70s @16k, 30s window, 5s overlap -> 3 windows: 480000, 480000, 320000 + # samples. The two identical 30s window texts collapse at the seam; the + # 20s remainder is appended. + out = t.transcribe( + np.zeros(70 * 16000, dtype=np.float32), sampling_rate=16000, + self_chunks=False, chunk_length_s=30.0, chunk_overlap_s=5.0, + ) + assert out == "seg480000 seg320000" + + def test_short_clip_single_window(self): + t = self._fake_pipe_transcriber() + out = t.transcribe( + np.zeros(5 * 16000, dtype=np.float32), sampling_rate=16000, + self_chunks=False, chunk_length_s=30.0, chunk_overlap_s=5.0, + ) + assert out == "seg80000" + + class TestTranscriberCache: def test_same_key_returns_same_instance(self): a = asr.get_transcriber("m", "cpu") diff --git a/tests/unit/test_chunking.py b/tests/unit/test_chunking.py new file mode 100644 index 0000000..05a4738 --- /dev/null +++ b/tests/unit/test_chunking.py @@ -0,0 +1,96 @@ +# SPDX-License-Identifier: Apache-2.0 +"""Unit tests for the encoder-agnostic long-audio chunker. + +Pure numpy/stdlib logic (no vLLM), so — like ``test_asr.py`` — the leaf module is +loaded directly by file path to skip the vLLM-importing package ``__init__``. +""" + +import importlib.util +import pathlib + +import numpy as np +import pytest + +_CHUNKING_PATH = ( + pathlib.Path(__file__).resolve().parents[2] + / "src/granite_switch/vllm/audio/chunking.py" +) +_spec = importlib.util.spec_from_file_location("gs_chunking_under_test", _CHUNKING_PATH) +chunking = importlib.util.module_from_spec(_spec) +_spec.loader.exec_module(chunking) + + +SR = 16_000 + + +class TestSplitWaveform: + def test_short_clip_returns_single_segment(self): + wav = np.zeros(5 * SR, dtype=np.float32) + segs = chunking.split_waveform(wav, SR, 30.0, 5.0) + assert len(segs) == 1 + assert len(segs[0]) == len(wav) + + def test_exact_window_is_one_segment(self): + wav = np.zeros(30 * SR, dtype=np.float32) + segs = chunking.split_waveform(wav, SR, 30.0, 5.0) + assert len(segs) == 1 + + def test_overlapping_windows_cover_and_step(self): + # 100s, 30s window, 5s overlap -> step 25s -> starts 0,25,50,75 + wav = np.arange(100 * SR, dtype=np.float32) + segs = chunking.split_waveform(wav, SR, 30.0, 5.0) + assert [round(len(s) / SR, 3) for s in segs] == [30.0, 30.0, 30.0, 25.0] + # Every sample is covered, and consecutive windows overlap by 5s. + assert segs[0][-1] > segs[1][0] # overlap: seg0 tail past seg1 head start + + def test_last_segment_is_remainder(self): + wav = np.zeros(70 * SR, dtype=np.float32) # 70s -> 30,30,20 (step 25) + segs = chunking.split_waveform(wav, SR, 30.0, 5.0) + assert [round(len(s) / SR, 3) for s in segs] == [30.0, 30.0, 20.0] + + def test_no_overlap_tiles(self): + wav = np.zeros(60 * SR, dtype=np.float32) + segs = chunking.split_waveform(wav, SR, 30.0, 0.0) + assert [round(len(s) / SR, 3) for s in segs] == [30.0, 30.0] + + def test_invalid_window_raises(self): + with pytest.raises(ValueError): + chunking.split_waveform(np.zeros(SR), SR, 0.0, 0.0) + + def test_overlap_ge_window_raises(self): + with pytest.raises(ValueError): + chunking.split_waveform(np.zeros(SR), SR, 30.0, 30.0) + + +class TestMergeTranscripts: + def test_empty_list(self): + assert chunking.merge_transcripts([]) == "" + + def test_single(self): + assert chunking.merge_transcripts(["hello world"]) == "hello world" + + def test_overlap_deduped(self): + out = chunking.merge_transcripts( + ["what is the capital of Israel", "the capital of Israel is Jerusalem"] + ) + assert out == "what is the capital of Israel is Jerusalem" + + def test_no_overlap_concatenates(self): + assert chunking.merge_transcripts(["hello world", "foo bar"]) == ( + "hello world foo bar" + ) + + def test_empty_segments_skipped(self): + assert chunking.merge_transcripts(["a b c", "", "c d e"]) == "a b c d e" + + def test_seam_is_punct_and_case_insensitive(self): + # "Store." vs "store," and "the" both normalize equal -> 2-word overlap. + out = chunking.merge_transcripts(["going to the Store.", "the store, i went"]) + assert out == "going to the Store. i went" + + def test_identical_adjacent_collapses(self): + assert chunking.merge_transcripts(["thank you", "thank you"]) == "thank you" + + def test_partial_overlap_keeps_tail(self): + out = chunking.merge_transcripts(["a b c d", "c d e f"]) + assert out == "a b c d e f" diff --git a/tests/unit/test_config.py b/tests/unit/test_config.py index 7d48edf..9cf8ae7 100644 --- a/tests/unit/test_config.py +++ b/tests/unit/test_config.py @@ -117,6 +117,42 @@ def test_asr_defaults_off(self): assert cfg.asr_pipeline_kwargs is None assert cfg.asr_generate_kwargs is None + def test_longaudio_defaults(self): + cfg = GraniteSwitchConfig(num_adapters=0) + assert cfg.asr_max_audio_clips == 32 + assert cfg.asr_generation_reserve_tokens == 8192 + assert cfg.asr_chunk_length_s == 30.0 + assert cfg.asr_chunk_overlap_s == 5.0 + assert cfg.asr_self_chunks is True + + def test_longaudio_round_trip(self, tmp_path): + cfg = GraniteSwitchConfig( + num_adapters=0, + asr_enabled=True, + asr_max_audio_clips=4, + asr_generation_reserve_tokens=4096, + asr_chunk_length_s=20.0, + asr_chunk_overlap_s=3.0, + asr_self_chunks=False, + ) + cfg.save_pretrained(tmp_path) + loaded = GraniteSwitchConfig.from_pretrained(tmp_path) + assert loaded.asr_max_audio_clips == 4 + assert loaded.asr_generation_reserve_tokens == 4096 + assert loaded.asr_chunk_length_s == 20.0 + assert loaded.asr_chunk_overlap_s == 3.0 + assert loaded.asr_self_chunks is False + + def test_invalid_max_audio_clips_raises(self): + with pytest.raises(ValueError, match="asr_max_audio_clips"): + GraniteSwitchConfig(num_adapters=0, asr_max_audio_clips=0) + + def test_overlap_ge_window_raises(self): + with pytest.raises(ValueError, match="asr_chunk_overlap_s"): + GraniteSwitchConfig( + num_adapters=0, asr_chunk_length_s=10.0, asr_chunk_overlap_s=10.0 + ) + def test_asr_kwargs_round_trip(self, tmp_path): # Pipeline/generate kwargs must survive save_pretrained → from_pretrained # so the checkpoint stays self-describing about its ASR front-end. diff --git a/tests/vllm/test_audio_processor.py b/tests/vllm/test_audio_processor.py index e991c67..f71c47d 100644 --- a/tests/vllm/test_audio_processor.py +++ b/tests/vllm/test_audio_processor.py @@ -40,15 +40,19 @@ from granite_switch.vllm.audio.asr import DEFAULT_ASR_MODEL_ID -def _make_info(**cfg_attrs): +def _make_info(*, max_model_len=131072, **cfg_attrs): """A ProcessingInfo whose get_hf_config() returns a stub config. Bypasses __init__ (which needs a full vLLM InputProcessingContext) — we only - exercise methods that read the config. + exercise methods that read the config. A stub ``ctx`` supplies the served + ``max_model_len`` used to size the transcript budget. """ info = object.__new__(GraniteSwitchASRProcessingInfo) cfg = SimpleNamespace(**cfg_attrs) info.get_hf_config = lambda: cfg + info.ctx = SimpleNamespace( + model_config=SimpleNamespace(max_model_len=max_model_len) + ) return info @@ -63,11 +67,21 @@ def test_missing_flag_defaults_disabled(self): info = _make_info() assert info.get_supported_mm_limits() == {} - def test_enabled_reports_one_audio(self): + def test_enabled_reports_configurable_clip_limit(self): + # Default ceiling is 32 clips; no longer hard-capped at 1. + info = _make_info(asr_enabled=True) + assert info.get_supported_mm_limits() == {"audio": 32} + info3 = _make_info(asr_enabled=True, asr_max_audio_clips=3) + assert info3.get_supported_mm_limits() == {"audio": 3} + + def test_max_tokens_per_item_is_context_derived(self): + # Budget = (seq_len - generation_reserve) // clip_count (default reserve 8192). info = _make_info(asr_enabled=True) - assert info.get_supported_mm_limits() == {"audio": 1} - assert info.get_mm_max_tokens_per_item(128, {"audio": 1}) == { - "audio": proc_mod._MAX_TRANSCRIPT_TOKENS + assert info.get_mm_max_tokens_per_item(20000, {"audio": 1}) == { + "audio": 20000 - 8192 + } + assert info.get_mm_max_tokens_per_item(20000, {"audio": 4}) == { + "audio": (20000 - 8192) // 4 } @@ -97,6 +111,37 @@ def test_pipeline_and_generate_kwargs_from_config(self): assert info._asr_pipeline_kwargs() == {"chunk_length_s": 15} assert info._asr_generate_kwargs() == {"language": "de"} + def test_longaudio_accessor_defaults(self): + info = _make_info(asr_enabled=True) + assert info._asr_max_audio_clips() == 32 + assert info._asr_generation_reserve_tokens() == 8192 + assert info._asr_self_chunks() is True + assert info._asr_chunk_length_s() == 30.0 + assert info._asr_chunk_overlap_s() == 5.0 + + def test_longaudio_accessors_from_config(self): + info = _make_info( + asr_enabled=True, + asr_max_audio_clips=2, + asr_generation_reserve_tokens=4096, + asr_self_chunks=False, + asr_chunk_length_s=20.0, + asr_chunk_overlap_s=3.0, + ) + assert info._asr_max_audio_clips() == 2 + assert info._asr_generation_reserve_tokens() == 4096 + assert info._asr_self_chunks() is False + assert info._asr_chunk_length_s() == 20.0 + assert info._asr_chunk_overlap_s() == 3.0 + + def test_max_model_len_from_ctx(self): + assert _make_info(asr_enabled=True, max_model_len=16000)._max_model_len() == 16000 + + def test_max_model_len_falls_back_to_position_embeddings(self): + info = _make_info(asr_enabled=True, max_position_embeddings=4096) + info.ctx = SimpleNamespace(model_config=SimpleNamespace(max_model_len=None)) + assert info._max_model_len() == 4096 + def _make_processor(info, monkeypatch, capture): """A processor whose transcriber is faked; records what it was called with.""" @@ -107,9 +152,20 @@ def _make_processor(info, monkeypatch, capture): proc.info = info class FakeTranscriber: - def transcribe(self, audio, sampling_rate=None, generate_kwargs=None): + def transcribe( + self, + audio, + sampling_rate=None, + generate_kwargs=None, + self_chunks=True, + chunk_length_s=30.0, + chunk_overlap_s=5.0, + ): capture["sampling_rate"] = sampling_rate capture["generate_kwargs"] = generate_kwargs + capture["self_chunks"] = self_chunks + capture["chunk_length_s"] = chunk_length_s + capture["chunk_overlap_s"] = chunk_overlap_s return "hello world" def fake_get_transcriber(model_id=None, device="cpu", pipeline_kwargs=None): @@ -211,3 +267,53 @@ def test_text_only_request_does_not_transcribe(self, monkeypatch): # No audio → transcriber never touched, no audio fields emitted. assert capture == {} assert "audio_token_ids" not in bf + + +class TestMultiClipAndBudget: + """#1 (multiple clips) + #2 (context-derived per-clip token budget).""" + + def test_two_clips_produce_two_transcripts(self, monkeypatch): + capture = {} + info = _make_info(asr_enabled=True, asr_model_id="w") + proc = _make_processor(info, monkeypatch, capture) + + bf = proc._call_hf_processor( + prompt="<|audio|> and <|audio|>", + mm_data={"audios": [ + np.zeros(1600, dtype=np.float32), + np.zeros(1600, dtype=np.float32), + ]}, + mm_kwargs={}, + tok_kwargs={}, + ) + # Each faked transcript is [1,2,3]; two clips -> per-item sizes [3,3], + # flat length 6 (spliced at the two markers by _get_prompt_updates). + assert bf["audio_num_tokens"].tolist() == [3, 3] + assert len(bf["audio_token_ids"]) == 6 + + def test_transcribe_truncates_to_budget(self, monkeypatch): + capture = {} + info = _make_info(asr_enabled=True, asr_model_id="w") + proc = _make_processor(info, monkeypatch, capture) + # Override tokenizer to emit 5 ids so the budget cut is visible. + info.get_tokenizer = lambda: SimpleNamespace( + encode=lambda text, add_special_tokens=False: [1, 2, 3, 4, 5] + ) + assert proc._transcribe(np.zeros(1600, dtype=np.float32), {}, budget=2) == [1, 2] + # No budget -> untruncated. + assert proc._transcribe(np.zeros(1600, dtype=np.float32), {}) == [1, 2, 3, 4, 5] + + def test_self_chunks_and_chunk_params_forwarded(self, monkeypatch): + capture = {} + info = _make_info( + asr_enabled=True, + asr_model_id="w", + asr_self_chunks=False, + asr_chunk_length_s=20.0, + asr_chunk_overlap_s=3.0, + ) + proc = _make_processor(info, monkeypatch, capture) + proc._transcribe(np.zeros(1600, dtype=np.float32), {}) + assert capture["self_chunks"] is False + assert capture["chunk_length_s"] == 20.0 + assert capture["chunk_overlap_s"] == 3.0 From 3a60c8e95da89878c4241f6907ad85bb0cfa7606 Mon Sep 17 00:00:00 2001 From: aviv ron Date: Thu, 23 Jul 2026 01:19:02 +0300 Subject: [PATCH 14/23] vllm: fix NameError on plugin import (undefined Optional) GraniteSwitchForCausalLM.embed_input_ids annotated is_multimodal as Optional[torch.Tensor], but the module never imports Optional. The NameError fires at class-definition time, so `import granite_switch.vllm` raises and vLLM's plugin loader silently skips the entry point. The architecture is then never registered with transformers, and any attempt to serve a granite_switch checkpoint fails with "Transformers does not recognize this architecture". Use the module's prevailing PEP 604 style (torch.Tensor | None) instead of adding a typing import. Signed-off-by: aviv ron --- src/granite_switch/vllm/granite_switch_model.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/granite_switch/vllm/granite_switch_model.py b/src/granite_switch/vllm/granite_switch_model.py index 9fad438..9467846 100644 --- a/src/granite_switch/vllm/granite_switch_model.py +++ b/src/granite_switch/vllm/granite_switch_model.py @@ -530,7 +530,7 @@ def embed_input_ids( input_ids: torch.Tensor, multimodal_embeddings=None, *, - is_multimodal: Optional[torch.Tensor] = None, + is_multimodal: torch.Tensor | None = None, ) -> torch.Tensor: """Embed token ids; scatter multimodal embeddings into their positions. From a643ecce48ac8c45a276cdf9a229645fef3d0fee Mon Sep 17 00:00:00 2001 From: Bar Haim Date: Mon, 27 Jul 2026 14:06:50 +0300 Subject: [PATCH 15/23] audio: splice full transcript; reject oversized requests via context check (#45) (#109) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The audio cascade truncated the transcript to a context-derived per-clip budget (asr_generation_reserve_tokens held back for the answer). When that reserve met or exceeded the served max_model_len, the budget floored to 1 token: the model saw no question and refused, with no error (#45). Rather than patch the truncation math, remove it. The transcript is now spliced into the prompt in full, as ordinary text tokens. A request whose prompt + transcript(s) can't leave room for the answer within max_model_len is rejected by vLLM's standard prompt-length check (HTTP 400) — the same loud failure text-only requests already get, instead of a silent 1-token transcript. This also makes audio behave identically to long text. Details: - Remove asr_generation_reserve_tokens entirely (config field + validation, compose CLI flag, processor accessor). It only existed to size the old truncation budget. - Drop the budget param / ids[:budget] truncation in the processor; splice the full transcript. - get_mm_max_tokens_per_item now reports max(1, seq_len // count) — the honest worst-case transcript positions one clip can occupy. This still sizes vLLM's encoder cache correctly (embed_multimodal emits one row per transcript token); it is a profiling hint, not a request bound. - Remove the now-dead audio_token_budget helper and its tests. Tests updated; docs/AUDIO.md rewritten to describe reject-not-truncate. Co-authored-by: aviv ron Signed-off-by: Bar Haim --- docs/AUDIO.md | 12 ++--- .../composer/compose_granite_switch.py | 12 ----- src/granite_switch/config.py | 22 ++------- src/granite_switch/vllm/audio/asr.py | 28 ----------- src/granite_switch/vllm/audio/processor.py | 46 ++++++------------- tests/unit/test_asr.py | 21 --------- tests/unit/test_config.py | 3 -- tests/vllm/test_audio_processor.py | 20 ++++---- 8 files changed, 34 insertions(+), 130 deletions(-) diff --git a/docs/AUDIO.md b/docs/AUDIO.md index edac737..de64363 100644 --- a/docs/AUDIO.md +++ b/docs/AUDIO.md @@ -70,10 +70,12 @@ editing that file directly — no re-compose and no patched package: ### Long audio & multiple clips -The transcript token budget is derived from the **served context window**, not a -fixed cap. Per request, the audio may occupy roughly -`max_model_len − asr_generation_reserve_tokens − prompt_tokens`, split across the -request's clips. Relevant config fields (all optional, sensible defaults): +The transcript is spliced into the prompt as ordinary text tokens — it is **not** +truncated to fit. A request behaves exactly like a long text request: if the +prompt plus the transcript(s) leaves no room for the answer within the served +`max_model_len`, vLLM rejects it with its standard prompt-length error (HTTP 400). +Shorten the audio or serve with a larger `--max-model-len`. Relevant config fields +(all optional, sensible defaults): - `asr_max_audio_clips` (default `32`) — how many audio clips one request may carry; each is spliced at its own `<|audio|>` marker. `--limit-mm-per-prompt` @@ -81,8 +83,6 @@ request's clips. Relevant config fields (all optional, sensible defaults): Clips cost no extra KV (transcripts are ordinary text tokens bounded by the context); the ceiling guards against one request triggering an unbounded number of synchronous transcriptions. -- `asr_generation_reserve_tokens` (default `8192`) — context held back for the - generated answer (and prompt overhead) when sizing the transcript budget. **Long single clips** are handled two ways, selected by `asr_self_chunks`: diff --git a/src/granite_switch/composer/compose_granite_switch.py b/src/granite_switch/composer/compose_granite_switch.py index f85a471..1b5ff9e 100755 --- a/src/granite_switch/composer/compose_granite_switch.py +++ b/src/granite_switch/composer/compose_granite_switch.py @@ -613,13 +613,6 @@ def _compose_argparser(): help="Max audio clips accepted per request (default 32). Implies " "--enable-audio.", ) - parser.add_argument( - "--asr-generation-reserve-tokens", - type=int, - default=None, - help="Context tokens held back for the generated answer when sizing the " - "per-clip transcript budget (default 8192). Implies --enable-audio.", - ) parser.add_argument( "--asr-self-chunks", dest="asr_self_chunks", @@ -862,7 +855,6 @@ def build(): or args.asr_pipeline_kwargs is not None or args.asr_generate_kwargs is not None or args.asr_max_audio_clips is not None - or args.asr_generation_reserve_tokens is not None or args.asr_self_chunks is not None or args.asr_chunk_length_s is not None or args.asr_chunk_overlap_s is not None @@ -952,10 +944,6 @@ def build(): # config keeps the constructor defaults otherwise. if args.asr_max_audio_clips is not None: model.config.asr_max_audio_clips = args.asr_max_audio_clips - if args.asr_generation_reserve_tokens is not None: - model.config.asr_generation_reserve_tokens = ( - args.asr_generation_reserve_tokens - ) if args.asr_self_chunks is not None: model.config.asr_self_chunks = args.asr_self_chunks if args.asr_chunk_length_s is not None: diff --git a/src/granite_switch/config.py b/src/granite_switch/config.py index ccd7d3b..38c20cd 100644 --- a/src/granite_switch/config.py +++ b/src/granite_switch/config.py @@ -71,13 +71,6 @@ class GraniteSwitchConfig(GraniteMoeHybridConfig): against one request triggering an unbounded number of synchronous ASR transcriptions, and bounds the startup profiling pass. Default: 32. - asr_generation_reserve_tokens (int): Tokens held back from the context - window for the model's generated answer (and prompt overhead) when - computing how many transcript tokens the audio may occupy. The - per-request audio budget is roughly - ``max_model_len - asr_generation_reserve_tokens - prompt_tokens``, - split across the request's clips. Replaces the old fixed 2048-token - transcript cap with a context-derived one. Default: 8192. asr_chunk_length_s (float): Window length (seconds) our own long-audio chunker splits a clip into before transcribing each window. Only used for backends that do not self-chunk (see asr_self_chunks); the @@ -119,7 +112,6 @@ def __init__( asr_pipeline_kwargs: dict | None = None, asr_generate_kwargs: dict | None = None, asr_max_audio_clips: int = 32, - asr_generation_reserve_tokens: int = 8192, asr_chunk_length_s: float = 30.0, asr_chunk_overlap_s: float = 5.0, asr_self_chunks: bool = True, @@ -215,26 +207,20 @@ def __init__( # and default decode kwargs (applied per call, per-request overridable). self.asr_pipeline_kwargs = asr_pipeline_kwargs self.asr_generate_kwargs = asr_generate_kwargs - # Long-audio / multi-clip preprocessing. The transcript token budget is - # derived from the context window at runtime (max_model_len minus the - # generation reserve, split across clips) rather than a fixed cap; the - # chunker settings only apply to backends that do not self-chunk. + # Long-audio / multi-clip preprocessing. The transcript is spliced into + # the prompt as ordinary text tokens; a clip that makes the prompt exceed + # the context is rejected by vLLM's standard length check (no truncation). + # The chunker settings only apply to backends that do not self-chunk. if asr_max_audio_clips < 1: raise ValueError( f"asr_max_audio_clips must be >= 1, got {asr_max_audio_clips}" ) - if asr_generation_reserve_tokens < 0: - raise ValueError( - f"asr_generation_reserve_tokens must be >= 0, got " - f"{asr_generation_reserve_tokens}" - ) if asr_chunk_overlap_s >= asr_chunk_length_s: raise ValueError( f"asr_chunk_overlap_s ({asr_chunk_overlap_s}) must be < " f"asr_chunk_length_s ({asr_chunk_length_s})" ) self.asr_max_audio_clips = asr_max_audio_clips - self.asr_generation_reserve_tokens = asr_generation_reserve_tokens self.asr_chunk_length_s = asr_chunk_length_s self.asr_chunk_overlap_s = asr_chunk_overlap_s self.asr_self_chunks = asr_self_chunks diff --git a/src/granite_switch/vllm/audio/asr.py b/src/granite_switch/vllm/audio/asr.py index 8b5a181..e36aa74 100644 --- a/src/granite_switch/vllm/audio/asr.py +++ b/src/granite_switch/vllm/audio/asr.py @@ -240,34 +240,6 @@ def resolve_generate_kwargs( return merged -def audio_token_budget( - context_len: int, - reserve_tokens: int, - num_clips: int, - prompt_tokens: int = 0, -) -> int: - """Max transcript tokens allowed per audio clip, derived from the context. - - Replaces the old fixed 2048-token cap. The audio in a request may occupy the - context window minus what is held back for the generated answer (and any - prompt text already present), split evenly across the request's clips:: - - (context_len - reserve_tokens - prompt_tokens) // num_clips - - Two call sites, both vLLM-free so this is unit-testable on CPU: - * startup profiling knows only ``context_len`` (seq_len) and the clip count - (``prompt_tokens`` defaults to 0), giving the worst-case per-clip bound; - * at request time the real prompt length is subtracted too, so the actual - transcript is always <= what profiling reserved. - - Floored at 1 so every clip contributes at least one placeholder token (vLLM - rejects a multimodal item with zero placeholders). - """ - clips = max(1, num_clips) - available = context_len - reserve_tokens - prompt_tokens - return max(1, available // clips) - - def _freeze(value: Any) -> Any: """Recursively convert dicts/lists into a hashable, order-stable form.""" if isinstance(value, Mapping): diff --git a/src/granite_switch/vllm/audio/processor.py b/src/granite_switch/vllm/audio/processor.py index bb3ecd8..a2ac7d2 100644 --- a/src/granite_switch/vllm/audio/processor.py +++ b/src/granite_switch/vllm/audio/processor.py @@ -51,7 +51,6 @@ from .asr import ( DEFAULT_ALLOWED_REQUEST_GENERATE_KEYS, DEFAULT_ASR_MODEL_ID, - audio_token_budget, get_transcriber, resolve_generate_kwargs, ) @@ -94,16 +93,13 @@ def get_mm_max_tokens_per_item( ) -> Optional[Mapping[str, int]]: if not self._asr_enabled(): return {} - # Per-clip transcript bound derived from the context window vLLM passes in - # (seq_len), minus the generation reserve, split across the max clip count. - # This is the worst case for profiling; the runtime budget also subtracts - # the prompt length, so it is never larger than this. + # Worst-case transcript positions one clip can occupy, used only to size + # the encoder cache and profiling pass — NOT to bound requests. A clip + # cannot transcribe to more than the whole context (a longer prompt is + # rejected by vLLM's standard length check), so the per-clip share of the + # context window is the honest upper bound. vLLM calls this with count=1. count = mm_counts.get("audio", 1) or 1 - return { - "audio": audio_token_budget( - seq_len, self._asr_generation_reserve_tokens(), count - ) - } + return {"audio": max(1, seq_len // count)} def get_data_parser(self) -> MultiModalDataParser: # Resample incoming audio to the ASR sample rate. @@ -131,10 +127,6 @@ def _asr_max_audio_clips(self) -> int: cfg = self.get_hf_config() return int(getattr(cfg, "asr_max_audio_clips", 32) or 32) - def _asr_generation_reserve_tokens(self) -> int: - cfg = self.get_hf_config() - return int(getattr(cfg, "asr_generation_reserve_tokens", 8192) or 0) - def _asr_self_chunks(self) -> bool: cfg = self.get_hf_config() return bool(getattr(cfg, "asr_self_chunks", True)) @@ -192,9 +184,12 @@ def _transcribe( self, audio, generate_kwargs: Optional[Mapping[str, object]] = None, - budget: Optional[int] = None, ) -> list[int]: - """Transcribe one audio item to a list of token ids (capped at ``budget``). + """Transcribe one audio item to a list of token ids (full transcript). + + The transcript is spliced into the prompt as ordinary text tokens; it is + never truncated here. A clip whose transcript makes the prompt exceed the + context is rejected by vLLM's standard prompt-length check. Long audio is handled by the backend itself (Whisper) or by our encoder-agnostic chunker, per the checkpoint's ``asr_self_chunks`` flag. @@ -214,10 +209,7 @@ def _transcribe( chunk_overlap_s=self.info._asr_chunk_overlap_s(), ) tokenizer = self.info.get_tokenizer() - ids = tokenizer.encode(text, add_special_tokens=False) - # Cap to the per-clip transcript budget so the spliced sequence fits the - # context window vLLM profiled for. - return ids[:budget] if budget is not None else ids + return tokenizer.encode(text, add_special_tokens=False) def _call_hf_processor( self, @@ -244,18 +236,10 @@ def _call_hf_processor( input_ids = tokenizer.encode(prompt, add_special_tokens=False) - # Per-clip transcript budget: the served context minus the generation - # reserve and the prompt already present, split across this request's - # clips. Derived from the context window rather than a fixed cap. - budget = audio_token_budget( - self.info._max_model_len(), - self.info._asr_generation_reserve_tokens(), - len(audios), - prompt_tokens=len(input_ids), - ) - # Transcribe each audio to token ids; concatenate flat with per-item sizes. - per_item_ids = [self._transcribe(a, generate_kwargs, budget) for a in audios] + # Transcripts are spliced in full — an oversized request is rejected by + # vLLM's prompt-length check, not silently truncated here. + per_item_ids = [self._transcribe(a, generate_kwargs) for a in audios] sizes = [len(ids) for ids in per_item_ids] flat_ids = [tid for ids in per_item_ids for tid in ids] diff --git a/tests/unit/test_asr.py b/tests/unit/test_asr.py index 4bc9b81..45e5b71 100644 --- a/tests/unit/test_asr.py +++ b/tests/unit/test_asr.py @@ -113,27 +113,6 @@ def test_load_is_idempotent_when_pipeline_set(self): assert t._pipeline is sentinel -class TestAudioTokenBudget: - def test_single_clip_uses_context_minus_reserve(self): - assert asr.audio_token_budget(131072, 8192, 1) == 131072 - 8192 - - def test_split_across_clips(self): - # (131072 - 8192) // 4 - assert asr.audio_token_budget(131072, 8192, 4) == (131072 - 8192) // 4 - - def test_prompt_tokens_subtracted(self): - assert asr.audio_token_budget(8192, 4096, 2, prompt_tokens=1000) == ( - (8192 - 4096 - 1000) // 2 - ) - - def test_floors_at_one_when_no_room(self): - # Reserve exceeds context -> still at least one placeholder per clip. - assert asr.audio_token_budget(100, 200, 1) == 1 - - def test_zero_clip_count_treated_as_one(self): - assert asr.audio_token_budget(1000, 0, 0) == 1000 - - class TestChunkedTranscribe: """self_chunks=False routes through the split/transcribe/merge chunker.""" diff --git a/tests/unit/test_config.py b/tests/unit/test_config.py index 03786dc..76e5e27 100644 --- a/tests/unit/test_config.py +++ b/tests/unit/test_config.py @@ -113,7 +113,6 @@ def test_asr_defaults_off(self): def test_longaudio_defaults(self): cfg = GraniteSwitchConfig(num_adapters=0) assert cfg.asr_max_audio_clips == 32 - assert cfg.asr_generation_reserve_tokens == 8192 assert cfg.asr_chunk_length_s == 30.0 assert cfg.asr_chunk_overlap_s == 5.0 assert cfg.asr_self_chunks is True @@ -123,7 +122,6 @@ def test_longaudio_round_trip(self, tmp_path): num_adapters=0, asr_enabled=True, asr_max_audio_clips=4, - asr_generation_reserve_tokens=4096, asr_chunk_length_s=20.0, asr_chunk_overlap_s=3.0, asr_self_chunks=False, @@ -131,7 +129,6 @@ def test_longaudio_round_trip(self, tmp_path): cfg.save_pretrained(tmp_path) loaded = GraniteSwitchConfig.from_pretrained(tmp_path) assert loaded.asr_max_audio_clips == 4 - assert loaded.asr_generation_reserve_tokens == 4096 assert loaded.asr_chunk_length_s == 20.0 assert loaded.asr_chunk_overlap_s == 3.0 assert loaded.asr_self_chunks is False diff --git a/tests/vllm/test_audio_processor.py b/tests/vllm/test_audio_processor.py index f71c47d..b52224d 100644 --- a/tests/vllm/test_audio_processor.py +++ b/tests/vllm/test_audio_processor.py @@ -75,13 +75,15 @@ def test_enabled_reports_configurable_clip_limit(self): assert info3.get_supported_mm_limits() == {"audio": 3} def test_max_tokens_per_item_is_context_derived(self): - # Budget = (seq_len - generation_reserve) // clip_count (default reserve 8192). + # Profiling/encoder-cache hint = per-clip share of the context (seq_len // + # clip_count), the worst case one clip can occupy. Not a request bound — + # an oversized transcript is rejected by vLLM's prompt-length check. info = _make_info(asr_enabled=True) assert info.get_mm_max_tokens_per_item(20000, {"audio": 1}) == { - "audio": 20000 - 8192 + "audio": 20000 } assert info.get_mm_max_tokens_per_item(20000, {"audio": 4}) == { - "audio": (20000 - 8192) // 4 + "audio": 20000 // 4 } @@ -114,7 +116,6 @@ def test_pipeline_and_generate_kwargs_from_config(self): def test_longaudio_accessor_defaults(self): info = _make_info(asr_enabled=True) assert info._asr_max_audio_clips() == 32 - assert info._asr_generation_reserve_tokens() == 8192 assert info._asr_self_chunks() is True assert info._asr_chunk_length_s() == 30.0 assert info._asr_chunk_overlap_s() == 5.0 @@ -123,13 +124,11 @@ def test_longaudio_accessors_from_config(self): info = _make_info( asr_enabled=True, asr_max_audio_clips=2, - asr_generation_reserve_tokens=4096, asr_self_chunks=False, asr_chunk_length_s=20.0, asr_chunk_overlap_s=3.0, ) assert info._asr_max_audio_clips() == 2 - assert info._asr_generation_reserve_tokens() == 4096 assert info._asr_self_chunks() is False assert info._asr_chunk_length_s() == 20.0 assert info._asr_chunk_overlap_s() == 3.0 @@ -270,7 +269,7 @@ def test_text_only_request_does_not_transcribe(self, monkeypatch): class TestMultiClipAndBudget: - """#1 (multiple clips) + #2 (context-derived per-clip token budget).""" + """Multiple clips, each transcribed in full and spliced at its marker.""" def test_two_clips_produce_two_transcripts(self, monkeypatch): capture = {} @@ -291,16 +290,15 @@ def test_two_clips_produce_two_transcripts(self, monkeypatch): assert bf["audio_num_tokens"].tolist() == [3, 3] assert len(bf["audio_token_ids"]) == 6 - def test_transcribe_truncates_to_budget(self, monkeypatch): + def test_transcribe_returns_full_transcript(self, monkeypatch): + # The transcript is never truncated here — it is spliced in full and an + # oversized prompt is rejected downstream by vLLM's length check. capture = {} info = _make_info(asr_enabled=True, asr_model_id="w") proc = _make_processor(info, monkeypatch, capture) - # Override tokenizer to emit 5 ids so the budget cut is visible. info.get_tokenizer = lambda: SimpleNamespace( encode=lambda text, add_special_tokens=False: [1, 2, 3, 4, 5] ) - assert proc._transcribe(np.zeros(1600, dtype=np.float32), {}, budget=2) == [1, 2] - # No budget -> untruncated. assert proc._transcribe(np.zeros(1600, dtype=np.float32), {}) == [1, 2, 3, 4, 5] def test_self_chunks_and_chunk_params_forwarded(self, monkeypatch): From 53f385f7233b98ecb514d5d3cd4db73cd2f6c6d0 Mon Sep 17 00:00:00 2001 From: Bar Haim Date: Thu, 30 Jul 2026 13:47:00 +0300 Subject: [PATCH 16/23] ASR audio tests (#112) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * tests: cover audio/adapter coexistence, chat-template marker, empty clips, clip ceiling Signed-off-by: BAR HAIM * tests: add e2e vLLM audio serving smoke (text + adapter + audio x1/x2/x3) CI-runnable serving smoke closing the #47 e2e box. Boots a real composed, audio-enabled GraniteSwitch checkpoint under vLLM and drives text-only, adapter-control-token, and audio x1/x2/x3 requests through one live engine. Markers slow+requires_model+gpu (opt-in via -m); model built through the compose CLI with --enable-audio; synthetic audio keeps it asset-free. Verified green on an A100 with ibm-granite/granite-4.1-3b + granitelib-core-r1.0: 5 passed. Signed-off-by: BAR HAIM * tests: e2e answerability adapter over an audio-delivered document (#47) Adds the first correctness test for the "adapters + audio together" #47 box: the RAG answerability adapter judging a query against a document supplied as speech rather than text. The document is delivered as audio by placing a single <|audio|> marker as the document text (documents=[{"text": "<|audio|>"}]); the Granite template renders each document via `doc | tojson`, so the marker lands in the block exactly where vLLM's ASR processor splices the transcript — the document the adapter reasons over is the transcribed speech. The <|answerability|> control token is inserted by the same template (aLoRA fallback path), so the switch fires the adapter at the generation prompt. Ground truth comes from one real clip (hf-internal-testing/ librispeech_asr_dummy row 0), driving both classes without shipping a fixture: an answerable question whose answer is spoken, and an unanswerable one about content the clip never mentions. Both are distinctive enough to survive ASR word-errors, so the assertion tests the answerability decision, not transcription accuracy (WER is a separate box). FLAC is decoded with soundfile from the raw bytes to avoid requiring torchcodec (datasets>=4). Where test_audio_serving_smoke.py only proves an adapter control token doesn't crash the audio path, this proves the switch produces the correct verdict end-to-end through a live vLLM engine. Verified on an A100 with granite-4.1-3b + granitelib-rag-r1.0: 2 passed. Markers slow+requires_model+gpu; opt-in via pytest -m "slow and requires_model and gpu" Signed-off-by: BAR HAIM * tests: use committed local speech clip for answerability-over-audio Replace the runtime hf-internal-testing/librispeech_asr_dummy download with a committed 3s 16 kHz WAV (SpeechT5, MIT-licensed) so the test runs offline and carries clean provenance for merge-to-main. The spoken sentence states a location that distil-whisper transcribes cleanly, so the questions key on the location rather than the proper noun. Verdicts verified: 2 passed on A100 (granite-4.1-3b + granitelib-rag-r1.0). Signed-off-by: BAR HAIM * tests: sweep all default adapters route correctly with audio enabled Adds the 'all default adapters route correctly with audio enabled' coverage for issue #47. Composes the full default set (RAG + Core + Guardian) with --enable-audio and asserts the switch maps each adapter_token_ids[i] to index i+1 (pre-control positions stay on base 0), observed via the HF backend's _last_adapter_indices. For granite-4.1-3b, 12 adapters resolve (context_relevance has no 4.1-3b flavor); verified 12/12 route correctly on A100. Loads with ignore_mismatched_sizes=True: the <|audio|> token bumps vocab_size one past the switch's control_to_substitute_lut buffer, which SingleSwitch rebuilds from config, so the freshly-built buffer is kept. Signed-off-by: BAR HAIM --------- Signed-off-by: BAR HAIM --- tests/composer/test_chat_template.py | 105 +++++++- .../fixtures/eiffel_tower_paris.wav | Bin 0 -> 98348 bytes .../test_adapter_routing_audio_enabled.py | 166 +++++++++++++ .../test_answerability_over_audio.py | 208 ++++++++++++++++ tests/integration/test_audio_serving_smoke.py | 228 ++++++++++++++++++ tests/unit/test_config.py | 30 +++ tests/vllm/test_audio_processor.py | 132 ++++++++++ 7 files changed, 868 insertions(+), 1 deletion(-) create mode 100644 tests/integration/fixtures/eiffel_tower_paris.wav create mode 100644 tests/integration/test_adapter_routing_audio_enabled.py create mode 100644 tests/integration/test_answerability_over_audio.py create mode 100644 tests/integration/test_audio_serving_smoke.py diff --git a/tests/composer/test_chat_template.py b/tests/composer/test_chat_template.py index 8aededf..9ffe599 100644 --- a/tests/composer/test_chat_template.py +++ b/tests/composer/test_chat_template.py @@ -27,9 +27,13 @@ from types import SimpleNamespace from unittest.mock import patch +import pytest from jinja2 import Environment -from granite_switch.composer.tokenizer_setup import configure_chat_template +from granite_switch.composer.tokenizer_setup import ( + configure_audio_chat_template, + configure_chat_template, +) _PATCH_TARGET = "granite_switch.composer.tokenizer_setup._decode_alora_invocation_text" @@ -531,3 +535,102 @@ def test_mixed_adapters_from_adapter_config(self): assert "<|answerability|>" not in result_none assert "<|context_relevance|>" not in result_none assert "<|summarization|>" not in result_none + + +# ════════════════════════════════════════════════════════════════════ +# Audio: <|audio|> marker preservation, and coexistence with adapters +# ════════════════════════════════════════════════════════════════════ + + +def _audio_messages(text="transcribe this", audio_type="audio"): + """A user turn whose content is a parts list carrying an audio clip.""" + return [ + { + "role": "user", + "content": [ + {"type": "text", "text": text}, + {"type": audio_type, audio_type: "clip-placeholder"}, + ], + } + ] + + +class TestAudioChatTemplate: + """configure_audio_chat_template emits the <|audio|> marker for audio parts.""" + + def test_audio_part_emits_marker(self): + tokenizer = _make_tokenizer() + configure_audio_chat_template(tokenizer) + result = _render( + tokenizer, messages=_audio_messages(), add_generation_prompt=True + ) + assert "<|audio|>" in result + assert "transcribe this" in result + + def test_marker_dropped_without_injection(self): + # Regression canary: the un-injected base template drops the audio part. + tokenizer = _make_tokenizer() + result = _render( + tokenizer, messages=_audio_messages(), add_generation_prompt=True + ) + assert "<|audio|>" not in result + assert "transcribe this" in result + + def test_input_audio_and_audio_url_types_emit_marker(self): + for audio_type in ("input_audio", "audio_url"): + tokenizer = _make_tokenizer() + configure_audio_chat_template(tokenizer) + result = _render( + tokenizer, + messages=_audio_messages(audio_type=audio_type), + add_generation_prompt=True, + ) + assert "<|audio|>" in result, f"marker missing for type={audio_type!r}" + + def test_custom_marker_string(self): + tokenizer = _make_tokenizer() + configure_audio_chat_template(tokenizer, marker="<|snd|>") + result = _render( + tokenizer, messages=_audio_messages(), add_generation_prompt=True + ) + assert "<|snd|>" in result + + def test_missing_anchor_raises(self): + tokenizer = SimpleNamespace(chat_template="{{ messages }}") + with pytest.raises(ValueError, match="content-part loop"): + configure_audio_chat_template(tokenizer) + + def test_none_template_is_noop(self): + tokenizer = SimpleNamespace(chat_template=None) + configure_audio_chat_template(tokenizer) + assert tokenizer.chat_template is None + + +class TestAudioAndAdapterInjectionsCompose: + """Adapter and audio injections applied in sequence leave both intact.""" + + def test_lora_prefix_and_audio_marker_coexist(self): + tokenizer = _make_tokenizer() + configure_chat_template(tokenizer, [("/path/a", "ctx_rel", "lora")]) + configure_audio_chat_template(tokenizer) + + result = _render( + tokenizer, + messages=_audio_messages(), + add_generation_prompt=True, + adapter_name="ctx_rel", + ) + assert result.startswith("<|ctx_rel|>"), result[:80] + assert "<|audio|>" in result + assert "transcribe this" in result + + def test_no_adapter_still_emits_audio_marker(self): + tokenizer = _make_tokenizer() + configure_chat_template(tokenizer, [("/path/a", "ctx_rel", "lora")]) + configure_audio_chat_template(tokenizer) + + result = _render( + tokenizer, messages=_audio_messages(), add_generation_prompt=True + ) + assert "<|audio|>" in result + assert "<|ctx_rel|>" not in result diff --git a/tests/integration/fixtures/eiffel_tower_paris.wav b/tests/integration/fixtures/eiffel_tower_paris.wav new file mode 100644 index 0000000000000000000000000000000000000000..d88341dd181684a839cbfbe397d32a1d04cebd2c GIT binary patch literal 98348 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 literal 0 HcmV?d00001 diff --git a/tests/integration/test_adapter_routing_audio_enabled.py b/tests/integration/test_adapter_routing_audio_enabled.py new file mode 100644 index 0000000..131a01f --- /dev/null +++ b/tests/integration/test_adapter_routing_audio_enabled.py @@ -0,0 +1,166 @@ +# SPDX-License-Identifier: Apache-2.0 +"""Adapters + audio (issue #47): every default adapter routes to its own index +on an audio-enabled checkpoint. + +Composes the default adapter set (RAG + Core + Guardian) with --enable-audio and +sweeps every adapter control token that resolved, asserting the switch maps +``adapter_token_ids[i]`` to index ``i + 1`` and leaves pre-control positions on +the base (``0``) — i.e. enabling audio does not perturb the token->index map. +For granite-4.1-3b that is 12 adapters: context_relevance ships no 4.1-3b flavor, +so 12 of the 13 defined adapters resolve. Complements the single-adapter sweep in +test_switch_e2e_compose and the serve-time answerability check in +test_answerability_over_audio. + +Markers: slow + requires_model + gpu (opt-in via -m). +""" + +import importlib.util +import json +import os + +import pytest + +pytestmark = [pytest.mark.slow, pytest.mark.requires_model, pytest.mark.gpu] + +if importlib.util.find_spec("granite_switch.hf") is None: + pytest.skip("requires the HF backend ([hf] extra)", allow_module_level=True) + + +# The default adapter set is the union of the three granitelib libraries (the +# "12 adapters"): RAG + Core + Guardian. +_DEFAULT_ADAPTER_LIBRARIES = [ + "ibm-granite/granitelib-rag-r1.0", + "ibm-granite/granitelib-core-r1.0", + "ibm-granite/granitelib-guardian-r1.0", +] +_DEFAULT_BASE_MODEL_PAIRS = [ + ("ibm-granite/granite-4.1-3b", _DEFAULT_ADAPTER_LIBRARIES), +] + + +def _load_experimental_pairs(): + raw = os.environ.get("GRANITE_SWITCH_EXPERIMENTAL_MODEL_PAIRS", "") + if not raw: + return [] + try: + entries = json.loads(raw) + except json.JSONDecodeError as e: + raise ValueError( + f"GRANITE_SWITCH_EXPERIMENTAL_MODEL_PAIRS is not valid JSON: {e}\n" + f'Expected format: \'[{{"base":"/path","adapter":"/path"}}, ...]\'' + ) + # adapter may be a single library or a list of libraries. + pairs = [] + for p in entries: + adapters = p["adapter"] + pairs.append( + (p["base"], adapters if isinstance(adapters, list) else [adapters]) + ) + return pairs + + +BASE_MODEL_PAIRS = _DEFAULT_BASE_MODEL_PAIRS + _load_experimental_pairs() + +COMPOSE_TIMEOUT_S = 1800 +_SEQ_LEN = 8 +_CTRL_POS = 1 +_FILLER_TOKENS = [791, 5679, 2766, 279, 893, 389, 813, 1450] + + +@pytest.fixture( + scope="module", + params=BASE_MODEL_PAIRS, + ids=lambda p: p[0].rsplit("/", 1)[-1], +) +def audio_switch_model(request, tmp_path_factory): + import subprocess + import sys + + import torch + + from granite_switch.hf import GraniteSwitchForCausalLM + + base_model, adapter_libraries = request.param + save_dir = tmp_path_factory.mktemp(base_model.rsplit("/", 1)[-1]) / "model" + + cmd = [ + sys.executable, + "-m", + "granite_switch.composer.compose_granite_switch", + "--base-model", + base_model, + "--adapters", + *adapter_libraries, + "--enable-audio", + "--output", + str(save_dir), + ] + result = subprocess.run( + cmd, capture_output=True, text=True, timeout=COMPOSE_TIMEOUT_S + ) + if result.returncode != 0: + raise RuntimeError( + f"compose failed for base={base_model} adapters={adapter_libraries}\n" + f"--- STDOUT ---\n{result.stdout}\n--- STDERR ---\n{result.stderr}" + ) + + # ignore_mismatched_sizes: the <|audio|> token bumps vocab_size one past the + # switch's control_to_substitute_lut buffer, but that buffer is rebuilt from + # config in SingleSwitch.__init__, so the freshly-built one is kept intact. + model = ( + GraniteSwitchForCausalLM.from_pretrained( + str(save_dir), dtype=torch.bfloat16, ignore_mismatched_sizes=True + ) + .eval() + .cuda() + ) + return {"base_model": base_model, "model": model, "config": model.config} + + +def _adapter_indices_after_forward(model, control_token_id): + import torch + + seq = [_FILLER_TOKENS[i % len(_FILLER_TOKENS)] for i in range(_SEQ_LEN)] + seq[_CTRL_POS] = control_token_id + with torch.no_grad(): + model(input_ids=torch.tensor([seq], device="cuda")) + return model.model._last_adapter_indices[0] + + +def test_all_adapters_route_with_audio_enabled(audio_switch_model): + """Each adapter control token routes to its own index on an audio checkpoint.""" + config = audio_switch_model["config"] + base_model = audio_switch_model["base_model"] + + assert getattr(config, "asr_enabled", False) is True, ( + f"checkpoint is not audio-enabled (base_model={base_model})" + ) + + token_ids = list(getattr(config, "adapter_token_ids", None) or []) + names = list(getattr(config, "adapter_names", None) or []) + assert token_ids, f"composed checkpoint has no adapters (base_model={base_model})" + print(f"\n sweeping {len(token_ids)} adapters (base_model={base_model})") + + failures = [] + for i, token_id in enumerate(token_ids): + expected = i + 1 # adapter_token_ids[i] activates adapter i+1; 0 = base + name = names[i] if i < len(names) else f"adapter_{expected}" + ai = _adapter_indices_after_forward(audio_switch_model["model"], token_id) + + ok = bool((ai[:_CTRL_POS] == 0).all()) and bool( + (ai[_CTRL_POS:] == expected).all() + ) + print( + f" [{'ok' if ok else 'FAIL'}] idx {expected:>2} {name!r}: {ai.tolist()}" + ) + if not ok: + failures.append((expected, name, token_id, ai.tolist())) + + assert not failures, ( + f"{len(failures)} adapter(s) mis-routed with audio enabled " + f"(base_model={base_model}); expected pre-control=0, post-control=index:\n" + + "\n".join( + f" idx {idx} {name!r} (token {tok}): {indices}" + for idx, name, tok, indices in failures + ) + ) diff --git a/tests/integration/test_answerability_over_audio.py b/tests/integration/test_answerability_over_audio.py new file mode 100644 index 0000000..e59f11b --- /dev/null +++ b/tests/integration/test_answerability_over_audio.py @@ -0,0 +1,208 @@ +# SPDX-License-Identifier: Apache-2.0 +"""Adapters + audio: the RAG answerability adapter judging a query against a +document delivered as audio (issue #47). + +Covers the "adapters + audio" box. Where test_audio_serving_smoke.py only proves +an adapter control token doesn't crash the audio path, this checks the switch +reaches the *correct* verdict when the RAG document arrives as speech. + +Document-as-audio: ``documents=[{"text": "<|audio|>"}]`` — the Granite template +renders each document with ``doc | tojson``, so the marker lands in the +```` block where the ASR processor splices the transcript. The +``<|answerability|>`` control token is inserted by the same template (aLoRA +fallback path). Ground truth is one committed speech clip (fixtures/, generated +with SpeechT5 — MIT) driving both classes; the questions key on content that +transcribes cleanly, so this tests the decision, not transcription accuracy +(WER). + +Markers: slow + requires_model + gpu (opt-in via -m). +""" + +import importlib.util +import json +import os +from pathlib import Path + +import pytest + +pytestmark = [pytest.mark.slow, pytest.mark.requires_model, pytest.mark.gpu] + +if importlib.util.find_spec("vllm") is None: + pytest.skip("requires vLLM installed", allow_module_level=True) + + +_DEFAULT_BASE_MODEL_PAIRS = [ + ("ibm-granite/granite-4.1-3b", "ibm-granite/granitelib-rag-r1.0"), +] + + +def _load_experimental_pairs(): + """Extra (base, adapter) pairs from GRANITE_SWITCH_EXPERIMENTAL_MODEL_PAIRS. + + JSON array of {"base": str, "adapter": str}; mirrors the other E2E files. + """ + raw = os.environ.get("GRANITE_SWITCH_EXPERIMENTAL_MODEL_PAIRS", "") + if not raw: + return [] + try: + entries = json.loads(raw) + except json.JSONDecodeError as e: + raise ValueError( + f"GRANITE_SWITCH_EXPERIMENTAL_MODEL_PAIRS is not valid JSON: {e}\n" + f'Expected format: \'[{{"base":"/path","adapter":"/path"}}, ...]\'' + ) + return [(p["base"], p["adapter"]) for p in entries] + + +BASE_MODEL_PAIRS = _DEFAULT_BASE_MODEL_PAIRS + _load_experimental_pairs() + +COMPOSE_TIMEOUT_S = 1800 # matches the other E2E compose fixtures +_AUDIO_MARKER = "<|audio|>" + +# Committed speech clip; spoken sentence is "The Eiffel Tower is located in the +# city of Paris in France." The location words transcribe cleanly (the proper +# noun does not, hence the questions key on the location, not the name). +_AUDIO_FIXTURE = Path(__file__).parent / "fixtures" / "eiffel_tower_paris.wav" +_ANSWERABILITY_CASES = [ + ("In which city is the tower located?", "answerable"), + ("What is the boiling point of water?", "unanswerable"), +] + + +@pytest.fixture( + scope="module", + params=BASE_MODEL_PAIRS, + ids=lambda p: p[0].rsplit("/", 1)[-1], +) +def audio_rag_checkpoint(request, tmp_path_factory): + """Compose one audio-enabled RAG checkpoint per (base, adapter) pair.""" + import subprocess + import sys + + base_model, adapter_library = request.param + save_dir = tmp_path_factory.mktemp(base_model.rsplit("/", 1)[-1]) / "model" + + cmd = [ + sys.executable, + "-m", + "granite_switch.composer.compose_granite_switch", + "--base-model", + base_model, + "--adapters", + adapter_library, + "--enable-audio", + "--output", + str(save_dir), + ] + result = subprocess.run( + cmd, capture_output=True, text=True, timeout=COMPOSE_TIMEOUT_S + ) + if result.returncode != 0: + raise RuntimeError( + f"compose failed for base={base_model} adapter={adapter_library}\n" + f"--- STDOUT ---\n{result.stdout}\n--- STDERR ---\n{result.stderr}" + ) + return {"base_model": base_model, "save_dir": save_dir} + + +@pytest.fixture(scope="module") +def served(audio_rag_checkpoint): + """Boot vLLM once for the checkpoint and share it across the cases.""" + import gc + + import torch + + os.environ.setdefault("VLLM_WORKER_MULTIPROC_METHOD", "spawn") + from vllm import LLM + + llm = LLM( + model=str(audio_rag_checkpoint["save_dir"]), + dtype="bfloat16", + gpu_memory_utilization=0.7, + enforce_eager=True, + ) + try: + yield { + "llm": llm, + "config": llm.llm_engine.model_config.hf_config, + "tokenizer": llm.get_tokenizer(), + } + finally: + del llm + gc.collect() + torch.cuda.empty_cache() + + +def _answerability_adapter_name(config): + # Discovery derives the name from the library layout — match rather than + # hard-code, and skip loudly if this checkpoint has no answerability adapter. + names = list(getattr(config, "adapter_names", None) or []) + for name in names: + if "answerab" in name.lower(): + return name + pytest.skip(f"no answerability adapter in composed checkpoint (adapters={names})") + + +@pytest.fixture(scope="module") +def speech_clip(): + """The committed 16 kHz mono speech clip as (waveform, sample_rate).""" + import soundfile as sf + + waveform, sr = sf.read(_AUDIO_FIXTURE, dtype="float32") + if waveform.ndim > 1: + waveform = waveform.mean(axis=1) + return {"waveform": waveform, "sr": sr} + + +def _build_answerability_prompt(tokenizer, adapter_name, question): + # documents=[{"text": "<|audio|>"}] places one audio marker in the template's + # block; adapter_name arms the answerability control-token insert. + return tokenizer.apply_chat_template( + [{"role": "user", "content": question}], + documents=[{"text": _AUDIO_MARKER}], + add_generation_prompt=True, + adapter_name=adapter_name, + tokenize=False, + ) + + +def _parse_label(text): + # Adapter emits the bare enum ("answerable"/"unanswerable"), maybe quoted. + # Match the longer label first so "answerable" doesn't shadow "unanswerable". + norm = text.strip().strip('"').strip().lower() + if "unanswerable" in norm: + return "unanswerable" + if "answerable" in norm: + return "answerable" + return norm # unrecognized — surfaced by the assertion + + +@pytest.mark.parametrize( + "question,expected", + _ANSWERABILITY_CASES, + ids=[c[1] for c in _ANSWERABILITY_CASES], +) +def test_answerability_over_audio_document(served, speech_clip, question, expected): + """Answerability adapter reaches the correct verdict on an audio document.""" + from vllm import SamplingParams + + adapter_name = _answerability_adapter_name(served["config"]) + prompt = _build_answerability_prompt(served["tokenizer"], adapter_name, question) + + outputs = served["llm"].generate( + { + "prompt": prompt, + "multi_modal_data": { + "audio": [(speech_clip["waveform"], speech_clip["sr"])] + }, + }, + SamplingParams(max_tokens=8, temperature=0.0), + ) + + assert len(outputs) == 1 + raw = outputs[0].outputs[0].text + label = _parse_label(raw) + assert label == expected, ( + f"answerability mismatch for {question!r}: got {label!r} " + f"(raw={raw!r}), expected {expected!r}" + ) diff --git a/tests/integration/test_audio_serving_smoke.py b/tests/integration/test_audio_serving_smoke.py new file mode 100644 index 0000000..b1eb3a6 --- /dev/null +++ b/tests/integration/test_audio_serving_smoke.py @@ -0,0 +1,228 @@ +# SPDX-License-Identifier: Apache-2.0 +"""End-to-end vLLM serving smoke for the audio cascade (issue #47). + +Boots a real composed, audio-enabled GraniteSwitch checkpoint under vLLM and +drives the three request shapes the #47 checklist calls out as the serving +smoke — **text + adapter + audio x1/x2/x3** — through one live engine. This is +the path the low-level tests deliberately bypass (CUDA graphs, torch.compile, +the ASR processor running inside vLLM's EngineCore subprocess, the multi-clip +splice, and generation), so it is the only test that proves those pieces +compose at serve time. + +Scope is a *smoke*: each request must complete and return well-formed output, +and multi-clip requests must be accepted up to the checkpoint's declared clip +ceiling. It intentionally does NOT assert transcript content — transcription +quality (WER) and adapter-routing correctness are separate #47 boxes covered by +the eval harness and `test_switch_e2e_compose.py` respectively. Synthetic audio +keeps the test asset-free; a silent/tonal clip exercises the serving plumbing +without shipping a speech fixture. + +Model construction goes through the compose CLI (CLAUDE.md gotcha #5): no test +hand-assembles a config. Audio is enabled with `--enable-audio`, which defaults +the ASR front-end to the small built-in model (distil-whisper/distil-small.en) +to keep CI cost down. + +Markers: @pytest.mark.slow + @pytest.mark.requires_model + @pytest.mark.gpu. +CI must opt in explicitly: `pytest -m "slow and requires_model and gpu"`. +""" + +import importlib.util +import json +import os + +import pytest + +pytestmark = [pytest.mark.slow, pytest.mark.requires_model, pytest.mark.gpu] + +if importlib.util.find_spec("vllm") is None: + pytest.skip("requires vLLM installed", allow_module_level=True) + + +# ---------------------------------------------------------------------------- +# Base-model / adapter-library pairs — kept in lockstep with +# tests/integration/test_switch_e2e_compose.py so the two E2E files exercise +# the same model matrix. A fast CI profile can pin one pair via -k or the +# experimental env var below. +# ---------------------------------------------------------------------------- + +_DEFAULT_BASE_MODEL_PAIRS = [ + ("ibm-granite/granite-4.0-micro", "ibm-granite/granitelib-core-r1.0"), + ("ibm-granite/granite-4.1-3b", "ibm-granite/granitelib-core-r1.0"), +] + + +def _load_experimental_pairs(): + """Local/experimental pairings from GRANITE_SWITCH_EXPERIMENTAL_MODEL_PAIRS. + + JSON array of {"base": str, "adapter": str}; base/adapter may be HF ids or + local paths. The mechanism is committed; the values are not. Mirrors + test_switch_e2e_compose.py so both E2E files share one extension knob. + """ + raw = os.environ.get("GRANITE_SWITCH_EXPERIMENTAL_MODEL_PAIRS", "") + if not raw: + return [] + try: + entries = json.loads(raw) + except json.JSONDecodeError as e: + raise ValueError( + f"GRANITE_SWITCH_EXPERIMENTAL_MODEL_PAIRS is not valid JSON: {e}\n" + f'Expected format: \'[{{"base":"/path","adapter":"/path"}}, ...]\'' + ) + return [(p["base"], p["adapter"]) for p in entries] + + +BASE_MODEL_PAIRS = _DEFAULT_BASE_MODEL_PAIRS + _load_experimental_pairs() + +COMPOSE_TIMEOUT_S = 1800 # 30 min — matches test_switch_e2e_compose.py +_TARGET_SR = 16_000 + + +@pytest.fixture( + scope="module", + params=BASE_MODEL_PAIRS, + ids=lambda p: p[0].rsplit("/", 1)[-1], +) +def audio_checkpoint(request, tmp_path_factory): + """Compose one audio-enabled checkpoint per (base, adapter) pair. + + Delegates to the compose CLI (same as test_switch_e2e_compose.py) with + `--enable-audio`, then returns the save dir. Module scope amortizes the + download-dominated first run across every smoke case for the pair. + """ + import subprocess + import sys + + base_model, adapter_library = request.param + save_dir = tmp_path_factory.mktemp(base_model.rsplit("/", 1)[-1]) / "model" + + cmd = [ + sys.executable, + "-m", + "granite_switch.composer.compose_granite_switch", + "--base-model", + base_model, + "--adapters", + adapter_library, + "--enable-audio", + "--output", + str(save_dir), + ] + result = subprocess.run( + cmd, capture_output=True, text=True, timeout=COMPOSE_TIMEOUT_S + ) + if result.returncode != 0: + raise RuntimeError( + f"compose failed for base={base_model} adapter={adapter_library}\n" + f"--- STDOUT ---\n{result.stdout}\n--- STDERR ---\n{result.stderr}" + ) + return {"base_model": base_model, "save_dir": save_dir} + + +@pytest.fixture(scope="module") +def served(audio_checkpoint): + """Boot vLLM once for the checkpoint and share it across smoke cases. + + Tokenizer init stays ON (unlike the argmax-equivalence test): the ASR + processor needs a tokenizer to encode both the prompt and the transcript, + and the adapter case needs it to tokenize text around the control token. + """ + import gc + + import torch + + os.environ.setdefault("VLLM_WORKER_MULTIPROC_METHOD", "spawn") + from vllm import LLM + + llm = LLM( + model=str(audio_checkpoint["save_dir"]), + dtype="bfloat16", + gpu_memory_utilization=0.7, + enforce_eager=True, # smoke: skip CUDA-graph capture for a faster boot + ) + try: + yield {"llm": llm, "config": llm.llm_engine.model_config.hf_config} + finally: + del llm + gc.collect() + torch.cuda.empty_cache() + + +def _tone(seconds: float = 1.0, freq: float = 440.0): + """Deterministic mono 16 kHz waveform (no speech fixture needed).""" + import numpy as np + + t = np.arange(int(seconds * _TARGET_SR), dtype=np.float32) / _TARGET_SR + return (0.1 * np.sin(2 * np.pi * freq * t)).astype(np.float32) + + +def _one_completion(outputs): + """Assert a single RequestOutput carrying at least one generated token.""" + assert len(outputs) == 1 + completion = outputs[0].outputs[0] + assert len(completion.token_ids) >= 1 + return completion + + +def test_text_only_serving(served): + """Baseline: a plain text request serves normally (backward-compat).""" + from vllm import SamplingParams + + outputs = served["llm"].generate( + "The capital of France is", + SamplingParams(max_tokens=8, temperature=0.0), + ) + _one_completion(outputs) + + +def test_adapter_control_token_serving(served): + """An adapter control token routes through the switch under serving. + + Correctness of the routing is `test_switch_e2e_compose.py`'s job; here we + only prove the switch path runs end-to-end in the live engine without + crashing and still generates. + """ + from vllm import SamplingParams + from vllm.inputs import TokensPrompt + + config = served["config"] + if not getattr(config, "adapter_token_ids", None): + pytest.skip("composed checkpoint has no adapters") + + tokenizer = served["llm"].get_tokenizer() + text_ids = tokenizer.encode("Summarize the document.", add_special_tokens=False) + # LORA control tokens sit at the sequence start (CLAUDE.md gotcha #3). + prompt = TokensPrompt(prompt_token_ids=[config.adapter_token_ids[0], *text_ids]) + + outputs = served["llm"].generate( + prompt, SamplingParams(max_tokens=8, temperature=0.0) + ) + _one_completion(outputs) + + +@pytest.mark.parametrize("num_clips", [1, 2, 3]) +def test_audio_clip_serving(served, num_clips): + """Audio x1/x2/x3: N markers + N clips transcribe, splice, and generate. + + Exercises the multi-clip long-audio serving path through the ASR processor + running inside vLLM's engine subprocess. Content is not asserted (WER is a + separate #47 box); the bar is a completed request with well-formed output. + """ + from vllm import SamplingParams + + ceiling = int(getattr(served["config"], "asr_max_audio_clips", 32) or 32) + if num_clips > ceiling: + pytest.skip(f"checkpoint clip ceiling {ceiling} < {num_clips}") + + marker = "<|audio|>" + prompt = { + "prompt": marker * num_clips + " What was said?", + "multi_modal_data": { + "audio": [ + (_tone(freq=220.0 * (i + 1)), _TARGET_SR) for i in range(num_clips) + ] + }, + } + outputs = served["llm"].generate( + prompt, SamplingParams(max_tokens=8, temperature=0.0) + ) + _one_completion(outputs) diff --git a/tests/unit/test_config.py b/tests/unit/test_config.py index cdc65a3..f25e2a7 100644 --- a/tests/unit/test_config.py +++ b/tests/unit/test_config.py @@ -158,3 +158,33 @@ def test_asr_kwargs_round_trip(self, tmp_path): assert loaded.asr_model_id == "openai/whisper-large-v3" assert loaded.asr_pipeline_kwargs == {"chunk_length_s": 15, "batch_size": 4} assert loaded.asr_generate_kwargs == {"language": "de", "task": "transcribe"} + + def test_adapters_and_audio_coexist_round_trip(self, tmp_path): + """Adapters and the audio cascade coexist and survive save→load.""" + cfg = GraniteSwitchConfig( + **_valid_kwargs(num_adapters=3), + asr_enabled=True, + asr_model_id="distil-whisper/distil-small.en", + asr_max_audio_clips=4, + ) + assert cfg.num_adapters == 3 + assert cfg.adapter_token_ids == [500, 501, 502] + assert cfg.asr_enabled is True + + cfg.save_pretrained(tmp_path) + loaded = GraniteSwitchConfig.from_pretrained(tmp_path) + assert loaded.num_adapters == 3 + assert loaded.adapter_token_ids == [500, 501, 502] + assert loaded.adapter_names == ["adapter_0", "adapter_1", "adapter_2"] + assert loaded.adapter_ranks == [8, 8, 8] + assert loaded.adapter_substitute_token_ids == [1, 1, 1] + assert loaded.asr_enabled is True + assert loaded.asr_model_id == "distil-whisper/distil-small.en" + assert loaded.asr_max_audio_clips == 4 + + def test_adapter_token_ids_do_not_collide_with_reserved_audio_row(self, tmp_path): + """Enabling audio does not perturb adapter token ids.""" + before = GraniteSwitchConfig(**_valid_kwargs(num_adapters=2)) + after = GraniteSwitchConfig(**_valid_kwargs(num_adapters=2), asr_enabled=True) + assert before.adapter_token_ids == after.adapter_token_ids + assert before.adapter_substitute_token_ids == after.adapter_substitute_token_ids diff --git a/tests/vllm/test_audio_processor.py b/tests/vllm/test_audio_processor.py index 5a69136..2d81f3d 100644 --- a/tests/vllm/test_audio_processor.py +++ b/tests/vllm/test_audio_processor.py @@ -315,3 +315,135 @@ def test_self_chunks_and_chunk_params_forwarded(self, monkeypatch): assert capture["self_chunks"] is False assert capture["chunk_length_s"] == 20.0 assert capture["chunk_overlap_s"] == 3.0 + + +def _make_processor_transcribing(info, monkeypatch, text, *, ids_for): + """Processor whose transcriber returns a fixed ``text``; ``ids_for`` maps it to ids.""" + info.get_tokenizer = lambda: SimpleNamespace( + encode=lambda t, add_special_tokens=False: ids_for(t) + ) + proc = object.__new__(GraniteSwitchASRMultiModalProcessor) + proc.info = info + + class FakeTranscriber: + def transcribe( + self, + audio, + sampling_rate=None, + generate_kwargs=None, + self_chunks=True, + chunk_length_s=30.0, + chunk_overlap_s=5.0, + ): + return text + + monkeypatch.setattr( + proc_mod, + "get_transcriber", + lambda model_id=None, device="cpu", pipeline_kwargs=None: FakeTranscriber(), + ) + return proc + + +class TestEmptyAndSilentClip: + """A silent clip transcribes to "" -> zero transcript tokens, marker elided.""" + + def _ids_for(self, text): + return [] if text == "" else [1, 2, 3] + + def test_empty_transcript_yields_zero_length_item(self, monkeypatch): + import torch + + info = _make_info(asr_enabled=True, asr_model_id="w") + proc = _make_processor_transcribing( + info, monkeypatch, "", ids_for=self._ids_for + ) + + bf = proc._call_hf_processor( + prompt="<|audio|>", + mm_data={"audios": [np.zeros(1600, dtype=np.float32)]}, + mm_kwargs={}, + tok_kwargs={}, + ) + assert bf["audio_num_tokens"].tolist() == [0] + assert len(bf["audio_token_ids"]) == 0 + assert bf["audio_token_ids"].dtype == torch.long + + def test_empty_clip_replacement_is_empty(self, monkeypatch): + info = _make_info(asr_enabled=True, asr_model_id="w") + proc = _make_processor_transcribing( + info, monkeypatch, "", ids_for=self._ids_for + ) + + class _Kwargs: + def __init__(self, data): + self._data = data + + def get_data(self): + return self._data + + import torch + + out = _Kwargs( + { + "audio_num_tokens": torch.tensor([0], dtype=torch.long), + "audio_token_ids": torch.zeros(0, dtype=torch.long), + } + ) + updates = proc._get_prompt_updates(None, {}, out) + assert len(updates) == 1 + assert updates[0].replacement(0) == [] + + def test_mixed_empty_and_nonempty_clips(self, monkeypatch): + info = _make_info(asr_enabled=True, asr_max_audio_clips=4, asr_model_id="w") + texts = iter(["", "words"]) + info.get_tokenizer = lambda: SimpleNamespace( + encode=lambda t, add_special_tokens=False: self._ids_for(t) + ) + proc = object.__new__(GraniteSwitchASRMultiModalProcessor) + proc.info = info + + class FakeTranscriber: + def transcribe(self, audio, **kw): + return next(texts) + + monkeypatch.setattr( + proc_mod, + "get_transcriber", + lambda model_id=None, device="cpu", pipeline_kwargs=None: FakeTranscriber(), + ) + + bf = proc._call_hf_processor( + prompt="<|audio|> <|audio|>", + mm_data={ + "audios": [ + np.zeros(1600, dtype=np.float32), + np.zeros(1600, dtype=np.float32), + ] + }, + mm_kwargs={}, + tok_kwargs={}, + ) + assert bf["audio_num_tokens"].tolist() == [0, 3] + assert len(bf["audio_token_ids"]) == 3 + + +class TestClipCeiling: + """get_supported_mm_limits publishes asr_max_audio_clips as the clip ceiling.""" + + def test_ceiling_equals_configured_max(self): + assert _make_info(asr_enabled=True).get_supported_mm_limits() == {"audio": 32} + assert _make_info( + asr_enabled=True, asr_max_audio_clips=1 + ).get_supported_mm_limits() == {"audio": 1} + assert _make_info( + asr_enabled=True, asr_max_audio_clips=8 + ).get_supported_mm_limits() == {"audio": 8} + + def test_per_item_bound_never_exceeds_context(self): + info = _make_info(asr_enabled=True, asr_max_audio_clips=32) + seq_len = 4096 + for count in (1, 2, 8, 32): + bound = info.get_mm_max_tokens_per_item(seq_len, {"audio": count})["audio"] + assert bound == seq_len // count + assert bound <= seq_len From 68071b90b0bb302b9de6c1aff1e3719523d2d7f8 Mon Sep 17 00:00:00 2001 From: BAR HAIM Date: Thu, 30 Jul 2026 15:53:58 +0000 Subject: [PATCH 17/23] audio: make ASR dtype configurable; trim comment density Add a first-class asr_dtype config field so the precision the ASR weights load in is tunable per checkpoint instead of hardcoded. Previously ASRTranscriber.load() always requested float16, which crashes any encoder with BatchNorm layers ("Expected weight to have type Float but got Half") because BatchNorm will not promote a float16 weight against float32 features. The only escape was to smuggle torch_dtype through asr_pipeline_kwargs, which is opaque and undocumented. asr_dtype accepts auto/float16/bfloat16/float32 and is validated in GraniteSwitchConfig.__init__ so a typo fails at compose time rather than inside a vLLM worker. None/"auto" preserves today's behavior: float16 on CUDA, float32 elsewhere. asr_pipeline_kwargs still merges last and therefore still wins, so existing checkpoints that use the torch_dtype workaround are unaffected. Also exposed as --asr-dtype on the compose CLI (implies --enable-audio) and documented in docs/AUDIO.md. Separately, reduce comment and docstring volume across the audio modules and their tests. Much of it restated the code or duplicated docs/AUDIO.md; what remains is the comments carrying information the code cannot, such as why kwargs.update must come last and why requires_raw_input_tokens is set. Note tests/vllm/test_audio_processor.py: three transcriber stubs did not accept the new dtype kwarg and failed once processor.py started passing it. Fixed, plus two tests asserting the dtype actually reaches get_transcriber. Signed-off-by: BAR HAIM --- docs/AUDIO.md | 7 + .../composer/compose_granite_switch.py | 17 +- src/granite_switch/config.py | 103 +++++------ src/granite_switch/vllm/audio/__init__.py | 12 +- src/granite_switch/vllm/audio/asr.py | 162 ++++++++---------- src/granite_switch/vllm/audio/chunking.py | 54 ++---- src/granite_switch/vllm/audio/processor.py | 91 +++------- .../vllm/granite_switch_model.py | 11 +- .../test_adapter_routing_audio_enabled.py | 14 +- .../test_answerability_over_audio.py | 33 ++-- tests/integration/test_audio_serving_smoke.py | 65 +++---- tests/unit/test_asr.py | 84 ++++++++- tests/unit/test_config.py | 12 ++ tests/vllm/test_audio_processor.py | 49 +++--- 14 files changed, 342 insertions(+), 372 deletions(-) diff --git a/docs/AUDIO.md b/docs/AUDIO.md index de64363..c05166d 100644 --- a/docs/AUDIO.md +++ b/docs/AUDIO.md @@ -33,6 +33,13 @@ settings into `config.json` so the checkpoint is self-describing: `openai/whisper-small` for multilingual. - `asr_device` — `cpu` (default) keeps vLLM's GPU KV-cache budget clean; set `--asr-device cuda:0` to run transcription on GPU (watch GPU memory). +- `asr_dtype` — precision the ASR weights load in. Unset (default) derives it + from the device: `float16` on CUDA, `float32` on CPU. Half precision halves + the ASR weight footprint and is what the Whisper-family defaults expect, but + it is not universally safe — an encoder with **BatchNorm** layers raises + `Expected weight to have type Float but got Half`, since BatchNorm will not + promote a float16 weight against float32 features. Such a checkpoint needs + `--asr-dtype float32`. Accepted: `auto`, `float16`, `bfloat16`, `float32`. Audio capability is **gated per checkpoint** by `asr_enabled`: a checkpoint built without `--enable-audio` reports no audio modality and never loads the ASR model. diff --git a/src/granite_switch/composer/compose_granite_switch.py b/src/granite_switch/composer/compose_granite_switch.py index 3ec4587..426f5bb 100755 --- a/src/granite_switch/composer/compose_granite_switch.py +++ b/src/granite_switch/composer/compose_granite_switch.py @@ -67,6 +67,7 @@ configure_chat_template, get_alora_first_invocation_token_id, ) +from granite_switch.config import ASR_DTYPES # --------------------------------------------------------------------------- # Utility helpers (kept local — not worth a separate module) @@ -589,6 +590,16 @@ def _compose_argparser(): help="Device the ASR model runs on (default: cpu). Use e.g. cuda:0 to " "run transcription on GPU (watch vLLM's KV-cache memory budget).", ) + parser.add_argument( + "--asr-dtype", + type=str, + default=None, + choices=ASR_DTYPES, + help="Precision the ASR weights load in. Default derives it from " + "--asr-device (float16 on CUDA, float32 on CPU); set float32 for an " + "encoder that cannot run in half precision (e.g. one with BatchNorm). " + "Implies --enable-audio.", + ) parser.add_argument( "--asr-pipeline-kwargs", type=json.loads, @@ -852,6 +863,7 @@ def build(): audio_enabled = ( args.enable_audio or args.asr_model is not None + or args.asr_dtype is not None or args.asr_pipeline_kwargs is not None or args.asr_generate_kwargs is not None or args.asr_max_audio_clips is not None @@ -934,6 +946,7 @@ def build(): model.config.asr_enabled = True model.config.asr_model_id = args.asr_model model.config.asr_device = args.asr_device + model.config.asr_dtype = args.asr_dtype # Optional pipeline-construction extras and default decode kwargs. Only # set when provided so the config stays minimal for the common case. if args.asr_pipeline_kwargs is not None: @@ -953,7 +966,9 @@ def build(): print( f" Audio cascade enabled " f"(asr_model_id={args.asr_model or 'default'}, " - f"asr_device={args.asr_device}, audio_token_id={audio_token_id}, " + f"asr_device={args.asr_device}, " + f"asr_dtype={args.asr_dtype or 'auto'}, " + f"audio_token_id={audio_token_id}, " f"pipeline_kwargs={args.asr_pipeline_kwargs or {}}, " f"generate_kwargs={args.asr_generate_kwargs or {}}, " f"max_audio_clips={args.asr_max_audio_clips or 'default'}, " diff --git a/src/granite_switch/config.py b/src/granite_switch/config.py index 38c20cd..cc788d8 100644 --- a/src/granite_switch/config.py +++ b/src/granite_switch/config.py @@ -3,6 +3,9 @@ from transformers import GraniteMoeHybridConfig +# Accepted asr_dtype values. Keep in sync with vllm.audio.asr._ASR_DTYPE_NAMES. +ASR_DTYPES = ("auto", "float16", "bfloat16", "float32") + class GraniteSwitchConfig(GraniteMoeHybridConfig): """Configuration class for GraniteSwitch model. @@ -37,56 +40,38 @@ class GraniteSwitchConfig(GraniteMoeHybridConfig): Module groups: "qkv_proj", "o_proj", "shared_input_linear", "shared_output_linear". Default: all four groups - Audio (ASR) preprocessing parameters: - asr_enabled (bool): When True, the vLLM backend registers an audio - multimodal preprocessor that transcribes audio inputs to text and - splices the transcript tokens into the prompt before the decoder - runs. The decoder itself is unchanged and only ever sees text - tokens. Default: False. - asr_model_id (Optional[str]): HuggingFace id of the speech-to-text - model the preprocessor loads. When None and asr_enabled is True, - the backend falls back to a small built-in default. This makes the - checkpoint self-describing about which ASR front-end it expects. + Audio (ASR) preprocessing parameters (see docs/AUDIO.md): + asr_enabled (bool): Register the audio preprocessor that transcribes + audio and splices the transcript into the prompt. Default: False. + asr_model_id (Optional[str]): HF id of the speech-to-text model. None + falls back to a small built-in default. asr_device (str): Device the ASR model runs on. Default "cpu" keeps - vLLM's GPU KV-cache budget clean; set to a CUDA device to trade GPU - memory for transcription latency. - asr_pipeline_kwargs (Optional[dict]): Extra keyword arguments merged - into the ``transformers.pipeline(...)`` construction call for the - ASR model (e.g. ``{"chunk_length_s": 15}``). These affect how the - pipeline is built, so they are baked into the transcriber cache - key. None means "no extras". Default: None. - asr_generate_kwargs (Optional[dict]): Default decode-time keyword - arguments passed to the ASR model on every transcription (e.g. - ``{"language": "de", "task": "transcribe"}`` for a multilingual - Whisper). Applied at call time, so a single loaded pipeline can be - reused; per-request values (via ``mm_processor_kwargs``) override - these. Ignored by models that do not generate (e.g. CTC). Default: - None. - asr_max_audio_clips (int): Maximum number of audio clips accepted in a - single request. Each clip's transcript is spliced at its own - ``<|audio|>`` marker. vLLM enforces this as the modality ceiling - (``--limit-mm-per-prompt`` may lower it, not raise it). For the - cascade the clips cost no extra KV (transcripts are ordinary text - tokens bounded by the context window); the ceiling mainly guards - against one request triggering an unbounded number of synchronous - ASR transcriptions, and bounds the startup profiling pass. Default: - 32. - asr_chunk_length_s (float): Window length (seconds) our own long-audio - chunker splits a clip into before transcribing each window. Only - used for backends that do not self-chunk (see asr_self_chunks); the - default Whisper backend chunks internally and ignores this. Default: - 30.0. - asr_chunk_overlap_s (float): Overlap (seconds) between consecutive - chunker windows, so words straddling a boundary are whole in at - least one window; the transcript merge de-duplicates the overlap. - Only used when asr_self_chunks is False. Default: 5.0. - asr_self_chunks (bool): Whether the ASR backend handles long audio - itself. True for the Whisper pipeline (its internal - ``chunk_length_s`` does timestamp-based stitching, higher quality - than our text-level merge), so our chunker is bypassed. Set False - for a backend with a fixed input window (e.g. a future speech - encoder) to route audio through our encoder-agnostic - split/transcribe/merge chunker. Default: True. + vLLM's GPU KV-cache budget clean. + asr_dtype (Optional[str]): Precision the ASR weights load in, one of + ASR_DTYPES. None/"auto" derives it from asr_device (float16 on + CUDA). An encoder with BatchNorm layers must set "float32". + Default: None. + asr_pipeline_kwargs (Optional[dict]): Extra kwargs merged into the + ``transformers.pipeline(...)`` construction, e.g. + ``{"chunk_length_s": 15}``. Baked into the transcriber cache key. + Default: None. + asr_generate_kwargs (Optional[dict]): Default decode-time kwargs, e.g. + ``{"language": "de"}``. Applied per call, so one pipeline is + reused; per-request ``mm_processor_kwargs`` override them. Ignored + by non-generative backends. Default: None. + asr_max_audio_clips (int): Max audio clips per request. Bounds the + synchronous transcriptions one request can trigger and the startup + profiling pass; ``--limit-mm-per-prompt`` may lower it, not raise + it. Default: 32. + asr_chunk_length_s (float): Chunker window length in seconds. Only + used when asr_self_chunks is False. Default: 30.0. + asr_chunk_overlap_s (float): Overlap in seconds between chunker + windows, de-duplicated by the transcript merge. Only used when + asr_self_chunks is False. Default: 5.0. + asr_self_chunks (bool): True when the backend chunks long audio + itself (Whisper's timestamp stitching beats our text-level merge), + bypassing our chunker. False routes audio through the + split/transcribe/merge chunker instead. Default: True. **kwargs: Additional arguments passed to GraniteConfig. """ @@ -109,6 +94,7 @@ def __init__( asr_enabled: bool = False, asr_model_id: str | None = None, asr_device: str = "cpu", + asr_dtype: str | None = None, asr_pipeline_kwargs: dict | None = None, asr_generate_kwargs: dict | None = None, asr_max_audio_clips: int = 32, @@ -195,22 +181,19 @@ def __init__( self.switch_head_dim = switch_head_dim self.fused_add_norm = fused_add_norm - # Audio (ASR) preprocessing parameters. - # The decoder is oblivious to audio: when enabled, the vLLM backend's - # multimodal preprocessor transcribes audio to text and injects the - # transcript tokens into the prompt before embedding. These fields make - # the checkpoint self-describing about its ASR front-end. + # Audio (ASR) preprocessing. The decoder is oblivious to audio; these + # fields make the checkpoint self-describing about its ASR front-end. self.asr_enabled = asr_enabled self.asr_model_id = asr_model_id self.asr_device = asr_device - # Pipeline-construction extras (affect the built pipeline → cache key) - # and default decode kwargs (applied per call, per-request overridable). + # Validated here so a typo fails at compose time, not in a vLLM worker. + if asr_dtype is not None and asr_dtype not in ASR_DTYPES: + raise ValueError( + f"asr_dtype must be one of {ASR_DTYPES} or None, got {asr_dtype!r}" + ) + self.asr_dtype = asr_dtype self.asr_pipeline_kwargs = asr_pipeline_kwargs self.asr_generate_kwargs = asr_generate_kwargs - # Long-audio / multi-clip preprocessing. The transcript is spliced into - # the prompt as ordinary text tokens; a clip that makes the prompt exceed - # the context is rejected by vLLM's standard length check (no truncation). - # The chunker settings only apply to backends that do not self-chunk. if asr_max_audio_clips < 1: raise ValueError( f"asr_max_audio_clips must be >= 1, got {asr_max_audio_clips}" diff --git a/src/granite_switch/vllm/audio/__init__.py b/src/granite_switch/vllm/audio/__init__.py index 486bc25..feab7ce 100644 --- a/src/granite_switch/vllm/audio/__init__.py +++ b/src/granite_switch/vllm/audio/__init__.py @@ -1,16 +1,8 @@ # SPDX-License-Identifier: Apache-2.0 """Audio (ASR) preprocessing for the Granite Switch vLLM backend. -This package implements the **alpha** audio pathway: a speech-to-text *cascade*. -Audio is transcribed to text by a small ASR model and the transcript tokens are -spliced into the prompt before the decoder runs. The Granite Switch decoder is -unchanged and only ever sees text tokens — there is no in-model audio encoder yet -(that is deferred future work: a trained projection from Granite Speech encoder -embeddings into Granite token space). - -The ASR backend (:mod:`asr`) deliberately has no vLLM dependency so it can be -unit-tested on CPU and reused by either the multimodal-processor integration or a -fallback entrypoint wrapper. +Speech-to-text cascade: audio is transcribed and the transcript tokens are +spliced into the prompt, so the decoder only ever sees text. See docs/AUDIO.md. """ from .asr import DEFAULT_ASR_MODEL_ID, ASRTranscriber, transcribe diff --git a/src/granite_switch/vllm/audio/asr.py b/src/granite_switch/vllm/audio/asr.py index d58ea8d..b95085a 100644 --- a/src/granite_switch/vllm/audio/asr.py +++ b/src/granite_switch/vllm/audio/asr.py @@ -1,23 +1,12 @@ # SPDX-License-Identifier: Apache-2.0 -"""Speech-to-text backend for the alpha audio cascade. - -A thin wrapper around a HuggingFace ASR model that turns raw audio into a -transcript string. Kept free of any vLLM import so it can be unit-tested on CPU -and reused by both the multimodal-processor integration and a fallback wrapper. - -Design notes: - * The model is loaded **lazily** on first use and cached per (model_id, - device) so engine startup stays cheap and a process loads each ASR model - at most once. - * Default device is CPU — this keeps vLLM's GPU KV-cache budget clean. Set a - CUDA device to trade GPU memory for transcription latency. - * The default model is a small, text-emitting open-source ASR model. The - alpha intentionally uses a complete audio->text model (encoder+decoder); - swapping in the Granite Speech 4.1 encoder is future work and only touches - this module. - * ``transcribe`` accepts the audio item shapes vLLM hands to multimodal - processors: a bare array, an ``(array, sampling_rate)`` tuple, a Python - list of floats, or a torch tensor. +"""Speech-to-text backend for the audio cascade. + +Wraps a HuggingFace ASR pipeline. Free of any vLLM import so it unit-tests on +CPU. The model loads lazily and is cached per (model_id, device, dtype, +pipeline_kwargs), so a process loads each ASR model at most once. + +Device defaults to CPU to keep vLLM's GPU KV-cache budget clean; dtype follows +the device unless a checkpoint sets ``asr_dtype``. See docs/AUDIO.md. """ from __future__ import annotations @@ -32,6 +21,43 @@ # checkpoint does not name its own (config.asr_model_id is None). DEFAULT_ASR_MODEL_ID = "distil-whisper/distil-small.en" +ASR_DTYPE_AUTO = "auto" + +# Keep in sync with config.ASR_DTYPES. +_ASR_DTYPE_NAMES = frozenset({"float16", "bfloat16", "float32"}) +_ASR_DTYPE_ALIASES = { + "fp16": "float16", + "half": "float16", + "bf16": "bfloat16", + "fp32": "float32", + "float": "float32", +} + + +def _resolve_torch_dtype(dtype: str | None, device: str) -> Any: + """Resolve an ``asr_dtype`` name to a ``torch.dtype``. + + None/"auto" derives it from the device: float16 on CUDA, float32 elsewhere + (CPU float16 is slow and partly unimplemented). Name a dtype explicitly for + an encoder that cannot run in half precision — BatchNorm raises on a float16 + weight against float32 features rather than promoting. + """ + import torch + + name = str(dtype or ASR_DTYPE_AUTO).lower() + name = _ASR_DTYPE_ALIASES.get(name, name) + if name == ASR_DTYPE_AUTO: + on_cuda = isinstance(device, str) and device.startswith("cuda") + return torch.float16 if on_cuda else torch.float32 + if name not in _ASR_DTYPE_NAMES: + raise ValueError( + f"Unsupported asr_dtype {dtype!r}. Expected {ASR_DTYPE_AUTO!r} (or " + f"None) to derive it from the device, or one of: " + f"{', '.join(sorted(_ASR_DTYPE_NAMES))}." + ) + return getattr(torch, name) + + _CHUNKING = None @@ -73,23 +99,18 @@ def _load_chunking(): class ASRTranscriber: - """Lazily-loaded ASR model wrapper exposing :meth:`transcribe`. - - Instances are cheap to construct; the underlying model is only materialized - on the first :meth:`transcribe` call (or an explicit :meth:`load`). - """ + """Lazily-loaded ASR model wrapper exposing :meth:`transcribe`.""" def __init__( self, model_id: str = DEFAULT_ASR_MODEL_ID, device: str = "cpu", pipeline_kwargs: Mapping[str, Any] | None = None, + dtype: str | None = None, ) -> None: self.model_id = model_id self.device = device - # Extra kwargs merged into the pipeline() construction. Because they - # change the built pipeline, get_transcriber folds them into the cache - # key so distinct construction options get distinct cached instances. + self.dtype = dtype self.pipeline_kwargs: dict[str, Any] = dict(pipeline_kwargs or {}) self._pipeline = None self._load_lock = threading.Lock() @@ -101,28 +122,17 @@ def load(self) -> None: with self._load_lock: if self._pipeline is not None: return - # Imported lazily so this module stays importable without - # transformers' heavy audio stack until it is actually used. - import torch + # Lazy: keeps this module importable without transformers' audio stack. from transformers import pipeline - torch_dtype = ( - torch.float16 - if isinstance(self.device, str) and self.device.startswith("cuda") - else torch.float32 - ) - # Built-in defaults, then let checkpoint-supplied pipeline_kwargs - # override any of them (e.g. a different chunk_length_s, or model - # kwargs a non-Whisper backend needs). kwargs: dict[str, Any] = { "task": "automatic-speech-recognition", "model": self.model_id, "device": self.device, - "torch_dtype": torch_dtype, - # Enable internal 30s chunking so audio longer than the model's - # native window is handled without us re-implementing it. + "torch_dtype": _resolve_torch_dtype(self.dtype, self.device), "chunk_length_s": 30, } + # pipeline_kwargs last: a checkpoint may override any default above. kwargs.update(self.pipeline_kwargs) self._pipeline = pipeline(**kwargs) @@ -135,32 +145,12 @@ def transcribe( chunk_length_s: float = 30.0, chunk_overlap_s: float = 5.0, ) -> str: - """Transcribe one audio clip to a text string. - - Args: - audio: The audio samples. Accepts a numpy array, a list of floats, a - torch tensor, or an ``(array, sampling_rate)`` tuple (vLLM's - ``AudioItem`` shape). - sampling_rate: Sample rate of ``audio`` in Hz. Required unless - ``audio`` is an ``(array, sampling_rate)`` tuple. Audio is - resampled to 16 kHz when needed. - generate_kwargs: Decode-time kwargs forwarded to the ASR model for - this call (e.g. ``{"language": "fr"}``). Applied per call so the - same loaded pipeline serves many languages. Passed only when - non-empty, so CTC/non-generative backends are unaffected. - self_chunks: True when the backend handles long audio itself (the - Whisper pipeline, via its internal ``chunk_length_s``); the whole - clip is passed in one call. False routes long audio through our - encoder-agnostic chunker (:mod:`.chunking`): split into - overlapping windows, transcribe each, and merge with overlap - de-duplication. - chunk_length_s: Window length for our chunker (only used when - ``self_chunks`` is False). - chunk_overlap_s: Window overlap for our chunker (only used when - ``self_chunks`` is False). - - Returns: - The transcript with surrounding whitespace stripped. + """Transcribe one audio clip, stripped. Resampled to 16 kHz as needed. + + ``sampling_rate`` is required unless ``audio`` is an ``(array, rate)`` + tuple. ``generate_kwargs`` is passed only when non-empty, so CTC backends + are unaffected. ``self_chunks=False`` routes long audio through + :mod:`.chunking` using ``chunk_length_s``/``chunk_overlap_s``. """ samples, sr = _coerce_audio(audio, sampling_rate) samples = _to_mono_float32(samples) @@ -168,12 +158,9 @@ def transcribe( self.load() - # Backend chunks internally (Whisper): one call over the whole clip. if self_chunks: return self._run_pipeline(samples, generate_kwargs) - # Encoder-agnostic path: split into overlapping windows, transcribe each, - # then stitch the per-window transcripts (de-duplicating the overlap). chunking = _load_chunking() segments = chunking.split_waveform( samples, _TARGET_SAMPLE_RATE, chunk_length_s, chunk_overlap_s @@ -187,7 +174,6 @@ def _run_pipeline( generate_kwargs: Mapping[str, Any] | None = None, ) -> str: """Run the loaded pipeline over an already-resampled mono waveform.""" - # Tell the pipeline the rate so it does not attempt its own resampling. call_kwargs: dict[str, Any] = {} if generate_kwargs: call_kwargs["generate_kwargs"] = dict(generate_kwargs) @@ -201,17 +187,14 @@ def _run_pipeline( # ── Module-level cache + convenience function ──────────────────────────────── -# Keyed on (model_id, device, frozen pipeline_kwargs). pipeline_kwargs are in -# the key because they change the constructed pipeline; generate_kwargs are NOT -# — they are applied per transcribe() call, so one cached pipeline serves them -# all (that is what makes per-request language selection cheap). +# Keyed on what changes the constructed pipeline. generate_kwargs are excluded: +# they apply per transcribe() call, so one cached pipeline serves every language. _TRANSCRIBERS: dict[tuple, ASRTranscriber] = {} _CACHE_LOCK = threading.Lock() -# Decode kwargs a client may set per request. Kept to language/task so a client -# cannot inject arbitrary (potentially expensive or unsafe) generation options; -# everything else is fixed by the checkpoint author in config.asr_generate_kwargs. +# Allowlisted so a client cannot inject arbitrary generation options; everything +# else is fixed by the checkpoint in config.asr_generate_kwargs. DEFAULT_ALLOWED_REQUEST_GENERATE_KEYS = frozenset({"language", "task"}) @@ -222,12 +205,9 @@ def resolve_generate_kwargs( ) -> dict[str, Any]: """Merge config-default decode kwargs with allowlisted per-request overrides. - ``config_defaults`` come from ``config.asr_generate_kwargs``. ``request`` is - the per-request mapping (vLLM's ``mm_processor_kwargs``); a top-level - ``language`` or a nested ``asr_generate_kwargs`` object may override the - defaults, but only keys in ``allowed_keys`` are honored. Request values win - so one deployed model can serve many languages. Pure and vLLM-free so it can - be unit-tested on CPU. + ``request`` is vLLM's ``mm_processor_kwargs``: a top-level ``language`` or a + nested ``asr_generate_kwargs`` may override the defaults, but only for keys + in ``allowed_keys``. Request values win, so one model serves many languages. """ merged: dict[str, Any] = dict(config_defaults or {}) if isinstance(request, Mapping): @@ -253,14 +233,15 @@ def get_transcriber( model_id: str | None = None, device: str = "cpu", pipeline_kwargs: Mapping[str, Any] | None = None, + dtype: str | None = None, ) -> ASRTranscriber: """Return a process-wide cached :class:`ASRTranscriber`. - Cached per ``(model_id, device, pipeline_kwargs)``. ``model_id`` of None - resolves to :data:`DEFAULT_ASR_MODEL_ID`. + Cached per ``(model_id, device, dtype, pipeline_kwargs)``. ``model_id`` of + None resolves to :data:`DEFAULT_ASR_MODEL_ID`. """ resolved = model_id or DEFAULT_ASR_MODEL_ID - key = (resolved, device, _freeze(pipeline_kwargs or {})) + key = (resolved, device, dtype, _freeze(pipeline_kwargs or {})) transcriber = _TRANSCRIBERS.get(key) if transcriber is None: with _CACHE_LOCK: @@ -270,6 +251,7 @@ def get_transcriber( model_id=resolved, device=device, pipeline_kwargs=pipeline_kwargs, + dtype=dtype, ) _TRANSCRIBERS[key] = transcriber return transcriber @@ -282,6 +264,7 @@ def transcribe( model_id: str | None = None, device: str = "cpu", pipeline_kwargs: Mapping[str, Any] | None = None, + dtype: str | None = None, generate_kwargs: Mapping[str, Any] | None = None, self_chunks: bool = True, chunk_length_s: float = 30.0, @@ -289,7 +272,10 @@ def transcribe( ) -> str: """Convenience wrapper: transcribe with the cached transcriber for the args.""" return get_transcriber( - model_id=model_id, device=device, pipeline_kwargs=pipeline_kwargs + model_id=model_id, + device=device, + pipeline_kwargs=pipeline_kwargs, + dtype=dtype, ).transcribe( audio, sampling_rate, diff --git a/src/granite_switch/vllm/audio/chunking.py b/src/granite_switch/vllm/audio/chunking.py index bcc8cb5..2dfa7bf 100644 --- a/src/granite_switch/vllm/audio/chunking.py +++ b/src/granite_switch/vllm/audio/chunking.py @@ -1,21 +1,12 @@ # SPDX-License-Identifier: Apache-2.0 """Encoder-agnostic long-audio chunking for the cascade. -A backend with a fixed input window (e.g. a speech encoder that only accepts a -few seconds at a time) cannot ingest a long clip in one shot. This module splits -a long waveform into overlapping fixed-length windows and stitches the resulting -per-window transcripts back into one string — the same job Whisper's internal -``chunk_length_s`` does, but lifted **above** the backend so *any* transcriber -inherits long-audio support. - -Kept pure (numpy + stdlib, no vLLM / torch / transformers import) so it unit- -tests on CPU. The transcriber decides whether to use it via its ``self_chunks`` -flag: backends that already chunk internally (Whisper) bypass this entirely. - -Why overlap + dedup: cutting on hard boundaries can split a word across two -windows, so consecutive windows overlap and each boundary word is whole in at -least one of them. The overlap region is therefore transcribed twice; the merge -finds the repeated span at each seam and keeps one copy. +Splits a waveform into overlapping windows and stitches the per-window +transcripts, so a backend with a fixed input window inherits long-audio support. +Windows overlap because a hard cut can split a word; the overlap is therefore +transcribed twice and the merge keeps one copy. + +Pure numpy + stdlib (no torch/transformers) so it unit-tests on CPU. """ from __future__ import annotations @@ -24,9 +15,7 @@ import numpy as np -# Cap on how many trailing/leading words we search for a seam overlap. Comfortably -# larger than any plausible word count inside a few seconds of overlap, but bounded -# so the merge stays linear in transcript length. +# Bounded seam search so the merge stays linear in transcript length. _MAX_SEAM_WORDS = 60 @@ -36,21 +25,10 @@ def split_waveform( window_s: float, overlap_s: float, ) -> list[np.ndarray]: - """Split ``samples`` into overlapping windows of ``window_s`` seconds. - - Consecutive windows advance by ``window_s - overlap_s`` seconds, so each pair - shares ``overlap_s`` of audio. A clip already shorter than one window is - returned as a single segment (no copying/splitting). - - Args: - samples: 1-D mono waveform. - sr: Sample rate of ``samples`` in Hz. - window_s: Window length in seconds (must be > 0). - overlap_s: Overlap between consecutive windows in seconds (0 <= overlap_s - < window_s). + """Split a 1-D mono waveform into overlapping windows, in order. - Returns: - A list of 1-D numpy views/arrays, in order. + Windows advance by ``window_s - overlap_s``. A clip shorter than one window + is returned as a single segment. """ if window_s <= 0: raise ValueError(f"window_s must be > 0, got {window_s}") @@ -87,9 +65,8 @@ def _norm_word(word: str) -> str: def _seam_overlap(prev: list[str], nxt: list[str]) -> int: """Longest k such that the last k words of ``prev`` match the first k of ``nxt``. - Comparison is punctuation/case-insensitive because ASR often renders the - overlap region slightly differently on each side of the seam. Returns 0 when - there is no matching overlap. + Punctuation/case-insensitive: ASR renders the overlap slightly differently on + each side of a seam. Returns 0 when nothing matches. """ max_k = min(len(prev), len(nxt), _MAX_SEAM_WORDS) for k in range(max_k, 0, -1): @@ -101,12 +78,7 @@ def _seam_overlap(prev: list[str], nxt: list[str]) -> int: def merge_transcripts(transcripts: list[str]) -> str: - """Concatenate per-window transcripts, de-duplicating the overlap at each seam. - - For each new window, find the longest word-level overlap between the tail of - the text so far and the head of the new window, and drop that duplicated span - from the new window before appending. Empty windows are skipped. - """ + """Concatenate per-window transcripts, de-duplicating the overlap at each seam.""" merged: list[str] = [] for text in transcripts: words = text.split() diff --git a/src/granite_switch/vllm/audio/processor.py b/src/granite_switch/vllm/audio/processor.py index 17e39e2..61700c8 100644 --- a/src/granite_switch/vllm/audio/processor.py +++ b/src/granite_switch/vllm/audio/processor.py @@ -1,26 +1,13 @@ # SPDX-License-Identifier: Apache-2.0 -"""vLLM multimodal processor for the alpha audio cascade (Path A). - -Strategy (see also the design notes in :mod:`granite_switch.vllm.audio`): - -* Audio is declared as a multimodal input, so the standard vLLM server accepts - it and developers keep loading a single model. -* In :meth:`_call_hf_processor` we run ASR and tokenize the transcript. -* :meth:`_get_prompt_updates` replaces the single ``<|audio|>`` marker with the - **actual transcript token ids** via ``PromptReplacement``. After this the - transcript tokens are ordinary tokens in ``prompt_token_ids``; the scheduler - sizes KV for the real, runtime-determined length (no fixed audio window). -* The model's ``embed_multimodal`` then returns ``embed_tokens(transcript_ids)`` - for those placeholder positions — identical to what they'd get as normal text. - That redundant-but-consistent step is the exact seam the future projection - model reuses (swap the embedding source for a trained audio encoder). - -Modeled on vLLM 0.19.1's ``ultravox.py`` (the reference audio model), confirmed -against that version's API by the scratch probes. - -ALPHA SCOPE: audio is answered by the base model. We do not place adapter -control tokens for audio requests, so no token-exchange interaction with the -switch is needed here. +"""vLLM multimodal processor for the audio cascade. + +``_call_hf_processor`` runs ASR and tokenizes the transcript; +``_get_prompt_updates`` then replaces the ``<|audio|>`` marker with the real +transcript token ids via ``PromptReplacement``, so the scheduler sizes KV for the +runtime-determined length rather than a fixed audio window. + +Modeled on vLLM 0.19.1's ``ultravox.py``. Audio is answered by the base model — +no adapter control tokens are placed, so the switch is not involved. """ from __future__ import annotations @@ -53,17 +40,10 @@ resolve_generate_kwargs, ) -# The chat-template marker that stands in for an audio clip before replacement. AUDIO_MARKER = "<|audio|>" - -# ASR feature-extractor sample rate the audio is resampled to. _TARGET_SR = 16_000 - -# Fallback context length if the served max_model_len cannot be read (should not -# happen in practice; keeps the transcript budget finite either way). +# Keeps the transcript budget finite if max_model_len cannot be read. _FALLBACK_CONTEXT_LEN = 8192 - -# Dummy clip length (seconds) used during vLLM's profiling run. _DUMMY_AUDIO_SECONDS = 5 @@ -74,14 +54,11 @@ def _asr_enabled(self) -> bool: return bool(getattr(self.get_hf_config(), "asr_enabled", False)) def get_supported_mm_limits(self) -> Mapping[str, int | None]: - # Audio capability is gated per-checkpoint: a non-audio GraniteSwitch - # reports no modalities, so vLLM never profiles audio or loads ASR. + # No modalities on a non-audio checkpoint, so vLLM never loads ASR. if not self._asr_enabled(): return {} - # Configurable ceiling on audio clips per request; each clip's transcript - # is spliced at its own <|audio|> marker. Finite so vLLM can size KV for - # the worst case (clips x per-clip budget). --limit-mm-per-prompt may - # lower this, not raise it above the declared ceiling. + # Finite so vLLM can size KV for the worst case. --limit-mm-per-prompt + # may lower this ceiling, not raise it. return {"audio": self._asr_max_audio_clips()} def get_mm_max_tokens_per_item( @@ -91,16 +68,13 @@ def get_mm_max_tokens_per_item( ) -> Mapping[str, int] | None: if not self._asr_enabled(): return {} - # Worst-case transcript positions one clip can occupy, used only to size - # the encoder cache and profiling pass — NOT to bound requests. A clip - # cannot transcribe to more than the whole context (a longer prompt is - # rejected by vLLM's standard length check), so the per-clip share of the - # context window is the honest upper bound. vLLM calls this with count=1. + # Sizes the encoder cache and profiling pass only — does NOT bound + # requests (vLLM's prompt-length check does). A clip cannot exceed the + # whole context, so the per-clip share of it is the honest upper bound. count = mm_counts.get("audio", 1) or 1 return {"audio": max(1, seq_len // count)} def get_data_parser(self) -> MultiModalDataParser: - # Resample incoming audio to the ASR sample rate. return MultiModalDataParser(target_sr=_TARGET_SR) # --- ASR config resolved from the model's GraniteSwitchConfig --- @@ -113,6 +87,10 @@ def _asr_device(self) -> str: cfg = self.get_hf_config() return getattr(cfg, "asr_device", "cpu") or "cpu" + def _asr_dtype(self) -> str | None: + cfg = self.get_hf_config() + return getattr(cfg, "asr_dtype", None) + def _asr_pipeline_kwargs(self) -> Mapping[str, object]: cfg = self.get_hf_config() return getattr(cfg, "asr_pipeline_kwargs", None) or {} @@ -140,11 +118,8 @@ def _asr_chunk_overlap_s(self) -> float: def _max_model_len(self) -> int: """The served context window, or a safe fallback. - vLLM passes ``seq_len`` into ``get_mm_max_tokens_per_item`` for profiling, - but ``_call_hf_processor`` needs the served context at request time to size - the transcript budget, so read it from the processing context's model - config (falling back to the checkpoint's max_position_embeddings, then a - constant). + ``_call_hf_processor`` needs this at request time to size the transcript + budget; vLLM's profiling ``seq_len`` is not available there. """ model_config = getattr(self.ctx, "model_config", None) max_len = getattr(model_config, "max_model_len", None) @@ -183,19 +158,13 @@ def _transcribe( audio, generate_kwargs: Mapping[str, object] | None = None, ) -> list[int]: - """Transcribe one audio item to a list of token ids (full transcript). - - The transcript is spliced into the prompt as ordinary text tokens; it is - never truncated here. A clip whose transcript makes the prompt exceed the - context is rejected by vLLM's standard prompt-length check. - - Long audio is handled by the backend itself (Whisper) or by our - encoder-agnostic chunker, per the checkpoint's ``asr_self_chunks`` flag. - """ + """Transcribe one audio item to token ids. Never truncated here — an + oversized prompt is rejected by vLLM's own length check.""" transcriber = get_transcriber( model_id=self.info._asr_model_id(), device=self.info._asr_device(), pipeline_kwargs=self.info._asr_pipeline_kwargs(), + dtype=self.info._asr_dtype(), ) # The data parser already resampled to _TARGET_SR. text = transcriber.transcribe( @@ -219,13 +188,11 @@ def _call_hf_processor( tokenizer = self.info.get_tokenizer() audios = mm_data.get("audios", []) or [] - # Text-only request: just tokenize (mirrors Ultravox's text-only branch). if not audios: input_ids = tokenizer.encode(prompt, add_special_tokens=False) return BatchFeature(dict(input_ids=[input_ids]), tensor_type="pt") - # Resolve decode kwargs once (config defaults + allowlisted per-request - # overrides) and apply them to every audio item in this request. + # Resolved once, then applied to every audio item in this request. generate_kwargs = resolve_generate_kwargs( self.info._asr_generate_kwargs(), mm_kwargs, @@ -234,9 +201,7 @@ def _call_hf_processor( input_ids = tokenizer.encode(prompt, add_special_tokens=False) - # Transcribe each audio to token ids; concatenate flat with per-item sizes. - # Transcripts are spliced in full — an oversized request is rejected by - # vLLM's prompt-length check, not silently truncated here. + # Concatenated flat, with per-item sizes to split them back. per_item_ids = [self._transcribe(a, generate_kwargs) for a in audios] sizes = [len(ids) for ids in per_item_ids] flat_ids = [tid for ids in per_item_ids for tid in ids] @@ -257,7 +222,6 @@ def _get_mm_fields_config( ) -> Mapping[str, MultiModalFieldConfig]: num_tokens = hf_inputs.get("audio_num_tokens", torch.zeros(0)) return dict( - # Flat transcript ids, split back per audio by audio_num_tokens. audio_token_ids=MultiModalFieldConfig.flat_from_sizes("audio", num_tokens), audio_num_tokens=MultiModalFieldConfig.batched("audio"), ) @@ -277,7 +241,6 @@ def _get_prompt_updates( def replacement(item_idx: int): s = int(starts[item_idx]) e = int(starts[item_idx + 1]) - # Replace <|audio|> with the real transcript token ids. return [int(t) for t in all_ids[s:e]] return [ diff --git a/src/granite_switch/vllm/granite_switch_model.py b/src/granite_switch/vllm/granite_switch_model.py index 9467846..e24466a 100644 --- a/src/granite_switch/vllm/granite_switch_model.py +++ b/src/granite_switch/vllm/granite_switch_model.py @@ -299,9 +299,8 @@ def forward( adapter_token_ids=self.adapter_token_ids, ) else: - # Either no switch, or the multimodal path where vLLM passes - # pre-merged inputs_embeds and input_ids is None. ALPHA: audio - # requests run on the base model (adapter_id = 0). + # No switch, or the multimodal path (input_ids is None because + # vLLM pre-merged inputs_embeds): run on base, adapter_id 0. if input_ids is not None: num_tokens = input_ids.shape[0] device = input_ids.device @@ -429,10 +428,8 @@ class GraniteSwitchForCausalLM( supports_multimodal = True - # Force vLLM to pass the raw input_ids to forward() on the multimodal path - # (not just precomputed inputs_embeds). The switch needs them to detect - # adapter control tokens, so audio requests route through adapters exactly - # like text requests. + # Without this, the multimodal path passes only inputs_embeds and the switch + # cannot see control tokens — audio requests would bypass adapters. requires_raw_input_tokens = True @classmethod diff --git a/tests/integration/test_adapter_routing_audio_enabled.py b/tests/integration/test_adapter_routing_audio_enabled.py index 131a01f..7bbc63b 100644 --- a/tests/integration/test_adapter_routing_audio_enabled.py +++ b/tests/integration/test_adapter_routing_audio_enabled.py @@ -2,14 +2,10 @@ """Adapters + audio (issue #47): every default adapter routes to its own index on an audio-enabled checkpoint. -Composes the default adapter set (RAG + Core + Guardian) with --enable-audio and -sweeps every adapter control token that resolved, asserting the switch maps -``adapter_token_ids[i]`` to index ``i + 1`` and leaves pre-control positions on -the base (``0``) — i.e. enabling audio does not perturb the token->index map. -For granite-4.1-3b that is 12 adapters: context_relevance ships no 4.1-3b flavor, -so 12 of the 13 defined adapters resolve. Complements the single-adapter sweep in -test_switch_e2e_compose and the serve-time answerability check in -test_answerability_over_audio. +Asserts the switch maps ``adapter_token_ids[i]`` to index ``i + 1`` and leaves +pre-control positions on base (``0``) — enabling audio must not perturb the +token->index map. For granite-4.1-3b, 12 of the 13 defined adapters resolve +(context_relevance ships no 4.1-3b flavor). Markers: slow + requires_model + gpu (opt-in via -m). """ @@ -26,8 +22,6 @@ pytest.skip("requires the HF backend ([hf] extra)", allow_module_level=True) -# The default adapter set is the union of the three granitelib libraries (the -# "12 adapters"): RAG + Core + Guardian. _DEFAULT_ADAPTER_LIBRARIES = [ "ibm-granite/granitelib-rag-r1.0", "ibm-granite/granitelib-core-r1.0", diff --git a/tests/integration/test_answerability_over_audio.py b/tests/integration/test_answerability_over_audio.py index e59f11b..538457b 100644 --- a/tests/integration/test_answerability_over_audio.py +++ b/tests/integration/test_answerability_over_audio.py @@ -2,18 +2,14 @@ """Adapters + audio: the RAG answerability adapter judging a query against a document delivered as audio (issue #47). -Covers the "adapters + audio" box. Where test_audio_serving_smoke.py only proves -an adapter control token doesn't crash the audio path, this checks the switch -reaches the *correct* verdict when the RAG document arrives as speech. - -Document-as-audio: ``documents=[{"text": "<|audio|>"}]`` — the Granite template -renders each document with ``doc | tojson``, so the marker lands in the -```` block where the ASR processor splices the transcript. The -``<|answerability|>`` control token is inserted by the same template (aLoRA -fallback path). Ground truth is one committed speech clip (fixtures/, generated -with SpeechT5 — MIT) driving both classes; the questions key on content that -transcribes cleanly, so this tests the decision, not transcription accuracy -(WER). +Unlike test_audio_serving_smoke.py, which only proves an adapter control token +doesn't crash the audio path, this checks the switch reaches the *correct* +verdict when the document arrives as speech. + +``documents=[{"text": "<|audio|>"}]`` works because the Granite template renders +each document with ``doc | tojson``, so the marker lands in the ```` +block for the ASR processor to splice. Questions key on words that transcribe +cleanly, so this tests the decision, not WER. Markers: slow + requires_model + gpu (opt-in via -m). """ @@ -37,10 +33,7 @@ def _load_experimental_pairs(): - """Extra (base, adapter) pairs from GRANITE_SWITCH_EXPERIMENTAL_MODEL_PAIRS. - - JSON array of {"base": str, "adapter": str}; mirrors the other E2E files. - """ + """Extra (base, adapter) pairs from GRANITE_SWITCH_EXPERIMENTAL_MODEL_PAIRS.""" raw = os.environ.get("GRANITE_SWITCH_EXPERIMENTAL_MODEL_PAIRS", "") if not raw: return [] @@ -134,8 +127,7 @@ def served(audio_rag_checkpoint): def _answerability_adapter_name(config): - # Discovery derives the name from the library layout — match rather than - # hard-code, and skip loudly if this checkpoint has no answerability adapter. + # Discovery derives the name from the library layout, so match, don't hard-code. names = list(getattr(config, "adapter_names", None) or []) for name in names: if "answerab" in name.lower(): @@ -155,8 +147,6 @@ def speech_clip(): def _build_answerability_prompt(tokenizer, adapter_name, question): - # documents=[{"text": "<|audio|>"}] places one audio marker in the template's - # block; adapter_name arms the answerability control-token insert. return tokenizer.apply_chat_template( [{"role": "user", "content": question}], documents=[{"text": _AUDIO_MARKER}], @@ -167,8 +157,7 @@ def _build_answerability_prompt(tokenizer, adapter_name, question): def _parse_label(text): - # Adapter emits the bare enum ("answerable"/"unanswerable"), maybe quoted. - # Match the longer label first so "answerable" doesn't shadow "unanswerable". + # Longer label first, so "answerable" doesn't shadow "unanswerable". norm = text.strip().strip('"').strip().lower() if "unanswerable" in norm: return "unanswerable" diff --git a/tests/integration/test_audio_serving_smoke.py b/tests/integration/test_audio_serving_smoke.py index b1eb3a6..3c0e9c7 100644 --- a/tests/integration/test_audio_serving_smoke.py +++ b/tests/integration/test_audio_serving_smoke.py @@ -1,29 +1,15 @@ # SPDX-License-Identifier: Apache-2.0 """End-to-end vLLM serving smoke for the audio cascade (issue #47). -Boots a real composed, audio-enabled GraniteSwitch checkpoint under vLLM and -drives the three request shapes the #47 checklist calls out as the serving -smoke — **text + adapter + audio x1/x2/x3** — through one live engine. This is -the path the low-level tests deliberately bypass (CUDA graphs, torch.compile, -the ASR processor running inside vLLM's EngineCore subprocess, the multi-clip -splice, and generation), so it is the only test that proves those pieces -compose at serve time. - -Scope is a *smoke*: each request must complete and return well-formed output, -and multi-clip requests must be accepted up to the checkpoint's declared clip -ceiling. It intentionally does NOT assert transcript content — transcription -quality (WER) and adapter-routing correctness are separate #47 boxes covered by -the eval harness and `test_switch_e2e_compose.py` respectively. Synthetic audio -keeps the test asset-free; a silent/tonal clip exercises the serving plumbing -without shipping a speech fixture. - -Model construction goes through the compose CLI (CLAUDE.md gotcha #5): no test -hand-assembles a config. Audio is enabled with `--enable-audio`, which defaults -the ASR front-end to the small built-in model (distil-whisper/distil-small.en) -to keep CI cost down. - -Markers: @pytest.mark.slow + @pytest.mark.requires_model + @pytest.mark.gpu. -CI must opt in explicitly: `pytest -m "slow and requires_model and gpu"`. +Drives text + adapter + audio x1/x2/x3 through one live engine — the serve-time +path the low-level tests bypass (CUDA graphs, the ASR processor inside vLLM's +EngineCore subprocess, the multi-clip splice, generation). + +Deliberately does NOT assert transcript content: WER and adapter-routing +correctness are separate boxes, covered by the eval harness and +test_switch_e2e_compose.py. Synthetic tones keep the test asset-free. + +Opt in explicitly: `pytest -m "slow and requires_model and gpu"`. """ import importlib.util @@ -38,13 +24,8 @@ pytest.skip("requires vLLM installed", allow_module_level=True) -# ---------------------------------------------------------------------------- -# Base-model / adapter-library pairs — kept in lockstep with -# tests/integration/test_switch_e2e_compose.py so the two E2E files exercise -# the same model matrix. A fast CI profile can pin one pair via -k or the -# experimental env var below. -# ---------------------------------------------------------------------------- - +# Kept in lockstep with test_switch_e2e_compose.py so both E2E files exercise the +# same model matrix. _DEFAULT_BASE_MODEL_PAIRS = [ ("ibm-granite/granite-4.0-micro", "ibm-granite/granitelib-core-r1.0"), ("ibm-granite/granite-4.1-3b", "ibm-granite/granitelib-core-r1.0"), @@ -52,11 +33,10 @@ def _load_experimental_pairs(): - """Local/experimental pairings from GRANITE_SWITCH_EXPERIMENTAL_MODEL_PAIRS. + """Local pairings from GRANITE_SWITCH_EXPERIMENTAL_MODEL_PAIRS. - JSON array of {"base": str, "adapter": str}; base/adapter may be HF ids or - local paths. The mechanism is committed; the values are not. Mirrors - test_switch_e2e_compose.py so both E2E files share one extension knob. + JSON array of {"base": str, "adapter": str}, HF ids or local paths. The + mechanism is committed; the values are not. """ raw = os.environ.get("GRANITE_SWITCH_EXPERIMENTAL_MODEL_PAIRS", "") if not raw: @@ -85,9 +65,8 @@ def _load_experimental_pairs(): def audio_checkpoint(request, tmp_path_factory): """Compose one audio-enabled checkpoint per (base, adapter) pair. - Delegates to the compose CLI (same as test_switch_e2e_compose.py) with - `--enable-audio`, then returns the save dir. Module scope amortizes the - download-dominated first run across every smoke case for the pair. + Goes through the compose CLI, never a hand-assembled config (CLAUDE.md + gotcha #5). Module scope amortizes the download across the pair's cases. """ import subprocess import sys @@ -123,8 +102,7 @@ def served(audio_checkpoint): """Boot vLLM once for the checkpoint and share it across smoke cases. Tokenizer init stays ON (unlike the argmax-equivalence test): the ASR - processor needs a tokenizer to encode both the prompt and the transcript, - and the adapter case needs it to tokenize text around the control token. + processor needs it to encode the prompt and the transcript. """ import gc @@ -177,9 +155,8 @@ def test_text_only_serving(served): def test_adapter_control_token_serving(served): """An adapter control token routes through the switch under serving. - Correctness of the routing is `test_switch_e2e_compose.py`'s job; here we - only prove the switch path runs end-to-end in the live engine without - crashing and still generates. + Routing correctness is test_switch_e2e_compose.py's job; the bar here is + that the switch path runs in the live engine and still generates. """ from vllm import SamplingParams from vllm.inputs import TokensPrompt @@ -203,9 +180,7 @@ def test_adapter_control_token_serving(served): def test_audio_clip_serving(served, num_clips): """Audio x1/x2/x3: N markers + N clips transcribe, splice, and generate. - Exercises the multi-clip long-audio serving path through the ASR processor - running inside vLLM's engine subprocess. Content is not asserted (WER is a - separate #47 box); the bar is a completed request with well-formed output. + Content is not asserted; the bar is a completed, well-formed request. """ from vllm import SamplingParams diff --git a/tests/unit/test_asr.py b/tests/unit/test_asr.py index d5e00e0..69187ce 100644 --- a/tests/unit/test_asr.py +++ b/tests/unit/test_asr.py @@ -7,6 +7,7 @@ leaf module directly by file path rather than through the package. """ +import contextlib import importlib.util import pathlib from unittest import mock @@ -282,15 +283,92 @@ def test_config_not_mutated(self): assert cfg == {"language": "de"} +@contextlib.contextmanager +def _patched_pipeline(factory): + """Patch both lookup paths: `from transformers import pipeline` re-resolves to + transformers.pipelines.pipeline, but transformers caches it on the top-level + module after the first access, so a later test would get the real one.""" + with ( + mock.patch("transformers.pipelines.pipeline", factory), + mock.patch("transformers.pipeline", factory), + ): + yield + + +class TestResolveTorchDtype: + """asr_dtype resolution. float16-on-CUDA is the default, but overridable.""" + + def test_auto_on_cuda_is_float16(self): + torch = pytest.importorskip("torch") + assert asr._resolve_torch_dtype(None, "cuda:0") is torch.float16 + assert asr._resolve_torch_dtype("auto", "cuda") is torch.float16 + + def test_auto_on_cpu_is_float32(self): + torch = pytest.importorskip("torch") + assert asr._resolve_torch_dtype(None, "cpu") is torch.float32 + + def test_explicit_float32_overrides_cuda_default(self): + # The BatchNorm-encoder case: CUDA must not force half precision. + torch = pytest.importorskip("torch") + assert asr._resolve_torch_dtype("float32", "cuda:0") is torch.float32 + + def test_explicit_bfloat16(self): + torch = pytest.importorskip("torch") + assert asr._resolve_torch_dtype("bfloat16", "cpu") is torch.bfloat16 + + @pytest.mark.parametrize( + "name,attr", + [ + ("fp16", "float16"), + ("half", "float16"), + ("bf16", "bfloat16"), + ("fp32", "float32"), + ("FLOAT32", "float32"), + ], + ) + def test_aliases_and_case(self, name, attr): + torch = pytest.importorskip("torch") + assert asr._resolve_torch_dtype(name, "cpu") is getattr(torch, attr) + + def test_unknown_name_raises(self): + pytest.importorskip("torch") + with pytest.raises(ValueError, match="Unsupported asr_dtype"): + asr._resolve_torch_dtype("int8", "cpu") + + def test_dtype_is_part_of_cache_key(self): + a = asr.get_transcriber("dt", "cuda:0", dtype="float32") + b = asr.get_transcriber("dt", "cuda:0", dtype="float16") + c = asr.get_transcriber("dt", "cuda:0", dtype="float32") + assert a is not b + assert a is c + + def test_load_passes_resolved_dtype(self): + torch = pytest.importorskip("torch") + factory = mock.Mock(return_value=mock.Mock()) + with _patched_pipeline(factory): + asr.ASRTranscriber(model_id="m", device="cuda:0", dtype="float32").load() + assert factory.call_args.kwargs["torch_dtype"] is torch.float32 + + def test_pipeline_kwargs_torch_dtype_still_wins(self): + torch = pytest.importorskip("torch") + factory = mock.Mock(return_value=mock.Mock()) + with _patched_pipeline(factory): + asr.ASRTranscriber( + model_id="m", + device="cpu", + dtype="float32", + pipeline_kwargs={"torch_dtype": torch.bfloat16}, + ).load() + assert factory.call_args.kwargs["torch_dtype"] is torch.bfloat16 + + class TestLoadMergesPipelineKwargs: def test_pipeline_kwargs_override_defaults(self): # load() must merge config-supplied pipeline_kwargs over the built-in # defaults (e.g. override chunk_length_s, add extra kwargs). pytest.importorskip("torch") fake_pipe_factory = mock.Mock(return_value=mock.Mock()) - # transformers is a lazy module: `from transformers import pipeline` - # re-resolves to transformers.pipelines.pipeline, so patch there. - with mock.patch("transformers.pipelines.pipeline", fake_pipe_factory): + with _patched_pipeline(fake_pipe_factory): t = asr.ASRTranscriber( model_id="m", device="cpu", diff --git a/tests/unit/test_config.py b/tests/unit/test_config.py index f25e2a7..6252544 100644 --- a/tests/unit/test_config.py +++ b/tests/unit/test_config.py @@ -106,9 +106,21 @@ def test_asr_defaults_off(self): assert cfg.asr_enabled is False assert cfg.asr_model_id is None assert cfg.asr_device == "cpu" + assert cfg.asr_dtype is None assert cfg.asr_pipeline_kwargs is None assert cfg.asr_generate_kwargs is None + def test_asr_dtype_round_trip(self, tmp_path): + cfg = GraniteSwitchConfig( + num_adapters=0, asr_enabled=True, asr_device="cuda:0", asr_dtype="float32" + ) + cfg.save_pretrained(tmp_path) + assert GraniteSwitchConfig.from_pretrained(tmp_path).asr_dtype == "float32" + + def test_invalid_asr_dtype_raises(self): + with pytest.raises(ValueError, match="asr_dtype"): + GraniteSwitchConfig(num_adapters=0, asr_dtype="fp8") + def test_longaudio_defaults(self): cfg = GraniteSwitchConfig(num_adapters=0) assert cfg.asr_max_audio_clips == 32 diff --git a/tests/vllm/test_audio_processor.py b/tests/vllm/test_audio_processor.py index 2d81f3d..b158b27 100644 --- a/tests/vllm/test_audio_processor.py +++ b/tests/vllm/test_audio_processor.py @@ -1,21 +1,10 @@ # SPDX-License-Identifier: Apache-2.0 """vLLM-tier tests for the audio ASR multimodal processor. -These exercise the code that lives in ``granite_switch.vllm.audio.processor`` -and therefore needs vLLM importable (the base classes come from vLLM). They do -NOT need a GPU or a real ASR model: the transcriber is faked, so what is under -test is our plumbing — - -- per-checkpoint gating of the audio modality on ``asr_enabled``, -- the config accessors for ``asr_model_id`` / ``asr_device`` / - ``asr_pipeline_kwargs`` / ``asr_generate_kwargs``, -- and the Level-2 seam: config-default decode kwargs merged with an allowlisted - per-request override (vLLM's ``mm_processor_kwargs``) reaching the transcriber. - -The pure merge/kwargs logic itself is unit-tested on CPU in -``tests/unit/test_asr.py``; this file checks it is wired through the processor. - -Requires vLLM installed. Skipped otherwise (e.g. CPU-only dev machines). +Needs vLLM importable (the base classes come from it) but no GPU and no real ASR +model — the transcriber is faked, so what is under test is the plumbing: modality +gating on ``asr_enabled``, the config accessors, and decode kwargs reaching the +transcriber. The merge logic itself is unit-tested in tests/unit/test_asr.py. """ import importlib.util @@ -43,9 +32,7 @@ def _make_info(*, max_model_len=131072, **cfg_attrs): """A ProcessingInfo whose get_hf_config() returns a stub config. - Bypasses __init__ (which needs a full vLLM InputProcessingContext) — we only - exercise methods that read the config. A stub ``ctx`` supplies the served - ``max_model_len`` used to size the transcript budget. + Bypasses __init__, which needs a full vLLM InputProcessingContext. """ info = object.__new__(GraniteSwitchASRProcessingInfo) cfg = SimpleNamespace(**cfg_attrs) @@ -167,10 +154,13 @@ def transcribe( capture["chunk_overlap_s"] = chunk_overlap_s return "hello world" - def fake_get_transcriber(model_id=None, device="cpu", pipeline_kwargs=None): + def fake_get_transcriber( + model_id=None, device="cpu", pipeline_kwargs=None, dtype=None + ): capture["model_id"] = model_id capture["device"] = device capture["pipeline_kwargs"] = pipeline_kwargs + capture["dtype"] = dtype return FakeTranscriber() monkeypatch.setattr(proc_mod, "get_transcriber", fake_get_transcriber) @@ -196,6 +186,19 @@ def test_transcribe_forwards_pipeline_and_generate_kwargs(self, monkeypatch): assert capture["generate_kwargs"] == {"language": "fr"} assert capture["sampling_rate"] == proc_mod._TARGET_SR + def test_dtype_forwarded_from_config(self, monkeypatch): + capture = {} + info = _make_info(asr_enabled=True, asr_device="cuda:0", asr_dtype="float32") + proc = _make_processor(info, monkeypatch, capture) + proc._transcribe(np.zeros(1600, dtype=np.float32), {}) + assert capture["dtype"] == "float32" + + def test_dtype_defaults_to_none(self, monkeypatch): + capture = {} + proc = _make_processor(_make_info(asr_enabled=True), monkeypatch, capture) + proc._transcribe(np.zeros(1600, dtype=np.float32), {}) + assert capture["dtype"] is None + def test_empty_generate_kwargs_becomes_none(self, monkeypatch): capture = {} info = _make_info(asr_enabled=True, asr_model_id="w", asr_device="cpu") @@ -340,7 +343,9 @@ def transcribe( monkeypatch.setattr( proc_mod, "get_transcriber", - lambda model_id=None, device="cpu", pipeline_kwargs=None: FakeTranscriber(), + lambda model_id=None, device="cpu", pipeline_kwargs=None, dtype=None: ( + FakeTranscriber() + ), ) return proc @@ -410,7 +415,9 @@ def transcribe(self, audio, **kw): monkeypatch.setattr( proc_mod, "get_transcriber", - lambda model_id=None, device="cpu", pipeline_kwargs=None: FakeTranscriber(), + lambda model_id=None, device="cpu", pipeline_kwargs=None, dtype=None: ( + FakeTranscriber() + ), ) bf = proc._call_hf_processor( From fb3e9b1c4b54d16e4af1a25e0b63bb91a3f8312f Mon Sep 17 00:00:00 2001 From: aviv ron Date: Mon, 3 Aug 2026 18:43:27 +0300 Subject: [PATCH 18/23] Fix two audio prompt-placeholder invariant violations Both are merge blockers found reviewing the ASR audio cascade. Each made well-formed audio requests fail with the same opaque vLLM error, from different causes: RuntimeError: Expected there to be 1 audio prompt placeholders corresponding to 1 audio items, but instead found 0 prompt placeholders! 1. _hf_processor_applies_updates was left at the base implementation, which returns True for raw (non-embedding) items. That tells vLLM the processor already expanded <|audio|> itself, so vLLM skips applying our PromptReplacement and merely searches the prompt for the transcript ids - which are not there, because _call_hf_processor deliberately leaves the marker in place and returns the transcript out of band. Override it to False. Only the uncached path consults the hook (the cached path hardcodes False), so this was silently contingent on mm_processor_cache_gb, on the entry point, and on the vLLM version. Configuration-dependent correctness is worse than a hard failure. The default path is untouched. 2. A clip with no recognizable speech transcribes to "", which produced a zero-length replacement. vLLM discards zero-length placeholder content and then reports the item as missing, so silence, music, or a 200 ms clip returned an opaque 500. It also left engine startup dependent on what the ASR model does with the silent profiling clip. Substitute a single space when the transcript is empty or whitespace-only, so every audio item occupies at least one prompt position and the model sees an audio turn that said nothing. Done in _transcribe rather than the replacement callback so audio_num_tokens stays consistent with the flat token buffer. Raise a clear ValueError if even the fallback tokenizes to nothing, rather than letting vLLM's opaque error resurface. This also makes startup deterministic, so the silent profiling clip is deliberately kept - it is now the better input, since noise or a tone would invite a variable-length hallucinated transcript. Tests drive vLLM's real _apply_hf_processor_text_mm and _maybe_apply_prompt_updates with real MultiModalDataItems rather than mocking the machinery under test, and need no GPU or ASR model. Reverting either fix makes the corresponding tests fail with the exact production error. Four pre-existing tests asserted the old zero-length behavior and were updated, since they encoded the bug. docs/AUDIO.md documents the empty-transcript policy, as it is observable. Signed-off-by: aviv ron --- docs/AUDIO.md | 6 + src/granite_switch/vllm/audio/processor.py | 52 ++++- tests/vllm/test_audio_processor.py | 223 +++++++++++++++++++-- 3 files changed, 267 insertions(+), 14 deletions(-) diff --git a/docs/AUDIO.md b/docs/AUDIO.md index c05166d..0787f85 100644 --- a/docs/AUDIO.md +++ b/docs/AUDIO.md @@ -183,6 +183,12 @@ Per request, before the scheduler allocates KV cache: 3. A `PromptReplacement` swaps the `<|audio|>` marker for those transcript token ids. The scheduler then sizes KV for the **real** length — the audio "window" is variable and decided at runtime, not reserved in advance. + A clip with no recognizable speech in it — silence, music, noise, or a clip + too short to hold a word — transcribes to the empty string. Since every audio + item has to occupy at least one prompt position (vLLM discards a zero-length + placeholder and then rejects the request), those clips are replaced with a + single space instead: the model sees an audio turn that said nothing, rather + than an error. 4. The model's `embed_multimodal` supplies embeddings for those positions. In the alpha that is simply the transcript's own token embeddings (identical to embedding them as text). **This is the seam the future encoder reuses:** swap diff --git a/src/granite_switch/vllm/audio/processor.py b/src/granite_switch/vllm/audio/processor.py index 61700c8..6fc968d 100644 --- a/src/granite_switch/vllm/audio/processor.py +++ b/src/granite_switch/vllm/audio/processor.py @@ -42,6 +42,10 @@ AUDIO_MARKER = "<|audio|>" _TARGET_SR = 16_000 +# Stands in for a transcript with no speech in it. Must tokenize to at least one +# token: vLLM discards a zero-length placeholder and then reports the item as +# missing, so every audio item has to contribute something to the prompt. +_EMPTY_TRANSCRIPT_TEXT = " " # Keeps the transcript budget finite if max_model_len cannot be read. _FALLBACK_CONTEXT_LEN = 8192 _DUMMY_AUDIO_SECONDS = 5 @@ -159,7 +163,14 @@ def _transcribe( generate_kwargs: Mapping[str, object] | None = None, ) -> list[int]: """Transcribe one audio item to token ids. Never truncated here — an - oversized prompt is rejected by vLLM's own length check.""" + oversized prompt is rejected by vLLM's own length check. + + Guaranteed non-empty: silence, music, non-speech or a clip too short to + contain a word all transcribe to ``""``, and a zero-length replacement + would make vLLM drop the placeholder and reject the request. Those clips + get :data:`_EMPTY_TRANSCRIPT_TEXT` instead, so the model sees an audio + turn that simply said nothing. + """ transcriber = get_transcriber( model_id=self.info._asr_model_id(), device=self.info._asr_device(), @@ -176,7 +187,19 @@ def _transcribe( chunk_overlap_s=self.info._asr_chunk_overlap_s(), ) tokenizer = self.info.get_tokenizer() - return tokenizer.encode(text, add_special_tokens=False) + if not text or not text.strip(): + text = _EMPTY_TRANSCRIPT_TEXT + ids = tokenizer.encode(text, add_special_tokens=False) + if not ids: + # Only reachable if the tokenizer drops _EMPTY_TRANSCRIPT_TEXT + # entirely. Fail loudly rather than emit a zero-length placeholder, + # which surfaces as an opaque "found 0 prompt placeholders". + raise ValueError( + f"Tokenizer produced no tokens for {text!r}; cannot build a " + "prompt placeholder for this audio item. Choose an " + "_EMPTY_TRANSCRIPT_TEXT this tokenizer encodes to >=1 token." + ) + return ids def _call_hf_processor( self, @@ -215,6 +238,31 @@ def _call_hf_processor( tensor_type="pt", ) + def _hf_processor_applies_updates( + self, + prompt_text: str, + mm_items: MultiModalDataItems, + hf_processor_mm_kwargs: Mapping[str, object], + tokenization_kwargs: Mapping[str, object], + ) -> bool: + """Always False: ``_call_hf_processor`` leaves the marker in place. + + The base implementation returns True for raw (non-embedding) items, + which tells vLLM the processor already expanded the placeholder itself — + so vLLM skips applying our ``PromptReplacement`` and merely *searches* + the returned prompt for the transcript token ids. They are not there, and + it raises ``Expected there to be 1 audio prompt placeholders ... found 0``. + + Unlike a real HF processor (e.g. Ultravox's), we tokenize the prompt with + the ``<|audio|>`` marker untouched and hand the transcript back out of + band, so the replacement must be applied by vLLM. + + Only the uncached path consults this hook; the cached path already + hardcodes False, which is why audio works with the default + ``mm_processor_cache_gb=4`` and breaks under ``--mm-processor-cache-gb 0``. + """ + return False + def _get_mm_fields_config( self, hf_inputs: BatchFeature, diff --git a/tests/vllm/test_audio_processor.py b/tests/vllm/test_audio_processor.py index b158b27..96f95f4 100644 --- a/tests/vllm/test_audio_processor.py +++ b/tests/vllm/test_audio_processor.py @@ -350,13 +350,26 @@ def transcribe( return proc +_BLANK_ID = 5 + + class TestEmptyAndSilentClip: - """A silent clip transcribes to "" -> zero transcript tokens, marker elided.""" + """Silence transcribes to "" -> stands in as _EMPTY_TRANSCRIPT_TEXT. + + A zero-length replacement is not a legal placeholder: vLLM skips zero-length + content when locating placeholders and then rejects the request with + ``found 0 prompt placeholders``. So every clip must yield >=1 token, however + little was said in it. + """ def _ids_for(self, text): - return [] if text == "" else [1, 2, 3] + if text == "": + return [] + if text == proc_mod._EMPTY_TRANSCRIPT_TEXT: + return [_BLANK_ID] + return [1, 2, 3] - def test_empty_transcript_yields_zero_length_item(self, monkeypatch): + def test_empty_transcript_yields_blank_token(self, monkeypatch): import torch info = _make_info(asr_enabled=True, asr_model_id="w") @@ -370,11 +383,39 @@ def test_empty_transcript_yields_zero_length_item(self, monkeypatch): mm_kwargs={}, tok_kwargs={}, ) - assert bf["audio_num_tokens"].tolist() == [0] - assert len(bf["audio_token_ids"]) == 0 + # One token, not zero — the item is still a findable placeholder. + assert bf["audio_num_tokens"].tolist() == [1] + assert bf["audio_token_ids"].tolist() == [_BLANK_ID] assert bf["audio_token_ids"].dtype == torch.long - def test_empty_clip_replacement_is_empty(self, monkeypatch): + def test_whitespace_only_transcript_also_falls_back(self, monkeypatch): + # transcribe() strips, so "" is the norm; a backend that does not strip + # must not slip a whitespace-only transcript past the check. + info = _make_info(asr_enabled=True, asr_model_id="w") + proc = _make_processor_transcribing( + info, monkeypatch, " \n", ids_for=self._ids_for + ) + assert proc._transcribe(np.zeros(1600, dtype=np.float32), {}) == [_BLANK_ID] + + def test_untokenizable_fallback_raises_clearly(self, monkeypatch): + # If even the fallback encodes to nothing, fail with our message rather + # than vLLM's opaque placeholder-count error. + info = _make_info(asr_enabled=True, asr_model_id="w") + proc = _make_processor_transcribing( + info, monkeypatch, "", ids_for=lambda text: [] + ) + with pytest.raises(ValueError, match="no tokens"): + proc._transcribe(np.zeros(1600, dtype=np.float32), {}) + + def test_nonempty_transcript_untouched(self, monkeypatch): + # The fallback must not perturb a clip that did contain speech. + info = _make_info(asr_enabled=True, asr_model_id="w") + proc = _make_processor_transcribing( + info, monkeypatch, "words", ids_for=self._ids_for + ) + assert proc._transcribe(np.zeros(1600, dtype=np.float32), {}) == [1, 2, 3] + + def test_blank_clip_replacement_is_not_empty(self, monkeypatch): info = _make_info(asr_enabled=True, asr_model_id="w") proc = _make_processor_transcribing( info, monkeypatch, "", ids_for=self._ids_for @@ -391,15 +432,15 @@ def get_data(self): out = _Kwargs( { - "audio_num_tokens": torch.tensor([0], dtype=torch.long), - "audio_token_ids": torch.zeros(0, dtype=torch.long), + "audio_num_tokens": torch.tensor([1], dtype=torch.long), + "audio_token_ids": torch.tensor([_BLANK_ID], dtype=torch.long), } ) updates = proc._get_prompt_updates(None, {}, out) assert len(updates) == 1 - assert updates[0].replacement(0) == [] + assert updates[0].replacement(0) == [_BLANK_ID] - def test_mixed_empty_and_nonempty_clips(self, monkeypatch): + def test_mixed_blank_and_nonempty_clips(self, monkeypatch): info = _make_info(asr_enabled=True, asr_max_audio_clips=4, asr_model_id="w") texts = iter(["", "words"]) info.get_tokenizer = lambda: SimpleNamespace( @@ -431,8 +472,166 @@ def transcribe(self, audio, **kw): mm_kwargs={}, tok_kwargs={}, ) - assert bf["audio_num_tokens"].tolist() == [0, 3] - assert len(bf["audio_token_ids"]) == 3 + # The silent clip contributes 1 token instead of 0, so both items keep a + # distinct, non-empty span and neither gets dropped. + assert bf["audio_num_tokens"].tolist() == [1, 3] + assert bf["audio_token_ids"].tolist() == [_BLANK_ID, 1, 2, 3] + + +_MARKER_ID = 99 +_TRANSCRIPT_IDS = [7, 8] + + +class _MarkerTokenizer: + """Marker is one special id, the transcript two; anything else is per-char. + + A class, not a SimpleNamespace: vLLM's ``_seq2tokens`` goes through an + ``lru_cache`` keyed on the tokenizer, so it has to be hashable. + """ + + def encode(self, text, add_special_tokens=False): + if text == "hello world": + return list(_TRANSCRIPT_IDS) + # Split on the marker the way a fast tokenizer splits on a registered + # special token; everything else is one id per character. + ids = [] + for i, part in enumerate(text.split(proc_mod.AUDIO_MARKER)): + if i: + ids.append(_MARKER_ID) + ids.extend(ord(c) for c in part) + return ids + + def decode(self, ids): + return "".join( + proc_mod.AUDIO_MARKER if i == _MARKER_ID else chr(i) for i in ids + ) + + +class TestPromptUpdatesAreApplied: + """The marker must actually become transcript ids on the *uncached* path. + + ``_hf_processor_applies_updates`` is vLLM's "did you expand the placeholder + yourself?" hook. We do not — we leave ``<|audio|>`` in the prompt and return + the transcript out of band — so it must report False or vLLM skips our + ``PromptReplacement`` and then fails to find the transcript it was promised. + + Only the uncached path (``--mm-processor-cache-gb 0``) consults the hook, so + the default cache setting hid this. These tests drive vLLM's real + ``_apply_hf_processor_text_mm`` / ``_maybe_apply_prompt_updates`` rather than + asserting on the override in isolation. + """ + + def _audio_items(self, count=1): + from vllm.multimodal.parse import AudioProcessorItems, MultiModalDataItems + + clips = [np.zeros(1600, dtype=np.float32) for _ in range(count)] + return MultiModalDataItems({"audio": AudioProcessorItems(clips)}) + + def _proc(self, monkeypatch, count=1, text="hello world"): + info = _make_info(asr_enabled=True, asr_model_id="w") + proc = _make_processor_transcribing( + info, monkeypatch, text, ids_for=lambda t: [7, 8] + ) + # ids_for is unused: the marker tokenizer does the encoding, so the + # transcript text maps to ids the same way the real path would. + tokenizer = _MarkerTokenizer() + info.get_tokenizer = lambda: tokenizer + return proc, self._audio_items(count) + + def test_hook_reports_updates_not_applied(self, monkeypatch): + proc, items = self._proc(monkeypatch) + assert ( + proc._hf_processor_applies_updates( + prompt_text=proc_mod.AUDIO_MARKER, + mm_items=items, + hf_processor_mm_kwargs={}, + tokenization_kwargs={}, + ) + is False + ) + + def test_uncached_path_reports_updates_not_applied(self, monkeypatch): + # Real vLLM code: this is the call site that decides whether the + # replacement runs (processing/processor.py, _apply_hf_processor_text_mm). + proc, items = self._proc(monkeypatch) + prompt_ids, _, is_update_applied = proc._apply_hf_processor_text_mm( + prompt_text=proc_mod.AUDIO_MARKER, + mm_items=items, + hf_processor_mm_kwargs={}, + tokenization_kwargs={}, + ) + # Marker still un-expanded, hence False. + assert prompt_ids == [_MARKER_ID] + assert is_update_applied is False + + def _apply_uncached(self, proc, items, prompt_text): + """vLLM's ``apply()`` with cache=None, minus the hashing/cache plumbing.""" + from vllm.multimodal.inputs import MultiModalKwargsItems + + prompt_ids, processed, is_update_applied = proc._apply_hf_processor_text_mm( + prompt_text=prompt_text, + mm_items=items, + hf_processor_mm_kwargs={}, + tokenization_kwargs={}, + ) + mm_kwargs = MultiModalKwargsItems.from_hf_inputs( + processed, proc._get_mm_fields_config(processed, {}) + ) + updates = proc._get_mm_prompt_updates(items, {}, mm_kwargs) + return proc._maybe_apply_prompt_updates( + mm_items=items, + prompt_ids=prompt_ids, + mm_kwargs=mm_kwargs, + mm_prompt_updates=updates, + is_update_applied=is_update_applied, + ) + + def test_marker_becomes_transcript_ids(self, monkeypatch): + proc, items = self._proc(monkeypatch) + new_ids, placeholders = self._apply_uncached(proc, items, proc_mod.AUDIO_MARKER) + # Marker replaced, not merely searched for. + assert new_ids == _TRANSCRIPT_IDS + assert _MARKER_ID not in new_ids + # And the placeholder range points at the transcript. + (ph,) = placeholders["audio"] + assert (ph.start_idx, ph.length) == (0, len(_TRANSCRIPT_IDS)) + + def test_transcript_spliced_between_surrounding_text(self, monkeypatch): + proc, items = self._proc(monkeypatch) + prompt = proc_mod.AUDIO_MARKER + "Q" + new_ids, placeholders = self._apply_uncached(proc, items, prompt) + assert new_ids == [*_TRANSCRIPT_IDS, ord("Q")] + (ph,) = placeholders["audio"] + assert (ph.start_idx, ph.length) == (0, len(_TRANSCRIPT_IDS)) + + def test_silent_clip_still_yields_a_placeholder(self, monkeypatch): + # The other half of the same invariant: a clip with no speech in it used + # to produce a zero-length replacement, which vLLM discards and then + # rejects the request over. The fallback text keeps the span findable. + proc, items = self._proc(monkeypatch, text="") + new_ids, placeholders = self._apply_uncached(proc, items, proc_mod.AUDIO_MARKER) + assert new_ids == [ord(proc_mod._EMPTY_TRANSCRIPT_TEXT)] + (ph,) = placeholders["audio"] + assert (ph.start_idx, ph.length) == (0, 1) + + def test_silent_clip_among_speech_clips(self, monkeypatch): + proc, items = self._proc(monkeypatch, count=2, text="") + new_ids, placeholders = self._apply_uncached( + proc, items, proc_mod.AUDIO_MARKER * 2 + ) + assert new_ids == [ord(proc_mod._EMPTY_TRANSCRIPT_TEXT)] * 2 + # Both items keep their own placeholder; neither collapses into the other. + assert len(placeholders["audio"]) == 2 + assert [p.length for p in placeholders["audio"]] == [1, 1] + + def test_two_clips_each_get_their_own_placeholder(self, monkeypatch): + proc, items = self._proc(monkeypatch, count=2) + new_ids, placeholders = self._apply_uncached( + proc, items, proc_mod.AUDIO_MARKER * 2 + ) + assert new_ids == _TRANSCRIPT_IDS * 2 + # One placeholder per audio item, or _validate_mm_placeholders raises. + assert len(placeholders["audio"]) == 2 class TestClipCeiling: From 4278c2e8ae5ec64755f4ac1670367d199d353e88 Mon Sep 17 00:00:00 2001 From: aviv ron Date: Tue, 4 Aug 2026 10:38:45 +0300 Subject: [PATCH 19/23] Pull the audio extra into the dev groups so audio tests can run MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The `audio` extra (soundfile, librosa) was declared but referenced by nothing: not `dev`, not `dev-vllm20`, not `test`, not the `tutorials` extra, and not either CI workflow. The only mention of `uv sync --extra audio` anywhere was inside an ImportError string in asr.py. So no documented install path produced a working audio checkpoint. A synced pod running the integration tests failed with: ModuleNotFoundError: No module named 'soundfile' in test_audio_serving_smoke.py and test_answerability_over_audio.py. This affected `dev` (vLLM 0.19) exactly as much as `dev-vllm20` — neither carried the extra. Changes: - `dev` and `dev-vllm20` now request granite-switch[hf,compose,audio]. `test` picks it up transitively via include-group. - gpu-tests.yaml states `--extra audio` explicitly. Redundant with the dev group today, but it documents the dependency where it is used so a later group refactor cannot silently drop it again. - docs/AUDIO.md gains an Installing section. `audio` is deliberately not folded into the `vllm` extra, since text-only vLLM users should not carry libsndfile and numba; that makes `--extra vllm --extra audio` the supported serving command, which needs saying out loud. ci.yaml is left alone on purpose: the CPU tier installs no vLLM, so the audio tests skip there, and tests/unit/test_asr.py deliberately exercises the librosa-absent path. Verified per group with `uv export`: dev, dev-vllm20 and test all now resolve librosa==0.11.0 and soundfile==0.14.0, and both documented serving combos (--extra vllm/vllm20 --extra audio) resolve without tripping the declared conflicts. The uv.lock delta is only the three requires-dev entries plus an audioread marker that simplifies as a consequence. Signed-off-by: aviv ron --- .github/workflows/gpu-tests.yaml | 5 ++++- docs/AUDIO.md | 16 ++++++++++++++++ pyproject.toml | 7 +++++-- uv.lock | 28 ++++++++++++++-------------- 4 files changed, 39 insertions(+), 17 deletions(-) diff --git a/.github/workflows/gpu-tests.yaml b/.github/workflows/gpu-tests.yaml index ad1c975..0e9c1a9 100644 --- a/.github/workflows/gpu-tests.yaml +++ b/.github/workflows/gpu-tests.yaml @@ -16,7 +16,10 @@ jobs: with: enable-cache: true - - run: uv sync --frozen --group dev --extra hf --extra vllm --extra compose + # `--extra audio` is redundant with the dev group (which now includes it) but + # stated explicitly: the audio tests need soundfile/librosa at runtime, and a + # group refactor should not silently drop them again. + - run: uv sync --frozen --group dev --extra hf --extra vllm --extra compose --extra audio - name: Run GPU tests run: | diff --git a/docs/AUDIO.md b/docs/AUDIO.md index 0787f85..7325483 100644 --- a/docs/AUDIO.md +++ b/docs/AUDIO.md @@ -9,6 +9,22 @@ intentionally simple and requires no training. The "proper" upgrade (feeding a trained projection of a speech encoder's embeddings straight into the LLM) reuses the same hooks — see [Design](#design) below. +## Installing + +The audio path needs `soundfile` and `librosa` on top of the vLLM backend — they +decode and resample the incoming waveform. They live in the `audio` extra, which is +**not** part of `vllm`, so a plain `uv sync --extra vllm` gives you a checkpoint that +fails on any non-16 kHz input: + +```bash +# Serving an audio-enabled checkpoint +uv sync --extra vllm --extra audio # or --extra vllm20 --extra audio + +# Development / running the test suite (the dev groups include audio already) +uv sync --group dev # vLLM 0.19.x +uv sync --group dev-vllm20 # vLLM 0.20.x +``` + ## Building an audio-enabled checkpoint Add `--enable-audio` when composing: diff --git a/pyproject.toml b/pyproject.toml index 58dd6a5..32aafd5 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -58,8 +58,11 @@ markers = [ [dependency-groups] vllm19 = ["vllm>=0.19.1,<0.20.0"] vllm20 = ["vllm>=0.20.0,<0.21.0"] -dev = ["pytest", "pytest-cov", { include-group = "vllm19" }, "granite-switch[hf,compose]"] -dev-vllm20 = ["pytest", "pytest-cov", { include-group = "vllm20" }, "granite-switch[hf,compose]"] +# `audio` is included so the audio tests can actually run: the ASR path needs +# soundfile/librosa at runtime, and no group pulled them in before (integration +# tests failed with ModuleNotFoundError on a synced pod). +dev = ["pytest", "pytest-cov", { include-group = "vllm19" }, "granite-switch[hf,compose,audio]"] +dev-vllm20 = ["pytest", "pytest-cov", { include-group = "vllm20" }, "granite-switch[hf,compose,audio]"] test = ["pytest", "pytest-cov", "bitsandbytes", "optimum-quanto", { include-group = "dev" }] [tool.uv] diff --git a/uv.lock b/uv.lock index e4761bc..b5f69d9 100644 --- a/uv.lock +++ b/uv.lock @@ -557,8 +557,8 @@ name = "audioread" version = "3.1.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "standard-aifc", marker = "python_full_version >= '3.13' or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20')" }, - { name = "standard-sunau", marker = "python_full_version >= '3.13' or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20')" }, + { name = "standard-aifc", marker = "python_full_version >= '3.13'" }, + { name = "standard-sunau", marker = "python_full_version >= '3.13'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/a1/4a/874ecf9b472f998130c2b5e145dcdb9f6131e84786111489103b66772143/audioread-3.1.0.tar.gz", hash = "sha256:1c4ab2f2972764c896a8ac61ac53e261c8d29f0c6ccd652f84e18f08a4cab190", size = 20082, upload-time = "2025-10-26T19:44:13.484Z" } wheels = [ @@ -2564,20 +2564,20 @@ vllm20 = [ [package.dev-dependencies] dev = [ - { name = "granite-switch", extra = ["compose", "hf"], marker = "extra == 'group-14-granite-switch-dev' or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20')" }, + { name = "granite-switch", extra = ["audio", "compose", "hf"], marker = "extra == 'group-14-granite-switch-dev' or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20')" }, { name = "pytest" }, { name = "pytest-cov" }, { name = "vllm", version = "0.19.1", source = { registry = "https://pypi.org/simple" } }, ] dev-vllm20 = [ - { name = "granite-switch", extra = ["compose", "hf"], marker = "extra == 'group-14-granite-switch-dev-vllm20' or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20')" }, + { name = "granite-switch", extra = ["audio", "compose", "hf"], marker = "extra == 'group-14-granite-switch-dev-vllm20' or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20')" }, { name = "pytest" }, { name = "pytest-cov" }, { name = "vllm", version = "0.20.2", source = { registry = "https://pypi.org/simple" } }, ] test = [ { name = "bitsandbytes" }, - { name = "granite-switch", extra = ["compose", "hf"], marker = "extra == 'group-14-granite-switch-test' or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20')" }, + { name = "granite-switch", extra = ["audio", "compose", "hf"], marker = "extra == 'group-14-granite-switch-test' or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20')" }, { name = "optimum-quanto" }, { name = "pytest" }, { name = "pytest-cov" }, @@ -2622,20 +2622,20 @@ provides-extras = ["hf", "vllm", "vllm20", "compose", "build", "audio", "tutoria [package.metadata.requires-dev] dev = [ - { name = "granite-switch", extras = ["hf", "compose"] }, + { name = "granite-switch", extras = ["hf", "compose", "audio"] }, { name = "pytest" }, { name = "pytest-cov" }, { name = "vllm", specifier = ">=0.19.1,<0.20.0" }, ] dev-vllm20 = [ - { name = "granite-switch", extras = ["hf", "compose"] }, + { name = "granite-switch", extras = ["hf", "compose", "audio"] }, { name = "pytest" }, { name = "pytest-cov" }, { name = "vllm", specifier = ">=0.20.0,<0.21.0" }, ] test = [ { name = "bitsandbytes" }, - { name = "granite-switch", extras = ["hf", "compose"] }, + { name = "granite-switch", extras = ["hf", "compose", "audio"] }, { name = "optimum-quanto" }, { name = "pytest" }, { name = "pytest-cov" }, @@ -3139,8 +3139,8 @@ dependencies = [ { name = "scipy" }, { name = "soundfile" }, { name = "soxr" }, - { name = "standard-aifc", marker = "python_full_version >= '3.13' or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20')" }, - { name = "standard-sunau", marker = "python_full_version >= '3.13' or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20')" }, + { name = "standard-aifc", marker = "python_full_version >= '3.13'" }, + { name = "standard-sunau", marker = "python_full_version >= '3.13'" }, { name = "typing-extensions" }, ] sdist = { url = "https://files.pythonhosted.org/packages/64/36/360b5aafa0238e29758729e9486c6ed92a6f37fa403b7875e06c115cdf4a/librosa-0.11.0.tar.gz", hash = "sha256:f5ed951ca189b375bbe2e33b2abd7e040ceeee302b9bbaeeffdfddb8d0ace908", size = 327001, upload-time = "2025-03-11T15:09:54.884Z" } @@ -4272,7 +4272,7 @@ resolution-markers = [ "python_full_version < '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20'", ] dependencies = [ - { name = "llvmlite", version = "0.47.0", source = { registry = "https://pypi.org/simple" } }, + { name = "llvmlite", version = "0.47.0", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-14-granite-switch-vllm20' or extra == 'group-14-granite-switch-dev-vllm20' or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20') or (extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19')" }, { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.13' and extra == 'extra-14-granite-switch-vllm20') or (python_full_version < '3.13' and extra == 'group-14-granite-switch-dev-vllm20') or (python_full_version < '3.13' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20')" }, { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.13' and extra == 'extra-14-granite-switch-vllm20') or (python_full_version >= '3.13' and extra == 'group-14-granite-switch-dev-vllm20') or (python_full_version >= '3.13' and extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20') or (extra != 'extra-14-granite-switch-tutorials' and extra != 'extra-14-granite-switch-vllm' and extra != 'extra-14-granite-switch-vllm20' and extra != 'group-14-granite-switch-dev' and extra != 'group-14-granite-switch-dev-vllm20' and extra != 'group-14-granite-switch-test' and extra != 'group-14-granite-switch-vllm19' and extra != 'group-14-granite-switch-vllm20')" }, ] @@ -7138,8 +7138,8 @@ name = "standard-aifc" version = "3.13.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "audioop-lts", marker = "python_full_version >= '3.13' or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20')" }, - { name = "standard-chunk", marker = "python_full_version >= '3.13' or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20')" }, + { name = "audioop-lts", marker = "python_full_version >= '3.13'" }, + { name = "standard-chunk", marker = "python_full_version >= '3.13'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/c4/53/6050dc3dde1671eb3db592c13b55a8005e5040131f7509cef0215212cb84/standard_aifc-3.13.0.tar.gz", hash = "sha256:64e249c7cb4b3daf2fdba4e95721f811bde8bdfc43ad9f936589b7bb2fae2e43", size = 15240, upload-time = "2024-10-30T16:01:31.772Z" } wheels = [ @@ -7160,7 +7160,7 @@ name = "standard-sunau" version = "3.13.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "audioop-lts", marker = "python_full_version >= '3.13' or (extra == 'extra-14-granite-switch-tutorials' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-tutorials' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'extra-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'extra-14-granite-switch-vllm' and extra == 'group-14-granite-switch-vllm20') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-dev') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'extra-14-granite-switch-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-dev-vllm20') or (extra == 'group-14-granite-switch-dev' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-test') or (extra == 'group-14-granite-switch-dev-vllm20' and extra == 'group-14-granite-switch-vllm19') or (extra == 'group-14-granite-switch-test' and extra == 'group-14-granite-switch-vllm20') or (extra == 'group-14-granite-switch-vllm19' and extra == 'group-14-granite-switch-vllm20')" }, + { name = "audioop-lts", marker = "python_full_version >= '3.13'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/66/e3/ce8d38cb2d70e05ffeddc28bb09bad77cfef979eb0a299c9117f7ed4e6a9/standard_sunau-3.13.0.tar.gz", hash = "sha256:b319a1ac95a09a2378a8442f403c66f4fd4b36616d6df6ae82b8e536ee790908", size = 9368, upload-time = "2024-10-30T16:01:41.626Z" } wheels = [ From 94e6d5dd55b9fd4a69f544303c45083de52cc28a Mon Sep 17 00:00:00 2001 From: aviv ron Date: Tue, 4 Aug 2026 10:50:51 +0300 Subject: [PATCH 20/23] Add an `audio` pytest marker to the audio/ASR tests The audio tests are spread across five directories (unit, vllm, composer, integration), and two of the files mix audio tests in with unrelated ones, so selecting the audio tier meant listing paths plus a `-k` filter. Register an `audio` marker and apply it so `pytest -m audio` selects all 131 of them: - module-level `pytestmark` on the four dedicated files (test_asr, test_chunking, test_audio_processor, and the three integration files) - class-level `@pytest.mark.audio` on TestAudioConfig in test_config.py and on the two audio classes in test_chat_template.py, so the non-audio tests in those files stay unselected test_audio_processor's existing single `pytestmark` skipif becomes a list to hold both marks. Documented in docs/AUDIO.md: `pytest -m audio` for everything, or `pytest -m "audio and not gpu"` for the 118-test CPU tier that runs in seconds. No test bodies changed; the full suite still collects 1490 tests. Signed-off-by: aviv ron --- docs/AUDIO.md | 11 +++++++++++ pyproject.toml | 1 + tests/composer/test_chat_template.py | 2 ++ .../integration/test_adapter_routing_audio_enabled.py | 7 ++++++- tests/integration/test_answerability_over_audio.py | 7 ++++++- tests/integration/test_audio_serving_smoke.py | 7 ++++++- tests/unit/test_asr.py | 2 ++ tests/unit/test_chunking.py | 2 ++ tests/unit/test_config.py | 1 + tests/vllm/test_audio_processor.py | 8 ++++---- 10 files changed, 41 insertions(+), 7 deletions(-) diff --git a/docs/AUDIO.md b/docs/AUDIO.md index 7325483..8cf88bb 100644 --- a/docs/AUDIO.md +++ b/docs/AUDIO.md @@ -242,6 +242,17 @@ adapter behaves identically to the text equivalent. ## Tests +Everything on the audio path carries the `audio` marker, so the whole tier selects +in one command regardless of where the tests live: + +```bash +# All audio tests (13 of them need a GPU and a real checkpoint) +pytest -m audio -v -s --tb=short + +# CPU tier only — runs in a few seconds +pytest -m "audio and not gpu" -v -s --tb=short +``` + - `tests/unit/test_asr.py` — CPU unit tests for the ASR backend (audio coercion, resampling, transcription with a mocked pipeline, pipeline-kwargs cache keying, and per-request decode-kwargs resolution). No GPU/vLLM required. diff --git a/pyproject.toml b/pyproject.toml index 32aafd5..9573571 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -53,6 +53,7 @@ markers = [ "slow: takes > 30s", "deep: expensive code-theory tests (m=8 / 256-dim); run with: pytest -m deep", "requires_model: needs a real model checkpoint", + "audio: exercises the audio/ASR path; run with: pytest -m audio", ] [dependency-groups] diff --git a/tests/composer/test_chat_template.py b/tests/composer/test_chat_template.py index 9ffe599..40a9c38 100644 --- a/tests/composer/test_chat_template.py +++ b/tests/composer/test_chat_template.py @@ -555,6 +555,7 @@ def _audio_messages(text="transcribe this", audio_type="audio"): ] +@pytest.mark.audio class TestAudioChatTemplate: """configure_audio_chat_template emits the <|audio|> marker for audio parts.""" @@ -606,6 +607,7 @@ def test_none_template_is_noop(self): assert tokenizer.chat_template is None +@pytest.mark.audio class TestAudioAndAdapterInjectionsCompose: """Adapter and audio injections applied in sequence leave both intact.""" diff --git a/tests/integration/test_adapter_routing_audio_enabled.py b/tests/integration/test_adapter_routing_audio_enabled.py index 7bbc63b..0eae2b0 100644 --- a/tests/integration/test_adapter_routing_audio_enabled.py +++ b/tests/integration/test_adapter_routing_audio_enabled.py @@ -16,7 +16,12 @@ import pytest -pytestmark = [pytest.mark.slow, pytest.mark.requires_model, pytest.mark.gpu] +pytestmark = [ + pytest.mark.audio, + pytest.mark.slow, + pytest.mark.requires_model, + pytest.mark.gpu, +] if importlib.util.find_spec("granite_switch.hf") is None: pytest.skip("requires the HF backend ([hf] extra)", allow_module_level=True) diff --git a/tests/integration/test_answerability_over_audio.py b/tests/integration/test_answerability_over_audio.py index 538457b..dae14e4 100644 --- a/tests/integration/test_answerability_over_audio.py +++ b/tests/integration/test_answerability_over_audio.py @@ -21,7 +21,12 @@ import pytest -pytestmark = [pytest.mark.slow, pytest.mark.requires_model, pytest.mark.gpu] +pytestmark = [ + pytest.mark.audio, + pytest.mark.slow, + pytest.mark.requires_model, + pytest.mark.gpu, +] if importlib.util.find_spec("vllm") is None: pytest.skip("requires vLLM installed", allow_module_level=True) diff --git a/tests/integration/test_audio_serving_smoke.py b/tests/integration/test_audio_serving_smoke.py index 3c0e9c7..fbc22b4 100644 --- a/tests/integration/test_audio_serving_smoke.py +++ b/tests/integration/test_audio_serving_smoke.py @@ -18,7 +18,12 @@ import pytest -pytestmark = [pytest.mark.slow, pytest.mark.requires_model, pytest.mark.gpu] +pytestmark = [ + pytest.mark.audio, + pytest.mark.slow, + pytest.mark.requires_model, + pytest.mark.gpu, +] if importlib.util.find_spec("vllm") is None: pytest.skip("requires vLLM installed", allow_module_level=True) diff --git a/tests/unit/test_asr.py b/tests/unit/test_asr.py index 69187ce..9571907 100644 --- a/tests/unit/test_asr.py +++ b/tests/unit/test_asr.py @@ -23,6 +23,8 @@ asr = importlib.util.module_from_spec(_spec) _spec.loader.exec_module(asr) +pytestmark = pytest.mark.audio + class TestCoerceAudio: def test_array_plus_rate(self): diff --git a/tests/unit/test_chunking.py b/tests/unit/test_chunking.py index 05a4738..8143c7c 100644 --- a/tests/unit/test_chunking.py +++ b/tests/unit/test_chunking.py @@ -19,6 +19,8 @@ chunking = importlib.util.module_from_spec(_spec) _spec.loader.exec_module(chunking) +pytestmark = pytest.mark.audio + SR = 16_000 diff --git a/tests/unit/test_config.py b/tests/unit/test_config.py index 6252544..7ecbab4 100644 --- a/tests/unit/test_config.py +++ b/tests/unit/test_config.py @@ -100,6 +100,7 @@ def test_projection_head_dim_inferred_from_hidden_size(self): # ════════════════════════════════════════════════════════════════════ +@pytest.mark.audio class TestAudioConfig: def test_asr_defaults_off(self): cfg = GraniteSwitchConfig(num_adapters=0) diff --git a/tests/vllm/test_audio_processor.py b/tests/vllm/test_audio_processor.py index 96f95f4..cd366c2 100644 --- a/tests/vllm/test_audio_processor.py +++ b/tests/vllm/test_audio_processor.py @@ -15,10 +15,10 @@ _VLLM_AVAILABLE = importlib.util.find_spec("vllm") is not None -pytestmark = pytest.mark.skipif( - not _VLLM_AVAILABLE, - reason="requires vLLM installed", -) +pytestmark = [ + pytest.mark.audio, + pytest.mark.skipif(not _VLLM_AVAILABLE, reason="requires vLLM installed"), +] if _VLLM_AVAILABLE: from granite_switch.vllm.audio import processor as proc_mod From 1362bacf38f222f629c808cb93109d07d5c451f6 Mon Sep 17 00:00:00 2001 From: aviv ron Date: Tue, 4 Aug 2026 17:06:48 +0300 Subject: [PATCH 21/23] Fix control_to_substitute_lut length drift on audio checkpoints Composing with --enable-audio produced a checkpoint whose switch lookup table was one row shorter than the config.json shipped beside it. Loading it through the HF backend failed with an out-of-bounds embedding gather, surfacing as the CUDA device-side assert `indexSelectSmallIndex: srcIndex < srcSelectDimSize`. Root cause: SingleSwitch sizes the table max(config.vocab_size, max_ctrl_id + 1) at construction. Compose builds the model from a config whose vocab_size is copied verbatim from the base checkpoint, then grows the vocabulary in step 3 via resize_token_embeddings, which updates config.vocab_size and both embedding matrices but leaves the buffer untouched. Without audio the construction-time and load-time computations agree by coincidence, because compose ends with vocab_size == max_ctrl_id + 1. The <|audio|> marker is the first token to make vocab_size larger than that and break the tie. The resulting mismatch is not recoverable at load time. from_pretrained discards the stored tensor and there is no _init_weights rule for the buffer, so it is left as uninitialised memory. Every id then reads as a control id and the token-exchange rewrite sends out-of-range ids into the embedding gather. Three changes: - Rebuild the table at the end of compose step 3, after the resize, so the saved buffer and the shipped config agree. The sizing rule is factored out into build_control_to_substitute_lut() so __init__ and the new SingleSwitch.rebuild_control_to_substitute_lut() cannot diverge. - Assert the invariant in validator.validate_control_lut(), called after the rebuild. An internally inconsistent checkpoint now fails during compose instead of faulting on a GPU much later, and the error names both lengths. - Stop add_audio_token evicting the adapter control tokens. add_special_tokens replaces additional_special_tokens rather than extending it, and transformers exposes no accessor for the current list, so the marker call now re-passes the control tokens explicitly via keep_special_tokens. Previously, enabling audio silently dropped all of them from all_special_tokens and from the saved tokenizer_config.json. Token ids are unchanged: the marker still takes the next free id. MockTokenizer in the composer tests had append semantics for add_special_tokens and so could never have caught that eviction; it now mirrors the replace behaviour of the real tokenizer. The vLLM switch keeps its own copy of the sizing expression and is deliberately untouched: it never resizes embeddings and never writes checkpoints, and importing from the HF backend would couple two independently installable extras. Only newly composed checkpoints are fixed. Existing audio checkpoints still ship a stale table and need a re-compose; they now fail clearly at from_pretrained rather than faulting on the GPU. Tests: 158 unit, 565 hf, 154 composer. The save/load round-trip test was verified to fail without the rebuild, reproducing the original mismatch report. Signed-off-by: aviv ron --- .../composer/compose_granite_switch.py | 27 ++++- .../composer/tokenizer_setup.py | 21 +++- src/granite_switch/composer/validator.py | 33 +++++++ src/granite_switch/hf/switch/single.py | 75 +++++++++++--- tests/composer/test_tokenizer_setup.py | 84 +++++++++++++++- tests/composer/test_validator.py | 77 ++++++++++++++- tests/hf/test_token_exchange.py | 99 +++++++++++++++++++ 7 files changed, 398 insertions(+), 18 deletions(-) diff --git a/src/granite_switch/composer/compose_granite_switch.py b/src/granite_switch/composer/compose_granite_switch.py index 426f5bb..0517c25 100755 --- a/src/granite_switch/composer/compose_granite_switch.py +++ b/src/granite_switch/composer/compose_granite_switch.py @@ -67,6 +67,7 @@ configure_chat_template, get_alora_first_invocation_token_id, ) +from granite_switch.composer.validator import validate_control_lut from granite_switch.config import ASR_DTYPES # --------------------------------------------------------------------------- @@ -871,7 +872,14 @@ def build(): or args.asr_chunk_length_s is not None or args.asr_chunk_overlap_s is not None ) - audio_token_id = add_audio_token(tokenizer) if audio_enabled else None + # The control tokens are re-passed so this call doesn't drop them from the + # tokenizer's additional-special-tokens list (add_special_tokens replaces + # that list rather than extending it). + audio_token_id = ( + add_audio_token(tokenizer, keep_special_tokens=special_tokens) + if audio_enabled + else None + ) # Configure chat template with adapter mappings (Granite models only). # Non-Granite models preserve the upstream template verbatim because @@ -1011,6 +1019,23 @@ def build(): new_embed_size = model.model.embed_tokens.weight.shape[0] print(f"Embeddings resized: {old_embed_size} -> {new_embed_size}") + # The switch sized its control->substitute table from the pre-resize + # config.vocab_size (copied from the base model), so the resize above leaves + # it short of the config this checkpoint will ship with. Re-derive it, then + # assert the two agree — see validate_control_lut for why a mismatch is not + # something the loader can recover from. + switch = getattr(model.model, "switch", None) + if switch is not None: + lut = getattr(switch, "control_to_substitute_lut", None) + if lut is not None and lut.numel() != model.config.vocab_size: + old_lut_size = lut.numel() + switch.rebuild_control_to_substitute_lut(model.config) + print( + "Switch control LUT rebuilt: " + f"{old_lut_size} -> {switch.control_to_substitute_lut.numel()}" + ) + validate_control_lut(model) + print(f"\nStep 3 complete in {time.time() - step_start:.2f}s") return ( diff --git a/src/granite_switch/composer/tokenizer_setup.py b/src/granite_switch/composer/tokenizer_setup.py index 900cfec..4232a1f 100644 --- a/src/granite_switch/composer/tokenizer_setup.py +++ b/src/granite_switch/composer/tokenizer_setup.py @@ -94,7 +94,11 @@ def add_control_tokens( return adapter_token_ids, special_tokens -def add_audio_token(tokenizer, marker: str = "<|audio|>") -> int: +def add_audio_token( + tokenizer, + marker: str = "<|audio|>", + keep_special_tokens: list[str] | None = None, +) -> int: """Add the audio placeholder marker token to the tokenizer. Used for the audio cascade: this single special token is placed in the @@ -102,13 +106,26 @@ def add_audio_token(tokenizer, marker: str = "<|audio|>") -> int: request time (see granite_switch.vllm.audio). Registering it as one special token keeps the processor's prompt-replacement match clean. + ``keep_special_tokens`` must list every token an earlier + ``add_special_tokens({"additional_special_tokens": ...})`` call registered — + in practice the adapter control tokens from :func:`add_control_tokens`. + That call *replaces* the additional-special-tokens list instead of appending + to it, and transformers exposes no way to read the current list back, so any + token not re-passed here silently drops out of ``all_special_tokens`` and + out of the saved ``tokenizer_config.json``. Re-passing an already-added + token is free: it keeps its id and does not grow the vocabulary. + Must be called before the model's embedding resize so the new row is sized in. Returns the marker's token id. """ print(f"\nAdding audio marker token: {marker}") - tokenizer.add_special_tokens({"additional_special_tokens": [marker]}) + # Marker last so it takes the next free id and the kept tokens keep theirs. + kept = [t for t in (keep_special_tokens or []) if t != marker] + tokenizer.add_special_tokens({"additional_special_tokens": [*kept, marker]}) token_id = tokenizer.convert_tokens_to_ids(marker) print(f" {marker}: {token_id}") + if kept: + print(f" (preserved {len(kept)} existing special token(s))") return token_id diff --git a/src/granite_switch/composer/validator.py b/src/granite_switch/composer/validator.py index df3a594..55d52a5 100644 --- a/src/granite_switch/composer/validator.py +++ b/src/granite_switch/composer/validator.py @@ -13,6 +13,39 @@ from .arch import ArchDescriptor +def validate_control_lut(model) -> None: + """Check the switch's control->substitute table matches the shipped config. + + The table is a persistent buffer sized from ``config.vocab_size``, so a + checkpoint whose buffer length disagrees with its own ``config.json`` is + internally inconsistent. Loading one is not a graceful degradation: + ``from_pretrained`` discards the mismatched tensor and leaves the buffer as + uninitialised memory, which turns every token into a "control" token and + sends out-of-range ids into the embedding gather — surfacing as an opaque + CUDA ``srcIndex < srcSelectDimSize`` device-side assert far from the cause. + + Raises: + ValueError: if the table length differs from ``config.vocab_size``. + """ + switch = getattr(getattr(model, "model", None), "switch", None) + lut = getattr(switch, "control_to_substitute_lut", None) + if lut is None: + return # no token-exchange mapping on this model + + expected = getattr(model.config, "vocab_size", None) + if expected is None or lut.numel() == expected: + return + + raise ValueError( + f"control_to_substitute_lut has {lut.numel()} entries but " + f"config.vocab_size is {expected}. Saving this model would produce a " + f"checkpoint that cannot be loaded correctly. The table is derived from " + f"vocab_size and the adapter token ids, so rebuild it after any " + f"vocabulary change with " + f"switch.rebuild_control_to_substitute_lut(model.config)." + ) + + def validate_all_parameters( model, arch: ArchDescriptor, diff --git a/src/granite_switch/hf/switch/single.py b/src/granite_switch/hf/switch/single.py index 8f73a9b..dba7e5c 100644 --- a/src/granite_switch/hf/switch/single.py +++ b/src/granite_switch/hf/switch/single.py @@ -19,6 +19,35 @@ from transformers.models.granite.modeling_granite import eager_attention_forward +def build_control_to_substitute_lut(config) -> torch.Tensor | None: + """Derive the control->substitute lookup table from *config*. + + Shape ``[max(vocab_size, max_ctrl_id + 1)]``: ``-1`` at every non-control id + and the substitute id at each control slot. The ``max`` keeps every control + id addressable even when ``vocab_size`` lags the tokenizer. + + Returns ``None`` when *config* carries no token-exchange mapping, in which + case the switch leaves ``input_ids`` untouched. + + Single source of truth for the sizing rule: the table is a pure function of + ``vocab_size``, ``adapter_token_ids`` and ``adapter_substitute_token_ids``, + so anything that changes those must re-derive it (see + :meth:`SingleSwitch.rebuild_control_to_substitute_lut`). + """ + if config is None: + return None + ctrl_ids = getattr(config, "adapter_token_ids", None) + sub_ids = getattr(config, "adapter_substitute_token_ids", None) + if not ctrl_ids or not sub_ids: + return None + + lut_size = max(getattr(config, "vocab_size", 0), max(ctrl_ids) + 1) + lut = torch.full((lut_size,), -1, dtype=torch.long) + for ctrl_id, sub_id in zip(ctrl_ids, sub_ids): + lut[ctrl_id] = sub_id + return lut + + class SingleSwitch(nn.Module): """Single-head attention-based switch for adapter selection. @@ -89,22 +118,44 @@ def __init__( # control-token positions carry the substitute id by the time the # decoder embeds them. The decoder is then oblivious — it just calls # embed_tokens(input_ids) and gets the right result by construction. - if ( - config is not None - and getattr(config, "adapter_token_ids", None) is not None - and getattr(config, "adapter_substitute_token_ids", None) is not None - ): - ctrl_ids = config.adapter_token_ids - sub_ids = config.adapter_substitute_token_ids - max_ctrl_id = max(ctrl_ids) - lut_size = max(getattr(config, "vocab_size", 0), max_ctrl_id + 1) - lut = torch.full((lut_size,), -1, dtype=torch.long) - for ctrl_id, sub_id in zip(ctrl_ids, sub_ids): - lut[ctrl_id] = sub_id + lut = build_control_to_substitute_lut(config) + if lut is not None: self.register_buffer("control_to_substitute_lut", lut) else: self.control_to_substitute_lut = None + def rebuild_control_to_substitute_lut(self, config=None) -> bool: + """Re-derive the control->substitute table after a vocabulary change. + + ``__init__`` sizes the table from ``config.vocab_size``, so anything that + grows the vocabulary afterwards — notably + ``resize_token_embeddings`` when compose adds control and marker tokens — + leaves the buffer shorter than the config it will be saved alongside. + + That matters because the buffer is persistent. On ``from_pretrained``, + a stored tensor whose shape disagrees with the freshly-constructed one is + discarded and the buffer is left as uninitialised memory (there is no + ``_init_weights`` rule for it), so every id reads as a control id and the + rewrite sends out-of-range ids into the embedding gather. Re-derive the + table before saving so the checkpoint and its config agree. + + Returns ``True`` if a table was rebuilt, ``False`` if this switch has no + token-exchange mapping to rebuild. + """ + lut = build_control_to_substitute_lut( + config if config is not None else self.config + ) + if lut is None: + return False + + existing = getattr(self, "control_to_substitute_lut", None) + if existing is not None: + lut = lut.to(device=existing.device) + self.control_to_substitute_lut = lut + else: + self.register_buffer("control_to_substitute_lut", lut) + return True + @property def num_cache_layers(self) -> int: """Number of cache slots used.""" diff --git a/tests/composer/test_tokenizer_setup.py b/tests/composer/test_tokenizer_setup.py index 0b099fb..b649c45 100644 --- a/tests/composer/test_tokenizer_setup.py +++ b/tests/composer/test_tokenizer_setup.py @@ -8,6 +8,7 @@ from granite_switch.composer.tokenizer_setup import ( _decode_alora_invocation_text, + add_audio_token, add_control_tokens, configure_chat_template, ) @@ -29,15 +30,21 @@ def __len__(self): return self._vocab_size def add_special_tokens(self, special_tokens_dict): - """Add special tokens and return count added.""" + """Add special tokens and return count added. + + Mirrors transformers: tokens new to the vocabulary are appended and keep + their id, but ``additional_special_tokens`` is *replaced* by the list + passed in rather than extended. A second call therefore drops whatever + the first one registered unless the caller re-passes it. + """ tokens = special_tokens_dict.get("additional_special_tokens", []) num_added = 0 for token in tokens: if token not in self._vocab: self._vocab[token] = self._vocab_size self._vocab_size += 1 - self._special_tokens.append(token) num_added += 1 + self._special_tokens = list(tokens) return num_added def convert_tokens_to_ids(self, token): @@ -160,6 +167,79 @@ def test_token_format(self, capsys): assert special_tokens[0] == "<|my_adapter|>" +class TestAddAudioToken: + """add_audio_token must not evict the control tokens added before it. + + ``add_special_tokens`` replaces ``additional_special_tokens`` instead of + extending it, and transformers exposes no way to read the current list back, + so the marker call has to re-pass whatever it wants to keep. + """ + + _ADAPTERS = [ + ("/path/to/rag", "rag", "alora"), + ("/path/to/code", "code", "lora"), + ] + + def test_marker_takes_the_next_free_id(self, capsys): + """The marker is added after the control tokens, so it gets the next id.""" + tokenizer = MockTokenizer(initial_vocab_size=100) + _, special_tokens = add_control_tokens(tokenizer, self._ADAPTERS) + + token_id = add_audio_token(tokenizer, keep_special_tokens=special_tokens) + + assert token_id == 102 + assert len(tokenizer) == 103 + + def test_control_tokens_survive_the_marker(self, capsys): + """Both the controls and the marker stay registered as special.""" + tokenizer = MockTokenizer(initial_vocab_size=100) + _, special_tokens = add_control_tokens(tokenizer, self._ADAPTERS) + + add_audio_token(tokenizer, keep_special_tokens=special_tokens) + + assert tokenizer._special_tokens == ["<|rag|>", "<|code|>", "<|audio|>"] + + def test_control_token_ids_are_unchanged(self, capsys): + """Re-passing an added token keeps its id and does not grow the vocab.""" + tokenizer = MockTokenizer(initial_vocab_size=100) + ctrl_ids, special_tokens = add_control_tokens(tokenizer, self._ADAPTERS) + + add_audio_token(tokenizer, keep_special_tokens=special_tokens) + + assert [tokenizer.convert_tokens_to_ids(t) for t in special_tokens] == ctrl_ids + + def test_omitting_keep_evicts_the_control_tokens(self, capsys): + """Witness for why keep_special_tokens exists. + + Without it the marker call drops every control token from the + additional-special-tokens list — silently, since the ids and the + vocabulary are untouched. + """ + tokenizer = MockTokenizer(initial_vocab_size=100) + add_control_tokens(tokenizer, self._ADAPTERS) + + add_audio_token(tokenizer) + + assert tokenizer._special_tokens == ["<|audio|>"] + + def test_marker_not_duplicated_when_already_kept(self, capsys): + """Passing the marker in keep_special_tokens must not register it twice.""" + tokenizer = MockTokenizer(initial_vocab_size=100) + + add_audio_token(tokenizer, keep_special_tokens=["<|audio|>", "<|rag|>"]) + + assert tokenizer._special_tokens == ["<|rag|>", "<|audio|>"] + assert len(tokenizer) == 102 + + def test_custom_marker(self, capsys): + """A non-default marker is honored.""" + tokenizer = MockTokenizer(initial_vocab_size=100) + + token_id = add_audio_token(tokenizer, marker="<|sound|>") + + assert tokenizer.convert_tokens_to_ids("<|sound|>") == token_id + + class TestConfigureChatTemplate: """Structural tests for configure_chat_template — verify template assembly.""" diff --git a/tests/composer/test_validator.py b/tests/composer/test_validator.py index 465f055..a253c72 100644 --- a/tests/composer/test_validator.py +++ b/tests/composer/test_validator.py @@ -1,12 +1,17 @@ # SPDX-License-Identifier: Apache-2.0 """Unit tests for post-build parameter validation.""" +from types import SimpleNamespace + import pytest import torch import torch.nn as nn from granite_switch.composer.arch import ArchDescriptor, ModuleDescriptor -from granite_switch.composer.validator import validate_all_parameters +from granite_switch.composer.validator import ( + validate_all_parameters, + validate_control_lut, +) @pytest.fixture @@ -273,3 +278,73 @@ def test_partial_adapter_coverage(self, simple_arch, capsys): captured = capsys.readouterr() # Both qkv and o_proj should be considered populated (by different adapters) assert "Parameter summary" in captured.out + + +class _MockSwitch(nn.Module): + """Switch carrying a control->substitute table of a chosen length.""" + + def __init__(self, lut_size: int | None): + super().__init__() + if lut_size is None: + self.control_to_substitute_lut = None + else: + self.register_buffer( + "control_to_substitute_lut", + torch.full((lut_size,), -1, dtype=torch.long), + ) + + +class _MockSwitchModel(nn.Module): + """Minimal stand-in exposing the attributes validate_control_lut reads.""" + + def __init__(self, vocab_size, lut_size: int | None, with_switch: bool = True): + super().__init__() + self.config = SimpleNamespace(vocab_size=vocab_size) + self.model = nn.Module() + if with_switch: + self.model.switch = _MockSwitch(lut_size) + + +class TestValidateControlLut: + """The table length must match the config.vocab_size the checkpoint ships. + + A mismatch is not recoverable at load time: from_pretrained discards the + stored tensor and leaves the buffer uninitialised, so every id reads as a + control id. Compose has to reject it rather than write it out. + """ + + def test_matching_length_passes(self): + validate_control_lut(_MockSwitchModel(vocab_size=200, lut_size=200)) + + def test_one_row_short_raises(self): + """The <|audio|> off-by-one: vocab grew after the switch was built.""" + model = _MockSwitchModel(vocab_size=100365, lut_size=100364) + + with pytest.raises(ValueError, match="control_to_substitute_lut") as exc: + validate_control_lut(model) + + # Both numbers must appear — the delta is the whole diagnosis. + assert "100364" in str(exc.value) + assert "100365" in str(exc.value) + + def test_longer_than_vocab_raises(self): + """Also catches the shrink direction (e.g. a padded base vocab).""" + with pytest.raises(ValueError): + validate_control_lut(_MockSwitchModel(vocab_size=100365, lut_size=102400)) + + def test_no_switch_is_not_an_error(self): + """Zero-adapter checkpoints have no switch to validate.""" + validate_control_lut( + _MockSwitchModel(vocab_size=200, lut_size=None, with_switch=False) + ) + + def test_switch_without_mapping_is_not_an_error(self): + """No token-exchange mapping configured -> nothing to check.""" + validate_control_lut(_MockSwitchModel(vocab_size=200, lut_size=None)) + + def test_config_without_vocab_size_is_skipped(self): + """Don't invent a failure when there is nothing to compare against.""" + model = _MockSwitchModel(vocab_size=200, lut_size=64) + del model.config.vocab_size + + validate_control_lut(model) diff --git a/tests/hf/test_token_exchange.py b/tests/hf/test_token_exchange.py index 234188f..7d4bbee 100644 --- a/tests/hf/test_token_exchange.py +++ b/tests/hf/test_token_exchange.py @@ -13,6 +13,7 @@ from granite_switch.config import GraniteSwitchConfig from granite_switch.hf import GraniteSwitchForCausalLM +from granite_switch.hf.switch.single import build_control_to_substitute_lut def _build(num_adapters=2, substitute_ids=(1, 7)): @@ -112,3 +113,101 @@ def test_adapter_indices_still_activate(self): assert adapter_indices[0, 2].item() == 1 assert adapter_indices[0, 3].item() == 1 assert adapter_indices[0, 4].item() == 1 + + +class TestControlLutSizing: + """build_control_to_substitute_lut is the single source of the sizing rule.""" + + def test_sized_to_vocab_when_vocab_is_larger(self): + lut = build_control_to_substitute_lut(_build()) + assert lut is not None + assert lut.numel() == 200 # vocab_size, control ids are 100/101 + + def test_sized_past_the_last_control_id_when_vocab_lags(self): + """Every control id stays addressable even if vocab_size is behind.""" + config = _build() + config.vocab_size = 50 # smaller than adapter_token_ids [100, 101] + + lut = build_control_to_substitute_lut(config) + + assert lut is not None + assert lut.numel() == 102 # max_ctrl_id + 1 + + def test_no_mapping_yields_no_table(self): + config = _build() + config.adapter_substitute_token_ids = None + + assert build_control_to_substitute_lut(config) is None + + def test_empty_adapter_ids_yield_no_table(self): + config = _build() + config.adapter_token_ids = [] + + assert build_control_to_substitute_lut(config) is None + + +class TestControlLutRebuildAfterResize: + """A vocabulary resize leaves the table stale; it must be re-derived. + + ``__init__`` sizes the table from ``config.vocab_size``, so compose growing + the vocabulary for control and marker tokens leaves the persistent buffer + shorter than the config it ships with. Loading such a checkpoint does not + degrade gracefully: the stored tensor is discarded and the buffer is left as + uninitialised memory, so every id reads as a control id and the rewrite + sends out-of-range ids into the embedding gather. + """ + + def test_resize_leaves_the_table_stale(self): + """Witness for why the rebuild is needed at all.""" + model = GraniteSwitchForCausalLM(_build(substitute_ids=(5, 7))).eval() + model.resize_token_embeddings(201) + + assert model.config.vocab_size == 201 + assert model.model.embed_tokens.weight.shape[0] == 201 + assert model.model.switch.control_to_substitute_lut.numel() == 200 + + def test_rebuild_restores_agreement_and_values(self): + model = GraniteSwitchForCausalLM(_build(substitute_ids=(5, 7))).eval() + model.resize_token_embeddings(201) + + assert model.model.switch.rebuild_control_to_substitute_lut(model.config) + + lut = model.model.switch.control_to_substitute_lut + assert lut.numel() == model.config.vocab_size == 201 + assert lut[100].item() == 5 + assert lut[101].item() == 7 + assert int((lut >= 0).sum()) == 2 # exactly the two control slots + + def test_rebuild_reports_false_without_a_mapping(self): + config = _build() + config.adapter_substitute_token_ids = None + model = GraniteSwitchForCausalLM(config).eval() + + assert model.model.switch.rebuild_control_to_substitute_lut(config) is False + + @torch.no_grad() + def test_rebuilt_table_survives_a_save_load_round_trip(self, tmp_path): + """The end-to-end guard: without the rebuild this load yields garbage. + + A stale buffer comes back as uninitialised memory, which makes every + position a control position and raises IndexError from the embedding + gather (a CUDA device-side assert on GPU). + """ + model = GraniteSwitchForCausalLM(_build(substitute_ids=(5, 7))).eval() + model.resize_token_embeddings(201) + model.model.switch.rebuild_control_to_substitute_lut(model.config) + model.save_pretrained(tmp_path / "ckpt") + + # Strict load: no ignore_mismatched_sizes to paper over a bad length. + loaded = GraniteSwitchForCausalLM.from_pretrained( + tmp_path / "ckpt", dtype=torch.float32 + ).eval() + + lut = loaded.model.switch.control_to_substitute_lut + assert lut.numel() == 201 + assert lut[100].item() == 5 + assert lut[101].item() == 7 + assert lut[10].item() == -1 + assert int((lut >= 0).sum()) == 2 + # And the rewrite it drives stays in bounds. + loaded(input_ids=torch.tensor([[10, 20, 100, 40]], dtype=torch.long)) From 2cefb0a6dee7e687d87e2f1e8dfcba6d71bc9e3e Mon Sep 17 00:00:00 2001 From: aviv ron Date: Wed, 5 Aug 2026 15:38:46 +0300 Subject: [PATCH 22/23] remove tests/integration/test_answerability_over_audio.py as this test was failing and was a problematic test. we should not test inference as it is unstable and not deterministic Signed-off-by: aviv ron --- .../test_answerability_over_audio.py | 202 ------------------ 1 file changed, 202 deletions(-) delete mode 100644 tests/integration/test_answerability_over_audio.py diff --git a/tests/integration/test_answerability_over_audio.py b/tests/integration/test_answerability_over_audio.py deleted file mode 100644 index dae14e4..0000000 --- a/tests/integration/test_answerability_over_audio.py +++ /dev/null @@ -1,202 +0,0 @@ -# SPDX-License-Identifier: Apache-2.0 -"""Adapters + audio: the RAG answerability adapter judging a query against a -document delivered as audio (issue #47). - -Unlike test_audio_serving_smoke.py, which only proves an adapter control token -doesn't crash the audio path, this checks the switch reaches the *correct* -verdict when the document arrives as speech. - -``documents=[{"text": "<|audio|>"}]`` works because the Granite template renders -each document with ``doc | tojson``, so the marker lands in the ```` -block for the ASR processor to splice. Questions key on words that transcribe -cleanly, so this tests the decision, not WER. - -Markers: slow + requires_model + gpu (opt-in via -m). -""" - -import importlib.util -import json -import os -from pathlib import Path - -import pytest - -pytestmark = [ - pytest.mark.audio, - pytest.mark.slow, - pytest.mark.requires_model, - pytest.mark.gpu, -] - -if importlib.util.find_spec("vllm") is None: - pytest.skip("requires vLLM installed", allow_module_level=True) - - -_DEFAULT_BASE_MODEL_PAIRS = [ - ("ibm-granite/granite-4.1-3b", "ibm-granite/granitelib-rag-r1.0"), -] - - -def _load_experimental_pairs(): - """Extra (base, adapter) pairs from GRANITE_SWITCH_EXPERIMENTAL_MODEL_PAIRS.""" - raw = os.environ.get("GRANITE_SWITCH_EXPERIMENTAL_MODEL_PAIRS", "") - if not raw: - return [] - try: - entries = json.loads(raw) - except json.JSONDecodeError as e: - raise ValueError( - f"GRANITE_SWITCH_EXPERIMENTAL_MODEL_PAIRS is not valid JSON: {e}\n" - f'Expected format: \'[{{"base":"/path","adapter":"/path"}}, ...]\'' - ) - return [(p["base"], p["adapter"]) for p in entries] - - -BASE_MODEL_PAIRS = _DEFAULT_BASE_MODEL_PAIRS + _load_experimental_pairs() - -COMPOSE_TIMEOUT_S = 1800 # matches the other E2E compose fixtures -_AUDIO_MARKER = "<|audio|>" - -# Committed speech clip; spoken sentence is "The Eiffel Tower is located in the -# city of Paris in France." The location words transcribe cleanly (the proper -# noun does not, hence the questions key on the location, not the name). -_AUDIO_FIXTURE = Path(__file__).parent / "fixtures" / "eiffel_tower_paris.wav" -_ANSWERABILITY_CASES = [ - ("In which city is the tower located?", "answerable"), - ("What is the boiling point of water?", "unanswerable"), -] - - -@pytest.fixture( - scope="module", - params=BASE_MODEL_PAIRS, - ids=lambda p: p[0].rsplit("/", 1)[-1], -) -def audio_rag_checkpoint(request, tmp_path_factory): - """Compose one audio-enabled RAG checkpoint per (base, adapter) pair.""" - import subprocess - import sys - - base_model, adapter_library = request.param - save_dir = tmp_path_factory.mktemp(base_model.rsplit("/", 1)[-1]) / "model" - - cmd = [ - sys.executable, - "-m", - "granite_switch.composer.compose_granite_switch", - "--base-model", - base_model, - "--adapters", - adapter_library, - "--enable-audio", - "--output", - str(save_dir), - ] - result = subprocess.run( - cmd, capture_output=True, text=True, timeout=COMPOSE_TIMEOUT_S - ) - if result.returncode != 0: - raise RuntimeError( - f"compose failed for base={base_model} adapter={adapter_library}\n" - f"--- STDOUT ---\n{result.stdout}\n--- STDERR ---\n{result.stderr}" - ) - return {"base_model": base_model, "save_dir": save_dir} - - -@pytest.fixture(scope="module") -def served(audio_rag_checkpoint): - """Boot vLLM once for the checkpoint and share it across the cases.""" - import gc - - import torch - - os.environ.setdefault("VLLM_WORKER_MULTIPROC_METHOD", "spawn") - from vllm import LLM - - llm = LLM( - model=str(audio_rag_checkpoint["save_dir"]), - dtype="bfloat16", - gpu_memory_utilization=0.7, - enforce_eager=True, - ) - try: - yield { - "llm": llm, - "config": llm.llm_engine.model_config.hf_config, - "tokenizer": llm.get_tokenizer(), - } - finally: - del llm - gc.collect() - torch.cuda.empty_cache() - - -def _answerability_adapter_name(config): - # Discovery derives the name from the library layout, so match, don't hard-code. - names = list(getattr(config, "adapter_names", None) or []) - for name in names: - if "answerab" in name.lower(): - return name - pytest.skip(f"no answerability adapter in composed checkpoint (adapters={names})") - - -@pytest.fixture(scope="module") -def speech_clip(): - """The committed 16 kHz mono speech clip as (waveform, sample_rate).""" - import soundfile as sf - - waveform, sr = sf.read(_AUDIO_FIXTURE, dtype="float32") - if waveform.ndim > 1: - waveform = waveform.mean(axis=1) - return {"waveform": waveform, "sr": sr} - - -def _build_answerability_prompt(tokenizer, adapter_name, question): - return tokenizer.apply_chat_template( - [{"role": "user", "content": question}], - documents=[{"text": _AUDIO_MARKER}], - add_generation_prompt=True, - adapter_name=adapter_name, - tokenize=False, - ) - - -def _parse_label(text): - # Longer label first, so "answerable" doesn't shadow "unanswerable". - norm = text.strip().strip('"').strip().lower() - if "unanswerable" in norm: - return "unanswerable" - if "answerable" in norm: - return "answerable" - return norm # unrecognized — surfaced by the assertion - - -@pytest.mark.parametrize( - "question,expected", - _ANSWERABILITY_CASES, - ids=[c[1] for c in _ANSWERABILITY_CASES], -) -def test_answerability_over_audio_document(served, speech_clip, question, expected): - """Answerability adapter reaches the correct verdict on an audio document.""" - from vllm import SamplingParams - - adapter_name = _answerability_adapter_name(served["config"]) - prompt = _build_answerability_prompt(served["tokenizer"], adapter_name, question) - - outputs = served["llm"].generate( - { - "prompt": prompt, - "multi_modal_data": { - "audio": [(speech_clip["waveform"], speech_clip["sr"])] - }, - }, - SamplingParams(max_tokens=8, temperature=0.0), - ) - - assert len(outputs) == 1 - raw = outputs[0].outputs[0].text - label = _parse_label(raw) - assert label == expected, ( - f"answerability mismatch for {question!r}: got {label!r} " - f"(raw={raw!r}), expected {expected!r}" - ) From 6dcf80d9fe99251306b385cd721752a6d6b95b1f Mon Sep 17 00:00:00 2001 From: aviv ron Date: Wed, 5 Aug 2026 16:34:37 +0300 Subject: [PATCH 23/23] add tests for marker replaced with cache disabled Signed-off-by: aviv ron --- .../test_audio_uncached_processor.py | 283 ++++++++++++++++++ 1 file changed, 283 insertions(+) create mode 100644 tests/integration/test_audio_uncached_processor.py diff --git a/tests/integration/test_audio_uncached_processor.py b/tests/integration/test_audio_uncached_processor.py new file mode 100644 index 0000000..af83440 --- /dev/null +++ b/tests/integration/test_audio_uncached_processor.py @@ -0,0 +1,283 @@ +# SPDX-License-Identifier: Apache-2.0 +"""Audio serving with vLLM's multimodal processor cache DISABLED. + +This is the configuration that actually exercises +``AudioMultiModalProcessor._hf_processor_applies_updates``. vLLM reaches the HF +processor two ways and only one of them consults that hook: + +* cached path — hardcodes ``is_update_applied = False``, never asks +* uncached path — takes ``is_update_applied`` from the hook + +Every other audio test runs vLLM's defaults, where the cache is on, so they pass +whether or not the hook is overridden. With the cache off and the base hook's +``True``, vLLM skips applying our ``PromptReplacement`` and then reports the item +as missing:: + + RuntimeError: Expected there to be 1 audio prompt placeholders corresponding + to 1 audio items, but instead found 0 prompt placeholders! + +Startup profiling passes a *string* prompt, so on the uncached path the engine +fails before it can serve anything — booting at all is a large part of the guard. + +Assertions here are structural (request completes, marker was replaced), never +transcript content: ASR output is not deterministic enough to assert on. + +Opt in explicitly: `pytest -m "slow and requires_model and gpu"`. +""" + +import importlib.util +import os + +import pytest + +pytestmark = [ + pytest.mark.audio, + pytest.mark.slow, + pytest.mark.requires_model, + pytest.mark.gpu, +] + +if importlib.util.find_spec("vllm") is None: + pytest.skip("requires vLLM installed", allow_module_level=True) + + +# One small model: this covers a *configuration* dimension, not a model matrix, +# and each engine boot here is expensive. +_BASE_MODEL = "ibm-granite/granite-4.0-micro" +_ADAPTER_LIBRARY = "ibm-granite/granitelib-core-r1.0" + +COMPOSE_TIMEOUT_S = 1800 # matches the sibling E2E fixtures +_TARGET_SR = 16_000 +_AUDIO_MARKER = "<|audio|>" + + +def _cache_disabling_kwargs(): + """LLM kwargs that turn off the multimodal processor cache. + + The knob was renamed across the vLLM range this project supports (0.19.x and + 0.20.x are both allowed in pyproject): older builds expose + ``disable_mm_preprocessor_cache``, newer ones ``mm_processor_cache_gb``. + Returns an empty dict when neither exists, so the caller can skip rather than + silently exercise the cached path. + """ + import dataclasses + + from vllm.engine.arg_utils import EngineArgs + + names = {f.name for f in dataclasses.fields(EngineArgs)} + if "mm_processor_cache_gb" in names: + return {"mm_processor_cache_gb": 0} + if "disable_mm_preprocessor_cache" in names: + return {"disable_mm_preprocessor_cache": True} + return {} + + +def _cache_disabled_state(llm): + """Whether the running engine really has the processor cache off. + + ``True``/``False`` when determinable, ``None`` when this vLLM exposes neither + setting where we look. The field moved: it lives on ``MultiModalConfig`` + (nested under ``model_config.multimodal_config``) in newer vLLM, so checking + only ``model_config`` silently answers "unknown" and the whole module would + look green while running the cached path — testing nothing. + """ + model_config = llm.llm_engine.model_config + for obj in (getattr(model_config, "multimodal_config", None), model_config): + if obj is None: + continue + if hasattr(obj, "mm_processor_cache_gb"): + return obj.mm_processor_cache_gb == 0 + if hasattr(obj, "disable_mm_preprocessor_cache"): + return bool(obj.disable_mm_preprocessor_cache) + return None + + +@pytest.fixture(scope="module") +def audio_checkpoint(tmp_path_factory): + """Compose one audio-enabled checkpoint through the compose CLI.""" + import subprocess + import sys + + save_dir = tmp_path_factory.mktemp(_BASE_MODEL.rsplit("/", 1)[-1]) / "model" + cmd = [ + sys.executable, + "-m", + "granite_switch.composer.compose_granite_switch", + "--base-model", + _BASE_MODEL, + "--adapters", + _ADAPTER_LIBRARY, + "--enable-audio", + "--output", + str(save_dir), + ] + result = subprocess.run( + cmd, capture_output=True, text=True, timeout=COMPOSE_TIMEOUT_S + ) + if result.returncode != 0: + raise RuntimeError( + f"compose failed for base={_BASE_MODEL} adapter={_ADAPTER_LIBRARY}\n" + f"--- STDOUT ---\n{result.stdout}\n--- STDERR ---\n{result.stderr}" + ) + return save_dir + + +@pytest.fixture(scope="module") +def served_uncached(audio_checkpoint): + """Boot vLLM with the processor cache off, and prove it is off. + + Reaching the ``yield`` is itself the startup-profiling guard: profiling runs a + dummy audio item through full processing with a string prompt, exactly the + combination that fails when the hook is left at its default. + + The cache check lives here rather than in a test so it *gates* every case. As + a separate test it would only skip itself, leaving the rest of the module + green while silently running the cached path. + """ + import gc + + import torch + + cache_kwargs = _cache_disabling_kwargs() + if not cache_kwargs: + pytest.skip( + "installed vLLM exposes neither mm_processor_cache_gb nor " + "disable_mm_preprocessor_cache; cannot disable the processor cache" + ) + + os.environ.setdefault("VLLM_WORKER_MULTIPROC_METHOD", "spawn") + from vllm import LLM + + llm = LLM( + model=str(audio_checkpoint), + dtype="bfloat16", + gpu_memory_utilization=0.7, + enforce_eager=True, # boot speed; orthogonal to the cache setting + **cache_kwargs, + ) + try: + state = _cache_disabled_state(llm) + if state is False: + pytest.fail( + f"{cache_kwargs!r} was accepted but the processor cache is still " + f"enabled; this module would exercise the cached path instead" + ) + if state is None: + pytest.skip( + "cannot confirm the processor-cache setting on this vLLM, so this " + "module cannot establish that it is testing the uncached path" + ) + yield { + "llm": llm, + "config": llm.llm_engine.model_config.hf_config, + "tokenizer": llm.get_tokenizer(), + } + finally: + del llm + gc.collect() + torch.cuda.empty_cache() + + +@pytest.fixture(scope="module") +def marker_id(served_uncached): + """The ``<|audio|>`` token id, verified to be a real single token. + + ``convert_tokens_to_ids`` returns the *unk* id for an unregistered token + rather than None, so a checkpoint composed without audio would hand back a + plausible-looking id and the marker assertions would be meaningless. + """ + tokenizer = served_uncached["tokenizer"] + token_id = tokenizer.convert_tokens_to_ids(_AUDIO_MARKER) + unk_id = getattr(tokenizer, "unk_token_id", None) + assert token_id is not None and token_id >= 0, ( + f"{_AUDIO_MARKER} is not in the tokenizer" + ) + assert token_id != unk_id, ( + f"{_AUDIO_MARKER} resolved to the unk id ({unk_id}) — the checkpoint was " + f"not composed with --enable-audio" + ) + encoded = tokenizer.encode(_AUDIO_MARKER, add_special_tokens=False) + assert encoded == [token_id], ( + f"{_AUDIO_MARKER} does not encode to exactly one token: {encoded}" + ) + return token_id + + +def _tone(seconds: float = 1.0, freq: float = 440.0): + """Deterministic mono 16 kHz waveform (no speech fixture needed).""" + import numpy as np + + t = np.arange(int(seconds * _TARGET_SR), dtype=np.float32) / _TARGET_SR + return (0.1 * np.sin(2 * np.pi * freq * t)).astype(np.float32) + + +def _silence(seconds: float = 1.0): + """A clip with no speech in it at all.""" + import numpy as np + + return np.zeros(int(seconds * _TARGET_SR), dtype=np.float32) + + +def _generate_with_audio(llm, waveform): + from vllm import SamplingParams + + return llm.generate( + { + "prompt": f"{_AUDIO_MARKER} What was said?", + "multi_modal_data": {"audio": [(waveform, _TARGET_SR)]}, + }, + SamplingParams(max_tokens=8, temperature=0.0), + ) + + +def _assert_marker_replaced(outputs, marker_id): + """The request completed and the marker is gone from the final prompt. + + ``RequestOutput.prompt_token_ids`` is the post-processing prompt (vLLM builds + the engine request from the processed inputs), so an absent marker means the + prompt replacement really was applied. Length is not asserted: a clip with no + speech legitimately collapses to the one-token fallback. + """ + assert len(outputs) == 1 + assert len(outputs[0].outputs[0].token_ids) >= 1 + + prompt_ids = list(outputs[0].prompt_token_ids or []) + assert prompt_ids, "engine returned no prompt_token_ids to inspect" + assert marker_id not in prompt_ids, ( + f"marker id {marker_id} survived into the final prompt — the audio " + f"placeholder was not applied" + ) + + +def test_audio_request_splices_transcript_uncached(served_uncached, marker_id): + """An audio request completes and the marker is replaced, cache off. + + The direct positive signal for the hook override: with the base hook the + replacement is skipped and vLLM raises before returning anything. + """ + outputs = _generate_with_audio(served_uncached["llm"], _tone()) + _assert_marker_replaced(outputs, marker_id) + + +def test_silent_clip_uncached(served_uncached, marker_id): + """Silence still yields a usable placeholder on the uncached path. + + The empty-transcript fallback fires on both processor paths, so it is worth + pinning here too: a clip transcribing to "" must not collapse to a + zero-length placeholder. + """ + outputs = _generate_with_audio(served_uncached["llm"], _silence()) + _assert_marker_replaced(outputs, marker_id) + + +def test_text_only_request_uncached(served_uncached): + """Disabling the cache must not disturb ordinary text requests.""" + from vllm import SamplingParams + + outputs = served_uncached["llm"].generate( + "The capital of France is", + SamplingParams(max_tokens=8, temperature=0.0), + ) + + assert len(outputs) == 1 + assert len(outputs[0].outputs[0].token_ids) >= 1