{ "info": { "author": "Rigetti Computing", "author_email": "info@rigetti.com", "bugtrack_url": null, "classifiers": [], "description": "rpcq\n====\n\n[![pipeline status](https://gitlab.com/rigetti/forest/rpcq/badges/master/pipeline.svg)](https://gitlab.com/rigetti/forest/rpcq/commits/master)\n[![pypi version](https://img.shields.io/pypi/v/rpcq.svg)](https://pypi.org/project/rpcq/)\n[![conda-forge version](https://img.shields.io/conda/vn/conda-forge/rpcq.svg)](https://anaconda.org/conda-forge/rpcq)\n[![docker pulls](https://img.shields.io/docker/pulls/rigetti/rpcq.svg)](https://hub.docker.com/r/rigetti/rpcq)\n\nThe asynchronous RPC client-server framework and message specification for\n[Rigetti Quantum Cloud Services (QCS)](https://www.rigetti.com/).\n\nImplements an efficient transport protocol by using [ZeroMQ](http://zeromq.org/) (ZMQ) sockets and\n[MessagePack](https://msgpack.org/index.html) (`msgpack`) serialization.\n\nNot intended to be a full-featured replacement for other frameworks like\n[gRPC](https://grpc.io/) or [Apache Thrift](https://thrift.apache.org/).\n\nPython Installation\n-------------------\n\nTo install directly from the source, run `pip install -e .` from within the top-level\ndirectory of the `rpcq` repository. To additionally install the requirements for testing,\nmake sure to run `pip install -r requirements.txt`.\n\nTo instead install the latest released verson of `rpcq` from the Python package manager PyPi,\nrun `pip install rpcq`.\n\n**NOTE**: We strongly encourage users of `rpcq` to install the software within a (Python)\nvirtual environment (read up on [`virtualenv`](https://github.com/pypa/virtualenv),\n[`pyenv`](https://github.com/pyenv/pyenv), or [`conda`](https://github.com/conda/conda)\nfor more info).\n\nLisp Installation\n-----------------\n\nInstallation is easier with QuickLisp. After placing the source for RPCQ within your local\nLisp projects directory (cf. `ql:*local-project-directories*`), run `(ql:quickload :rpcq)`\nand QuickLisp will download the necessary Lisp dependencies.\n\nIn addition to the Lisp dependencies, RPCQ depends on ZeroMQ. Be sure to install both the\nlibrary *and* its development headers (which are necessary for the Lisp foreign-function\ninterface to get its bearings).\n\nUsing the Client-Server Framework\n---------------------------------\n\nThe following two code samples (first in Python, then in Lisp) demonstrate how to create a server, add a test handler, and spin it up.\n\n```python\nfrom rpcq import Server\n\nserver = Server()\n\n@server.rpc_handler\ndef test():\n return 'test'\n\nserver.run('tcp://*:5555')\n```\n\n```lisp\n(defun test ()\n \"test\")\n\n(let ((dt (rpcq:make-dispatch-table)))\n (rpcq:dispatch-table-add-handler dt 'test)\n (rpcq:start-server :dispatch-table dt\n :listen-addresses '(\"tcp://*:5555\")))\n```\n\nIn another window, we can (again first in Python, then in Lisp) create a client that points to the same socket, and call the test method.\n\n```python\nfrom rpcq import Client\n\nclient = Client('tcp://localhost:5555')\n\nclient.call('test')\n```\n\n```lisp\n(rpcq:with-rpc-client (client \"tcp://localhost:5555\")\n (rpcq:rpc-call client \"test\"))\n```\n\nIn all cases (including interoperating a client/server pair written in different languages), this will return the string `'test'`.\n\nUsing the Message Spec\n----------------------\n\nThe message spec as defined in `src/messages.lisp` (which in turn produces `rpcq/messages.py`)\nis meant to be used with the [Rigetti QCS](https://www.rigetti.com/qcs) platform. Therefore,\nthese messages are used in [`pyquil`](https://github.com/rigetticomputing/pyquil), in order\nto allow users to communicate with the Rigetti Quil compiler and quantum processing units (QPUs).\nPyQuil provides utilities for users to interact with the QCS API and write programs in\n[Quil](https://arxiv.org/abs/1608.03355), the quantum instruction language developed at Rigetti.\n\nThus, most users will not interact with `rpcq.messages` directly. However, for those interested\nin building their own implementation of the QCS API utilities in pyQuil, becoming acquainted\nwith the client-server framework, the available messages in the message spec, and how they\nare used in the `pyquil.api` module would be a good place to start!\n\nUpdating the Python Message Bindings\n------------------------------------\n\nCurrently only Python bindings are available for the message spec, but more language bindings\nare in the works. To update the Python message bindings after editing `src/messages.lisp`,\nopen `rlwrap sbcl` and run:\n\n```lisp\n(ql:quickload :rpcq)\n(with-open-file (f \"rpcq/messages.py\" :direction :output :if-exists :supersede)\n (rpcq:python-message-spec f))\n```\n\n**NOTE**: Requires pre-installed\n[`sbcl`](http://www.sbcl.org/),\n[`quicklisp`](https://www.quicklisp.org/beta/), and\n(optionally) [`rlwrap`](https://github.com/hanslub42/rlwrap).\n\nWe can also use the rpcq docker container to update the message spec without to install the\nrequirements.\n\n```bash\n./docker_update_python_spec.sh\n```\n\nRunning the Unit Tests\n----------------------\n\nThe `rpcq` repository is configured with GitLab CI to automatically run the unit tests.\nThe tests run within a container based off of the\n[`rigetti/lisp`](https://hub.docker.com/r/rigetti/lisp) Docker image, which is pinned to a specific\ntag. If you need a more recent version of the image, update the tag in the `.gitlab-ci.yml`.\n\nThe Python unit tests can be executed locally by running `pytest` from the top-level\ndirectory of the repository (assuming you have installed the test requirements).\n\nThe Lisp unit tests can be run locally by doing the following from within `rlwrap sbcl`:\n\n```lisp\n(ql:quickload :rpcq)\n(asdf:test-system :rpcq)\n```\n\nThere may be some instances of `STYLE-WARNING`, but if the test run successfully,\nthere should be something near the bottom of the output that looks like:\n\n```\nRPCQ-TESTS (Suite)\n TEST-DEFMESSAGE [ OK ]\n```\n\nAutomated Packaging with Docker\n-------------------------------\n\nThe CI pipeline for `rpcq` produces a Docker image, available at\n[`rigetti/rpcq`](https://hub.docker.com/r/rigetti/rpcq). To get the latest stable\nversion of `rpcq`, run `docker pull rigetti/rpcq`. The image is built from the\n[`rigetti/lisp`](https://hub.docker.com/r/rigetti/lisp) Docker image, which is pinned to a specific\ntag. If you need a more recent version of the image, update the tag in the `Dockerfile`.\n\nTo learn more about the `rigetti/lisp` Docker image, check out the\n[`docker-lisp`](https://github.com/rigetti/docker-lisp) repository.\n\nRelease Process\n---------------\n\n1. Update `VERSION.txt` and dependency versions (if applicable) and push the commit to `master`.\n2. Push a git tag `vX.Y.Z` that contains the same version number as in `VERSION.txt`.\n3. Verify that the resulting build (triggered by pushing the tag) completes successfully.\n4. Push the tagged commit to `pypi` and verify it appears [here](https://pypi.org/project/rpcq/).\n5. Publish a [release](https://github.com/rigetti/rpcq/releases) using the tag as the name.\n6. Close the [milestone](https://github.com/rigetti/rpcq/milestones) associated with this release,\n and migrate incomplete issues to the next one.\n\nAuthors\n-------\n\nDeveloped at [Rigetti Computing](https://github.com/rigetticomputing) by\n[Nikolas Tezak](https://github.com/ntezak),\n[Steven Heidel](https://github.com/stevenheidel),\n[Eric Peterson](https://github.com/ecp-rigetti),\n[Colm Ryan](https://github.com/caryan),\n[Peter Karalekas](https://github.com/karalekas),\n[Guen Prawiroatmodjo](https://github.com/guenp), and\n[Robert Smith](https://github.com/tarballs-are-good).", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/rigetticomputing/rpcq.git", "keywords": "quantum rpc qcs", "license": "Apache-2.0", "maintainer": "", "maintainer_email": "", "name": "rpcq", "package_url": "https://pypi.org/project/rpcq/", "platform": "", "project_url": "https://pypi.org/project/rpcq/", "project_urls": { "Homepage": "https://github.com/rigetticomputing/rpcq.git" }, "release_url": "https://pypi.org/project/rpcq/2.7.3/", "requires_dist": null, "requires_python": ">=3.6", "summary": "The RPC framework and message specification for Rigetti QCS.", "version": "2.7.3" }, "last_serial": 5739697, "releases": { "1.0.0.dev0": [ { "comment_text": "", "digests": { "md5": "876428a351927c0aabbcd39216c06c26", "sha256": "2b01dee39e3586b4daa4312f0219f90ba3a97b72ccc013f893e5b1e86de7aa2b" }, "downloads": -1, "filename": "rpcq-1.0.0.dev0.tar.gz", "has_sig": false, "md5_digest": "876428a351927c0aabbcd39216c06c26", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16181, "upload_time": "2018-10-03T03:15:57", "url": "https://files.pythonhosted.org/packages/ff/32/fa463504c682647ab76a4ee8e07957efb34e802f8e3161de67b014909801/rpcq-1.0.0.dev0.tar.gz" } ], "2.0.0": [ { "comment_text": "", "digests": { "md5": "588d13dd6bbb0d33aa3b54d71188e75c", "sha256": "90ac222f3734c66591cc74bb4ed9b921e365e9f2203f4311fcfc907836270886" }, "downloads": -1, "filename": "rpcq-2.0.0.tar.gz", "has_sig": false, "md5_digest": "588d13dd6bbb0d33aa3b54d71188e75c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 21496, "upload_time": "2018-10-14T00:14:30", "url": "https://files.pythonhosted.org/packages/ba/0f/1aafde0a9e7de591098f9569df544843c708072c7fabfa950c4594be1d1f/rpcq-2.0.0.tar.gz" } ], "2.0.0.dev0": [ { "comment_text": "", "digests": { "md5": "b7c6fc20e8313c8a10efa0c19322a9bb", "sha256": "977720dd40ee29f9f3cb18a8ccea431e226c078bc044bd99b3c7d3d5e9a61329" }, "downloads": -1, "filename": "rpcq-2.0.0.dev0.tar.gz", "has_sig": false, "md5_digest": "b7c6fc20e8313c8a10efa0c19322a9bb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17314, "upload_time": "2018-10-13T23:26:41", "url": "https://files.pythonhosted.org/packages/6c/5e/e46f6c6fc011b227f5d448ba27094fceae15b458cb3c733770ea3b1384d0/rpcq-2.0.0.dev0.tar.gz" } ], "2.0.0.dev1": [ { "comment_text": "", "digests": { "md5": "00ac97f53df385151e28629afe8f74b2", "sha256": "d5f1f5e068ab392de9426019a7a133551a26f997af1d35f9082ec14a2c48f9fc" }, "downloads": -1, "filename": "rpcq-2.0.0.dev1.tar.gz", "has_sig": false, "md5_digest": "00ac97f53df385151e28629afe8f74b2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 21390, "upload_time": "2018-10-13T23:39:39", "url": "https://files.pythonhosted.org/packages/28/e1/bafca03e61dbb04ca8e687388ea5782a174e676b9d588153c85d30c8fba1/rpcq-2.0.0.dev1.tar.gz" } ], "2.1.0": [ { "comment_text": "", "digests": { "md5": "7e061b442639f7154fcc6baa6697d5ba", "sha256": "7100ba0856edfc789232fd714a303a849b1e186e0a4a54f96696b0eac97ec848" }, "downloads": -1, "filename": "rpcq-2.1.0.tar.gz", "has_sig": false, "md5_digest": "7e061b442639f7154fcc6baa6697d5ba", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22286, "upload_time": "2018-10-25T16:22:03", "url": "https://files.pythonhosted.org/packages/07/27/704a6b0afe1a904ce8d1fdb88963673f666ec4da977b518d1943d5bfdbc6/rpcq-2.1.0.tar.gz" } ], "2.2.0": [ { "comment_text": "", "digests": { "md5": "61255b372bd091d5cc0ae580eaf8d879", "sha256": "28630f9d4f7d5566f47b50ed84da64cef7ecd063dc299d671a26f1574c4795ce" }, "downloads": -1, "filename": "rpcq-2.2.0.tar.gz", "has_sig": false, "md5_digest": "61255b372bd091d5cc0ae580eaf8d879", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20901, "upload_time": "2018-11-21T02:58:28", "url": "https://files.pythonhosted.org/packages/15/76/2f0b4213ba1690b3f12400f5f3348681257ed4b38776f5f018df51d4ed41/rpcq-2.2.0.tar.gz" } ], "2.2.1": [ { "comment_text": "", "digests": { "md5": "0bc46459224c09e1b90e1efd80b4063f", "sha256": "b57487ffaea19d427fb280d30138f11e9f40ebf2b7ebe9aa23ce4785847db460" }, "downloads": -1, "filename": "rpcq-2.2.1.tar.gz", "has_sig": false, "md5_digest": "0bc46459224c09e1b90e1efd80b4063f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20890, "upload_time": "2018-11-26T17:56:03", "url": "https://files.pythonhosted.org/packages/d2/94/739592b39c546c6893846990f54591c86423f138074de1d24d8bc3177442/rpcq-2.2.1.tar.gz" } ], "2.3.0": [ { "comment_text": "", "digests": { "md5": "d97a715de52b6eca6ce6f7916d73f1e2", "sha256": "463c7741a0a8479c52aca147c52528891f48ba1b54348512694b84740d95f579" }, "downloads": -1, "filename": "rpcq-2.3.0.tar.gz", "has_sig": false, "md5_digest": "d97a715de52b6eca6ce6f7916d73f1e2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17029, "upload_time": "2018-12-07T06:36:59", "url": "https://files.pythonhosted.org/packages/de/fe/b0023e197ecb051968700a95f3e5096a92954e0b943ba4e9135acba21121/rpcq-2.3.0.tar.gz" } ], "2.3.1": [ { "comment_text": "", "digests": { "md5": "8f033ee9af25591ae40e1099fe20bb8d", "sha256": "a84f6810b194b96caa0689870ce8ae7a8f150d04d8cf320da9faefe60d52e0dc" }, "downloads": -1, "filename": "rpcq-2.3.1.tar.gz", "has_sig": false, "md5_digest": "8f033ee9af25591ae40e1099fe20bb8d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17057, "upload_time": "2018-12-12T21:00:33", "url": "https://files.pythonhosted.org/packages/8b/e1/fd904537b74fa709e5e74b0b5a34ac2ab951a02efa4807f51c1e7586fff7/rpcq-2.3.1.tar.gz" } ], "2.4.0": [ { "comment_text": "", "digests": { "md5": "52b949ee60d5edd449cc355be8b845ba", "sha256": "95d8e5493e9a0d423d04e758f3fbc0f1201f52cb05e45ac456462543e5950521" }, "downloads": -1, "filename": "rpcq-2.4.0.tar.gz", "has_sig": false, "md5_digest": "52b949ee60d5edd449cc355be8b845ba", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17327, "upload_time": "2019-01-02T20:54:19", "url": "https://files.pythonhosted.org/packages/61/18/8a886c423df71570a00dda2d07416422783da385a3a088ee012228e51a50/rpcq-2.4.0.tar.gz" } ], "2.4.1": [ { "comment_text": "", "digests": { "md5": "aa4620db3e8071eb5ada09e4467866f6", "sha256": "44ef1f613fcf3e58beef67db0b0f6f99ef13e5970db27cc3d61eb3fcad8f0121" }, "downloads": -1, "filename": "rpcq-2.4.1.tar.gz", "has_sig": false, "md5_digest": "aa4620db3e8071eb5ada09e4467866f6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18400, "upload_time": "2019-03-27T18:39:46", "url": "https://files.pythonhosted.org/packages/4b/a9/2a70a8e182d7a99b0d73b6c15c7fd71c289782ea98c75bb57568749566ce/rpcq-2.4.1.tar.gz" } ], "2.5.0": [ { "comment_text": "", "digests": { "md5": "ac3eccc4e97e0a9da94e0c70eba91e19", "sha256": "661c9f5b1bf0adf708d9dbeea89e60c071211e137447cc6d2d73d2e75954824b" }, "downloads": -1, "filename": "rpcq-2.5.0.tar.gz", "has_sig": false, "md5_digest": "ac3eccc4e97e0a9da94e0c70eba91e19", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 37837, "upload_time": "2019-05-01T01:30:36", "url": "https://files.pythonhosted.org/packages/7e/11/07465159995ba88828836402840e807e11d22e6febbc7c72442cc600a67b/rpcq-2.5.0.tar.gz" } ], "2.5.1": [ { "comment_text": "", "digests": { "md5": "d71647931b1036b5c964178a9f585fdb", "sha256": "75593916f8619460c89859e3475b0147c1ee840c267e742a7117ee20088e1751" }, "downloads": -1, "filename": "rpcq-2.5.1.tar.gz", "has_sig": false, "md5_digest": "d71647931b1036b5c964178a9f585fdb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 37921, "upload_time": "2019-05-01T22:47:24", "url": "https://files.pythonhosted.org/packages/74/4f/c01ad31db3c1f67782b45943e7e79cc9c1d13c0b4a10f778ed03a1e89958/rpcq-2.5.1.tar.gz" } ], "2.6.0": [ { "comment_text": "", "digests": { "md5": "a1ba02658f22b7af8f1c94f38b87ccbb", "sha256": "c329317930f06a2c6b9dddf868ae1512fa36199ef021d8a7fd2a286eccae6dd2" }, "downloads": -1, "filename": "rpcq-2.6.0-py3-none-any.whl", "has_sig": false, "md5_digest": "a1ba02658f22b7af8f1c94f38b87ccbb", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 37800, "upload_time": "2019-05-17T19:38:07", "url": "https://files.pythonhosted.org/packages/79/20/b0791ed16f8ecabd6edddf9e5b4974fff00c90f70807bef9bb4122a3e500/rpcq-2.6.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "e9a316d88314f2dc9ee706d28fb8f878", "sha256": "536fbe1ed6551300990a75bc0fd66a2dc25a31d7f3bd04d79de5c9357e066b87" }, "downloads": -1, "filename": "rpcq-2.6.0.tar.gz", "has_sig": false, "md5_digest": "e9a316d88314f2dc9ee706d28fb8f878", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 38050, "upload_time": "2019-05-17T19:40:33", "url": "https://files.pythonhosted.org/packages/85/30/e30592a439c496192a7da2c9c61b4aafbd41383dbf7962d546b010670073/rpcq-2.6.0.tar.gz" } ], "2.6.1": [ { "comment_text": "", "digests": { "md5": "48ed924771f9e8b3f354cc05f3edcdbc", "sha256": "510a90b0f2caad084729195f294afc1908ca783e66f5e7a48d16c1d5e647d98c" }, "downloads": -1, "filename": "rpcq-2.6.1.tar.gz", "has_sig": false, "md5_digest": "48ed924771f9e8b3f354cc05f3edcdbc", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 38047, "upload_time": "2019-05-17T23:39:25", "url": "https://files.pythonhosted.org/packages/3e/2e/5f1630c682278154422138381d7736bcf2de1def38faef53ca18196b038b/rpcq-2.6.1.tar.gz" } ], "2.7.0": [ { "comment_text": "", "digests": { "md5": "1408058f0f8abd5169ed8fb8f845d146", "sha256": "020efbed1e664dd792118d7e5ae8997aa7ce34edf5300863588eaacfa625aaf1" }, "downloads": -1, "filename": "rpcq-2.7.0.tar.gz", "has_sig": false, "md5_digest": "1408058f0f8abd5169ed8fb8f845d146", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 38320, "upload_time": "2019-06-24T20:45:33", "url": "https://files.pythonhosted.org/packages/a1/00/62f96aa9c6d28aa988a63a40d7bad3737728d49fa943a25347c53bb14bd0/rpcq-2.7.0.tar.gz" } ], "2.7.1": [ { "comment_text": "", "digests": { "md5": "5e37e34a6693eb238ccb246777b6ddd4", "sha256": "21356e3ba4d5068f9b73e08013a8342073d55d367830310ab02874c558d924ed" }, "downloads": -1, "filename": "rpcq-2.7.1.tar.gz", "has_sig": false, "md5_digest": "5e37e34a6693eb238ccb246777b6ddd4", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 38344, "upload_time": "2019-06-25T05:30:05", "url": "https://files.pythonhosted.org/packages/31/75/c479bfb9eae84ab62885f4d3de2ebb6005796c17a7ef0d6886df31224e88/rpcq-2.7.1.tar.gz" } ], "2.7.2": [ { "comment_text": "", "digests": { "md5": "21fb9fb23f9d170c34982126f13e2b89", "sha256": "e13edde1128a5ca5f5a2e9112a3aecf2b949ed57e75d1e1879dc43357fbbb2ff" }, "downloads": -1, "filename": "rpcq-2.7.2.tar.gz", "has_sig": false, "md5_digest": "21fb9fb23f9d170c34982126f13e2b89", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 39238, "upload_time": "2019-07-29T06:45:46", "url": "https://files.pythonhosted.org/packages/f1/00/88998432273ee457ee32171342706144c30fb80e7c1bd21704db8d24fb07/rpcq-2.7.2.tar.gz" } ], "2.7.3": [ { "comment_text": "", "digests": { "md5": "ebab8d4b5235a3aadbf41a8b66d379fa", "sha256": "ad3a72f2b9d7658bd59f7d3e9d90997e131d627a8408b23aad2fd6797b33be20" }, "downloads": -1, "filename": "rpcq-2.7.3.tar.gz", "has_sig": false, "md5_digest": "ebab8d4b5235a3aadbf41a8b66d379fa", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 39238, "upload_time": "2019-08-27T22:06:58", "url": "https://files.pythonhosted.org/packages/52/d8/62f38429b2ffd19c09a67271dfacf1a112e8ff73774e9a64453ed8c10110/rpcq-2.7.3.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "ebab8d4b5235a3aadbf41a8b66d379fa", "sha256": "ad3a72f2b9d7658bd59f7d3e9d90997e131d627a8408b23aad2fd6797b33be20" }, "downloads": -1, "filename": "rpcq-2.7.3.tar.gz", "has_sig": false, "md5_digest": "ebab8d4b5235a3aadbf41a8b66d379fa", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 39238, "upload_time": "2019-08-27T22:06:58", "url": "https://files.pythonhosted.org/packages/52/d8/62f38429b2ffd19c09a67271dfacf1a112e8ff73774e9a64453ed8c10110/rpcq-2.7.3.tar.gz" } ] }