Skip to content
Permalink
master
Go to file
 
 
Cannot retrieve contributors at this time
48 lines (39 sloc) 1.51 KB
from numba.core import types, typing
def is_signature(sig):
"""
Return whether *sig* is a potentially valid signature
specification (for user-facing APIs).
"""
return isinstance(sig, (str, tuple, typing.Signature))
def _parse_signature_string(signature_str):
# Just eval signature_str using the types submodules as globals
return eval(signature_str, {}, types.__dict__)
def normalize_signature(sig):
"""
From *sig* (a signature specification), return a ``(args, return_type)``
tuple, where ``args`` itself is a tuple of types, and ``return_type``
can be None if not specified.
"""
if isinstance(sig, str):
parsed = _parse_signature_string(sig)
else:
parsed = sig
if isinstance(parsed, tuple):
args, return_type = parsed, None
elif isinstance(parsed, typing.Signature):
args, return_type = parsed.args, parsed.return_type
else:
raise TypeError("invalid signature: %r (type: %r) evaluates to %r "
"instead of tuple or Signature" % (
sig, sig.__class__.__name__,
parsed.__class__.__name__
))
def check_type(ty):
if not isinstance(ty, types.Type):
raise TypeError("invalid type in signature: expected a type "
"instance, got %r" % (ty,))
if return_type is not None:
check_type(return_type)
for ty in args:
check_type(ty)
return args, return_type
You can’t perform that action at this time.