Full Code of Galvant/InstrumentKit for AI

main c976204e016b cached
347 files
2.0 MB
548.6k tokens
3771 symbols
1 requests
Download .txt
Showing preview only (2,190K chars total). Download the full file or copy to clipboard to get everything.
Repository: Galvant/InstrumentKit
Branch: main
Commit: c976204e016b
Files: 347
Total size: 2.0 MB

Directory structure:
gitextract_gysdejrm/

├── .coveragerc
├── .github/
│   └── workflows/
│       ├── deploy.yml
│       └── test.yml
├── .gitignore
├── .pre-commit-config.yaml
├── .readthedocs.yml
├── README.rst
├── doc/
│   ├── Makefile
│   ├── examples/
│   │   ├── .ipynb_checkpoints/
│   │   │   └── ex_keithley6514-checkpoint.ipynb
│   │   ├── ex_generic_scpi.ipynb
│   │   ├── ex_generic_scpi.py
│   │   ├── ex_hp3325.py
│   │   ├── ex_hp3456.out
│   │   ├── ex_hp3456.py
│   │   ├── ex_keithley195.ipynb
│   │   ├── ex_keithley195.py
│   │   ├── ex_keithley6514.ipynb
│   │   ├── ex_maui.ipynb
│   │   ├── ex_oscilloscope_waveform.ipynb
│   │   ├── ex_oscilloscope_waveform.py
│   │   ├── ex_qubitekk_gui.py
│   │   ├── ex_qubitekkcc.py
│   │   ├── ex_qubitekkcc_simple.py
│   │   ├── ex_tekdpo70000.ipynb
│   │   ├── ex_thorlabslcc.py
│   │   ├── ex_thorlabssc10.py
│   │   ├── ex_thorlabstc200.py
│   │   ├── ex_topticatopmode.py
│   │   ├── example2.py
│   │   ├── minghe/
│   │   │   └── ex_minghe_mhs5200.py
│   │   ├── qubitekk/
│   │   │   └── ex_qubitekk_mc1.py
│   │   ├── srs_DG645.ipynb
│   │   └── srs_DG645.py
│   ├── make.bat
│   └── source/
│       ├── acknowledgements.rst
│       ├── apiref/
│       │   ├── agilent.rst
│       │   ├── aimtti.rst
│       │   ├── comet.rst
│       │   ├── config.rst
│       │   ├── delta_elektronika.rst
│       │   ├── dressler.rst
│       │   ├── fluke.rst
│       │   ├── generic_scpi.rst
│       │   ├── gentec-eo.rst
│       │   ├── glassman.rst
│       │   ├── hcp.rst
│       │   ├── holzworth.rst
│       │   ├── hp.rst
│       │   ├── index.rst
│       │   ├── instrument.rst
│       │   ├── keithley.rst
│       │   ├── lakeshore.rst
│       │   ├── mettler_toledo.rst
│       │   ├── minghe.rst
│       │   ├── newport.rst
│       │   ├── ondax.rst
│       │   ├── oxford.rst
│       │   ├── pfeiffer.rst
│       │   ├── phasematrix.rst
│       │   ├── picowatt.rst
│       │   ├── qubitekk.rst
│       │   ├── rigol.rst
│       │   ├── srs.rst
│       │   ├── sunpower.rst
│       │   ├── tektronix.rst
│       │   ├── teledyne.rst
│       │   ├── thorlabs.rst
│       │   ├── toptica.rst
│       │   └── yokogawa.rst
│       ├── conf.py
│       ├── devguide/
│       │   ├── code_style.rst
│       │   ├── design_philosophy.rst
│       │   ├── index.rst
│       │   ├── testing.rst
│       │   └── util_fns.rst
│       ├── index.rst
│       └── intro.rst
├── license/
│   ├── AUTHOR.TXT
│   └── LICENSE.TXT
├── matlab/
│   ├── matlab-example.ipynb
│   └── open_instrument.m
├── pyproject.toml
├── src/
│   └── instruments/
│       ├── __init__.py
│       ├── abstract_instruments/
│       │   ├── __init__.py
│       │   ├── comm/
│       │   │   ├── __init__.py
│       │   │   ├── abstract_comm.py
│       │   │   ├── file_communicator.py
│       │   │   ├── gpib_communicator.py
│       │   │   ├── loopback_communicator.py
│       │   │   ├── serial_communicator.py
│       │   │   ├── serial_manager.py
│       │   │   ├── socket_communicator.py
│       │   │   ├── usb_communicator.py
│       │   │   ├── usbtmc_communicator.py
│       │   │   ├── visa_communicator.py
│       │   │   └── vxi11_communicator.py
│       │   ├── electrometer.py
│       │   ├── function_generator.py
│       │   ├── instrument.py
│       │   ├── multimeter.py
│       │   ├── optical_spectrum_analyzer.py
│       │   ├── oscilloscope.py
│       │   ├── power_supply.py
│       │   └── signal_generator/
│       │       ├── __init__.py
│       │       ├── channel.py
│       │       ├── signal_generator.py
│       │       └── single_channel_sg.py
│       ├── agilent/
│       │   ├── __init__.py
│       │   ├── agilent33220a.py
│       │   └── agilent34410a.py
│       ├── aimtti/
│       │   ├── __init__.py
│       │   └── aimttiel302p.py
│       ├── comet/
│       │   ├── __init__.py
│       │   └── cito_plus_1310.py
│       ├── config.py
│       ├── delta_elektronika/
│       │   ├── __init__.py
│       │   └── psc_eth.py
│       ├── dressler/
│       │   ├── __init__.py
│       │   └── cesar_1312.py
│       ├── errors.py
│       ├── fluke/
│       │   ├── __init__.py
│       │   └── fluke3000.py
│       ├── generic_scpi/
│       │   ├── __init__.py
│       │   ├── scpi_function_generator.py
│       │   ├── scpi_instrument.py
│       │   └── scpi_multimeter.py
│       ├── gentec_eo/
│       │   ├── __init__.py
│       │   └── blu.py
│       ├── glassman/
│       │   ├── __init__.py
│       │   └── glassmanfr.py
│       ├── hcp/
│       │   ├── __init__.py
│       │   ├── tc038.py
│       │   └── tc038d.py
│       ├── holzworth/
│       │   ├── __init__.py
│       │   └── holzworth_hs9000.py
│       ├── hp/
│       │   ├── __init__.py
│       │   ├── hp3325a.py
│       │   ├── hp3456a.py
│       │   ├── hp6624a.py
│       │   ├── hp6632b.py
│       │   ├── hp6652a.py
│       │   └── hpe3631a.py
│       ├── keithley/
│       │   ├── __init__.py
│       │   ├── keithley195.py
│       │   ├── keithley2182.py
│       │   ├── keithley485.py
│       │   ├── keithley580.py
│       │   ├── keithley6220.py
│       │   └── keithley6514.py
│       ├── lakeshore/
│       │   ├── __init__.py
│       │   ├── lakeshore336.py
│       │   ├── lakeshore340.py
│       │   ├── lakeshore370.py
│       │   └── lakeshore475.py
│       ├── mettler_toledo/
│       │   ├── __init__.py
│       │   └── mt_sics.py
│       ├── minghe/
│       │   ├── __init__.py
│       │   └── mhs5200a.py
│       ├── named_struct.py
│       ├── newport/
│       │   ├── __init__.py
│       │   ├── agilis.py
│       │   ├── errors.py
│       │   ├── newport_pmc8742.py
│       │   └── newportesp301.py
│       ├── ondax/
│       │   ├── __init__.py
│       │   └── lm.py
│       ├── optional_dep_finder.py
│       ├── oxford/
│       │   ├── __init__.py
│       │   └── oxforditc503.py
│       ├── pfeiffer/
│       │   ├── __init__.py
│       │   └── tpg36x.py
│       ├── phasematrix/
│       │   ├── __init__.py
│       │   └── phasematrix_fsw0020.py
│       ├── picowatt/
│       │   ├── __init__.py
│       │   └── picowattavs47.py
│       ├── qubitekk/
│       │   ├── __init__.py
│       │   ├── cc1.py
│       │   └── mc1.py
│       ├── rigol/
│       │   ├── __init__.py
│       │   └── rigolds1000.py
│       ├── srs/
│       │   ├── __init__.py
│       │   ├── srs345.py
│       │   ├── srs830.py
│       │   ├── srsctc100.py
│       │   └── srsdg645.py
│       ├── sunpower/
│       │   ├── __init__.py
│       │   └── cryotel_gt.py
│       ├── tektronix/
│       │   ├── __init__.py
│       │   ├── tekawg2000.py
│       │   ├── tekdpo4104.py
│       │   ├── tekdpo70000.py
│       │   ├── tektds224.py
│       │   └── tektds5xx.py
│       ├── teledyne/
│       │   ├── __init__.py
│       │   └── maui.py
│       ├── thorlabs/
│       │   ├── __init__.py
│       │   ├── _abstract.py
│       │   ├── _cmds.py
│       │   ├── _packets.py
│       │   ├── lcc25.py
│       │   ├── pm100usb.py
│       │   ├── sc10.py
│       │   ├── tc200.py
│       │   ├── thorlabs_utils.py
│       │   └── thorlabsapt.py
│       ├── toptica/
│       │   ├── __init__.py
│       │   ├── topmode.py
│       │   └── toptica_utils.py
│       ├── units.py
│       ├── util_fns.py
│       └── yokogawa/
│           ├── __init__.py
│           ├── yokogawa6370.py
│           └── yokogawa7651.py
├── tests/
│   ├── __init__.py
│   ├── test_abstract_inst/
│   │   ├── __init__.py
│   │   ├── test_electrometer.py
│   │   ├── test_function_generator.py
│   │   ├── test_multimeter.py
│   │   ├── test_optical_spectrum_analyzer.py
│   │   ├── test_oscilloscope.py
│   │   ├── test_power_supply.py
│   │   └── test_signal_generator/
│   │       ├── test_channel.py
│   │       ├── test_signal_generator.py
│   │       └── test_single_channel_sg.py
│   ├── test_agilent/
│   │   ├── __init__.py
│   │   ├── test_agilent_33220a.py
│   │   └── test_agilent_34410a.py
│   ├── test_aimtti/
│   │   ├── __init__.py
│   │   └── test_aimttiel302p.py
│   ├── test_base_instrument.py
│   ├── test_comet/
│   │   ├── __init__.py
│   │   └── test_cito_plus_1310.py
│   ├── test_comm/
│   │   ├── __init__.py
│   │   ├── test_file.py
│   │   ├── test_gpibusb.py
│   │   ├── test_loopback.py
│   │   ├── test_serial.py
│   │   ├── test_socket.py
│   │   ├── test_usb_communicator.py
│   │   ├── test_usbtmc.py
│   │   ├── test_visa_communicator.py
│   │   └── test_vxi11.py
│   ├── test_config.py
│   ├── test_delta_elektronika/
│   │   ├── __init__.py
│   │   └── test_psc_eth.py
│   ├── test_dressler/
│   │   ├── __init__.py
│   │   └── test_cesar_1312.py
│   ├── test_fluke/
│   │   ├── __init__.py
│   │   └── test_fluke3000.py
│   ├── test_generic_scpi/
│   │   ├── __init__.py
│   │   ├── test_scpi_function_generator.py
│   │   ├── test_scpi_instrument.py
│   │   └── test_scpi_multimeter.py
│   ├── test_gentec_eo/
│   │   ├── __init__.py
│   │   └── test_blu.py
│   ├── test_glassman/
│   │   ├── __init__.py
│   │   └── test_glassmanfr.py
│   ├── test_hcp/
│   │   ├── __init__.py
│   │   ├── test_tc038.py
│   │   └── test_tc038d.py
│   ├── test_holzworth/
│   │   ├── __init__.py
│   │   └── test_holzworth_hs9000.py
│   ├── test_hp/
│   │   ├── __init__.py
│   │   ├── test_hp3325a.py
│   │   ├── test_hp3456a.py
│   │   ├── test_hp6624a.py
│   │   ├── test_hp6632b.py
│   │   ├── test_hp6652a.py
│   │   └── test_hpe3631a.py
│   ├── test_keithley/
│   │   ├── __init__.py
│   │   ├── test_keithley195.py
│   │   ├── test_keithley2182.py
│   │   ├── test_keithley485.py
│   │   ├── test_keithley580.py
│   │   ├── test_keithley6220.py
│   │   └── test_keithley6514.py
│   ├── test_lakeshore/
│   │   ├── __init__.py
│   │   ├── test_lakeshore336.py
│   │   ├── test_lakeshore340.py
│   │   ├── test_lakeshore370.py
│   │   └── test_lakeshore475.py
│   ├── test_mettler_toledo/
│   │   ├── __init__.py
│   │   └── test_mt_sics.py
│   ├── test_minghe/
│   │   └── test_minghe_mhs5200a.py
│   ├── test_named_struct.py
│   ├── test_newport/
│   │   ├── __init__.py
│   │   ├── test_agilis.py
│   │   ├── test_errors.py
│   │   ├── test_newport_pmc8742.py
│   │   └── test_newportesp301.py
│   ├── test_ondax/
│   │   └── test_lm.py
│   ├── test_oxford/
│   │   ├── __init__.py
│   │   └── test_oxforditc503.py
│   ├── test_package.py
│   ├── test_pfeiffer/
│   │   ├── __init__.py
│   │   └── test_tpg36x.py
│   ├── test_phasematrix/
│   │   ├── __init__.py
│   │   └── test_phasematrix_fsw0020.py
│   ├── test_picowatt/
│   │   ├── __init__.py
│   │   └── test_picowatt_avs47.py
│   ├── test_property_factories/
│   │   ├── __init__.py
│   │   ├── test_bool_property.py
│   │   ├── test_bounded_unitful_property.py
│   │   ├── test_enum_property.py
│   │   ├── test_int_property.py
│   │   ├── test_rproperty.py
│   │   ├── test_string_property.py
│   │   ├── test_unitful_property.py
│   │   └── test_unitless_property.py
│   ├── test_qubitekk/
│   │   ├── __init__.py
│   │   ├── test_qubitekk_cc1.py
│   │   └── test_qubitekk_mc1.py
│   ├── test_rigol/
│   │   └── test_rigolds1000.py
│   ├── test_split_str.py
│   ├── test_srs/
│   │   ├── __init__.py
│   │   ├── test_srs345.py
│   │   ├── test_srs830.py
│   │   ├── test_srsctc100.py
│   │   └── test_srsdg645.py
│   ├── test_sunpower/
│   │   ├── __init__.py
│   │   └── test_cryotel_gt.py
│   ├── test_tektronix/
│   │   ├── __init__.py
│   │   ├── test_tekawg2000.py
│   │   ├── test_tekdpo4104.py
│   │   ├── test_tekdpo70000.py
│   │   ├── test_tektronix_tds224.py
│   │   └── test_tktds5xx.py
│   ├── test_teledyne/
│   │   ├── __init__.py
│   │   └── test_maui.py
│   ├── test_test_utils.py
│   ├── test_thorlabs/
│   │   ├── __init__.py
│   │   ├── test_abstract.py
│   │   ├── test_packets.py
│   │   ├── test_thorlabs_apt.py
│   │   ├── test_thorlabs_lcc25.py
│   │   ├── test_thorlabs_pm100usb.py
│   │   ├── test_thorlabs_sc10.py
│   │   ├── test_thorlabs_tc200.py
│   │   └── test_utils.py
│   ├── test_toptica/
│   │   ├── __init__.py
│   │   ├── test_toptica_topmode.py
│   │   └── test_toptica_utils.py
│   ├── test_util_fns.py
│   └── test_yokogawa/
│       ├── __init__.py
│       ├── test_yokogawa7651.py
│       └── test_yokogawa_6370.py
└── tox.ini

================================================
FILE CONTENTS
================================================

================================================
FILE: .coveragerc
================================================
[paths]
source =
    src
    */site-packages

[report]
omit =
    */python?.?/*
    */site-packages/nose/*
    *__init__*
exclude_lines =
    pragma: no cover
    if self._testing:
    if not self._testing:
    raise NotImplementedError
    raise AssertionError

[run]
branch = false
parallel = true
source =
    instruments
relative_files = True


================================================
FILE: .github/workflows/deploy.yml
================================================
name: Upload Python Package

on:
  release:
    types: [published]

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
        with:
          fetch-depth: 0
      - name: Set up Python
        uses: actions/setup-python@v2
        with:
          python-version: '3.x'
      - name: Install dependencies
        run: |
          python -m pip install --upgrade pip virtualenv
          pip install build
      - name: Build package
        run: python -m build
      - name: Publish package
        uses: pypa/gh-action-pypi-publish@release/v1
        with:
          user: __token__
          password: ${{ secrets.PYPI_API_TOKEN }}


================================================
FILE: .github/workflows/test.yml
================================================
name: Testing

on:
  push:
    branches: [ main ]
  pull_request:

jobs:
  static-checks:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v4
    - name: Set up Python ${{ matrix.python-version }}
      uses: actions/setup-python@v5
      with:
        python-version: ${{ matrix.python-version }}
    - name: Install dependencies
      run: pip install --upgrade pre-commit
    - name: Run static checks via pre-commit
      run: SKIP=no-commit-to-branch pre-commit run --all --show-diff-on-failure
  test:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        include:
          - python-version: 3.9
            TOXENV: "py39"
          - python-version: 3.9
            TOXENV: "py39-numpy"
          - python-version: "3.10"
            TOXENV: "py310"
          - python-version: "3.11"
            TOXENV: "py311"
          - python-version: "3.12"
            TOXENV: "py312"
          - python-version: "3.13"
            TOXENV: "py313"
    steps:
    - uses: actions/checkout@v4
      with:
        fetch-depth: 0
    - name: Set up Python ${{ matrix.python-version }}
      uses: actions/setup-python@v5
      with:
        python-version: ${{ matrix.python-version }}
    - name: Install dependencies
      run: pip install --upgrade pip setuptools wheel virtualenv tox
    - name: Test with tox
      env:
        TOXENV: ${{ matrix.TOXENV }}
      run: tox
    - name: Upload coverage to Codecov
      if: github.repository_owner == 'instrumentkit'
      uses: codecov/codecov-action@v4
      env:
        TOXENV: ${{ matrix.TOXENV }}
        CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
      with:
        env_vars: TOXENV
        fail_ci_if_error: true
        flags: unittests
        name: codecov-umbrella
        verbose: true
        files: ./coverage.xml


================================================
FILE: .gitignore
================================================
## Temporary files ##
*~
*.tmp

## OS generated files ##
.DS_Store*
desktop.ini
Thumbs.db

## Build directories ##
doc/_build

## Venv
.venv/
.python-version

## setup.py generated files ##
MANIFEST

# The following ignores are drawn from github@github:gitignore/Python.gitignore.
*.py[cod]

# C extensions
*.so

# Packages
.egg/
*.egg
*.egg-info
dist
build
eggs
parts
bin
var
sdist
develop-eggs
.installed.cfg
lib
lib64

# Installer logs
pip-log.txt

# Unit test / coverage reports
.coverage
.tox
nosetests.xml
.pytest_cache
coverage.xml

#Translations
*.mo

#Mr Developer
.mr.developer.cfg

#pycharm generated
.idea

# VS Code IDE internals
.vscode/

# nosetests metadata
.noseids

# Hypothesis files
.hypothesis/

# version file generated by setuptools_scm
src/instruments/_version.py


================================================
FILE: .pre-commit-config.yaml
================================================
repos:
  - repo: https://github.com/pre-commit/pre-commit-hooks
    rev: v6.0.0
    hooks:
      - id: no-commit-to-branch
        args: [--branch, main]
      - id: trailing-whitespace
      - id: end-of-file-fixer
      - id: check-yaml
      - id: debug-statements
  - repo: https://github.com/psf/black-pre-commit-mirror
    rev: 26.3.1
    hooks:
      - id: black
  - repo: https://github.com/asottile/pyupgrade
    rev: v3.21.2
    hooks:
      - id: pyupgrade
        args: [ --py39-plus ]


================================================
FILE: .readthedocs.yml
================================================
version: 2
build:
  os: ubuntu-24.04
  tools:
    python: "3.13"

sphinx:
  builder: html
  configuration: doc/source/conf.py
  fail_on_warning: false

python:
  install:
    - method: pip
      path: .
      extra_requirements:
        - docs


================================================
FILE: README.rst
================================================
InstrumentKit
=============

.. image:: https://github.com/instrumentkit/InstrumentKit/workflows/Testing/badge.svg?branch=main
    :target: https://github.com/instrumentkit/InstrumentKit
    :alt: Github Actions build status

.. image:: https://codecov.io/gh/instrumentkit/InstrumentKit/branch/main/graph/badge.svg?token=Q2wcdW3t4A
    :target: https://codecov.io/gh/instrumentkit/InstrumentKit
    :alt: Codecov code coverage

.. image:: https://readthedocs.org/projects/instrumentkit/badge/?version=latest
    :target: https://readthedocs.org/projects/instrumentkit/?badge=latest
    :alt: Documentation

.. image:: https://img.shields.io/pypi/v/instrumentkit.svg?maxAge=86400
    :target: https://pypi.python.org/pypi/instrumentkit
    :alt: PyPI version

.. image:: https://img.shields.io/pypi/pyversions/instrumentkit.svg?maxAge=2592000
    :alt: Python versions

InstrumentKit is an open source Python library designed to help the
end-user get straight into communicating with their equipment via a PC.
InstrumentKit aims to accomplish this by providing a connection- and
vendor-agnostic API. Users can freely swap between a variety of
connection types (ethernet, gpib, serial, usb) without impacting their
code. Since the API is consistent across similar instruments, a user
can, for example, upgrade from their 1980's multimeter using GPIB to a
modern Keysight 34461a using ethernet with only a single line change.

Supported means of communication are:

- Galvant Industries GPIBUSB adapter (``open_gpibusb``)
- Serial (``open_serial``)
- Sockets (``open_tcpip``)
- VISA (``open_visa``)
- Read/write from unix files (``open_file``)
- USBTMC (``open_usbtmc``)
- VXI11 over Ethernet (``open_vxi11``)
- Raw USB (``open_usb``)

There is planned support for HiSLIP someday, but a good Python HiSLIP library will be needed first.

If you have any problems or have code you wish to contribute back to the
project please feel free to open an issue or a pull request!

Installation
------------

The ``instruments`` package can be installed from this repository by the
following means:

From Git:

.. code-block:: console

    $ git clone git@github.com:instrumentkit/InstrumentKit.git
    $ cd InstrumentKit
    $ pip install -e .

From Github using pip:

.. code-block:: console

    $ pip install -e git+https://www.github.com/instrumentkit/InstrumentKit.git

From pypi using pip (the latest stable release):

.. code-block:: console

    $ pip install instrumentkit

From pypi using pip (the latest pre-release):

.. code-block:: console

    $ pip install instrumentkit --pre


Usage Example
-------------

To open a connection to a generic SCPI-compatible multimeter using a Galvant
Industries' GPIBUSB adapter:

.. code-block:: python

    >>> import instruments as ik
    >>> inst = ik.generic_scpi.SCPIMultimeter.open_gpibusb("/dev/ttyUSB0", 1)

From there, various built-in properties and functions can be called. For
example, the instrument's identification information can be retrieved by
calling the name property:

.. code-block:: python

    >>> print(inst.name)

Or, since in the demo we connected to an ``SCPIMultimeter``, we can preform
multimeter-specific tasks, such as switching functions, and taking a
measurement reading:

.. code-block:: python

    >>> reading = inst.measure(inst.Mode.voltage_dc)
    >>> print(f"Value: {reading.magnitude}, units: {reading.units}")

Due to the sheer number of commands most instruments support, not every single
one is included in InstrumentKit. If there is a specific command you wish to
send, one can use the following functions to do so:

.. code-block:: python

    >>> inst.sendcmd("DATA") # Send command with no response
    >>> resp = inst.query("*IDN?") # Send command and retrieve response

Python Version Compatibility
----------------------------

At this time, Python  3.9, 3.10, 3.11, 3.12, and 3.13 are supported. Should you encounter
any problems with this library that occur in one version or another, please
do not hesitate to let us know.

Documentation
-------------

You can find the project documentation at our ReadTheDocs pages located at
http://instrumentkit.readthedocs.org/en/latest/index.html

Contributing
------------

The InstrumentKit team always welcome additional contributions to the project.
However, we ask that you please review our contributing developer guidelines
which can be found in the documentation. We also suggest that you look at
existing classes which are similar to your work to learn more about the
structure of this project.

To run the tests against all supported version of Python, you will need to
have the binary for each installed. The easiest way to accomplish this is
to use the tool `pyenv <https://github.com/pyenv/pyenv>`_.

With the required system packages installed, all tests can be run with ``tox``:

.. code-block:: console

    $ pip install tox
    $ tox

Pre-commit
----------

A variety of static code checks are managed and executed via the tool
`pre-commit <https://pre-commit.com/>`_. This only needs to be setup once
and then it'll manage everything for you.

.. code-block:: console

    $ pip install pre-commit
    $ pre-commit install

Afterwards, when you go to make a git commit, all the plugins (as specified
by the configuration file ``.pre-commit-config.yaml``) will be executed against
the files that have changed. If any plugins make changes to the files, the
commit will abort, allowing you to add those changes to your changeset and
try to commit again. This tool will gate CI, so be sure to let them run
and pass!

You can also run all the hooks against all the files by directly calling
pre-commit, or though the ``tox`` environment:

.. code-block:: console

    $ pre-commit run --all

or

.. code-block:: console

    $ tox -e precommit

See the ``pre-commit`` documentation for more information.

License
-------

All code in this repository is released under the AGPL-v3 license. Please see
the ``license`` folder for more information.


================================================
FILE: doc/Makefile
================================================
# Makefile for Sphinx documentation
#

# You can set these variables from the command line.
SPHINXOPTS    =
SPHINXBUILD   = sphinx-build
PAPER         =
BUILDDIR      = build

# Internal variables.
PAPEROPT_a4     = -D latex_paper_size=a4
PAPEROPT_letter = -D latex_paper_size=letter
ALLSPHINXOPTS   = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) source
# the i18n builder cannot share the environment and doctrees with the others
I18NSPHINXOPTS  = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) source

.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest gettext

help:
	@echo "Please use \`make <target>' where <target> is one of"
	@echo "  html       to make standalone HTML files"
	@echo "  dirhtml    to make HTML files named index.html in directories"
	@echo "  singlehtml to make a single large HTML file"
	@echo "  pickle     to make pickle files"
	@echo "  json       to make JSON files"
	@echo "  htmlhelp   to make HTML files and a HTML help project"
	@echo "  qthelp     to make HTML files and a qthelp project"
	@echo "  devhelp    to make HTML files and a Devhelp project"
	@echo "  epub       to make an epub"
	@echo "  latex      to make LaTeX files, you can set PAPER=a4 or PAPER=letter"
	@echo "  latexpdf   to make LaTeX files and run them through pdflatex"
	@echo "  text       to make text files"
	@echo "  man        to make manual pages"
	@echo "  texinfo    to make Texinfo files"
	@echo "  info       to make Texinfo files and run them through makeinfo"
	@echo "  gettext    to make PO message catalogs"
	@echo "  changes    to make an overview of all changed/added/deprecated items"
	@echo "  linkcheck  to check all external links for integrity"
	@echo "  doctest    to run all doctests embedded in the documentation (if enabled)"

clean:
	-rm -rf $(BUILDDIR)/*

html:
	$(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
	@echo
	@echo "Build finished. The HTML pages are in $(BUILDDIR)/html."

dirhtml:
	$(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml
	@echo
	@echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml."

singlehtml:
	$(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml
	@echo
	@echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml."

pickle:
	$(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle
	@echo
	@echo "Build finished; now you can process the pickle files."

json:
	$(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json
	@echo
	@echo "Build finished; now you can process the JSON files."

htmlhelp:
	$(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp
	@echo
	@echo "Build finished; now you can run HTML Help Workshop with the" \
	      ".hhp project file in $(BUILDDIR)/htmlhelp."

qthelp:
	$(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp
	@echo
	@echo "Build finished; now you can run "qcollectiongenerator" with the" \
	      ".qhcp project file in $(BUILDDIR)/qthelp, like this:"
	@echo "# qcollectiongenerator $(BUILDDIR)/qthelp/GPIBUSBAdapterDriverLibrary.qhcp"
	@echo "To view the help file:"
	@echo "# assistant -collectionFile $(BUILDDIR)/qthelp/GPIBUSBAdapterDriverLibrary.qhc"

devhelp:
	$(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp
	@echo
	@echo "Build finished."
	@echo "To view the help file:"
	@echo "# mkdir -p $$HOME/.local/share/devhelp/GPIBUSBAdapterDriverLibrary"
	@echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/GPIBUSBAdapterDriverLibrary"
	@echo "# devhelp"

epub:
	$(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub
	@echo
	@echo "Build finished. The epub file is in $(BUILDDIR)/epub."

latex:
	$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
	@echo
	@echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex."
	@echo "Run \`make' in that directory to run these through (pdf)latex" \
	      "(use \`make latexpdf' here to do that automatically)."

latexpdf:
	$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
	@echo "Running LaTeX files through pdflatex..."
	$(MAKE) -C $(BUILDDIR)/latex all-pdf
	@echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."

text:
	$(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text
	@echo
	@echo "Build finished. The text files are in $(BUILDDIR)/text."

man:
	$(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man
	@echo
	@echo "Build finished. The manual pages are in $(BUILDDIR)/man."

texinfo:
	$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
	@echo
	@echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo."
	@echo "Run \`make' in that directory to run these through makeinfo" \
	      "(use \`make info' here to do that automatically)."

info:
	$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
	@echo "Running Texinfo files through makeinfo..."
	make -C $(BUILDDIR)/texinfo info
	@echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo."

gettext:
	$(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale
	@echo
	@echo "Build finished. The message catalogs are in $(BUILDDIR)/locale."

changes:
	$(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes
	@echo
	@echo "The overview file is in $(BUILDDIR)/changes."

linkcheck:
	$(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck
	@echo
	@echo "Link check complete; look for any errors in the above output " \
	      "or in $(BUILDDIR)/linkcheck/output.txt."

doctest:
	$(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest
	@echo "Testing of doctests in the sources finished, look at the " \
	      "results in $(BUILDDIR)/doctest/output.txt."


================================================
FILE: doc/examples/.ipynb_checkpoints/ex_keithley6514-checkpoint.ipynb
================================================
{
 "metadata": {
  "name": ""
 },
 "nbformat": 3,
 "nbformat_minor": 0,
 "worksheets": [
  {
   "cells": [
    {
     "cell_type": "heading",
     "level": 1,
     "metadata": {},
     "source": [
      "InstrumentKit Example Library"
     ]
    },
    {
     "cell_type": "heading",
     "level": 2,
     "metadata": {},
     "source": [
      "Keithley 6514 Electrometer"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "%pylab inline\n",
      "import instruments as ik"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "Populating the interactive namespace from numpy and matplotlib\n"
       ]
      }
     ],
     "prompt_number": 1
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "Here, our device is connected via a gpibusb adaptor, on COM5, address 14."
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "elec=ik.keithley.Keithley6514.open_gpibusb('COM5', 14)"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [],
     "prompt_number": 2
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "Now we query a few standard bits of information:"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "print elec.query('*IDN?')\n",
      "print \"Mode: {}\".format(elec.mode.value)\n",
      "print \"Unit: {}\".format(elec.unit)\n",
      "print \"Upper Range Limit: {}\".format(elec.input_range)\n",
      "print \"Zero Check: {}\".format(elec.zero_check)\n",
      "print \"Zero Correct: {}\".format(elec.zero_correct)"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "KEITHLEY INSTRUMENTS INC.,MODEL 6514,1344784,A12   Aug 29 2008 15:40:25/A02  /D\n",
        "Mode: CURR:DC\n",
        "Unit: 1 A (ampere)"
       ]
      },
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "\n",
        "Upper Range Limit: 2.1e-10 A"
       ]
      },
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "\n",
        "Zero Check: False\n",
        "Zero Correct: False"
       ]
      },
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "\n"
       ]
      }
     ],
     "prompt_number": 3
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "Set up the zero checking/correcting:"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "elec.zero_check = False\n",
      "elec.zero_correct = True"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [],
     "prompt_number": 6
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "Take a single reading:"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "reading, timestamp = elec.read()\n",
      "print \"Current Reading: {}\".format(reading)"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "Current Reading: 2.485788e-11 A\n"
       ]
      }
     ],
     "prompt_number": 7
    }
   ],
   "metadata": {}
  }
 ]
}


================================================
FILE: doc/examples/ex_generic_scpi.ipynb
================================================
{
 "metadata": {
  "name": "ex_generic_scpi"
 },
 "nbformat": 3,
 "nbformat_minor": 0,
 "worksheets": [
  {
   "cells": [
    {
     "cell_type": "heading",
     "level": 1,
     "metadata": {},
     "source": [
      "InstrumentKit Library Examples"
     ]
    },
    {
     "cell_type": "heading",
     "level": 2,
     "metadata": {},
     "source": [
      "Generic SCPI Instrument"
     ]
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "In this example, we will demonstrate how to connect to a generic SCPI \n",
      "instrument and query its identification information."
     ]
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "We start by importing the InstrumentKit package."
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "import instruments as ik"
     ],
     "language": "python",
     "metadata": {},
     "outputs": []
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "Next, we open our connection to the instrument. Here we use the generic \n",
      "SCPIInstrument class and open the connection using the Galvant Industries'\n",
      "GPIBUSB adapter. Our connection is made to the virtual serial port located at\n",
      "/dev/ttyUSB0 and GPIB address 1"
     ]
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "The connection method used will have to be changed to match your setup."
     ]
    },
    {
     "cell_type": "code",
     "collapsed": true,
     "input": [
      "inst = ik.generic_scpi.SCPIInstrument.open_gpibusb('/dev/ttyUSB0', 1)"
     ],
     "language": "python",
     "metadata": {},
     "outputs": []
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "Now that we are connected to the instrument, we can query its identification\n",
      "information. We will do this by using the SCPIInstrument property 'name'."
     ]
    },
    {
     "cell_type": "code",
     "collapsed": true,
     "input": [
      "print inst.name"
     ],
     "language": "python",
     "metadata": {},
     "outputs": []
    }
   ],
   "metadata": {}
  }
 ]
}


================================================
FILE: doc/examples/ex_generic_scpi.py
================================================
# <nbformat>3.0</nbformat>

# <headingcell level=1>

# InstrumentKit Library Examples

# <headingcell level=2>

# Generic SCPI Instrument

# <markdowncell>

# In this example, we will demonstrate how to connect to a generic SCPI
# instrument and query its identification information.

# <markdowncell>

# We start by importing the InstrumentKit package.

# <codecell>

import instruments as ik

# <markdowncell>

# Next, we open our connection to the instrument. Here we use the generic
# SCPIInstrument class and open the connection using the Galvant Industries'
# GPIBUSB adapter. Our connection is made to the virtual serial port located at
# /dev/ttyUSB0 and GPIB address 1

# <markdowncell>

# The connection method used will have to be changed to match your setup.

# <codecell>

inst = ik.generic_scpi.SCPIInstrument.open_gpibusb("/dev/ttyUSB0", 1)

# <markdowncell>

# Now that we are connected to the instrument, we can query its identification
# information. We will do this by using the SCPIInstrument property 'name'.

# <codecell>

print(inst.name)


================================================
FILE: doc/examples/ex_hp3325.py
================================================
import logging

import instruments as ik

fcngen = ik.hp.HP3325a.open_gpibusb("COM4", 17, model="pl")
logging.basicConfig(level=logging.DEBUG)
fcngen._file.debug = True

fcngen.amplitude = 2.0  # V
fcngen.frequency = 512.53  # Hz
fcngen.function = fcngen.Function.square

print(f"Actual voltage={fcngen.amplitude} V")
print(f"Actual frequency={fcngen.frequency} Hz")


================================================
FILE: doc/examples/ex_hp3456.out
================================================
DEBUG:instruments.abstract_instruments.comm.gi_gpib: <- 'T4'
DEBUG:instruments.abstract_instruments.comm.gi_gpib: <- 'W6STG'
DEBUG:instruments.abstract_instruments.comm.gi_gpib: <- 'R1W'
DEBUG:instruments.abstract_instruments.comm.gi_gpib: <- 'W10STN'
DEBUG:instruments.abstract_instruments.comm.gi_gpib: <- 'W1STI'
DEBUG:instruments.abstract_instruments.comm.gi_gpib: <- 'S0F4'
DEBUG:instruments.abstract_instruments.comm.gi_gpib: <- 'M2'
DEBUG:instruments.abstract_instruments.comm.gi_gpib: <- 'T3'
DEBUG:instruments.abstract_instruments.comm.gi_gpib: <- ''
DEBUG:instruments.abstract_instruments.comm.gi_gpib: <- ''
DEBUG:instruments.abstract_instruments.comm.gi_gpib: -> '+000.1055E+0,+000.1043E+0,+000.1005E+0,+000.1014E+0,+000.0993E+0,+000.1037E+0,+000.0995E+0,+000.1002E+0,+000.1041E+0,+000.1025E+0'
DEBUG:instruments.abstract_instruments.comm.gi_gpib: <- 'REV'
DEBUG:instruments.abstract_instruments.comm.gi_gpib: <- ''
DEBUG:instruments.abstract_instruments.comm.gi_gpib: <- ''
DEBUG:instruments.abstract_instruments.comm.gi_gpib: -> '+04.93111E-6'
DEBUG:instruments.abstract_instruments.comm.gi_gpib: <- 'REC'
DEBUG:instruments.abstract_instruments.comm.gi_gpib: <- ''
DEBUG:instruments.abstract_instruments.comm.gi_gpib: <- ''
DEBUG:instruments.abstract_instruments.comm.gi_gpib: -> '+10.00000E+0'
DEBUG:instruments.abstract_instruments.comm.gi_gpib: <- 'REM'
DEBUG:instruments.abstract_instruments.comm.gi_gpib: <- ''
DEBUG:instruments.abstract_instruments.comm.gi_gpib: <- ''
DEBUG:instruments.abstract_instruments.comm.gi_gpib: -> '+102.1000E-3'
DEBUG:instruments.abstract_instruments.comm.gi_gpib: <- 'W10STI'
DEBUG:instruments.abstract_instruments.comm.gi_gpib: <- 'REN'
DEBUG:instruments.abstract_instruments.comm.gi_gpib: <- ''
DEBUG:instruments.abstract_instruments.comm.gi_gpib: <- ''
DEBUG:instruments.abstract_instruments.comm.gi_gpib: -> '+10.00000E+0'
DEBUG:instruments.abstract_instruments.comm.gi_gpib: <- 'REG'
DEBUG:instruments.abstract_instruments.comm.gi_gpib: <- ''
DEBUG:instruments.abstract_instruments.comm.gi_gpib: <- ''
DEBUG:instruments.abstract_instruments.comm.gi_gpib: -> '+06.00000E+0'
DEBUG:instruments.abstract_instruments.comm.gi_gpib: <- 'REI'
DEBUG:instruments.abstract_instruments.comm.gi_gpib: <- ''
DEBUG:instruments.abstract_instruments.comm.gi_gpib: <- ''
DEBUG:instruments.abstract_instruments.comm.gi_gpib: -> '+10.00000E+0'
DEBUG:instruments.abstract_instruments.comm.gi_gpib: <- 'RED'
DEBUG:instruments.abstract_instruments.comm.gi_gpib: <- ''
DEBUG:instruments.abstract_instruments.comm.gi_gpib: <- ''
DEBUG:instruments.abstract_instruments.comm.gi_gpib: -> '-000.0000E+0'
DEBUG:instruments.abstract_instruments.comm.gi_gpib: <- 'REM'
DEBUG:instruments.abstract_instruments.comm.gi_gpib: <- ''
DEBUG:instruments.abstract_instruments.comm.gi_gpib: <- ''
DEBUG:instruments.abstract_instruments.comm.gi_gpib: -> '+102.1000E-3'
DEBUG:instruments.abstract_instruments.comm.gi_gpib: <- 'REV'
DEBUG:instruments.abstract_instruments.comm.gi_gpib: <- ''
DEBUG:instruments.abstract_instruments.comm.gi_gpib: <- ''
DEBUG:instruments.abstract_instruments.comm.gi_gpib: -> '+04.93111E-6'
DEBUG:instruments.abstract_instruments.comm.gi_gpib: <- 'REC'
DEBUG:instruments.abstract_instruments.comm.gi_gpib: <- ''
DEBUG:instruments.abstract_instruments.comm.gi_gpib: <- ''
DEBUG:instruments.abstract_instruments.comm.gi_gpib: -> '+10.00000E+0'
DEBUG:instruments.abstract_instruments.comm.gi_gpib: <- 'REL'
DEBUG:instruments.abstract_instruments.comm.gi_gpib: <- ''
DEBUG:instruments.abstract_instruments.comm.gi_gpib: <- ''
DEBUG:instruments.abstract_instruments.comm.gi_gpib: -> '+099.3000E-3'
DEBUG:instruments.abstract_instruments.comm.gi_gpib: <- 'REU'
DEBUG:instruments.abstract_instruments.comm.gi_gpib: <- ''
DEBUG:instruments.abstract_instruments.comm.gi_gpib: <- ''
DEBUG:instruments.abstract_instruments.comm.gi_gpib: -> '+105.5000E-3'
DEBUG:instruments.abstract_instruments.comm.gi_gpib: <- 'RER'
DEBUG:instruments.abstract_instruments.comm.gi_gpib: <- ''
DEBUG:instruments.abstract_instruments.comm.gi_gpib: <- ''
DEBUG:instruments.abstract_instruments.comm.gi_gpib: -> '+0600.000E+0'
DEBUG:instruments.abstract_instruments.comm.gi_gpib: <- 'REY'
DEBUG:instruments.abstract_instruments.comm.gi_gpib: <- ''
DEBUG:instruments.abstract_instruments.comm.gi_gpib: <- ''
DEBUG:instruments.abstract_instruments.comm.gi_gpib: -> '+1.000000E+0'
DEBUG:instruments.abstract_instruments.comm.gi_gpib: <- 'REZ'
DEBUG:instruments.abstract_instruments.comm.gi_gpib: <- ''
DEBUG:instruments.abstract_instruments.comm.gi_gpib: <- ''
DEBUG:instruments.abstract_instruments.comm.gi_gpib: -> '+105.5000E-3'
DEBUG:instruments.abstract_instruments.comm.gi_gpib: <- 'W100STI'
DEBUG:instruments.abstract_instruments.comm.gi_gpib: <- 'REC'
DEBUG:instruments.abstract_instruments.comm.gi_gpib: <- ''
DEBUG:instruments.abstract_instruments.comm.gi_gpib: <- ''
DEBUG:instruments.abstract_instruments.comm.gi_gpib: -> '+10.00000E+0'
DEBUG:instruments.abstract_instruments.comm.gi_gpib: <- 'S1F1W1STNT3'
DEBUG:instruments.abstract_instruments.comm.gi_gpib: <- ''
DEBUG:instruments.abstract_instruments.comm.gi_gpib: <- ''
DEBUG:instruments.abstract_instruments.comm.gi_gpib: -> '+00.00000E-3'
DEBUG:instruments.abstract_instruments.comm.gi_gpib: <- 'S0F4W1STNT3'
DEBUG:instruments.abstract_instruments.comm.gi_gpib: <- ''
DEBUG:instruments.abstract_instruments.comm.gi_gpib: <- ''
DEBUG:instruments.abstract_instruments.comm.gi_gpib: -> '+000.1010E+0'
DEBUG:instruments.abstract_instruments.comm.gi_gpib: <- 'W1STI'
DEBUG:instruments.abstract_instruments.comm.gi_gpib: <- 'R2W'
DEBUG:instruments.abstract_instruments.comm.gi_gpib: <- 'S0F1W1STNT3'
DEBUG:instruments.abstract_instruments.comm.gi_gpib: <- ''
DEBUG:instruments.abstract_instruments.comm.gi_gpib: <- ''
DEBUG:instruments.abstract_instruments.comm.gi_gpib: -> '+000.0031E-3'
DEBUG:instruments.abstract_instruments.comm.gi_gpib: <- 'R3W'
DEBUG:instruments.abstract_instruments.comm.gi_gpib: <- 'S0F1W1STNT3'
DEBUG:instruments.abstract_instruments.comm.gi_gpib: <- ''
DEBUG:instruments.abstract_instruments.comm.gi_gpib: <- ''
DEBUG:instruments.abstract_instruments.comm.gi_gpib: -> '+0.000003E+0'
DEBUG:instruments.abstract_instruments.comm.gi_gpib: <- 'R4W'
DEBUG:instruments.abstract_instruments.comm.gi_gpib: <- 'S0F1W1STNT3'
DEBUG:instruments.abstract_instruments.comm.gi_gpib: <- ''
DEBUG:instruments.abstract_instruments.comm.gi_gpib: <- ''
DEBUG:instruments.abstract_instruments.comm.gi_gpib: -> '+00.00002E+0'
DEBUG:instruments.abstract_instruments.comm.gi_gpib: <- 'R5W'
DEBUG:instruments.abstract_instruments.comm.gi_gpib: <- 'S0F1W1STNT3'
DEBUG:instruments.abstract_instruments.comm.gi_gpib: <- ''
DEBUG:instruments.abstract_instruments.comm.gi_gpib: <- ''
DEBUG:instruments.abstract_instruments.comm.gi_gpib: -> '+000.0003E+0'
DEBUG:instruments.abstract_instruments.comm.gi_gpib: <- 'R6W'
DEBUG:instruments.abstract_instruments.comm.gi_gpib: <- 'S0F1W1STNT3'
DEBUG:instruments.abstract_instruments.comm.gi_gpib: <- ''
DEBUG:instruments.abstract_instruments.comm.gi_gpib: <- ''
DEBUG:instruments.abstract_instruments.comm.gi_gpib: -> '+0000.002E+0'
DEBUG:instruments.abstract_instruments.comm.gi_gpib: <- 'M0'
DEBUG:instruments.abstract_instruments.comm.gi_gpib: <- 'S0F4W1STNT3'
DEBUG:instruments.abstract_instruments.comm.gi_gpib: <- ''
DEBUG:instruments.abstract_instruments.comm.gi_gpib: <- ''
DEBUG:instruments.abstract_instruments.comm.gi_gpib: -> '+0000.003E+3'
DEBUG:instruments.abstract_instruments.comm.gi_gpib: <- 'M3'
DEBUG:instruments.abstract_instruments.comm.gi_gpib: <- 'S0F4W1STNT3'
DEBUG:instruments.abstract_instruments.comm.gi_gpib: <- ''
DEBUG:instruments.abstract_instruments.comm.gi_gpib: <- ''
DEBUG:instruments.abstract_instruments.comm.gi_gpib: -> '+0000.000E+3'
DEBUG:instruments.abstract_instruments.comm.gi_gpib: <- 'M0'
DEBUG:instruments.abstract_instruments.comm.gi_gpib: <- 'S0F4W1STNT3'
DEBUG:instruments.abstract_instruments.comm.gi_gpib: <- ''
DEBUG:instruments.abstract_instruments.comm.gi_gpib: <- ''
DEBUG:instruments.abstract_instruments.comm.gi_gpib: -> '-0000.002E+3'
DEBUG:instruments.abstract_instruments.comm.gi_gpib: <- 'Z0'
DEBUG:instruments.abstract_instruments.comm.gi_gpib: <- 'FL0'
DEBUG:instruments.abstract_instruments.comm.gi_gpib: <- 'R1W'
DEBUG:instruments.abstract_instruments.comm.gi_gpib: <- 'S0F1W1STNT3'
DEBUG:instruments.abstract_instruments.comm.gi_gpib: <- ''
DEBUG:instruments.abstract_instruments.comm.gi_gpib: <- ''
DEBUG:instruments.abstract_instruments.comm.gi_gpib: -> '-000.0017E-3'
DEBUG:instruments.abstract_instruments.comm.gi_gpib: <- 'Z1'
DEBUG:instruments.abstract_instruments.comm.gi_gpib: <- 'S0F1W1STNT3'
DEBUG:instruments.abstract_instruments.comm.gi_gpib: <- ''
DEBUG:instruments.abstract_instruments.comm.gi_gpib: <- ''
DEBUG:instruments.abstract_instruments.comm.gi_gpib: -> '+000.0014E-3'
DEBUG:instruments.abstract_instruments.comm.gi_gpib: <- 'FL1'
DEBUG:instruments.abstract_instruments.comm.gi_gpib: <- 'S0F1W1STNT3'
DEBUG:instruments.abstract_instruments.comm.gi_gpib: <- ''
DEBUG:instruments.abstract_instruments.comm.gi_gpib: <- ''
DEBUG:instruments.abstract_instruments.comm.gi_gpib: -> '+000.0007E-3'
DEBUG:instruments.abstract_instruments.comm.gi_gpib: <- 'Z0'
DEBUG:instruments.abstract_instruments.comm.gi_gpib: <- 'S0F1W1STNT3'
DEBUG:instruments.abstract_instruments.comm.gi_gpib: <- ''
DEBUG:instruments.abstract_instruments.comm.gi_gpib: <- ''
DEBUG:instruments.abstract_instruments.comm.gi_gpib: -> '+000.0002E-3'
10
4.93111e-06
10
0.1021
n = 10.0
g = 6.0
p = 10.0
d = -0.0 s
0.1021
4.93111e-06
10
0.0993
0.1055
600.0
1.0
0.1055
10
0.0
0.101 ohm
3.1e-06 V
3e-06 V
2e-05 V
0.0003 V
0.002 V
3.0 ohm
0.0 ohm
-2.0 ohm
-1.7e-06 V
1.4e-06 V
7e-07 V
2e-07 V


================================================
FILE: doc/examples/ex_hp3456.py
================================================
#!/usr/bin/python

import logging
import time
import instruments as ik
import instruments.units as u

dmm = ik.hp.HP3456a.open_gpibusb("/dev/ttyUSB0", 22)
logging.basicConfig(level=logging.DEBUG)
dmm._file.debug = True
dmm.trigger_mode = dmm.TriggerMode.hold
dmm.number_of_digits = 6
dmm.auto_range()

n = 10
dmm.number_of_readings = n
dmm.nplc = 1
dmm.mode = dmm.Mode.resistance_2wire
dmm.math_mode = dmm.MathMode.statistic
dmm.trigger()
time.sleep(n * 0.04)
v = dmm.fetch(dmm.Mode.resistance_2wire)
print(len(v))
print(dmm.variance)
print(dmm.count)
print(dmm.mean)

# Read registers
dmm.nplc = 10
print(f"n = {dmm.number_of_readings}")
print(f"g = {dmm.number_of_digits}")
print(f"p = {dmm.nplc}")
print(f"d = {dmm.delay}")
print(dmm.mean)
print(dmm.variance)
print(dmm.count)
print(dmm.lower)
print(dmm.upper)
print(dmm.r)
print(dmm.y)
print(dmm.z)

# Walk through input range
dmm.nplc = 100
print(dmm.count)
print(dmm.measure(dmm.Mode.ratio_dcv_dcv))
print(dmm.measure(dmm.Mode.resistance_2wire))
dmm.nplc = 1
for i in range(-1, 4):
    value = (10**i) * u.volt
    dmm.input_range = value
    print(dmm.measure(dmm.Mode.dcv))

# Walk through relative / null mode
dmm.relative = False
print(dmm.measure(dmm.Mode.resistance_2wire))
dmm.relative = True
print(dmm.measure(dmm.Mode.resistance_2wire))
dmm.relative = False
print(dmm.measure(dmm.Mode.resistance_2wire))

# Measure with autozero off
dmm.autozero = 0
dmm.filter = 0
dmm.auto_range()

print(dmm.measure(dmm.Mode.dcv))
dmm.autozero = 1
print(dmm.measure(dmm.Mode.dcv))
dmm.filter = 1
print(dmm.measure(dmm.Mode.dcv))
dmm.autozero = 0
print(dmm.measure(dmm.Mode.dcv))


================================================
FILE: doc/examples/ex_keithley195.ipynb
================================================
{
 "metadata": {
  "name": "ex_keithley195"
 },
 "nbformat": 3,
 "nbformat_minor": 0,
 "worksheets": [
  {
   "cells": [
    {
     "cell_type": "heading",
     "level": 1,
     "metadata": {},
     "source": [
      "InstrumentKit Library Examples"
     ]
    },
    {
     "cell_type": "heading",
     "level": 2,
     "metadata": {},
     "source": [
      "Keithley 195 Multimeter"
     ]
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "In this example, we will demonstrate how to connect to a Keithley 195\n",
      "multimeter and transfer a single reading to the PC."
     ]
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "We start by importing the InstrumentKit package."
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "import instruments as ik"
     ],
     "language": "python",
     "metadata": {},
     "outputs": []
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "Next, we open our connection to the instrument. Here we use the \n",
      "Keithley195 class and open the connection using Galvant Industries'\n",
      "GPIBUSB adapter. Our connection is made to the virtual serial port located at\n",
      "/dev/ttyUSB0 and GPIB address 16."
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "dmm = ik.keithley.Keithley195.open_gpibusb('/dev/ttyUSB0', 1)"
     ],
     "language": "python",
     "metadata": {},
     "outputs": []
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "Now, we retreive the measurement currently displayed on the front panel."
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "print dmm.measure()"
     ],
     "language": "python",
     "metadata": {},
     "outputs": []
    }
   ],
   "metadata": {}
  }
 ]
}


================================================
FILE: doc/examples/ex_keithley195.py
================================================
# <nbformat>3.0</nbformat>

# <headingcell level=1>

# InstrumentKit Library Examples

# <headingcell level=2>

# Keithley 195 Multimeter

# <markdowncell>

# In this example, we will demonstrate how to connect to a Keithley 195
# multimeter and transfer a single reading to the PC.

# <markdowncell>

# We start by importing the InstrumentKit package.

# <codecell>

import instruments as ik

# <markdowncell>

# Next, we open our connection to the instrument. Here we use the
# Keithley195 class and open the connection using Galvant Industries'
# GPIBUSB adapter. Our connection is made to the virtual serial port located at
# /dev/ttyUSB0 and GPIB address 16.

# <codecell>

dmm = ik.keithley.Keithley195.open_gpibusb("/dev/ttyUSB0", 1)

# <markdowncell>

# Now, we retreive the measurement currently displayed on the front panel.

# <codecell>

print(dmm.measure())


================================================
FILE: doc/examples/ex_keithley6514.ipynb
================================================
{
 "metadata": {
  "name": ""
 },
 "nbformat": 3,
 "nbformat_minor": 0,
 "worksheets": [
  {
   "cells": [
    {
     "cell_type": "heading",
     "level": 1,
     "metadata": {},
     "source": [
      "InstrumentKit Example Library"
     ]
    },
    {
     "cell_type": "heading",
     "level": 2,
     "metadata": {},
     "source": [
      "Keithley 6514 Electrometer"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "%pylab inline\n",
      "import instruments as ik\n",
      "import time, datetime"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "Populating the interactive namespace from numpy and matplotlib\n"
       ]
      }
     ],
     "prompt_number": 1
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "Here, our device is connected via a gpibusb adaptor, on COM5, address 14."
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "elec=ik.keithley.Keithley6514.open_gpibusb('COM5', 14)"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [],
     "prompt_number": 2
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "Now we query a few standard bits of information:"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "print elec.query('*IDN?')\n",
      "print \"Mode: {}\".format(elec.mode.value)\n",
      "print \"Unit: {}\".format(elec.unit)\n",
      "print \"Upper Range Limit: {}\".format(elec.input_range)\n",
      "print \"Zero Check: {}\".format(elec.zero_check)\n",
      "print \"Zero Correct: {}\".format(elec.zero_correct)"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "KEITHLEY INSTRUMENTS INC.,MODEL 6514,1344784,A12   Aug 29 2008 15:40:25/A02  /D\n",
        "Mode: RES\n",
        "Unit: 1 ohm (ohm)"
       ]
      },
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "\n",
        "Upper Range Limit: 2100000.0 ohm"
       ]
      },
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "\n",
        "Zero Check: False\n",
        "Zero Correct: False"
       ]
      },
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "\n"
       ]
      }
     ],
     "prompt_number": 3
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "Use the auto config function to set up a resistance measurement."
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "elec.auto_config(elec.Mode.resistance)"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [],
     "prompt_number": 4
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "Check the status of things again:"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "print elec.query('*IDN?')\n",
      "print \"Mode: {}\".format(elec.mode.value)\n",
      "print \"Unit: {}\".format(elec.unit)\n",
      "print \"Upper Range Limit: {}\".format(elec.input_range)\n",
      "print \"Zero Check: {}\".format(elec.zero_check)\n",
      "print \"Zero Correct: {}\".format(elec.zero_correct)"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "KEITHLEY INSTRUMENTS INC.,MODEL 6514,1344784,A12   Aug 29 2008 15:40:25/A02  /D\n",
        "Mode: RES\n",
        "Unit: 1 ohm (ohm)"
       ]
      },
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "\n",
        "Upper Range Limit: 2100000.0 ohm"
       ]
      },
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "\n",
        "Zero Check: False\n",
        "Zero Correct: False"
       ]
      },
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "\n"
       ]
      }
     ],
     "prompt_number": 5
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "Take a single reading:"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "reading, timestamp = elec.read()\n",
      "print \"Current Reading: {}\".format(reading)"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "Current Reading: 675582.8 ohm\n"
       ]
      }
     ],
     "prompt_number": 6
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "Take 100 readings and plot them:"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "timestamps = np.empty(100)\n",
      "readings = np.empty(100)\n",
      "for idx in xrange(100):\n",
      "    readings[idx], timestamps[idx] = elec.read()"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [],
     "prompt_number": 7
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "plot(timestamps, readings)\n",
      "xlabel('time (s)')\n",
      "ylabel('({})'.format(elec.unit.name))"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "metadata": {},
       "output_type": "pyout",
       "prompt_number": 8,
       "text": [
        "<matplotlib.text.Text at 0x8425f98>"
       ]
      },
      {
       "metadata": {},
       "output_type": "display_data",
       "png": "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\nYII=\n",
       "text": [
        "<matplotlib.figure.Figure at 0x84186a0>"
       ]
      }
     ],
     "prompt_number": 8
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "with open(r'C:\\Users\\fpga\\Documents\\log.txt','w') as f:\n",
      "    f.write('Time,Resistance (Ohms)\\n')\n",
      "    \n",
      "elec.sendcmd('SYST:TIME:RESET')\n",
      "\n",
      "while True:\n",
      "    with open(r'C:\\Users\\fpga\\Documents\\log.txt','a') as f:\n",
      "        reading, timestamp = elec.read()\n",
      "        \n",
      "        f.write('{},{:e}\\n'.format(timestamp,reading.item()))\n",
      "        f.flush()"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "ename": "KeyboardInterrupt",
       "evalue": "",
       "output_type": "pyerr",
       "traceback": [
        "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[1;31mKeyboardInterrupt\u001b[0m                         Traceback (most recent call last)",
        "\u001b[1;32m<ipython-input-5-1fa8f93169f3>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m()\u001b[0m\n\u001b[0;32m      6\u001b[0m \u001b[1;32mwhile\u001b[0m \u001b[0mTrue\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m      7\u001b[0m     \u001b[1;32mwith\u001b[0m \u001b[0mopen\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34mr'C:\\Users\\fpga\\Documents\\log.txt'\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;34m'a'\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;32mas\u001b[0m \u001b[0mf\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 8\u001b[1;33m         \u001b[0mreading\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mtimestamp\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0melec\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mread\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m      9\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m     10\u001b[0m         \u001b[0mf\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mwrite\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'{},{:e}\\n'\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mformat\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mtimestamp\u001b[0m\u001b[1;33m,\u001b[0m\u001b[0mreading\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mitem\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
        "\u001b[1;32mC:\\Users\\fpga\\AppData\\Local\\Enthought\\Canopy\\User\\lib\\site-packages\\instruments\\keithley\\keithley6514.pyc\u001b[0m in \u001b[0;36mread\u001b[1;34m(self)\u001b[0m\n\u001b[0;32m    224\u001b[0m         '''\n\u001b[0;32m    225\u001b[0m         \u001b[1;31m# TODO: figure out what to do with the status info\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 226\u001b[1;33m         \u001b[0mraw\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mquery\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'READ?'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m    227\u001b[0m         \u001b[0mreading\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mtimestamp\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mstatus\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_parse_measurement\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mraw\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    228\u001b[0m         \u001b[1;32mreturn\u001b[0m \u001b[0mreading\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mtimestamp\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
        "\u001b[1;32mC:\\Users\\fpga\\AppData\\Local\\Enthought\\Canopy\\User\\lib\\site-packages\\instruments\\abstract_instruments\\instrument.pyc\u001b[0m in \u001b[0;36mquery\u001b[1;34m(self, cmd, size)\u001b[0m\n\u001b[0;32m    111\u001b[0m         \u001b[1;33m:\u001b[0m\u001b[0mrtype\u001b[0m\u001b[1;33m:\u001b[0m \u001b[1;33m`\u001b[0m\u001b[0mstr\u001b[0m\u001b[1;33m`\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    112\u001b[0m         \"\"\"\n\u001b[1;32m--> 113\u001b[1;33m         \u001b[1;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_file\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mquery\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mcmd\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0msize\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m    114\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    115\u001b[0m     \u001b[1;31m## PROPERTIES ##\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
        "\u001b[1;32mC:\\Users\\fpga\\AppData\\Local\\Enthought\\Canopy\\User\\lib\\site-packages\\instruments\\abstract_instruments\\gi_gpib.pyc\u001b[0m in \u001b[0;36mquery\u001b[1;34m(self, msg, size)\u001b[0m\n\u001b[0;32m    200\u001b[0m         '''\n\u001b[0;32m    201\u001b[0m         '''\n\u001b[1;32m--> 202\u001b[1;33m         \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0msendcmd\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mmsg\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m    203\u001b[0m         \u001b[1;32mif\u001b[0m \u001b[1;34m'?'\u001b[0m \u001b[1;32mnot\u001b[0m \u001b[1;32min\u001b[0m \u001b[0mmsg\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    204\u001b[0m             \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_file\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0msendcmd\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'+read'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
        "\u001b[1;32mC:\\Users\\fpga\\AppData\\Local\\Enthought\\Canopy\\User\\lib\\site-packages\\instruments\\abstract_instruments\\gi_gpib.pyc\u001b[0m in \u001b[0;36msendcmd\u001b[1;34m(self, msg)\u001b[0m\n\u001b[0;32m    186\u001b[0m             \u001b[1;32mreturn\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    187\u001b[0m         \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_file\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0msendcmd\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'+a:'\u001b[0m \u001b[1;33m+\u001b[0m \u001b[0mstr\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_gpib_address\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 188\u001b[1;33m         \u001b[0mtime\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0msleep\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;36m0.01\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m    189\u001b[0m         \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_file\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0msendcmd\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'+eoi:{}'\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mformat\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_eoi\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    190\u001b[0m         \u001b[0mtime\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0msleep\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;36m0.01\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
        "\u001b[1;31mKeyboardInterrupt\u001b[0m: "
       ]
      }
     ],
     "prompt_number": 5
    }
   ],
   "metadata": {}
  }
 ]
}


================================================
FILE: doc/examples/ex_maui.ipynb
================================================
{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# MAUI Oscilloscope controller\n",
    "\n",
    "The middle to high-end Teledyne-LeCroy oscilloscope come with the MAUI (Most Advanced User Interface) control interface. Each of these MAUI-enabled scopes can be controlled in the same way, assuming they have the same functionality, etc. The `MAUI` class presents a control interface to remotely access and setup an oscilloscope. Not every functionality is incorporated at this point, but the most imporant and basic ones are, i.e.:\n",
    " * General Oscilloscope controls, i.e., triggering\n",
    " * Channels\n",
    " * Math functions\n",
    " * Measurement setup and data retrieval\n",
    " * Waveform retrieval\n",
    "Here, some detailed examples for various applications are shown. \n",
    "\n",
    "## Communications\n",
    "These Oscilloscopes have many different ways of communicating with the host computer. This class only supports the `LXI (VXI11)` protocol, which should come by default on theses oscilloscopes. The reason for this is that this protocoll supports the NI-VISA protocol, which can be completely replaced with the open PyVISA. Thus the oscilloscope can be controlled from any OS, in fact, most of the development have taken place on Linux. *Note*: The scope that the software was developed with is an older wavesurfer 3054, which was at least supposed to support the `LXI (VXI11)` protocol. However, it could not be activated. After contacting Teledyne-LeCroy, they responded fairly quickly and sent an activation code to enable the protocol, free of charge.\n",
    "\n",
    "In order to successfully communicate with the oscilloscope, PyVISA requires the [pyvisa-py](https://pyvisa-py.readthedocs.io/en/latest/) backend. This should be the requirements for the package now. If not or not yet installed on your setup, you can install it by typing:\n",
    "\n",
    "    pip install pyvisa-py\n",
    "\n",
    "## Importing the pre-requisites\n",
    "First let's import some packages that we'll need, mostly instrumentkit of course :)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import sys, os\n",
    "\n",
    "# if you run this script from a cloned InstrumentKit path without a full installation, leave the following line in\n",
    "sys.path.insert(0, os.path.abspath('../../'))\n",
    "\n",
    "# import the instrument kit\n",
    "import instruments as ik\n",
    "import instruments.units as u\n",
    "\n",
    "# imports for specific functions in this script\n",
    "import matplotlib.pyplot as plt\n",
    "from time import sleep"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Enabling the oscilloscope\n",
    "\n",
    "First let us look at how to establish communications with the oscilloscope. ON the oscilloscope itself, go to `Utilities` -> `Utilities Setup` -> `Remote` and select on the left side the `LXI (VXI11)` communications protocol. Connect the oscilloscope to your local area network and check it's IP address. The example IP address that will be used here is `192.168.8.154`.\n",
    "\n",
    "Then you can load the oscilloscope and enable communications in the following way:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "inst = ik.teledyne.MAUI.open_visa(\"TCPIP0::192.168.0.10::INSTR\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Specifying your oscilloscope setup\n",
    "\n",
    "The MAUI interface works for mulitple different Teledyne-LeCroy oscilloscopes. Not all of these oscilloscopes will have the same options, so some commands might not be available on your scope. To make the oscilloscope controller versatile, the number of available channels (default 4), available functions (default 2), and available measurements (default 6) can be adjusted. The number of channels is simply how many inputs are available on the front. The number of functions is how many functions can be set up in the scopes math menu, usually labeled as `F1`, ... `Fn` in th oscilloscope software. The number of available measurements is the number of measurements that can be configured on the scope, usually labeled as `P1`, ... `Pn`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "4"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# setting and getting the number of channels\n",
    "inst.number_channels = 4\n",
    "inst.number_channels"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# setting and getting the number of functions\n",
    "inst.number_functions = 2\n",
    "inst.number_functions"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "6"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# setting and getting the number of measurements\n",
    "inst.number_measurements = 6\n",
    "inst.number_measurements"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Triggering the scope\n",
    "\n",
    "The simplest possible way to stop and start the oscilloscope from triggering is as following:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "# stop the oscilloscope from triggering\n",
    "inst.stop()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "# start the oscilloscope in automatic triggering mode\n",
    "inst.run()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "However, the four triggering states can also be controlled manually. These states are: automatic triggering `auto`, normal triggering `normal`, a single trigger `single` and no triggering `stop`. These trigger states are implemented as a `inst.TriggerState` subclass under the instrument class. Reading the trigger state (should be `auto` from just before) and then setting it to `normal` can be done in the following way:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<TriggerState.auto: 'AUTO'>"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# get the current trigger state\n",
    "inst.trigger_state"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "# restart the trigger with a single trigger\n",
    "inst.trigger_state = inst.TriggerState.normal"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "In addition, e.g., for a measurement, a trigger can also be forced upon request. For this to work, set the oscilloscope into stop mode, then force a trigger."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Stop the triggering\n",
    "inst.stop()\n",
    "\n",
    "# A trigger can also be forced by calling:\n",
    "inst.force_trigger()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The oscilloscope will be put back into stopped mode. To continue triggering in normal mode, run:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "inst.trigger_state = inst.TriggerState.normal"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "In addition to selecting the triggering state, the triggering source, type, and level can also be chosen. For most oscilloscopes, all channels and an external triggering source can be chosen from, optional settings are possible. Possible triggering sources are stored in the `enum` class `TriggerSource`, while triggering types are stored in the `TriggerType` `enum` class.\n",
    "\n",
    "Let's set the triggering source to the external trigger and trigger on the edge. This can be accomplished with the following commands:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "inst.trigger_source = inst.TriggerSource.ext\n",
    "inst.trigger_type = inst.TriggerType.edge"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Time base\n",
    "\n",
    "The timebase is the same for all channels and therefore implemented on the instrument level. Setting the timebase of the scope expects a unitful value. If no units are given, seconds are assumed. To set the time per division to 20 ns and read it back out, run the following commands."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array(2.e-08) * s"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "inst.time_div = u.Quantity(20, u.ns)\n",
    "inst.time_div"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "To shift the timebase with respect to the trigger, a trigger delay can be called. This call is unitful as well. To set a trigger delay of 60 ns and read it back, run the following command."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array(6.e-08) * s"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "inst.trigger_delay = u.Quantity(60, u.ns)\n",
    "inst.trigger_delay"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Controlling a channel\n",
    "\n",
    "To control a channel, several functions are implemented. The first channel is referred to as `0`, as is common in python. To create an instance of the first channel you can run:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [],
   "source": [
    "channel = inst.channel[0]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Turning a trace on and off can be done by setting the `channel.trace` with a bool. For example, to turn the trace on (no matter what state it is in) and then read its state back, run"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "True"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "channel.trace = True\n",
    "channel.trace"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Control over the coupling of the specific channel is supplied via the `channel.Coupling` class. To set the coupling to $50\\,\\Omega$ and then read it back, run the following commands:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<Coupling.dc50: 'D50'>"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "channel.coupling = channel.Coupling.dc50\n",
    "channel.coupling"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The scale (i.e., the volts per division) of a channel can be set unitful as well. If no units are given it is assumed that the user means Volts per division. To set the scale to 1 V per division and read its state back, run"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array(1.) * V"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "channel.scale = u.Quantity(1, u.V)\n",
    "channel.scale"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "In the same manner, the trace can also be shifted to, let's say -2950 mV in vertical position. This offset can be set / read as following:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array(-2.95) * V"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "channel.offset = u.Quantity(-2950, u.mV)\n",
    "channel.offset"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Finally, after having gone through all configurations, the waveform can be read back to the computer. The waveform is reutrned as a two dimensional numpy array representing the timebase and the signal. We can directly unpack the waveform via:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [],
   "source": [
    "timebase, signal = channel.read_waveform()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Furthermore we know that the signal has been shifted by -2.95 V in the negative direction and by 60 ns in the positive time base direction. Let's see how the signal looks."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0, 0.5, 'Signal (V)')"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(timebase, signal)\n",
    "plt.xlabel(\"Time since trigger (s)\")\n",
    "plt.ylabel(\"Signal (V)\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The offset in horizontal and vertical access are automatically taken into account such that the signal that is returned can directly be interpreted in time relative to the trigger and in the signal in absolute voltage. Clearly, this peak is almost 4 V heigh and very short. Let us move the peak in horizontal and vertical direction to the center of the oscilloscope display and read back one waveform with 1 V per division on the vertical axis and one waveform with 250 mV per division. The latter will surely clip the peak at the top."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0.5, 1.0, '1 V / division: Signal visible')"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 864x288 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# set offsets to zero\n",
    "inst.trigger_delay = 0\n",
    "channel.offset = 0\n",
    "\n",
    "# set horizontal axis to 5 ns per division\n",
    "inst.time_div = u.Quantity(5, u.ns)\n",
    "\n",
    "# set to 250 mV per division and read waveform back\n",
    "channel.scale = u.Quantity(250, u.mV)\n",
    "x1, y1 = channel.read_waveform()\n",
    "\n",
    "# allow for 250 ms to not have it read to fast\n",
    "sleep(0.25)\n",
    "\n",
    "# set to 1 V per division and read the waveform back\n",
    "channel.scale = u.Quantity(1, u.V)\n",
    "x2, y2 = channel.read_waveform()\n",
    "\n",
    "# plot the results\n",
    "fig, ax = plt.subplots(1, 2, sharey=True, figsize=(12,4))\n",
    "\n",
    "ax[0].plot(x1, y1)\n",
    "ax[0].set_xlabel(\"Time (s)\")\n",
    "ax[0].set_ylabel(\"Signal (V)\")\n",
    "ax[0].set_title(\"250 mV / division: Signal clipped\")\n",
    "ax[1].plot(x2, y2)\n",
    "ax[1].set_xlabel(\"Time (s)\")\n",
    "ax[1].set_title(\"1 V / division: Signal visible\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Clearly, the left signal is clipped on top. This results from the fact that the signal did not fit on the oscilloscope screen. If the signal is off scale, the data returned is simple the largest possible one, in this case, full signal. Since we artificially scale the two figures to the same y scale, this of course does not show up on top but at 1 V, which is equivalent to 4 divisions up.\n",
    "\n",
    "**Remember**: Reading a wave form only returns the data that is displayed on the oscilloscope screen."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Math functions\n",
    "\n",
    "Many math functions are available on these oscilloscopes, depending on the options that the oscilloscope is shipped with, more or less functions are available. For an overview of the implemented functions and how they work, have a look at the InstrumentKit documentation. You will find all functions in the `Math.Operators` subclass.\n",
    "\n",
    "For now, let's set up averaging of the first channel."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Access the first math function `F1`\n",
    "function = inst.math[0]\n",
    "\n",
    "# turn on the trace of this math function\n",
    "function.trace = True\n",
    "\n",
    "# set it to averaging of channel 1 (0 in python)\n",
    "function.operator.average(('C', 0))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "This will have set up the first function to average the first channel. The parameter that is passed on to to average, the required parameter, is the source it should average. Different operators have of course different parameters that are required / optional. \n",
    "\n",
    "**Note**: There are two ways that sources can be specified. If an integer is given, it is assumed that the source is a channel. Alternatively another source, e.g., a math function could also be defined. This would be done by submitting a tuple, i.e., `('F', 0)` to select the first math function (called `F1` in the oscilloscope).\n",
    "\n",
    "To check if this all worked we can read back the channel itself and the average math function and plot the results."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0.5, 1.0, 'Average of the channel (math)')"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 864x288 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# read channel\n",
    "x_ch, y_ch = channel.read_waveform()\n",
    "\n",
    "# allow for 250 ms to not have it read to fast\n",
    "sleep(0.25)\n",
    "\n",
    "# read math\n",
    "x_math, y_math = function.read_waveform()\n",
    "\n",
    "# plot\n",
    "fig, ax = plt.subplots(1, 2, sharey=True, figsize=(12, 4))\n",
    "\n",
    "ax[0].plot(x_ch, y_ch)\n",
    "ax[0].set_xlabel(\"Time (s)\")\n",
    "ax[0].set_ylabel(\"Signal (V)\")\n",
    "ax[0].set_title(\"Channel readout\")\n",
    "ax[1].plot(x_math, y_math)\n",
    "ax[1].set_xlabel(\"Time (s)\")\n",
    "ax[1].set_title(\"Average of the channel (math)\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "With a poorer signal generator, the average should look a lot smoother than the channel. To finish up the math section, let's turn off the math trace."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [],
   "source": [
    "function.trace = False"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Measurements and statistics\n",
    "\n",
    "In addition to mathematical operations on channels, oscilloscopes can take measurements and display the statistics. Many measurement parameters are already implemented, check out the documentation and look for the `inst.MeasurementParameters` class. Currently, only measurement parameters that act on a single source are available.\n",
    "\n",
    "As an example, let us set up 2 measurements. Measurement 1 determines the rise time (10% to 90%), measurement 2 the fall time (80% to 20%) of the first channel readout. Setting up the measurement can be done as following:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [],
   "source": [
    "# assign the two measurements\n",
    "msr1 = inst.measurement[0]\n",
    "msr2 = inst.measurement[1]\n",
    "\n",
    "# turn on the measurements (only one is really necessary, the other one is turned on automatically!)\n",
    "msr1.measurement_state = msr1.State.both\n",
    "\n",
    "# assign the measurement types and which source the measurement should be on\n",
    "msr1.set_parameter(inst.MeasurementParameters.rise_time_10_90, 0)\n",
    "msr2.set_parameter(inst.MeasurementParameters.fall_time_80_20, 0)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The oscilloscope will now automatically set up these measurements and will start accumulating statistics. The statistics can be returned at any point, which will return a tuple containing 5 floats. These floats are:\n",
    "\n",
    " 1. Average\n",
    " 2. Lowest value measured\n",
    " 3. Highest value measured\n",
    " 4. Standard deviation\n",
    " 5. Number of sweeps\n",
    " \n",
    "These returns are not unitful, so you will need to know what was set up. For the rise and fall times, the returns will of course be in the form of time. SI units are always returned, in this case, seconds."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(1.52152e-09, 1.49e-09, 1.56e-09, 2.553e-11, 4.0)"
      ]
     },
     "execution_count": 27,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "msr1.statistics"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(9.6247e-10, 9.02e-10, 1.01e-09, 2.415e-11, 24.0)"
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "msr2.statistics"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "To start a new series of measurements, i.e., reset the number of sweeps, the following command can be executed:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(1.56e-09, 1.56e-09, 1.56e-09, 0.0, 1.0)"
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "inst.clear_sweeps()\n",
    "\n",
    "# getting statistics for `msr1` again:\n",
    "msr1.statistics"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "To delete the measurement parameters again and turn off the table, the following commands are used:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [],
   "source": [
    "# delete parameters\n",
    "msr1.delete()\n",
    "msr2.delete()\n",
    "\n",
    "# turn off measurement\n",
    "msr1.measurement_state = msr1.State.off"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Further information\n",
    "\n",
    "Please check out the documention on [readthedocs.io](https://instrumentkit.readthedocs.io/en/latest/) and feel free to open an issue on the github repository if you have any problems / feature requests."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "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.8.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}


================================================
FILE: doc/examples/ex_oscilloscope_waveform.ipynb
================================================
{
 "metadata": {
  "name": "ex_oscilloscope_waveform"
 },
 "nbformat": 3,
 "nbformat_minor": 0,
 "worksheets": [
  {
   "cells": [
    {
     "cell_type": "heading",
     "level": 1,
     "metadata": {},
     "source": [
      "InstrumentKit Library Examples"
     ]
    },
    {
     "cell_type": "heading",
     "level": 2,
     "metadata": {},
     "source": [
      "Tektronix DPO 4104 Oscilloscope"
     ]
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "In this example, we will demonstrate how to connect to a Tektronix DPO 4104 \n",
      "oscilloscope and transfer the waveform from channel 1 into memory."
     ]
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "We start by importing the InstrumentKit and numpy packages. In this example \n",
      "we require numpy because the waveforms will be returned as numpy arrays."
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "import instruments as ik\n",
      "import numpy as np"
     ],
     "language": "python",
     "metadata": {},
     "outputs": []
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "Next, we open our connection to the oscilloscope. Here we use the associated\n",
      "TekDPO4104 class and open the connection via TCP/IP to address 192.168.0.2 on\n",
      "port 8080."
     ]
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "The connection method used will have to be changed to match your setup."
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "tek = ik.tektronix.TekTDS224.open_tcpip('192.168.0.2', 8080)"
     ],
     "language": "python",
     "metadata": {},
     "outputs": []
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "Now that we are connected to the instrument, we can transfer the waveform \n",
      "from the oscilloscope. Note that Python channel[0] specifies the physical\n",
      "channel 1. This is due to Python's zero-based numbering vs Tektronix's\n",
      "one-based numbering."
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "[x,y] = tek.channel[0].read_waveform()"
     ],
     "language": "python",
     "metadata": {},
     "outputs": []
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "With the waveform now in memory, any other data analysis can be performed.\n",
      "Here we simply compute the mean value from the y-data."
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "print np.mean(y)"
     ],
     "language": "python",
     "metadata": {},
     "outputs": []
    }
   ],
   "metadata": {}
  }
 ]
}


================================================
FILE: doc/examples/ex_oscilloscope_waveform.py
================================================
# <nbformat>3.0</nbformat>

# <headingcell level=1>

# InstrumentKit Library Examples

# <headingcell level=2>

# Tektronix DPO 4104 Oscilloscope

# <markdowncell>

# In this example, we will demonstrate how to connect to a Tektronix DPO 4104
# oscilloscope and transfer the waveform from channel 1 into memory.

# <markdowncell>

# We start by importing the InstrumentKit and numpy packages. In this example
# we require numpy because the waveforms will be returned as numpy arrays.

# <codecell>

import instruments as ik
import numpy as np

# <markdowncell>

# Next, we open our connection to the oscilloscope. Here we use the associated
# TekDPO4104 class and open the connection via TCP/IP to address 192.168.0.2 on
# port 8080.

# <markdowncell>

# The connection method used will have to be changed to match your setup.

# <codecell>

tek = ik.tektronix.TekTDS224.open_tcpip("192.168.0.2", 8080)

# <markdowncell>

# Now that we are connected to the instrument, we can transfer the waveform
# from the oscilloscope. Note that Python channel[0] specifies the physical
# channel 1. This is due to Python's zero-based numbering vs Tektronix's
# one-based numbering.

# <codecell>

[x, y] = tek.channel[0].read_waveform()

# <markdowncell>

# With the waveform now in memory, any other data analysis can be performed.
# Here we simply compute the mean value from the y-data.

# <codecell>

print(np.mean(y))


================================================
FILE: doc/examples/ex_qubitekk_gui.py
================================================
#!/usr/bin/python
# Qubitekk Coincidence Counter example
import matplotlib

matplotlib.use("TkAgg")

from matplotlib.figure import Figure

from numpy import arange, sin, pi
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2TkAgg

# implement the default mpl key bindings
from matplotlib.backend_bases import key_press_handler
from sys import platform as _platform

import instruments as ik
import tkinter as tk
import re


def clear_counts(*args):
    cc.clear_counts()


def getvalues(i):
    # set counts labels
    chan1counts.set(cc.channel[0].count)
    chan2counts.set(cc.channel[1].count)
    coinc_counts.set(cc.channel[2].count)
    # add count values to arrays for plotting
    chan1vals.append(chan1counts.get())
    chan2vals.append(chan1counts.get())
    coincvals.append(chan1counts.get())
    if cc.channel[0].count < 0:
        chan1counts.set("Overflow")
    if cc.channel[1].count < 0:
        chan2counts.set("Overflow")
    if cc.channel[2].count < 0:
        coinc_counts.set("Overflow")
    t.append(i * time_diff)
    i += 1
    # plot values
    (p1,) = a.plot(t, coincvals, color="r", linewidth=2.0)
    (p2,) = a.plot(t, chan1vals, color="b", linewidth=2.0)
    (p3,) = a.plot(t, chan2vals, color="g", linewidth=2.0)
    a.legend([p1, p2, p3], ["Coincidences", "Channel 1", "Channel 2"])
    a.set_xlabel("Time (s)")
    a.set_ylabel("Counts (Hz)")

    canvas.show()
    # get the values again in the specified amount of time
    root.after(int(time_diff * 1000), getvalues, i)


def gate_enable():
    if gate_enabled.get():
        cc.gate = True
    else:
        cc.gate = False


def subtract_enable():
    if subtract_enabled.get():
        cc.subtract = True
    else:
        cc.subtract = False


def trigger_enable():
    if trigger_enabled.get():
        cc.trigger = cc.TriggerMode.continuous
    else:
        cc.trigger = cc.TriggerMode.start_stop


def parse(*args):
    cc.dwell_time = float(re.sub("[A-z]", "", dwell_time.get()))
    cc.window = float(re.sub("[A-z]", "", window.get()))


def reset(*args):
    cc.reset()
    dwell_time.set(cc.dwell_time)
    window.set(cc.window)
    trigger_enabled.set(cc.count_enable)
    gate_enabled.set(cc.gate_enable)


if __name__ == "__main__":
    cc = ik.qubitekk.CC1.open_serial(vid=1027, pid=24577, baud=19200, timeout=10)
    print(cc.firmware)
    # i is used to keep track of time
    i = 0
    # read counts every 0.5 seconds
    time_diff = 0.5

    root = tk.Tk()
    root.title("Qubitekk Coincidence Counter Control Software")

    # set up the Tkinter grid layout
    mainframe = tk.Frame(root)
    mainframe.padding = "3 3 12 12"
    mainframe.grid(column=0, row=0, sticky=(tk.N, tk.W, tk.E, tk.S))
    mainframe.columnconfigure(0, weight=1)
    mainframe.rowconfigure(0, weight=1)

    # set up the label text
    dwell_time = tk.StringVar()
    dwell_time.set(cc.dwell_time)

    window = tk.StringVar()
    window.set(cc.window)

    chan1counts = tk.StringVar()
    chan1counts.set(cc.channel[0].count)
    chan2counts = tk.StringVar()
    chan2counts.set(cc.channel[1].count)
    coinc_counts = tk.StringVar()
    coinc_counts.set(cc.channel[2].count)

    gate_enabled = tk.IntVar()
    subtract_enabled = tk.IntVar()
    trigger_enabled = tk.IntVar()

    # set up the initial checkbox value for the gate enable
    if cc.gate:
        gate_enabled.set(1)
    else:
        gate_enabled.set(0)

    # set up the initial checkbox value for the trigger enable
    if cc.subtract:
        subtract_enabled.set(1)
    else:
        subtract_enabled.set(0)

    # set up the initial checkbox value for the trigger enable
    if cc.trigger:
        trigger_enabled.set(1)
    else:
        trigger_enabled.set(0)

    # set up the plotting area

    f = Figure(figsize=(10, 8), dpi=100)
    a = f.add_subplot(111, axisbg="black")

    t = []
    coincvals = []
    chan1vals = []
    chan2vals = []

    # a tk.DrawingArea
    canvas = FigureCanvasTkAgg(f, mainframe)
    canvas.get_tk_widget().grid(column=3, row=1, rowspan=11, sticky=tk.W)

    # label initialization
    dwell_time_entry = tk.Entry(
        mainframe, width=7, textvariable=dwell_time, font="Verdana 20"
    )
    dwell_time_entry.grid(column=2, row=2, sticky=(tk.W, tk.E))
    window_entry = tk.Entry(mainframe, width=7, textvariable=window, font="Verdana 20")
    window_entry.grid(column=2, row=3, sticky=(tk.W, tk.E))

    tk.Label(mainframe, text="Dwell Time:", font="Verdana 20").grid(
        column=1, row=2, sticky=tk.W
    )
    tk.Label(mainframe, text="Window size:", font="Verdana 20").grid(
        column=1, row=3, sticky=tk.W
    )

    tk.Checkbutton(
        mainframe, font="Verdana 20", variable=gate_enabled, command=gate_enable
    ).grid(column=2, row=4)
    tk.Label(mainframe, text="Gate Enable: ", font="Verdana 20").grid(
        column=1, row=4, sticky=tk.W
    )

    tk.Checkbutton(
        mainframe, font="Verdana 20", variable=subtract_enabled, command=subtract_enable
    ).grid(column=2, row=5)
    tk.Label(mainframe, text="Subtract Accidentals: ", font="Verdana 20").grid(
        column=1, row=5, sticky=tk.W
    )

    tk.Checkbutton(
        mainframe, font="Verdana 20", variable=trigger_enabled, command=trigger_enable
    ).grid(column=2, row=6)
    tk.Label(mainframe, text="Continuous Trigger: ", font="Verdana 20").grid(
        column=1, row=6, sticky=tk.W
    )

    tk.Label(mainframe, text="Channel 1: ", font="Verdana 20").grid(
        column=1, row=7, sticky=tk.W
    )
    tk.Label(mainframe, text="Channel 2: ", font="Verdana 20").grid(
        column=1, row=8, sticky=tk.W
    )
    tk.Label(mainframe, text="Coincidences: ", font="Verdana 20").grid(
        column=1, row=9, sticky=tk.W
    )

    tk.Label(
        mainframe, textvariable=chan1counts, font="Verdana 34", fg="white", bg="black"
    ).grid(column=2, row=7, sticky=tk.W)
    tk.Label(
        mainframe, textvariable=chan2counts, font="Verdana 34", fg="white", bg="black"
    ).grid(column=2, row=8, sticky=tk.W)
    tk.Label(
        mainframe, textvariable=coinc_counts, font="Verdana 34", fg="white", bg="black"
    ).grid(column=2, row=9, sticky=tk.W)

    tk.Button(mainframe, text="Reset", font="Verdana 24", command=reset).grid(
        column=1, row=10, sticky=tk.W
    )

    tk.Button(
        mainframe, text="Clear Counts", font="Verdana 24", command=clear_counts
    ).grid(column=2, row=10, sticky=tk.W)

    tk.Label(
        mainframe, text="Firmware Version: " + str(cc.firmware), font="Verdana 20"
    ).grid(column=1, row=11, columnspan=2, sticky=tk.W)

    for child in mainframe.winfo_children():
        child.grid_configure(padx=5, pady=5)
    # when the enter key is pressed, send the current values in the entries to the dwelltime and window to the
    # coincidence counter
    root.bind("<Return>", parse)
    # in 100 milliseconds, get the counts values off of the coincidence counter
    root.after(int(time_diff * 1000), getvalues, i)
    # start the GUI
    root.mainloop()


================================================
FILE: doc/examples/ex_qubitekkcc.py
================================================
#!/usr/bin/python
from sys import platform as _platform

import instruments as ik
import instruments.units as u


def main():
    cc1 = ik.qubitekk.CC1.open_serial(vid=1027, pid=24577, baud=19200, timeout=10)
    cc1.dwell_time = 1.0 * u.s
    print(cc1.dwell_time)
    cc1.delay = 0.0 * u.ns
    print(cc1.delay)
    cc1.window = 3.0 * u.ns
    print(cc1.window)
    cc1.trigger = ik.qubitekk.TriggerModeInt.start_stop
    print(cc1.trigger)
    print("Fetching Counts")
    print(cc1.channel[0].count)
    print(cc1.channel[1].count)
    print(cc1.channel[2].count)
    print("Fetched Counts")


if __name__ == "__main__":
    while True:
        main()


================================================
FILE: doc/examples/ex_qubitekkcc_simple.py
================================================
#!/usr/bin/python
# Qubitekk Coincidence Counter example

from sys import platform as _platform

import instruments as ik
import instruments.units as u

if __name__ == "__main__":
    # open connection to coincidence counter. If you are using Windows, this will be a com port. On linux, it will show
    # up in /dev/ttyusb
    if _platform == "linux" or _platform == "linux2":
        cc = ik.qubitekk.CC1.open_serial("/dev/ttyUSB0", 19200, timeout=1)
    else:
        cc = ik.qubitekk.CC1.open_serial("COM8", 19200, timeout=1)

    print("Initializing Coincidence Counter")
    cc.dwell_time = 1.0 * u.s
    cc.delay = 0.0 * u.ns
    cc.window = 3.0 * u.ns
    cc.trigger = cc.TriggerMode.start_stop
    print(f"ch1 counts: {str(cc.channel[0].count)}")
    print(f"ch2 counts: {str(cc.channel[1].count)}")
    print(f"counts counts: {str(cc.channel[2].count)}")

    print("Finished Initializing Coincidence Counter")


================================================
FILE: doc/examples/ex_tekdpo70000.ipynb
================================================
{
 "metadata": {
  "name": ""
 },
 "nbformat": 3,
 "nbformat_minor": 0,
 "worksheets": [
  {
   "cells": [
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "%pylab inline"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "Populating the interactive namespace from numpy and matplotlib\n"
       ]
      }
     ],
     "prompt_number": 16
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "from __future__ import division"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [],
     "prompt_number": 17
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "import instruments as ik"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [],
     "prompt_number": 1
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "scope=ik.tektronix.TekDPO70000Series.open_tcpip('192.168.0.4',4005)"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [],
     "prompt_number": 2
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "scope._file._debug = True"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [],
     "prompt_number": 3
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "scope._file.timeout = 2"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [],
     "prompt_number": 4
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "scope.query('*IDN?')"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        " <- '*IDN?\\n' \n",
        " -> 'TEKTRONIX,DPO71254C,B130126,CF:91.1CT FV:5.3.0 Build 83\\n'\n"
       ]
      },
      {
       "metadata": {},
       "output_type": "pyout",
       "prompt_number": 5,
       "text": [
        "'TEKTRONIX,DPO71254C,B130126,CF:91.1CT FV:5.3.0 Build 83\\n'"
       ]
      }
     ],
     "prompt_number": 5
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "ch0 = scope.channel[0]"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [],
     "prompt_number": 6
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "ch0.bandwidth"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        " <- 'CH1:BAN?\\n' \n",
        " -> '12.5000E+9\\n'\n"
       ]
      },
      {
       "metadata": {},
       "output_type": "pyout",
       "prompt_number": 7,
       "text": [
        "array(12500000000.0) * Hz"
       ]
      }
     ],
     "prompt_number": 7
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "_.to('GHz')"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "metadata": {},
       "output_type": "pyout",
       "prompt_number": 8,
       "text": [
        "array(12.5) * GHz"
       ]
      }
     ],
     "prompt_number": 8
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "scope.outgoing_waveform_encoding = scope.WaveformEncoding.binary"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        " <- 'WFMO:ENC BINARY\\n' \n"
       ]
      }
     ],
     "prompt_number": 9
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "scope.select_fastest_encoding()"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        " <- 'DAT:ENC FAS\\n' \n"
       ]
      }
     ],
     "prompt_number": 10
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "scope.acquire_mode_actual"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "ename": "timeout",
       "evalue": "timed out",
       "output_type": "pyerr",
       "traceback": [
        "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[1;31mtimeout\u001b[0m                                   Traceback (most recent call last)",
        "\u001b[1;32m<ipython-input-11-fc328e0e3863>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m()\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0mscope\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0macquire_mode_actual\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m",
        "\u001b[1;32mC:\\Users\\fpga\\AppData\\Local\\Enthought\\Canopy\\User\\lib\\site-packages\\instruments\\util_fns.pyc\u001b[0m in \u001b[0;36mgetter\u001b[1;34m(self)\u001b[0m\n\u001b[0;32m    109\u001b[0m         \u001b[1;32mreturn\u001b[0m \u001b[0mval\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0moutput_decoration\u001b[0m \u001b[1;32mis\u001b[0m \u001b[0mNone\u001b[0m \u001b[1;32melse\u001b[0m \u001b[0moutput_decoration\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mval\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    110\u001b[0m     \u001b[1;32mdef\u001b[0m \u001b[0mgetter\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 111\u001b[1;33m         \u001b[1;32mreturn\u001b[0m \u001b[0menum\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0min_decor_fcn\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mquery\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m\"{}?\"\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mformat\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mname\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mstrip\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m    112\u001b[0m     \u001b[1;32mdef\u001b[0m \u001b[0msetter\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mnewval\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    113\u001b[0m         \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0msendcmd\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m\"{} {}\"\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mformat\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mname\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mout_decor_fcn\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0menum\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0mnewval\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mvalue\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
        "\u001b[1;32mC:\\Users\\fpga\\AppData\\Local\\Enthought\\Canopy\\User\\lib\\site-packages\\instruments\\abstract_instruments\\instrument.pyc\u001b[0m in \u001b[0;36mquery\u001b[1;34m(self, cmd, size)\u001b[0m\n\u001b[0;32m    111\u001b[0m         \u001b[1;33m:\u001b[0m\u001b[0mrtype\u001b[0m\u001b[1;33m:\u001b[0m \u001b[1;33m`\u001b[0m\u001b[0mstr\u001b[0m\u001b[1;33m`\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    112\u001b[0m         \"\"\"\n\u001b[1;32m--> 113\u001b[1;33m         \u001b[1;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_file\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mquery\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mcmd\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0msize\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m    114\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    115\u001b[0m     \u001b[1;31m## PROPERTIES ##\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
        "\u001b[1;32mC:\\Users\\fpga\\AppData\\Local\\Enthought\\Canopy\\User\\lib\\site-packages\\instruments\\abstract_instruments\\socketwrapper.pyc\u001b[0m in \u001b[0;36mquery\u001b[1;34m(self, msg, size)\u001b[0m\n\u001b[0;32m    139\u001b[0m         '''\n\u001b[0;32m    140\u001b[0m         \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0msendcmd\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mmsg\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 141\u001b[1;33m         \u001b[0mresp\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mread\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0msize\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m    142\u001b[0m         \u001b[1;32mif\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_debug\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    143\u001b[0m             \u001b[1;32mprint\u001b[0m \u001b[1;34m\" -> {}\"\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mformat\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mrepr\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mresp\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
        "\u001b[1;32mC:\\Users\\fpga\\AppData\\Local\\Enthought\\Canopy\\User\\lib\\site-packages\\instruments\\abstract_instruments\\socketwrapper.pyc\u001b[0m in \u001b[0;36mread\u001b[1;34m(self, size)\u001b[0m\n\u001b[0;32m    103\u001b[0m             \u001b[0mc\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;36m0\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    104\u001b[0m             \u001b[1;32mwhile\u001b[0m \u001b[0mc\u001b[0m \u001b[1;33m!=\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_terminator\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 105\u001b[1;33m                 \u001b[0mc\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_conn\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mrecv\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;36m1\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m    106\u001b[0m                 \u001b[0mresult\u001b[0m \u001b[1;33m+=\u001b[0m \u001b[0mc\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    107\u001b[0m             \u001b[1;32mreturn\u001b[0m \u001b[0mbytes\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mresult\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
        "\u001b[1;31mtimeout\u001b[0m: timed out"
       ]
      },
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        " <- 'ACQ:MOD:ACT?\\n' \n"
       ]
      }
     ],
     "prompt_number": 11
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "wav0 = ch0.read_waveform()"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        " <- 'DAT:SOU?\\n' \n",
        " -> 'CH1\\n'\n",
        " <- 'DAT:SOU CH1\\n' \n",
        " <- 'DAT:ENC FAS\\n' \n",
        " <- 'WFMO:BYT_N?\\n' \n",
        " -> '2\\n'"
       ]
      },
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "\n",
        " <- 'WFMO:BN_F?\\n' \n",
        " -> 'RI\\n'\n",
        " <- 'WFMO:BYT_O?\\n' \n",
        " -> 'LSB\\n'\n",
        " <- 'CURV?\\n' \n",
        " <- 'CH1:SCALE?\\n' \n",
        " -> '100.0000E-3\\n'\n",
        " <- 'CH1:POS?\\n' \n",
        " -> '0.0000\\n'\n",
        " <- 'CH1:OFFS?\\n' \n",
        " -> '0.0000\\n'\n",
        " <- 'DAT:SOU CH1\\n' \n"
       ]
      }
     ],
     "prompt_number": 13
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "plot(wav0.magnitude)"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "metadata": {},
       "output_type": "pyout",
       "prompt_number": 15,
       "text": [
        "[<matplotlib.lines.Line2D at 0x866bd30>]"
       ]
      },
      {
       "metadata": {},
       "output_type": "display_data",
       "png": "iVBORw0KGgoAAAANSUhEUgAAAZAAAAEACAYAAACd2SCPAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJztnXt4VcW9978JdxW5yL0hUCDkApREgVAVCBQRylEQPVV6\n6mkLvo1QK1Wxam/S9xw9Xo49VFTM43uwHi+19VhKj1Z8QI3ghQQKag8GBSRivRLkEjRgSOb9Y5zs\n2ZOZWbPWXnvvtXd+n+fJs/dea9bMrJlZ85vv/GZWchhjDARBEAThk9x0Z4AgCILITMiAEARBEIEg\nA0IQBEEEggwIQRAEEQgyIARBEEQgyIAQBEEQgUjYgGzatAnFxcUoKCjAqlWrtGFuuukmjBgxAmed\ndRZ27drVdnzRokUYOHAgxo0bFxe+sbER8+bNQ35+PubPn49jx44lmk2CIAgiZBI2IMuWLUNVVRU2\nbtyIe++9Fw0NDXHna2trsXnzZmzbtg3Lly/H8uXL2859//vfx/r169vFuXr1auTn52P37t3Iy8vD\n/fffn2g2CYIgiJBJyIAcOXIEADB16lQMGzYMs2bNQk1NTVyYmpoaXHLJJejbty8WLlyIurq6tnNT\npkxBnz592sVbW1uLxYsXo1u3bli0aFG7OAmCIIj0k5AB2bp1K4qKitp+l5SUYMuWLXFhamtrUVJS\n0va7f//+
Download .txt
gitextract_gysdejrm/

├── .coveragerc
├── .github/
│   └── workflows/
│       ├── deploy.yml
│       └── test.yml
├── .gitignore
├── .pre-commit-config.yaml
├── .readthedocs.yml
├── README.rst
├── doc/
│   ├── Makefile
│   ├── examples/
│   │   ├── .ipynb_checkpoints/
│   │   │   └── ex_keithley6514-checkpoint.ipynb
│   │   ├── ex_generic_scpi.ipynb
│   │   ├── ex_generic_scpi.py
│   │   ├── ex_hp3325.py
│   │   ├── ex_hp3456.out
│   │   ├── ex_hp3456.py
│   │   ├── ex_keithley195.ipynb
│   │   ├── ex_keithley195.py
│   │   ├── ex_keithley6514.ipynb
│   │   ├── ex_maui.ipynb
│   │   ├── ex_oscilloscope_waveform.ipynb
│   │   ├── ex_oscilloscope_waveform.py
│   │   ├── ex_qubitekk_gui.py
│   │   ├── ex_qubitekkcc.py
│   │   ├── ex_qubitekkcc_simple.py
│   │   ├── ex_tekdpo70000.ipynb
│   │   ├── ex_thorlabslcc.py
│   │   ├── ex_thorlabssc10.py
│   │   ├── ex_thorlabstc200.py
│   │   ├── ex_topticatopmode.py
│   │   ├── example2.py
│   │   ├── minghe/
│   │   │   └── ex_minghe_mhs5200.py
│   │   ├── qubitekk/
│   │   │   └── ex_qubitekk_mc1.py
│   │   ├── srs_DG645.ipynb
│   │   └── srs_DG645.py
│   ├── make.bat
│   └── source/
│       ├── acknowledgements.rst
│       ├── apiref/
│       │   ├── agilent.rst
│       │   ├── aimtti.rst
│       │   ├── comet.rst
│       │   ├── config.rst
│       │   ├── delta_elektronika.rst
│       │   ├── dressler.rst
│       │   ├── fluke.rst
│       │   ├── generic_scpi.rst
│       │   ├── gentec-eo.rst
│       │   ├── glassman.rst
│       │   ├── hcp.rst
│       │   ├── holzworth.rst
│       │   ├── hp.rst
│       │   ├── index.rst
│       │   ├── instrument.rst
│       │   ├── keithley.rst
│       │   ├── lakeshore.rst
│       │   ├── mettler_toledo.rst
│       │   ├── minghe.rst
│       │   ├── newport.rst
│       │   ├── ondax.rst
│       │   ├── oxford.rst
│       │   ├── pfeiffer.rst
│       │   ├── phasematrix.rst
│       │   ├── picowatt.rst
│       │   ├── qubitekk.rst
│       │   ├── rigol.rst
│       │   ├── srs.rst
│       │   ├── sunpower.rst
│       │   ├── tektronix.rst
│       │   ├── teledyne.rst
│       │   ├── thorlabs.rst
│       │   ├── toptica.rst
│       │   └── yokogawa.rst
│       ├── conf.py
│       ├── devguide/
│       │   ├── code_style.rst
│       │   ├── design_philosophy.rst
│       │   ├── index.rst
│       │   ├── testing.rst
│       │   └── util_fns.rst
│       ├── index.rst
│       └── intro.rst
├── license/
│   ├── AUTHOR.TXT
│   └── LICENSE.TXT
├── matlab/
│   ├── matlab-example.ipynb
│   └── open_instrument.m
├── pyproject.toml
├── src/
│   └── instruments/
│       ├── __init__.py
│       ├── abstract_instruments/
│       │   ├── __init__.py
│       │   ├── comm/
│       │   │   ├── __init__.py
│       │   │   ├── abstract_comm.py
│       │   │   ├── file_communicator.py
│       │   │   ├── gpib_communicator.py
│       │   │   ├── loopback_communicator.py
│       │   │   ├── serial_communicator.py
│       │   │   ├── serial_manager.py
│       │   │   ├── socket_communicator.py
│       │   │   ├── usb_communicator.py
│       │   │   ├── usbtmc_communicator.py
│       │   │   ├── visa_communicator.py
│       │   │   └── vxi11_communicator.py
│       │   ├── electrometer.py
│       │   ├── function_generator.py
│       │   ├── instrument.py
│       │   ├── multimeter.py
│       │   ├── optical_spectrum_analyzer.py
│       │   ├── oscilloscope.py
│       │   ├── power_supply.py
│       │   └── signal_generator/
│       │       ├── __init__.py
│       │       ├── channel.py
│       │       ├── signal_generator.py
│       │       └── single_channel_sg.py
│       ├── agilent/
│       │   ├── __init__.py
│       │   ├── agilent33220a.py
│       │   └── agilent34410a.py
│       ├── aimtti/
│       │   ├── __init__.py
│       │   └── aimttiel302p.py
│       ├── comet/
│       │   ├── __init__.py
│       │   └── cito_plus_1310.py
│       ├── config.py
│       ├── delta_elektronika/
│       │   ├── __init__.py
│       │   └── psc_eth.py
│       ├── dressler/
│       │   ├── __init__.py
│       │   └── cesar_1312.py
│       ├── errors.py
│       ├── fluke/
│       │   ├── __init__.py
│       │   └── fluke3000.py
│       ├── generic_scpi/
│       │   ├── __init__.py
│       │   ├── scpi_function_generator.py
│       │   ├── scpi_instrument.py
│       │   └── scpi_multimeter.py
│       ├── gentec_eo/
│       │   ├── __init__.py
│       │   └── blu.py
│       ├── glassman/
│       │   ├── __init__.py
│       │   └── glassmanfr.py
│       ├── hcp/
│       │   ├── __init__.py
│       │   ├── tc038.py
│       │   └── tc038d.py
│       ├── holzworth/
│       │   ├── __init__.py
│       │   └── holzworth_hs9000.py
│       ├── hp/
│       │   ├── __init__.py
│       │   ├── hp3325a.py
│       │   ├── hp3456a.py
│       │   ├── hp6624a.py
│       │   ├── hp6632b.py
│       │   ├── hp6652a.py
│       │   └── hpe3631a.py
│       ├── keithley/
│       │   ├── __init__.py
│       │   ├── keithley195.py
│       │   ├── keithley2182.py
│       │   ├── keithley485.py
│       │   ├── keithley580.py
│       │   ├── keithley6220.py
│       │   └── keithley6514.py
│       ├── lakeshore/
│       │   ├── __init__.py
│       │   ├── lakeshore336.py
│       │   ├── lakeshore340.py
│       │   ├── lakeshore370.py
│       │   └── lakeshore475.py
│       ├── mettler_toledo/
│       │   ├── __init__.py
│       │   └── mt_sics.py
│       ├── minghe/
│       │   ├── __init__.py
│       │   └── mhs5200a.py
│       ├── named_struct.py
│       ├── newport/
│       │   ├── __init__.py
│       │   ├── agilis.py
│       │   ├── errors.py
│       │   ├── newport_pmc8742.py
│       │   └── newportesp301.py
│       ├── ondax/
│       │   ├── __init__.py
│       │   └── lm.py
│       ├── optional_dep_finder.py
│       ├── oxford/
│       │   ├── __init__.py
│       │   └── oxforditc503.py
│       ├── pfeiffer/
│       │   ├── __init__.py
│       │   └── tpg36x.py
│       ├── phasematrix/
│       │   ├── __init__.py
│       │   └── phasematrix_fsw0020.py
│       ├── picowatt/
│       │   ├── __init__.py
│       │   └── picowattavs47.py
│       ├── qubitekk/
│       │   ├── __init__.py
│       │   ├── cc1.py
│       │   └── mc1.py
│       ├── rigol/
│       │   ├── __init__.py
│       │   └── rigolds1000.py
│       ├── srs/
│       │   ├── __init__.py
│       │   ├── srs345.py
│       │   ├── srs830.py
│       │   ├── srsctc100.py
│       │   └── srsdg645.py
│       ├── sunpower/
│       │   ├── __init__.py
│       │   └── cryotel_gt.py
│       ├── tektronix/
│       │   ├── __init__.py
│       │   ├── tekawg2000.py
│       │   ├── tekdpo4104.py
│       │   ├── tekdpo70000.py
│       │   ├── tektds224.py
│       │   └── tektds5xx.py
│       ├── teledyne/
│       │   ├── __init__.py
│       │   └── maui.py
│       ├── thorlabs/
│       │   ├── __init__.py
│       │   ├── _abstract.py
│       │   ├── _cmds.py
│       │   ├── _packets.py
│       │   ├── lcc25.py
│       │   ├── pm100usb.py
│       │   ├── sc10.py
│       │   ├── tc200.py
│       │   ├── thorlabs_utils.py
│       │   └── thorlabsapt.py
│       ├── toptica/
│       │   ├── __init__.py
│       │   ├── topmode.py
│       │   └── toptica_utils.py
│       ├── units.py
│       ├── util_fns.py
│       └── yokogawa/
│           ├── __init__.py
│           ├── yokogawa6370.py
│           └── yokogawa7651.py
├── tests/
│   ├── __init__.py
│   ├── test_abstract_inst/
│   │   ├── __init__.py
│   │   ├── test_electrometer.py
│   │   ├── test_function_generator.py
│   │   ├── test_multimeter.py
│   │   ├── test_optical_spectrum_analyzer.py
│   │   ├── test_oscilloscope.py
│   │   ├── test_power_supply.py
│   │   └── test_signal_generator/
│   │       ├── test_channel.py
│   │       ├── test_signal_generator.py
│   │       └── test_single_channel_sg.py
│   ├── test_agilent/
│   │   ├── __init__.py
│   │   ├── test_agilent_33220a.py
│   │   └── test_agilent_34410a.py
│   ├── test_aimtti/
│   │   ├── __init__.py
│   │   └── test_aimttiel302p.py
│   ├── test_base_instrument.py
│   ├── test_comet/
│   │   ├── __init__.py
│   │   └── test_cito_plus_1310.py
│   ├── test_comm/
│   │   ├── __init__.py
│   │   ├── test_file.py
│   │   ├── test_gpibusb.py
│   │   ├── test_loopback.py
│   │   ├── test_serial.py
│   │   ├── test_socket.py
│   │   ├── test_usb_communicator.py
│   │   ├── test_usbtmc.py
│   │   ├── test_visa_communicator.py
│   │   └── test_vxi11.py
│   ├── test_config.py
│   ├── test_delta_elektronika/
│   │   ├── __init__.py
│   │   └── test_psc_eth.py
│   ├── test_dressler/
│   │   ├── __init__.py
│   │   └── test_cesar_1312.py
│   ├── test_fluke/
│   │   ├── __init__.py
│   │   └── test_fluke3000.py
│   ├── test_generic_scpi/
│   │   ├── __init__.py
│   │   ├── test_scpi_function_generator.py
│   │   ├── test_scpi_instrument.py
│   │   └── test_scpi_multimeter.py
│   ├── test_gentec_eo/
│   │   ├── __init__.py
│   │   └── test_blu.py
│   ├── test_glassman/
│   │   ├── __init__.py
│   │   └── test_glassmanfr.py
│   ├── test_hcp/
│   │   ├── __init__.py
│   │   ├── test_tc038.py
│   │   └── test_tc038d.py
│   ├── test_holzworth/
│   │   ├── __init__.py
│   │   └── test_holzworth_hs9000.py
│   ├── test_hp/
│   │   ├── __init__.py
│   │   ├── test_hp3325a.py
│   │   ├── test_hp3456a.py
│   │   ├── test_hp6624a.py
│   │   ├── test_hp6632b.py
│   │   ├── test_hp6652a.py
│   │   └── test_hpe3631a.py
│   ├── test_keithley/
│   │   ├── __init__.py
│   │   ├── test_keithley195.py
│   │   ├── test_keithley2182.py
│   │   ├── test_keithley485.py
│   │   ├── test_keithley580.py
│   │   ├── test_keithley6220.py
│   │   └── test_keithley6514.py
│   ├── test_lakeshore/
│   │   ├── __init__.py
│   │   ├── test_lakeshore336.py
│   │   ├── test_lakeshore340.py
│   │   ├── test_lakeshore370.py
│   │   └── test_lakeshore475.py
│   ├── test_mettler_toledo/
│   │   ├── __init__.py
│   │   └── test_mt_sics.py
│   ├── test_minghe/
│   │   └── test_minghe_mhs5200a.py
│   ├── test_named_struct.py
│   ├── test_newport/
│   │   ├── __init__.py
│   │   ├── test_agilis.py
│   │   ├── test_errors.py
│   │   ├── test_newport_pmc8742.py
│   │   └── test_newportesp301.py
│   ├── test_ondax/
│   │   └── test_lm.py
│   ├── test_oxford/
│   │   ├── __init__.py
│   │   └── test_oxforditc503.py
│   ├── test_package.py
│   ├── test_pfeiffer/
│   │   ├── __init__.py
│   │   └── test_tpg36x.py
│   ├── test_phasematrix/
│   │   ├── __init__.py
│   │   └── test_phasematrix_fsw0020.py
│   ├── test_picowatt/
│   │   ├── __init__.py
│   │   └── test_picowatt_avs47.py
│   ├── test_property_factories/
│   │   ├── __init__.py
│   │   ├── test_bool_property.py
│   │   ├── test_bounded_unitful_property.py
│   │   ├── test_enum_property.py
│   │   ├── test_int_property.py
│   │   ├── test_rproperty.py
│   │   ├── test_string_property.py
│   │   ├── test_unitful_property.py
│   │   └── test_unitless_property.py
│   ├── test_qubitekk/
│   │   ├── __init__.py
│   │   ├── test_qubitekk_cc1.py
│   │   └── test_qubitekk_mc1.py
│   ├── test_rigol/
│   │   └── test_rigolds1000.py
│   ├── test_split_str.py
│   ├── test_srs/
│   │   ├── __init__.py
│   │   ├── test_srs345.py
│   │   ├── test_srs830.py
│   │   ├── test_srsctc100.py
│   │   └── test_srsdg645.py
│   ├── test_sunpower/
│   │   ├── __init__.py
│   │   └── test_cryotel_gt.py
│   ├── test_tektronix/
│   │   ├── __init__.py
│   │   ├── test_tekawg2000.py
│   │   ├── test_tekdpo4104.py
│   │   ├── test_tekdpo70000.py
│   │   ├── test_tektronix_tds224.py
│   │   └── test_tktds5xx.py
│   ├── test_teledyne/
│   │   ├── __init__.py
│   │   └── test_maui.py
│   ├── test_test_utils.py
│   ├── test_thorlabs/
│   │   ├── __init__.py
│   │   ├── test_abstract.py
│   │   ├── test_packets.py
│   │   ├── test_thorlabs_apt.py
│   │   ├── test_thorlabs_lcc25.py
│   │   ├── test_thorlabs_pm100usb.py
│   │   ├── test_thorlabs_sc10.py
│   │   ├── test_thorlabs_tc200.py
│   │   └── test_utils.py
│   ├── test_toptica/
│   │   ├── __init__.py
│   │   ├── test_toptica_topmode.py
│   │   └── test_toptica_utils.py
│   ├── test_util_fns.py
│   └── test_yokogawa/
│       ├── __init__.py
│       ├── test_yokogawa7651.py
│       └── test_yokogawa_6370.py
└── tox.ini
Download .txt
Showing preview only (288K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (3771 symbols across 199 files)

FILE: doc/examples/ex_qubitekk_gui.py
  function clear_counts (line 21) | def clear_counts(*args):
  function getvalues (line 25) | def getvalues(i):
  function gate_enable (line 55) | def gate_enable():
  function subtract_enable (line 62) | def subtract_enable():
  function trigger_enable (line 69) | def trigger_enable():
  function parse (line 76) | def parse(*args):
  function reset (line 81) | def reset(*args):

FILE: doc/examples/ex_qubitekkcc.py
  function main (line 8) | def main():

FILE: src/instruments/abstract_instruments/comm/abstract_comm.py
  class AbstractCommunicator (line 16) | class AbstractCommunicator(metaclass=abc.ABCMeta):
    method __init__ (line 26) | def __init__(self, *args, **kwargs):  # pylint: disable=unused-argument
    method __repr__ (line 38) | def __repr__(self):
    method debug (line 48) | def debug(self):
    method debug (line 66) | def debug(self, newval):
    method address (line 73) | def address(self):
    method address (line 81) | def address(self, newval):
    method terminator (line 86) | def terminator(self):
    method terminator (line 94) | def terminator(self, newval):
    method timeout (line 99) | def timeout(self):
    method timeout (line 107) | def timeout(self, newval):
    method read_raw (line 113) | def read_raw(self, size=-1):
    method write_raw (line 125) | def write_raw(self, msg):
    method _sendcmd (line 134) | def _sendcmd(self, msg):
    method _query (line 144) | def _query(self, msg, size=-1):
    method flush_input (line 160) | def flush_input(self):
    method write (line 169) | def write(self, msg, encoding="utf-8"):
    method read (line 183) | def read(self, size=-1, encoding="utf-8"):
    method sendcmd (line 206) | def sendcmd(self, msg):
    method query (line 219) | def query(self, msg, size=-1):

FILE: src/instruments/abstract_instruments/comm/file_communicator.py
  class FileCommunicator (line 22) | class FileCommunicator(io.IOBase, AbstractCommunicator):
    method __init__ (line 35) | def __init__(self, filelike):
    method address (line 47) | def address(self):
    method address (line 60) | def address(self, newval):
    method terminator (line 66) | def terminator(self):
    method terminator (line 75) | def terminator(self, newval):
    method timeout (line 86) | def timeout(self):
    method timeout (line 94) | def timeout(self, newval):
    method close (line 99) | def close(self):
    method read_raw (line 108) | def read_raw(self, size=-1):
    method write_raw (line 130) | def write_raw(self, msg):
    method seek (line 138) | def seek(self, offset):
    method tell (line 148) | def tell(self):
    method flush_input (line 156) | def flush_input(self):
    method _sendcmd (line 166) | def _sendcmd(self, msg):
    method _query (line 182) | def _query(self, msg, size=-1):

FILE: src/instruments/abstract_instruments/comm/gpib_communicator.py
  class GPIBCommunicator (line 22) | class GPIBCommunicator(io.IOBase, AbstractCommunicator):
    method __init__ (line 32) | def __init__(self, filelike, gpib_address, model="gi"):
    class Model (line 53) | class Model(Enum):
    method address (line 66) | def address(self):
    method address (line 83) | def address(self, newval):
    method timeout (line 95) | def timeout(self):
    method timeout (line 106) | def timeout(self, newval):
    method terminator (line 118) | def terminator(self):
    method terminator (line 134) | def terminator(self, newval):
    method eoi (line 176) | def eoi(self):
    method eoi (line 195) | def eoi(self, newval):
    method eos (line 205) | def eos(self):
    method eos (line 219) | def eos(self, newval):
    method close (line 246) | def close(self):
    method read_raw (line 254) | def read_raw(self, size=-1):
    method read (line 266) | def read(self, size=-1, encoding="utf-8"):
    method write_raw (line 285) | def write_raw(self, msg):
    method write (line 294) | def write(self, msg, encoding="utf-8"):
    method flush_input (line 304) | def flush_input(self):
    method _sendcmd (line 313) | def _sendcmd(self, msg):
    method _query (line 340) | def _query(self, msg, size=-1):

FILE: src/instruments/abstract_instruments/comm/loopback_communicator.py
  class LoopbackCommunicator (line 18) | class LoopbackCommunicator(io.IOBase, AbstractCommunicator):
    method __init__ (line 26) | def __init__(self, stdin=None, stdout=None):
    method address (line 35) | def address(self):
    method address (line 44) | def address(self, newval):
    method terminator (line 48) | def terminator(self):
    method terminator (line 59) | def terminator(self, newval):
    method timeout (line 70) | def timeout(self):
    method timeout (line 80) | def timeout(self, newval):
    method close (line 85) | def close(self):
    method read_raw (line 95) | def read_raw(self, size=-1):
    method write_raw (line 127) | def write_raw(self, msg):
    method seek (line 140) | def seek(self, offset):  # pylint: disable=unused-argument,no-self-use
    method tell (line 148) | def tell(self):  # pylint: disable=no-self-use
    method flush_input (line 156) | def flush_input(self):
    method _sendcmd (line 165) | def _sendcmd(self, msg):
    method _query (line 178) | def _query(self, msg, size=-1):

FILE: src/instruments/abstract_instruments/comm/serial_communicator.py
  class SerialCommunicator (line 21) | class SerialCommunicator(io.IOBase, AbstractCommunicator):
    method __init__ (line 27) | def __init__(self, conn):
    method address (line 40) | def address(self):
    method address (line 49) | def address(self, newval):
    method terminator (line 56) | def terminator(self):
    method terminator (line 67) | def terminator(self, newval):
    method timeout (line 78) | def timeout(self):
    method timeout (line 88) | def timeout(self, newval):
    method parity (line 93) | def parity(self):
    method parity (line 102) | def parity(self, newval):
    method close (line 107) | def close(self):
    method read_raw (line 116) | def read_raw(self, size=-1):
    method write_raw (line 146) | def write_raw(self, msg):
    method seek (line 154) | def seek(self, offset):  # pylint: disable=unused-argument,no-self-use
    method tell (line 162) | def tell(self):  # pylint: disable=no-self-use
    method flush_input (line 170) | def flush_input(self):
    method _sendcmd (line 181) | def _sendcmd(self, msg):
    method _query (line 193) | def _query(self, msg, size=-1):

FILE: src/instruments/abstract_instruments/comm/serial_manager.py
  function new_serial_connection (line 33) | def new_serial_connection(port, baud=460800, timeout=3, write_timeout=3,...

FILE: src/instruments/abstract_instruments/comm/socket_communicator.py
  class SocketCommunicator (line 21) | class SocketCommunicator(io.IOBase, AbstractCommunicator):
    method __init__ (line 29) | def __init__(self, conn):
    method address (line 45) | def address(self):
    method address (line 52) | def address(self, newval):
    method terminator (line 56) | def terminator(self):
    method terminator (line 60) | def terminator(self, newval):
    method timeout (line 71) | def timeout(self):
    method timeout (line 81) | def timeout(self, newval):
    method close (line 87) | def close(self):
    method read_raw (line 96) | def read_raw(self, size=-1):
    method write_raw (line 121) | def write_raw(self, msg):
    method seek (line 130) | def seek(self, offset):  # pylint: disable=unused-argument,no-self-use
    method tell (line 138) | def tell(self):  # pylint: disable=no-self-use
    method flush_input (line 146) | def flush_input(self):
    method _sendcmd (line 155) | def _sendcmd(self, msg):
    method _query (line 167) | def _query(self, msg, size=-1):

FILE: src/instruments/abstract_instruments/comm/usb_communicator.py
  class USBCommunicator (line 22) | class USBCommunicator(io.IOBase, AbstractCommunicator):
    method __init__ (line 33) | def __init__(self, dev):
    method address (line 77) | def address(self):
    method address (line 81) | def address(self, _):
    method terminator (line 85) | def terminator(self):
    method terminator (line 94) | def terminator(self, newval):
    method timeout (line 103) | def timeout(self):
    method timeout (line 113) | def timeout(self, newval):
    method close (line 119) | def close(self):
    method read_raw (line 126) | def read_raw(self, size=-1):
    method write_raw (line 147) | def write_raw(self, msg):
    method seek (line 155) | def seek(self, offset):  # pylint: disable=unused-argument,no-self-use
    method tell (line 158) | def tell(self):  # pylint: disable=no-self-use
    method flush_input (line 161) | def flush_input(self):
    method _sendcmd (line 170) | def _sendcmd(self, msg):
    method _query (line 182) | def _query(self, msg, size=-1):

FILE: src/instruments/abstract_instruments/comm/usbtmc_communicator.py
  class USBTMCCommunicator (line 21) | class USBTMCCommunicator(io.IOBase, AbstractCommunicator):
    method __init__ (line 26) | def __init__(self, *args, **kwargs):
    method address (line 37) | def address(self):
    method terminator (line 44) | def terminator(self):
    method terminator (line 54) | def terminator(self, newval):
    method timeout (line 66) | def timeout(self):
    method timeout (line 76) | def timeout(self, newval):
    method close (line 82) | def close(self):
    method read (line 91) | def read(self, size=-1, encoding="utf-8"):
    method read_raw (line 105) | def read_raw(self, size=-1):
    method write (line 117) | def write(self, msg, encoding="utf-8"):
    method write_raw (line 129) | def write_raw(self, msg):
    method seek (line 138) | def seek(self, offset):
    method tell (line 141) | def tell(self):
    method flush_input (line 144) | def flush_input(self):
    method _sendcmd (line 152) | def _sendcmd(self, msg):
    method _query (line 163) | def _query(self, msg, size=-1):

FILE: src/instruments/abstract_instruments/comm/visa_communicator.py
  class VisaCommunicator (line 21) | class VisaCommunicator(io.IOBase, AbstractCommunicator):
    method __init__ (line 27) | def __init__(self, conn):
    method address (line 49) | def address(self):
    method address (line 58) | def address(self, newval):
    method read_termination (line 64) | def read_termination(self):
    method read_termination (line 69) | def read_termination(self, newval):
    method terminator (line 77) | def terminator(self):
    method terminator (line 86) | def terminator(self, newval):
    method timeout (line 96) | def timeout(self):
    method timeout (line 100) | def timeout(self, newval):
    method write_termination (line 105) | def write_termination(self):
    method write_termination (line 110) | def write_termination(self, newval):
    method close (line 119) | def close(self):
    method read_raw (line 128) | def read_raw(self, size=-1):
    method write_raw (line 155) | def write_raw(self, msg):
    method seek (line 164) | def seek(self, offset):  # pylint: disable=unused-argument,no-self-use
    method tell (line 167) | def tell(self):  # pylint: disable=no-self-use
    method flush_input (line 170) | def flush_input(self):
    method _sendcmd (line 179) | def _sendcmd(self, msg):
    method _query (line 191) | def _query(self, msg, size=-1):

FILE: src/instruments/abstract_instruments/comm/vxi11_communicator.py
  class VXI11Communicator (line 23) | class VXI11Communicator(io.IOBase, AbstractCommunicator):
    method __init__ (line 40) | def __init__(self, *args, **kwargs):
    method address (line 53) | def address(self):
    method terminator (line 63) | def terminator(self):
    method terminator (line 74) | def terminator(self, newval):
    method timeout (line 91) | def timeout(self):
    method timeout (line 101) | def timeout(self, newval):
    method close (line 106) | def close(self):
    method read_raw (line 115) | def read_raw(self, size=-1):
    method write_raw (line 125) | def write_raw(self, msg):
    method seek (line 133) | def seek(self, offset):
    method tell (line 141) | def tell(self):
    method flush_input (line 149) | def flush_input(self):
    method _sendcmd (line 160) | def _sendcmd(self, msg):
    method _query (line 171) | def _query(self, msg, size=-1):

FILE: src/instruments/abstract_instruments/electrometer.py
  class Electrometer (line 16) | class Electrometer(Instrument, metaclass=abc.ABCMeta):
    method mode (line 28) | def mode(self):
    method mode (line 38) | def mode(self, newval):
    method unit (line 43) | def unit(self):
    method trigger_mode (line 53) | def trigger_mode(self):
    method trigger_mode (line 63) | def trigger_mode(self, newval):
    method input_range (line 68) | def input_range(self):
    method input_range (line 78) | def input_range(self, newval):
    method zero_check (line 83) | def zero_check(self):
    method zero_check (line 93) | def zero_check(self, newval):
    method zero_correct (line 98) | def zero_correct(self):
    method zero_correct (line 108) | def zero_correct(self, newval):
    method fetch (line 114) | def fetch(self):
    method read_measurements (line 122) | def read_measurements(self):

FILE: src/instruments/abstract_instruments/function_generator.py
  class FunctionGenerator (line 21) | class FunctionGenerator(Instrument, metaclass=abc.ABCMeta):
    method __init__ (line 29) | def __init__(self, filelike):
    class Channel (line 34) | class Channel(metaclass=abc.ABCMeta):
      method __init__ (line 49) | def __init__(self, parent, name):
      method frequency (line 56) | def frequency(self):
      method frequency (line 69) | def frequency(self, newval):
      method function (line 76) | def function(self):
      method function (line 89) | def function(self, newval):
      method offset (line 96) | def offset(self):
      method offset (line 109) | def offset(self, newval):
      method phase (line 116) | def phase(self):
      method phase (line 129) | def phase(self, newval):
      method _get_amplitude_ (line 135) | def _get_amplitude_(self):
      method _set_amplitude_ (line 141) | def _set_amplitude_(self, magnitude, units):
      method amplitude (line 148) | def amplitude(self):
      method amplitude (line 173) | def amplitude(self, newval):
      method sendcmd (line 193) | def sendcmd(self, cmd):
      method query (line 196) | def query(self, cmd, size=-1):
    class VoltageMode (line 201) | class VoltageMode(Enum):
    class Function (line 210) | class Function(Enum):
    method channel (line 223) | def channel(self):
    method amplitude (line 238) | def amplitude(self):
    method amplitude (line 248) | def amplitude(self, newval):
    method _get_amplitude_ (line 251) | def _get_amplitude_(self):
    method _set_amplitude_ (line 254) | def _set_amplitude_(self, magnitude, units):
    method frequency (line 258) | def frequency(self):
    method frequency (line 271) | def frequency(self, newval):
    method function (line 278) | def function(self):
    method function (line 291) | def function(self, newval):
    method offset (line 298) | def offset(self):
    method offset (line 311) | def offset(self, newval):
    method phase (line 318) | def phase(self):
    method phase (line 331) | def phase(self, newval):

FILE: src/instruments/abstract_instruments/instrument.py
  class Instrument (line 44) | class Instrument:
    method __init__ (line 52) | def __init__(self, filelike, *args, **kwargs):
    method _ack_expected (line 71) | def _ack_expected(self, msg=""):  # pylint: disable=unused-argument,no...
    method _authenticate (line 74) | def _authenticate(self, auth):
    method sendcmd (line 83) | def sendcmd(self, cmd):
    method query (line 113) | def query(self, cmd, size=-1):
    method read (line 150) | def read(self, size=-1, encoding="utf-8"):
    method read_raw (line 162) | def read_raw(self, size=-1):
    method timeout (line 177) | def timeout(self):
    method timeout (line 188) | def timeout(self, newval):
    method address (line 192) | def address(self):
    method address (line 206) | def address(self, newval):
    method terminator (line 210) | def terminator(self):
    method terminator (line 223) | def terminator(self, newval):
    method prompt (line 227) | def prompt(self):
    method prompt (line 246) | def prompt(self, newval):
    method write (line 251) | def write(self, msg):
    method binblockread (line 267) | def binblockread(self, data_width, fmt=None):
    method open_from_uri (line 339) | def open_from_uri(cls, uri):
    method open_tcpip (line 441) | def open_tcpip(cls, host, port, auth=None):
    method open_serial (line 469) | def open_serial(
    method open_gpibusb (line 569) | def open_gpibusb(cls, port, gpib_address, timeout=3, write_timeout=3, ...
    method open_gpibethernet (line 601) | def open_gpibethernet(cls, host, port, gpib_address, model="pl"):
    method open_visa (line 620) | def open_visa(cls, resource_name):
    method open_test (line 648) | def open_test(cls, stdin=None, stdout=None):
    method open_usbtmc (line 667) | def open_usbtmc(cls, *args, **kwargs):
    method open_vxi11 (line 685) | def open_vxi11(cls, *args, **kwargs):
    method open_usb (line 700) | def open_usb(cls, vid, pid):
    method open_file (line 728) | def open_file(cls, filename):
    method __enter__ (line 742) | def __enter__(self) -> typing_extensions.Self:
    method __exit__ (line 745) | def __exit__(self, *exc):

FILE: src/instruments/abstract_instruments/multimeter.py
  class Multimeter (line 16) | class Multimeter(Instrument, metaclass=abc.ABCMeta):
    method mode (line 28) | def mode(self):
    method mode (line 38) | def mode(self, newval):
    method trigger_mode (line 43) | def trigger_mode(self):
    method trigger_mode (line 53) | def trigger_mode(self, newval):
    method relative (line 58) | def relative(self):
    method relative (line 68) | def relative(self, newval):
    method input_range (line 73) | def input_range(self):
    method input_range (line 83) | def input_range(self, newval):
    method measure (line 89) | def measure(self, mode):

FILE: src/instruments/abstract_instruments/optical_spectrum_analyzer.py
  class OpticalSpectrumAnalyzer (line 16) | class OpticalSpectrumAnalyzer(Instrument, metaclass=abc.ABCMeta):
    method __init__ (line 24) | def __init__(self, *args, **kwargs):
    class Channel (line 28) | class Channel(metaclass=abc.ABCMeta):
      method __init__ (line 43) | def __init__(self, parent, name):
      method wavelength (line 50) | def wavelength(self, bin_format=True):
      method data (line 66) | def data(self, bin_format=True):
    method channel (line 84) | def channel(self):
    method start_wl (line 93) | def start_wl(self):
    method start_wl (line 103) | def start_wl(self, newval):
    method stop_wl (line 107) | def stop_wl(self):
    method stop_wl (line 117) | def stop_wl(self, newval):
    method bandwidth (line 121) | def bandwidth(self):
    method bandwidth (line 131) | def bandwidth(self, newval):
    method start_sweep (line 137) | def start_sweep(self):
    method wavelength (line 143) | def wavelength(self, bin_format=True):
    method data (line 158) | def data(self, bin_format=True):

FILE: src/instruments/abstract_instruments/oscilloscope.py
  class Oscilloscope (line 16) | class Oscilloscope(Instrument, metaclass=abc.ABCMeta):
    class Channel (line 24) | class Channel(metaclass=abc.ABCMeta):
      method coupling (line 36) | def coupling(self):
      method coupling (line 47) | def coupling(self, newval):
    class DataSource (line 50) | class DataSource(metaclass=abc.ABCMeta):
      method __init__ (line 59) | def __init__(self, parent, name):
      method __enter__ (line 64) | def __enter__(self):
      method __exit__ (line 73) | def __exit__(self, type, value, traceback):
      method __eq__ (line 77) | def __eq__(self, other):
      method name (line 89) | def name(self):
      method read_waveform (line 100) | def read_waveform(self, bin_format=True):
    method channel (line 116) | def channel(self):
    method ref (line 126) | def ref(self):
    method math (line 136) | def math(self):
    method force_trigger (line 147) | def force_trigger(self):

FILE: src/instruments/abstract_instruments/power_supply.py
  class PowerSupply (line 15) | class PowerSupply(Instrument, metaclass=abc.ABCMeta):
    class Channel (line 23) | class Channel(metaclass=abc.ABCMeta):
      method mode (line 35) | def mode(self):
      method mode (line 45) | def mode(self, newval):
      method voltage (line 50) | def voltage(self):
      method voltage (line 60) | def voltage(self, newval):
      method current (line 65) | def current(self):
      method current (line 75) | def current(self, newval):
      method output (line 80) | def output(self):
      method output (line 90) | def output(self, newval):
    method channel (line 97) | def channel(self):
    method voltage (line 110) | def voltage(self):
    method voltage (line 120) | def voltage(self, newval):
    method current (line 125) | def current(self):
    method current (line 135) | def current(self, newval):

FILE: src/instruments/abstract_instruments/signal_generator/channel.py
  class SGChannel (line 13) | class SGChannel(metaclass=abc.ABCMeta):
    method frequency (line 26) | def frequency(self):
    method frequency (line 35) | def frequency(self, newval):
    method power (line 40) | def power(self):
    method power (line 49) | def power(self, newval):
    method phase (line 54) | def phase(self):
    method phase (line 63) | def phase(self, newval):
    method output (line 68) | def output(self):
    method output (line 77) | def output(self, newval):

FILE: src/instruments/abstract_instruments/signal_generator/signal_generator.py
  class SignalGenerator (line 16) | class SignalGenerator(Instrument, metaclass=abc.ABCMeta):
    method channel (line 30) | def channel(self):

FILE: src/instruments/abstract_instruments/signal_generator/single_channel_sg.py
  class SingleChannelSG (line 18) | class SingleChannelSG(SignalGenerator, SGChannel):
    method channel (line 35) | def channel(self):

FILE: src/instruments/agilent/agilent33220a.py
  class Agilent33220a (line 23) | class Agilent33220a(SCPIFunctionGenerator):
    class Function (line 45) | class Function(Enum):
    class LoadResistance (line 58) | class LoadResistance(Enum):
    class OutputPolarity (line 67) | class OutputPolarity(Enum):
    method load_resistance (line 151) | def load_resistance(self):
    method load_resistance (line 171) | def load_resistance(self, newval):
    method phase (line 181) | def phase(self):
    method phase (line 185) | def phase(self, newval):

FILE: src/instruments/agilent/agilent34410a.py
  class Agilent34410a (line 15) | class Agilent34410a(SCPIMultimeter):  # pylint: disable=abstract-method
    method data_point_count (line 35) | def data_point_count(self):
    method init (line 46) | def init(self):
    method abort (line 57) | def abort(self):
    method clear_memory (line 65) | def clear_memory(self):
    method r (line 71) | def r(self, count):
    method fetch (line 100) | def fetch(self):
    method read_data (line 121) | def read_data(self, sample_count):
    method read_data_nvmem (line 148) | def read_data_nvmem(self):
    method read_last_data (line 161) | def read_last_data(self):
    method read_meter (line 186) | def read_meter(self):

FILE: src/instruments/aimtti/aimttiel302p.py
  class AimTTiEL302P (line 21) | class AimTTiEL302P(PowerSupply, PowerSupply.Channel):
    class Mode (line 43) | class Mode(Enum):
    class Error (line 53) | class Error(Enum):
    method output (line 124) | def output(self):
    method output (line 128) | def output(self, newval):
    method name (line 151) | def name(self):
    method reset (line 161) | def reset(self):
    method channel (line 169) | def channel(self):

FILE: src/instruments/comet/cito_plus_1310.py
  class CitoPlus1310 (line 16) | class CitoPlus1310(Instrument):
    class RegulationMode (line 42) | class RegulationMode(IntEnum):
    method __init__ (line 49) | def __init__(self, filelike):
    method name (line 71) | def name(self) -> str:
    method forward_power (line 77) | def forward_power(self) -> u.Quantity:
    method load_power (line 88) | def load_power(self) -> u.Quantity:
    method output_power (line 99) | def output_power(self) -> u.Quantity:
    method output_power (line 110) | def output_power(self, value: u.Quantity) -> None:
    method reflected_power (line 118) | def reflected_power(self) -> u.Quantity:
    method regulation_mode (line 129) | def regulation_mode(self) -> RegulationMode:
    method regulation_mode (line 139) | def regulation_mode(self, value) -> None:
    method rf (line 143) | def rf(self) -> bool:
    method rf (line 153) | def rf(self, value: bool) -> None:
    method sendcmd (line 157) | def sendcmd(self, pkg: bytes) -> None:
    method query (line 167) | def query(self, pkg: bytes, write_cmd=False) -> Union[None, bytes]:
    method _check_exception (line 211) | def _check_exception(self, fn_code: int, exc_code: int) -> None:
    method _make_hdr (line 224) | def _make_hdr(self, fn_code: int) -> bytes:
    method _make_pkg (line 235) | def _make_pkg(self, cmd_code, data=None, data_length=4):
  function _crc16 (line 266) | def _crc16(data: bytes):

FILE: src/instruments/config.py
  function walk_dict (line 19) | def walk_dict(d, path):
  function quantity_constructor (line 48) | def quantity_constructor(loader, node):
  function load_instruments (line 64) | def load_instruments(conf_file_name, conf_path="/"):

FILE: src/instruments/delta_elektronika/psc_eth.py
  class PscEth (line 15) | class PscEth(Instrument):
    method __init__ (line 28) | def __init__(self, filelike):
    class LimitStatus (line 31) | class LimitStatus(IntEnum):
    method name (line 40) | def name(self) -> str:
    method current_limit (line 44) | def current_limit(self) -> tuple["PscEth.LimitStatus", u.Quantity]:
    method voltage_limit (line 56) | def voltage_limit(self) -> tuple["PscEth.LimitStatus", u.Quantity]:
    method recall (line 175) | def recall(self) -> None:
    method reset (line 179) | def reset(self) -> None:
    method save (line 183) | def save(self) -> None:
    method set_current_limit (line 187) | def set_current_limit(
    method set_voltage_limit (line 203) | def set_voltage_limit(

FILE: src/instruments/dressler/cesar_1312.py
  class Cesar1312 (line 15) | class Cesar1312(Instrument):
    class ControlMode (line 39) | class ControlMode(IntEnum):
    class RegulationMode (line 46) | class RegulationMode(IntEnum):
    method __init__ (line 53) | def __init__(self, filelike):
    method address (line 78) | def address(self) -> int:
    method address (line 90) | def address(self, value: int) -> None:
    method retries (line 96) | def retries(self) -> int:
    method retries (line 105) | def retries(self, value: int) -> tuple[int, int, bytes]:
    method control_mode (line 113) | def control_mode(self) -> ControlMode:
    method control_mode (line 134) | def control_mode(self, value: ControlMode) -> None:
    method name (line 138) | def name(self) -> str:
    method output_power (line 153) | def output_power(self) -> u.Quantity:
    method output_power (line 168) | def output_power(self, value: u.Quantity) -> None:
    method reflected_power (line 174) | def reflected_power(self) -> u.Quantity:
    method regulation_mode (line 188) | def regulation_mode(self) -> RegulationMode:
    method regulation_mode (line 205) | def regulation_mode(self, value: RegulationMode) -> None:
    method rf (line 209) | def rf(self) -> bool:
    method rf (line 226) | def rf(self, value: bool) -> None:
    method query (line 232) | def query(self, package: bytes, len_data=1) -> bytes:
    method sendcmd (line 301) | def sendcmd(self, pkg: bytes) -> None:
    method _make_data (line 319) | def _make_data(
    method _make_pkg (line 344) | def _make_pkg(self, cmd_number: int, data: Union[None, bytes] = None) ...
    method _calculate_checksum (line 374) | def _calculate_checksum(data: bytes) -> bytes:
    method _pack_header (line 388) | def _pack_header(self, data_length: int):
    method _unpack_header (line 400) | def _unpack_header(hdr: bytes) -> tuple[int]:

FILE: src/instruments/errors.py
  class AcknowledgementError (line 12) | class AcknowledgementError(IOError):
  class PromptError (line 19) | class PromptError(IOError):

FILE: src/instruments/fluke/fluke3000.py
  class Fluke3000 (line 44) | class Fluke3000(Multimeter):
    method __init__ (line 96) | def __init__(self, filelike):
    class Module (line 108) | class Module(Enum):
    class Mode (line 118) | class Mode(Enum):
    method mode (line 143) | def mode(self):
    method trigger_mode (line 163) | def trigger_mode(self):
    method relative (line 179) | def relative(self):
    method input_range (line 192) | def input_range(self):
    method connect (line 204) | def connect(self):
    method scan (line 223) | def scan(self):
    method reset (line 249) | def reset(self):
    method read_lines (line 256) | def read_lines(self, nlines=1):
    method query_lines (line 272) | def query_lines(self, cmd, nlines=1):
    method flush (line 290) | def flush(self):
    method measure (line 308) | def measure(self, mode):
    method _get_module (line 360) | def _get_module(self, mode):
    method _parse (line 376) | def _parse(self, result, mode):
    method _parse_mode (line 416) | def _parse_mode(data):
    method _parse_value (line 431) | def _parse_value(data):
    method _parse_factor (line 446) | def _parse_factor(data):

FILE: src/instruments/generic_scpi/scpi_function_generator.py
  class SCPIFunctionGenerator (line 18) | class SCPIFunctionGenerator(FunctionGenerator, SCPIInstrument):
    method _get_amplitude_ (line 43) | def _get_amplitude_(self):
    method _set_amplitude_ (line 55) | def _set_amplitude_(self, magnitude, units):
    method phase (line 105) | def phase(self):
    method phase (line 109) | def phase(self, newval):

FILE: src/instruments/generic_scpi/scpi_instrument.py
  class SCPIInstrument (line 17) | class SCPIInstrument(Instrument):
    method name (line 36) | def name(self):
    method scpi_version (line 46) | def scpi_version(self):
    method op_complete (line 55) | def op_complete(self):
    method power_on_status (line 65) | def power_on_status(self):
    method power_on_status (line 75) | def power_on_status(self, newval):
    method self_test_ok (line 88) | def self_test_ok(self):
    method reset (line 104) | def reset(self):
    method clear (line 111) | def clear(self):
    method trigger (line 118) | def trigger(self):
    method wait_to_continue (line 129) | def wait_to_continue(self):
    method line_frequency (line 139) | def line_frequency(self):
    method line_frequency (line 150) | def line_frequency(self, newval):
    class ErrorCodes (line 162) | class ErrorCodes(IntEnum):
    method check_error_queue (line 235) | def check_error_queue(self):
    method display_brightness (line 256) | def display_brightness(self):
    method display_brightness (line 266) | def display_brightness(self, newval):
    method display_contrast (line 272) | def display_contrast(self):
    method display_contrast (line 282) | def display_contrast(self, newval):

FILE: src/instruments/generic_scpi/scpi_multimeter.py
  class SCPIMultimeter (line 32) | class SCPIMultimeter(SCPIInstrument, Multimeter):
    class Mode (line 46) | class Mode(Enum):
    class TriggerMode (line 64) | class TriggerMode(Enum):
    class InputRange (line 82) | class InputRange(Enum):
    class Resolution (line 92) | class Resolution(Enum):
    class TriggerCount (line 102) | class TriggerCount(Enum):
    class SampleCount (line 112) | class SampleCount(Enum):
    class SampleSource (line 121) | class SampleSource(Enum):
    method input_range (line 170) | def input_range(self):
    method input_range (line 192) | def input_range(self, newval):
    method resolution (line 203) | def resolution(self):
    method resolution (line 224) | def resolution(self, newval):
    method trigger_count (line 238) | def trigger_count(self):
    method trigger_count (line 269) | def trigger_count(self, newval):
    method sample_count (line 280) | def sample_count(self):
    method sample_count (line 312) | def sample_count(self, newval):
    method relative (line 367) | def relative(self):
    method relative (line 371) | def relative(self, newval):
    method measure (line 376) | def measure(self, mode=None):
    method _mode_parse (line 405) | def _mode_parse(val):

FILE: src/instruments/gentec_eo/blu.py
  class Blu (line 15) | class Blu(Instrument):
    method __init__ (line 41) | def __init__(self, filelike):
    method _ack_expected (line 53) | def _ack_expected(self, msg=""):
    class Scale (line 59) | class Scale(Enum):
    method anticipation (line 117) | def anticipation(self):
    method anticipation (line 138) | def anticipation(self, newval):
    method auto_scale (line 143) | def auto_scale(self):
    method auto_scale (line 163) | def auto_scale(self, newval):
    method available_scales (line 168) | def available_scales(self):
    method battery_state (line 205) | def battery_state(self):
    method current_value (line 222) | def current_value(self):
    method head_type (line 242) | def head_type(self):
    method measure_mode (line 257) | def measure_mode(self):
    method new_value_ready (line 282) | def new_value_ready(self):
    method scale (line 302) | def scale(self):
    method scale (line 330) | def scale(self, newval):
    method single_shot_energy_mode (line 334) | def single_shot_energy_mode(self):
    method single_shot_energy_mode (line 352) | def single_shot_energy_mode(self, newval):
    method trigger_level (line 358) | def trigger_level(self):
    method trigger_level (line 383) | def trigger_level(self, newval):
    method usb_state (line 399) | def usb_state(self):
    method user_multiplier (line 414) | def user_multiplier(self):
    method user_multiplier (line 430) | def user_multiplier(self, newval):
    method user_offset (line 435) | def user_offset(self):
    method user_offset (line 464) | def user_offset(self, newval):
    method version (line 479) | def version(self):
    method wavelength (line 494) | def wavelength(self):
    method wavelength (line 516) | def wavelength(self, newval):
    method zero_offset (line 524) | def zero_offset(self):
    method zero_offset (line 546) | def zero_offset(self, newval):
    method confirm_connection (line 554) | def confirm_connection(self):
    method disconnect (line 566) | def disconnect(self):
    method scale_down (line 576) | def scale_down(self):
    method scale_up (line 589) | def scale_up(self):
    method _no_ack_query (line 604) | def _no_ack_query(self, cmd, size=-1):
    method _value_query (line 613) | def _value_query(self, cmd, tp=str):
  function _format_eight (line 636) | def _format_eight(value):

FILE: src/instruments/glassman/glassmanfr.py
  class GlassmanFR (line 45) | class GlassmanFR(PowerSupply, PowerSupply.Channel):
    method __init__ (line 81) | def __init__(self, filelike):
    class Mode (line 96) | class Mode(Enum):
    class ResponseCode (line 106) | class ResponseCode(Enum):
    class ErrorCode (line 120) | class ErrorCode(Enum):
    method channel (line 141) | def channel(self):
    method voltage (line 152) | def voltage(self):
    method voltage (line 162) | def voltage(self, newval):
    method current (line 166) | def current(self):
    method current (line 176) | def current(self, newval):
    method voltage_sense (line 180) | def voltage_sense(self):
    method current_sense (line 190) | def current_sense(self):
    method mode (line 200) | def mode(self):
    method output (line 216) | def output(self):
    method output (line 228) | def output(self, newval):
    method fault (line 234) | def fault(self):
    method version (line 245) | def version(self):
    method device_timeout (line 255) | def device_timeout(self):
    method device_timeout (line 267) | def device_timeout(self, newval):
    method sendcmd (line 275) | def sendcmd(self, cmd):
    method query (line 286) | def query(self, cmd, size=-1):
    method reset (line 316) | def reset(self):
    method set_status (line 322) | def set_status(self, voltage=None, current=None, output=None, reset=Fa...
    method get_status (line 366) | def get_status(self):
    method _parse_response (line 377) | def _parse_response(self, response):
    method _parse_voltage (line 406) | def _parse_voltage(self, word):
    method _parse_current (line 420) | def _parse_current(self, word):
    method _parse_monitors (line 434) | def _parse_monitors(self, word):
    method _verify_checksum (line 450) | def _verify_checksum(self, word):
    method _get_checksum (line 468) | def _get_checksum(data):

FILE: src/instruments/hcp/tc038.py
  class TC038 (line 17) | class TC038(Instrument):
    method __init__ (line 32) | def __init__(self, *args, **kwargs):
    method sendcmd (line 50) | def sendcmd(self, command):
    method query (line 63) | def query(self, command):
    method monitored_quantity (line 81) | def monitored_quantity(self):
    method monitored_quantity (line 86) | def monitored_quantity(self, quantity="temperature"):
    method setpoint (line 102) | def setpoint(self):
    method setpoint (line 111) | def setpoint(self, value):
    method temperature (line 120) | def temperature(self):
    method monitored_value (line 126) | def monitored_value(self):
    method information (line 137) | def information(self):
    method _data_to_temp (line 142) | def _data_to_temp(data):

FILE: src/instruments/hcp/tc038d.py
  class TC038D (line 17) | class TC038D(Instrument):
    method __init__ (line 34) | def __init__(self, *args, **kwargs):
    method CRC16 (line 50) | def CRC16(data):
    method readRegister (line 62) | def readRegister(self, address, count=1):
    method writeMultiple (line 89) | def writeMultiple(self, address, values):
    method setpoint (line 130) | def setpoint(self):
    method setpoint (line 136) | def setpoint(self, value):
    method temperature (line 143) | def temperature(self):

FILE: src/instruments/holzworth/holzworth_hs9000.py
  class HS9000 (line 22) | class HS9000(SignalGenerator):
    class Channel (line 32) | class Channel(SGChannel):
      method __init__ (line 40) | def __init__(self, hs, idx_chan):
      method sendcmd (line 55) | def sendcmd(self, cmd):
      method query (line 65) | def query(self, cmd):
      method reset (line 79) | def reset(self):
      method recall_state (line 90) | def recall_state(self):
      method save_state (line 101) | def save_state(self):
      method temperature (line 115) | def temperature(self):
    method _channel_idxs (line 206) | def _channel_idxs(self):
    method channel (line 229) | def channel(self):
    method name (line 248) | def name(self):
    method ready (line 262) | def ready(self):

FILE: src/instruments/hp/hp3325a.py
  function amplitude_parse (line 44) | def amplitude_parse(am_resp: str) -> float:
  function frequency_parse (line 50) | def frequency_parse(fr_resp: str) -> float:
  function offset_parse (line 56) | def offset_parse(of_resp: str) -> float:
  class HP3325a (line 62) | class HP3325a(FunctionGenerator):
    method __init__ (line 71) | def __init__(self, filelike):
    class Waveform (line 80) | class Waveform(IntEnum):
    class FrequencyScale (line 92) | class FrequencyScale(Enum):
    class AmplitudeScale (line 101) | class AmplitudeScale(Enum):
    method query (line 229) | def query(self, cmd, size=-1):
    method amplitude_calibration (line 237) | def amplitude_calibration(self):
    method assign_zero_phase (line 240) | def assign_zero_phase(self):
    method query_error (line 256) | def query_error(self) -> int:

FILE: src/instruments/hp/hp3456a.py
  class HP3456a (line 44) | class HP3456a(Multimeter):
    method __init__ (line 57) | def __init__(self, filelike):
    class MathMode (line 70) | class MathMode(IntEnum):
    class Mode (line 86) | class Mode(Enum):
    class Register (line 112) | class Register(Enum):
    class TriggerMode (line 130) | class TriggerMode(IntEnum):
    class ValidRange (line 140) | class ValidRange(Enum):
    method number_of_readings (line 232) | def number_of_readings(self):
    method number_of_readings (line 243) | def number_of_readings(self, value):
    method number_of_digits (line 247) | def number_of_digits(self):
    method number_of_digits (line 259) | def number_of_digits(self, newval):
    method nplc (line 269) | def nplc(self):
    method nplc (line 282) | def nplc(self, newval):
    method delay (line 291) | def delay(self):
    method delay (line 302) | def delay(self, value):
    method mean (line 307) | def mean(self):
    method variance (line 317) | def variance(self):
    method count (line 327) | def count(self):
    method lower (line 337) | def lower(self):
    method lower (line 348) | def lower(self, value):
    method upper (line 352) | def upper(self):
    method upper (line 364) | def upper(self, value):
    method r (line 368) | def r(self):
    method r (line 380) | def r(self, value):
    method y (line 384) | def y(self):
    method y (line 395) | def y(self, value):
    method z (line 399) | def z(self):
    method z (line 411) | def z(self, value):
    method input_range (line 415) | def input_range(self):
    method input_range (line 427) | def input_range(self, value):
    method relative (line 463) | def relative(self):
    method relative (line 472) | def relative(self, value):
    method auto_range (line 487) | def auto_range(self):
    method fetch (line 495) | def fetch(self, mode=None):
    method measure (line 533) | def measure(self, mode=None):
    method _register_read (line 571) | def _register_read(self, name):
    method _register_write (line 593) | def _register_write(self, name, value):
    method trigger (line 620) | def trigger(self):

FILE: src/instruments/hp/hp6624a.py
  class HP6624a (line 17) | class HP6624a(PowerSupply):
    method __init__ (line 33) | def __init__(self, filelike):
    class Channel (line 39) | class Channel(PowerSupply.Channel):
      method __init__ (line 47) | def __init__(self, hp, idx):
      method _format_cmd (line 53) | def _format_cmd(self, cmd):
      method sendcmd (line 63) | def sendcmd(self, cmd):
      method query (line 74) | def query(self, cmd):
      method mode (line 90) | def mode(self):
      method mode (line 97) | def mode(self, newval):
      method reset (line 202) | def reset(self):
    class Mode (line 211) | class Mode(Enum):
    method channel (line 226) | def channel(self):
    method voltage (line 239) | def voltage(self):
    method voltage (line 250) | def voltage(self, newval):
    method current (line 265) | def current(self):
    method current (line 276) | def current(self, newval):
    method voltage_sense (line 291) | def voltage_sense(self):
    method current_sense (line 301) | def current_sense(self):
    method channel_count (line 311) | def channel_count(self):
    method channel_count (line 321) | def channel_count(self, newval):
    method clear (line 330) | def clear(self):

FILE: src/instruments/hp/hp6632b.py
  class HP6632b (line 50) | class HP6632b(SCPIInstrument, HP6652a):
    class ALCBandwidth (line 81) | class ALCBandwidth(IntEnum):
    class DigitalFunction (line 89) | class DigitalFunction(Enum):
    class DFISource (line 97) | class DFISource(Enum):
    class ErrorCodes (line 108) | class ErrorCodes(IntEnum):
    class RemoteInhibit (line 232) | class RemoteInhibit(Enum):
    class SenseWindow (line 241) | class SenseWindow(Enum):
    method init_output_trigger (line 423) | def init_output_trigger(self):
    method abort_output_trigger (line 430) | def abort_output_trigger(self):
    method line_frequency (line 439) | def line_frequency(self):
    method line_frequency (line 443) | def line_frequency(self, newval):
    method display_brightness (line 447) | def display_brightness(self):
    method display_brightness (line 451) | def display_brightness(self, newval):
    method display_contrast (line 455) | def display_contrast(self):
    method display_contrast (line 459) | def display_contrast(self, newval):
    method check_error_queue (line 462) | def check_error_queue(self):

FILE: src/instruments/hp/hp6652a.py
  class HP6652a (line 19) | class HP6652a(PowerSupply, PowerSupply.Channel):
    method name (line 168) | def name(self):
    method mode (line 180) | def mode(self):
    method mode (line 187) | def mode(self, newval):
    method reset (line 195) | def reset(self):
    method display_text (line 201) | def display_text(self, text_to_display):
    method channel (line 240) | def channel(self):

FILE: src/instruments/hp/hpe3631a.py
  class HPe3631a (line 53) | class HPe3631a(PowerSupply, PowerSupply.Channel, SCPIInstrument):
    method __init__ (line 82) | def __init__(self, filelike):
    class Channel (line 89) | class Channel:
      method __init__ (line 97) | def __init__(self, parent, valid_set):
      method __getitem__ (line 101) | def __getitem__(self, idx):
      method __len__ (line 109) | def __len__(self):
    method channel (line 115) | def channel(self):
    method mode (line 128) | def mode(self):
    method voltage (line 152) | def voltage(self):
    method voltage (line 163) | def voltage(self, newval):
    method voltage_min (line 189) | def voltage_min(self):
    method voltage_max (line 199) | def voltage_max(self):
    method voltage_range (line 209) | def voltage_range(self):

FILE: src/instruments/keithley/keithley195.py
  class Keithley195 (line 19) | class Keithley195(Multimeter):
    method __init__ (line 34) | def __init__(self, filelike):
    class Mode (line 41) | class Mode(IntEnum):
    class TriggerMode (line 52) | class TriggerMode(IntEnum):
    class ValidRange (line 66) | class ValidRange(Enum):
    method mode (line 80) | def mode(self):
    method mode (line 98) | def mode(self, newval):
    method trigger_mode (line 109) | def trigger_mode(self):
    method trigger_mode (line 136) | def trigger_mode(self, newval):
    method relative (line 148) | def relative(self):
    method relative (line 170) | def relative(self, newval):
    method input_range (line 176) | def input_range(self):
    method input_range (line 207) | def input_range(self, newval):
    method measure (line 238) | def measure(self, mode=None):
    method get_status_word (line 277) | def get_status_word(self):
    method parse_status_word (line 292) | def parse_status_word(statusword):  # pylint: disable=too-many-locals
    method trigger (line 349) | def trigger(self):
    method auto_range (line 358) | def auto_range(self):

FILE: src/instruments/keithley/keithley2182.py
  class Keithley2182 (line 19) | class Keithley2182(SCPIMultimeter):
    class Channel (line 35) | class Channel(Multimeter):
      method __init__ (line 44) | def __init__(self, parent, idx):
      method mode (line 51) | def mode(self):
      method mode (line 55) | def mode(self, newval):
      method trigger_mode (line 59) | def trigger_mode(self):
      method trigger_mode (line 63) | def trigger_mode(self, newval):
      method relative (line 67) | def relative(self):
      method relative (line 71) | def relative(self, newval):
      method input_range (line 75) | def input_range(self):
      method input_range (line 79) | def input_range(self, newval):
      method measure (line 84) | def measure(self, mode=None):
    class Mode (line 104) | class Mode(Enum):
    class TriggerMode (line 112) | class TriggerMode(Enum):
    method channel (line 126) | def channel(self):
    method relative (line 143) | def relative(self):
    method relative (line 162) | def relative(self, newval):
    method input_range (line 173) | def input_range(self):
    method input_range (line 177) | def input_range(self, newval):
    method units (line 181) | def units(self):
    method fetch (line 203) | def fetch(self):
    method measure (line 224) | def measure(self, mode=None):

FILE: src/instruments/keithley/keithley485.py
  class Keithley485 (line 44) | class Keithley485(Instrument):
    class TriggerMode (line 63) | class TriggerMode(Enum):
    class SRQDataMask (line 81) | class SRQDataMask(Enum):
    class SRQErrorMask (line 103) | class SRQErrorMask(Enum):
    class Status (line 125) | class Status(Enum):
    method zero_check (line 142) | def zero_check(self):
    method zero_check (line 156) | def zero_check(self, newval):
    method log (line 162) | def log(self):
    method log (line 176) | def log(self, newval):
    method input_range (line 182) | def input_range(self):
    method input_range (line 195) | def input_range(self, newval):
    method relative (line 223) | def relative(self):
    method relative (line 245) | def relative(self, newval):
    method eoi_mode (line 251) | def eoi_mode(self):
    method eoi_mode (line 267) | def eoi_mode(self, newval):
    method trigger_mode (line 273) | def trigger_mode(self):
    method trigger_mode (line 298) | def trigger_mode(self, newval):
    method auto_range (line 311) | def auto_range(self):
    method get_status (line 320) | def get_status(self):
    method _get_status_word (line 332) | def _get_status_word(self):
    method _parse_status_word (line 350) | def _parse_status_word(self, statusword):
    method measure (line 411) | def measure(self):
    method _parse_measurement (line 419) | def _parse_measurement(self, measurement):

FILE: src/instruments/keithley/keithley580.py
  class Keithley580 (line 47) | class Keithley580(Instrument):
    method __init__ (line 57) | def __init__(self, filelike):
    class Polarity (line 66) | class Polarity(IntEnum):
    class Drive (line 74) | class Drive(IntEnum):
    class TriggerMode (line 82) | class TriggerMode(IntEnum):
    method polarity (line 97) | def polarity(self):
    method polarity (line 116) | def polarity(self, newval):
    method drive (line 129) | def drive(self):
    method drive (line 145) | def drive(self, newval):
    method dry_circuit_test (line 158) | def dry_circuit_test(self):
    method dry_circuit_test (line 175) | def dry_circuit_test(self, newval):
    method operate (line 181) | def operate(self):
    method operate (line 192) | def operate(self, newval):
    method relative (line 198) | def relative(self):
    method relative (line 220) | def relative(self, newval):
    method trigger_mode (line 226) | def trigger_mode(self):
    method trigger_mode (line 250) | def trigger_mode(self, newval):
    method input_range (line 262) | def input_range(self):
    method input_range (line 276) | def input_range(self, newval):
    method trigger (line 305) | def trigger(self):
    method auto_range (line 314) | def auto_range(self):
    method set_calibration_value (line 323) | def set_calibration_value(self, value):
    method store_calibration_constants (line 332) | def store_calibration_constants(self):
    method get_status_word (line 340) | def get_status_word(self):
    method parse_status_word (line 362) | def parse_status_word(self, statusword):
    method measure (line 434) | def measure(self):
    method parse_measurement (line 448) | def parse_measurement(measurement):
    method sendcmd (line 494) | def sendcmd(self, cmd):
    method query (line 497) | def query(self, cmd, size=-1):

FILE: src/instruments/keithley/keithley6220.py
  class Keithley6220 (line 18) | class Keithley6220(SCPIInstrument, PowerSupply):
    method channel (line 37) | def channel(self):
    method voltage (line 53) | def voltage(self):
    method voltage (line 62) | def voltage(self, newval):
    method disable (line 82) | def disable(self):

FILE: src/instruments/keithley/keithley6514.py
  class Keithley6514 (line 18) | class Keithley6514(SCPIInstrument, Electrometer):
    class Mode (line 32) | class Mode(Enum):
    class TriggerMode (line 42) | class TriggerMode(Enum):
    class ArmSource (line 50) | class ArmSource(Enum):
    class ValidRange (line 64) | class ValidRange(Enum):
    method _valid_range (line 96) | def _valid_range(self, mode):
    method _parse_measurement (line 108) | def _parse_measurement(self, ascii):
    method unit (line 165) | def unit(self):
    method auto_range (line 169) | def auto_range(self):
    method auto_range (line 180) | def auto_range(self, newval):
    method input_range (line 185) | def input_range(self):
    method input_range (line 197) | def input_range(self, newval):
    method auto_config (line 207) | def auto_config(self, mode):
    method fetch (line 222) | def fetch(self):
    method read_measurements (line 232) | def read_measurements(self):

FILE: src/instruments/lakeshore/lakeshore336.py
  class Lakeshore336 (line 15) | class Lakeshore336(SCPIInstrument):
    class Sensor (line 31) | class Sensor:
      method __init__ (line 39) | def __init__(self, parent, idx):
      method temperature (line 47) | def temperature(self):
    method sensor (line 60) | def sensor(self):

FILE: src/instruments/lakeshore/lakeshore340.py
  class Lakeshore340 (line 15) | class Lakeshore340(SCPIInstrument):
    class Sensor (line 30) | class Sensor:
      method __init__ (line 38) | def __init__(self, parent, idx):
      method temperature (line 45) | def temperature(self):
    method sensor (line 58) | def sensor(self):

FILE: src/instruments/lakeshore/lakeshore370.py
  class Lakeshore370 (line 15) | class Lakeshore370(SCPIInstrument):
    method __init__ (line 27) | def __init__(self, filelike):
    class Channel (line 34) | class Channel:
      method __init__ (line 42) | def __init__(self, parent, idx):
      method resistance (line 49) | def resistance(self):
    method channel (line 62) | def channel(self):

FILE: src/instruments/lakeshore/lakeshore475.py
  class Lakeshore475 (line 26) | class Lakeshore475(SCPIInstrument):
    class Mode (line 42) | class Mode(IntEnum):
    class Filter (line 51) | class Filter(IntEnum):
    class PeakMode (line 60) | class PeakMode(IntEnum):
    class PeakDisplay (line 68) | class PeakDisplay(IntEnum):
    method field (line 80) | def field(self):
    method field_units (line 89) | def field_units(self):
    method field_units (line 101) | def field_units(self, newval):
    method temp_units (line 111) | def temp_units(self):
    method temp_units (line 123) | def temp_units(self, newval):
    method field_setpoint (line 133) | def field_setpoint(self):
    method field_setpoint (line 146) | def field_setpoint(self, newval):
    method field_control_params (line 160) | def field_control_params(self):
    method field_control_params (line 174) | def field_control_params(self, newval):
    method p_value (line 198) | def p_value(self):
    method p_value (line 207) | def p_value(self, newval):
    method i_value (line 214) | def i_value(self):
    method i_value (line 223) | def i_value(self, newval):
    method ramp_rate (line 230) | def ramp_rate(self):
    method ramp_rate (line 241) | def ramp_rate(self, newval):
    method control_slope_limit (line 249) | def control_slope_limit(self):
    method control_slope_limit (line 260) | def control_slope_limit(self, newval):
    method change_measurement_mode (line 283) | def change_measurement_mode(

FILE: src/instruments/mettler_toledo/mt_sics.py
  class MTSICS (line 14) | class MTSICS(Instrument):
    class WeightMode (line 27) | class WeightMode(Enum):
    method __init__ (line 35) | def __init__(self, filelike, *args, **kwargs):
    method clear_tare (line 40) | def clear_tare(self):
    method reset (line 52) | def reset(self):
    method tare (line 64) | def tare(self, immediately=None):
    method zero (line 85) | def zero(self, immediately=None):
    method query (line 110) | def query(self, cmd, size=-1):
    method _cmd_error_checking (line 139) | def _cmd_error_checking(self, value):
    method _general_error_checking (line 163) | def _general_error_checking(self, value):
    method mt_sics (line 181) | def mt_sics(self):
    method mt_sics_commands (line 199) | def mt_sics_commands(self):
    method name (line 234) | def name(self):
    method name (line 253) | def name(self, value):
    method serial_number (line 259) | def serial_number(self):
    method tare_value (line 276) | def tare_value(self):
    method tare_value (line 293) | def tare_value(self, value):
    method weight (line 299) | def weight(self):
    method weight_mode (line 321) | def weight_mode(self):
    method weight_mode (line 342) | def weight_mode(self, value):

FILE: src/instruments/minghe/mhs5200a.py
  class MHS5200 (line 19) | class MHS5200(FunctionGenerator):
    method __init__ (line 28) | def __init__(self, filelike):
    method _ack_expected (line 33) | def _ack_expected(self, msg=""):
    class Channel (line 41) | class Channel(FunctionGenerator.Channel):
      method __init__ (line 50) | def __init__(self, mhs, idx):
      method _get_amplitude_ (line 59) | def _get_amplitude_(self):
      method _set_amplitude_ (line 64) | def _set_amplitude_(self, magnitude, units):
      method duty_cycle (line 77) | def duty_cycle(self):
      method duty_cycle (line 90) | def duty_cycle(self, new_val):
      method enable (line 95) | def enable(self):
      method enable (line 105) | def enable(self, newval):
      method frequency (line 110) | def frequency(self):
      method frequency (line 124) | def frequency(self, new_val):
      method offset (line 130) | def offset(self):
      method offset (line 144) | def offset(self, new_val):
      method phase (line 150) | def phase(self):
      method phase (line 164) | def phase(self, new_val):
      method function (line 170) | def function(self):
      method function (line 181) | def function(self, new_val):
    class Function (line 185) | class Function(Enum):
    method channel (line 197) | def channel(self):
    method serial_number (line 214) | def serial_number(self):
    method _get_amplitude_ (line 225) | def _get_amplitude_(self):
    method _set_amplitude_ (line 228) | def _set_amplitude_(self, magnitude, units):

FILE: src/instruments/named_struct.py
  class Field (line 34) | class Field:
    method __init__ (line 49) | def __init__(self, fmt, strip_null=False):
    method is_significant (line 64) | def is_significant(self):
    method fmt_char (line 68) | def fmt_char(self):
    method __len__ (line 74) | def __len__(self):
    method __repr__ (line 82) | def __repr__(self):
    method __str__ (line 90) | def __str__(self):
    method __get__ (line 120) | def __get__(self, obj, type=None):
    method __set__ (line 123) | def __set__(self, obj, value):
  class StringField (line 127) | class StringField(Field):
    method __init__ (line 144) | def __init__(self, length, encoding="ascii", strip_null=False):
    method __set__ (line 149) | def __set__(self, obj, value):
    method __get__ (line 158) | def __get__(self, obj, type=None):
  class Padding (line 162) | class Padding(Field):
    method __init__ (line 170) | def __init__(self, n_bytes=1):
  class HasFields (line 174) | class HasFields(type):
    method __new__ (line 179) | def __new__(mcs, name, bases, attrs):
  class NamedStruct (line 219) | class NamedStruct(metaclass=HasFields):
    method __init__ (line 248) | def __init__(self, **kwargs):
    method _to_seq (line 260) | def _to_seq(self):
    method _from_seq (line 264) | def _from_seq(cls, new_values):
    method pack (line 274) | def pack(self):
    method unpack (line 285) | def unpack(cls, buffer):
    method __eq__ (line 295) | def __eq__(self, other):
    method __hash__ (line 301) | def __hash__(self):
    method __str__ (line 304) | def __str__(self):

FILE: src/instruments/newport/agilis.py
  class AGUC2 (line 41) | class AGUC2(Instrument):
    method __init__ (line 85) | def __init__(self, filelike):
    class Axis (line 95) | class Axis:
      method __init__ (line 104) | def __init__(self, cont, ax):
      method axis_status (line 120) | def axis_status(self):
      method jog (line 133) | def jog(self):
      method jog (line 157) | def jog(self, mode):
      method number_of_steps (line 165) | def number_of_steps(self):
      method move_relative (line 188) | def move_relative(self):
      method move_relative (line 200) | def move_relative(self, steps):
      method move_to_limit (line 211) | def move_to_limit(self):
      method move_to_limit (line 229) | def move_to_limit(self, mode):
      method step_amplitude (line 237) | def step_amplitude(self):
      method step_amplitude (line 258) | def step_amplitude(self, nns):
      method step_delay (line 276) | def step_delay(self):
      method step_delay (line 293) | def step_delay(self, nn):
      method am_i_still (line 304) | def am_i_still(self, max_retries=5):
      method stop (line 339) | def stop(self):
      method zero_position (line 345) | def zero_position(self):
    class Axes (line 353) | class Axes(IntEnum):
    method axis (line 366) | def axis(self):
    method enable_remote_mode (line 385) | def enable_remote_mode(self):
    method enable_remote_mode (line 392) | def enable_remote_mode(self, newval):
    method error_previous_command (line 401) | def error_previous_command(self):
    method firmware_version (line 416) | def firmware_version(self):
    method limit_status (line 424) | def limit_status(self):
    method sleep_time (line 445) | def sleep_time(self):
    method sleep_time (line 456) | def sleep_time(self, t):
    method reset_controller (line 464) | def reset_controller(self):
    method ag_sendcmd (line 474) | def ag_sendcmd(self, cmd):
    method ag_query (line 481) | def ag_query(self, cmd, size=-1):
  function agilis_error_message (line 499) | def agilis_error_message(error_code):
  function agilis_status_message (line 527) | def agilis_status_message(status_code):

FILE: src/instruments/newport/errors.py
  class NewportError (line 14) | class NewportError(IOError):
    method __init__ (line 101) | def __init__(self, errcode=None, timestamp=None):
    method get_message (line 138) | def get_message(code):
    method timestamp (line 151) | def timestamp(self):
    method errcode (line 161) | def errcode(self):
    method axis (line 170) | def axis(self):

FILE: src/instruments/newport/newport_pmc8742.py
  class PicoMotorController8742 (line 45) | class PicoMotorController8742(Instrument):
    method __init__ (line 82) | def __init__(self, filelike):
    class Axis (line 94) | class Axis:
      method __init__ (line 97) | def __init__(self, parent, idx):
      class MotorType (line 127) | class MotorType(IntEnum):
      method acceleration (line 143) | def acceleration(self):
      method acceleration (line 167) | def acceleration(self, value):
      method home_position (line 177) | def home_position(self):
      method home_position (line 200) | def home_position(self, value):
      method is_stopped (line 209) | def is_stopped(self):
      method motor_type (line 227) | def motor_type(self):
      method motor_type (line 249) | def motor_type(self, value):
      method move_absolute (line 258) | def move_absolute(self):
      method move_absolute (line 281) | def move_absolute(self, value):
      method move_relative (line 290) | def move_relative(self):
      method move_relative (line 313) | def move_relative(self, value):
      method position (line 322) | def position(self):
      method velocity (line 342) | def velocity(self):
      method velocity (line 368) | def velocity(self, value):
      method move_indefinite (line 385) | def move_indefinite(self, direction):
      method stop (line 408) | def stop(self):
      method controller_address (line 427) | def controller_address(self):
      method controller_address (line 440) | def controller_address(self, newval):
      method controller_configuration (line 444) | def controller_configuration(self):
      method controller_configuration (line 472) | def controller_configuration(self, value):
      method error_code (line 479) | def error_code(self):
      method error_code_and_message (line 490) | def error_code_and_message(self):
      method firmware_version (line 503) | def firmware_version(self):
      method name (line 508) | def name(self):
      method abort_motion (line 514) | def abort_motion(self):
      method motor_check (line 518) | def motor_check(self):
      method purge (line 526) | def purge(self):
      method recall_parameters (line 543) | def recall_parameters(self, value=0):
      method reset (line 560) | def reset(self):
      method save_settings (line 571) | def save_settings(self):
      method sendcmd (line 596) | def sendcmd(self, cmd, axs=True):
      method query (line 611) | def query(self, cmd, size=-1, axs=True):
    method axis (line 642) | def axis(self):
    method controller_address (line 656) | def controller_address(self):
    method controller_address (line 676) | def controller_address(self, newval):
    method controller_configuration (line 680) | def controller_configuration(self):
    method controller_configuration (line 712) | def controller_configuration(self, value):
    method dhcp_mode (line 716) | def dhcp_mode(self):
    method dhcp_mode (line 736) | def dhcp_mode(self, newval):
    method error_code (line 741) | def error_code(self):
    method error_code_and_message (line 761) | def error_code_and_message(self):
    method firmware_version (line 779) | def firmware_version(self):
    method gateway (line 794) | def gateway(self):
    method gateway (line 811) | def gateway(self, value):
    method hostname (line 815) | def hostname(self):
    method hostname (line 832) | def hostname(self, value):
    method ip_address (line 836) | def ip_address(self):
    method ip_address (line 853) | def ip_address(self, value):
    method mac_address (line 857) | def mac_address(self):
    method multiple_controllers (line 875) | def multiple_controllers(self):
    method multiple_controllers (line 900) | def multiple_controllers(self, newval):
    method name (line 904) | def name(self):
    method netmask (line 919) | def netmask(self):
    method netmask (line 936) | def netmask(self, value):
    method scan_controllers (line 940) | def scan_controllers(self):
    method scan_done (line 975) | def scan_done(self):
    method abort_motion (line 994) | def abort_motion(self):
    method motor_check (line 1007) | def motor_check(self):
    method scan (line 1023) | def scan(self, value=2):
    method purge (line 1058) | def purge(self):
    method recall_parameters (line 1083) | def recall_parameters(self, value=0):
    method reset (line 1108) | def reset(self):
    method save_settings (line 1127) | def save_settings(self):
    method query (line 1160) | def query(self, cmd, size=-1):

FILE: src/instruments/newport/newportesp301.py
  class NewportESP301 (line 26) | class NewportESP301(Instrument):
    method __init__ (line 38) | def __init__(self, filelike):
    class Axis (line 45) | class Axis:
      method __init__ (line 77) | def __init__(self, controller, axis_id):
      method _units_of (line 91) | def _units_of(self, units):
      method _get_units (line 104) | def _get_units(self):
      method _set_units (line 115) | def _set_units(self, new_units):
      method axis_id (line 121) | def axis_id(self):
      method is_motion_done (line 130) | def is_motion_done(self):
      method acceleration (line 142) | def acceleration(self):
      method acceleration (line 157) | def acceleration(self, newval):
      method deceleration (line 168) | def deceleration(self):
      method deceleration (line 182) | def deceleration(self, newval):
      method estop_deceleration (line 193) | def estop_deceleration(self):
      method estop_deceleration (line 207) | def estop_deceleration(self, decel):
      method jerk (line 216) | def jerk(self):
      method jerk (line 231) | def jerk(self, jerk):
      method velocity (line 240) | def velocity(self):
      method velocity (line 253) | def velocity(self, velocity):
      method max_velocity (line 262) | def max_velocity(self):
      method max_velocity (line 275) | def max_velocity(self, newval):
      method max_base_velocity (line 284) | def max_base_velocity(self):
      method max_base_velocity (line 297) | def max_base_velocity(self, newval):
      method jog_high_velocity (line 306) | def jog_high_velocity(self):
      method jog_high_velocity (line 319) | def jog_high_velocity(self, newval):
      method jog_low_velocity (line 328) | def jog_low_velocity(self):
      method jog_low_velocity (line 341) | def jog_low_velocity(self, newval):
      method homing_velocity (line 350) | def homing_velocity(self):
      method homing_velocity (line 363) | def homing_velocity(self, newval):
      method max_acceleration (line 372) | def max_acceleration(self):
      method max_acceleration (line 386) | def max_acceleration(self, newval):
      method max_deceleration (line 397) | def max_deceleration(self):
      method max_deceleration (line 409) | def max_deceleration(self, decel):
      method position (line 418) | def position(self):
      method desired_position (line 431) | def desired_position(self):
      method desired_velocity (line 444) | def desired_velocity(self):
      method home (line 457) | def home(self):
      method home (line 471) | def home(self, newval):
      method units (line 478) | def units(self):
      method units (line 489) | def units(self, newval):
      method encoder_resolution (line 500) | def encoder_resolution(self):
      method encoder_resolution (line 514) | def encoder_resolution(self, newval):
      method full_step_resolution (line 521) | def full_step_resolution(self):
      method full_step_resolution (line 535) | def full_step_resolution(self, newval):
      method left_limit (line 542) | def left_limit(self):
      method left_limit (line 554) | def left_limit(self, limit):
      method right_limit (line 559) | def right_limit(self):
      method right_limit (line 571) | def right_limit(self, limit):
      method error_threshold (line 576) | def error_threshold(self):
      method error_threshold (line 588) | def error_threshold(self, newval):
      method current (line 595) | def current(self):
      method current (line 608) | def current(self, newval):
      method voltage (line 615) | def voltage(self):
      method voltage (line 628) | def voltage(self, newval):
      method motor_type (line 635) | def motor_type(self):
      method motor_type (line 652) | def motor_type(self, newval):
      method feedback_configuration (line 658) | def feedback_configuration(self):
      method feedback_configuration (line 667) | def feedback_configuration(self, newval):
      method position_display_resolution (line 673) | def position_display_resolution(self):
      method position_display_resolution (line 682) | def position_display_resolution(self, newval):
      method trajectory (line 688) | def trajectory(self):
      method trajectory (line 697) | def trajectory(self, newval):
      method microstep_factor (line 703) | def microstep_factor(self):
      method microstep_factor (line 712) | def microstep_factor(self, newval):
      method hardware_limit_configuration (line 722) | def hardware_limit_configuration(self):
      method hardware_limit_configuration (line 731) | def hardware_limit_configuration(self, newval):
      method acceleration_feed_forward (line 737) | def acceleration_feed_forward(self):
      method acceleration_feed_forward (line 746) | def acceleration_feed_forward(self, newval):
      method proportional_gain (line 752) | def proportional_gain(self):
      method proportional_gain (line 761) | def proportional_gain(self, newval):
      method derivative_gain (line 767) | def derivative_gain(self):
      method derivative_gain (line 776) | def derivative_gain(self, newval):
      method integral_gain (line 782) | def integral_gain(self):
      method integral_gain (line 791) | def integral_gain(self, newval):
      method integral_saturation_gain (line 797) | def integral_saturation_gain(self):
      method integral_saturation_gain (line 806) | def integral_saturation_gain(self, newval):
      method encoder_position (line 812) | def encoder_position(self):
      method search_for_home (line 823) | def search_for_home(self, search_mode=None):
      method move (line 836) | def move(self, position, absolute=True, wait=False, block=False):
      method move_to_hardware_limit (line 864) | def move_to_hardware_limit(self):
      method move_indefinitely (line 870) | def move_indefinitely(self):
      method abort_motion (line 876) | def abort_motion(self):
      method wait_for_stop (line 882) | def wait_for_stop(self):
      method stop_motion (line 888) | def stop_motion(self):
      method wait_for_position (line 894) | def wait_for_position(self, position):
      method wait_for_motion (line 907) | def wait_for_motion(self, poll_interval=0.01, max_wait=None):
      method enable (line 936) | def enable(self):
      method disable (line 942) | def disable(self):
      method setup_axis (line 948) | def setup_axis(self, **kwargs):
      method read_setup (line 1042) | def read_setup(self):
      method get_status (line 1105) | def get_status(self):
      method _get_pq_unit (line 1126) | def _get_pq_unit(num):
      method _get_unit_num (line 1135) | def _get_unit_num(self, quantity):
      method _newport_cmd (line 1151) | def _newport_cmd(self, cmd, **kwargs):
    class HomeSearchMode (line 1163) | class HomeSearchMode(IntEnum):
    class MotorType (line 1183) | class MotorType(IntEnum):
    class Units (line 1194) | class Units(IntEnum):
    method axis (line 1215) | def axis(self):
    method _newport_cmd (line 1236) | def _newport_cmd(self, cmd, params=tuple(), target=None, errcheck=True):
    method _execute_cmd (line 1269) | def _execute_cmd(self, raw_cmd, errcheck=True):
    method _home (line 1302) | def _home(self, axis, search_mode, errcheck=True):
    method search_for_home (line 1310) | def search_for_home(
    method reset (line 1329) | def reset(self):
    method define_program (line 1341) | def define_program(self, program_id):
    method execute_bulk_command (line 1370) | def execute_bulk_command(self, errcheck=True):
    method run_program (line 1391) | def run_program(self, program_id):

FILE: src/instruments/ondax/lm.py
  class LM (line 21) | class LM(Instrument):
    method __init__ (line 30) | def __init__(self, filelike):
    class Status (line 40) | class Status(IntEnum):
    class _AutomaticCurrentControl (line 56) | class _AutomaticCurrentControl:
      method __init__ (line 65) | def __init__(self, parent):
      method target (line 70) | def target(self):
      method enabled (line 90) | def enabled(self):
      method enabled (line 108) | def enabled(self, newval):
      method on (line 120) | def on(self):
      method off (line 134) | def off(self):
    class _AutomaticPowerControl (line 148) | class _AutomaticPowerControl:
      method __init__ (line 157) | def __init__(self, parent):
      method target (line 162) | def target(self):
      method enabled (line 182) | def enabled(self):
      method enabled (line 200) | def enabled(self, newval):
      method start (line 212) | def start(self):
      method stop (line 226) | def stop(self):
    class _Modulation (line 240) | class _Modulation:
      method __init__ (line 248) | def __init__(self, parent):
      method on_time (line 253) | def on_time(self):
      method on_time (line 276) | def on_time(self, newval):
      method off_time (line 281) | def off_time(self):
      method off_time (line 304) | def off_time(self, newval):
      method enabled (line 309) | def enabled(self):
      method enabled (line 327) | def enabled(self, newval):
    class _ThermoElectricCooler (line 339) | class _ThermoElectricCooler:
      method __init__ (line 348) | def __init__(self, parent):
      method current (line 353) | def current(self):
      method target (line 372) | def target(self):
      method enabled (line 391) | def enabled(self):
      method enabled (line 409) | def enabled(self, newval):
    method _ack_expected (line 421) | def _ack_expected(self, msg=""):
    method firmware (line 428) | def firmware(self):
    method current (line 438) | def current(self):
    method current (line 450) | def current(self, newval):
    method maximum_current (line 455) | def maximum_current(self):
    method maximum_current (line 468) | def maximum_current(self, newval):
    method power (line 473) | def power(self):
    method power (line 485) | def power(self, newval):
    method serial_number (line 490) | def serial_number(self):
    method status (line 500) | def status(self):
    method temperature (line 510) | def temperature(self):
    method temperature (line 522) | def temperature(self, newval):
    method enabled (line 527) | def enabled(self):
    method enabled (line 536) | def enabled(self, newval):
    method save (line 548) | def save(self):
    method reset (line 554) | def reset(self):

FILE: src/instruments/oxford/oxforditc503.py
  class OxfordITC503 (line 15) | class OxfordITC503(Instrument):
    method __init__ (line 27) | def __init__(self, filelike):
    class Sensor (line 34) | class Sensor:
      method __init__ (line 42) | def __init__(self, parent, idx):
      method temperature (line 49) | def temperature(self):
    method sensor (line 62) | def sensor(self):

FILE: src/instruments/pfeiffer/tpg36x.py
  class TPG36x (line 18) | class TPG36x(Instrument):
    method __init__ (line 33) | def __init__(self, filelike):
    class EthernetMode (line 47) | class EthernetMode(Enum):
    class Language (line 53) | class Language(Enum):
    class Unit (line 60) | class Unit(Enum):
    class Channel (line 70) | class Channel:
      class SensorStatus (line 78) | class SensorStatus(Enum):
      method __init__ (line 85) | def __init__(self, parent, chan):
      method pressure (line 92) | def pressure(self):
      method status (line 134) | def status(self):
      method status (line 153) | def status(self, value):
    method channel (line 164) | def channel(self):
    method ethernet_configuration (line 180) | def ethernet_configuration(self):
    method ethernet_configuration (line 207) | def ethernet_configuration(self, value):
    method language (line 225) | def language(self):
    method language (line 241) | def language(self, value):
    method mac_address (line 245) | def mac_address(self):
    method name (line 261) | def name(self):
    method number_channels (line 276) | def number_channels(self):
    method number_channels (line 294) | def number_channels(self, value):
    method pressure (line 300) | def pressure(self):
    method unit (line 318) | def unit(self):
    method unit (line 336) | def unit(self, new_unit):
    method query (line 342) | def query(self, cmd):
    method _ack_expected (line 352) | def _ack_expected(self, msg=""):

FILE: src/instruments/phasematrix/phasematrix_fsw0020.py
  class PhaseMatrixFSW0020 (line 16) | class PhaseMatrixFSW0020(SingleChannelSG):
    method reset (line 31) | def reset(self):
    method frequency (line 40) | def frequency(self):
    method frequency (line 52) | def frequency(self, newval):
    method power (line 64) | def power(self):
    method power (line 76) | def power(self, newval):
    method phase (line 88) | def phase(self):
    method phase (line 92) | def phase(self, newval):
    method blanking (line 96) | def blanking(self):
    method blanking (line 105) | def blanking(self, newval):
    method ref_output (line 109) | def ref_output(self):
    method ref_output (line 118) | def ref_output(self, newval):
    method output (line 122) | def output(self):
    method output (line 132) | def output(self, newval):
    method pulse_modulation (line 136) | def pulse_modulation(self):
    method pulse_modulation (line 145) | def pulse_modulation(self, newval):
    method am_modulation (line 149) | def am_modulation(self):
    method am_modulation (line 158) | def am_modulation(self, newval):

FILE: src/instruments/picowatt/picowattavs47.py
  class PicowattAVS47 (line 17) | class PicowattAVS47(SCPIInstrument):
    method __init__ (line 29) | def __init__(self, filelike):
    class Sensor (line 35) | class Sensor:
      method __init__ (line 43) | def __init__(self, parent, idx):
      method resistance (line 48) | def resistance(self):
    class InputSource (line 67) | class InputSource(IntEnum):
    method sensor (line 79) | def sensor(self):

FILE: src/instruments/qubitekk/cc1.py
  class CC1 (line 19) | class CC1(SCPIInstrument):
    method __init__ (line 33) | def __init__(self, filelike):
    method _ack_expected (line 63) | def _ack_expected(self, msg=""):
    class _TriggerModeNew (line 72) | class _TriggerModeNew(Enum):
    class _TriggerModeOld (line 80) | class _TriggerModeOld(Enum):
    class Channel (line 90) | class Channel:
      method __init__ (line 97) | def __init__(self, cc1, idx):
      method count (line 108) | def count(self):
    method acknowledge (line 137) | def acknowledge(self):
    method acknowledge (line 150) | def acknowledge(self, new_val):
    method gate (line 164) | def gate(self):
    method gate (line 173) | def gate(self, newval):
    method subtract (line 181) | def subtract(self):
    method subtract (line 190) | def subtract(self, newval):
    method trigger_mode (line 198) | def trigger_mode(self):
    method trigger_mode (line 208) | def trigger_mode(self, newval):
    method window (line 219) | def window(self):
    method window (line 230) | def window(self, new_val):
    method delay (line 238) | def delay(self):
    method delay (line 250) | def delay(self, new_val):
    method dwell_time (line 259) | def dwell_time(self):
    method dwell_time (line 277) | def dwell_time(self, new_val):
    method firmware (line 284) | def firmware(self):
    method channel (line 308) | def channel(self):
    method clear_counts (line 324) | def clear_counts(self):

FILE: src/instruments/qubitekk/mc1.py
  class MC1 (line 24) | class MC1(Instrument):
    method __init__ (line 30) | def __init__(self, filelike):
    class MotorType (line 41) | class MotorType(Enum):
    method increment (line 52) | def increment(self):
    method increment (line 62) | def increment(self, newval):
    method lower_limit (line 66) | def lower_limit(self):
    method lower_limit (line 76) | def lower_limit(self, newval):
    method upper_limit (line 80) | def upper_limit(self):
    method upper_limit (line 90) | def upper_limit(self, newval):
    method internal_position (line 122) | def internal_position(self):
    method firmware (line 176) | def firmware(self):
    method move_timeout (line 206) | def move_timeout(self):
    method is_centering (line 219) | def is_centering(self):
    method center (line 229) | def center(self):
    method reset (line 235) | def reset(self):
    method move (line 241) | def move(self, new_position):

FILE: src/instruments/rigol/rigolds1000.py
  class RigolDS1000Series (line 17) | class RigolDS1000Series(SCPIInstrument, Oscilloscope):
    class AcquisitionType (line 28) | class AcquisitionType(Enum):
    class DataSource (line 39) | class DataSource(Oscilloscope.DataSource):
      method name (line 49) | def name(self):
      method read_waveform (line 52) | def read_waveform(self, bin_format=True):
    class Channel (line 64) | class Channel(DataSource, Oscilloscope.Channel):
      class Coupling (line 74) | class Coupling(Enum):
      method __init__ (line 83) | def __init__(self, parent, idx):
      method sendcmd (line 90) | def sendcmd(self, cmd):
      method query (line 99) | def query(self, cmd):
    method channel (line 129) | def channel(self):
    method math (line 135) | def math(self):
    method ref (line 139) | def ref(self):
    method acquire_averages (line 147) | def acquire_averages(self):
    method acquire_averages (line 157) | def acquire_averages(self, newval):
    method force_trigger (line 171) | def force_trigger(self):
    method run (line 175) | def run(self):
    method stop (line 181) | def stop(self):
    method release_panel (line 198) | def release_panel(self):

FILE: src/instruments/srs/srs345.py
  class SRS345 (line 20) | class SRS345(SCPIInstrument, FunctionGenerator):
    method _get_amplitude_ (line 49) | def _get_amplitude_(self):
    method _set_amplitude_ (line 54) | def _set_amplitude_(self, magnitude, units):
    class Function (line 59) | class Function(IntEnum):

FILE: src/instruments/srs/srs830.py
  class SRS830 (line 37) | class SRS830(SCPIInstrument):
    method __init__ (line 50) | def __init__(self, filelike, outx_mode=None):
    class FreqSource (line 80) | class FreqSource(IntEnum):
    class Coupling (line 88) | class Coupling(IntEnum):
    class BufferMode (line 96) | class BufferMode(IntEnum):
    class Mode (line 104) | class Mode(Enum):
    method sample_rate (line 208) | def sample_rate(self):
    method sample_rate (line 223) | def sample_rate(self, newval):
    method num_data_points (line 251) | def num_data_points(self):
    method auto_offset (line 285) | def auto_offset(self, mode):
    method auto_phase (line 307) | def auto_phase(self):
    method init (line 319) | def init(self, sample_rate, buffer_mode):
    method start_data_transfer (line 338) | def start_data_transfer(self):
    method take_measurement (line 347) | def take_measurement(self, sample_rate, num_samples):
    method set_offset_expand (line 396) | def set_offset_expand(self, mode, offset, expand):
    method start_scan (line 437) | def start_scan(self):
    method pause (line 445) | def pause(self):
    method data_snap (line 465) | def data_snap(self, mode1, mode2):
    method read_data_buffer (line 507) | def read_data_buffer(self, channel):
    method clear_data_buffer (line 540) | def clear_data_buffer(self):
    method set_channel_display (line 564) | def set_channel_display(self, channel, display, ratio):

FILE: src/instruments/srs/srsctc100.py
  class SRSCTC100 (line 19) | class SRSCTC100(SCPIInstrument):
    method __init__ (line 25) | def __init__(self, filelike):
    class SensorType (line 44) | class SensorType(Enum):
    class Channel (line 54) | class Channel:
      method __init__ (line 60) | def __init__(self, ctc, chan_name):
      method _get (line 72) | def _get(self, prop_name):
      method _set (line 75) | def _set(self, prop_name, newval):
      method name (line 83) | def name(self):
      method name (line 94) | def name(self, newval):
      method value (line 103) | def value(self):
      method units (line 117) | def units(self):
      method sensor_type (line 134) | def sensor_type(self):
      method stats_enabled (line 147) | def stats_enabled(self):
      method stats_enabled (line 156) | def stats_enabled(self, newval):
      method stats_points (line 161) | def stats_points(self):
      method stats_points (line 171) | def stats_points(self, newval):
      method average (line 175) | def average(self):
      method std_dev (line 185) | def std_dev(self):
      method get_log_point (line 196) | def get_log_point(self, which="next", units=None):
      method get_log (line 221) | def get_log(self):
    method _channel_names (line 266) | def _channel_names(self):
    method channel_units (line 288) | def channel_units(self):
    method errcheck (line 305) | def errcheck(self):
    method _error_checking_disabled (line 322) | def _error_checking_disabled(self):
    method channel (line 330) | def channel(self):
    method display_figures (line 348) | def display_figures(self):
    method display_figures (line 358) | def display_figures(self, newval):
    method error_check_toggle (line 367) | def error_check_toggle(self):
    method error_check_toggle (line 376) | def error_check_toggle(self, newval):
    method sendcmd (line 385) | def sendcmd(self, cmd):
    method query (line 390) | def query(self, cmd, size=-1):
    method clear_log (line 398) | def clear_log(self):

FILE: src/instruments/srs/srsdg645.py
  class SRSDG645 (line 18) | class SRSDG645(SCPIInstrument):
    class Channel (line 34) | class Channel:
      method __init__ (line 42) | def __init__(self, parent, chan):
      method idx (line 56) | def idx(self):
      method delay (line 67) | def delay(self):
      method delay (line 80) | def delay(self, newval):
    method __init__ (line 88) | def __init__(self, filelike):
    class LevelPolarity (line 97) | class LevelPolarity(IntEnum):
    class Outputs (line 105) | class Outputs(IntEnum):
    class Channels (line 116) | class Channels(IntEnum):
    class DisplayMode (line 132) | class DisplayMode(IntEnum):
    class TriggerSource (line 153) | class TriggerSource(IntEnum):
    class Output (line 168) | class Output:
      method __init__ (line 173) | def __init__(self, parent, idx):
      method polarity (line 178) | def polarity(self):
      method polarity (line 189) | def polarity(self, newval):
      method level_amplitude (line 199) | def level_amplitude(self):
      method level_amplitude (line 209) | def level_amplitude(self, newval):
      method level_offset (line 214) | def level_offset(self):
      method level_offset (line 224) | def level_offset(self, newval):
    method channel (line 231) | def channel(self):
    method output (line 249) | def output(self):
    method display (line 258) | def display(self):
    method display (line 269) | def display(self, newval):
    method enable_adv_triggering (line 274) | def enable_adv_triggering(self):
    method enable_adv_triggering (line 283) | def enable_adv_triggering(self, newval):
    method trigger_rate (line 287) | def trigger_rate(self):
    method trigger_rate (line 297) | def trigger_rate(self, newval):
    method trigger_source (line 302) | def trigger_source(self):
    method trigger_source (line 311) | def trigger_source(self, newval):
    method holdoff (line 315) | def holdoff(self):
    method holdoff (line 325) | def holdoff(self, newval):
    method enable_burst_mode (line 330) | def enable_burst_mode(self):
    method enable_burst_mode (line 339) | def enable_burst_mode(self, newval):
    method enable_burst_t0_first (line 343) | def enable_burst_t0_first(self):
    method enable_burst_t0_first (line 355) | def enable_burst_t0_first(self, newval):
    method burst_count (line 359) | def burst_count(self):
    method burst_count (line 368) | def burst_count(self, newval):
    method burst_period (line 372) | def burst_period(self):
    method burst_period (line 383) | def burst_period(self, newval):
    method burst_delay (line 388) | def burst_delay(self):
    method burst_delay (line 400) | def burst_delay(self, newval):

FILE: src/instruments/sunpower/cryotel_gt.py
  class CryoTelGT (line 19) | class CryoTelGT(Instrument):
    class ControlMode (line 43) | class ControlMode(Enum):
    class ThermostatStatus (line 51) | class ThermostatStatus(Enum):
    class StopMode (line 62) | class StopMode(Enum):
    method __init__ (line 72) | def __init__(self, filelike):
    method at_temperature_band (line 89) | def at_temperature_band(self):
    method at_temperature_band (line 104) | def at_temperature_band(self, value):
    method control_mode (line 109) | def control_mode(self):
    method control_mode (line 124) | def control_mode(self, value):
    method errors (line 132) | def errors(self):
    method ki (line 148) | def ki(self):
    method ki (line 161) | def ki(self, value):
    method kp (line 165) | def kp(self):
    method kp (line 178) | def kp(self, value):
    method power (line 182) | def power(self):
    method power_current_and_limits (line 192) | def power_current_and_limits(self):
    method power_max (line 207) | def power_max(self):
    method power_max (line 220) | def power_max(self, value):
    method power_min (line 227) | def power_min(self):
    method power_min (line 240) | def power_min(self, value):
    method power_setpoint (line 247) | def power_setpoint(self):
    method power_setpoint (line 266) | def power_setpoint(self, value):
    method serial_number (line 273) | def serial_number(self):
    method state (line 282) | def state(self):
    method temperature (line 294) | def temperature(self):
    method temperature_setpoint (line 304) | def temperature_setpoint(self):
    method temperature_setpoint (line 318) | def temperature_setpoint(self, value):
    method thermostat (line 323) | def thermostat(self):
    method thermostat (line 335) | def thermostat(self, value):
    method thermostat_status (line 341) | def thermostat_status(self):
    method stop (line 355) | def stop(self):
    method stop (line 367) | def stop(self, value):
    method stop_mode (line 373) | def stop_mode(self):
    method stop_mode (line 385) | def stop_mode(self, value):
    method reset (line 392) | def reset(self):
    method save_control_mode (line 398) | def save_control_mode(self):
    method query (line 406) | def query(self, command, value=None):
    method query_multiline (line 437) | def query_multiline(self, command, num_lines):
    method sendcmd (line 452) | def sendcmd(self, command):

FILE: src/instruments/tektronix/tekawg2000.py
  class TekAWG2000 (line 18) | class TekAWG2000(SCPIInstrument):
    class Channel (line 26) | class Channel:
      method __init__ (line 34) | def __init__(self, tek, idx):
      method name (line 46) | def name(self):
      method amplitude (line 55) | def amplitude(self):
      method amplitude (line 68) | def amplitude(self, newval):
      method offset (line 76) | def offset(self):
      method offset (line 89) | def offset(self, newval):
      method frequency (line 97) | def frequency(self):
      method frequency (line 109) | def frequency(self, newval):
      method polarity (line 115) | def polarity(self):
      method polarity (line 124) | def polarity(self, newval):
      method shape (line 135) | def shape(self):
      method shape (line 147) | def shape(self, newval):
    class Polarity (line 157) | class Polarity(Enum):
    class Shape (line 165) | class Shape(Enum):
    method waveform_name (line 179) | def waveform_name(self):
    method waveform_name (line 191) | def waveform_name(self, newval):
    method channel (line 197) | def channel(self):
    method upload_waveform (line 215) | def upload_waveform(self, yzero, ymult, xincr, waveform):

FILE: src/instruments/tektronix/tekdpo4104.py
  function _parent_property (line 20) | def _parent_property(prop_name, doc=""):
  class TekDPO4104 (line 38) | class TekDPO4104(SCPIInstrument, Oscilloscope):
    class DataSource (line 52) | class DataSource(Oscilloscope.DataSource):
      method __init__ (line 61) | def __init__(self, tek, name):
      method name (line 66) | def name(self):
      method __enter__ (line 74) | def __enter__(self):
      method __exit__ (line 83) | def __exit__(self, type, value, traceback):
      method __eq__ (line 87) | def __eq__(self, other):
      method read_waveform (line 95) | def read_waveform(self, bin_format=True):
    class Channel (line 162) | class Channel(DataSource, Oscilloscope.Channel):
      method __init__ (line 172) | def __init__(self, parent, idx):
      method coupling (line 177) | def coupling(self):
      method coupling (line 186) | def coupling(self, newval):
    class Coupling (line 197) | class Coupling(Enum):
    method channel (line 210) | def channel(self):
    method ref (line 225) | def ref(self):
    method math (line 245) | def math(self):
    method data_source (line 254) | def data_source(self):
    method data_source (line 265) | def data_source(self, newval):
    method aquisition_length (line 276) | def aquisition_length(self):
    method aquisition_length (line 285) | def aquisition_length(self, newval):
    method aquisition_running (line 289) | def aquisition_running(self):
    method aquisition_running (line 300) | def aquisition_running(self, newval):
    method aquisition_continuous (line 304) | def aquisition_continuous(self):
    method aquisition_continuous (line 314) | def aquisition_continuous(self, newval):
    method data_width (line 318) | def data_width(self):
    method data_width (line 330) | def data_width(self, newval):
    method y_offset (line 338) | def y_offset(self):
    method y_offset (line 346) | def y_offset(self, newval):
    method force_trigger (line 351) | def force_trigger(self):

FILE: src/instruments/tektronix/tekdpo70000.py
  class TekDPO70000 (line 31) | class TekDPO70000(SCPIInstrument, Oscilloscope):
    class AcquisitionMode (line 53) | class AcquisitionMode(Enum):
    class AcquisitionState (line 66) | class AcquisitionState(Enum):
    class StopAfter (line 77) | class StopAfter(Enum):
    class SamplingMode (line 86) | class SamplingMode(Enum):
    class HorizontalMode (line 96) | class HorizontalMode(Enum):
    class WaveformEncoding (line 106) | class WaveformEncoding(Enum):
    class BinaryFormat (line 117) | class BinaryFormat(Enum):
    class ByteOrder (line 127) | class ByteOrder(Enum):
    class TriggerState (line 136) | class TriggerState(Enum):
    method _dtype (line 151) | def _dtype(binary_format, byte_order, n_bytes):
    class DataSource (line 167) | class DataSource(Oscilloscope.DataSource):
      method name (line 177) | def name(self):
      method _scale_raw_data (line 181) | def _scale_raw_data(self, data):
      method read_waveform (line 187) | def read_waveform(self, bin_format=True):
      method __enter__ (line 205) | def __enter__(self):
      method __exit__ (line 214) | def __exit__(self, type, value, traceback):
    class Math (line 218) | class Math(DataSource):
      method __init__ (line 228) | def __init__(self, parent, idx):
      method sendcmd (line 235) | def sendcmd(self, cmd):
      method query (line 244) | def query(self, cmd, size=-1):
      class FilterMode (line 257) | class FilterMode(Enum):
      class Mag (line 266) | class Mag(Enum):
      class Phase (line 276) | class Phase(Enum):
      class SpectralWindow (line 286) | class SpectralWindow(Enum):
      method _scale_raw_data (line 471) | def _scale_raw_data(self, data):
    class Channel (line 487) | class Channel(DataSource, Oscilloscope.Channel):
      method __init__ (line 497) | def __init__(self, parent, idx):
      method sendcmd (line 504) | def sendcmd(self, cmd):
      method query (line 513) | def query(self, cmd, size=-1):
      class Coupling (line 526) | class Coupling(Enum):
      method _scale_raw_data (line 605) | def _scale_raw_data(self, data):
    method channel (line 628) | def channel(self):
    method math (line 632) | def math(self):
    method ref (line 636) | def ref(self):
    method data_source (line 754) | def data_source(self):
    method data_source (line 775) | def data_source(self, newval):
    method select_fastest_encoding (line 932) | def select_fastest_encoding(self):
    method force_trigger (line 939) | def force_trigger(self):
    method run (line 946) | def run(self):
    method stop (line 952) | def stop(self):

FILE: src/instruments/tektronix/tektds224.py
  class TekTDS224 (line 21) | class TekTDS224(SCPIInstrument, Oscilloscope):
    method __init__ (line 35) | def __init__(self, filelike):
    class DataSource (line 39) | class DataSource(Oscilloscope.DataSource):
      method __init__ (line 48) | def __init__(self, tek, name):
      method name (line 53) | def name(self):
      method read_waveform (line 61) | def read_waveform(self, bin_format=True):
    class Channel (line 127) | class Channel(DataSource, Oscilloscope.Channel):
      method __init__ (line 137) | def __init__(self, parent, idx):
      method coupling (line 142) | def coupling(self):
      method coupling (line 151) | def coupling(self, newval):
    class Coupling (line 161) | class Coupling(Enum):
    method channel (line 173) | def channel(self):
    method ref (line 189) | def ref(self):
    method math (line 207) | def math(self):
    method data_source (line 216) | def data_source(self):
    method data_source (line 227) | def data_source(self, newval):
    method data_width (line 238) | def data_width(self):
    method data_width (line 248) | def data_width(self, newval):
    method force_trigger (line 254) | def force_trigger(self):

FILE: src/instruments/tektronix/tektds5xx.py
  class TekTDS5xx (line 51) | class TekTDS5xx(SCPIInstrument, Oscilloscope):
    class Measurement (line 61) | class Measurement:
      method __init__ (line 66) | def __init__(self, tek, idx):
      method read (line 86) | def read(self):
    class DataSource (line 100) | class DataSource(Oscilloscope.DataSource):
      method name (line 110) | def name(self):
      method read_waveform (line 118) | def read_waveform(self, bin_format=True):
    class Channel (line 180) | class Channel(DataSource, Oscilloscope.Channel):
      method __init__ (line 190) | def __init__(self, parent, idx):
      method coupling (line 195) | def coupling(self):
      method coupling (line 204) | def coupling(self, newval):
      method bandwidth (line 214) | def bandwidth(self):
      method bandwidth (line 223) | def bandwidth(self, newval):
      method impedance (line 233) | def impedance(self):
      method impedance (line 242) | def impedance(self, newval):
      method probe (line 252) | def probe(self):
      method scale (line 261) | def scale(self):
      method scale (line 270) | def scale(self, newval):
    class Coupling (line 281) | class Coupling(Enum):
    class Bandwidth (line 290) | class Bandwidth(Enum):
    class Impedance (line 300) | class Impedance(Enum):
    class Edge (line 308) | class Edge(Enum):
    class Trigger (line 316) | class Trigger(Enum):
    class Source (line 329) | class Source(Enum):
    method measurement (line 348) | def measurement(self):
    method channel (line 358) | def channel(self):
    method ref (line 373) | def ref(self):
    method math (line 392) | def math(self):
    method sources (line 405) | def sources(self):
    method data_source (line 425) | def data_source(self):
    method data_source (line 439) | def data_source(self, newval):
    method data_width (line 452) | def data_width(self):
    method data_width (line 461) | def data_width(self, newval):
    method force_trigger (line 467) | def force_trigger(self):
    method horizontal_scale (line 471) | def horizontal_scale(self):
    method horizontal_scale (line 480) | def horizontal_scale(self, newval):
    method trigger_level (line 490) | def trigger_level(self):
    method trigger_level (line 499) | def trigger_level(self, newval):
    method trigger_coupling (line 509) | def trigger_coupling(self):
    method trigger_coupling (line 518) | def trigger_coupling(self, newval):
    method trigger_slope (line 528) | def trigger_slope(self):
    method trigger_slope (line 537) | def trigger_slope(self, newval):
    method trigger_source (line 547) | def trigger_source(self):
    method trigger_source (line 556) | def trigger_source(self, newval):
    method clock (line 567) | def clock(self):
    method clock (line 577) | def clock(self, newval):
    method display_clock (line 585) | def display_clock(self):
    method display_clock (line 594) | def display_clock(self, newval):
    method get_hardcopy (line 599) | def get_hardcopy(self):

FILE: src/instruments/teledyne/maui.py
  class MAUI (line 30) | class MAUI(Oscilloscope):
    method __init__ (line 72) | def __init__(self, filelike):
    class MeasurementParameters (line 85) | class MeasurementParameters(Enum):
    class TriggerState (line 117) | class TriggerState(Enum):
    class TriggerType (line 127) | class TriggerType(Enum):
    class TriggerSource (line 148) | class TriggerSource(Enum):
    method _create_trigger_source_enum (line 171) | def _create_trigger_source_enum(self):
    class DataSource (line 191) | class DataSource(Oscilloscope.DataSource):
      method name (line 203) | def name(self):
      method read_waveform (line 208) | def read_waveform(self, bin_format=False, single=True):
    class Channel (line 313) | class Channel(DataSource, Oscilloscope.Channel):
      method __init__ (line 321) | def __init__(self, parent, idx):
      class Coupling (line 330) | class Coupling(Enum):
      method offset (line 360) | def offset(self):
      method offset (line 375) | def offset(self, newval):
      method scale (line 380) | def scale(self):
      method scale (line 394) | def scale(self, newval):
      method sendcmd (line 400) | def sendcmd(self, cmd):
      method query (line 409) | def query(self, cmd, size=-1):
    class Math (line 425) | class Math(DataSource):
      method __init__ (line 433) | def __init__(self, parent, idx):
      class Operators (line 442) | class Operators:
        method __init__ (line 463) | def __init__(self, parent):
        method current_setting (line 469) | def current_setting(self):
        method absolute (line 478) | def absolute(self, src):
        method average (line 488) | def average(self, src, average_type="summed", sweeps=1000):
        method derivative (line 510) | def derivative(self, src, vscale=1e6, voffset=0, autoscale=True):
        method difference (line 538) | def difference(self, src1, src2, vscale_variable=False):
        method envelope (line 562) | def envelope(self, src, sweeps=1000, limit_sweeps=True):
        method eres (line 576) | def eres(self, src, bits=0.5):
        method fft (line 595) | def fft(
        method floor (line 645) | def floor(self, src, sweeps=1000, limit_sweeps=True):
        method integral (line 659) | def integral(self, src, multiplier=1, adder=0, vscale=1e-3, voffse...
        method invert (line 682) | def invert(self, src):
        method product (line 691) | def product(self, src1, src2):
        method ratio (line 705) | def ratio(self, src1, src2):
        method reciprocal (line 719) | def reciprocal(self, src):
        method rescale (line 728) | def rescale(self, src, multiplier=1, adder=0):
        method sinx (line 747) | def sinx(self, src):
        method square (line 756) | def square(self, src):
        method square_root (line 765) | def square_root(self, src):
        method sum (line 774) | def sum(self, src1, src2):
        method trend (line 788) | def trend(self, src, vscale=1, center=0, autoscale=True):
        method roof (line 813) | def roof(self, src, sweeps=1000, limit_sweeps=True):
        method _send_operator (line 827) | def _send_operator(self, cmd):
      method operator (line 836) | def operator(self):
      method clear_sweeps (line 854) | def clear_sweeps(self):
      method sendcmd (line 858) | def sendcmd(self, cmd):
      method query (line 867) | def query(self, cmd, size=-1):
    class Measurement (line 883) | class Measurement:
      method __init__ (line 891) | def __init__(self, parent, idx):
      class State (line 897) | class State(Enum):
      method statistics (line 927) | def statistics(self):
      method delete (line 959) | def delete(self):
      method set_parameter (line 965) | def set_parameter(self, param, src):
      method sendcmd (line 999) | def sendcmd(self, cmd):
      method query (line 1008) | def query(self, cmd, size=-1):
    method channel (line 1027) | def channel(self):
    method math (line 1041) | def math(self):
    method measurement (line 1055) | def measurement(self):
    method ref (line 1069) | def ref(self):
    method number_channels (line 1075) | def number_channels(self):
    method number_channels (line 1091) | def number_channels(self, newval):
    method number_functions (line 1097) | def number_functions(self):
    method number_functions (line 1113) | def number_functions(self, newval):
    method number_measurements (line 1117) | def number_measurements(self):
    method number_measurements (line 1133) | def number_measurements(self, newval):
    method self_test (line 1137) | def self_test(self):
    method show_id (line 1159) | def show_id(self):
    method show_options (line 1174) | def show_options(self):
    method time_div (line 1190) | def time_div(self):
    method time_div (line 1204) | def time_div(self, newval):
    method trigger_delay (line 1226) | def trigger_delay(self):
    method trigger_delay (line 1241) | def trigger_delay(self, newval):
    method trigger_source (line 1246) | def trigger_source(self):
    method trigger_source (line 1274) | def trigger_source(self, newval):
    method trigger_type (line 1280) | def trigger_type(self):
    method trigger_type (line 1303) | def trigger_type(self, newval):
    method clear_sweeps (line 1310) | def clear_sweeps(self):
    method force_trigger (line 1321) | def force_trigger(self):
    method run (line 1332) | def run(self):
    method stop (line 1343) | def stop(self):
  function _source (line 1358) | def _source(src):

FILE: src/instruments/thorlabs/_abstract.py
  class ThorLabsInstrument (line 20) | class ThorLabsInstrument(Instrument):
    method __init__ (line 26) | def __init__(self, filelike):
    method sendpacket (line 30) | def sendpacket(self, packet):
    method querypacket (line 42) | def querypacket(self, packet, expect=None, timeout=None, expect_data_l...

FILE: src/instruments/thorlabs/_cmds.py
  class ThorLabsCommands (line 15) | class ThorLabsCommands(IntEnum):

FILE: src/instruments/thorlabs/_packets.py
  class ThorLabsPacket (line 31) | class ThorLabsPacket:
    method __init__ (line 39) | def __init__(
    method __str__ (line 62) | def __str__(self):
    method message_id (line 79) | def message_id(self):
    method message_id (line 88) | def message_id(self, newval):
    method parameters (line 92) | def parameters(self):
    method parameters (line 101) | def parameters(self, newval):
    method destination (line 105) | def destination(self):
    method destination (line 114) | def destination(self, newval):
    method source (line 118) | def source(self):
    method source (line 127) | def source(self, newval):
    method data (line 131) | def data(self):
    method data (line 140) | def data(self, newval):
    method pack (line 143) | def pack(self):
    method unpack (line 161) | def unpack(cls, bytes):

FILE: src/instruments/thorlabs/lcc25.py
  class LCC25 (line 21) | class LCC25(Instrument):
    method __init__ (line 31) | def __init__(self, filelike):
    method _ack_expected (line 36) | def _ack_expected(self, msg=""):
    class Mode (line 41) | class Mode(IntEnum):
    method name (line 53) | def name(self):
    method default (line 226) | def default(self):
    method save (line 237) | def save(self):
    method set_settings (line 248) | def set_settings(self, slot):
    method get_settings (line 263) | def get_settings(self, slot):
    method test_mode (line 278) | def test_mode(self):

FILE: src/instruments/thorlabs/pm100usb.py
  class PM100USB (line 27) | class PM100USB(SCPIInstrument):
    class SensorFlags (line 39) | class SensorFlags(IntEnum):
    class MeasurementConfiguration (line 51) | class MeasurementConfiguration(Enum):
    class Sensor (line 76) | class Sensor:
      method __init__ (line 84) | def __init__(self, parent):
      method name (line 109) | def name(self):
      method serial_number (line 118) | def serial_number(self):
      method calibration_message (line 127) | def calibration_message(self):
      method type (line 136) | def type(self):
      method flags (line 145) | def flags(self):
    method cache_units (line 160) | def cache_units(self):
    method cache_units (line 176) | def cache_units(self, newval):
    method sensor (line 184) | def sensor(self):
    method averaging_count (line 206) | def averaging_count(self):
    method averaging_count (line 214) | def averaging_count(self, newval):
    method read (line 231) | def read(self, size=-1, encoding="utf-8"):

FILE: src/instruments/thorlabs/sc10.py
  class SC10 (line 25) | class SC10(Instrument):
    method __init__ (line 32) | def __init__(self, filelike):
    method _ack_expected (line 37) | def _ack_expected(self, msg=""):
    class Mode (line 42) | class Mode(IntEnum):
    method name (line 56) | def name(self):
    method enable (line 66) | def enable(self):
    method enable (line 80) | def enable(self, value):
    method baud_rate (line 169) | def baud_rate(self):
    method baud_rate (line 181) | def baud_rate(self, newval):
    method default (line 218) | def default(self):
    method save (line 229) | def save(self):
    method save_mode (line 240) | def save_mode(self):
    method restore (line 251) | def restore(self):

FILE: src/instruments/thorlabs/tc200.py
  class TC200 (line 24) | class TC200(Instrument):
    method __init__ (line 34) | def __init__(self, filelike):
    method _ack_expected (line 39) | def _ack_expected(self, msg=""):
    class Mode (line 44) | class Mode(IntEnum):
    class Sensor (line 52) | class Sensor(Enum):
    method name (line 64) | def name(self):
    method mode (line 75) | def mode(self):
    method mode (line 86) | def mode(self, newval):
    method enable (line 104) | def enable(self):
    method enable (line 116) | def enable(self, newval):
    method status (line 141) | def status(self):
    method temperature_set (line 186) | def temperature_set(self):
    method temperature_set (line 206) | def temperature_set(self, newval):
    method p (line 215) | def p(self):
    method p (line 225) | def p(self, newval):
    method i (line 231) | def i(self):
    method i (line 241) | def i(self, newval):
    method d (line 247) | def d(self):
    method d (line 257) | def d(self, newval):
    method pid (line 263) | def pid(self):
    method pid (line 277) | def pid(self, newval):
    method degrees (line 288) | def degrees(self):
    method degrees (line 304) | def degrees(self, newval):

FILE: src/instruments/thorlabs/thorlabs_utils.py
  function check_cmd (line 7) | def check_cmd(response):

FILE: src/instruments/thorlabs/thorlabsapt.py
  class ThorLabsAPT (line 29) | class ThorLabsAPT(_abstract.ThorLabsInstrument):
    class APTChannel (line 36) | class APTChannel:
      method __init__ (line 42) | def __init__(self, apt, idx_chan):
      method enabled (line 49) | def enabled(self):
      method enabled (line 81) | def enabled(self, newval):
    method __init__ (line 94) | def __init__(self, filelike):
    method serial_number (line 163) | def serial_number(self):
    method model_number (line 172) | def model_number(self):
    method name (line 181) | def name(self):
    method channel (line 200) | def channel(self):
    method n_channels (line 212) | def n_channels(self):
    method n_channels (line 221) | def n_channels(self, nch):
    method identify (line 235) | def identify(self):
    method destination (line 251) | def destination(self):
  class APTPiezoDevice (line 260) | class APTPiezoDevice(ThorLabsAPT):
    class PiezoDeviceChannel (line 266) | class PiezoDeviceChannel(ThorLabsAPT.APTChannel):
      method max_travel (line 277) | def max_travel(self):
    method led_intensity (line 305) | def led_intensity(self):
    method led_intensity (line 331) | def led_intensity(self, intensity):
  class APTPiezoInertiaActuator (line 346) | class APTPiezoInertiaActuator(APTPiezoDevice):
    class PiezoChannel (line 372) | class PiezoChannel(APTPiezoDevice.PiezoDeviceChannel):
      method drive_op_parameters (line 381) | def drive_op_parameters(self):
      method drive_op_parameters (line 456) | def drive_op_parameters(self, params):
      method enabled_single (line 496) | def enabled_single(self):
      method enabled_single (line 542) | def enabled_single(self, newval):
      method jog_parameters (line 562) | def jog_parameters(self):
      method jog_parameters (line 659) | def jog_parameters(self, params):
      method position_count (line 726) | def position_count(self):
      method position_count (line 764) | def position_count(self, pos):
      method move_abs (line 777) | def move_abs(self, pos):
      method move_jog (line 807) | def move_jog(self, direction="fwd"):
      method move_jog_stop (line 850) | def move_jog_stop(self):
    method enabled_multi (line 876) | def enabled_multi(self):
    method enabled_multi (line 936) | def enabled_multi(self, mode):
  class APTPiezoStage (line 969) | class APTPiezoStage(APTPiezoDevice):
    class PiezoChannel (line 974) | class PiezoChannel(APTPiezoDevice.PiezoDeviceChannel):
      method position_control_closed (line 983) | def position_control_closed(self):
      method change_position_control_mode (line 1004) | def change_position_control_mode(self, closed, smooth=True):
      method output_position (line 1024) | def output_position(self):
      method output_position (line 1046) | def output_position(self, pos):
  class APTStrainGaugeReader (line 1060) | class APTStrainGaugeReader(APTPiezoDevice):
    class StrainGaugeChannel (line 1067) | class StrainGaugeChannel(APTPiezoDevice.PiezoDeviceChannel):
  class APTMotorController (line 1078) | class APTMotorController(ThorLabsAPT):
    class MotorChannel (line 1104) | class MotorChannel(ThorLabsAPT.APTChannel):
      method motion_timeout (line 1190) | def motion_timeout(self):
      method motion_timeout (line 1200) | def motion_timeout(self, newval):
      method _set_scale (line 1205) | def _set_scale(self, motor_model):
      method set_scale (line 1232) | def set_scale(self, motor_model):
      method motor_model (line 1243) | def motor_model(self):
      method motor_model (line 1256) | def motor_model(self, newval):
      method backlash_correction (line 1263) | def backlash_correction(self):
      method backlash_correction (line 1305) | def backlash_correction(self, pos):
      method home_parameters (line 1333) | def home_parameters(self):
      method home_parameters (line 1391) | def home_parameters(self, values):
      method status_bits (line 1446) | def status_bits(self):
      method position (line 1487) | def position(self):
      method position_encoder (line 1509) | def position_encoder(self):
      method go_home (line 1531) | def go_home(self):
      method move (line 1550) | def move(self, pos, absolute=True):

FILE: src/instruments/toptica/topmode.py
  class TopMode (line 21) | class TopMode(Instrument):
    method __init__ (line 34) | def __init__(self, filelike):
    method _ack_expected (line 39) | def _ack_expected(self, msg=""):
    class CharmStatus (line 49) | class CharmStatus(IntEnum):
    class Laser (line 61) | class Laser:
      method __init__ (line 69) | def __init__(self, parent, idx):
      method serial_number (line 76) | def serial_number(self):
      method model (line 86) | def model(self):
      method wavelength (line 96) | def wavelength(self):
      method production_date (line 107) | def production_date(self):
      method enable (line 117) | def enable(self):
      method enable (line 128) | def enable(self, newval):
      method is_connected (line 140) | def is_connected(self):
      method on_time (line 152) | def on_time(self):
      method charm_status (line 163) | def charm_status(self):
      method temperature_control_status (line 174) | def temperature_control_status(self):
      method current_control_status (line 185) | def current_control_status(self):
      method tec_status (line 196) | def tec_status(self):
      method intensity (line 206) | def intensity(self):
      method mode_hop (line 217) | def mode_hop(self):
      method lock_start (line 228) | def lock_start(self):
      method first_mode_hop_time (line 248) | def first_mode_hop_time(self):
      method latest_mode_hop_time (line 264) | def latest_mode_hop_time(self):
      method correction_status (line 280) | def correction_status(self):
      method correction (line 292) | def correction(self):
    method execute (line 303) | def execute(self, command):
    method set (line 312) | def set(self, param, value):
    method reference (line 331) | def reference(self, param):
    method display (line 343) | def display(self, param):
    method laser (line 355) | def laser(self):
    method enable (line 372) | def enable(self):
    method enable (line 380) | def enable(self, newval):
    method locked (line 388) | def locked(self):
    method interlock (line 398) | def interlock(self):
    method firmware (line 408) | def firmware(self):
    method fpga_status (line 419) | def fpga_status(self):
    method serial_number (line 434) | def serial_number(self):
    method temperature_status (line 444) | def temperature_status(self):
    method current_status (line 456) | def current_status(self):
    method reboot (line 469) | def reboot(self):

FILE: src/instruments/toptica/toptica_utils.py
  function convert_toptica_boolean (line 10) | def convert_toptica_boolean(response):
  function convert_toptica_datetime (line 28) | def convert_toptica_datetime(response):

FILE: src/instruments/util_fns.py
  function assume_units (line 22) | def assume_units(value, units):
  function setattr_expression (line 46) | def setattr_expression(target, name_expr, value):
  function convert_temperature (line 75) | def convert_temperature(temperature, base):
  function split_unit_str (line 91) | def split_unit_str(s, default_units=u.dimensionless, lookup=None):
  function rproperty (line 142) | def rproperty(fget=None, fset=None, doc=None, readonly=False, writeonly=...
  function bool_property (line 164) | def bool_property(
  function enum_property (line 228) | def enum_property(
  function unitless_property (line 312) | def unitless_property(
  function int_property (line 363) | def int_property(
  function unitful_property (line 429) | def unitful_property(
  function bounded_unitful_property (line 537) | def bounded_unitful_property(
  function string_property (line 614) | def string_property(
  class ProxyList (line 672) | class ProxyList:
    method __init__ (line 694) | def __init__(self, parent, proxy_cls, valid_set):
    method __iter__ (line 707) | def __iter__(self):
    method __getitem__ (line 711) | def __getitem__(self, idx):
    method __len__ (line 734) | def __len__(self):

FILE: src/instruments/yokogawa/yokogawa6370.py
  class Yokogawa6370 (line 27) | class Yokogawa6370(OpticalSpectrumAnalyzer):
    method __init__ (line 45) | def __init__(self, filelike, auth=None):
    method _authenticate (line 59) | def _authenticate(self, auth):
    class Channel (line 73) | class Channel(OpticalSpectrumAnalyzer.Channel):
      method __init__ (line 82) | def __init__(self, parent, idx):
      method _data (line 88) | def _data(self, axis, limits=None, bin_format=True):
      method data (line 107) | def data(self, limits=None, bin_format=True):
      method wavelength (line 117) | def wavelength(self, limits=None, bin_format=True):
    class SweepModes (line 129) | class SweepModes(IntEnum):
    class Traces (line 138) | class Traces(Enum):
    method channel (line 190) | def channel(self):
    method data (line 277) | def data(self, limits=None):
    method wavelength (line 287) | def wavelength(self, limits=None):
    method analysis (line 297) | def analysis(self):
    method start_sweep (line 301) | def start_sweep(self):
    method abort (line 309) | def abort(self):
    method clear (line 313) | def clear(self):
    method query (line 317) | def query(self, cmd, size=-1):

FILE: src/instruments/yokogawa/yokogawa7651.py
  class Yokogawa7651 (line 20) | class Yokogawa7651(PowerSupply, Instrument):
    class Channel (line 34) | class Channel(PowerSupply.Channel):
      method __init__ (line 44) | def __init__(self, parent, name):
      method mode (line 51) | def mode(self):
      method mode (line 65) | def mode(self, newval):
      method voltage (line 75) | def voltage(self):
      method voltage (line 92) | def voltage(self, newval):
      method current (line 99) | def current(self):
      method current (line 116) | def current(self, newval):
      method output (line 123) | def output(self):
      method output (line 137) | def output(self, newval):
    class Mode (line 147) | class Mode(IntEnum):
    method channel (line 158) | def channel(self):
    method voltage (line 175) | def voltage(self):
    method voltage (line 190) | def voltage(self, newval):
    method current (line 194) | def current(self):
    method current (line 209) | def current(self, newval):
    method trigger (line 214) | def trigger(self):

FILE: tests/__init__.py
  function expected_protocol (line 25) | def expected_protocol(ins_class, host_to_ins, ins_to_host, sep="\n", rep...
  function unit_eq (line 104) | def unit_eq(a, b, **kwargs):
  function make_name_test (line 119) | def make_name_test(ins_class, name_cmd="*IDN?"):
  function iterable_eq (line 132) | def iterable_eq(a, b, **kwargs):

FILE: tests/test_abstract_inst/test_electrometer.py
  function em (line 18) | def em(monkeypatch):
  function test_electrometer_mode (line 25) | def test_electrometer_mode(em):
  function test_electrometer_unit (line 32) | def test_electrometer_unit(em):
  function test_electrometer_trigger_mode (line 38) | def test_electrometer_trigger_mode(em):
  function test_electrometer_input_range (line 45) | def test_electrometer_input_range(em):
  function test_electrometer_zero_check (line 52) | def test_electrometer_zero_check(em):
  function test_electrometer_zero_correct (line 59) | def test_electrometer_zero_correct(em):
  function test_electrometer_fetch (line 66) | def test_electrometer_fetch(em):
  function test_electrometer_read_measurements (line 73) | def test_electrometer_read_measurements(em):

FILE: tests/test_abstract_inst/test_function_generator.py
  function fg (line 21) | def fg():
  function test_func_gen_default_channel_count (line 25) | def test_func_gen_default_channel_count(fg):
  function test_func_gen_raises_not_implemented_error_one_channel_getting (line 29) | def test_func_gen_raises_not_implemented_error_one_channel_getting(fg):
  function test_func_gen_raises_not_implemented_error_one_channel_setting (line 43) | def test_func_gen_raises_not_implemented_error_one_channel_setting(fg):
  function test_func_gen_raises_not_implemented_error_two_channel_getting (line 57) | def test_func_gen_raises_not_implemented_error_two_channel_getting(fg):
  function test_func_gen_raises_not_implemented_error_two_channel_setting (line 71) | def test_func_gen_raises_not_implemented_error_two_channel_setting(fg):
  function test_func_gen_two_channel_passes_thru_call_getter (line 85) | def test_func_gen_two_channel_passes_thru_call_getter(fg, mocker):
  function test_func_gen_one_channel_passes_thru_call_getter (line 109) | def test_func_gen_one_channel_passes_thru_call_getter(fg, mocker):
  function test_func_gen_two_channel_passes_thru_call_setter (line 147) | def test_func_gen_two_channel_passes_thru_call_setter(fg, mocker):
  function test_func_gen_one_channel_passes_thru_call_setter (line 171) | def test_func_gen_one_channel_passes_thru_call_setter(fg, mocker):
  function test_func_gen_channel_set_amplitude_dbm (line 209) | def test_func_gen_channel_set_amplitude_dbm(mocker):
  function test_func_gen_channel_sendcmd (line 227) | def test_func_gen_channel_sendcmd(mocker):
  function test_func_gen__channel_sendcmd (line 238) | def test_func_gen__channel_sendcmd(mocker):

FILE: tests/test_abstract_inst/test_multimeter.py
  function mul (line 18) | def mul(monkeypatch):
  function test_multimeter_mode (line 25) | def test_multimeter_mode(mul):
  function test_multimeter_trigger_mode (line 32) | def test_multimeter_trigger_mode(mul):
  function test_multimeter_relative (line 39) | def test_multimeter_relative(mul):
  function test_multimeter_input_range (line 46) | def test_multimeter_input_range(mul):
  function test_multimeter_measure (line 53) | def test_multimeter_measure(mul):

FILE: tests/test_abstract_inst/test_optical_spectrum_analyzer.py
  function osa (line 18) | def osa(monkeypatch):
  function test_osa_channel (line 30) | def test_osa_channel(osa):
  function test_osa_start_wl (line 37) | def test_osa_start_wl(osa):
  function test_osa_stop_wl (line 46) | def test_osa_stop_wl(osa):
  function test_osa_bandwidth (line 55) | def test_osa_bandwidth(osa):
  function test_osa_start_sweep (line 64) | def test_osa_start_sweep(osa):
  function test_osa_channel_wavelength (line 75) | def test_osa_channel_wavelength(osa, num_ch):
  function test_osa_channel_data (line 87) | def test_osa_channel_data(osa, num_ch):

FILE: tests/test_abstract_inst/test_oscilloscope.py
  function osc (line 18) | def osc(monkeypatch):
  function osc_ch (line 26) | def osc_ch(monkeypatch):
  function osc_ds (line 34) | def osc_ds(monkeypatch):
  function test_oscilloscope_channel (line 44) | def test_oscilloscope_channel(osc):
  function test_oscilloscope_ref (line 51) | def test_oscilloscope_ref(osc):
  function test_oscilloscope_math (line 58) | def test_oscilloscope_math(osc):
  function test_oscilloscope_force_trigger (line 65) | def test_oscilloscope_force_trigger(osc):
  function test_oscilloscope_channel_coupling (line 75) | def test_oscilloscope_channel_coupling(osc_ch):
  function test_oscilloscope_data_source_init (line 87) | def test_oscilloscope_data_source_init(osc_ds):
  function test_oscilloscope_data_source_name (line 97) | def test_oscilloscope_data_source_name(osc_ds):
  function test_oscilloscope_data_source_read_waveform (line 106) | def test_oscilloscope_data_source_read_waveform(osc_ds):

FILE: tests/test_abstract_inst/test_power_supply.py
  function ps (line 18) | def ps(monkeypatch):
  function ps_ch (line 26) | def ps_ch(monkeypatch):
  function test_power_supply_channel (line 36) | def test_power_supply_channel(ps):
  function test_power_supply_voltage (line 43) | def test_power_supply_voltage(ps):
  function test_power_supply_current (line 50) | def test_power_supply_current(ps):
  function test_power_supply_channel_mode (line 60) | def test_power_supply_channel_mode(ps_ch):
  function test_power_supply_channel_voltage (line 67) | def test_power_supply_channel_voltage(ps_ch):
  function test_power_supply_channel_current (line 74) | def test_power_supply_channel_current(ps_ch):
  function test_power_supply_channel_output (line 81) | def test_power_supply_channel_output(ps_ch):

FILE: tests/test_abstract_inst/test_signal_generator/test_channel.py
  function sgc (line 17) | def sgc(monkeypatch):
  function test_sg_channel_frequency (line 24) | def test_sg_channel_frequency(sgc):
  function test_sg_channel_power (line 31) | def test_sg_channel_power(sgc):
  function test_sg_channel_phase (line 38) | def test_sg_channel_phase(sgc):
  function test_sg_channel_output (line 45) | def test_sg_channel_output(sgc):

FILE: tests/test_abstract_inst/test_signal_generator/test_signal_generator.py
  function sg (line 18) | def sg(monkeypatch):
  function test_signal_generator_channel (line 25) | def test_signal_generator_channel(sg):

FILE: tests/test_abstract_inst/test_signal_generator/test_single_channel_sg.py
  function scsg (line 18) | def scsg(monkeypatch):
  function test_signal_generator_channel (line 25) | def test_signal_generator_channel(scsg):

FILE: tests/test_agilent/test_agilent_33220a.py
  function test_agilent33220a_amplitude (line 21) | def test_agilent33220a_amplitude():
  function test_agilent33220a_frequency (line 39) | def test_agilent33220a_frequency():
  function test_agilent33220a_function (line 47) | def test_agilent33220a_function():
  function test_agilent33220a_offset (line 55) | def test_agilent33220a_offset():
  function test_agilent33220a_duty_cycle (line 67) | def test_agilent33220a_duty_cycle():
  function test_agilent33220a_ramp_symmetry (line 79) | def test_agilent33220a_ramp_symmetry():
  function test_agilent33220a_output (line 91) | def test_agilent33220a_output():
  function test_agilent33220a_output_sync (line 103) | def test_agilent33220a_output_sync():
  function test_agilent33220a_output_polarity (line 115) | def test_agilent33220a_output_polarity():
  function test_agilent33220a_load_resistance (line 127) | def test_agilent33220a_load_resistance():
  function test_agilent33220a_load_resistance_value_invalid (line 140) | def test_agilent33220a_load_resistance_value_invalid(value):
  function test_phase_not_implemented_error (line 149) | def test_phase_not_implemented_error():

FILE: tests/test_agilent/test_agilent_34410a.py
  function test_agilent34410a_read (line 20) | def test_agilent34410a_read():
  function test_agilent34410a_data_point_count (line 29) | def test_agilent34410a_data_point_count():
  function test_agilent34410a_init (line 42) | def test_agilent34410a_init():
  function test_agilent34410a_abort (line 48) | def test_agilent34410a_abort():
  function test_agilent34410a_clear_memory (line 54) | def test_agilent34410a_clear_memory():
  function test_agilent34410a_r (line 60) | def test_agilent34410a_r():
  function test_agilent34410a_r_count_zero (line 77) | def test_agilent34410a_r_count_zero():
  function test_agilent34410a_r_type_error (line 95) | def test_agilent34410a_r_type_error():
  function test_agilent34410a_fetch (line 113) | def test_agilent34410a_fetch():
  function test_agilent34410a_read_data (line 126) | def test_agilent34410a_read_data():
  function test_agilent34410a_read_data_count_minus_one (line 137) | def test_agilent34410a_read_data_count_minus_one():
  function test_agilent34410a_read_data_type_error (line 154) | def test_agilent34410a_read_data_type_error():
  function test_agilent34410a_read_data_nvmem (line 164) | def test_agilent34410a_read_data_nvmem():
  function test_agilent34410a_read_last_data (line 178) | def test_agilent34410a_read_last_data():
  function test_agilent34410a_read_last_data_na (line 191) | def test_agilent34410a_read_last_data_na():

FILE: tests/test_aimtti/test_aimttiel302p.py
  function test_channel (line 17) | def test_channel():
  function test_current (line 23) | def test_current():
  function test_current_sense (line 31) | def test_current_sense():
  function test_error (line 38) | def test_error():
  function test_mode (line 45) | def test_mode():
  function test_name (line 50) | def test_name():
  function test_off (line 57) | def test_off():
  function test_on (line 65) | def test_on():
  function test_reset (line 73) | def test_reset():
  function test_voltage (line 78) | def test_voltage():
  function test_voltage_sense (line 86) | def test_voltage_sense():

FILE: tests/test_base_instrument.py
  function test_instrument_binblockread (line 47) | def test_instrument_binblockread():
  function test_instrument_binblockread_two_reads (line 63) | def test_instrument_binblockread_two_reads():
  function test_instrument_binblockread_too_many_reads (line 80) | def test_instrument_binblockread_too_many_reads():
  function test_instrument_binblockread_bad_block_start (line 91) | def test_instrument_binblockread_bad_block_start():
  function test_instrument_open_tcpip (line 104) | def test_instrument_open_tcpip(mock_socket, mock_socket_comm):
  function test_instrument_open_tcpip_auth_not_implemented (line 116) | def test_instrument_open_tcpip_auth_not_implemented():
  function test_instrument_open_tcpip_passing_on_auth (line 126) | def test_instrument_open_tcpip_passing_on_auth(
  function test_instrument_open_serial (line 148) | def test_instrument_open_serial(mock_serial_manager):
  class fake_serial (line 162) | class fake_serial:
    method __init__ (line 169) | def __init__(self, device, baudrate=None, timeout=None, writeTimeout=N...
    method isOpen (line 172) | def isOpen(self):
  function fake_comports (line 182) | def fake_comports():
  function test_instrument_open_serial_by_usb_ids (line 200) | def test_instrument_open_serial_by_usb_ids(mock_serial_manager):
  function test_instrument_open_serial_by_usb_ids_and_serial_number (line 214) | def test_instrument_open_serial_by_usb_ids_and_serial_number(mock_serial...
  function test_instrument_open_serial_by_usb_ids_multiple_matches (line 228) | def test_instrument_open_serial_by_usb_ids_multiple_matches(_, mock_comp...
  function test_instrument_open_serial_by_usb_ids_incorrect_serial_num (line 247) | def test_instrument_open_serial_by_usb_ids_incorrect_serial_num(mock_ser...
  function test_instrument_open_serial_by_usb_ids_cant_find (line 257) | def test_instrument_open_serial_by_usb_ids_cant_find(mock_serial_manager):
  function test_instrument_open_serial_no_port (line 267) | def test_instrument_open_serial_no_port(mock_serial_manager):
  function test_instrument_open_serial_by_usb_ids_and_port (line 277) | def test_instrument_open_serial_by_usb_ids_and_port(mock_serial_manager):
  function test_instrument_open_serial_by_usb_vid_no_pid (line 287) | def test_instrument_open_serial_by_usb_vid_no_pid(mock_serial_manager):
  function test_instrument_open_serial_by_usb_pid_no_vid (line 297) | def test_instrument_open_serial_by_usb_pid_no_vid(mock_serial_manager):
  function test_instrument_open_gpibusb (line 310) | def test_instrument_open_gpibusb(mock_serial_manager, mock_gpib_comm):
  function test_instrument_open_gpibethernet (line 331) | def test_instrument_open_gpibethernet(mock_socket_manager, mock_gpib_comm):
  function test_instrument_open_visa_new_version (line 346) | def test_instrument_open_visa_new_version(mock_visa, mock_visa_comm):
  function test_instrument_open_visa_old_version (line 361) | def test_instrument_open_visa_old_version(mock_visa, mock_visa_comm):
  function test_instrument_open_test (line 372) | def test_instrument_open_test():
  function test_instrument_open_vxi11 (line 386) | def test_instrument_open_vxi11(mock_vxi11_comm):
  function test_instrument_open_usb (line 398) | def test_instrument_open_usb(mock_usb, mock_usb_comm):
  function test_instrument_open_usb_no_device (line 416) | def test_instrument_open_usb_no_device(mock_usb):
  function test_instrument_open_usbtmc (line 426) | def test_instrument_open_usbtmc(mock_usbtmc_comm):
  function test_instrument_open_file (line 437) | def test_instrument_open_file(mock_file_comm):
  function test_instrument_open_from_uri_serial (line 451) | def test_instrument_open_from_uri_serial(mock_open_conn):
  function test_instrument_open_from_uri_serial_with_baud (line 458) | def test_instrument_open_from_uri_serial_with_baud(mock_open_conn):
  function test_instrument_open_from_uri_tcpip (line 465) | def test_instrument_open_from_uri_tcpip(mock_open_conn):
  function test_instrument_open_from_uri_gpibusb (line 472) | def test_instrument_open_from_uri_gpibusb(mock_open_conn):
  function test_instrument_open_from_uri_gpibserial (line 479) | def test_instrument_open_from_uri_gpibserial(mock_open_conn):
  function test_instrument_open_from_uri_visa (line 486) | def test_instrument_open_from_uri_visa(mock_open_conn):
  function test_instrument_open_from_uri_usbtmc (line 493) | def test_instrument_open_from_uri_usbtmc(mock_open_conn):
  function test_instrument_open_from_uri_file (line 500) | def test_instrument_open_from_uri_file(mock_open_conn):
  function test_instrument_open_from_uri_vxi11 (line 507) | def test_instrument_open_from_uri_vxi11(mock_open_conn):
  function test_instrument_open_from_uri_invalid_scheme (line 513) | def test_instrument_open_from_uri_invalid_scheme():
  function test_instrument_context_manager (line 519) | def test_instrument_context_manager(mock_close: mock.Mock):
  function test_instrument_init_bad_filelike (line 528) | def test_instrument_init_bad_filelike():
  function test_instrument_init (line 533) | def test_instrument_init():
  function test_instrument_init_loopbackcomm (line 544) | def test_instrument_init_loopbackcomm():
  function test_instrument_default_ack_expected (line 555) | def test_instrument_default_ack_expected():
  function test_instrument_sendcmd_noack_noprompt (line 564) | def test_instrument_sendcmd_noack_noprompt():
  function test_instrument_sendcmd_noprompt (line 574) | def test_instrument_sendcmd_noprompt():
  function test_instrument_sendcmd_noprompt_multiple_ack (line 590) | def test_instrument_sendcmd_noprompt_multiple_ack():
  function test_instrument_sendcmd_bad_ack (line 606) | def test_instrument_sendcmd_bad_ack():
  function test_instrument_sendcmd_noack (line 621) | def test_instrument_sendcmd_noack():
  function test_instrument_sendcmd_noack_bad_prompt (line 634) | def test_instrument_sendcmd_noack_bad_prompt():
  function test_instrument_sendcmd (line 646) | def test_instrument_sendcmd():
  function test_instrument_query_noack_noprompt (line 665) | def test_instrument_query_noack_noprompt():
  function test_instrument_query_noprompt (line 676) | def test_instrument_query_noprompt():
  function test_instrument_query_noprompt_multiple_ack (line 700) | def test_instrument_query_noprompt_multiple_ack():
  function test_instrument_query_bad_ack (line 725) | def test_instrument_query_bad_ack():
  function test_instrument_query_noack (line 740) | def test_instrument_query_noack():
  function test_instrument_query_noack_bad_prompt (line 762) | def test_instrument_query_noack_bad_prompt():
  function test_instrument_query (line 775) | def test_instrument_query():
  function test_instrument_read (line 806) | def test_instrument_read():
  function test_instrument_write (line 822) | def test_instrument_write():
  function test_instrument_timeout (line 834) | def test_instrument_timeout():
  function test_instrument_address (line 848) | def test_instrument_address():
  function test_instrument_terminator (line 862) | def test_instrument_terminator():
  function test_instrument_prompt (line 876) | def test_instrument_prompt():

FILE: tests/test_comet/test_cito_plus_1310.py
  function add_checksum (line 13) | def add_checksum(data: bytes) -> bytes:
  function test_name (line 22) | def test_name():
  function test_forward_power (line 41) | def test_forward_power():
  function test_load_power (line 56) | def test_load_power():
  function test_output_power (line 71) | def test_output_power():
  function test_output_power_smaller_one (line 96) | def test_output_power_smaller_one(pow):
  function test_reflected_power (line 109) | def test_reflected_power():
  function test_regulation_mode (line 124) | def test_regulation_mode():
  function test_rf (line 159) | def test_rf():
  function test_checksum_error_return_package (line 193) | def test_checksum_error_return_package():
  function test_unknown_parameter (line 210) | def test_unknown_parameter():
  function test_write_answer_package_no_match (line 227) | def test_write_answer_package_no_match():
  function test_crc16 (line 251) | def test_crc16(inp_out):

FILE: tests/test_comm/test_file.py
  function test_filecomm_init (line 21) | def test_filecomm_init():
  function test_filecomm_address_getter (line 27) | def test_filecomm_address_getter():
  function test_filecomm_address_getter_no_name (line 38) | def test_filecomm_address_getter_no_name():
  function test_filecomm_address_setter (line 47) | def test_filecomm_address_setter():
  function test_filecomm_terminator (line 53) | def test_filecomm_terminator():
  function test_filecomm_timeout_getter (line 65) | def test_filecomm_timeout_getter():
  function test_filecomm_timeout_setter (line 71) | def test_filecomm_timeout_setter():
  function test_filecomm_close (line 77) | def test_filecomm_close():
  function test_filecomm_read_raw (line 84) | def test_filecomm_read_raw():
  function test_filecomm_write_raw (line 97) | def test_filecomm_write_raw():
  function test_filecomm_sendcmd (line 104) | def test_filecomm_sendcmd():
  function test_filecomm_query (line 111) | def test_filecomm_query():
  function test_filecomm_seek (line 119) | def test_filecomm_seek():
  function test_filecomm_tell (line 125) | def test_filecomm_tell():
  function test_filecomm_flush_input (line 133) | def test_filecomm_flush_input():

FILE: tests/test_comm/test_gpibusb.py
  function test_gpibusbcomm_init (line 22) | def test_gpibusbcomm_init():
  function test_gpibusbcomm_init_correct_values_new_firmware (line 30) | def test_gpibusbcomm_init_correct_values_new_firmware():
  function test_gpibusbcomm_init_correct_values_old_firmware (line 42) | def test_gpibusbcomm_init_correct_values_old_firmware():
  function test_gpibusbcomm_address (line 51) | def test_gpibusbcomm_address():
  function test_gpibusbcomm_address_out_of_range (line 72) | def test_gpibusbcomm_address_out_of_range():
  function test_gpibusbcomm_address_wrong_type (line 79) | def test_gpibusbcomm_address_wrong_type():
  function test_gpibusbcomm_eoi (line 85) | def test_gpibusbcomm_eoi():
  function test_gpibusbcomm_eoi_old_firmware (line 102) | def test_gpibusbcomm_eoi_old_firmware():
  function test_gpibusbcomm_eoi_bad_type (line 119) | def test_gpibusbcomm_eoi_bad_type():
  function test_gpibusbcomm_eos_rn (line 126) | def test_gpibusbcomm_eos_rn():
  function test_gpibusbcomm_eos_r (line 137) | def test_gpibusbcomm_eos_r():
  function test_gpibusbcomm_eos_n (line 148) | def test_gpibusbcomm_eos_n():
  function test_gpibusbcomm_eos_invalid (line 159) | def test_gpibusbcomm_eos_invalid():
  function test_gpibusbcomm_eos_old_firmware (line 166) | def test_gpibusbcomm_eos_old_firmware():
  function test_gpibusbcomm_terminator (line 176) | def test_gpibusbcomm_terminator():
  function test_gpibusbcomm_timeout (line 193) | def test_gpibusbcomm_timeout():
  function test_gpibusbcomm_close (line 203) | def test_gpibusbcomm_close():
  function test_gpibusbcomm_read_raw (line 211) | def test_gpibusbcomm_read_raw():
  function test_gpibusbcomm_write_raw (line 220) | def test_gpibusbcomm_write_raw():
  function test_gpibusbcomm_sendcmd (line 228) | def test_gpibusbcomm_sendcmd():
  function test_gpibusbcomm_sendcmd_empty_string (line 244) | def test_gpibusbcomm_sendcmd_empty_string():
  function test_gpibusbcomm_query (line 253) | def test_gpibusbcomm_query():
  function test_gpibusbcomm_query_no_question_mark (line 268) | def test_gpibusbcomm_query_no_question_mark():
  function test_serialcomm_flush_input (line 282) | def test_serialcomm_flush_input():

FILE: tests/test_comm/test_loopback.py
  function test_loopbackcomm_init (line 19) | def test_loopbackcomm_init():
  function test_loopbackcomm_address (line 28) | def test_loopbackcomm_address(mock_sys):
  function test_loopbackcomm_terminator (line 39) | def test_loopbackcomm_terminator():
  function test_loopbackcomm_timeout (line 58) | def test_loopbackcomm_timeout():
  function test_loopbackcomm_close (line 67) | def test_loopbackcomm_close():
  function test_loopbackcomm_read_raw (line 75) | def test_loopbackcomm_read_raw():
  function test_loopbackcomm_read_raw_2char_terminator (line 89) | def test_loopbackcomm_read_raw_2char_terminator():
  function test_loopbackcomm_read_raw_terminator_is_empty_string (line 100) | def test_loopbackcomm_read_raw_terminator_is_empty_string():
  function test_loopbackcomm_read_raw_size_invalid (line 111) | def test_loopbackcomm_read_raw_size_invalid():
  function test_loopbackcomm_read_raw_stdin (line 120) | def test_loopbackcomm_read_raw_stdin(mock_input):
  function test_loopbackcomm_write_raw (line 126) | def test_loopbackcomm_write_raw():
  function test_loopbackcomm_sendcmd (line 133) | def test_loopbackcomm_sendcmd():
  function test_loopbackcomm_query (line 145) | def test_loopbackcomm_query():
  function test_loopbackcomm_seek (line 158) | def test_loopbackcomm_seek():
  function test_loopbackcomm_tell (line 164) | def test_loopbackcomm_tell():
  function test_loopbackcomm_flush_input (line 170) | def test_loopbackcomm_flush_input():

FILE: tests/test_comm/test_serial.py
  function test_serialcomm_init (line 22) | def test_serialcomm_init():
  function test_serialcomm_init_wrong_filelike (line 27) | def test_serialcomm_init_wrong_filelike():
  function test_serialcomm_address (line 32) | def test_serialcomm_address():
  function test_serialcomm_terminator (line 45) | def test_serialcomm_terminator():
  function test_serialcomm_timeout (line 59) | def test_serialcomm_timeout():
  function test_serialcomm_parity (line 76) | def test_serialcomm_parity():
  function test_serialcomm_close (line 86) | def test_serialcomm_close():
  function test_serialcomm_read_raw (line 95) | def test_serialcomm_read_raw():
  function test_loopbackcomm_read_raw_2char_terminator (line 109) | def test_loopbackcomm_read_raw_2char_terminator():
  function test_serialcomm_read_raw_timeout (line 120) | def test_serialcomm_read_raw_timeout():
  function test_serialcomm_write_raw (line 129) | def test_serialcomm_write_raw():
  function test_serialcomm_sendcmd (line 137) | def test_serialcomm_sendcmd():
  function test_serialcomm_query (line 145) | def test_serialcomm_query():
  function test_serialcomm_seek (line 159) | def test_serialcomm_seek():
  function test_serialcomm_tell (line 165) | def test_serialcomm_tell():
  function test_serialcomm_flush_input (line 171) | def test_serialcomm_flush_input():

FILE: tests/test_comm/test_socket.py
  function test_socketcomm_init (line 23) | def test_socketcomm_init():
  function test_socketcomm_init_wrong_filelike (line 30) | def test_socketcomm_init_wrong_filelike():
  function test_socketcomm_address (line 35) | def test_socketcomm_address():
  function test_socketcomm_address_setting (line 44) | def test_socketcomm_address_setting():
  function test_socketcomm_terminator (line 50) | def test_socketcomm_terminator():
  function test_socketcomm_timeout (line 69) | def test_socketcomm_timeout():
  function test_socketcomm_close (line 84) | def test_socketcomm_close():
  function test_socketcomm_read_raw (line 93) | def test_socketcomm_read_raw():
  function test_loopbackcomm_read_raw_2char_terminator (line 107) | def test_loopbackcomm_read_raw_2char_terminator():
  function test_serialcomm_read_raw_timeout (line 118) | def test_serialcomm_read_raw_timeout():
  function test_socketcomm_write_raw (line 127) | def test_socketcomm_write_raw():
  function test_socketcomm_sendcmd (line 135) | def test_socketcomm_sendcmd():
  function test_socketcomm_query (line 143) | def test_socketcomm_query():
  function test_socketcomm_seek (line 157) | def test_socketcomm_seek():
  function test_socketcomm_tell (line 163) | def test_socketcomm_tell():
  function test_socketcomm_flush_input (line 169) | def test_socketcomm_flush_input():

FILE: tests/test_comm/test_usb_communicator.py
  function dev (line 27) | def dev():
  function inst (line 36) | def inst(patch_util, dev):
  function test_init (line 42) | def test_init(usb_util, dev):
  function test_init_wrong_type (line 64) | def test_init_wrong_type():
  function test_init_no_endpoints (line 72) | def test_init_no_endpoints(dev):
  function test_address (line 83) | def test_address(inst):
  function test_terminator (line 95) | def test_terminator(inst):
  function test_terminator_wrong_type (line 102) | def test_terminator_wrong_type(inst):
  function test_timeout_get (line 114) | def test_timeout_get(val, inst):
  function test_timeout_set_unitless (line 123) | def test_timeout_set_unitless(inst):
  function test_timeout_set_minutes (line 132) | def test_timeout_set_minutes(inst):
  function test_close (line 143) | def test_close(usb_util, inst):
  function test_read_raw (line 150) | def test_read_raw(inst):
  function test_read_raw_size (line 160) | def test_read_raw_size(inst):
  function test_read_raw_termination_char_not_found (line 173) | def test_read_raw_termination_char_not_found(inst):
  function test_write_raw (line 191) | def test_write_raw(inst):
  function test_seek (line 198) | def test_seek(inst):
  function test_tell (line 204) | def test_tell(inst):
  function test_flush_input (line 210) | def test_flush_input(inst):
  function test_sendcmd (line 217) | def test_sendcmd(inst):
  function test_query (line 228) | def test_query(inst):

FILE: tests/test_comm/test_usbtmc.py
  function test_usbtmccomm_init (line 24) | def test_usbtmccomm_init(mock_usbtmc):
  function test_usbtmccomm_init_missing_module (line 30) | def test_usbtmccomm_init_missing_module():
  function test_usbtmccomm_terminator_getter (line 36) | def test_usbtmccomm_terminator_getter(mock_usbtmc):
  function test_usbtmccomm_terminator_setter (line 47) | def test_usbtmccomm_terminator_setter(mock_usbtmc):
  function test_usbtmccomm_timeout (line 63) | def test_usbtmccomm_timeout(mock_usbtmc):
  function test_usbtmccomm_close (line 80) | def test_usbtmccomm_close(mock_usbtmc):
  function test_usbtmccomm_read_raw (line 88) | def test_usbtmccomm_read_raw(mock_usbtmc):
  function test_usbtmccomm_write_raw (line 102) | def test_usbtmccomm_write_raw(mock_usbtmc):
  function test_usbtmccomm_sendcmd (line 110) | def test_usbtmccomm_sendcmd(mock_usbtmc):
  function test_usbtmccomm_query (line 119) | def test_usbtmccomm_query(mock_usbtmc):
  function test_usbtmccomm_seek (line 131) | def test_usbtmccomm_seek(mock_usbtmc):
  function test_usbtmccomm_tell (line 138) | def test_usbtmccomm_tell(mock_usbtmc):
  function test_usbtmccomm_flush_input (line 145) | def test_usbtmccomm_flush_input(mock_usbtmc):

FILE: tests/test_comm/test_visa_communicator.py
  function visa_inst (line 22) | def visa_inst():
  function test_visacomm_init (line 28) | def test_visacomm_init(visa_inst):
  function test_visacomm_init_wrong_type (line 36) | def test_visacomm_init_wrong_type():
  function test_visacomm_address (line 44) | def test_visacomm_address(visa_inst):
  function test_visacomm_read_termination_not_string (line 54) | def test_visacomm_read_termination_not_string(visa_inst):
  function test_visacomm_terminator (line 61) | def test_visacomm_terminator(visa_inst):
  function test_visacomm_terminator_not_string (line 71) | def test_visacomm_terminator_not_string(visa_inst):
  function test_visacomm_timeout (line 80) | def test_visacomm_timeout(visa_inst):
  function test_visacomm_write_termination_not_string (line 89) | def test_visacomm_write_termination_not_string(visa_inst):
  function test_visacomm_close (line 96) | def test_visacomm_close(visa_inst, mocker):
  function test_visacomm_read_raw (line 106) | def test_visacomm_read_raw(visa_inst, mocker):
  function test_visacomm_read_raw_size (line 115) | def test_visacomm_read_raw_size(visa_inst, mocker):
  function test_visacomm_read_raw_wrong_size (line 126) | def test_visacomm_read_raw_wrong_size(visa_inst):
  function test_visacomm_write_raw (line 137) | def test_visacomm_write_raw(visa_inst, mocker):
  function test_visacomm_seek_not_implemented (line 146) | def test_visacomm_seek_not_implemented(visa_inst):
  function test_visacomm_tell_not_implemented (line 153) | def test_visacomm_tell_not_implemented(visa_inst):
  function test_visacomm_sendcmd (line 160) | def test_visacomm_sendcmd(visa_inst, mocker):
  function test_visacomm_query (line 169) | def test_visacomm_query(visa_inst, mocker):

FILE: tests/test_comm/test_vxi11.py
  function test_vxi11comm_init (line 22) | def test_vxi11comm_init(mock_vxi11):
  function test_vxi11comm_init_no_vxi11 (line 28) | def test_vxi11comm_init_no_vxi11():
  function test_vxi11comm_address (line 34) | def test_vxi11comm_address(mock_vxi11):
  function test_vxi11comm_terminator (line 52) | def test_vxi11comm_terminator(mock_vxi11):
  function test_vxi11comm_timeout (line 66) | def test_vxi11comm_timeout(mock_vxi11):
  function test_vxi11comm_close (line 80) | def test_vxi11comm_close(mock_vxi11):
  function test_vxi11comm_close_fail (line 88) | def test_vxi11comm_close_fail(mock_vxi11):
  function test_vxi11comm_read (line 97) | def test_vxi11comm_read(mock_vxi11):
  function test_vxi11comm_write (line 109) | def test_vxi11comm_write(mock_vxi11):
  function test_vxi11comm_sendcmd (line 117) | def test_vxi11comm_sendcmd(mock_vxi11):
  function test_vxi11comm_query (line 125) | def test_vxi11comm_query(mock_vxi11):
  function test_vxi11comm_seek (line 137) | def test_vxi11comm_seek(mock_vxi11):
  function test_vxi11comm_tell (line 144) | def test_vxi11comm_tell(mock_vxi11):
  function test_vxi11comm_flush (line 151) | def test_vxi11comm_flush(mock_vxi11):

FILE: tests/test_config.py
  function test_load_test_instrument (line 24) | def test_load_test_instrument():
  function test_load_test_instrument_from_file (line 34) | def test_load_test_instrument_from_file(tmp_path):
  function test_load_test_instrument_subtree (line 46) | def test_load_test_instrument_subtree():
  function test_yaml_quantity_tag (line 57) | def test_yaml_quantity_tag():
  function test_load_test_instrument_setattr (line 70) | def test_load_test_instrument_setattr():
  function test_load_test_instrument_oserror (line 82) | def test_load_test_instrument_oserror(mocker):

FILE: tests/test_delta_elektronika/test_psc_eth.py
  function test_current_limit (line 17) | def test_current_limit():
  function test_voltage_limit (line 34) | def test_voltage_limit():
  function test_current (line 51) | def test_current():
  function test_current_max (line 64) | def test_current_max():
  function test_current_measure (line 77) | def test_current_measure():
  function test_current_stepsize (line 89) | def test_current_stepsize():
  function test_voltage (line 101) | def test_voltage():
  function test_voltage_max (line 114) | def test_voltage_max():
  function test_voltage_measure (line 127) | def test_voltage_measure():
  function test_voltage_stepsize (line 139) | def test_voltage_stepsize():
  function test_recall (line 154) | def test_recall():
  function test_reset (line 165) | def test_reset():
  function test_save (line 176) | def test_save():
  function test_set_current_limit (line 187) | def test_set_current_limit():
  function test_set_current_limit_invalid_type (line 199) | def test_set_current_limit_invalid_type():
  function test_set_voltage_limit (line 211) | def test_set_voltage_limit():
  function test_set_voltage_limit_invalid_type (line 223) | def test_set_voltage_limit_invalid_type():

FILE: tests/test_dressler/test_cesar_1312.py
  function test_address (line 21) | def test_address():
  function test_retries (line 38) | def test_retries():
  function test_control_mode (line 57) | def test_control_mode():
  function test_name (line 89) | def test_name():
  function test_output_power (line 118) | def test_output_power():
  function test_regulation_mode (line 149) | def test_regulation_mode():
  function test_reflected_power (line 181) | def test_reflected_power():
  function test_rf (line 197) | def test_rf():
  function test_rf_cmd_invalid (line 236) | def test_rf_cmd_invalid():
  function test_rf_reply_invalid (line 256) | def test_rf_reply_invalid():
  function test_unknown_command (line 280) | def test_unknown_command():
  function test_device_returns_no_data (line 301) | def test_device_returns_no_data():
  function test_answer_longer_six_bytes (line 322) | def test_answer_longer_six_bytes():
  function test_make_pkg (line 353) | def test_make_pkg():
  function test_make_pkg_error (line 405) | def test_make_pkg_error():
  function test_checksum (line 421) | def test_checksum(values):
  function test_pack_header (line 440) | def test_pack_header(addr, data_length):
  function test_unpack_header (line 456) | def test_unpack_header(hdr_int):
  function checksum (line 470) | def checksum(values: bytes) -> bytes:

FILE: tests/test_fluke/test_fluke3000.py
  function test_mode (line 86) | def test_mode():
  function test_mode_key_error (line 101) | def test_mode_key_error():
  function test_trigger_mode_attribute_error (line 114) | def test_trigger_mode_attribute_error():
  function test_relative_attribute_error (line 125) | def test_relative_attribute_error():
  function test_input_range_attribute_error (line 136) | def test_input_range_attribute_error():
  function test_connect (line 150) | def test_connect():
  function test_connect_no_modules_available (line 178) | def test_connect_no_modules_available():
  function test_scan (line 189) | def test_scan():
  function test_scan_module_not_implemented (line 197) | def test_scan_module_not_implemented():
  function test_reset (line 212) | def test_reset():
  function test_flush (line 229) | def test_flush(mocker):
  function test_measure (line 246) | def test_measure():
  function test_measure_invalid_mode (line 264) | def test_measure_invalid_mode():
  function test_measure_no_module_with_mode (line 276) | def test_measure_no_module_with_mode():
  function test_measure_inconsistent_answer (line 294) | def test_measure_inconsistent_answer(mocker):
  function test_parse_ph_not_in_result (line 337) | def test_parse_ph_not_in_result():
  function test_parse_wrong_mode (line 352) | def test_parse_wrong_mode():
  function test_parse_factor_wrong_code (line 371) | def test_parse_factor_wrong_code():

FILE: tests/test_generic_scpi/test_scpi_function_generator.py
  function test_scpi_func_gen_amplitude (line 20) | def test_scpi_func_gen_amplitude():
  function test_scpi_func_gen_frequency (line 43) | def test_scpi_func_gen_frequency():
  function test_scpi_func_gen_function (line 57) | def test_scpi_func_gen_function():
  function test_scpi_func_gen_offset (line 68) | def test_scpi_func_gen_offset():
  function test_scpi_func_gen_phase (line 84) | def test_scpi_func_gen_phase():

FILE: tests/test_generic_scpi/test_scpi_instrument.py
  function test_scpi_instrument_scpi_version (line 22) | def test_scpi_instrument_scpi_version():
  function test_scpi_instrument_op_complete (line 32) | def test_scpi_instrument_op_complete(retval):
  function test_scpi_instrument_power_on_status_off (line 41) | def test_scpi_instrument_power_on_status_off(retval):
  function test_scpi_instrument_power_on_status_on (line 51) | def test_scpi_instrument_power_on_status_on(retval):
  function test_scpi_instrument_power_on_status_value_error (line 60) | def test_scpi_instrument_power_on_status_value_error():
  function test_scpi_instrument_self_test_ok (line 67) | def test_scpi_instrument_self_test_ok():
  function test_scpi_instrument_reset (line 76) | def test_scpi_instrument_reset():
  function test_scpi_instrument_clear (line 82) | def test_scpi_instrument_clear():
  function test_scpi_instrument_trigger (line 88) | def test_scpi_instrument_trigger():
  function test_scpi_instrument_wait_to_continue (line 94) | def test_scpi_instrument_wait_to_continue():
  function test_scpi_instrument_line_frequency (line 100) | def test_scpi_instrument_line_frequency():
  function test_scpi_instrument_check_error_queue (line 121) | def test_scpi_instrument_check_error_queue():
  function test_scpi_instrument_display_brightness (line 138) | def test_scpi_instrument_display_brightness(val):
  function test_scpi_instrument_display_brightness_invalid_value (line 156) | def test_scpi_instrument_display_brightness_invalid_value(val):
  function test_scpi_instrument_display_contrast (line 166) | def test_scpi_instrument_display_contrast(val):
  function test_scpi_instrument_display_contrast_invalid_value (line 184) | def test_scpi_instrument_display_contrast_invalid_value(val):

FILE: tests/test_generic_scpi/test_scpi_multimeter.py
  function test_scpi_multimeter_mode (line 20) | def test_scpi_multimeter_mode():
  function test_scpi_multimeter_trigger_mode (line 30) | def test_scpi_multimeter_trigger_mode():
  function test_scpi_multimeter_input_range (line 38) | def test_scpi_multimeter_input_range():
  function test_scpi_multimeter_resolution (line 62) | def test_scpi_multimeter_resolution():
  function test_scpi_multimeter_resolution_type_error (line 86) | def test_scpi_multimeter_resolution_type_error():
  function test_scpi_multimeter_trigger_count (line 101) | def test_scpi_multimeter_trigger_count():
  function test_scpi_multimeter_trigger_count_type_error (line 116) | def test_scpi_multimeter_trigger_count_type_error():
  function test_scpi_multimeter_sample_count (line 129) | def test_scpi_multimeter_sample_count():
  function test_scpi_multimeter_sample_count_type_error (line 144) | def test_scpi_multimeter_sample_count_type_error():
  function test_scpi_multimeter_trigger_delay (line 157) | def test_scpi_multimeter_trigger_delay():
  function test_scpi_multimeter_sample_source (line 172) | def test_scpi_multimeter_sample_source():
  function test_scpi_multimeter_sample_timer (line 187) | def test_scpi_multimeter_sample_timer():
  function test_scpi_multimeter_relative_not_implemented (line 202) | def test_scpi_multimeter_relative_not_implemented():
  function test_scpi_multimeter_measure (line 211) | def test_scpi_multimeter_measure():
  function test_scpi_multimeter_measure_mode_none (line 224) | def test_scpi_multimeter_measure_mode_none():
  function test_scpi_multimeter_measure_invalid_mode (line 240) | def test_scpi_multimeter_measure_invalid_mode():

FILE: tests/test_gentec_eo/test_blu.py
  function test_blu_initialization (line 24) | def test_blu_initialization():
  function test_blu_anticipation (line 39) | def test_blu_anticipation():
  function test_blu_auto_scale (line 51) | def test_blu_auto_scale():
  function test_blu_available_scales (line 63) | def test_blu_available_scales():
  function test_blu_available_scales_error (line 99) | def test_blu_available_scales_error():
  function test_blu_battery_state (line 120) | def test_blu_battery_state():
  function test_blu_current_value_watts (line 131) | def test_blu_current_value_watts():
  function test_blu_current_value_joules (line 142) | def test_blu_current_value_joules():
  function test_blu_head_type (line 153) | def test_blu_head_type():
  function test_blu_measure_mode (line 168) | def test_blu_measure_mode():
  function test_blu_new_value_ready (line 190) | def test_blu_new_value_ready():
  function test_blu_scale (line 203) | def test_blu_scale(scale):
  function test_blu_single_shot_energy_mode (line 215) | def test_blu_single_shot_energy_mode():
  function test_blu_trigger_level (line 229) | def test_blu_trigger_level():
  function test_blu_trigger_level_invalid_value (line 248) | def test_blu_trigger_level_invalid_value():
  function test_blu_usb_state (line 262) | def test_blu_usb_state():
  function test_blu_user_multiplier (line 273) | def test_blu_user_multiplier():
  function test_blu_user_offset_watts (line 285) | def test_blu_user_offset_watts():
  function test_blu_user_offset_joules (line 297) | def test_blu_user_offset_joules():
  function test_blu_user_offset_unitless (line 309) | def test_blu_user_offset_unitless():
  function test_blu_user_offset_unit_error (line 320) | def test_blu_user_offset_unit_error():
  function test_blu_version (line 332) | def test_blu_version():
  function test_blu_wavelength (line 344) | def test_blu_wavelength():
  function test_blu_wavelength_out_of_bound (line 357) | def test_blu_wavelength_out_of_bound():
  function test_blu_zero_offset (line 369) | def test_blu_zero_offset():
  function test_blu_confirm_connection (line 385) | def test_blu_confirm_connection():
  function test_blu_disconnect (line 396) | def test_blu_disconnect():
  function test_blu_scale_down (line 407) | def test_blu_scale_down():
  function test_blu_scale_up (line 418) | def test_blu_scale_up():
  function test_no_ack_query_error (line 429) | def test_no_ack_query_error(mocker):
  function test_format_eight_type (line 453) | def test_format_eight_type():
  function test_format_eight_length_values (line 463) | def test_format_eight_length_values(value):

FILE: tests/test_glassman/test_glassmanfr.py
  function set_defaults (line 19) | def set_defaults(inst):
  function test_channel (line 29) | def test_channel():
  function test_voltage (line 35) | def test_voltage():
  function test_current (line 47) | def test_current():
  function test_voltage_sense (line 59) | def test_voltage_sense():
  function test_current_sense (line 67) | def test_current_sense():
  function test_mode (line 75) | def test_mode():
  function test_output (line 86) | def test_output():
  function test_output_type_error (line 99) | def test_output_type_error():
  function test_fault (line 109) | def test_fault(value):
  function test_version (line 122) | def test_version():
  function test_device_timeout (line 129) | def test_device_timeout():
  function test_device_timeout_type_error (line 139) | def test_device_timeout_type_error():
  function test_sendcmd (line 148) | def test_sendcmd():
  function test_query (line 153) | def test_query():
  function test_query_invalid_response_code (line 162) | def test_query_invalid_response_code():
  function test_query_invalid_checksum (line 174) | def test_query_invalid_checksum():
  function test_query_error (line 187) | def test_query_error(err):
  function test_reset (line 201) | def test_reset():
  function test_set_status (line 208) | def test_set_status():
  function test_parse_invalid_response (line 222) | def test_parse_invalid_response():

FILE: tests/test_hcp/test_tc038.py
  function test_sendcmd (line 16) | def test_sendcmd():
  function test_query (line 21) | def test_query():
  function test_setpoint (line 26) | def test_setpoint():
  function test_setpoint_setter (line 34) | def test_setpoint_setter():
  function test_temperature (line 42) | def test_temperature():
  function test_monitored (line 51) | def test_monitored():
  function test_set_monitored (line 60) | def test_set_monitored():
  function test_set_monitored_wrong_input (line 69) | def test_set_monitored_wrong_input():
  function test_information (line 75) | def test_information():

FILE: tests/test_hcp/test_tc038d.py
  function test_write_multiple (line 17) | def test_write_multiple():
  function test_write_multiple_CRC_error (line 28) | def test_write_multiple_CRC_error():
  function test_write_multiple_wrong_values (line 39) | def test_write_multiple_wrong_values():
  function test_write_multiple_Value_error (line 50) | def test_write_multiple_Value_error():
  function test_read_CRC_error (line 62) | def test_read_CRC_error():
  function test_read_address_error (line 73) | def test_read_address_error():
  function test_read_elements_error (line 84) | def test_read_elements_error():
  function test_read_any_error (line 95) | def test_read_any_error():
  function test_setpoint (line 106) | def test_setpoint():
  function test_setpoint_setter (line 117) | def test_setpoint_setter():
  function test_temperature (line 127) | def test_temperature():

FILE: tests/test_holzworth/test_holzworth_hs9000.py
  function test_hs9000_name (line 20) | def test_hs9000_name():
  function test_channel_idx_list (line 30) | def test_channel_idx_list():
  function test_channel_returns_inner_class (line 42) | def test_channel_returns_inner_class():
  function test_channel_sendcmd (line 56) | def test_channel_sendcmd():
  function test_channel_query (line 64) | def test_channel_query():
  function test_channel_reset (line 74) | def test_channel_reset():
  function test_channel_recall_state (line 81) | def test_channel_recall_state():
  function test_channel_save_state (line 88) | def test_channel_save_state():
  function test_channel_temperature (line 95) | def test_channel_temperature():
  function test_channel_frequency_getter (line 106) | def test_channel_frequency_getter():
  function test_channel_frequency_setter (line 119) | def test_channel_frequency_setter():
  function test_channel_power_getter (line 130) | def test_channel_power_getter():
  function test_channel_power_setter (line 143) | def test_channel_power_setter():
  function test_channel_phase_getter (line 154) | def test_channel_phase_getter():
  function test_channel_phase_setter (line 167) | def test_channel_phase_setter():
  function test_channel_output (line 178) | def test_channel_output():
  function test_hs9000_is_ready (line 191) | def test_hs9000_is_ready():

FILE: tests/test_hp/test_hp3325a.py
  function time_mock (line 21) | def time_mock(mocker):
  function test_hp3325a_high_voltage (line 26) | def test_hp3325a_high_voltage():
  function test_hp3325a_phase (line 48) | def test_hp3325a_phase():
  function test_hp3325a_amplitude (line 60) | def test_hp3325a_amplitude():
  function test_hp3325a_frequency (line 72) | def test_hp3325a_frequency():
  function test_hp3325a_offset (line 84) | def test_hp3325a_offset():
  function test_hp3325a_commands (line 96) | def test_hp3325a_commands():

FILE: tests/test_hp/test_hp3456a.py
  function time_mock (line 22) | def time_mock(mocker):
  function test_hp3456a_trigger_mode (line 27) | def test_hp3456a_trigger_mode():
  function test_hp3456a_number_of_digits (line 40) | def test_hp3456a_number_of_digits():
  function test_hp3456a_number_of_digits_invalid (line 47) | def test_hp3456a_number_of_digits_invalid():
  function test_hp3456a_auto_range (line 55) | def test_hp3456a_auto_range():
  function test_hp3456a_number_of_readings (line 68) | def test_hp3456a_number_of_readings():
  function test_hp3456a_nplc (line 76) | def test_hp3456a_nplc():
  function test_hp3456a_nplc_invalid (line 84) | def test_hp3456a_nplc_invalid():
  function test_hp3456a_mode (line 91) | def test_hp3456a_mode():
  function test_hp3456a_math_mode (line 104) | def test_hp3456a_math_mode():
  function test_hp3456a_trigger (line 117) | def test_hp3456a_trigger():
  function test_hp3456a_fetch (line 130) | def test_hp3456a_fetch():
  function test_hp3456a_variance (line 146) | def test_hp3456a_variance():
  function test_hp3456a_count (line 159) | def test_hp3456a_count():
  function test_hp3456a_mean (line 172) | def test_hp3456a_mean():
  function test_hp3456a_delay (line 185) | def test_hp3456a_delay():
  function test_hp3456a_lower (line 193) | def test_hp3456a_lower():
  function test_hp3456a_upper (line 201) | def test_hp3456a_upper():
  function test_hp3456a_ryz (line 209) | def test_hp3456a_ryz():
  function test_hp3456a_measure (line 224) | def test_hp3456a_measure():
  function test_hp3456a_input_range (line 237) | def test_hp3456a_input_range():
  function test_hp3456a_input_range_invalid_str (line 247) | def test_hp3456a_input_range_invalid_str():
  function test_hp3456a_input_range_invalid_range (line 254) | def test_hp3456a_input_range_invalid_range():
  function test_hp3456a_input_range_bad_type (line 261) | def test_hp3456a_input_range_bad_type():
  function test_hp3456a_input_range_bad_units (line 268) | def test_hp3456a_input_range_bad_units():
  function test_hp3456a_relative (line 275) | def test_hp3456a_relative():
  function test_hp3456a_relative_bad_type (line 293) | def test_hp3456a_relative_bad_type():
  function test_hp3456a_auto_zero (line 300) | def test_hp3456a_auto_zero():
  function test_hp3456a_filter (line 317) | def test_hp3456a_filter():
  function test_hp3456a_register_read_bad_name (line 334) | def test_hp3456a_register_read_bad_name():
  function test_hp3456a_register_write_bad_name (line 341) | def test_hp3456a_register_write_bad_name():
  function test_hp3456a_register_write_bad_register (line 348) | def test_hp3456a_register_write_bad_register():

FILE: tests/test_hp/test_hp6624a.py
  function test_channel_returns_inner_class (line 23) | def test_channel_returns_inner_class():
  function test_channel_sendcmd (line 30) | def test_channel_sendcmd():
  function test_channel_sendcmd_2 (line 38) | def test_channel_sendcmd_2():
  function test_channel_query (line 46) | def test_channel_query():
  function test_mode (line 56) | def test_mode():
  function test_channel_voltage (line 66) | def test_channel_voltage():
  function test_channel_current (line 74) | def test_channel_current():
  function test_channel_voltage_sense (line 82) | def test_channel_voltage_sense():
  function test_channel_current_sense (line 87) | def test_channel_current_sense():
  function test_channel_overvoltage (line 99) | def test_channel_overvoltage():
  function test_channel_overcurrent (line 107) | def test_channel_overcurrent():
  function test_channel_output (line 113) | def test_channel_output():
  function test_channel_reset (line 119) | def test_channel_reset():
  function test_all_voltage (line 127) | def test_all_voltage():
  function test_all_voltage_wrong_length (line 153) | def test_all_voltage_wrong_length():
  function test_all_current (line 160) | def test_all_current():
  function test_all_current_wrong_length (line 186) | def test_all_current_wrong_length():
  function test_all_voltage_sense (line 193) | def test_all_voltage_sense():
  function test_all_current_sense (line 204) | def test_all_current_sense():
  function test_clear (line 215) | def test_clear():
  function test_channel_count (line 220) | def test_channel_count():
  function test_channel_count_wrong_type (line 226) | def test_channel_count_wrong_type():
  function test_channel_count_too_small (line 233) | def test_channel_count_too_small():

FILE: tests/test_hp/test_hp6632b.py
  function test_hp6632b_display_textmode (line 20) | def test_hp6632b_display_textmode():
  function test_hp6632b_display_text (line 28) | def test_hp6632b_display_text():
  function test_hp6632b_output (line 36) | def test_hp6632b_output():
  function test_hp6632b_voltage (line 42) | def test_hp6632b_voltage():
  function test_hp6632b_voltage_sense (line 48) | def test_hp6632b_voltage_sense():
  function test_hp6632b_overvoltage (line 59) | def test_hp6632b_overvoltage():
  function test_hp6632b_current (line 67) | def test_hp6632b_current():
  function test_hp6632b_current_sense (line 73) | def test_hp6632b_current_sense():
  function test_hp6632b_overcurrent (line 84) | def test_hp6632b_overcurrent():
  function test_hp6632b_current_sense_range (line 92) | def test_hp6632b_current_sense_range():
  function test_hp6632b_output_dfi_source (line 100) | def test_hp6632b_output_dfi_source():
  function test_hp6632b_output_remote_inhibit (line 108) | def test_hp6632b_output_remote_inhibit():
  function test_hp6632b_digital_function (line 116) | def test_hp6632b_digital_function():
  function test_hp6632b_digital_data (line 124) | def test_hp6632b_digital_data():
  function test_hp6632b_sense_sweep_points (line 130) | def test_hp6632b_sense_sweep_points():
  function test_hp6632b_sense_sweep_interval (line 138) | def test_hp6632b_sense_sweep_interval():
  function test_hp6632b_sense_window (line 148) | def test_hp6632b_sense_window():
  function test_hp6632b_output_protection_delay (line 156) | def test_hp6632b_output_protection_delay():
  function test_hp6632b_voltage_alc_bandwidth (line 164) | def test_hp6632b_voltage_alc_bandwidth():
  function test_hp6632b_voltage_trigger (line 175) | def test_hp6632b_voltage_trigger():
  function test_hp6632b_current_trigger (line 183) | def test_hp6632b_current_trigger():
  function test_hp6632b_init_output_trigger (line 191) | def test_hp6632b_init_output_trigger():
  function test_hp6632b_abort_output_trigger (line 202) | def test_hp6632b_abort_output_trigger():
  function test_line_frequency (line 213) | def test_line_frequency():
  function test_display_brightness (line 222) | def test_display_brightness():
  function test_display_contrast (line 231) | def test_display_contrast():
  function test_hp6632b_check_error_queue (line 240) | def test_hp6632b_check_error_queue():

FILE: tests/test_hp/test_hp6652a.py
  function test_name (line 16) | def test_name():
  function test_mode (line 23) | def test_mode():
  function test_reset (line 32) | def test_reset():
  function test_display_text (line 37) | def test_display_text():
  function test_channel (line 45) | def test_channel():

FILE: tests/test_hp/test_hpe3631a.py
  function time_mock (line 21) | def time_mock(mocker):
  function test_channel (line 26) | def test_channel():
  function test_channelid (line 38) | def test_channelid():
  function test_mode (line 49) | def test_mode():
  function test_voltage (line 58) | def test_voltage():
  function test_voltage_range_negative (line 95) | def test_voltage_range_negative():
  function test_current (line 110) | def test_current():
  function test_voltage_sense (line 150) | def test_voltage_sense():
  function test_current_sense (line 157) | def test_current_sense():

FILE: tests/test_keithley/test_keithley195.py
  function init (line 31) | def init():
  function statusword (line 37) | def statusword():
  function test_keithley195_mode (line 80) | def test_keithley195_mode(init, statusword):
  function test_keithley195_mode_string (line 89) | def test_keithley195_mode_string(init, statusword):
  function test_keithley195_mode_type_error (line 98) | def test_keithley195_mode_type_error(init):
  function test_keithley195_trigger_mode (line 111) | def test_keithley195_trigger_mode(init, statusword):
  function test_keithley195_trigger_mode_string (line 120) | def test_keithley195_trigger_mode_string(init, statusword):
  function test_keithley195_trigger_mode_type_error (line 129) | def test_keithley195_trigger_mode_type_error(init):
  function test_keithley195_relative (line 142) | def test_keithley195_relative(init, statusword):
  function test_keithley195_relative_type_error (line 152) | def test_keithley195_relative_type_error(init):
  function test_keithley195_input_range (line 170) | def test_keithley195_input_range(init, statusword, range):
  function test_keithley195_input_range_auto (line 202) | def test_keithley195_input_range_auto(init, statusword):
  function test_keithley195_input_range_set_wrong_string (line 215) | def test_keithley195_input_range_set_wrong_string(init):
  function test_keithley195_input_range_set_wrong_range (line 228) | def test_keithley195_input_range_set_wrong_range(init, statusword):
  function test_keithley195_input_range_set_wrong_type (line 242) | def test_keithley195_input_range_set_wrong_type(init, statusword):
  function test_measure_mode_is_none (line 259) | def test_measure_mode_is_none(init, statusword, value):
  function test_measure_mode_is_current (line 269) | def test_measure_mode_is_current(init, statusword):
  function test_measure_new_mode (line 280) | def test_measure_new_mode(init, statusword, mocker):
  function test_parse_status_word_value_error (line 304) | def test_parse_status_word_value_error(init):
  function test_trigger (line 324) | def test_trigger(init):
  function test_auto_range (line 330) | def test_auto_range(init):

FILE: tests/test_keithley/test_keithley2182.py
  function test_channel (line 22) | def test_channel():
  function test_channel_mode (line 27) | def test_channel_mode():
  function test_channel_trigger_mode (line 43) | def test_channel_trigger_mode():
  function test_channel_relative (line 53) | def test_channel_relative():
  function test_channel_input_range (line 63) | def test_channel_input_range():
  function test_channel_measure_mode_not_none (line 73) | def test_channel_measure_mode_not_none():
  function test_channel_measure_voltage (line 81) | def test_channel_measure_voltage():
  function test_channel_measure_temperature (line 94) | def test_channel_measure_temperature():
  function test_channel_measure_unknown_temperature_units (line 104) | def test_channel_measure_unknown_temperature_units():
  function test_units (line 113) | def test_units():
  function test_fetch (line 133) | def test_fetch():
  function test_measure (line 150) | def test_measure():
  function test_measure_invalid_mode (line 163) | def test_measure_invalid_mode():
  function test_relative_get (line 170) | def test_relative_get():
  function test_relative_set_already_enabled (line 179) | def test_relative_set_already_enabled():
  function test_relative_set_start_disabled (line 197) | def test_relative_set_start_disabled():
  function test_relative_set_wrong_type (line 215) | def test_relative_set_wrong_type():
  function test_input_range (line 222) | def test_input_range():

FILE: tests/test_keithley/test_keithley485.py
  function test_zero_check (line 20) | def test_zero_check():
  function test_log (line 33) | def test_log():
  function test_input_range (line 46) | def test_input_range():
  function test_relative (line 55) | def test_relative():
  function test_eoi_mode (line 68) | def test_eoi_mode():
  function test_trigger_mode (line 81) | def test_trigger_mode():
  function test_auto_range (line 98) | def test_auto_range():
  function test_input_range_value (line 107) | def test_input_range_value(newval):
  function test_input_range_quantity (line 116) | def test_input_range_quantity():
  function test_input_range_invalid_value (line 127) | def test_input_range_invalid_value():
  function test_input_range_invalid_type (line 137) | def test_input_range_invalid_type():
  function test_input_range_invalid_string (line 151) | def test_input_range_invalid_string():
  function test_get_status (line 163) | def test_get_status():
  function test_measure (line 170) | def test_measure():
  function test_get_status_word_fails (line 178) | def test_get_status_word_fails():
  function test_parse_status_word_wrong_prefix (line 191) | def test_parse_status_word_wrong_prefix():
  function test_parse_status_word_cannot_parse (line 203) | def test_parse_status_word_cannot_parse():
  function test_parse_measurement_invalid_status (line 213) | def test_parse_measurement_invalid_status():
  function test_parse_measurement_bad_status (line 227) | def test_parse_measurement_bad_status():
  function test_parse_measurement_bad_function (line 238) | def test_parse_measurement_bad_function():
  function test_parse_measurement_bad_measurement (line 252) | def test_parse_measurement_bad_measurement():

FILE: tests/test_keithley/test_keithley580.py
  function init (line 32) | def init():
  function create_statusword (line 38) | def create_statusword():
  function create_measurement (line 86) | def create_measurement():
  function mock_time (line 111) | def mock_time(mocker):
  function test_polarity (line 123) | def test_polarity(init, create_statusword, newval):
  function test_polarity_string (line 139) | def test_polarity_string(init, newval_str):
  function test_polarity_wrong_type (line 154) | def test_polarity_wrong_type(init):
  function test_drive (line 176) | def test_drive(init, create_statusword, newval):
  function test_drive_string (line 192) | def test_drive_string(init, newval_str):
  function test_drive_wrong_type (line 207) | def test_drive_wrong_type(init):
  function test_dry_circuit_test (line 229) | def test_dry_circuit_test(init, create_statusword, newval):
  function test_dry_circuit_test_wrong_type (line 242) | def test_dry_circuit_test_wrong_type(init):
  function test_operate (line 260) | def test_operate(init, create_statusword, newval):
  function test_operate_wrong_type (line 273) | def test_operate_wrong_type(init):
  function test_relative (line 291) | def test_relative(init, create_statusword, newval):
  function test_relative_wrong_type (line 304) | def test_relative_wrong_type(init):
  function test_trigger_mode_get (line 321) | def test_trigger_mode_get(init):
  function test_trigger_mode_set (line 339) | def test_trigger_mode_set(init, newval):
  function test_trigger_mode_set_string (line 348) | def test_trigger_mode_set_string(init, newval):
  function test_trigger_mode_set_type_error (line 357) | def test_trigger_mode_set_type_error(init):
  function test_input_range_float (line 372) | def test_input_range_float(init, create_statusword, newval):
  function test_input_range_auto (line 391) | def test_input_range_auto(init, create_statusword):
  function test_input_range_float_value_error (line 411) | def test_input_range_float_value_error(init, newval):
  function test_input_range_auto_value_error (line 421) | def test_input_range_auto_value_error(init):
  function test_input_range_type_error (line 435) | def test_input_range_type_error(init):
  function test_trigger (line 453) | def test_trigger(init):
  function test_auto_range (line 459) | def test_auto_range(init):
  function test_set_calibration_value (line 467) | def test_set_calibration_value(init):
  function test_store_calibration_constants (line 477) | def test_store_calibration_constants(init):
  function test_get_status_word (line 489) | def test_get_status_word(init, create_statusword, mock_time):
  function test_get_status_word_fails (line 500) | def test_get_status_word_fails(init, mock_time):
  function test_parse_status_word (line 525) | def test_parse_status_word(init, create_statusword, line_frequency):
  function test_parse_status_word_invalid_values (line 559) | def test_parse_status_word_invalid_values(
  function test_parse_status_word_invalid_prefix (line 576) | def test_parse_status_word_invalid_prefix(init):
  function test_measure (line 593) | def test_measure(init, create_measurement, resistance):
  function test_parse_measurement (line 613) | def test_parse_measurement(
  function test_parse_measurement_invalid (line 654) | def test_parse_measurement_invalid(init, create_measurement):
  function test_sendcmd (line 675) | def test_sendcmd(init):
  function test_query (line 684) | def test_query(init):

FILE: tests/test_keithley/test_keithley6220.py
  function test_channel (line 19) | def test_channel():
  function test_voltage (line 24) | def test_voltage():
  function test_current (line 37) | def test_current():
  function test_disable (line 51) | def test_disable():

FILE: tests/test_keithley/test_keithley6514.py
  function test_valid_range (line 20) | def test_valid_range():
  function test_valid_range_invalid (line 28) | def test_valid_range_invalid():
  function test_parse_measurement (line 34) | def test_parse_measurement():
  function test_mode (line 48) | def test_mode():
  function test_trigger_source (line 56) | def test_trigger_source():
  function test_arm_source (line 64) | def test_arm_source():
  function test_zero_check (line 72) | def test_zero_check():
  function test_zero_correct (line 80) | def test_zero_correct():
  function test_unit (line 88) | def test_unit():
  function test_auto_range (line 99) | def test_auto_range():
  function test_input_range (line 109) | def test_input_range():
  function test_input_range_invalid (line 124) | def test_input_range_invalid():
  function test_auto_config (line 131) | def test_auto_config():
  function test_fetch (line 142) | def test_fetch():
  function test_read (line 156) | def test_read():

FILE: tests/test_lakeshore/test_lakeshore336.py
  function test_lakeshore336_sensor_init (line 21) | def test_lakeshore336_sensor_init():
  function test_lakeshore336_sensor_temperature (line 36) | def test_lakeshore336_sensor_temperature(idx_ch):

FILE: tests/test_lakeshore/test_lakeshore340.py
  function test_lakeshore340_sensor_init (line 19) | def test_lakeshore340_sensor_init():
  function test_lakeshore340_sensor_temperature (line 33) | def test_lakeshore340_sensor_temperature():

FILE: tests/test_lakeshore/test_lakeshore370.py
  function init (line 22) | def init():
  function test_lakeshore370_channel_init (line 30) | def test_lakeshore370_channel_init(init):
  function test_lakeshore370_channel_resistance (line 44) | def test_lakeshore370_channel_resistance(init):

FILE: tests/test_lakeshore/test_lakeshore475.py
  function test_lakeshore475_field (line 20) | def test_lakeshore475_field():
  function test_lakeshore475_field_units (line 32) | def test_lakeshore475_field_units():
  function test_lakeshore475_field_units_invalid_unit (line 45) | def test_lakeshore475_field_units_invalid_unit():
  function test_lakeshore475_field_units_not_a_unit (line 60) | def test_lakeshore475_field_units_not_a_unit():
  function test_lakeshore475_temp_units (line 75) | def test_lakeshore475_temp_units():
  function test_lakeshore475_temp_units_invalid_unit (line 88) | def test_lakeshore475_temp_units_invalid_unit():
  function test_lakeshore475_temp_units_not_a_unit (line 103) | def test_lakeshore475_temp_units_not_a_unit():
  function test_lakeshore475_field_setpoint (line 118) | def test_lakeshore475_field_setpoint():
  function test_lakeshore475_field_setpoint_wrong_units (line 140) | def test_lakeshore475_field_setpoint_wrong_units():
  function test_lakeshore475_field_get_control_params (line 157) | def test_lakeshore475_field_get_control_params():
  function test_lakeshore475_field_set_control_params (line 175) | def test_lakeshore475_field_set_control_params():
  function test_lakeshore475_field_set_control_params_not_a_tuple (line 195) | def test_lakeshore475_field_set_control_params_not_a_tuple():
  function test_lakeshore475_field_set_control_params_wrong_units (line 210) | def test_lakeshore475_field_set_control_params_wrong_units():
  function test_lakeshore475_p_value (line 237) | def test_lakeshore475_p_value():
  function test_lakeshore475_i_value (line 263) | def test_lakeshore475_i_value():
  function test_lakeshore475_ramp_rate (line 289) | def test_lakeshore475_ramp_rate():
  function test_lakeshore475_control_slope_limit (line 327) | def test_lakeshore475_control_slope_limit():
  function test_lakeshore475_control_mode (line 361) | def test_lakeshore475_control_mode():
  function test_lakeshore475_change_measurement_mode (line 377) | def test_lakeshore475_change_measurement_mode():
  function test_lakeshore475_change_measurement_mode_mismatched_type (line 397) | def test_lakeshore475_change_measurement_mode_mismatched_type():
  function test_lakeshore475_change_measurement_mode_invalid_resolution (line 456) | def test_lakeshore475_change_measurement_mode_invalid_resolution():

FILE: tests/test_mettler_toledo/test_mt_sics.py
  function test_clear_tare (line 17) | def test_clear_tare():
  function test_reset (line 25) | def test_reset():
  function test_tare (line 34) | def test_tare(mode):
  function test_zero (line 50) | def test_zero(mode):
  function test_command_error_checking (line 66) | def test_command_error_checking(err):
  function test_general_error_checking (line 76) | def test_general_error_checking(err):
  function test_mt_sics (line 86) | def test_mt_sics():
  function test_mt_sics_commands (line 94) | def test_mt_sics_commands():
  function test_mt_sics_commands_timeout (line 102) | def test_mt_sics_commands_timeout(mocker):
  function test_name (line 116) | def test_name():
  function test_name_too_long (line 128) | def test_name_too_long():
  function test_serial_number (line 135) | def test_serial_number():
  function test_tare_value (line 143) | def test_tare_value():
  function test_weight (line 156) | def test_weight(mode):
  function test_weight_immediately_dynamic_mode (line 166) | def test_weight_immediately_dynamic_mode():
  function test_weight_mode_type_error (line 176) | def test_weight_mode_type_error():

FILE: tests/test_minghe/test_minghe_mhs5200a.py
  function test_mhs_amplitude (line 18) | def test_mhs_amplitude():
  function test_mhs_amplitude_dbm_notimplemented (line 31) | def test_mhs_amplitude_dbm_notimplemented():
  function test_mhs_duty_cycle (line 37) | def test_mhs_duty_cycle():
  function test_mhs_enable (line 50) | def test_mhs_enable():
  function test_mhs_frequency (line 63) | def test_mhs_frequency():
  function test_mhs_offset (line 76) | def test_mhs_offset():
  function test_mhs_phase (line 89) | def test_mhs_phase():
  function test_mhs_wave_type (line 102) | def test_mhs_wave_type():
  function test_mhs_serial_number (line 115) | def test_mhs_serial_number():
  function test_mhs_get_amplitude (line 127) | def test_mhs_get_amplitude():
  function test_mhs_set_amplitude (line 134) | def test_mhs_set_amplitude():

FILE: tests/test_named_struct.py
  class TestNamedStruct (line 22) | class TestNamedStruct(TestCase):
    method test_roundtrip (line 27) | def test_roundtrip(self, var1, var2):
    method test_str (line 36) | def test_str(self):
    method test_negative_len (line 50) | def test_negative_len(self):
    method test_equality (line 59) | def test_equality(self):

FILE: tests/test_newport/test_agilis.py
  function mock_time (line 25) | def mock_time(mocker):
  function test_aguc2_enable_remote_mode (line 33) | def test_aguc2_enable_remote_mode():
  function test_aguc2_error_previous_command_no_error (line 44) | def test_aguc2_error_previous_command_no_error():
  function test_aguc2_error_previous_command (line 50) | def test_aguc2_error_previous_command():
  function test_aguc2_firmware_version (line 60) | def test_aguc2_firmware_version():
  function test_aguc2_limit_status (line 71) | def test_aguc2_limit_status():
  function test_aguc2_sleep_time (line 81) | def test_aguc2_sleep_time():
  function test_aguc2_reset_controller (line 92) | def test_aguc2_reset_controller():
  function test_aguc2_ag_sendcmd (line 101) | def test_aguc2_ag_sendcmd():
  function test_aguc2_ag_query (line 111) | def test_aguc2_ag_query():
  function test_aguc2_ag_query_io_error (line 121) | def test_aguc2_ag_query_io_error(mocker):
  function test_aguc2_axis_init_enum (line 136) | def test_aguc2_axis_init_enum(axis):
  function test_aguc2_axis_init_wrong_type (line 143) | def test_aguc2_axis_init_wrong_type():
  function test_aguc2_axis_am_i_still (line 153) | def test_aguc2_axis_am_i_still(axis, still):
  function test_aguc2_axis_am_i_still_io_error (line 167) | def test_aguc2_axis_am_i_still_io_error():
  function test_aguc2_axis_axis_status_not_moving (line 182) | def test_aguc2_axis_axis_status_not_moving(axis):
  function test_aguc2_axis_axis_status (line 196) | def test_aguc2_axis_axis_status():
  function test_aguc2_axis_jog (line 211) | def test_aguc2_axis_jog():
  function test_aguc2_axis_number_of_steps (line 229) | def test_aguc2_axis_number_of_steps():
  function test_aguc2_axis_move_relative (line 245) | def test_aguc2_axis_move_relative():
  function test_aguc2_axis_move_to_limit (line 265) | def test_aguc2_axis_move_to_limit():
  function test_aguc2_axis_step_amplitude (line 284) | def test_aguc2_axis_step_amplitude():
  function test_aguc2_axis_step_delay (line 314) | def test_aguc2_axis_step_delay():
  function test_aguc2_axis_stop (line 333) | def test_aguc2_axis_stop():
  function test_aguc2_axis_zero_position (line 347) | def test_aguc2_axis_zero_position():
  function test_agilis_error_message (line 364) | def test_agilis_error_message():
  function test_agilis_status_message (line 384) | def test_agilis_status_message():

FILE: tests/test_newport/test_errors.py
  function test_init_none (line 19) | def test_init_none():
  function test_init_with_timestamp (line 27) | def test_init_with_timestamp():
  function test_init_with_error_code (line 34) | def test_init_with_error_code():
  function test_init_with_error_code_axis (line 42) | def test_init_with_error_code_axis():
  function test_get_message (line 50) | def test_get_message():
  function test_timestamp (line 57) | def test_timestamp():
  function test_errcode (line 63) | def test_errcode():
  function test_axis (line 69) | def test_axis():

FILE: tests/test_newport/test_newport_pmc8742.py
  function test_init (line 21) | def test_init():
  function test_controller_address (line 30) | def test_controller_address():
  function test_controller_configuration (line 39) | def test_controller_configuration():
  function test_dhcp_mode (line 53) | def test_dhcp_mode():
  function test_error_code (line 66) | def test_error_code():
  function test_error_code_and_message (line 74) | def test_error_code_and_message():
  function test_firmware_version (line 88) | def test_firmware_version():
  function test_gateway (line 96) | def test_gateway():
  function test_hostname (line 109) | def test_hostname():
  function test_ip_address (line 122) | def test_ip_address():
  function test_mac_address (line 135) | def test_mac_address():
  function test_name (line 144) | def test_name():
  function test_netmask (line 152) | def test_netmask():
  function test_scan_controller (line 165) | def test_scan_controller():
  function test_scan_done (line 173) | def test_scan_done():
  function test_abort_motion (line 182) | def test_abort_motion():
  function test_motor_check (line 190) | def test_motor_check():
  function test_scan (line 199) | def test_scan(mode):
  function test_purge (line 208) | def test_purge():
  function test_recall_parameters (line 217) | def test_recall_parameters(mode):
  function test_reset (line 226) | def test_reset():
  function test_save_settings (line 234) | def test_save_settings():
  function test_query_bad_header (line 242) | def test_query_bad_header():
  fun
Condensed preview — 347 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (2,259K chars).
[
  {
    "path": ".coveragerc",
    "chars": 347,
    "preview": "[paths]\nsource =\n    src\n    */site-packages\n\n[report]\nomit =\n    */python?.?/*\n    */site-packages/nose/*\n    *__init__"
  },
  {
    "path": ".github/workflows/deploy.yml",
    "chars": 672,
    "preview": "name: Upload Python Package\n\non:\n  release:\n    types: [published]\n\njobs:\n  deploy:\n    runs-on: ubuntu-latest\n    steps"
  },
  {
    "path": ".github/workflows/test.yml",
    "chars": 1805,
    "preview": "name: Testing\n\non:\n  push:\n    branches: [ main ]\n  pull_request:\n\njobs:\n  static-checks:\n    runs-on: ubuntu-latest\n   "
  },
  {
    "path": ".gitignore",
    "chars": 788,
    "preview": "## Temporary files ##\n*~\n*.tmp\n\n## OS generated files ##\n.DS_Store*\ndesktop.ini\nThumbs.db\n\n## Build directories ##\ndoc/_"
  },
  {
    "path": ".pre-commit-config.yaml",
    "chars": 498,
    "preview": "repos:\n  - repo: https://github.com/pre-commit/pre-commit-hooks\n    rev: v6.0.0\n    hooks:\n      - id: no-commit-to-bran"
  },
  {
    "path": ".readthedocs.yml",
    "chars": 244,
    "preview": "version: 2\nbuild:\n  os: ubuntu-24.04\n  tools:\n    python: \"3.13\"\n\nsphinx:\n  builder: html\n  configuration: doc/source/co"
  },
  {
    "path": "README.rst",
    "chars": 5992,
    "preview": "InstrumentKit\n=============\n\n.. image:: https://github.com/instrumentkit/InstrumentKit/workflows/Testing/badge.svg?branc"
  },
  {
    "path": "doc/Makefile",
    "chars": 5657,
    "preview": "# Makefile for Sphinx documentation\n#\n\n# You can set these variables from the command line.\nSPHINXOPTS    =\nSPHINXBUILD "
  },
  {
    "path": "doc/examples/.ipynb_checkpoints/ex_keithley6514-checkpoint.ipynb",
    "chars": 3538,
    "preview": "{\n \"metadata\": {\n  \"name\": \"\"\n },\n \"nbformat\": 3,\n \"nbformat_minor\": 0,\n \"worksheets\": [\n  {\n   \"cells\": [\n    {\n     \"c"
  },
  {
    "path": "doc/examples/ex_generic_scpi.ipynb",
    "chars": 2220,
    "preview": "{\n \"metadata\": {\n  \"name\": \"ex_generic_scpi\"\n },\n \"nbformat\": 3,\n \"nbformat_minor\": 0,\n \"worksheets\": [\n  {\n   \"cells\": "
  },
  {
    "path": "doc/examples/ex_generic_scpi.py",
    "chars": 1062,
    "preview": "# <nbformat>3.0</nbformat>\n\n# <headingcell level=1>\n\n# InstrumentKit Library Examples\n\n# <headingcell level=2>\n\n# Generi"
  },
  {
    "path": "doc/examples/ex_hp3325.py",
    "chars": 367,
    "preview": "import logging\n\nimport instruments as ik\n\nfcngen = ik.hp.HP3325a.open_gpibusb(\"COM4\", 17, model=\"pl\")\nlogging.basicConfi"
  },
  {
    "path": "doc/examples/ex_hp3456.out",
    "chars": 9743,
    "preview": "DEBUG:instruments.abstract_instruments.comm.gi_gpib: <- 'T4'\nDEBUG:instruments.abstract_instruments.comm.gi_gpib: <- 'W6"
  },
  {
    "path": "doc/examples/ex_hp3456.py",
    "chars": 1629,
    "preview": "#!/usr/bin/python\n\nimport logging\nimport time\nimport instruments as ik\nimport instruments.units as u\n\ndmm = ik.hp.HP3456"
  },
  {
    "path": "doc/examples/ex_keithley195.ipynb",
    "chars": 1945,
    "preview": "{\n \"metadata\": {\n  \"name\": \"ex_keithley195\"\n },\n \"nbformat\": 3,\n \"nbformat_minor\": 0,\n \"worksheets\": [\n  {\n   \"cells\": ["
  },
  {
    "path": "doc/examples/ex_keithley195.py",
    "chars": 871,
    "preview": "# <nbformat>3.0</nbformat>\n\n# <headingcell level=1>\n\n# InstrumentKit Library Examples\n\n# <headingcell level=2>\n\n# Keithl"
  },
  {
    "path": "doc/examples/ex_keithley6514.ipynb",
    "chars": 42683,
    "preview": "{\n \"metadata\": {\n  \"name\": \"\"\n },\n \"nbformat\": 3,\n \"nbformat_minor\": 0,\n \"worksheets\": [\n  {\n   \"cells\": [\n    {\n     \"c"
  },
  {
    "path": "doc/examples/ex_maui.ipynb",
    "chars": 91010,
    "preview": "{\n \"cells\": [\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# MAUI Oscilloscope controller\\n\",\n"
  },
  {
    "path": "doc/examples/ex_oscilloscope_waveform.ipynb",
    "chars": 2841,
    "preview": "{\n \"metadata\": {\n  \"name\": \"ex_oscilloscope_waveform\"\n },\n \"nbformat\": 3,\n \"nbformat_minor\": 0,\n \"worksheets\": [\n  {\n   "
  },
  {
    "path": "doc/examples/ex_oscilloscope_waveform.py",
    "chars": 1411,
    "preview": "# <nbformat>3.0</nbformat>\n\n# <headingcell level=1>\n\n# InstrumentKit Library Examples\n\n# <headingcell level=2>\n\n# Tektro"
  },
  {
    "path": "doc/examples/ex_qubitekk_gui.py",
    "chars": 7032,
    "preview": "#!/usr/bin/python\n# Qubitekk Coincidence Counter example\nimport matplotlib\n\nmatplotlib.use(\"TkAgg\")\n\nfrom matplotlib.fig"
  },
  {
    "path": "doc/examples/ex_qubitekkcc.py",
    "chars": 656,
    "preview": "#!/usr/bin/python\nfrom sys import platform as _platform\n\nimport instruments as ik\nimport instruments.units as u\n\n\ndef ma"
  },
  {
    "path": "doc/examples/ex_qubitekkcc_simple.py",
    "chars": 921,
    "preview": "#!/usr/bin/python\n# Qubitekk Coincidence Counter example\n\nfrom sys import platform as _platform\n\nimport instruments as i"
  },
  {
    "path": "doc/examples/ex_tekdpo70000.ipynb",
    "chars": 39146,
    "preview": "{\n \"metadata\": {\n  \"name\": \"\"\n },\n \"nbformat\": 3,\n \"nbformat_minor\": 0,\n \"worksheets\": [\n  {\n   \"cells\": [\n    {\n     \"c"
  },
  {
    "path": "doc/examples/ex_thorlabslcc.py",
    "chars": 299,
    "preview": "# Thorlabs Liquid Crystal Controller example\n\nimport instruments as ik\n\nlcc = ik.thorlabs.LCC25.open_serial(\"COM10\", 115"
  },
  {
    "path": "doc/examples/ex_thorlabssc10.py",
    "chars": 940,
    "preview": "# Thorlabs Shutter Controller example\n\nimport instruments as ik\n\n# if the baud mode is set to 1, then the baud rate is 1"
  },
  {
    "path": "doc/examples/ex_thorlabstc200.py",
    "chars": 942,
    "preview": "# Thorlabs Temperature Controller example\n\nimport instruments as ik\nimport instruments.units as u\n\ntc = ik.thorlabs.TC20"
  },
  {
    "path": "doc/examples/ex_topticatopmode.py",
    "chars": 1896,
    "preview": "#!/usr/bin/env python\n\"\"\"\nToptica Topmode example\n\"\"\"\n\nimport instruments as ik\nimport instruments.units as u\nfrom platf"
  },
  {
    "path": "doc/examples/example2.py",
    "chars": 793,
    "preview": "#!/usr/bin/python\n# Filename: example2.py\n\n# Example 1:\n# \t- Import required packages\n# \t- Create object for our Tek TDS"
  },
  {
    "path": "doc/examples/minghe/ex_minghe_mhs5200.py",
    "chars": 851,
    "preview": "#!/usr/bin/python\nfrom instruments.minghe import MHS5200\nimport instruments.units as u\n\nmhs = MHS5200.open_serial(vid=67"
  },
  {
    "path": "doc/examples/qubitekk/ex_qubitekk_mc1.py",
    "chars": 1149,
    "preview": "#!/usr/bin/python\n# Qubitekk Motor controller example\nfrom time import sleep\n\nfrom instruments.qubitekk import MC1\nimpor"
  },
  {
    "path": "doc/examples/srs_DG645.ipynb",
    "chars": 6842,
    "preview": "{\n \"metadata\": {\n  \"name\": \"srs_DG645\"\n },\n \"nbformat\": 3,\n \"nbformat_minor\": 0,\n \"worksheets\": [\n  {\n   \"cells\": [\n    "
  },
  {
    "path": "doc/examples/srs_DG645.py",
    "chars": 1009,
    "preview": "# <nbformat>3.0</nbformat>\n\n# <headingcell level=1>\n\n# InstrumentKit Library Examples\n\n# <headingcell level=2>\n\n# Stanfo"
  },
  {
    "path": "doc/make.bat",
    "chars": 5147,
    "preview": "@ECHO OFF\n\nREM Command file for Sphinx documentation\n\nif \"%SPHINXBUILD%\" == \"\" (\n\tset SPHINXBUILD=sphinx-build\n)\nset BUI"
  },
  {
    "path": "doc/source/acknowledgements.rst",
    "chars": 849,
    "preview": "================\nAcknowledgements\n================\n\nHere I've done my best to keep a list of all those who have made a c"
  },
  {
    "path": "doc/source/apiref/agilent.rst",
    "chars": 415,
    "preview": "..\n    TODO: put documentation license header here.\n\n.. currentmodule:: instruments.agilent\n\n=======\nAgilent\n=======\n\n:c"
  },
  {
    "path": "doc/source/apiref/aimtti.rst",
    "chars": 204,
    "preview": ".. currentmodule:: instruments.aimtti\n\n=======\nAim-TTi\n=======\n\n:class:`AimTTiEL302P` Power Supply\n====================="
  },
  {
    "path": "doc/source/apiref/comet.rst",
    "chars": 197,
    "preview": ".. currentmodule:: instruments.comet\n\n=====\nComet\n=====\n\n:class:`CitoPlus1310` RF Generator\n============================"
  },
  {
    "path": "doc/source/apiref/config.rst",
    "chars": 702,
    "preview": "==========================\nConfiguration File Support\n==========================\n\n.. currentmodule:: instruments\n\nThe `i"
  },
  {
    "path": "doc/source/apiref/delta_elektronika.rst",
    "chars": 270,
    "preview": ".. currentmodule:: instruments.delta_elektronika\n\n=================\nDelta Elektronika\n=================\n\n:class:`PscEth`"
  },
  {
    "path": "doc/source/apiref/dressler.rst",
    "chars": 193,
    "preview": ".. currentmodule:: instruments.dressler\n\n========\nDressler\n========\n\n:class:`Cesar1312` RF Generator\n==================="
  },
  {
    "path": "doc/source/apiref/fluke.rst",
    "chars": 244,
    "preview": "..\n    TODO: put documentation license header here.\n\n.. currentmodule:: instruments.fluke\n\n=====\nFluke\n=====\n\n:class:`Fl"
  },
  {
    "path": "doc/source/apiref/generic_scpi.rst",
    "chars": 831,
    "preview": "..\n    TODO: put documentation license header here.\n\n.. _apiref-generic_scpi:\n.. currentmodule:: instruments.generic_scp"
  },
  {
    "path": "doc/source/apiref/gentec-eo.rst",
    "chars": 192,
    "preview": ".. currentmodule:: instruments.gentec_eo\n\n=========\nGentec-EO\n=========\n\n:class:`Blu` Power Meter\n======================"
  },
  {
    "path": "doc/source/apiref/glassman.rst",
    "chars": 277,
    "preview": "..\n    TODO: put documentation license header here.\n\n.. currentmodule:: instruments.glassman\n\n========\nGlassman\n========"
  },
  {
    "path": "doc/source/apiref/hcp.rst",
    "chars": 369,
    "preview": "..\n    TODO: put documentation license header here.\n\n.. currentmodule:: instruments.hcp\n\n============\nHC Photonics\n====="
  },
  {
    "path": "doc/source/apiref/holzworth.rst",
    "chars": 285,
    "preview": "..\n    TODO: put documentation license header here.\n\n.. currentmodule:: instruments.holzworth\n\n=========\nHolzworth\n====="
  },
  {
    "path": "doc/source/apiref/hp.rst",
    "chars": 772,
    "preview": "..\n    TODO: put documentation license header here.\n\n.. currentmodule:: instruments.hp\n\n===============\nHewlett-Packard\n"
  },
  {
    "path": "doc/source/apiref/index.rst",
    "chars": 561,
    "preview": "..\n    TODO: put documentation license header here.\n\n.. _apiref:\n\nInstrumentKit API Reference\n=========================="
  },
  {
    "path": "doc/source/apiref/instrument.rst",
    "chars": 2582,
    "preview": "..\n    TODO: put documentation license header here.\n\n.. currentmodule:: instruments\n\n=======================\nInstrument "
  },
  {
    "path": "doc/source/apiref/keithley.rst",
    "chars": 1163,
    "preview": "..\n    TODO: put documentation license header here.\n\n.. currentmodule:: instruments.keithley\n\n========\nKeithley\n========"
  },
  {
    "path": "doc/source/apiref/lakeshore.rst",
    "chars": 753,
    "preview": "..\n    TODO: put documentation license header here.\n\n.. currentmodule:: instruments.lakeshore\n\n=========\nLakeshore\n====="
  },
  {
    "path": "doc/source/apiref/mettler_toledo.rst",
    "chars": 325,
    "preview": "..\n    TODO: put documentation license header here.\n\n.. currentmodule:: instruments.mettler_toledo\n\n==============\nMettl"
  },
  {
    "path": "doc/source/apiref/minghe.rst",
    "chars": 244,
    "preview": "..\n    TODO: put documentation license header here.\n\n.. currentmodule:: instruments.minghe\n\n======\nMinghe\n======\n\n:class"
  },
  {
    "path": "doc/source/apiref/newport.rst",
    "chars": 646,
    "preview": "..\n    TODO: put documentation license header here.\n\n.. currentmodule:: instruments.newport\n\n=======\nNewport\n=======\n\n:c"
  },
  {
    "path": "doc/source/apiref/ondax.rst",
    "chars": 243,
    "preview": "..\n    TODO: put documentation license header here.\n\n.. currentmodule:: instruments.ondax\n\n=====\nOndax\n=====\n\n:class:`LM"
  },
  {
    "path": "doc/source/apiref/oxford.rst",
    "chars": 267,
    "preview": "..\n    TODO: put documentation license header here.\n\n.. currentmodule:: instruments.oxford\n\n======\nOxford\n======\n\n:class"
  },
  {
    "path": "doc/source/apiref/pfeiffer.rst",
    "chars": 263,
    "preview": ".. currentmodule:: instruments.pfeiffer\n\n===========================\nPfeiffer Vacuum Instruments\n======================="
  },
  {
    "path": "doc/source/apiref/phasematrix.rst",
    "chars": 293,
    "preview": "..\n    TODO: put documentation license header here.\n\n.. currentmodule:: instruments.phasematrix\n\n===========\nPhaseMatrix"
  },
  {
    "path": "doc/source/apiref/picowatt.rst",
    "chars": 268,
    "preview": "..\n    TODO: put documentation license header here.\n\n.. currentmodule:: instruments.picowatt\n\n========\nPicowatt\n========"
  },
  {
    "path": "doc/source/apiref/qubitekk.rst",
    "chars": 357,
    "preview": "..\n    TODO: put documentation license header here.\n\n.. currentmodule:: instruments.qubitekk\n\n========\nQubitekk\n========"
  },
  {
    "path": "doc/source/apiref/rigol.rst",
    "chars": 258,
    "preview": "..\n    TODO: put documentation license header here.\n\n.. currentmodule:: instruments.rigol\n\n=====\nRigol\n=====\n\n:class:`Ri"
  },
  {
    "path": "doc/source/apiref/srs.rst",
    "chars": 730,
    "preview": "..\n    TODO: put documentation license header here.\n\n.. currentmodule:: instruments.srs\n\n=========================\nStanf"
  },
  {
    "path": "doc/source/apiref/sunpower.rst",
    "chars": 225,
    "preview": ".. currentmodule:: instruments.sunpower\n\n====================\nSunpower Instruments\n====================\n\n:class:`CryoTel"
  },
  {
    "path": "doc/source/apiref/tektronix.rst",
    "chars": 786,
    "preview": "..\n    TODO: put documentation license header here.\n\n.. currentmodule:: instruments.tektronix\n\n=========\nTektronix\n====="
  },
  {
    "path": "doc/source/apiref/teledyne.rst",
    "chars": 276,
    "preview": "..\n    TODO: put documentation license header here.\n\n.. currentmodule:: instruments.teledyne\n\n===============\nTeledyne-L"
  },
  {
    "path": "doc/source/apiref/thorlabs.rst",
    "chars": 1100,
    "preview": "..\n    TODO: put documentation license header here.\n\n.. currentmodule:: instruments.thorlabs\n\n========\nThorLabs\n========"
  },
  {
    "path": "doc/source/apiref/toptica.rst",
    "chars": 385,
    "preview": "..\n    TODO: put documentation license header here.\n\n.. currentmodule:: instruments.toptica\n\n=======\nToptica\n=======\n\n:c"
  },
  {
    "path": "doc/source/apiref/yokogawa.rst",
    "chars": 415,
    "preview": "..\n    TODO: put documentation license header here.\n\n.. currentmodule:: instruments.yokogawa\n\n========\nYokogawa\n========"
  },
  {
    "path": "doc/source/conf.py",
    "chars": 8634,
    "preview": "#\n# InstrumentKit Library documentation build configuration file, created by\n# sphinx-quickstart on Fri Apr  5 10:37:03 "
  },
  {
    "path": "doc/source/devguide/code_style.rst",
    "chars": 4183,
    "preview": ".. _code_style:\n\n============\nCoding Style\n============\n\nData Types\n==========\n\nNumeric Data\n------------\n\nWhen appropri"
  },
  {
    "path": "doc/source/devguide/design_philosophy.rst",
    "chars": 2536,
    "preview": "=================\nDesign Philosophy\n=================\n\nHere, we describe the design philosophy behind InstrumentKit at a"
  },
  {
    "path": "doc/source/devguide/index.rst",
    "chars": 2846,
    "preview": "===============================\nInstrumentKit Development Guide\n===============================\n\n.. toctree::\n    :maxde"
  },
  {
    "path": "doc/source/devguide/testing.rst",
    "chars": 5154,
    "preview": "================================\nTesting Instrument Functionality\n================================\n\n.. currentmodule:: i"
  },
  {
    "path": "doc/source/devguide/util_fns.rst",
    "chars": 5865,
    "preview": "=============================\nUtility Functions and Classes\n=============================\n\n.. currentmodule:: instrument"
  },
  {
    "path": "doc/source/index.rst",
    "chars": 357,
    "preview": "..\n    TODO: put documentation license header here.\n\nWelcome to InstrumentKit Library's documentation!\n================="
  },
  {
    "path": "doc/source/intro.rst",
    "chars": 4622,
    "preview": "..\n    TODO: put documentation license header here.\n\n============\nIntroduction\n============\n\n**InstrumentKit** allows fo"
  },
  {
    "path": "license/AUTHOR.TXT",
    "chars": 102,
    "preview": "Original author:\n\nSteven Casagrande\nstevencasagrande@gmail.com\ntwitter.com/stevecasagrande\n\n2012-2025\n"
  },
  {
    "path": "license/LICENSE.TXT",
    "chars": 31772,
    "preview": "GNU AFFERO GENERAL PUBLIC LICENSE\n\nVersion 3, 19 November 2007\n\nCopyright © 2007 Free Software Foundation, Inc. <http://"
  },
  {
    "path": "matlab/matlab-example.ipynb",
    "chars": 2277,
    "preview": "{\n \"cells\": [\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# Loading Instruments from MATLAB #"
  },
  {
    "path": "matlab/open_instrument.m",
    "chars": 1549,
    "preview": "function instrument = open_instrument(name, uri)\n% open_instrument Opens an instrument given its InstrumentKit URI.\n%\n% "
  },
  {
    "path": "pyproject.toml",
    "chars": 1915,
    "preview": "[build-system]\nrequires = [\"setuptools>=61.2\", \"setuptools_scm>=9.2\"]\nbuild-backend = \"setuptools.build_meta\"\n\n[project]"
  },
  {
    "path": "src/instruments/__init__.py",
    "chars": 1047,
    "preview": "#!/usr/bin/env python\n\"\"\"\nDefines globally-available subpackages and symbols for the instruments package.\n\"\"\"\n\n# IMPORTS"
  },
  {
    "path": "src/instruments/abstract_instruments/__init__.py",
    "chars": 406,
    "preview": "#!/usr/bin/env python\n\"\"\"\nModule containing instrument abstract base classes and communication layers\n\"\"\"\n\nfrom .instrum"
  },
  {
    "path": "src/instruments/abstract_instruments/comm/__init__.py",
    "chars": 571,
    "preview": "#!/usr/bin/env python\n\"\"\"\nModule containing communication layers\n\"\"\"\n\nfrom .abstract_comm import AbstractCommunicator\n\nf"
  },
  {
    "path": "src/instruments/abstract_instruments/comm/abstract_comm.py",
    "chars": 7342,
    "preview": "#!/usr/bin/env python\n\"\"\"\nProvides an abstract base class for file-like communication layer classes\n\"\"\"\n\n# IMPORTS #####"
  },
  {
    "path": "src/instruments/abstract_instruments/comm/file_communicator.py",
    "chars": 7175,
    "preview": "#!/usr/bin/env python\n\"\"\"\nProvides a communication layer for an instrument with a file on the filesystem\n\"\"\"\n\n# IMPORTS "
  },
  {
    "path": "src/instruments/abstract_instruments/comm/gpib_communicator.py",
    "chars": 12343,
    "preview": "#!/usr/bin/env python\n\"\"\"\nProvides a communication layer for an instrument connected via a Galvant\nIndustries or Prologi"
  },
  {
    "path": "src/instruments/abstract_instruments/comm/loopback_communicator.py",
    "chars": 5862,
    "preview": "#!/usr/bin/env python\n\"\"\"\nProvides a loopback communicator, used for creating unit tests or for opening\ntest connections"
  },
  {
    "path": "src/instruments/abstract_instruments/comm/serial_communicator.py",
    "chars": 6287,
    "preview": "#!/usr/bin/env python\n\"\"\"\nProvides a serial communicator for connecting with instruments over serial\nconnections.\n\"\"\"\n\n#"
  },
  {
    "path": "src/instruments/abstract_instruments/comm/serial_manager.py",
    "chars": 2807,
    "preview": "#!/usr/bin/env python\n\"\"\"\nThis module handles creating the serial objects for the instrument classes.\n\nThis is needed fo"
  },
  {
    "path": "src/instruments/abstract_instruments/comm/socket_communicator.py",
    "chars": 5629,
    "preview": "#!/usr/bin/env python\n\"\"\"\nProvides a tcpip socket communicator for connecting with instruments over\nraw ethernet connect"
  },
  {
    "path": "src/instruments/abstract_instruments/comm/usb_communicator.py",
    "chars": 6145,
    "preview": "#!/usr/bin/env python\n\"\"\"\nProvides a USB communicator for connecting with instruments over raw usb\nconnections.\n\"\"\"\n\n# I"
  },
  {
    "path": "src/instruments/abstract_instruments/comm/usbtmc_communicator.py",
    "chars": 5297,
    "preview": "#!/usr/bin/env python\n\"\"\"\nProvides a communicator that uses Python-USBTMC for connecting with TMC\ninstruments.\n\"\"\"\n\n# IM"
  },
  {
    "path": "src/instruments/abstract_instruments/comm/visa_communicator.py",
    "chars": 6268,
    "preview": "#!/usr/bin/env python\n\"\"\"\nProvides a VISA communicator for connecting with instruments via the VISA\nlibrary.\n\"\"\"\n\n# IMPO"
  },
  {
    "path": "src/instruments/abstract_instruments/comm/vxi11_communicator.py",
    "chars": 5549,
    "preview": "#!/usr/bin/env python\n\"\"\"\nProvides a communication layer that uses python-vxi11 to interface with\nVXI11 devices.\n\"\"\"\n\n# "
  },
  {
    "path": "src/instruments/abstract_instruments/electrometer.py",
    "chars": 2749,
    "preview": "#!/usr/bin/env python\n\"\"\"\nProvides an abstract base class for electrometer instruments\n\"\"\"\n\n# IMPORTS ##################"
  },
  {
    "path": "src/instruments/abstract_instruments/function_generator.py",
    "chars": 10068,
    "preview": "#!/usr/bin/env python\n\"\"\"\nProvides an abstract base class for function generator instruments\n\"\"\"\n\n# IMPORTS ############"
  },
  {
    "path": "src/instruments/abstract_instruments/instrument.py",
    "chars": 28926,
    "preview": "#!/usr/bin/env python\n\"\"\"\nProvides the base Instrument class for all instruments.\n\"\"\"\n\n# IMPORTS #######################"
  },
  {
    "path": "src/instruments/abstract_instruments/multimeter.py",
    "chars": 1997,
    "preview": "#!/usr/bin/env python\n\"\"\"\nProvides an abstract base class for multimeter instruments\n\"\"\"\n\n# IMPORTS ####################"
  },
  {
    "path": "src/instruments/abstract_instruments/optical_spectrum_analyzer.py",
    "chars": 5382,
    "preview": "#!/usr/bin/env python\n\"\"\"\nProvides an abstract base class for optical spectrum analyzer instruments\n\"\"\"\n\n# IMPORTS #####"
  },
  {
    "path": "src/instruments/abstract_instruments/oscilloscope.py",
    "chars": 4412,
    "preview": "#!/usr/bin/env python\n\"\"\"\nProvides an abstract base class for oscilloscope instruments\n\"\"\"\n\n# IMPORTS ##################"
  },
  {
    "path": "src/instruments/abstract_instruments/power_supply.py",
    "chars": 3236,
    "preview": "#!/usr/bin/env python\n\"\"\"\nProvides an abstract base class for power supply instruments\n\"\"\"\n\n# IMPORTS ##################"
  },
  {
    "path": "src/instruments/abstract_instruments/signal_generator/__init__.py",
    "chars": 212,
    "preview": "#!/usr/bin/env python\n\"\"\"\nModule containing signal generator abstract base classes\n\"\"\"\n\nfrom .signal_generator import Si"
  },
  {
    "path": "src/instruments/abstract_instruments/signal_generator/channel.py",
    "chars": 1685,
    "preview": "#!/usr/bin/env python\n\"\"\"\nProvides an abstract base class for signal generator output channels\n\"\"\"\n\n# IMPORTS ##########"
  },
  {
    "path": "src/instruments/abstract_instruments/signal_generator/signal_generator.py",
    "chars": 889,
    "preview": "#!/usr/bin/env python\n\"\"\"\nProvides an abstract base class for signal generator instruments\n\"\"\"\n\n# IMPORTS ##############"
  },
  {
    "path": "src/instruments/abstract_instruments/signal_generator/single_channel_sg.py",
    "chars": 1037,
    "preview": "#!/usr/bin/env python\n\"\"\"\nProvides an abstract base class for signal generators with only a single\noutput channel.\n\"\"\"\n\n"
  },
  {
    "path": "src/instruments/agilent/__init__.py",
    "chars": 189,
    "preview": "#!/usr/bin/env python\n\"\"\"\nModule containing Agilent instruments\n\"\"\"\n\nfrom instruments.agilent.agilent33220a import Agile"
  },
  {
    "path": "src/instruments/agilent/agilent33220a.py",
    "chars": 4939,
    "preview": "#!/usr/bin/env python\n\"\"\"\nProvides support for the Agilent 33220a function generator.\n\"\"\"\n\n# IMPORTS ###################"
  },
  {
    "path": "src/instruments/agilent/agilent34410a.py",
    "chars": 7369,
    "preview": "#!/usr/bin/env python\n\"\"\"\nProvides support for the Agilent 34410a digital multimeter.\n\"\"\"\n\n# IMPORTS ###################"
  },
  {
    "path": "src/instruments/aimtti/__init__.py",
    "chars": 111,
    "preview": "#!/usr/bin/env python\n\"\"\"\nModule containing Aim-TTi power supplies\n\"\"\"\n\nfrom .aimttiel302p import AimTTiEL302P\n"
  },
  {
    "path": "src/instruments/aimtti/aimttiel302p.py",
    "chars": 4620,
    "preview": "#!/usr/bin/env python\n\"\"\"\nProvides support for the Aim-TTI EL302P power supply\n\"\"\"\n\n# IMPORTS ##########################"
  },
  {
    "path": "src/instruments/comet/__init__.py",
    "chars": 87,
    "preview": "\"\"\"\nModule containing Comet instruments.\n\"\"\"\n\nfrom .cito_plus_1310 import CitoPlus1310\n"
  },
  {
    "path": "src/instruments/comet/cito_plus_1310.py",
    "chars": 13244,
    "preview": "#!/usr/bin/env python\n\"\"\"Support for Comet Cito Plus RF generator.\"\"\"\n\n# IMPORTS #######################################"
  },
  {
    "path": "src/instruments/config.py",
    "chars": 5777,
    "preview": "#!/usr/bin/env python\n\"\"\"\nModule containing support for loading instruments from configuration files.\n\"\"\"\n\n# IMPORTS ###"
  },
  {
    "path": "src/instruments/delta_elektronika/__init__.py",
    "chars": 136,
    "preview": "#!/usr/bin/env python\n\"\"\"\nModule containing Delta Elektronika instruments\n\"\"\"\n\nfrom instruments.delta_elektronika.psc_et"
  },
  {
    "path": "src/instruments/delta_elektronika/psc_eth.py",
    "chars": 6588,
    "preview": "\"\"\"Support for Delta Elektronika DC power supplies with PSC-ETH-2 interface.\"\"\"\n\n# IMPORTS #############################"
  },
  {
    "path": "src/instruments/dressler/__init__.py",
    "chars": 124,
    "preview": "#!/usr/bin/env python\n\"\"\"\nModule containing Dressler instruments\n\"\"\"\n\nfrom instruments.dressler.cesar_1312 import Cesar1"
  },
  {
    "path": "src/instruments/dressler/cesar_1312.py",
    "chars": 13158,
    "preview": "\"\"\"Support for Dressler Cesar 1312 RF generator.\"\"\"\n\n# IMPORTS #########################################################"
  },
  {
    "path": "src/instruments/errors.py",
    "chars": 697,
    "preview": "#!/usr/bin/env python\n\"\"\"\nModule containing custom exception errors used by various instruments.\n\"\"\"\n\n# IMPORTS ########"
  },
  {
    "path": "src/instruments/fluke/__init__.py",
    "chars": 100,
    "preview": "#!/usr/bin/env python\n\"\"\"\nModule containing Fluke instruments\n\"\"\"\n\nfrom .fluke3000 import Fluke3000\n"
  },
  {
    "path": "src/instruments/fluke/fluke3000.py",
    "chars": 16097,
    "preview": "#!/usr/bin/env python\n#\n# fluke3000.py: Driver for the Fluke 3000 FC Industrial System\n#\n# © 2019 Francois Drielsma (fra"
  },
  {
    "path": "src/instruments/generic_scpi/__init__.py",
    "chars": 221,
    "preview": "#!/usr/bin/env python\n\"\"\"\nModule containing generic SCPI instruments\n\"\"\"\n\nfrom .scpi_instrument import SCPIInstrument\nfr"
  },
  {
    "path": "src/instruments/generic_scpi/scpi_function_generator.py",
    "chars": 3129,
    "preview": "#!/usr/bin/env python\n\"\"\"\nProvides support for SCPI compliant function generators\n\"\"\"\n\n# IMPORTS #######################"
  },
  {
    "path": "src/instruments/generic_scpi/scpi_instrument.py",
    "chars": 9175,
    "preview": "#!/usr/bin/env python\n\"\"\"\nProvides support for SCPI compliant instruments\n\"\"\"\n\n# IMPORTS ###############################"
  },
  {
    "path": "src/instruments/generic_scpi/scpi_multimeter.py",
    "chars": 13812,
    "preview": "#!/usr/bin/env python\n\"\"\"\nProvides support for SCPI compliant multimeters\n\"\"\"\n\n# IMPORTS ###############################"
  },
  {
    "path": "src/instruments/gentec_eo/__init__.py",
    "chars": 69,
    "preview": "\"\"\"Module containing Gentec-eo instruments.\"\"\"\n\nfrom .blu import Blu\n"
  },
  {
    "path": "src/instruments/gentec_eo/blu.py",
    "chars": 20028,
    "preview": "\"\"\"Support for Gentec-EO Blu devices.\"\"\"\n\n# IMPORTS ####################################################################"
  },
  {
    "path": "src/instruments/glassman/__init__.py",
    "chars": 108,
    "preview": "#!/usr/bin/env python\n\"\"\"\nModule containing Glassman power supplies\n\"\"\"\n\nfrom .glassmanfr import GlassmanFR\n"
  },
  {
    "path": "src/instruments/glassman/glassmanfr.py",
    "chars": 15958,
    "preview": "#!/usr/bin/env python\n#\n# hpe3631a.py: Driver for the Glassman FR Series Power Supplies\n#\n# © 2019 Francois Drielsma (fr"
  },
  {
    "path": "src/instruments/hcp/__init__.py",
    "chars": 126,
    "preview": "#!/usr/bin/env python\n\"\"\"\nModule containing HC Photonics instruments\n\"\"\"\n\nfrom .tc038 import TC038\nfrom .tc038d import T"
  },
  {
    "path": "src/instruments/hcp/tc038.py",
    "chars": 4609,
    "preview": "#!/usr/bin/env python\n\"\"\"\nProvides support for the TC038 AC crystal oven by HC Photonics.\n\"\"\"\n\n# IMPORTS ###############"
  },
  {
    "path": "src/instruments/hcp/tc038d.py",
    "chars": 5556,
    "preview": "#!/usr/bin/env python\n\"\"\"\nProvides support for the TC038 AC crystal oven by HC Photonics.\n\"\"\"\n\n# IMPORTS ###############"
  },
  {
    "path": "src/instruments/holzworth/__init__.py",
    "chars": 108,
    "preview": "#!/usr/bin/env python\n\"\"\"\nModule containing Holzworth instruments\n\"\"\"\n\nfrom .holzworth_hs9000 import HS9000\n"
  },
  {
    "path": "src/instruments/holzworth/holzworth_hs9000.py",
    "chars": 8747,
    "preview": "#!/usr/bin/env python\n\"\"\"\nProvides support for the Holzworth HS9000\n\"\"\"\n\n# IMPORTS #####################################"
  },
  {
    "path": "src/instruments/hp/__init__.py",
    "chars": 240,
    "preview": "#!/usr/bin/env python\n\"\"\"\nModule containing HP instruments\n\"\"\"\n\nfrom .hp3325a import HP3325a\nfrom .hp3456a import HP3456"
  },
  {
    "path": "src/instruments/hp/hp3325a.py",
    "chars": 7181,
    "preview": "#!/usr/bin/env python\n#\n# hp3325a.py: Driver for the HP3235a/b Synthesizer/Function Generator.\n#\n# © 2023 Scott Phillips"
  },
  {
    "path": "src/instruments/hp/hp3456a.py",
    "chars": 19387,
    "preview": "#!/usr/bin/env python\n#\n# hp3456a.py: Driver for the HP3456a Digital Voltmeter.\n#\n# © 2014 Willem Dijkstra (wpd@xs4all.n"
  },
  {
    "path": "src/instruments/hp/hp6624a.py",
    "chars": 10471,
    "preview": "#!/usr/bin/env python\n\"\"\"\nProvides support for the HP6624a power supply\n\"\"\"\n\n# IMPORTS #################################"
  },
  {
    "path": "src/instruments/hp/hp6632b.py",
    "chars": 14530,
    "preview": "#!/usr/bin/env python\n#\n# hp6632b.py: Python class for the HP6632b power supply\n#\n# © 2014 Willem Dijkstra (wpd@xs4all.n"
  },
  {
    "path": "src/instruments/hp/hp6652a.py",
    "chars": 6886,
    "preview": "#!/usr/bin/env python\n\"\"\"\nDriver for the HP6652a single output power supply\n\nOriginally contributed by Wil Langford (wil"
  },
  {
    "path": "src/instruments/hp/hpe3631a.py",
    "chars": 8621,
    "preview": "#!/usr/bin/env python\n#\n# hpe3631a.py: Driver for the HP E3631A Power Supply\n#\n# © 2019 Francois Drielsma (francois.drie"
  },
  {
    "path": "src/instruments/keithley/__init__.py",
    "chars": 298,
    "preview": "#!/usr/bin/env python\n\"\"\"\nModule containing Keithley instruments\n\"\"\"\n\nfrom .keithley195 import Keithley195\nfrom .keithle"
  },
  {
    "path": "src/instruments/keithley/keithley195.py",
    "chars": 12819,
    "preview": "#!/usr/bin/env python\n\"\"\"\nDriver for the Keithley 195 digital multimeter\n\"\"\"\n\n# IMPORTS ################################"
  },
  {
    "path": "src/instruments/keithley/keithley2182.py",
    "chars": 7428,
    "preview": "#!/usr/bin/env python\n\"\"\"\nDriver for the Keithley 2182 nano-voltmeter\n\"\"\"\n\n# IMPORTS ###################################"
  },
  {
    "path": "src/instruments/keithley/keithley485.py",
    "chars": 14268,
    "preview": "#!/usr/bin/env python\n#\n# keithley485.py: Driver for the Keithley 485 picoammeter.\n#\n# © 2019 Francois Drielsma (francoi"
  },
  {
    "path": "src/instruments/keithley/keithley580.py",
    "chars": 15926,
    "preview": "#!/usr/bin/env python\n#\n# keithley580.py: Driver for the Keithley 580 micro-ohmmeter.\n#\n# © 2013 Willem Dijkstra (wpd@xs"
  },
  {
    "path": "src/instruments/keithley/keithley6220.py",
    "chars": 2600,
    "preview": "#!/usr/bin/env python\n\"\"\"\nProvides support for the Keithley 6220 constant current supply\n\"\"\"\n\n# IMPORTS ################"
  },
  {
    "path": "src/instruments/keithley/keithley6514.py",
    "chars": 6569,
    "preview": "#!/usr/bin/env python\n\"\"\"\nProvides support for the Keithley 6514 electrometer\n\"\"\"\n\n# IMPORTS ###########################"
  },
  {
    "path": "src/instruments/lakeshore/__init__.py",
    "chars": 311,
    "preview": "#!/usr/bin/env python\n\"\"\"\nModule containing Lakeshore instruments\n\"\"\"\n\nfrom instruments.lakeshore.lakeshore336 import La"
  },
  {
    "path": "src/instruments/lakeshore/lakeshore336.py",
    "chars": 2262,
    "preview": "#!/usr/bin/env python\n\"\"\"\nProvides support for the Lakeshore Model 336 cryogenic temperature controller.\n\"\"\"\n\n# IMPORTS "
  },
  {
    "path": "src/instruments/lakeshore/lakeshore340.py",
    "chars": 2052,
    "preview": "#!/usr/bin/env python\n\"\"\"\nProvides support for the Lakeshore 340 cryogenic temperature controller.\n\"\"\"\n\n# IMPORTS ######"
  },
  {
    "path": "src/instruments/lakeshore/lakeshore370.py",
    "chars": 2227,
    "preview": "#!/usr/bin/env python\n\"\"\"\nProvides support for the Lakeshore 370 AC resistance bridge.\n\"\"\"\n\n# IMPORTS ##################"
  },
  {
    "path": "src/instruments/lakeshore/lakeshore475.py",
    "chars": 10839,
    "preview": "#!/usr/bin/env python\n\"\"\"\nProvides support for the Lakeshore 475 Gaussmeter.\n\"\"\"\n\n# IMPORTS ############################"
  },
  {
    "path": "src/instruments/mettler_toledo/__init__.py",
    "chars": 104,
    "preview": "#!/usr/bin/env python\n\"\"\"\nModule containing Mettler Toledo instruments\n\"\"\"\n\nfrom .mt_sics import MTSICS\n"
  },
  {
    "path": "src/instruments/mettler_toledo/mt_sics.py",
    "chars": 9838,
    "preview": "#!/usr/bin/env python\n\"\"\"\nProvides support for the Mettler Toledo balances via Standard Interface Command Set.\n\"\"\"\n\nfrom"
  },
  {
    "path": "src/instruments/minghe/__init__.py",
    "chars": 98,
    "preview": "#!/usr/bin/env python\n\"\"\"\nModule containing MingHe instruments\n\"\"\"\n\nfrom .mhs5200a import MHS5200\n"
  },
  {
    "path": "src/instruments/minghe/mhs5200a.py",
    "chars": 6991,
    "preview": "#!/usr/bin/env python\n\"\"\"\nProvides the support for the MingHe low-cost function generator.\n\nClass originally contributed"
  },
  {
    "path": "src/instruments/named_struct.py",
    "chars": 9795,
    "preview": "#!/usr/bin/env python\n\"\"\"\nClass for quickly defining C-like structures with named fields.\n\"\"\"\n\n# IMPORTS ###############"
  },
  {
    "path": "src/instruments/newport/__init__.py",
    "chars": 224,
    "preview": "#!/usr/bin/env python\n\"\"\"\nModule containing Newport instruments\n\"\"\"\n\nfrom .agilis import AGUC2\n\nfrom .errors import Newp"
  },
  {
    "path": "src/instruments/newport/agilis.py",
    "chars": 18580,
    "preview": "#!/usr/bin/env python\n\"\"\"\nProvides support for the Newport Agilis Controller AG-UC2 only (currently).\n\nAgilis controller"
  },
  {
    "path": "src/instruments/newport/errors.py",
    "chars": 6208,
    "preview": "#!/usr/bin/env python\n\"\"\"\nProvides common error handling for Newport devices.\n\"\"\"\n\n# IMPORTS ###########################"
  },
  {
    "path": "src/instruments/newport/newport_pmc8742.py",
    "chars": 41128,
    "preview": "#!/usr/bin/env python\n\"\"\"\nProvides support for the Newport Pico Motor Controller 8742\n\nNote that the class is currently "
  },
  {
    "path": "src/instruments/newport/newportesp301.py",
    "chars": 49328,
    "preview": "#!/usr/bin/env python\n\"\"\"\nProvides support for the Newport ESP-301 motor controller.\n\nDue to the complexity of this piec"
  },
  {
    "path": "src/instruments/ondax/__init__.py",
    "chars": 86,
    "preview": "#!/usr/bin/env python\n\"\"\"\nModule containing Ondax Instruments\n\"\"\"\n\nfrom .lm import LM\n"
  },
  {
    "path": "src/instruments/ondax/lm.py",
    "chars": 16223,
    "preview": "#!/usr/bin/env python\n\"\"\"\nProvides the support for the Ondax LM Laser.\n\nClass originally contributed by Catherine Hollow"
  },
  {
    "path": "src/instruments/optional_dep_finder.py",
    "chars": 214,
    "preview": "\"\"\"\nSmall module to obtain handles to optional dependencies\n\"\"\"\n\n# pylint: disable=unused-import\ntry:\n    import numpy\n\n"
  },
  {
    "path": "src/instruments/oxford/__init__.py",
    "chars": 107,
    "preview": "#!/usr/bin/env python\n\"\"\"\nModule containing Oxford instruments\n\"\"\"\n\nfrom .oxforditc503 import OxfordITC503\n"
  },
  {
    "path": "src/instruments/oxford/oxforditc503.py",
    "chars": 2112,
    "preview": "#!/usr/bin/env python\n\"\"\"\nProvides support for the Oxford ITC 503 temperature controller.\n\"\"\"\n\n# IMPORTS ###############"
  },
  {
    "path": "src/instruments/pfeiffer/__init__.py",
    "chars": 97,
    "preview": "#!/usr/bin/env python\n\"\"\"\nModule containing Pfeiffer instruments\n\"\"\"\n\nfrom .tpg36x import TPG36x\n"
  },
  {
    "path": "src/instruments/pfeiffer/tpg36x.py",
    "chars": 10929,
    "preview": "#!/usr/bin/env python\n\"\"\"\nDriver for the Pfeiffer TPG36x vacumm gauge controller.\n\"\"\"\n\n# IMPORTS #######################"
  },
  {
    "path": "src/instruments/phasematrix/__init__.py",
    "chars": 126,
    "preview": "#!/usr/bin/env python\n\"\"\"\nModule containing Phase Matrix instruments\n\"\"\"\n\nfrom .phasematrix_fsw0020 import PhaseMatrixFS"
  },
  {
    "path": "src/instruments/phasematrix/phasematrix_fsw0020.py",
    "chars": 4574,
    "preview": "#!/usr/bin/env python\n\"\"\"\nProvides support for the Phase Matrix FSW0020 signal generator.\n\"\"\"\n\n# IMPORTS ###############"
  },
  {
    "path": "src/instruments/picowatt/__init__.py",
    "chars": 111,
    "preview": "#!/usr/bin/env python\n\"\"\"\nModule containing Picowatt instruments\n\"\"\"\n\nfrom .picowattavs47 import PicowattAVS47\n"
  },
  {
    "path": "src/instruments/picowatt/picowattavs47.py",
    "chars": 4172,
    "preview": "#!/usr/bin/env python\n\"\"\"\nProvides support for the Picowatt AVS 47 resistance bridge\n\"\"\"\n\n# IMPORTS ####################"
  },
  {
    "path": "src/instruments/qubitekk/__init__.py",
    "chars": 112,
    "preview": "#!/usr/bin/env python\n\"\"\"\nModule containing Qubitekk instruments\n\"\"\"\n\nfrom .cc1 import CC1\nfrom .mc1 import MC1\n"
  },
  {
    "path": "src/instruments/qubitekk/cc1.py",
    "chars": 10527,
    "preview": "#!/usr/bin/env python\n\"\"\"\nProvides support for the Qubitekk CC1 Coincidence Counter instrument.\n\nCC1 Class originally co"
  },
  {
    "path": "src/instruments/qubitekk/mc1.py",
    "chars": 7073,
    "preview": "#!/usr/bin/env python\n\"\"\"\nProvides support for the Qubitekk MC1 Motor Controller.\n\nMC1 Class originally contributed by C"
  },
  {
    "path": "src/instruments/rigol/__init__.py",
    "chars": 110,
    "preview": "#!/usr/bin/env python\n\"\"\"\nModule containing Rigol instruments\n\"\"\"\n\nfrom .rigolds1000 import RigolDS1000Series\n"
  },
  {
    "path": "src/instruments/rigol/rigolds1000.py",
    "chars": 6476,
    "preview": "#!/usr/bin/env python\n\"\"\"\nProvides support for Rigol DS-1000 series oscilloscopes.\n\"\"\"\n\n# IMPORTS ######################"
  },
  {
    "path": "src/instruments/srs/__init__.py",
    "chars": 189,
    "preview": "#!/usr/bin/env python\n\"\"\"\nModule containing Lakeshore instruments\n\"\"\"\n\nfrom .srs345 import SRS345\nfrom .srs830 import SR"
  },
  {
    "path": "src/instruments/srs/srs345.py",
    "chars": 2964,
    "preview": "#!/usr/bin/env python\n\"\"\"\nProvides support for the SRS 345 function generator.\n\"\"\"\n\n# IMPORTS ##########################"
  },
  {
    "path": "src/instruments/srs/srs830.py",
    "chars": 19002,
    "preview": "#!/usr/bin/env python\n\"\"\"\nProvides support for the SRS 830 lock-in amplifier.\n\"\"\"\n\n# IMPORTS ###########################"
  },
  {
    "path": "src/instruments/srs/srsctc100.py",
    "chars": 13265,
    "preview": "#!/usr/bin/env python\n\"\"\"\nProvides support for the SRS CTC-100 cryogenic temperature controller.\n\"\"\"\n\n# IMPORTS ########"
  },
  {
    "path": "src/instruments/srs/srsdg645.py",
    "chars": 11720,
    "preview": "#!/usr/bin/env python\n\"\"\"\nProvides support for the SRS DG645 digital delay generator.\n\"\"\"\n\n# IMPORTS ###################"
  },
  {
    "path": "src/instruments/sunpower/__init__.py",
    "chars": 104,
    "preview": "#!/usr/bin/env python\n\"\"\"\nModule containing Sunpower instruments\n\"\"\"\n\nfrom .cryotel_gt import CryoTelGT\n"
  },
  {
    "path": "src/instruments/sunpower/cryotel_gt.py",
    "chars": 14383,
    "preview": "#!/usr/bin/env python\n\"\"\"\nDriver for the Sunpower CryoTel GT generation 2 cryocooler.\n\"\"\"\n\n# IMPORTS ###################"
  },
  {
    "path": "src/instruments/tektronix/__init__.py",
    "chars": 244,
    "preview": "#!/usr/bin/env python\n\"\"\"\nModule containing Tektronix instruments\n\"\"\"\n\nfrom .tekdpo4104 import TekDPO4104\nfrom .tekdpo70"
  },
  {
    "path": "src/instruments/tektronix/tekawg2000.py",
    "chars": 8359,
    "preview": "#!/usr/bin/env python\n\"\"\"\nProvides support for the Tektronix AWG2000 series arbitrary wave generators.\n\"\"\"\n\n# IMPORTS ##"
  },
  {
    "path": "src/instruments/tektronix/tekdpo4104.py",
    "chars": 11794,
    "preview": "#!/usr/bin/env python\n\"\"\"\nProvides support for the Tektronix DPO 4104 oscilloscope\n\"\"\"\n\n# IMPORTS ######################"
  },
  {
    "path": "src/instruments/tektronix/tekdpo70000.py",
    "chars": 26889,
    "preview": "#!/usr/bin/env python\n\"\"\"\nProvides support for the Tektronix DPO 70000 oscilloscope series\n\"\"\"\n\n# IMPORTS ##############"
  },
  {
    "path": "src/instruments/tektronix/tektds224.py",
    "chars": 8667,
    "preview": "#!/usr/bin/env python\n\"\"\"\nProvides support for the Tektronix TDS 224 oscilloscope\n\"\"\"\n\n# IMPORTS #######################"
  },
  {
    "path": "src/instruments/tektronix/tektds5xx.py",
    "chars": 19169,
    "preview": "#!/usr/bin/env python\n#\n# tektds5xx.py: Driver for the Tektronix TDS 5xx series oscilloscope.\n#\n# © 2014 Chris Schimp (s"
  },
  {
    "path": "src/instruments/teledyne/__init__.py",
    "chars": 93,
    "preview": "#!/usr/bin/env python\n\"\"\"\nModule containing Teledyne instruments\n\"\"\"\n\nfrom .maui import MAUI\n"
  },
  {
    "path": "src/instruments/teledyne/maui.py",
    "chars": 47996,
    "preview": "#!/usr/bin/env python\n\"\"\"\nProvides support for the Teledyne-Lecroy Oscilloscopes that use the\nMAUI interface.\n\nDevelopme"
  },
  {
    "path": "src/instruments/thorlabs/__init__.py",
    "chars": 318,
    "preview": "#!/usr/bin/env python\n\"\"\"\nModule containing Thorlabs instruments\n\"\"\"\n\nfrom .thorlabsapt import (\n    ThorLabsAPT,\n    AP"
  },
  {
    "path": "src/instruments/thorlabs/_abstract.py",
    "chars": 3885,
    "preview": "#!/usr/bin/env python\n\"\"\"\nDefines a generic Thorlabs instrument to define some common functionality.\n\"\"\"\n\n# IMPORTS ####"
  },
  {
    "path": "src/instruments/thorlabs/_cmds.py",
    "chars": 8867,
    "preview": "#!/usr/bin/python\n\"\"\"\nContains command mneonics for the ThorLabs APT protocol\n\nClass originally contributed by Catherine"
  },
  {
    "path": "src/instruments/thorlabs/_packets.py",
    "chars": 5431,
    "preview": "#!/usr/bin/env python\n\"\"\"\nModule for working with ThorLabs packets.\n\"\"\"\n\n# IMPORTS #####################################"
  },
  {
    "path": "src/instruments/thorlabs/lcc25.py",
    "chars": 7209,
    "preview": "#!/usr/bin/python\n\"\"\"\nProvides the support for the Thorlabs LCC25 liquid crystal controller.\n\nClass originally contribut"
  }
]

// ... and 147 more files (download for full content)

About this extraction

This page contains the full source code of the Galvant/InstrumentKit GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 347 files (2.0 MB), approximately 548.6k tokens, and a symbol index with 3771 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!