[Bug]: prepare() type annotation example_inputs: tuple[torch.Tensor] restricts inputs to 1-tuple, breaking static analysis for multi-input models
Los mantenedores suelen responder en 2 días
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 2/5
- Tiempo estimado
- 1-3 horas
- Aptitud para principiantes
- 88/100
- Tipo de issue
- Error
- Claridad
- Bien especificado
- Estado de actividad
- Activo
Línea de trabajo
Comienza con los métodos prepare de src/coreai_opt/quantization/_eager/quantizer.py, src/coreai_opt/palettization/kmeans/palettizer.py y src/coreai_opt/pruning/magnitude_pruner.py, comparándolos con las anotaciones tuple[Any, ...] existentes en la fachada y el cuantizador de grafos. Verifica las anotaciones con typing.get_type_hints y ejecuta la reproducción del modelo con múltiples entradas; se considera terminado cuando la comprobación de tipos acepta tuplas de múltiples entradas y los modelos siguen ejecutándose.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Summary
In _EagerQuantizer.prepare, KMeansPalettizer.prepare, and MagnitudePruner.prepare, the example_inputs parameter is type-annotated as:
def prepare(self, example_inputs: tuple[torch.Tensor]) -> nn.Module:
According to PEP 484 and PEP 585, tuple[T] specifies a fixed-length tuple of exactly one element of type T. To denote a variable-length or multi-element tuple, Python typing requires tuple[T, ...] or tuple[Any, ...].
Because tuple[torch.Tensor] is used instead of tuple[Any, ...], static type checkers (mypy, pyright, VS Code Pylance) reject valid calls passing multi-input models (e.g. (input_ids, attention_mask) or (x, y)), emitting type errors.
At runtime, all compressors unpack *example_inputs via TorchFunctionEagerHandler.prepare(model, example_inputs), which natively supports arbitrary tuple lengths. Furthermore, the top-level Quantizer.prepare facade and _GraphQuantizer.prepare already use tuple[Any, ...].
Affected Locations
src/coreai_opt/quantization/_eager/quantizer.py:L174def prepare(self, example_inputs: tuple[torch.Tensor]) -> nn.Module:src/coreai_opt/palettization/kmeans/palettizer.py:L153def prepare( self, example_inputs: tuple[torch.Tensor], sensitivity_path: str | None = None, num_workers: int = 1, ) -> torch.nn.Module:src/coreai_opt/pruning/magnitude_pruner.py:L97
(and its docstring at L101:def prepare(self, example_inputs: tuple[torch.Tensor]) -> torch.nn.Module:example_inputs (tuple[torch.Tensor]): ...)
In contrast, the following locations already correctly use tuple[Any, ...]:
src/coreai_opt/quantization/quantizer.py:L319(Quantizer.prepare)src/coreai_opt/quantization/_graph/quantizer.py:L956(_GraphQuantizer.prepare)src/coreai_opt/_utils/insertion/torch_function/handler.py:L63(TorchFunctionEagerHandler.prepare)src/coreai_opt/_utils/torch_utils.py:L422
Step-by-Step Reproduction
Minimal Reproduction Script
import torch
import torch.nn as nn
from coreai_opt.palettization import KMeansPalettizer, KMeansPalettizerConfig
from coreai_opt.pruning import MagnitudePruner, MagnitudePrunerConfig
from coreai_opt.quantization import ExecutionMode, Quantizer, QuantizerConfig
class TwoInputModel(nn.Module):
def __init__(self):
super().__init__()
self.fc1 = nn.Linear(4, 4)
self.fc2 = nn.Linear(4, 4)
def forward(self, x: torch.Tensor, y: torch.Tensor) -> torch.Tensor:
return self.fc1(x) + self.fc2(y)
model = TwoInputModel()
example_inputs: tuple[torch.Tensor, torch.Tensor] = (torch.randn(1, 4), torch.randn(1, 4))
# 1. Eager Quantizer
q_eager = Quantizer(model, QuantizerConfig(execution_mode=ExecutionMode.EAGER))
q_eager._quantizer.prepare(example_inputs)
# 2. Palettizer
pal = KMeansPalettizer(TwoInputModel(), KMeansPalettizerConfig())
pal.prepare(example_inputs)
# 3. Pruner
pruner = MagnitudePruner(TwoInputModel(), MagnitudePrunerConfig())
pruner.prepare(example_inputs)
Actual Output (Static Type Analysis):
When running pyright or mypy:
error: Argument of type "tuple[Tensor, Tensor]" cannot be assigned to parameter "example_inputs" of type "tuple[Tensor]" in function "prepare"
"tuple[Tensor, Tensor]" is incompatible with "tuple[Tensor]"
Expected Behavior:
example_inputs in _EagerQuantizer.prepare, KMeansPalettizer.prepare, and MagnitudePruner.prepare should accept variable-length tuples (tuple[Any, ...]), allowing multi-input models to pass static analysis without type errors.
Proposed Fix
- Update
_EagerQuantizer.prepareinsrc/coreai_opt/quantization/_eager/quantizer.py:def prepare(self, example_inputs: tuple[Any, ...]) -> nn.Module: - Update
KMeansPalettizer.prepareinsrc/coreai_opt/palettization/kmeans/palettizer.py:def prepare( self, example_inputs: tuple[Any, ...], sensitivity_path: str | None = None, num_workers: int = 1, ) -> torch.nn.Module: - Update
MagnitudePruner.prepareinsrc/coreai_opt/pruning/magnitude_pruner.py:def prepare(self, example_inputs: tuple[Any, ...]) -> torch.nn.Module: - Add automated tests verifying type hints via
typing.get_type_hintsand multi-input model execution.
- Lenguaje dominante
- Python
- Estrellas
- 136
- Forks
- 37
- Merge medio
- 2 d 11 h
- PR fusionados (30 d)
- 30
Preparar el entorno
- Sin Dockerfile ni archivo de Docker Compose
- Sin plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de apple/coreai-optimization
-
[Bug]: Cannot import QScheme from coreai_opt.coreai_utils as documented in coreai_compression.mdAbierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 88/100
apple/coreai-optimization#115 · 1 comentario ·
Los mantenedores suelen responder en 2 días
-
[Bug]: ChannelStructured pruning crashes with RuntimeError on 1D tensors (PyTorch sum(dim=[]) scalar collapse)Posiblemente ocupada @u-simha la tomó hace 12 días. Abierto
apple/coreai-optimization#107 · 3 comentarios · 1 asignado ·
Los mantenedores suelen responder en 2 días
-
[Bug]: EagerQuantizer maps root module weight fake-quantizers to "parametrizations", silently dropping QATSchedule and breaking training transitionsPosiblemente ocupada @u-simha la tomó hace 13 días. Abierto
apple/coreai-optimization#100 · 1 asignado ·
Los mantenedores suelen responder en 2 días
-
FP16 casting pass does not guard against activation-level overflow (softplus, exp, logsumexp)Abierto
Dificultad 5/5 Más de una semana Aptitud para principiantes 35/100
apple/coreai-optimization#7 · 4 comentarios ·
Los mantenedores suelen responder en 2 días
Todos los issues de apple/coreai-optimization
Issues similares
-
Claiming namespace `apoint`Abiertonamespace operations
Dificultad 1/5 Menos de una hora Aptitud para principiantes 82/100
EclipseFdn/open-vsx.org#13573 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
collective/icalendar#1854 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
rancher/rancher-ai-agent#412 ·
Los mantenedores suelen responder en 6 días
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 84/100
TUDelftGeodesy/DePSI#134 ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 88/100
HenriquesLab/rxiv-maker#335 ·