nac3artiq: support kernel entry short form from original ARTIQ
This commit is contained in:
parent
016cbf2b90
commit
7385b91113
|
@ -12,7 +12,7 @@ class Demo:
|
||||||
self.led1 = TTLOut(self.core, 19)
|
self.led1 = TTLOut(self.core, 19)
|
||||||
|
|
||||||
@kernel
|
@kernel
|
||||||
def run_k(self):
|
def run(self):
|
||||||
self.core.reset()
|
self.core.reset()
|
||||||
while True:
|
while True:
|
||||||
with parallel:
|
with parallel:
|
||||||
|
@ -20,9 +20,6 @@ class Demo:
|
||||||
self.led1.pulse(100.*ms)
|
self.led1.pulse(100.*ms)
|
||||||
self.core.delay(100.*ms)
|
self.core.delay(100.*ms)
|
||||||
|
|
||||||
def run(self):
|
|
||||||
self.core.run(self.run_k)
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
Demo().run()
|
Demo().run()
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
from inspect import isclass, getmodule
|
from inspect import isclass, getfullargspec, getmodule
|
||||||
from functools import wraps
|
from functools import wraps
|
||||||
import sys
|
import sys
|
||||||
|
from types import SimpleNamespace
|
||||||
from numpy import int32, int64
|
from numpy import int32, int64
|
||||||
|
|
||||||
import nac3artiq
|
import nac3artiq
|
||||||
|
@ -37,13 +38,20 @@ def extern(function):
|
||||||
return function
|
return function
|
||||||
|
|
||||||
|
|
||||||
def kernel(class_or_function):
|
def kernel(function_or_method):
|
||||||
"""Decorates a function or method to be executed on the core device."""
|
"""Decorates a function or method to be executed on the core device."""
|
||||||
register_module_of(class_or_function)
|
register_module_of(function_or_method)
|
||||||
@wraps(class_or_function)
|
argspec = getfullargspec(function_or_method)
|
||||||
def device_only(*args, **kwargs):
|
if argspec.args and argspec.args[0] == "self":
|
||||||
raise RuntimeError("Kernels must not be called directly, use core.run(kernel_function) instead")
|
@wraps(function_or_method)
|
||||||
return device_only
|
def run_on_core(self, *args, **kwargs):
|
||||||
|
fake_method = SimpleNamespace(__self__=self, __name__=function_or_method.__name__)
|
||||||
|
self.core.run(fake_method, *args, **kwargs)
|
||||||
|
else:
|
||||||
|
@wraps(function_or_method)
|
||||||
|
def run_on_core(*args, **kwargs):
|
||||||
|
raise RuntimeError("Kernel functions need explicit core.run()")
|
||||||
|
return run_on_core
|
||||||
|
|
||||||
|
|
||||||
def portable(function):
|
def portable(function):
|
||||||
|
|
Loading…
Reference in New Issue