compiler: print the builtin type int(width=...) as np.int...

This commit is contained in:
whitequark 2016-07-06 04:03:54 +00:00
parent 73ac153509
commit fa71b40c80
29 changed files with 110 additions and 99 deletions

View File

@ -44,6 +44,13 @@ def TInt32():
def TInt64(): def TInt64():
return TInt(types.TValue(64)) return TInt(types.TValue(64))
def _int_printer(typ, depth, max_depth):
if types.is_var(typ["width"]):
return "numpy.int?"
else:
return "numpy.int{}".format(types.get_value(typ.find()["width"]))
types.TypePrinter.custom_printers['int'] = _int_printer
class TFloat(types.TMono): class TFloat(types.TMono):
def __init__(self): def __init__(self):
super().__init__("float") super().__init__("float")
@ -83,7 +90,7 @@ class TException(types.TMono):
# (which also serves as the EHABI type_info). # (which also serves as the EHABI type_info).
# * File, line and column where it was raised (str, int, int). # * File, line and column where it was raised (str, int, int).
# * Message, which can contain substitutions {0}, {1} and {2} (str). # * Message, which can contain substitutions {0}, {1} and {2} (str).
# * Three 64-bit integers, parameterizing the message (int(width=64)). # * Three 64-bit integers, parameterizing the message (numpy.int64).
# Keep this in sync with the function ARTIQIRGenerator.alloc_exn. # Keep this in sync with the function ARTIQIRGenerator.alloc_exn.
attributes = OrderedDict([ attributes = OrderedDict([

View File

@ -579,11 +579,11 @@ class Inferencer(algorithm.Visitor):
valid_forms = lambda: [ valid_forms = lambda: [
valid_form("{exn}() -> {exn}".format(exn=typ.name)), valid_form("{exn}() -> {exn}".format(exn=typ.name)),
valid_form("{exn}(message:str) -> {exn}".format(exn=typ.name)), valid_form("{exn}(message:str) -> {exn}".format(exn=typ.name)),
valid_form("{exn}(message:str, param1:int(width=64)) -> {exn}".format(exn=typ.name)), valid_form("{exn}(message:str, param1:numpy.int64) -> {exn}".format(exn=typ.name)),
valid_form("{exn}(message:str, param1:int(width=64), " valid_form("{exn}(message:str, param1:numpy.int64, "
"param2:int(width=64)) -> {exn}".format(exn=typ.name)), "param2:numpy.int64) -> {exn}".format(exn=typ.name)),
valid_form("{exn}(message:str, param1:int(width=64), " valid_form("{exn}(message:str, param1:numpy.int64, "
"param2:int(width=64), param3:int(width=64)) " "param2:numpy.int64, param3:numpy.int64) "
"-> {exn}".format(exn=typ.name)), "-> {exn}".format(exn=typ.name)),
] ]
@ -858,19 +858,19 @@ class Inferencer(algorithm.Visitor):
simple_form("at(time:float) -> None", simple_form("at(time:float) -> None",
[builtins.TFloat()]) [builtins.TFloat()])
elif types.is_builtin(typ, "now_mu"): elif types.is_builtin(typ, "now_mu"):
simple_form("now_mu() -> int(width=64)", simple_form("now_mu() -> numpy.int64",
[], builtins.TInt64()) [], builtins.TInt64())
elif types.is_builtin(typ, "delay_mu"): elif types.is_builtin(typ, "delay_mu"):
simple_form("delay_mu(time_mu:int(width=64)) -> None", simple_form("delay_mu(time_mu:numpy.int64) -> None",
[builtins.TInt64()]) [builtins.TInt64()])
elif types.is_builtin(typ, "at_mu"): elif types.is_builtin(typ, "at_mu"):
simple_form("at_mu(time_mu:int(width=64)) -> None", simple_form("at_mu(time_mu:numpy.int64) -> None",
[builtins.TInt64()]) [builtins.TInt64()])
elif types.is_builtin(typ, "mu_to_seconds"): elif types.is_builtin(typ, "mu_to_seconds"):
simple_form("mu_to_seconds(time_mu:int(width=64)) -> float", simple_form("mu_to_seconds(time_mu:numpy.int64) -> float",
[builtins.TInt64()], builtins.TFloat()) [builtins.TInt64()], builtins.TFloat())
elif types.is_builtin(typ, "seconds_to_mu"): elif types.is_builtin(typ, "seconds_to_mu"):
simple_form("seconds_to_mu(time:float) -> int(width=64)", simple_form("seconds_to_mu(time:float) -> numpy.int64",
[builtins.TFloat()], builtins.TInt64()) [builtins.TFloat()], builtins.TInt64())
elif types.is_builtin(typ, "watchdog"): elif types.is_builtin(typ, "watchdog"):
simple_form("watchdog(time:float) -> [builtin context manager]", simple_form("watchdog(time:float) -> [builtin context manager]",

View File

@ -670,6 +670,8 @@ class TypePrinter(object):
type variables sequential alphabetic names. type variables sequential alphabetic names.
""" """
custom_printers = {}
def __init__(self): def __init__(self):
self.gen = genalnum() self.gen = genalnum()
self.map = {} self.map = {}
@ -694,7 +696,9 @@ class TypePrinter(object):
self.recurse_guard.add(typ) self.recurse_guard.add(typ)
return "<instance {} {{}}>".format(typ.name) return "<instance {} {{}}>".format(typ.name)
elif isinstance(typ, TMono): elif isinstance(typ, TMono):
if typ.params == {}: if typ.name in self.custom_printers:
return self.custom_printers[typ.name](typ, depth + 1, max_depth)
elif typ.params == {}:
return typ.name return typ.name
else: else:
return "%s(%s)" % (typ.name, ", ".join( return "%s(%s)" % (typ.name, ", ".join(

View File

@ -15,7 +15,7 @@ i2.x = 1.0
@kernel @kernel
def entrypoint(): def entrypoint():
# CHECK-L: <synthesized>:1: error: host object has an attribute 'x' of type float, which is different from previously inferred type int(width=32) for the same attribute # CHECK-L: <synthesized>:1: error: host object has an attribute 'x' of type float, which is different from previously inferred type numpy.int32 for the same attribute
i1.x i1.x
# CHECK-L: ${LINE:+1}: note: expanded from here # CHECK-L: ${LINE:+1}: note: expanded from here
i2.x i2.x

View File

@ -9,7 +9,7 @@ class c:
@kernel @kernel
def entrypoint(): def entrypoint():
# CHECK-L: <synthesized>:1: error: cannot unify int(width='a) with str # CHECK-L: <synthesized>:1: error: cannot unify numpy.int? with str
# CHECK-NEXT-L: [1, 'x'] # CHECK-NEXT-L: [1, 'x']
# CHECK-L: ${LINE:+1}: note: expanded from here # CHECK-L: ${LINE:+1}: note: expanded from here
a = c a = c

View File

@ -7,29 +7,29 @@ bool()
# CHECK-L: bool:<constructor bool>([]:list(elt='a)):bool # CHECK-L: bool:<constructor bool>([]:list(elt='a)):bool
bool([]) bool([])
# CHECK-L: int:<constructor int {}>():int(width='b) # CHECK-L: int:<constructor int {}>():numpy.int?
int() int()
# CHECK-L: int:<constructor int>(1.0:float):int(width='c) # CHECK-L: int:<constructor int>(1.0:float):numpy.int?
int(1.0) int(1.0)
# CHECK-L: int:<constructor int>(1.0:float, width=64:int(width='d)):int(width=64) # CHECK-L: int:<constructor int>(1.0:float, width=64:numpy.int?):numpy.int64
int(1.0, width=64) int(1.0, width=64)
# CHECK-L: float:<constructor float {}>():float # CHECK-L: float:<constructor float {}>():float
float() float()
# CHECK-L: float:<constructor float>(1:int(width='e)):float # CHECK-L: float:<constructor float>(1:numpy.int?):float
float(1) float(1)
# CHECK-L: list:<constructor list {}>():list(elt='f) # CHECK-L: list:<constructor list {}>():list(elt='b)
list() list()
# CHECK-L: len:<function len>([]:list(elt='g)):int(width=32) # CHECK-L: len:<function len>([]:list(elt='c)):numpy.int32
len([]) len([])
# CHECK-L: round:<function round>(1.0:float):int(width='h) # CHECK-L: round:<function round>(1.0:float):numpy.int?
round(1.0) round(1.0)
# CHECK-L: round:<function round>(1.0:float, width=64:int(width='i)):int(width=64) # CHECK-L: round:<function round>(1.0:float, width=64:numpy.int?):numpy.int64
round(1.0, width=64) round(1.0, width=64)

View File

@ -8,12 +8,12 @@ class c:
def m(self): def m(self):
pass pass
# CHECK-L: c:<constructor c {a: int(width='a), f: ()->NoneType delay('b), m: (self:<instance c>)->NoneType delay('c)}> # CHECK-L: c:<constructor c {a: numpy.int?, f: ()->NoneType delay('a), m: (self:<instance c>)->NoneType delay('b)}>
c c
# CHECK-L: .a:int(width='a) # CHECK-L: .a:numpy.int?
c.a c.a
# CHECK-L: .f:()->NoneType delay('b) # CHECK-L: .f:()->NoneType delay('a)
c.f c.f
# CHECK-L: .m:method(fn=(self:<instance c>)->NoneType delay('c), self=<instance c>) # CHECK-L: .m:method(fn=(self:<instance c>)->NoneType delay('b), self=<instance c>)
c().m() c().m()

View File

@ -2,40 +2,40 @@
# RUN: OutputCheck %s --file-to-check=%t # RUN: OutputCheck %s --file-to-check=%t
1 | 2 1 | 2
# CHECK-L: 1:int(width='a):int(width='b) | 2:int(width='c):int(width='b):int(width='b) # CHECK-L: 1:numpy.int?:numpy.int? | 2:numpy.int?:numpy.int?:numpy.int?
1 + 2 1 + 2
# CHECK-L: 1:int(width='d):int(width='e) + 2:int(width='f):int(width='e):int(width='e) # CHECK-L: 1:numpy.int?:numpy.int? + 2:numpy.int?:numpy.int?:numpy.int?
(1,) + (2.0,) (1,) + (2.0,)
# CHECK-L: (1:int(width='g),):(int(width='g),) + (2.0:float,):(float,):(int(width='g), float) # CHECK-L: (1:numpy.int?,):(numpy.int?,) + (2.0:float,):(float,):(numpy.int?, float)
[1] + [2] [1] + [2]
# CHECK-L: [1:int(width='h)]:list(elt=int(width='h)) + [2:int(width='h)]:list(elt=int(width='h)):list(elt=int(width='h)) # CHECK-L: [1:numpy.int?]:list(elt=numpy.int?) + [2:numpy.int?]:list(elt=numpy.int?):list(elt=numpy.int?)
1 * 2 1 * 2
# CHECK-L: 1:int(width='i):int(width='j) * 2:int(width='k):int(width='j):int(width='j) # CHECK-L: 1:numpy.int?:numpy.int? * 2:numpy.int?:numpy.int?:numpy.int?
[1] * 2 [1] * 2
# CHECK-L: [1:int(width='l)]:list(elt=int(width='l)) * 2:int(width='m):list(elt=int(width='l)) # CHECK-L: [1:numpy.int?]:list(elt=numpy.int?) * 2:numpy.int?:list(elt=numpy.int?)
1 // 2 1 // 2
# CHECK-L: 1:int(width='n):int(width='o) // 2:int(width='p):int(width='o):int(width='o) # CHECK-L: 1:numpy.int?:numpy.int? // 2:numpy.int?:numpy.int?:numpy.int?
1 + 1.0 1 + 1.0
# CHECK-L: 1:int(width='q):float + 1.0:float:float # CHECK-L: 1:numpy.int?:float + 1.0:float:float
a = []; a += [1] a = []; a += [1]
# CHECK-L: a:list(elt=int(width='r)) = []:list(elt=int(width='r)); a:list(elt=int(width='r)) += [1:int(width='r)]:list(elt=int(width='r)) # CHECK-L: a:list(elt=numpy.int?) = []:list(elt=numpy.int?); a:list(elt=numpy.int?) += [1:numpy.int?]:list(elt=numpy.int?)
[] is [1] [] is [1]
# CHECK-L: []:list(elt=int(width='s)) is [1:int(width='s)]:list(elt=int(width='s)):bool # CHECK-L: []:list(elt=numpy.int?) is [1:numpy.int?]:list(elt=numpy.int?):bool
1 in [1] 1 in [1]
# CHECK-L: 1:int(width='t) in [1:int(width='t)]:list(elt=int(width='t)):bool # CHECK-L: 1:numpy.int? in [1:numpy.int?]:list(elt=numpy.int?):bool
[] < [1] [] < [1]
# CHECK-L: []:list(elt=int(width='u)) < [1:int(width='u)]:list(elt=int(width='u)):bool # CHECK-L: []:list(elt=numpy.int?) < [1:numpy.int?]:list(elt=numpy.int?):bool
1.0 < 1 1.0 < 1
# CHECK-L: 1.0:float < 1:int(width='v):float:bool # CHECK-L: 1.0:float < 1:numpy.int?:float:bool

View File

@ -1,7 +1,7 @@
# RUN: %python -m artiq.compiler.testbench.inferencer +diag %s >%t # RUN: %python -m artiq.compiler.testbench.inferencer +diag %s >%t
# RUN: OutputCheck %s --file-to-check=%t # RUN: OutputCheck %s --file-to-check=%t
# CHECK-L: ${LINE:+1}: error: cannot call this expression of type int # CHECK-L: ${LINE:+1}: error: cannot call this expression of type numpy.int?
(1)() (1)()
def f(x, y, z=1): def f(x, y, z=1):

View File

@ -5,33 +5,33 @@
1 << 2.0 1 << 2.0
# CHECK-L: ${LINE:+3}: error: expected every '+' operand to be a list in this context # CHECK-L: ${LINE:+3}: error: expected every '+' operand to be a list in this context
# CHECK-L: ${LINE:+2}: note: list of type list(elt=int(width='a)) # CHECK-L: ${LINE:+2}: note: list of type list(elt=numpy.int?)
# CHECK-L: ${LINE:+1}: note: int(width='b), which cannot be added to a list # CHECK-L: ${LINE:+1}: note: numpy.int?, which cannot be added to a list
[1] + 2 [1] + 2
# CHECK-L: ${LINE:+1}: error: cannot unify list(elt=int(width='a)) with list(elt=float): int(width='a) is incompatible with float # CHECK-L: ${LINE:+1}: error: cannot unify list(elt=numpy.int?) with list(elt=float): numpy.int? is incompatible with float
[1] + [2.0] [1] + [2.0]
# CHECK-L: ${LINE:+3}: error: expected every '+' operand to be a tuple in this context # CHECK-L: ${LINE:+3}: error: expected every '+' operand to be a tuple in this context
# CHECK-L: ${LINE:+2}: note: tuple of type (int(width='a),) # CHECK-L: ${LINE:+2}: note: tuple of type (numpy.int?,)
# CHECK-L: ${LINE:+1}: note: int(width='b), which cannot be added to a tuple # CHECK-L: ${LINE:+1}: note: numpy.int?, which cannot be added to a tuple
(1,) + 2 (1,) + 2
# CHECK-L: ${LINE:+1}: error: passing tuples to '*' is not supported # CHECK-L: ${LINE:+1}: error: passing tuples to '*' is not supported
(1,) * 2 (1,) * 2
# CHECK-L: ${LINE:+3}: error: expected '*' operands to be a list and an integer in this context # CHECK-L: ${LINE:+3}: error: expected '*' operands to be a list and an integer in this context
# CHECK-L: ${LINE:+2}: note: list operand of type list(elt=int(width='a)) # CHECK-L: ${LINE:+2}: note: list operand of type list(elt=numpy.int?)
# CHECK-L: ${LINE:+1}: note: operand of type list(elt='b), which is not a valid repetition amount # CHECK-L: ${LINE:+1}: note: operand of type list(elt='a), which is not a valid repetition amount
[1] * [] [1] * []
# CHECK-L: ${LINE:+1}: error: cannot coerce list(elt='a) to a numeric type # CHECK-L: ${LINE:+1}: error: cannot coerce list(elt='a) to a numeric type
[] - 1.0 [] - 1.0
# CHECK-L: ${LINE:+2}: error: expression of type int(width='a) has to be coerced to float, which makes assignment invalid # CHECK-L: ${LINE:+2}: error: expression of type numpy.int? has to be coerced to float, which makes assignment invalid
# CHECK-L: ${LINE:+1}: note: expression of type float # CHECK-L: ${LINE:+1}: note: expression of type float
a = 1; a += 1.0 a = 1; a += 1.0
# CHECK-L: ${LINE:+2}: error: the result of this operation has type (int(width='a), float), which makes assignment to a slot of type (int(width='a),) invalid # CHECK-L: ${LINE:+2}: error: the result of this operation has type (numpy.int?, float), which makes assignment to a slot of type (numpy.int?,) invalid
# CHECK-L: ${LINE:+1}: note: expression of type (float,) # CHECK-L: ${LINE:+1}: note: expression of type (float,)
b = (1,); b += (1.0,) b = (1,); b += (1.0,)

View File

@ -9,6 +9,6 @@ except 1:
try: try:
pass pass
# CHECK-L: ${LINE:+1}: error: cannot unify int(width='a) with Exception # CHECK-L: ${LINE:+1}: error: cannot unify numpy.int? with Exception
except Exception as e: except Exception as e:
e = 1 e = 1

View File

@ -1,5 +1,5 @@
# RUN: %python -m artiq.compiler.testbench.inferencer +diag %s >%t # RUN: %python -m artiq.compiler.testbench.inferencer +diag %s >%t
# RUN: OutputCheck %s --file-to-check=%t # RUN: OutputCheck %s --file-to-check=%t
# CHECK-L: ${LINE:+1}: error: type int(width='a) is not iterable # CHECK-L: ${LINE:+1}: error: type numpy.int? is not iterable
for x in 1: pass for x in 1: pass

View File

@ -12,5 +12,5 @@ class c:
c().f() c().f()
c.g(1) c.g(1)
# CHECK-L: ${LINE:+1}: error: cannot unify <instance c> with int(width='a) while inferring the type for self argument # CHECK-L: ${LINE:+1}: error: cannot unify <instance c> with numpy.int? while inferring the type for self argument
c().g() c().g()

View File

@ -1,16 +1,16 @@
# RUN: %python -m artiq.compiler.testbench.inferencer +diag %s >%t # RUN: %python -m artiq.compiler.testbench.inferencer +diag %s >%t
# RUN: OutputCheck %s --file-to-check=%t # RUN: OutputCheck %s --file-to-check=%t
# CHECK-L: ${LINE:+2}: error: cannot unify int(width='a) with NoneType # CHECK-L: ${LINE:+2}: error: cannot unify numpy.int? with NoneType
# CHECK-L: ${LINE:+1}: note: function with return type int(width='a) # CHECK-L: ${LINE:+1}: note: function with return type numpy.int?
def a(): def a():
return 1 return 1
# CHECK-L: ${LINE:+1}: note: a statement returning NoneType # CHECK-L: ${LINE:+1}: note: a statement returning NoneType
return return
# CHECK-L: ${LINE:+2}: error: cannot unify int(width='a) with list(elt='b) # CHECK-L: ${LINE:+2}: error: cannot unify numpy.int? with list(elt='a)
# CHECK-L: ${LINE:+1}: note: function with return type int(width='a) # CHECK-L: ${LINE:+1}: note: function with return type numpy.int?
def b(): def b():
return 1 return 1
# CHECK-L: ${LINE:+1}: note: a statement returning list(elt='b) # CHECK-L: ${LINE:+1}: note: a statement returning list(elt='a)
return [] return []

View File

@ -4,17 +4,17 @@
a = 1 a = 1
b = [] b = []
# CHECK-L: ${LINE:+1}: error: cannot unify int(width='a) with list(elt='b) # CHECK-L: ${LINE:+1}: error: cannot unify numpy.int? with list(elt='a)
a = b a = b
# CHECK-L: ${LINE:+1}: error: cannot unify int(width='a) with list(elt='b) # CHECK-L: ${LINE:+1}: error: cannot unify numpy.int? with list(elt='a)
[1, []] [1, []]
# CHECK-L: note: a list element of type int(width='a) # CHECK-L: note: a list element of type numpy.int?
# CHECK-L: note: a list element of type list(elt='b) # CHECK-L: note: a list element of type list(elt='a)
# CHECK-L: ${LINE:+1}: error: cannot unify int(width='a) with bool # CHECK-L: ${LINE:+1}: error: cannot unify numpy.int? with bool
1 and False 1 and False
# CHECK-L: note: an operand of type int(width='a) # CHECK-L: note: an operand of type numpy.int?
# CHECK-L: note: an operand of type bool # CHECK-L: note: an operand of type bool
# CHECK-L: ${LINE:+1}: error: expected unary '+' operand to be of numeric type, not list(elt='a) # CHECK-L: ${LINE:+1}: error: expected unary '+' operand to be of numeric type, not list(elt='a)
@ -23,5 +23,5 @@ a = b
# CHECK-L: ${LINE:+1}: error: expected '~' operand to be of integer type, not float # CHECK-L: ${LINE:+1}: error: expected '~' operand to be of integer type, not float
~1.0 ~1.0
# CHECK-L: ${LINE:+1}: error: type int(width='a) does not have an attribute 'x' # CHECK-L: ${LINE:+1}: error: type numpy.int? does not have an attribute 'x'
(1).x (1).x

View File

@ -10,7 +10,7 @@ class contextmgr:
pass pass
def foo(): def foo():
# CHECK-L: ${LINE:+2}: error: cannot unify int(width='a) with NoneType # CHECK-L: ${LINE:+2}: error: cannot unify numpy.int? with NoneType
# CHECK-L: ${LINE:+1}: note: exception handling via context managers is not supported; the argument 'n3' of function '__exit__(self:<instance contextmgr>, n1:NoneType, n2:NoneType, n3:int(width='a))->NoneType delay('b)' will always be None # CHECK-L: ${LINE:+1}: note: exception handling via context managers is not supported; the argument 'n3' of function '__exit__(self:<instance contextmgr>, n1:NoneType, n2:NoneType, n3:numpy.int?)->NoneType delay('a)' will always be None
with contextmgr(): with contextmgr():
pass pass

View File

@ -10,8 +10,8 @@ class contextmgr:
def foo(): def foo():
contextmgr.__enter__(1) contextmgr.__enter__(1)
# CHECK-L: ${LINE:+3}: error: cannot unify <instance contextmgr> with int(width='a) while inferring the type for self argument # CHECK-L: ${LINE:+3}: error: cannot unify <instance contextmgr> with numpy.int? while inferring the type for self argument
# CHECK-L: ${LINE:+2}: note: expression of type <instance contextmgr {}> # CHECK-L: ${LINE:+2}: note: expression of type <instance contextmgr {}>
# CHECK-L: ${LINE:+1}: note: reference to an instance with a method '__enter__(self:int(width='a))->NoneType delay('b)' # CHECK-L: ${LINE:+1}: note: reference to an instance with a method '__enter__(self:numpy.int?)->NoneType delay('a)'
with contextmgr(): with contextmgr():
pass pass

View File

@ -9,5 +9,5 @@ def _gcd(a, b):
b = c b = c
return b return b
# CHECK-L: _gcd:(a:int(width='a), b:int(width='a))->int(width='a)(10:int(width='a), 25:int(width='a)):int(width='a) # CHECK-L: _gcd:(a:numpy.int?, b:numpy.int?)->numpy.int?(10:numpy.int?, 25:numpy.int?):numpy.int?
_gcd(10, 25) _gcd(10, 25)

View File

@ -6,5 +6,5 @@ x = len
def f(): def f():
global len global len
# CHECK-L: len:int(width='a) = # CHECK-L: len:numpy.int? =
len = 1 len = 1

View File

@ -1,7 +1,7 @@
# RUN: %python -m artiq.compiler.testbench.inferencer %s >%t # RUN: %python -m artiq.compiler.testbench.inferencer %s >%t
# RUN: OutputCheck %s --file-to-check=%t # RUN: OutputCheck %s --file-to-check=%t
# CHECK-L: []:list(elt=int(width='a)) # CHECK-L: []:list(elt=numpy.int?)
x = [] x = []
def f(): def f():

View File

@ -2,5 +2,5 @@
# RUN: OutputCheck %s --file-to-check=%t # RUN: OutputCheck %s --file-to-check=%t
x = [0] x = [0]
# CHECK-L: [::int(width=32)] # CHECK-L: [::numpy.int32]
x[:] = [1] x[:] = [1]

View File

@ -2,10 +2,10 @@
# RUN: OutputCheck %s --file-to-check=%t # RUN: OutputCheck %s --file-to-check=%t
a = 1 a = 1
# CHECK-L: a:int(width='a) # CHECK-L: a:numpy.int?
b = a b = a
# CHECK-L: b:int(width='a) # CHECK-L: b:numpy.int?
c = True c = True
# CHECK-L: c:bool # CHECK-L: c:bool
@ -20,39 +20,39 @@ f = 1.0
# CHECK-L: f:float # CHECK-L: f:float
g = [] g = []
# CHECK-L: g:list(elt='b) # CHECK-L: g:list(elt='a)
h = [1] h = [1]
# CHECK-L: h:list(elt=int(width='c)) # CHECK-L: h:list(elt=numpy.int?)
i = [] i = []
i[0] = 1 i[0] = 1
# CHECK-L: i:list(elt=int(width='d)) # CHECK-L: i:list(elt=numpy.int?)
j = [] j = []
j += [1.0] j += [1.0]
# CHECK-L: j:list(elt=float) # CHECK-L: j:list(elt=float)
1 if a else 2 1 if a else 2
# CHECK-L: 1:int(width='f) if a:int(width='a) else 2:int(width='f):int(width='f) # CHECK-L: 1:numpy.int? if a:numpy.int? else 2:numpy.int?:numpy.int?
True and False True and False
# CHECK-L: True:bool and False:bool:bool # CHECK-L: True:bool and False:bool:bool
1 and 0 1 and 0
# CHECK-L: 1:int(width='g) and 0:int(width='g):int(width='g) # CHECK-L: 1:numpy.int? and 0:numpy.int?:numpy.int?
~1 ~1
# CHECK-L: 1:int(width='h):int(width='h) # CHECK-L: 1:numpy.int?:numpy.int?
not 1 not 1
# CHECK-L: 1:int(width='i):bool # CHECK-L: 1:numpy.int?:bool
[x for x in [1]] [x for x in [1]]
# CHECK-L: [x:int(width='j) for x:int(width='j) in [1:int(width='j)]:list(elt=int(width='j))]:list(elt=int(width='j)) # CHECK-L: [x:numpy.int? for x:numpy.int? in [1:numpy.int?]:list(elt=numpy.int?)]:list(elt=numpy.int?)
lambda x, y=1: x lambda x, y=1: x
# CHECK-L: lambda x:'k, y:int(width='l)=1:int(width='l): x:'k:(x:'k, ?y:int(width='l))->'k # CHECK-L: lambda x:'b, y:numpy.int?=1:numpy.int?: x:'b:(x:'b, ?y:numpy.int?)->'b
k = "x" k = "x"
# CHECK-L: k:str # CHECK-L: k:str
@ -64,10 +64,10 @@ IndexError("x")
# CHECK-L: IndexError:<constructor IndexError>("x":str):IndexError # CHECK-L: IndexError:<constructor IndexError>("x":str):IndexError
IndexError("x", 1) IndexError("x", 1)
# CHECK-L: IndexError:<constructor IndexError>("x":str, 1:int(width=64)):IndexError # CHECK-L: IndexError:<constructor IndexError>("x":str, 1:numpy.int64):IndexError
IndexError("x", 1, 1) IndexError("x", 1, 1)
# CHECK-L: IndexError:<constructor IndexError>("x":str, 1:int(width=64), 1:int(width=64)):IndexError # CHECK-L: IndexError:<constructor IndexError>("x":str, 1:numpy.int64, 1:numpy.int64):IndexError
IndexError("x", 1, 1, 1) IndexError("x", 1, 1, 1)
# CHECK-L: IndexError:<constructor IndexError>("x":str, 1:int(width=64), 1:int(width=64), 1:int(width=64)):IndexError # CHECK-L: IndexError:<constructor IndexError>("x":str, 1:numpy.int64, 1:numpy.int64, 1:numpy.int64):IndexError

View File

@ -1,7 +1,7 @@
# RUN: %python -m artiq.compiler.testbench.signature %s >%t # RUN: %python -m artiq.compiler.testbench.signature %s >%t
# RUN: OutputCheck %s --file-to-check=%t # RUN: OutputCheck %s --file-to-check=%t
# CHECK-L: f: (a:float, b:int(width=64))->NoneType delay(s->mu(a) + b mu) # CHECK-L: f: (a:float, b:numpy.int64)->NoneType delay(s->mu(a) + b mu)
def f(a, b): def f(a, b):
delay(a) delay(a)
delay_mu(b) delay_mu(b)

View File

@ -1,7 +1,7 @@
# RUN: %python -m artiq.compiler.testbench.signature %s >%t # RUN: %python -m artiq.compiler.testbench.signature %s >%t
# RUN: OutputCheck %s --file-to-check=%t # RUN: OutputCheck %s --file-to-check=%t
# CHECK-L: f: (a:int(width=32), b:int(width=32), c:int(width=32), d:int(width=32), e:int(width=32))->NoneType delay(s->mu(a * b // c + d - 10 / e) mu) # CHECK-L: f: (a:numpy.int32, b:numpy.int32, c:numpy.int32, d:numpy.int32, e:numpy.int32)->NoneType delay(s->mu(a * b // c + d - 10 / e) mu)
def f(a, b, c, d, e): def f(a, b, c, d, e):
delay(a * b // c + d - 10 / e) delay(a * b // c + d - 10 / e)

View File

@ -1,13 +1,13 @@
# RUN: %python -m artiq.compiler.testbench.signature %s >%t # RUN: %python -m artiq.compiler.testbench.signature %s >%t
# RUN: OutputCheck %s --file-to-check=%t # RUN: OutputCheck %s --file-to-check=%t
# CHECK-L: f: (a:int(width=64), b:int(width=64))->NoneType delay(max(a, b) mu) # CHECK-L: f: (a:numpy.int64, b:numpy.int64)->NoneType delay(max(a, b) mu)
def f(a, b): def f(a, b):
with interleave: with interleave:
delay_mu(a) delay_mu(a)
delay_mu(b) delay_mu(b)
# CHECK-L: g: (a:int(width=64))->NoneType delay(max(a, 200) mu) # CHECK-L: g: (a:numpy.int64)->NoneType delay(max(a, 200) mu)
def g(a): def g(a):
with interleave: with interleave:
delay_mu(100) delay_mu(100)

View File

@ -1,17 +1,17 @@
# RUN: %python -m artiq.compiler.testbench.signature %s >%t # RUN: %python -m artiq.compiler.testbench.signature %s >%t
# RUN: OutputCheck %s --file-to-check=%t # RUN: OutputCheck %s --file-to-check=%t
# CHECK-L: f: (a:int(width=32))->NoneType delay(3 * a mu) # CHECK-L: f: (a:numpy.int32)->NoneType delay(3 * a mu)
def f(a): def f(a):
for _ in range(a): for _ in range(a):
delay_mu(3) delay_mu(3)
# CHECK-L: g: (a:int(width=32), b:int(width=32))->NoneType delay(3 * (b - a) mu) # CHECK-L: g: (a:numpy.int32, b:numpy.int32)->NoneType delay(3 * (b - a) mu)
def g(a, b): def g(a, b):
for _ in range(a, b): for _ in range(a, b):
delay_mu(3) delay_mu(3)
# CHECK-L: h: (a:int(width=32), b:int(width=32), c:int(width=32))->NoneType delay(3 * (b - a) // c mu) # CHECK-L: h: (a:numpy.int32, b:numpy.int32, c:numpy.int32)->NoneType delay(3 * (b - a) // c mu)
def h(a, b, c): def h(a, b, c):
for _ in range(a, b, c): for _ in range(a, b, c):
delay_mu(3) delay_mu(3)

View File

@ -1,13 +1,13 @@
# RUN: %python -m artiq.compiler.testbench.signature %s >%t # RUN: %python -m artiq.compiler.testbench.signature %s >%t
# RUN: OutputCheck %s --file-to-check=%t # RUN: OutputCheck %s --file-to-check=%t
# CHECK-L: f: ()->int(width=32) delay(30 mu) # CHECK-L: f: ()->numpy.int32 delay(30 mu)
def f(): def f():
for _ in range(10): for _ in range(10):
delay_mu(3) delay_mu(3)
return 10 return 10
# CHECK-L: g: (x:float)->int(width=32) # CHECK-L: g: (x:float)->numpy.int32
# CHECK-NOT-L: delay # CHECK-NOT-L: delay
def g(x): def g(x):
if x > 1.0: if x > 1.0:

View File

@ -1,7 +1,7 @@
# RUN: %python -m artiq.compiler.testbench.signature %s >%t # RUN: %python -m artiq.compiler.testbench.signature %s >%t
# RUN: OutputCheck %s --file-to-check=%t # RUN: OutputCheck %s --file-to-check=%t
# CHECK-L: f: (a:int(width=64), b:int(width=64))->NoneType delay(a + b mu) # CHECK-L: f: (a:numpy.int64, b:numpy.int64)->NoneType delay(a + b mu)
def f(a, b): def f(a, b):
with sequential: with sequential:
delay_mu(a) delay_mu(a)

View File

@ -2,10 +2,10 @@
# RUN: OutputCheck %s --file-to-check=%t # RUN: OutputCheck %s --file-to-check=%t
x = 1 x = 1
# CHECK-L: x: int(width=32) # CHECK-L: x: numpy.int32
y = int(1) y = int(1)
# CHECK-L: y: int(width=32) # CHECK-L: y: numpy.int32
z = round(1.0) z = round(1.0)
# CHECK-L: z: int(width=32) # CHECK-L: z: numpy.int32