Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

pause() broken #100

Closed
ghost opened this issue Aug 14, 2015 · 3 comments
Closed

pause() broken #100

ghost opened this issue Aug 14, 2015 · 3 comments

Comments

@ghost
Copy link

ghost commented Aug 14, 2015

I expect adding pause() permit yieldings. It looks like this is broken. Or am I doing something wrong?

from artiq import *


class LED(EnvExperiment):
    def build(self):
        self.attr_device("core")
        self.attr_device("led")
        self.attr_device("scheduler")

    @kernel
    def run(self):
        dt = 500*ms
        while True: 
            self.led.on()
            delay(dt)
            self.led.off()
            delay(dt)
            self.scheduler.pause()
rabi2@vboxartiq:~/myartiq$ artiq_run myartiqrepo/led_blink.py 
Traceback (most recent call last):
  File "/home/rabi2/anaconda3/bin/artiq_run", line 6, in <module>
    sys.exit(main())
  File "/home/rabi2/anaconda3/lib/python3.4/site-packages/artiq/frontend/artiq_run.py", line 133, in main
    return run(with_file=True)
  File "/home/rabi2/anaconda3/lib/python3.4/site-packages/artiq/frontend/artiq_run.py", line 118, in run
    exp_inst.run()
  File "/home/rabi2/anaconda3/lib/python3.4/site-packages/artiq/language/core.py", line 115, in run_on_core
    return exp.core.run(arg, ((exp,) + k_args), k_kwargs)
  File "/home/rabi2/anaconda3/lib/python3.4/site-packages/artiq/coredevice/core.py", line 115, in run
    k_function, k_args, k_kwargs)
  File "/home/rabi2/anaconda3/lib/python3.4/site-packages/artiq/coredevice/core.py", line 101, in compile
    self, k_function, k_args, k_kwargs, with_attr_writeback)
  File "/home/rabi2/anaconda3/lib/python3.4/site-packages/artiq/transforms/inline.py", line 543, in inline
    kwargs=k_kwargs)
  File "/home/rabi2/anaconda3/lib/python3.4/site-packages/artiq/transforms/inline.py", line 157, in get_inline
    func_def = func_tr.code_visit(func_def)
  File "/home/rabi2/anaconda3/lib/python3.4/site-packages/artiq/transforms/inline.py", line 197, in code_visit
    return visitor(node)
  File "/home/rabi2/anaconda3/lib/python3.4/site-packages/artiq/transforms/inline.py", line 440, in code_visit_FunctionDef
    self.code_generic_visit(node)
  File "/home/rabi2/anaconda3/lib/python3.4/site-packages/artiq/transforms/inline.py", line 213, in code_generic_visit
    value = self.code_visit(value)
  File "/home/rabi2/anaconda3/lib/python3.4/site-packages/artiq/transforms/inline.py", line 197, in code_visit
    return visitor(node)
  File "/home/rabi2/anaconda3/lib/python3.4/site-packages/artiq/transforms/inline.py", line 213, in code_generic_visit
    value = self.code_visit(value)
  File "/home/rabi2/anaconda3/lib/python3.4/site-packages/artiq/transforms/inline.py", line 197, in code_visit
    return visitor(node)
  File "/home/rabi2/anaconda3/lib/python3.4/site-packages/artiq/transforms/inline.py", line 339, in code_visit_Expr
    self.code_generic_visit(node)
  File "/home/rabi2/anaconda3/lib/python3.4/site-packages/artiq/transforms/inline.py", line 223, in code_generic_visit
    new_node = self.code_visit(old_value)
  File "/home/rabi2/anaconda3/lib/python3.4/site-packages/artiq/transforms/inline.py", line 197, in code_visit
    return visitor(node)
  File "/home/rabi2/anaconda3/lib/python3.4/site-packages/artiq/transforms/inline.py", line 285, in code_visit_Call
    func = self.static_visit(node.func)
  File "/home/rabi2/anaconda3/lib/python3.4/site-packages/artiq/transforms/inline.py", line 446, in static_visit
    return visitor(node)
  File "/home/rabi2/anaconda3/lib/python3.4/site-packages/artiq/transforms/inline.py", line 463, in static_visit_Attribute
    return getattr(value, node.attr)
AttributeError: 'DummyScheduler' object has no attribute 'pause'

Problem appears to be in worker_impl.py

class Scheduler:
    pause = staticmethod(make_parent_action("pause", ""))

Also, documentation is not explicit about how to call pause.

@sbourdeauducq
Copy link
Member

Obviously you need a scheduler (and a master) to use pause. artiq_run doesn't have a scheduler, it's just a stand-alone single-shot experiment running tool. worker_impl is not used by artiq_run.

@sbourdeauducq
Copy link
Member

@ghost
Copy link
Author

ghost commented Aug 15, 2015

Obviously you need a scheduler (and a master) to use pause.
artiq_run doesn't have a scheduler, it's just a stand-alone
single-shot experiment running tool. worker_impl is not used
by artiq_run.
Indeed. My bad. But we found a tiny bug. :)

Just confirmed that when using artiq_gui to schedule experiments that things work fine. This is after I add self.scheduler.pause() to the above program.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant