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
Repository
Client-server, python-based laboratory software
Basic Info
Statistics
- Stars: 18
- Watchers: 4
- Forks: 7
- Open Issues: 29
- Releases: 3
Metadata Files
README.md
pylabnet
Client-server, Python-based laboratory software
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
Make sure Git is installed on your computer. For Windows, this can be obtained from git for Windows.
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.gitNavigate into the root directory of the cloned repository - this is the Pylabnet root folder.
bash cd pylabnet(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 environmentenv, the command would simply bepython -m venv env.(If step 4 is performed) Activate the development environment using the command:
bash <env_path>\Scripts\activate # FOr Windows . <env_path>/bin/activate # For LinuxIf 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 runingimport sys; sys.prefixand 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).Update
pipversion:bash python -m pip install --upgrade pipInstall 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.
- 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.
To confirm that the installation has completed, you should be able to run
import pylabnetin your scripts, and you should also find the executablespylabnet_masterandpylabnet_staticproxyin the folder<env_path>\Scripts(Windows) or<env_path>/bin(Linux).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.pemAll questions are optional and you may adjust the value of thedaysflag in order to change the period over which the key is valid. This private key filepylabnet.pemis generated inC:\Users\<Username>\by default in Windows and should be placed intoC:\Windows\System32(Windows) or/etc/ssl/certs(Linux).Create a configuration file
pylabnet/configs/static_proxy.jsonwith 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 }Note that the comments above should be removed before saving as JSON files do not support comments.
The
master_log_portandmaster_gui_portare 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_pathis freely chosen on the master logger to determine where it should store its logs.Clients will additionally also need to specify the master logger's IP address with
master_ip.Finally, to test this, run
pylabnet_masterin 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
.envin the Pylabnet root folder with the following field:LOCALHOST_PW=REMOTE_PC_PASSWORDA 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.jsonwith 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.jsonwith 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 commandipconfigon Windows orifconfigon 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:
- 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_masterexecutable. - For all other computers on the network, launch a proxy Launch Control with
pylabnet_staticproxyto 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. - 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. - 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
- Repositories: 3
- Profile: https://github.com/lukingroup
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 | 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
Pull Request Labels
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
- Homepage: https://github.com/lukingroup/pylabnet
- Documentation: https://pylabnet.readthedocs.io/
- License: MIT
-
Latest release: 1.0.0
published over 4 years ago
Rankings
Dependencies
- JackMcKew/python-interrogate-check main composite
- actions/checkout v2 composite
- actions/setup-python v2 composite
- rbialon/flake8-annotations v1 composite
- actions/checkout v2 composite
- github/codeql-action/analyze v1 composite
- github/codeql-action/autobuild v1 composite
- github/codeql-action/init v1 composite
- 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
- 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