pylabnet

Client-server, python-based laboratory software

https://github.com/lukingroup/pylabnet

Science Score: 64.0%

This score indicates how likely this project is to be science-related based on various indicators:

  • CITATION.cff file
    Found CITATION.cff file
  • codemeta.json file
    Found codemeta.json file
  • .zenodo.json file
    Found .zenodo.json file
  • DOI references
  • Academic publication links
    Links to: zenodo.org
  • Committers with academic emails
    4 of 16 committers (25.0%) from academic institutions
  • Institutional organization owner
  • JOSS paper metadata
  • Scientific vocabulary similarity
    Low similarity (15.1%) to scientific vocabulary
Last synced: 6 months ago · JSON representation ·

Repository

Client-server, python-based laboratory software

Basic Info
  • Host: GitHub
  • Owner: lukingroup
  • License: mit
  • Language: Jupyter Notebook
  • Default Branch: master
  • Homepage:
  • Size: 47.4 MB
Statistics
  • Stars: 18
  • Watchers: 4
  • Forks: 7
  • Open Issues: 29
  • Releases: 3
Created over 6 years ago · Last pushed 7 months ago
Metadata Files
Readme Changelog License Citation

README.md

pylabnet

Client-server, Python-based laboratory software

DOI

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 and quantum network experiments in the Lukin group.

Prerequisites

  • Supported Python versions: 3.8 (tested on 3.8.10)

Installation

  1. Make sure Git is installed on your computer. For Windows, this can be obtained from git for Windows.

  2. In a terminal, navigate to where you want pylabnet to be stored and clone the repository onto the local machine (e.g. C:\\Users\\<Username>). The folder should not have a space in its path and should not be a protected system folder. bash git clone https://github.com/lukingroup/pylabnet.git

  3. Navigate into the root directory of the cloned repository - this is the Pylabnet root folder. bash cd pylabnet

  4. (Optional but highly recommended to avoid conflicts with dependencies) Create a virtual environment using the following command: bash python -m venv <env_path> where <env_path> is to be replaced with the desired location of the virtual environment. For example, if you want to name your virtual environment env, the command would simply be python -m venv env.

  5. (If step 4 is performed) Activate the development environment using the command: bash <env_path>\Scripts\activate # FOr Windows . <env_path>/bin/activate # For Linux If this has succeeded, you should see something like (env) appear at the start of each terminal prompt. You can also check by running Python and then runing import sys; sys.prefix and make sure that it returns the path of the virtual environment you have created. If using an external IDE like VS code, make sure to set the default interpreter in your IDE to <env_path>\Scripts\python.exe (Windows) or <env_path>/bin/python (Linux).

  6. Update pip version: bash python -m pip install --upgrade pip

  7. Install all package requirements: bash pip install -r requirements.txt

If it fails, make sure that your Python version is supported and that you have upgraded pip.

  1. Finally, run the command to install pylabnet: bash python setup.py develop

There may be some errors during dependency installation, but as long as the command terminates with output Finished processing dependencies for pylabnet==x.y.z the installation has worked.

  1. To confirm that the installation has completed, you should be able to run import pylabnet in your scripts, and you should also find the executables pylabnet_master and pylabnet_staticproxy in the folder <env_path>\Scripts (Windows) or <env_path>/bin (Linux).

  2. The package uses SSL authentication via a self-signed private key. You can generate this key using OpenSSL from the command line (for Windows, OpenSSL can be accessed via the Git Bash shell installed together with Git for Windows): bash openssl req -new -x509 -days 365 -nodes -out pylabnet.pem -keyout pylabnet.pem All questions are optional and you may adjust the value of the days flag in order to change the period over which the key is valid. This private key file pylabnet.pem is generated in C:\Users\<Username>\ by default in Windows and should be placed into C:\Windows\System32 (Windows) or /etc/ssl/certs (Linux).

  3. Create a configuration file pylabnet/configs/static_proxy.json with the following fields: { "logger_path": "C:\\Users\\<Username>\\pylabnet_logs", # Only required for master logger (i.e. running pylabnet_master) "master_ip": "192.168.50.101", # Only required for logger client (i.e. running pylabnet_staticproxy) "master_log_port": 12345, # Chosen by the master logger, clients will need to specify the same port as the master "master_gui_port": 12346 # Chosen by the master logger, clients will need to specify the same port as the master }

  4. Note that the comments above should be removed before saving as JSON files do not support comments.

  5. The master_log_port and master_gui_port are freely chosen by the master logger, and all clients will need to specify these same ports in order to connect to the master logger. logger_path is freely chosen on the master logger to determine where it should store its logs.

  6. Clients will additionally also need to specify the master logger's IP address with master_ip.

  7. Finally, to test this, run pylabnet_master in the folder <env_path>\Scripts (Windows) or <env_path>/bin (Linux) and if it does not appear to freeze or crash, you are done with setup!

Initial Setup Notes

Configuration and environment files

  • In order to ssh into remote computers and start up remote device servers, you will need to create an environment file .env in the Pylabnet root folder with the following field: LOCALHOST_PW=REMOTE_PC_PASSWORD A big limitation of the current approach is that it requires all target remote computers to have the same login password.

  • (Optional): Create a configuration file pylabnet/configs/lab_name.json with the following field: javascript { "lab_name": B16 } This can be used for tagging of servers and filtering of servers by lab. Defaults to "NO LAB" if not specified.

  • (Optional): Create a configuration file pylabnet/configs/network_configuration.json with the following fields (remove the comments before saving as JSON): javascript { "subnet": "192.168", # Windows "network_interface": "enp0s3" # Linux } This is used to specify which IP address of the local computer should be used when creating servers in the event that it has more than one (e.g. one IP for the LAN and another IP for the Internet). For Windows, this is done by specifying a prefix that the IP address should satisfy, while for Linux this is done by specifying the network interface that should be used. To check what IP addresses and network interfaces the computer currently has, run the command ipconfig on Windows or ifconfig on Linux.

Windows Firewall

You will likely need to allow Python through Windows Firewall the first time you run Launch Control on a new machine.


Usage

The main executables used for launching the Launch Control GUI are pylabnet_master and pylabnet_staticproxy located in the folder <env_path>\Scripts (Windows) or <env_path>/bin (Linux). If desired, you can create shortcuts for these executables together with the pylabnet_newlogo.ico icon (shown above) for bonus style.

The master Launch Control pylabnet_master starts a LogServer and also keeps track of all servers on the network, while proxy Launch Control instances simply connect to the master logger and mirror its information for convenience on remote machines. The general workflow for working with Launch Control is the following:

  1. Choose a computer to be the master logger. We recommend that this computer be stable with low downtime as all pylabnet communication will require the master logger to be online. Here, launch a master Launch Control using the pylabnet_master executable.
  2. For all other computers on the network, launch a proxy Launch Control with pylabnet_staticproxy to mirror the information that is being recorded on the master logger. This enables the local computer to receive logging messages from all other computers on the network.
  3. For each device that you want to connect, a separate configuration JSON file will be required to specify parameters such as the device ID and ssh settings (if the device is located on a remote computer). These config files must be located in pylabnet/configs/devices/<device_type>/<config_filename>.json. To start this device server, double click on the config filename in the Devices column of Launch Control. You can then write local scripts that connect to these device servers to interact with the device.
  4. For each script that you want to run, a separate configuration JSON file will be required, which minimally specifies the prerequisite device servers and the script location. These config files must be located in pylabnet/configs/script/<script_type>/<config_filename>.json. To start this script, double click on the config filename in the Scripts column of Launch Control.

For an in-depth discussion of how pylabnet works under the hood, refer to the Wiki for more information.

Owner

  • Name: lukingroup
  • Login: lukingroup
  • Kind: organization

Citation (CITATION.cff)

authors:
- family-names: "Knaut"
  given-names: "Can M."
  orcid: "https://orcid.org/0000-0003-2720-4452"
- family-names: "Bhaskar"
  given-names: "Mihir"
- family-names: "Stroganov"
  given-names: "Pavel"
- family-names: "Huan"
  given-names: "Yan Qi"
- family-names: "Stas"
  given-names: "Pieter-Jan"
- family-names: "Assumpcao"
  given-names: "Daniel"
- family-names: "Gong"
  given-names: "Wenjie"
cff-version: "1.1.0"
version: 1.0.1
date-released: 2021-10-28
doi: "10.5281/zenodo.5610008"
license: MIT
message: "If you use this software, please cite it using these metadata."
repository-code: "https://github.com/lukingroup/pylabnet"
title: "pylabnet - Client-server, python-based laboratory software"

GitHub Events

Total
  • Issues event: 20
  • Delete event: 14
  • Issue comment event: 9
  • Push event: 40
  • Gollum event: 1
  • Pull request review event: 5
  • Pull request event: 34
  • Create event: 20
Last Year
  • Issues event: 20
  • Delete event: 14
  • Issue comment event: 9
  • Push event: 40
  • Gollum event: 1
  • Pull request review event: 5
  • Pull request event: 34
  • Create event: 20

Committers

Last synced: almost 3 years ago

All Time
  • Total Commits: 1,613
  • Total Committers: 16
  • Avg Commits per committer: 100.813
  • Development Distribution Score (DDS): 0.64
Top Committers
Name Email Commits
cknaut c****t@g****m 581
mkbhaskar m****r@g****u 396
huanyanqi 3****i@u****m 134
mkbhaskar 3****r@u****m 131
pieterjanstas p****s@g****u 84
Lukin SiV b****n@g****m 58
unknown c****t@y****e 54
Pieter-Jan Stas 7****s@u****m 45
Rivka r****a 42
mkbhaskar b****! 42
Wenjie Gong 5****g@u****m 16
Can Knaut c****t@g****u 14
ps-lukin-siv 4****v@u****m 7
Will Dey w****y@c****u 5
YanChengWeiTony t****7@g****m 3
ctn2014 3****4@u****m 1
Committer Domains (Top 20 + Academic)

Issues and Pull Requests

Last synced: 7 months ago

All Time
  • Total issues: 132
  • Total pull requests: 101
  • Average time to close issues: over 1 year
  • Average time to close pull requests: about 1 month
  • Total issue authors: 6
  • Total pull request authors: 7
  • Average comments per issue: 0.36
  • Average comments per pull request: 0.55
  • Merged pull requests: 58
  • Bot issues: 0
  • Bot pull requests: 43
Past Year
  • Issues: 5
  • Pull requests: 12
  • Average time to close issues: N/A
  • Average time to close pull requests: 6 days
  • Issue authors: 1
  • Pull request authors: 2
  • Average comments per issue: 0.0
  • Average comments per pull request: 0.08
  • Merged pull requests: 2
  • Bot issues: 0
  • Bot pull requests: 10
Top Authors
Issue Authors
  • cknaut (59)
  • pieterjanstas (35)
  • huanyanqi (19)
  • mkbhaskar (15)
  • danielra97 (5)
  • YanChengWeiTony (4)
Pull Request Authors
  • dependabot[bot] (56)
  • pieterjanstas (25)
  • huanyanqi (17)
  • cknaut (14)
  • YanChengWeiTony (7)
  • kelwerks (2)
  • MaximSirotin (1)
  • knyazeveugene (1)
  • pkurilovich (1)
  • danielra97 (1)
Top Labels
Issue Labels
enhancement (23) pulsemaster (16) bug (15) Confluence Upload (8) datataker (5) driver (5) pulses (4) critical (3) ZI AWG (2) documentation (2) gui (2) Logger (2) data (1) good first issue (1) launching (1) g12 (1) networking (1) minor convenience (1)
Pull Request Labels
dependencies (56) bug (3) driver (2) enhancement (1) networking (1) help wanted (1)

Packages

  • Total packages: 1
  • Total downloads:
    • pypi 31 last-month
  • Total dependent packages: 0
  • Total dependent repositories: 1
  • Total versions: 8
  • Total maintainers: 2
pypi.org: pylabnet

Client-server, python-based laboratory software

  • Versions: 8
  • Dependent Packages: 0
  • Dependent Repositories: 1
  • Downloads: 31 Last month
Rankings
Dependent packages count: 7.4%
Forks count: 14.3%
Stargazers count: 14.9%
Dependent repos count: 22.2%
Average: 22.4%
Downloads: 53.4%
Maintainers (2)
Last synced: 7 months ago

Dependencies

.github/workflows/ci.yml actions
  • JackMcKew/python-interrogate-check main composite
  • actions/checkout v2 composite
  • actions/setup-python v2 composite
  • rbialon/flake8-annotations v1 composite
.github/workflows/codeql-analysis.yml actions
  • actions/checkout v2 composite
  • github/codeql-action/analyze v1 composite
  • github/codeql-action/autobuild v1 composite
  • github/codeql-action/init v1 composite
requirements.txt pypi
  • Deprecated ==1.2.13
  • Jinja2 ==2.11.3
  • Markdown ==3.3.4
  • MarkupSafe ==1.1.1
  • PyYAML ==5.4.1
  • Pygments ==2.8.0
  • QtPy ==1.9.0
  • Send2Trash ==1.5.0
  • anyio ==2.1.0
  • argon2-cffi ==20.1.0
  • asgineer ==0.8.0
  • astroid ==2.4.2
  • async-generator ==1.10
  • asyncclick ==7.1.2.3
  • atlassian-python-api ==3.13.2
  • attrs ==20.3.0
  • backcall ==0.2.0
  • backports.entry-points-selectable ==1.1.0
  • bcrypt ==3.2.0
  • bleach ==3.3.0
  • certifi ==2022.12.7
  • cffi ==1.14.5
  • cfgv ==3.3.1
  • charset-normalizer ==2.0.4
  • click ==7.1.2
  • colorama ==0.4.4
  • cryptography ==39.0.1
  • cycler ==0.10.0
  • debugpy ==1.3.0
  • decorator ==4.4.2
  • defusedxml ==0.6.0
  • distlib ==0.3.2
  • entrypoints ==0.3
  • filelock ==3.0.12
  • h11 ==0.12.0
  • helpdev ==0.7.1
  • identify ==2.2.14
  • idna ==3.1
  • importlib-metadata ==3.4.0
  • ipykernel ==5.4.3
  • ipython ==8.10.0
  • ipython-genutils ==0.2.0
  • ipywidgets ==7.6.3
  • isort ==5.7.0
  • itemdb ==1.0.1
  • jedi ==0.18.0
  • jsonschema ==3.2.0
  • jupyter ==1.0.0
  • jupyter-client ==6.1.11
  • jupyter-console ==6.2.0
  • jupyter-core ==4.11.2
  • jupyterlab-pygments ==0.1.2
  • jupyterlab-widgets ==1.0.0
  • kiwisolver ==1.3.1
  • lazy-object-proxy ==1.4.3
  • matplotlib ==3.4.3
  • mccabe ==0.6.1
  • mistune ==0.8.4
  • nbclient ==0.5.2
  • nbconvert ==6.0.7
  • nbformat ==5.1.2
  • nest-asyncio ==1.5.1
  • netifaces ==0.10.9
  • nidaqmx ==0.5.7
  • nodeenv ==1.6.0
  • notebook ==6.2.0
  • numpy ==1.20.1
  • oauthlib ==3.2.2
  • packaging ==20.9
  • pandas ==1.2.3
  • pandocfilters ==1.4.3
  • paramiko ==2.7.2
  • parso ==0.8.1
  • pickleshare ==0.7.5
  • pillow ==9.3.0
  • platformdirs ==2.3.0
  • plotly ==4.14.3
  • plumbum ==1.7.0
  • pre-commit ==2.15.0
  • prometheus-client ==0.9.0
  • prompt-toolkit ==3.0.36
  • pscript ==0.7.5
  • ptvsd ==5.0.0a12
  • pycparser ==2.20
  • pylint ==2.6.2
  • pynacl ==1.4.0
  • pyparsing ==2.4.7
  • pypiwin32 ==223
  • pyqt5 ==5.15.2
  • pyqt5-sip ==12.8.1
  • pyqtgraph ==0.11.1
  • pyrsistent ==0.17.3
  • pyserial ==3.5
  • python-dateutil ==2.8.1
  • python-decouple ==3.4
  • python-kasa ==0.4.0.dev2
  • pytz ==2021.1
  • pyvisa ==1.11.3
  • pywin32 ==300
  • pywinpty ==0.5.7
  • pyzmq ==22.0.3
  • qdarkstyle ==2.8.1
  • qtconsole ==5.0.2
  • qutip ==4.6.2
  • requests ==2.26.0
  • requests-oauthlib ==1.3.0
  • retrying ==1.3.3
  • rpyc ==5.0.1
  • scipy ==1.6.1
  • seaborn ==0.11.1
  • si-prefix ==1.2.2
  • six ==1.15.0
  • slack-sdk ==3.5.0
  • sniffio ==1.2.0
  • terminado ==0.9.2
  • testpath ==0.4.4
  • toml ==0.10.2
  • tornado ==6.1
  • traitlets ==5.0.5
  • typing-extensions ==3.7.4.3
  • urllib3 ==1.26.6
  • uvicorn ==0.13.4
  • virtualenv ==20.7.2
  • wcwidth ==0.2.5
  • webencodings ==0.5.1
  • widgetsnbextension ==3.5.1
  • wrapt ==1.12.1
  • zhinst ==20.7.2701
  • zipp ==3.4.0
setup.py pypi
  • PyQt5 >=5.13.0
  • PyVISA >=1.10.1
  • atlassian-python-api >=3.13.2
  • debugpy >=1.3.0
  • decorator >=4.4.0
  • ipywidgets >=7.5.1
  • matplotlib >=3.1.3
  • nidaqmx >=0.5.7
  • numpy >=1.16.5
  • paramiko >=2.7.2
  • plotly >=4.7.1
  • ptvsd >=5.0.0a12
  • pyqtgraph >=0.10.0
  • pyserial >=3.4
  • python-decouple >=3.3
  • python-kasa >=0.4.0.dev2
  • pytz >=2019.3
  • qdarkstyle >=2.8.1
  • rpyc >=4.1.2
  • scipy >=1.6.1
  • si_prefix >=1.2.2
  • simpleeval >=0.9.10
  • slack-sdk >=3.5.0