Bonjour,
Je code une librairie python en utilisant les annotations de type. Elle manipule des tableaux numériques de type Numpy, PyTorch, …
Donc j'ai des fonctions qui peuvent prendre n'importe qu'elle type de tableau et je comprends pas comment faire les annotations. Pour le moment, je fais ça
Array = TypeVar("Array")
def is_array(x) -> TypeGuard[Array]:
"""A TypeGuard for array-like objects."""
return array_api_compat.is_array_api_obj(x)
def func(inarray: Array) -> Array:
...
mais pyright me dit
warning: TypeVar "Array" appears only once in generic function signature. Use "object" instead (reportInvalidTypeVarUse)
Par ailleurs, j'utilise is_array dans mes fonctions
if not is_array(inarray):
raise ValueError(
"`inarray` must be a compatible with Array API Standard (eg. numpy, pytorch, ...)"
)
des_choses_avec_inarray
mais mypy me dit que inarray est de type Never (mais pas pyright)…
Bref, je suis un peu perdu, il semble que l'on rentre dans des subtilités hors de ma portée. Si vous pouvez m'aidez merci !
# NewType
Posté par Fritaupy . Évalué à 1 (+0/-0). Dernière modification le 27 mars 2025 à 16:19.
pour moi, typevar n'est pas fait pour ça mais pour transmettre un type :
Dans ton cas, je pense que typing.TypeGuard est plus approprié, mais tu dois préciser le type d'origine (un np.array?):
[^] # Re: NewType
Posté par François (site web personnel) . Évalué à 1 (+0/-0).
Merci, je me disais bien que TypeVar n'était pas trop approprié. Le truc, c'est que np.array si je comprends bien est trop rattaché à Numpy, un array de la bibliothèque pytorch, interchangeable dans ma bibliothèque, est d'un autre type. Et je veux que toutes les bibliothèques qui suivent le array API standard soit acceptables. Pour ça j'utilise
array-api-compat
qui aide mais ne semble pas fournir d'annotation de type. Bref…Envoyer un commentaire
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.