Skip to main content

Client-server, python-based laboratory software

Project description

pylabnet

Client-server, python-based laboratory software

Devices

This is the repository for pylabnet, a software package for client-server, python-based experiment control, designed for use in solid-state quantum optics + quantum network experiments in the Lukin group.

For users

Installation

The package can be installed from the commandline using

pip install pylabnet

You can now import pylabnet and its submodules in your own scripts and notebooks. The package can be updated to the latest version using the command

pip install --upgrade pylabnet

Usage

After pip installation of pylabnet, two executables will be created in the system PATH: pylabnet.exe and pylabnet_proxy.exe. These can be used to launch master and proxy versions of the Launch Control GUI, from which relevant experimental software can be accessed over pylabnet. If desired, you can create shortcuts for these executables and pin the devices.ico icon (shown above and located in the root directory) for bonus style.

NOTE: You will likely need to allow python through Windows firewall the first time you run Launch Control on a new machine.

The master Launch Control runs a LogServer to keep track of all clients and servers on the network, and proxy Launch Control units simply connect to the master and mirror its information for convenience on remote machines.

The general workflow is the following

  1. Launch a master LogServer. Can be done from a cusftom script, but easiest to just use the pylabnet executable.
  2. Connect to hardware locally. This is done through use of drivers located in the pylabnet/hardware submodule. These drivers can also be used for standalone control of hardware, if desired.
  3. Instantiate a GenericServer for each device (or logical module) to allow remote programming from anywhere in the network
  4. Create clients for the hardware servers, which can be used to perform arbitrary functions on devices present across the network

Steps 2-4 can also be done manually from an interactive python notebook or custom script, but common functionality is incorporated into the Launch Control GUI for automatic "double-click" running of these steps.

For developers

Installation

First, clone the repository onto the local machine. Make sure git is installed. Cloning can be done from the command line, (preferrably in your home user directory) with the command

git clone https://github.com/lukingroup/pylabnet.git

NOTE ON DEVELOPMENT IN DEDICATED ENVIRONMENT

For installation in a dedicated pip virtual environment to prevent conflicts with the base python package, create a virtual environment - can be done from the command line using

python -m venv /path/to/new/virtual/testenv

Activate the development environment using the command

/path/to/new/virtual/testenv/Scripts/activate

Be sure to set the interpreter in your IDE to /path/to/new/virtual/testenv/Scripts/python.exe if you will be launching pylabnet scripts directly from the IDE.

Additionally, the dedicated launching bash scripts need to be modified to activate the environment. This can be done by modifying pylabnet/launchers/pylabnet.cmd to read

/path/to/virtual-env/Scripts/activate && start /min "Launch control" python launch_control.py

and modify pylabnet/launchers/pylabnet_proxy.cmd similarly, but with the -p argument after launch_control.py.


Next, navigate to the root directory in the commandline and run the command

python setup.py develop --exclude-scripts /path/to/new/virtual/testenv/Scripts/activate

where the final argument is only required if you are using a virtual environment

NOTE: this command can also be re-used at a later time to maintain the environment (either virtual or base) if new package requirements are added to setup.py.

This will now allow you to import pylabnet from your scripts, and ensures you have the dependencies installed. It also creates a pylabnet.egg-info file which can be safely deleted if desired (it should not be tracked by github).

NOTE: It is often desirable to use the shortcuts provided in the root directory for launching. The "start in" fields need to be modified to the machine-specific path to pylabnet/launchers/pylabnet.cmd and pylabnet/launchers/pylabnet_proxy.cmd, see pylabnet/launchers/README.md for details.

Development

  1. Create a new working branch before making any changes to the repository. Please do not make the changes directly in the master branch! This can be done either from your IDE of choice, or from the commandline within the local github repository, using git checkout -b new-branch-name

  2. Implement and test your changes.

  3. For GUI-based applications, it is recommended to create a launcher module (see pylabnet/launchers/README.md for more details.

  4. For non-GUI applications, please make a Jupyter notebook in the pylabnet/demo folder in order to demonstrate and test the added functionality.

  5. Note that pushing changes to the lukingroup/pylabnet repository requires administrative access. Please contact one of the previous contributors for details.

  6. Try to keep the your local repository up to date with the online repository to avoid unnecessary merge conflicts down the line.

  7. Once stable + working, submit a pull request.

Publishing a new version to pip

Generally, not every commit or even merge into master needs to be published to pip as a new version. However, if substantial functionality is added that could be useful to other users (especially ones that are not actively developing the platform), it is a good idea to release a new version on pip. In this case, you can do this with the following steps:

  1. Make sure the install_requires kwarg in setup.py is up to date with all mandatory packages. If you have added new depedendencies, add them here.

NOTE: The preferred format is to use >= to constrain package versions, rather than ==. Try not to write code that requires a < constraint, since this could cause user-dependent conflicts. As an example of this poor practice, the latest version of spyder has a conflict with the latest versions of pyqt5.

  1. Update the version number in __init__.py in the root module. We have adoped a 3 digit versioning scheme x.y.z where x is the major version, each new y digit corresponds to a substantially new release (with new software components), and the z digit can increment with any improvements, changes, and bug fixes.

  2. Update CHANGELOG.md

  3. Run the following from the commandline

python setup.py sdist bdist_wheel

This will create a pylabnet/dist directory (which should not be tracked by github) containing the build files for this version. Note that this requires one to pip install wheel.

  1. To upload to pip, run the command
twine upload dist/*

NOTE: This requires credentials on https://pypi.org, as well as the twine package which can be installed with pip install twine


NOTE

If you are done using a particular machine for development and would like to use and update the package the standard way via pip, you can remove the pylabnet installation by running the command

python setup.py develop --uninstall

Your local repository can now be deleted and pylabnet can be installed, used, and maintained via pip.


Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pylabnet-0.2.5.tar.gz (269.1 kB view details)

Uploaded Source

Built Distribution

pylabnet-0.2.5-py3-none-any.whl (184.7 kB view details)

Uploaded Python 3

File details

Details for the file pylabnet-0.2.5.tar.gz.

File metadata

  • Download URL: pylabnet-0.2.5.tar.gz
  • Upload date:
  • Size: 269.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/45.2.0.post20200210 requests-toolbelt/0.9.1 tqdm/4.42.1 CPython/3.7.6

File hashes

Hashes for pylabnet-0.2.5.tar.gz
Algorithm Hash digest
SHA256 baae88fda648b636bd39b9d2de0ec730a1eb93e32617c6baa72953836cd64fe6
MD5 8cbbed39f119a258c4296ab37bc9d7ce
BLAKE2b-256 55046ee137eddd7eddd79566fd6048d242c6f53f25bd009948afadaf9f90a2d4

See more details on using hashes here.

File details

Details for the file pylabnet-0.2.5-py3-none-any.whl.

File metadata

  • Download URL: pylabnet-0.2.5-py3-none-any.whl
  • Upload date:
  • Size: 184.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/45.2.0.post20200210 requests-toolbelt/0.9.1 tqdm/4.42.1 CPython/3.7.6

File hashes

Hashes for pylabnet-0.2.5-py3-none-any.whl
Algorithm Hash digest
SHA256 d0cecbed626ba2c6a99b65b7171eafab793d93ef0a0478ccfd204834723ddd1f
MD5 26b295c0923d890113f50970b75a4454
BLAKE2b-256 3c7b9fc985e7a6d164acdc10cbc709e6ee1ca222c812f707cae73e054b09a898

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page