{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Populating the interactive namespace from numpy and matplotlib\n"
     ]
    }
   ],
   "source": [
    "%pylab inline\n",
    "\n",
    "import os\n",
    "import logging\n",
    "import time\n",
    "import asyncio\n",
    "import datetime\n",
    "import glob\n",
    "from pprint import pprint\n",
    "\n",
    "import numpy as np\n",
    "np.set_printoptions(precision=3)\n",
    "import matplotlib.pyplot as plt\n",
    "import seaborn\n",
    "seaborn.set_style(\"whitegrid\")\n",
    "import pandas as pd\n",
    "import h5py\n",
    "\n",
    "from sipyco.pc_rpc import (Client, AsyncioClient,\n",
    "                           BestEffortClient, AutoTarget)\n",
    "from artiq.master.databases import DeviceDB\n",
    "from artiq.master.worker_db import DeviceManager"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "# let's assume artiq_master and artiq_ctlmgr are already running\n",
    "# then move to a location where we have our artiq setup\n",
    "os.chdir(os.path.expanduser(\"~/work/nist/artiq/run\"))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "# we can directly use the artiq controller infrastructure\n",
    "# and access any artiq device\n",
    "\n",
    "# we can have artiq prepare that connection for us:\n",
    "ddb = DeviceDB(\"device_db.py\")\n",
    "devmgr = DeviceManager(ddb)\n",
    "lda = devmgr.get(\"lda\")\n",
    "lda.set_attenuation(42)\n",
    "assert lda.get_attenuation() == 42\n",
    "\n",
    "# ... or we can wire it up ourselves if you know where it is\n",
    "assert ddb.get(\"lda\", resolve_alias=True)[\"host\"] == \"::1\"\n",
    "assert ddb.get(\"lda\", resolve_alias=True)[\"port\"] == 3253\n",
    "\n",
    "# there are different Client types tailored to different use cases:\n",
    "\n",
    "# synchronous\n",
    "lda = Client(\"::1\", 3253)\n",
    "assert lda.get_attenuation() == 42\n",
    "\n",
    "# asyncio\n",
    "lda = AsyncioClient()\n",
    "async def test_lda():\n",
    "    await lda.connect_rpc(\"::1\", 3253, AutoTarget)\n",
    "    return await lda.get_attenuation()\n",
    "assert asyncio.get_event_loop().run_until_complete(test_lda()) == 42\n",
    "\n",
    "# best effort\n",
    "lda = BestEffortClient(\"::1\", 3253, AutoTarget)\n",
    "assert lda.get_attenuation() == 42"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "current schedule\n",
      "{}\n",
      "experiments:\n",
      "['ex/',\n",
      " 'test_analyzer.py',\n",
      " 'notebook_test.py',\n",
      " 'speed_benchmark.py',\n",
      " 'histograms.py',\n",
      " 'arguments_demo.py',\n",
      " '.git/',\n",
      " '__pycache__/',\n",
      " 'flopping_f_simulation.py',\n",
      " 'test_crash.py',\n",
      " 'run_forever.py',\n",
      " 'transport.py',\n",
      " 'pdq2_simple.py']\n"
     ]
    }
   ],
   "source": [
    "# let's connect to the master\n",
    "\n",
    "schedule, exps, datasets = [\n",
    "    Client(\"::1\", 3251, i) for i in\n",
    "    \"schedule experiment_db dataset_db\".split()]\n",
    "\n",
    "print(\"current schedule\")\n",
    "pprint(schedule.get_status())\n",
    "print(\"experiments:\")\n",
    "pprint(exps.list_directory(\"repository\"))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "current schedule\n",
      "{4722: {'due_date': None,\n",
      "        'expid': {'arguments': {'F0': 1500, 'noise_amplitude': 0.3},\n",
      "                  'class_name': 'FloppingF',\n",
      "                  'file': 'repository/flopping_f_simulation.py',\n",
      "                  'log_level': 30},\n",
      "        'flush': False,\n",
      "        'pipeline': 'main',\n",
      "        'priority': 0,\n",
      "        'repo_msg': None,\n",
      "        'status': 'preparing'}}\n"
     ]
    }
   ],
   "source": [
    "# we can submit experiments to be run\n",
    "\n",
    "expid = dict(\n",
    "    file=\"repository/flopping_f_simulation.py\",\n",
    "    class_name=\"FloppingF\",\n",
    "    log_level=logging.WARNING,\n",
    "    arguments=dict(\n",
    "        F0=1500,\n",
    "        noise_amplitude=.3,\n",
    "    ),\n",
    ")\n",
    "if not schedule.get_status():\n",
    "    rid = schedule.submit(pipeline_name=\"main\", expid=expid,\n",
    "        priority=0, due_date=None, flush=False)\n",
    "print(\"current schedule\")\n",
    "pprint(schedule.get_status())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "# wait for experiment to finish\n",
    "# this can be written nicer by subscribing and reacting to scheduler changes\n",
    "while rid in schedule.get_status():\n",
    "    time.sleep(.1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "flopping_f: 1499.944285221012\n"
     ]
    },
    {
     "data": {
      "image/png": "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\nJKD/D7Ip5VrpmcohAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7fc5187c8668>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# now that the experiment has completed, we can get the\n",
    "# current value of the (live) dataset and plot it\n",
    "# had we done this earlier, the dataset would have been incomplete\n",
    "fig, ax = plt.subplots()\n",
    "d = datasets.get(\"flopping_f_brightness\")\n",
    "ax.plot(d)\n",
    "print(\"flopping_f:\", datasets.get(\"flopping_freq\"))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "# this is how you would clear all pipelines\n",
    "for i in schedule.get_status():\n",
    "    schedule.delete(i)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "available datasets ['artiq_version', 'flopping_f_brightness']\n"
     ]
    }
   ],
   "source": [
    "# we can easily find and use the data that was saved as part\n",
    "# of the experiment\n",
    "\n",
    "t = datetime.datetime.now()\n",
    "f = os.path.join(\n",
    "    \"results\", t.strftime(\"%Y-%m-%d\"), #t.strftime(\"%H-%M\"),\n",
    "    \"*\", \"{:09d}-FloppingF.h5\".format(rid))\n",
    "\n",
    "# we would usually like to use pandas but our data does not have\n",
    "# the metadata pandas want\n",
    "#d = pd.HDFStore(glob.glob(f)[0])\n",
    "\n",
    "with h5py.File(glob.glob(f)[0]) as f:\n",
    "    print(\"available datasets\", list(f))\n",
    "    assert np.allclose(f[\"datasets/flopping_f_brightness\"], d)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Overwriting repository/notebook_test.py\n"
     ]
    }
   ],
   "source": [
    "%%writefile repository/notebook_test.py\n",
    "\n",
    "# we can also write experiments in the notebook and submit them\n",
    "# we don't have submit-by-content yet (and there would be questions\n",
    "# about other modules that would need to be imported) so we just export\n",
    "# this cell and submit it by filename\n",
    "\n",
    "from artiq.experiment import *\n",
    "\n",
    "class Hello(EnvExperiment):\n",
    "    def build(self):\n",
    "        pass\n",
    "    \n",
    "    def run(self):\n",
    "        print(\"Hello world!\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "4724\n"
     ]
    }
   ],
   "source": [
    "expid = dict(\n",
    "    file=\"repository/notebook_test.py\",\n",
    "    class_name=\"Hello\",\n",
    "    log_level=logging.WARNING,\n",
    "    arguments=dict(),\n",
    ")\n",
    "rid = schedule.submit(pipeline_name=\"misc\", expid=expid,\n",
    "    priority=1, due_date=None, flush=False)\n",
    "print(rid)\n",
    "# on the master you should see the message."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.5.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 0
}
