Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

solved mpl plot for Mac and linux environments #5

Merged
merged 7 commits into from
Oct 14, 2024
Merged

solved mpl plot for Mac and linux environments #5

merged 7 commits into from
Oct 14, 2024

Conversation

MDecarabas
Copy link
Collaborator

Title

@MDecarabas MDecarabas requested a review from prjemian October 9, 2024 17:30
@MDecarabas MDecarabas self-assigned this Oct 9, 2024
@prjemian
Copy link
Owner

prjemian commented Oct 9, 2024

Not getting a MPL plot window in local ipython session. LiveTable is shown, but no LivePlot window. This code:

from instrument.startup import *
from instrument.tests.sim_plans import *

RE(sim_print_plan())
RE(sim_count_plan())
RE(sim_rel_scan_plan())

Here's the iconfig.yml (as supplied in the branch):
image

@prjemian
Copy link
Owner

prjemian commented Oct 9, 2024

Plot shows in Jupyter notebook.
image

@prjemian
Copy link
Owner

prjemian commented Oct 9, 2024

@MDecarabas : Can you test with ipython on one of the APS linux workstations?

@prjemian
Copy link
Owner

prjemian commented Oct 9, 2024

Rebuilt the conda environment per the instructions. Getting an ImportError from the mpl branch.

main branch

(model_instrument) jemian@otz ~/.../prjemian/model_instrument $ git checkout main
Switched to branch 'main'
Your branch is up to date with 'origin/main'.
(model_instrument) jemian@otz ~/.../prjemian/model_instrument $ python -c "from instrument.startup import *; print(f'{bec._plots_enabled=}')"
I Wed-16:18:43 - ############################################################ startup
I Wed-16:18:43 - logging started
I Wed-16:18:43 - logging level = 10
I Wed-16:18:43 - /home/beams1/JEMIAN/Documents/projects/prjemian/model_instrument/src/instrument/utils/_logging_setup.py
I Wed-16:18:43 - /home/beams1/JEMIAN/Documents/projects/prjemian/model_instrument/src/instrument/utils/aps_functions.py
I Wed-16:18:43 - /home/beams1/JEMIAN/Documents/projects/prjemian/model_instrument/src/instrument/utils/helper_functions.py
W Wed-16:18:43 - APS DM setup file does not exist: '/home/dm/etc/dm.setup.sh'
I Wed-16:18:44 - /home/beams1/JEMIAN/Documents/projects/prjemian/model_instrument/src/instrument/utils/controls_setup.py
I Wed-16:18:44 - /home/beams1/JEMIAN/Documents/projects/prjemian/model_instrument/src/instrument/utils/metadata.py
I Wed-16:18:44 - RunEngine metadata saved in directory: /home/beams/JEMIAN/.config/Bluesky_RunEngine_md
I Wed-16:18:44 - using ophyd control layer: 'pyepics'
bec._plots_enabled=False

mpl branch

(model_instrument) jemian@otz ~/.../prjemian/model_instrument $ git checkout mpl
Switched to branch 'mpl'
Your branch is up to date with 'origin/mpl'.
(model_instrument) jemian@otz ~/.../prjemian/model_instrument $ python -c "from instrument.startup import *; print(f'{bec._plots_enabled=}')"
I Wed-16:18:24 - ############################################################ startup
I Wed-16:18:24 - logging started
I Wed-16:18:24 - logging level = 10
I Wed-16:18:24 - /home/beams1/JEMIAN/Documents/projects/prjemian/model_instrument/src/instrument/utils/_logging_setup.py
I Wed-16:18:24 - /home/beams1/JEMIAN/Documents/projects/prjemian/model_instrument/src/instrument/utils/aps_functions.py
I Wed-16:18:24 - /home/beams1/JEMIAN/Documents/projects/prjemian/model_instrument/src/instrument/utils/helper_functions.py
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/home/beams1/JEMIAN/Documents/projects/prjemian/model_instrument/src/instrument/startup.py", line 24, in <module>
    from .core.best_effort_init import bec  # noqa: F401
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/beams1/JEMIAN/Documents/projects/prjemian/model_instrument/src/instrument/core/__init__.py", line 13, in <module>
    mpl_setup()
  File "/home/beams1/JEMIAN/Documents/projects/prjemian/model_instrument/src/instrument/utils/helper_functions.py", line 71, in mpl_setup
    plt.switch_backend("qtagg")
  File "/home/beams/JEMIAN/.conda/envs/model_instrument/lib/python3.12/site-packages/matplotlib/pyplot.py", line 415, in switch_backend
    module = backend_registry.load_backend_module(newbackend)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/beams/JEMIAN/.conda/envs/model_instrument/lib/python3.12/site-packages/matplotlib/backends/registry.py", line 323, in load_backend_module
    return importlib.import_module(module_name)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/beams/JEMIAN/.conda/envs/model_instrument/lib/python3.12/importlib/__init__.py", line 90, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/beams/JEMIAN/.conda/envs/model_instrument/lib/python3.12/site-packages/matplotlib/backends/backend_qtagg.py", line 9, in <module>
    from .qt_compat import QT_API, QtCore, QtGui
  File "/home/beams/JEMIAN/.conda/envs/model_instrument/lib/python3.12/site-packages/matplotlib/backends/qt_compat.py", line 130, in <module>
    raise ImportError(
ImportError: Failed to import any of the following Qt binding modules: PyQt6, PySide6, PyQt5, PySide2

@MDecarabas
Copy link
Collaborator Author

@MDecarabas : Can you test with ipython on one of the APS linux workstations?

yes, works on my end.

@MDecarabas
Copy link
Collaborator Author

try again, should work now

@prjemian
Copy link
Owner

  • Tested with python, ipython, & jupyter on home linux workstation: all of those OK.
  • Tested with python & ipython on APS office linux workstation: no startup errors but both reported matplotlib troubles.

python

(model_instrument) jemian@otz ~/.../prjemian/model_instrument $ python ./dev_simple.py 
I Thu-12:50:31 - ############################################################ startup
I Thu-12:50:31 - logging started
I Thu-12:50:31 - logging level = 10
I Thu-12:50:31 - /home/beams1/JEMIAN/Documents/projects/prjemian/model_instrument/src/instrument/utils/_logging_setup.py
I Thu-12:50:31 - /home/beams1/JEMIAN/Documents/projects/prjemian/model_instrument/src/instrument/utils/aps_functions.py
I Thu-12:50:31 - /home/beams1/JEMIAN/Documents/projects/prjemian/model_instrument/src/instrument/utils/helper_functions.py
W Thu-12:50:31 - APS DM setup file does not exist: '/home/dm/etc/dm.setup.sh'
I Thu-12:50:32 - /home/beams1/JEMIAN/Documents/projects/prjemian/model_instrument/src/instrument/utils/controls_setup.py
I Thu-12:50:32 - /home/beams1/JEMIAN/Documents/projects/prjemian/model_instrument/src/instrument/utils/metadata.py
I Thu-12:50:32 - RunEngine metadata saved in directory: /home/beams/JEMIAN/.config/Bluesky_RunEngine_md
I Thu-12:50:32 - using ophyd control layer: 'pyepics'
(instrument.tests.sim_plans) This is a test.
(instrument.tests.sim_plans)  motor.position=0  noisy_det.read()=OrderedDict({'noisy_det': {'value': 0.9880332265363881, 'timestamp': 1728582632.191969}}).


Transient Scan ID: 13     Time: 2024-10-10 12:50:35
Persistent Unique Scan ID: '3b0f52d3-abc9-4138-80b1-b8e4f1c1222e'
New stream: 'primary'
+-----------+------------+------------+
|   seq_num |       time |  noisy_det |
+-----------+------------+------------+
|         1 | 12:50:36.0 |   9999.961 |
+-----------+------------+------------+
generator count ['3b0f52d3'] (scan num: 13)



(instrument.tests.sim_plans)  motor.position=0  noisy_det.read()=OrderedDict({'noisy_det': {'value': 9999.960851437394, 'timestamp': 1728582636.0214987}}).
(instrument.tests.sim_plans)  noisy_det.read_configuration()=OrderedDict({'noisy_det_Imax': {'value': 10000, 'timestamp': 1728582636.1461613}, 'noisy_det_center': {'value': 0, 'timestamp': 1728582636.1471736}, 'noisy_det_sigma': {'value': 1, 'timestamp': 1728582636.1480646}, 'noisy_det_noise': {'value': 'uniform', 'timestamp': 1728582636.149229}, 'noisy_det_noise_multiplier': {'value': 0.1, 'timestamp': 1728582632.1914954}}).
(instrument.tests.sim_plans)  noisy_det.noise._enum_strs=('none', 'poisson', 'uniform').


Transient Scan ID: 14     Time: 2024-10-10 12:50:36
Persistent Unique Scan ID: 'be4a1fd2-8041-405c-bb2c-f0563f19470d'
New stream: 'primary'
/home/beams/JEMIAN/.conda/envs/model_instrument/lib/python3.12/site-packages/bluesky/callbacks/best_effort.py:211: UserWarning: Starting a Matplotlib GUI outside of the main thread will likely fail.
  fig = self._fig_factory(fig_name)
+-----------+------------+------------+------------+
|   seq_num |       time |      motor |  noisy_det |
+-----------+------------+------------+------------+
|         1 | 12:50:44.1 |     -2.500 |    439.336 |
|         2 | 12:50:44.1 |     -2.000 |   1353.309 |
|         3 | 12:50:44.1 |     -1.500 |   3246.435 |
|         4 | 12:50:44.1 |     -1.000 |   6065.273 |
|         5 | 12:50:44.2 |     -0.500 |   8824.952 |
|         6 | 12:50:44.2 |      0.000 |   9999.999 |
|         7 | 12:50:44.2 |      0.500 |   8824.962 |
|         8 | 12:50:44.2 |      1.000 |   6065.221 |
|         9 | 12:50:44.2 |      1.500 |   3246.552 |
|        10 | 12:50:44.2 |      2.000 |   1353.398 |
|        11 | 12:50:44.2 |      2.500 |    439.459 |
+-----------+------------+------------+------------+
generator rel_scan ['be4a1fd2'] (scan num: 14)



final
Exception ignored in atexit callback: <bound method Gcf.destroy_all of <class 'matplotlib._pylab_helpers.Gcf'>>
Traceback (most recent call last):
  File "/home/beams/JEMIAN/.conda/envs/model_instrument/lib/python3.12/site-packages/matplotlib/_pylab_helpers.py", line 81, in destroy_all
    manager.destroy()
  File "/home/beams/JEMIAN/.conda/envs/model_instrument/lib/python3.12/site-packages/matplotlib/backends/_backend_tk.py", line 562, in destroy
    self.canvas._tkcanvas.after_cancel(self.canvas._idle_draw_id)
  File "/home/beams/JEMIAN/.conda/envs/model_instrument/lib/python3.12/tkinter/__init__.py", line 894, in after_cancel
    data = self.tk.call('after', 'info', id)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
RuntimeError: main thread is not in main loop

ipython

(model_instrument) jemian@otz ~/.../prjemian/model_instrument $ ipython -i ./dev_simple.py 
Python 3.12.7 | packaged by conda-forge | (main, Oct  4 2024, 16:05:46) [GCC 13.3.0]
Type 'copyright', 'credits' or 'license' for more information
IPython 8.28.0 -- An enhanced Interactive Python. Type '?' for help.
Activating auto-logging. Current session state plus future input saved.
Filename       : /home/beams1/JEMIAN/Documents/projects/prjemian/model_instrument/.logs/ipython_console.log
Mode           : rotate
Output logging : True
Raw input log  : False
Timestamping   : True
State          : active
I Thu-12:51:02 - ############################################################ startup
I Thu-12:51:02 - logging started
I Thu-12:51:02 - logging level = 10
I Thu-12:51:02 - /home/beams1/JEMIAN/Documents/projects/prjemian/model_instrument/src/instrument/utils/_logging_setup.py
I Thu-12:51:02 - /home/beams1/JEMIAN/Documents/projects/prjemian/model_instrument/src/instrument/utils/aps_functions.py
I Thu-12:51:02 - /home/beams1/JEMIAN/Documents/projects/prjemian/model_instrument/src/instrument/utils/helper_functions.py
Exception reporting mode: Minimal
I Thu-12:51:02 - xmode exception level: 'Minimal'
W Thu-12:51:02 - APS DM setup file does not exist: '/home/dm/etc/dm.setup.sh'
I Thu-12:51:02 - /home/beams1/JEMIAN/Documents/projects/prjemian/model_instrument/src/instrument/utils/controls_setup.py
I Thu-12:51:03 - /home/beams1/JEMIAN/Documents/projects/prjemian/model_instrument/src/instrument/utils/metadata.py
I Thu-12:51:03 - RunEngine metadata saved in directory: /home/beams/JEMIAN/.config/Bluesky_RunEngine_md
I Thu-12:51:03 - using ophyd control layer: 'pyepics'
(instrument.tests.sim_plans) This is a test.
(instrument.tests.sim_plans)  motor.position=0  noisy_det.read()=OrderedDict({'noisy_det': {'value': 1.0117847991417692, 'timestamp': 1728582662.9198499}}).


Transient Scan ID: 15     Time: 2024-10-10 12:51:03
Persistent Unique Scan ID: 'c4d5bc9a-15bb-47d7-a0d5-896e9745f799'
New stream: 'primary'
+-----------+------------+------------+
|   seq_num |       time |  noisy_det |
+-----------+------------+------------+
|         1 | 12:51:03.6 |   9999.909 |
+-----------+------------+------------+
generator count ['c4d5bc9a'] (scan num: 15)



(instrument.tests.sim_plans)  motor.position=0  noisy_det.read()=OrderedDict({'noisy_det': {'value': 9999.908617904832, 'timestamp': 1728582663.6753654}}).
(instrument.tests.sim_plans)  noisy_det.read_configuration()=OrderedDict({'noisy_det_Imax': {'value': 10000, 'timestamp': 1728582663.8788345}, 'noisy_det_center': {'value': 0, 'timestamp': 1728582663.8800678}, 'noisy_det_sigma': {'value': 1, 'timestamp': 1728582663.8811967}, 'noisy_det_noise': {'value': 'uniform', 'timestamp': 1728582663.8823512}, 'noisy_det_noise_multiplier': {'value': 0.1, 'timestamp': 1728582662.919334}}).
(instrument.tests.sim_plans)  noisy_det.noise._enum_strs=('none', 'poisson', 'uniform').


Transient Scan ID: 16     Time: 2024-10-10 12:51:03
Persistent Unique Scan ID: '08748bcf-4c3e-43f7-8c2c-3575960a2719'
New stream: 'primary'
/home/beams/JEMIAN/.conda/envs/model_instrument/lib/python3.12/site-packages/bluesky/callbacks/best_effort.py:211: UserWarning: Starting a Matplotlib GUI outside of the main thread will likely fail.
  fig = self._fig_factory(fig_name)
+-----------+------------+------------+------------+
|   seq_num |       time |      motor |  noisy_det |
+-----------+------------+------------+------------+
|         1 | 12:51:11.0 |     -2.500 |    439.441 |
|         2 | 12:51:11.0 |     -2.000 |   1353.450 |
|         3 | 12:51:11.0 |     -1.500 |   3246.506 |
|         4 | 12:51:11.0 |     -1.000 |   6065.234 |
|         5 | 12:51:11.0 |     -0.500 |   8825.039 |
|         6 | 12:51:11.0 |      0.000 |   9999.947 |
|         7 | 12:51:11.0 |      0.500 |   8824.943 |
|         8 | 12:51:11.0 |      1.000 |   6065.373 |
|         9 | 12:51:11.0 |      1.500 |   3246.491 |
|        10 | 12:51:11.0 |      2.000 |   1353.384 |
|        11 | 12:51:11.1 |      2.500 |    439.272 |
+-----------+------------+------------+------------+
generator rel_scan ['08748bcf'] (scan num: 16)



final

In [1]: Traceback (most recent call last):
  File "/home/beams/JEMIAN/.conda/envs/model_instrument/bin/ipython", line 8, in <module>
    sys.exit(start_ipython())
             ^^^^^^^^^^^^^^^
  File "/home/beams/JEMIAN/.conda/envs/model_instrument/lib/python3.12/site-packages/IPython/__init__.py", line 130, in start_ipython
    return launch_new_instance(argv=argv, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/beams/JEMIAN/.conda/envs/model_instrument/lib/python3.12/site-packages/traitlets/config/application.py", line 1075, in launch_instance
    app.start()
  File "/home/beams/JEMIAN/.conda/envs/model_instrument/lib/python3.12/site-packages/IPython/terminal/ipapp.py", line 317, in start
    self.shell.mainloop()
  File "/home/beams/JEMIAN/.conda/envs/model_instrument/lib/python3.12/site-packages/IPython/terminal/interactiveshell.py", line 917, in mainloop
    self.interact()
  File "/home/beams/JEMIAN/.conda/envs/model_instrument/lib/python3.12/site-packages/IPython/terminal/interactiveshell.py", line 902, in interact
    code = self.prompt_for_code()
           ^^^^^^^^^^^^^^^^^^^^^^
  File "/home/beams/JEMIAN/.conda/envs/model_instrument/lib/python3.12/site-packages/IPython/terminal/interactiveshell.py", line 845, in prompt_for_code
    text = self.pt_app.prompt(
           ^^^^^^^^^^^^^^^^^^^
  File "/home/beams/JEMIAN/.conda/envs/model_instrument/lib/python3.12/site-packages/prompt_toolkit/shortcuts/prompt.py", line 1035, in prompt
    return self.app.run(
           ^^^^^^^^^^^^^
  File "/home/beams/JEMIAN/.conda/envs/model_instrument/lib/python3.12/site-packages/prompt_toolkit/application/application.py", line 978, in run
    result = loop.run_until_complete(coro)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/beams/JEMIAN/.conda/envs/model_instrument/lib/python3.12/asyncio/base_events.py", line 674, in run_until_complete
    self.run_forever()
  File "/home/beams/JEMIAN/.conda/envs/model_instrument/lib/python3.12/asyncio/base_events.py", line 641, in run_forever
    self._run_once()
  File "/home/beams/JEMIAN/.conda/envs/model_instrument/lib/python3.12/asyncio/base_events.py", line 1948, in _run_once
    event_list = self._selector.select(timeout)
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/beams/JEMIAN/.conda/envs/model_instrument/lib/python3.12/site-packages/prompt_toolkit/eventloop/inputhook.py", line 150, in select
    self.inputhook(InputHookContext(self._r, input_is_ready))
  File "/home/beams/JEMIAN/.conda/envs/model_instrument/lib/python3.12/site-packages/IPython/terminal/pt_inputhooks/tk.py", line 88, in inputhook
    wait_using_filehandler()
  File "/home/beams/JEMIAN/.conda/envs/model_instrument/lib/python3.12/site-packages/IPython/terminal/pt_inputhooks/tk.py", line 65, in wait_using_filehandler
    root.createfilehandler(inputhook_context.fileno(), _tkinter.READABLE, done)
RuntimeError: Calling Tcl from different apartment

If you suspect this is an IPython 8.28.0 bug, please report it at:
    https://github.com/ipython/ipython/issues
or send an email to the mailing list at ipython-dev@python.org

You can print a more detailed traceback right now with "%tb", or use "%debug"
to interactively debug it.

Extra-detailed tracebacks for bug-reporting purposes can be enabled via:
    %config Application.verbose_crash=True

Exception ignored in atexit callback: <bound method Gcf.destroy_all of <class 'matplotlib._pylab_helpers.Gcf'>>
Traceback (most recent call last):
  File "/home/beams/JEMIAN/.conda/envs/model_instrument/lib/python3.12/site-packages/matplotlib/_pylab_helpers.py", line 81, in destroy_all
    manager.destroy()
  File "/home/beams/JEMIAN/.conda/envs/model_instrument/lib/python3.12/site-packages/matplotlib/backends/_backend_tk.py", line 562, in destroy
    self.canvas._tkcanvas.after_cancel(self.canvas._idle_draw_id)
  File "/home/beams/JEMIAN/.conda/envs/model_instrument/lib/python3.12/tkinter/__init__.py", line 894, in after_cancel
    data = self.tk.call('after', 'info', id)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
RuntimeError: main thread is not in main loop

@prjemian
Copy link
Owner

Is tkagg suitable? This error is shown above.

RuntimeError: Calling Tcl from different apartment

@prjemian
Copy link
Owner

APS workstation, ipython with these commands:

from instrument.startup import *
from instrument.tests.sim_plans import *

RE(sim_print_plan())
RE(sim_count_plan())
RE(sim_rel_scan_plan())

this error

/home/beams/JEMIAN/.conda/envs/model_instrument/lib/python3.12/site-packages/bluesky/callbacks/best_effort.py:211: UserWarning: Starting a Matplotlib GUI outside of the main thread will likely fail.

More testing on this later. Includes: re-install the environment per the installation instructions.

@prjemian
Copy link
Owner

Still no problems on home workstation.

@prjemian
Copy link
Owner

Same problems with fresh install on usaxscontrol. May be related to how session is started. My session starts from Windows Mobaxterm, ssh -X login to otz.

@prjemian
Copy link
Owner

Tried different login paths:

  • Windows Citrix Desktop Viewer to APS virtual Windows Mobaxterm with ssh -X to otz
  • Windows Citrix Desktop Viewer to NoMachine on muon with console session and ssh -X to otz

All fail identically with ipython.

@prjemian
Copy link
Owner

And, each time it fails, the terminal stops echoing keypresses to the console. Other output artefacts also happen. Have to create a new window to continue.

@prjemian
Copy link
Owner

I'm single-stepping through the code with the debugger and see that the mpl backend has already been assigned after this step in _logging_setup.py:

image

Could be a clue.

@prjemian
Copy link
Owner

I'm looking at a temporary change to _logging_setup.py to see how the logging setup influences the mpl setup, replacing all the existing content with:

import logging

def configure_logging():
    """Temporary logging setup."""
    brief_date = "%a-%H:%M:%S"
    brief_format = "%(levelname)-.1s %(asctime)s: %(message)s"
    logging.basicConfig(
        encoding="utf-8",
        level=logging.INFO,
        format=brief_format,
        datefmt=brief_date,
    )

    logger = logging.getLogger(__name__)
    logger.info(__file__)

    # calm logging in these other modules
    for module in "bluesky databroker ophyd".split():
        logging.getLogger(module).setLevel(logging.WARNING)

This logs only to the console, but it should help focus on the MPL initialization.

@prjemian
Copy link
Owner

With this change, this branch works for me. How about your end, too?

@prjemian
Copy link
Owner

This work was advised by https://docs.python.org/3/howto/logging.html

@prjemian prjemian mentioned this pull request Oct 11, 2024
11 tasks
@MDecarabas MDecarabas requested a review from prjemian October 11, 2024 19:20
README.md Outdated Show resolved Hide resolved
@prjemian
Copy link
Owner

Failed on my home workstation.

(bluesky_2024_3) prjemian@arf:~/.../prjemian/model_instrument$ conda create -y -n model_instrument_env python=3.10 pyepics
Retrieving notices: ...working... done
Channels:
 - conda-forge
 - apsu
 - aps-anl-tag
 - nodefaults
Platform: linux-64
Collecting package metadata (repodata.json): done
Solving environment: done

## Package Plan ##

  environment location: /home/prjemian/.conda/envs/model_instrument_env

  added / updated specs:
    - pyepics
    - python=3.10


The following packages will be downloaded:

    package                    |            build
    ---------------------------|-----------------
    importlib_resources-6.4.5  |     pyhd8ed1ab_0          32 KB  conda-forge
    libzlib-1.3.1              |       hb9d3cd8_2          60 KB  conda-forge
    numpy-2.1.2                |  py310hd6e36ab_0         7.5 MB  conda-forge
    pyepics-3.5.7              |  py310hff52083_1         4.1 MB  conda-forge
    python-3.10.15             |h4a871b0_1_cpython        24.0 MB  conda-forge
    python_abi-3.10            |          5_cp310           6 KB  conda-forge
    tzdata-2024b               |       hc8b5060_0         119 KB  conda-forge
    ------------------------------------------------------------
                                           Total:        35.8 MB

The following NEW packages will be INSTALLED:

  _libgcc_mutex      conda-forge/linux-64::_libgcc_mutex-0.1-conda_forge 
  _openmp_mutex      conda-forge/linux-64::_openmp_mutex-4.5-2_gnu 
  bzip2              conda-forge/linux-64::bzip2-1.0.8-h4bc722e_7 
  ca-certificates    conda-forge/linux-64::ca-certificates-2024.8.30-hbcca054_0 
  epics-base         conda-forge/linux-64::epics-base-7.0.7.0-h2dfad98_0 
  importlib_resourc~ conda-forge/noarch::importlib_resources-6.4.5-pyhd8ed1ab_0 
  ld_impl_linux-64   conda-forge/linux-64::ld_impl_linux-64-2.43-h712a8e2_1 
  libblas            conda-forge/linux-64::libblas-3.9.0-24_linux64_openblas 
  libcblas           conda-forge/linux-64::libcblas-3.9.0-24_linux64_openblas 
  libffi             conda-forge/linux-64::libffi-3.4.2-h7f98852_5 
  libgcc             conda-forge/linux-64::libgcc-14.1.0-h77fa898_1 
  libgcc-ng          conda-forge/linux-64::libgcc-ng-14.1.0-h69a702a_1 
  libgfortran        conda-forge/linux-64::libgfortran-14.1.0-h69a702a_1 
  libgfortran-ng     conda-forge/linux-64::libgfortran-ng-14.1.0-h69a702a_1 
  libgfortran5       conda-forge/linux-64::libgfortran5-14.1.0-hc5f4f2c_1 
  libgomp            conda-forge/linux-64::libgomp-14.1.0-h77fa898_1 
  liblapack          conda-forge/linux-64::liblapack-3.9.0-24_linux64_openblas 
  libnsl             conda-forge/linux-64::libnsl-2.0.1-hd590300_0 
  libopenblas        conda-forge/linux-64::libopenblas-0.3.27-pthreads_hac2b453_1 
  libsqlite          conda-forge/linux-64::libsqlite-3.46.1-hadc24fc_0 
  libstdcxx          conda-forge/linux-64::libstdcxx-14.1.0-hc0a3c3a_1 
  libstdcxx-ng       conda-forge/linux-64::libstdcxx-ng-14.1.0-h4852527_1 
  libuuid            conda-forge/linux-64::libuuid-2.38.1-h0b41bf4_0 
  libxcrypt          conda-forge/linux-64::libxcrypt-4.4.36-hd590300_1 
  libzlib            conda-forge/linux-64::libzlib-1.3.1-hb9d3cd8_2 
  ncurses            conda-forge/linux-64::ncurses-6.5-he02047a_1 
  numpy              conda-forge/linux-64::numpy-2.1.2-py310hd6e36ab_0 
  openssl            conda-forge/linux-64::openssl-3.3.2-hb9d3cd8_0 
  perl               conda-forge/linux-64::perl-5.32.1-7_hd590300_perl5 
  pip                conda-forge/noarch::pip-24.2-pyh8b19718_1 
  pyepics            conda-forge/linux-64::pyepics-3.5.7-py310hff52083_1 
  pyparsing          conda-forge/noarch::pyparsing-3.1.4-pyhd8ed1ab_0 
  python             conda-forge/linux-64::python-3.10.15-h4a871b0_1_cpython 
  python_abi         conda-forge/linux-64::python_abi-3.10-5_cp310 
  readline           conda-forge/linux-64::readline-8.2-h8228510_1 
  setuptools         conda-forge/noarch::setuptools-75.1.0-pyhd8ed1ab_0 
  tk                 conda-forge/linux-64::tk-8.6.13-noxft_h4845f30_101 
  tzdata             conda-forge/noarch::tzdata-2024b-hc8b5060_0 
  wheel              conda-forge/noarch::wheel-0.44.0-pyhd8ed1ab_0 
  xz                 conda-forge/linux-64::xz-5.2.6-h166bdaf_0 
  zipp               conda-forge/noarch::zipp-3.20.2-pyhd8ed1ab_0 



Downloading and Extracting Packages:
                                                                                                                                                      
Preparing transaction: done                                                                                                                           
Verifying transaction: done                                                                                                                           
Executing transaction: done                                                                                                                           
#                                                                                                                                                     
# To activate this environment, use                                                                                                                   
#                                                                                                                                                     
#     $ conda activate model_instrument_env
#
# To deactivate an active environment, use
#
#     $ conda deactivate

(bluesky_2024_3) prjemian@arf:~/.../prjemian/model_instrument$ conda activate model_instrument_env
(model_instrument_env) prjemian@arf:~/.../prjemian/model_instrument$ pip install -e ."[all]"
Obtaining file:///home/prjemian/Documents/projects/prjemian/model_instrument
  Installing build dependencies ... done
  Checking if build backend supports build_editable ... done
  Getting requirements to build editable ... done
  Preparing editable metadata (pyproject.toml) ... done
Collecting apstools (from instrument==0.1.5.dev38+g4a79000)
  Using cached apstools-1.7.0-py3-none-any.whl.metadata (6.5 kB)
Collecting bluesky-queueserver (from instrument==0.1.5.dev38+g4a79000)
  Using cached bluesky_queueserver-0.0.21-py3-none-any.whl.metadata (2.7 kB)
Collecting bluesky-queueserver-api (from instrument==0.1.5.dev38+g4a79000)
  Using cached bluesky_queueserver_api-0.0.11-py3-none-any.whl.metadata (1.8 kB)
Collecting bluesky (from instrument==0.1.5.dev38+g4a79000)
  Downloading bluesky-1.13-py3-none-any.whl.metadata (8.2 kB)
Collecting bluesky-widgets (from instrument==0.1.5.dev38+g4a79000)
  Using cached bluesky_widgets-0.0.16-py3-none-any.whl.metadata (2.7 kB)
Collecting databroker==1.2.5 (from instrument==0.1.5.dev38+g4a79000)
  Using cached databroker-1.2.5-py2.py3-none-any.whl.metadata (6.2 kB)
Collecting ipython (from instrument==0.1.5.dev38+g4a79000)
  Using cached ipython-8.28.0-py3-none-any.whl.metadata (5.0 kB)
Collecting jupyterlab (from instrument==0.1.5.dev38+g4a79000)
  Using cached jupyterlab-4.2.5-py3-none-any.whl.metadata (16 kB)
Collecting ophyd-registry (from instrument==0.1.5.dev38+g4a79000)
  Using cached ophyd_registry-1.3.3-py3-none-any.whl.metadata (9.1 kB)
Collecting ophyd (from instrument==0.1.5.dev38+g4a79000)
  Using cached ophyd-1.9.0-py3-none-any.whl.metadata (4.8 kB)
Collecting pysumreg (from instrument==0.1.5.dev38+g4a79000)
  Using cached pysumreg-1.0.6-py3-none-any.whl.metadata (19 kB)
Collecting qtpy (from instrument==0.1.5.dev38+g4a79000)
  Using cached QtPy-2.4.1-py3-none-any.whl.metadata (12 kB)
Collecting bluesky-live (from databroker==1.2.5->instrument==0.1.5.dev38+g4a79000)
  Using cached bluesky_live-0.0.8-py3-none-any.whl.metadata (1.1 kB)
Collecting boltons (from databroker==1.2.5->instrument==0.1.5.dev38+g4a79000)
  Using cached boltons-24.0.0-py3-none-any.whl.metadata (1.5 kB)
Collecting cachetools (from databroker==1.2.5->instrument==0.1.5.dev38+g4a79000)
  Using cached cachetools-5.5.0-py3-none-any.whl.metadata (5.3 kB)
Collecting dask[array,bag] (from databroker==1.2.5->instrument==0.1.5.dev38+g4a79000)
  Using cached dask-2024.9.1-py3-none-any.whl.metadata (3.7 kB)
Collecting doct (from databroker==1.2.5->instrument==0.1.5.dev38+g4a79000)
  Using cached doct-1.1.0-py3-none-any.whl.metadata (289 bytes)
Collecting event-model>=1.16.0 (from databroker==1.2.5->instrument==0.1.5.dev38+g4a79000)
  Using cached event_model-1.21.0-py3-none-any.whl.metadata (5.0 kB)
Collecting humanize (from databroker==1.2.5->instrument==0.1.5.dev38+g4a79000)
  Downloading humanize-4.11.0-py3-none-any.whl.metadata (7.8 kB)
Collecting intake<=0.6.4,>=0.5.5 (from databroker==1.2.5->instrument==0.1.5.dev38+g4a79000)
  Using cached intake-0.6.4-py3-none-any.whl.metadata (4.4 kB)
Collecting jinja2 (from databroker==1.2.5->instrument==0.1.5.dev38+g4a79000)
  Using cached jinja2-3.1.4-py3-none-any.whl.metadata (2.6 kB)
Collecting jsonschema (from databroker==1.2.5->instrument==0.1.5.dev38+g4a79000)
  Using cached jsonschema-4.23.0-py3-none-any.whl.metadata (7.9 kB)
Collecting mongoquery (from databroker==1.2.5->instrument==0.1.5.dev38+g4a79000)
  Using cached mongoquery-1.4.2-py3-none-any.whl.metadata (4.7 kB)
Collecting msgpack (from databroker==1.2.5->instrument==0.1.5.dev38+g4a79000)
  Downloading msgpack-1.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (8.4 kB)
Collecting msgpack-numpy (from databroker==1.2.5->instrument==0.1.5.dev38+g4a79000)
  Using cached msgpack_numpy-0.4.8-py2.py3-none-any.whl.metadata (5.0 kB)
Requirement already satisfied: numpy in /home/prjemian/.conda/envs/model_instrument_env/lib/python3.10/site-packages (from databroker==1.2.5->instrument==0.1.5.dev38+g4a79000) (2.1.2)
Collecting pandas (from databroker==1.2.5->instrument==0.1.5.dev38+g4a79000)
  Downloading pandas-2.2.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (89 kB)
Collecting pims (from databroker==1.2.5->instrument==0.1.5.dev38+g4a79000)
  Using cached PIMS-0.7-py3-none-any.whl
Collecting pymongo>=3.0 (from databroker==1.2.5->instrument==0.1.5.dev38+g4a79000)
  Downloading pymongo-4.10.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (22 kB)
Collecting pytz (from databroker==1.2.5->instrument==0.1.5.dev38+g4a79000)
  Using cached pytz-2024.2-py2.py3-none-any.whl.metadata (22 kB)
Collecting pyyaml (from databroker==1.2.5->instrument==0.1.5.dev38+g4a79000)
  Using cached PyYAML-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (2.1 kB)
Collecting requests (from databroker==1.2.5->instrument==0.1.5.dev38+g4a79000)
  Using cached requests-2.32.3-py3-none-any.whl.metadata (4.6 kB)
Collecting six (from databroker==1.2.5->instrument==0.1.5.dev38+g4a79000)
  Using cached six-1.16.0-py2.py3-none-any.whl.metadata (1.8 kB)
Collecting suitcase-mongo (from databroker==1.2.5->instrument==0.1.5.dev38+g4a79000)
  Using cached suitcase_mongo-0.6.0-py3-none-any.whl.metadata (1.1 kB)
Collecting suitcase-msgpack (from databroker==1.2.5->instrument==0.1.5.dev38+g4a79000)
  Using cached suitcase_msgpack-0.3.0-py3-none-any.whl.metadata (626 bytes)
Collecting tifffile!=2019.7.26.2 (from databroker==1.2.5->instrument==0.1.5.dev38+g4a79000)
  Using cached tifffile-2024.9.20-py3-none-any.whl.metadata (32 kB)
Collecting toolz (from databroker==1.2.5->instrument==0.1.5.dev38+g4a79000)
  Downloading toolz-1.0.0-py3-none-any.whl.metadata (5.1 kB)
Collecting tzlocal (from databroker==1.2.5->instrument==0.1.5.dev38+g4a79000)
  Using cached tzlocal-5.2-py3-none-any.whl.metadata (7.8 kB)
Collecting xarray (from databroker==1.2.5->instrument==0.1.5.dev38+g4a79000)
  Using cached xarray-2024.9.0-py3-none-any.whl.metadata (11 kB)
Collecting zarr (from databroker==1.2.5->instrument==0.1.5.dev38+g4a79000)
  Using cached zarr-2.18.3-py3-none-any.whl.metadata (5.7 kB)
Collecting area-detector-handlers (from apstools->instrument==0.1.5.dev38+g4a79000)
  Using cached area_detector_handlers-0.0.10-py3-none-any.whl.metadata (1.4 kB)
Collecting databroker-pack (from apstools->instrument==0.1.5.dev38+g4a79000)
  Using cached databroker_pack-0.3.0-py3-none-any.whl.metadata (1.1 kB)
Collecting entrypoints (from apstools->instrument==0.1.5.dev38+g4a79000)
  Using cached entrypoints-0.4-py3-none-any.whl.metadata (2.6 kB)
Collecting h5py (from apstools->instrument==0.1.5.dev38+g4a79000)
  Downloading h5py-3.12.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (2.5 kB)
Collecting matplotlib (from apstools->instrument==0.1.5.dev38+g4a79000)
  Using cached matplotlib-3.9.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (11 kB)
Collecting numpy (from databroker==1.2.5->instrument==0.1.5.dev38+g4a79000)
  Using cached numpy-1.26.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (61 kB)
Collecting openpyxl (from apstools->instrument==0.1.5.dev38+g4a79000)
  Using cached openpyxl-3.1.5-py2.py3-none-any.whl.metadata (2.5 kB)
Collecting pint (from apstools->instrument==0.1.5.dev38+g4a79000)
  Using cached Pint-0.24.3-py3-none-any.whl.metadata (8.5 kB)
Collecting psutil (from apstools->instrument==0.1.5.dev38+g4a79000)
  Using cached psutil-6.0.0-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (21 kB)
Requirement already satisfied: pyepics>=3.4.2 in /home/prjemian/.conda/envs/model_instrument_env/lib/python3.10/site-packages (from apstools->instrument==0.1.5.dev38+g4a79000) (3.5.7)
Collecting pyRestTable>=2020.0.8 (from apstools->instrument==0.1.5.dev38+g4a79000)
  Using cached pyRestTable-2020.0.10-py3-none-any.whl.metadata (17 kB)
Collecting scipy (from apstools->instrument==0.1.5.dev38+g4a79000)
  Downloading scipy-1.14.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (60 kB)
Collecting spec2nexus>=2021.1.7 (from apstools->instrument==0.1.5.dev38+g4a79000)
  Using cached spec2nexus-2021.2.6-py3-none-any.whl.metadata (5.9 kB)
Collecting xlrd (from apstools->instrument==0.1.5.dev38+g4a79000)
  Using cached xlrd-2.0.1-py2.py3-none-any.whl.metadata (3.4 kB)
Collecting cycler (from bluesky->instrument==0.1.5.dev38+g4a79000)
  Using cached cycler-0.12.1-py3-none-any.whl.metadata (3.8 kB)
Collecting historydict (from bluesky->instrument==0.1.5.dev38+g4a79000)
  Using cached historydict-1.2.6-py3-none-any.whl.metadata (323 bytes)
Collecting opentelemetry-api (from bluesky->instrument==0.1.5.dev38+g4a79000)
  Downloading opentelemetry_api-1.27.0-py3-none-any.whl.metadata (1.4 kB)
Collecting tqdm>=4.44 (from bluesky->instrument==0.1.5.dev38+g4a79000)
  Using cached tqdm-4.66.5-py3-none-any.whl.metadata (57 kB)
Collecting zict<3.0.0 (from bluesky->instrument==0.1.5.dev38+g4a79000)
  Using cached zict-2.2.0-py2.py3-none-any.whl.metadata (922 bytes)
Collecting typing-extensions>=4.0.0 (from bluesky->instrument==0.1.5.dev38+g4a79000)
  Using cached typing_extensions-4.12.2-py3-none-any.whl.metadata (3.0 kB)
Collecting networkx>=2.0 (from ophyd->instrument==0.1.5.dev38+g4a79000)
  Downloading networkx-3.4-py3-none-any.whl.metadata (6.3 kB)
Collecting packaging (from ophyd->instrument==0.1.5.dev38+g4a79000)
  Using cached packaging-24.1-py3-none-any.whl.metadata (3.2 kB)
Collecting bluesky-kafka (from bluesky-queueserver->instrument==0.1.5.dev38+g4a79000)
  Using cached bluesky_kafka-0.10.0-py3-none-any.whl.metadata (2.3 kB)
Collecting ipykernel (from bluesky-queueserver->instrument==0.1.5.dev38+g4a79000)
  Using cached ipykernel-6.29.5-py3-none-any.whl.metadata (6.3 kB)
Collecting jupyter-client>=7.4.2 (from bluesky-queueserver->instrument==0.1.5.dev38+g4a79000)
  Using cached jupyter_client-8.6.3-py3-none-any.whl.metadata (8.3 kB)
Collecting jupyter-console (from bluesky-queueserver->instrument==0.1.5.dev38+g4a79000)
  Using cached jupyter_console-6.6.3-py3-none-any.whl.metadata (5.8 kB)
Collecting scikit-image (from bluesky-queueserver->instrument==0.1.5.dev38+g4a79000)
  Using cached scikit_image-0.24.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (14 kB)
Collecting numpydoc (from bluesky-queueserver->instrument==0.1.5.dev38+g4a79000)
  Using cached numpydoc-1.8.0-py3-none-any.whl.metadata (4.3 kB)
Collecting pyarrow (from bluesky-queueserver->instrument==0.1.5.dev38+g4a79000)
  Using cached pyarrow-17.0.0-cp310-cp310-manylinux_2_28_x86_64.whl.metadata (3.3 kB)
Collecting pydantic (from bluesky-queueserver->instrument==0.1.5.dev38+g4a79000)
  Using cached pydantic-2.9.2-py3-none-any.whl.metadata (149 kB)
Collecting python-multipart (from bluesky-queueserver->instrument==0.1.5.dev38+g4a79000)
  Using cached python_multipart-0.0.12-py3-none-any.whl.metadata (1.9 kB)
Collecting pyzmq (from bluesky-queueserver->instrument==0.1.5.dev38+g4a79000)
  Downloading pyzmq-26.2.0-cp310-cp310-manylinux_2_28_x86_64.whl.metadata (6.2 kB)
Collecting redis[hiredis] (from bluesky-queueserver->instrument==0.1.5.dev38+g4a79000)
  Downloading redis-5.1.1-py3-none-any.whl.metadata (9.1 kB)
Collecting httpx (from bluesky-queueserver-api->instrument==0.1.5.dev38+g4a79000)
  Using cached httpx-0.27.2-py3-none-any.whl.metadata (7.1 kB)
Collecting suitcase-utils<=0.5.3 (from bluesky-widgets->instrument==0.1.5.dev38+g4a79000)
  Using cached suitcase_utils-0.5.3-py3-none-any.whl.metadata (913 bytes)
Collecting build (from instrument==0.1.5.dev38+g4a79000)
  Downloading build-1.2.2.post1-py3-none-any.whl.metadata (6.5 kB)
Collecting isort (from instrument==0.1.5.dev38+g4a79000)
  Using cached isort-5.13.2-py3-none-any.whl.metadata (12 kB)
Collecting mypy (from instrument==0.1.5.dev38+g4a79000)
  Downloading mypy-1.11.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl.metadata (1.9 kB)
Collecting pre-commit (from instrument==0.1.5.dev38+g4a79000)
  Downloading pre_commit-4.0.1-py2.py3-none-any.whl.metadata (1.3 kB)
Collecting pytest (from instrument==0.1.5.dev38+g4a79000)
  Using cached pytest-8.3.3-py3-none-any.whl.metadata (7.5 kB)
Collecting ruff (from instrument==0.1.5.dev38+g4a79000)
  Downloading ruff-0.6.9-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (25 kB)
Collecting babel (from instrument==0.1.5.dev38+g4a79000)
  Using cached babel-2.16.0-py3-none-any.whl.metadata (1.5 kB)
Collecting markupsafe (from instrument==0.1.5.dev38+g4a79000)
  Downloading MarkupSafe-3.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.0 kB)
Collecting myst-parser (from instrument==0.1.5.dev38+g4a79000)
  Using cached myst_parser-4.0.0-py3-none-any.whl.metadata (5.4 kB)
Collecting nbsphinx (from instrument==0.1.5.dev38+g4a79000)
  Using cached nbsphinx-0.9.5-py3-none-any.whl.metadata (2.1 kB)
Collecting pygments-ipython-console (from instrument==0.1.5.dev38+g4a79000)
  Using cached pygments_ipython_console-1.0.1-py3-none-any.whl.metadata (2.0 kB)
Collecting pygments (from instrument==0.1.5.dev38+g4a79000)
  Using cached pygments-2.18.0-py3-none-any.whl.metadata (2.5 kB)
Collecting sphinx-design (from instrument==0.1.5.dev38+g4a79000)
  Using cached sphinx_design-0.6.1-py3-none-any.whl.metadata (5.5 kB)
Collecting sphinx-tabs (from instrument==0.1.5.dev38+g4a79000)
  Downloading sphinx_tabs-3.4.7-py3-none-any.whl.metadata (6.3 kB)
Collecting sphinx (from instrument==0.1.5.dev38+g4a79000)
  Downloading sphinx-8.1.0-py3-none-any.whl.metadata (6.4 kB)
Collecting decorator (from ipython->instrument==0.1.5.dev38+g4a79000)
  Using cached decorator-5.1.1-py3-none-any.whl.metadata (4.0 kB)
Collecting jedi>=0.16 (from ipython->instrument==0.1.5.dev38+g4a79000)
  Using cached jedi-0.19.1-py2.py3-none-any.whl.metadata (22 kB)
Collecting matplotlib-inline (from ipython->instrument==0.1.5.dev38+g4a79000)
  Using cached matplotlib_inline-0.1.7-py3-none-any.whl.metadata (3.9 kB)
Collecting prompt-toolkit<3.1.0,>=3.0.41 (from ipython->instrument==0.1.5.dev38+g4a79000)
  Using cached prompt_toolkit-3.0.48-py3-none-any.whl.metadata (6.4 kB)
Collecting stack-data (from ipython->instrument==0.1.5.dev38+g4a79000)
  Using cached stack_data-0.6.3-py3-none-any.whl.metadata (18 kB)
Collecting traitlets>=5.13.0 (from ipython->instrument==0.1.5.dev38+g4a79000)
  Using cached traitlets-5.14.3-py3-none-any.whl.metadata (10 kB)
Collecting exceptiongroup (from ipython->instrument==0.1.5.dev38+g4a79000)
  Using cached exceptiongroup-1.2.2-py3-none-any.whl.metadata (6.6 kB)
Collecting pexpect>4.3 (from ipython->instrument==0.1.5.dev38+g4a79000)
  Using cached pexpect-4.9.0-py2.py3-none-any.whl.metadata (2.5 kB)
Collecting async-lru>=1.0.0 (from jupyterlab->instrument==0.1.5.dev38+g4a79000)
  Using cached async_lru-2.0.4-py3-none-any.whl.metadata (4.5 kB)
Collecting jupyter-core (from jupyterlab->instrument==0.1.5.dev38+g4a79000)
  Using cached jupyter_core-5.7.2-py3-none-any.whl.metadata (3.4 kB)
Collecting jupyter-lsp>=2.0.0 (from jupyterlab->instrument==0.1.5.dev38+g4a79000)
  Using cached jupyter_lsp-2.2.5-py3-none-any.whl.metadata (1.8 kB)
Collecting jupyter-server<3,>=2.4.0 (from jupyterlab->instrument==0.1.5.dev38+g4a79000)
  Using cached jupyter_server-2.14.2-py3-none-any.whl.metadata (8.4 kB)
Collecting jupyterlab-server<3,>=2.27.1 (from jupyterlab->instrument==0.1.5.dev38+g4a79000)
  Using cached jupyterlab_server-2.27.3-py3-none-any.whl.metadata (5.9 kB)
Collecting notebook-shim>=0.2 (from jupyterlab->instrument==0.1.5.dev38+g4a79000)
  Using cached notebook_shim-0.2.4-py3-none-any.whl.metadata (4.0 kB)
Requirement already satisfied: setuptools>=40.1.0 in /home/prjemian/.conda/envs/model_instrument_env/lib/python3.10/site-packages (from jupyterlab->instrument==0.1.5.dev38+g4a79000) (75.1.0)
Collecting tomli>=1.2.2 (from jupyterlab->instrument==0.1.5.dev38+g4a79000)
  Using cached tomli-2.0.2-py3-none-any.whl.metadata (10.0 kB)
Collecting tornado>=6.2.0 (from jupyterlab->instrument==0.1.5.dev38+g4a79000)
  Using cached tornado-6.4.1-cp38-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (2.5 kB)
Requirement already satisfied: importlib-resources in /home/prjemian/.conda/envs/model_instrument_env/lib/python3.10/site-packages (from event-model>=1.16.0->databroker==1.2.5->instrument==0.1.5.dev38+g4a79000) (6.4.5)
Collecting anyio (from httpx->bluesky-queueserver-api->instrument==0.1.5.dev38+g4a79000)
  Using cached anyio-4.6.0-py3-none-any.whl.metadata (4.6 kB)
Collecting certifi (from httpx->bluesky-queueserver-api->instrument==0.1.5.dev38+g4a79000)
  Using cached certifi-2024.8.30-py3-none-any.whl.metadata (2.2 kB)
Collecting httpcore==1.* (from httpx->bluesky-queueserver-api->instrument==0.1.5.dev38+g4a79000)
  Using cached httpcore-1.0.6-py3-none-any.whl.metadata (21 kB)
Collecting idna (from httpx->bluesky-queueserver-api->instrument==0.1.5.dev38+g4a79000)
  Using cached idna-3.10-py3-none-any.whl.metadata (10 kB)
Collecting sniffio (from httpx->bluesky-queueserver-api->instrument==0.1.5.dev38+g4a79000)
  Using cached sniffio-1.3.1-py3-none-any.whl.metadata (3.9 kB)
Collecting h11<0.15,>=0.13 (from httpcore==1.*->httpx->bluesky-queueserver-api->instrument==0.1.5.dev38+g4a79000)
  Using cached h11-0.14.0-py3-none-any.whl.metadata (8.2 kB)
Collecting appdirs (from intake<=0.6.4,>=0.5.5->databroker==1.2.5->instrument==0.1.5.dev38+g4a79000)
  Using cached appdirs-1.4.4-py2.py3-none-any.whl.metadata (9.0 kB)
Collecting fsspec>=0.7.4 (from intake<=0.6.4,>=0.5.5->databroker==1.2.5->instrument==0.1.5.dev38+g4a79000)
  Using cached fsspec-2024.9.0-py3-none-any.whl.metadata (11 kB)
Collecting comm>=0.1.1 (from ipykernel->bluesky-queueserver->instrument==0.1.5.dev38+g4a79000)
  Using cached comm-0.2.2-py3-none-any.whl.metadata (3.7 kB)
Collecting debugpy>=1.6.5 (from ipykernel->bluesky-queueserver->instrument==0.1.5.dev38+g4a79000)
  Downloading debugpy-1.8.7-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (1.1 kB)
Collecting nest-asyncio (from ipykernel->bluesky-queueserver->instrument==0.1.5.dev38+g4a79000)
  Using cached nest_asyncio-1.6.0-py3-none-any.whl.metadata (2.8 kB)
Collecting parso<0.9.0,>=0.8.3 (from jedi>=0.16->ipython->instrument==0.1.5.dev38+g4a79000)
  Using cached parso-0.8.4-py2.py3-none-any.whl.metadata (7.7 kB)
Collecting attrs>=22.2.0 (from jsonschema->databroker==1.2.5->instrument==0.1.5.dev38+g4a79000)
  Using cached attrs-24.2.0-py3-none-any.whl.metadata (11 kB)
Collecting jsonschema-specifications>=2023.03.6 (from jsonschema->databroker==1.2.5->instrument==0.1.5.dev38+g4a79000)
  Downloading jsonschema_specifications-2024.10.1-py3-none-any.whl.metadata (3.0 kB)
Collecting referencing>=0.28.4 (from jsonschema->databroker==1.2.5->instrument==0.1.5.dev38+g4a79000)
  Using cached referencing-0.35.1-py3-none-any.whl.metadata (2.8 kB)
Collecting rpds-py>=0.7.1 (from jsonschema->databroker==1.2.5->instrument==0.1.5.dev38+g4a79000)
  Using cached rpds_py-0.20.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.2 kB)
Collecting python-dateutil>=2.8.2 (from jupyter-client>=7.4.2->bluesky-queueserver->instrument==0.1.5.dev38+g4a79000)
  Using cached python_dateutil-2.9.0.post0-py2.py3-none-any.whl.metadata (8.4 kB)
Collecting platformdirs>=2.5 (from jupyter-core->jupyterlab->instrument==0.1.5.dev38+g4a79000)
  Using cached platformdirs-4.3.6-py3-none-any.whl.metadata (11 kB)
Collecting argon2-cffi>=21.1 (from jupyter-server<3,>=2.4.0->jupyterlab->instrument==0.1.5.dev38+g4a79000)
  Using cached argon2_cffi-23.1.0-py3-none-any.whl.metadata (5.2 kB)
Collecting jupyter-events>=0.9.0 (from jupyter-server<3,>=2.4.0->jupyterlab->instrument==0.1.5.dev38+g4a79000)
  Using cached jupyter_events-0.10.0-py3-none-any.whl.metadata (5.9 kB)
Collecting jupyter-server-terminals>=0.4.4 (from jupyter-server<3,>=2.4.0->jupyterlab->instrument==0.1.5.dev38+g4a79000)
  Using cached jupyter_server_terminals-0.5.3-py3-none-any.whl.metadata (5.6 kB)
Collecting nbconvert>=6.4.4 (from jupyter-server<3,>=2.4.0->jupyterlab->instrument==0.1.5.dev38+g4a79000)
  Using cached nbconvert-7.16.4-py3-none-any.whl.metadata (8.5 kB)
Collecting nbformat>=5.3.0 (from jupyter-server<3,>=2.4.0->jupyterlab->instrument==0.1.5.dev38+g4a79000)
  Using cached nbformat-5.10.4-py3-none-any.whl.metadata (3.6 kB)
Collecting overrides>=5.0 (from jupyter-server<3,>=2.4.0->jupyterlab->instrument==0.1.5.dev38+g4a79000)
  Using cached overrides-7.7.0-py3-none-any.whl.metadata (5.8 kB)
Collecting prometheus-client>=0.9 (from jupyter-server<3,>=2.4.0->jupyterlab->instrument==0.1.5.dev38+g4a79000)
  Using cached prometheus_client-0.21.0-py3-none-any.whl.metadata (1.8 kB)
Collecting send2trash>=1.8.2 (from jupyter-server<3,>=2.4.0->jupyterlab->instrument==0.1.5.dev38+g4a79000)
  Using cached Send2Trash-1.8.3-py3-none-any.whl.metadata (4.0 kB)
Collecting terminado>=0.8.3 (from jupyter-server<3,>=2.4.0->jupyterlab->instrument==0.1.5.dev38+g4a79000)
  Using cached terminado-0.18.1-py3-none-any.whl.metadata (5.8 kB)
Collecting websocket-client>=1.7 (from jupyter-server<3,>=2.4.0->jupyterlab->instrument==0.1.5.dev38+g4a79000)
  Using cached websocket_client-1.8.0-py3-none-any.whl.metadata (8.0 kB)
Collecting json5>=0.9.0 (from jupyterlab-server<3,>=2.27.1->jupyterlab->instrument==0.1.5.dev38+g4a79000)
  Using cached json5-0.9.25-py3-none-any.whl.metadata (30 kB)
Collecting ptyprocess>=0.5 (from pexpect>4.3->ipython->instrument==0.1.5.dev38+g4a79000)
  Using cached ptyprocess-0.7.0-py2.py3-none-any.whl.metadata (1.3 kB)
Collecting wcwidth (from prompt-toolkit<3.1.0,>=3.0.41->ipython->instrument==0.1.5.dev38+g4a79000)
  Using cached wcwidth-0.2.13-py2.py3-none-any.whl.metadata (14 kB)
Requirement already satisfied: pyparsing in /home/prjemian/.conda/envs/model_instrument_env/lib/python3.10/site-packages (from pyepics>=3.4.2->apstools->instrument==0.1.5.dev38+g4a79000) (3.1.4)
Collecting dnspython<3.0.0,>=1.16.0 (from pymongo>=3.0->databroker==1.2.5->instrument==0.1.5.dev38+g4a79000)
  Downloading dnspython-2.7.0-py3-none-any.whl.metadata (5.8 kB)
Collecting lxml (from pyRestTable>=2020.0.8->apstools->instrument==0.1.5.dev38+g4a79000)
  Downloading lxml-5.3.0-cp310-cp310-manylinux_2_28_x86_64.whl.metadata (3.8 kB)
Collecting charset-normalizer<4,>=2 (from requests->databroker==1.2.5->instrument==0.1.5.dev38+g4a79000)
  Downloading charset_normalizer-3.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (34 kB)
Collecting urllib3<3,>=1.21.1 (from requests->databroker==1.2.5->instrument==0.1.5.dev38+g4a79000)
  Using cached urllib3-2.2.3-py3-none-any.whl.metadata (6.5 kB)
Requirement already satisfied: pip in /home/prjemian/.conda/envs/model_instrument_env/lib/python3.10/site-packages (from spec2nexus>=2021.1.7->apstools->instrument==0.1.5.dev38+g4a79000) (24.2)
Collecting setuptools-scm (from spec2nexus>=2021.1.7->apstools->instrument==0.1.5.dev38+g4a79000)
  Using cached setuptools_scm-8.1.0-py3-none-any.whl.metadata (6.6 kB)
Collecting heapdict (from zict<3.0.0->bluesky->instrument==0.1.5.dev38+g4a79000)
  Using cached HeapDict-1.0.1-py3-none-any.whl.metadata (1.9 kB)
Collecting confluent-kafka (from bluesky-kafka->bluesky-queueserver->instrument==0.1.5.dev38+g4a79000)
  Downloading confluent_kafka-2.6.0-cp310-cp310-manylinux_2_28_x86_64.whl.metadata (2.3 kB)
Collecting pyproject_hooks (from build->instrument==0.1.5.dev38+g4a79000)
  Using cached pyproject_hooks-1.2.0-py3-none-any.whl.metadata (1.3 kB)
Collecting click>=8.1 (from dask[array,bag]->databroker==1.2.5->instrument==0.1.5.dev38+g4a79000)
  Using cached click-8.1.7-py3-none-any.whl.metadata (3.0 kB)
Collecting cloudpickle>=3.0.0 (from dask[array,bag]->databroker==1.2.5->instrument==0.1.5.dev38+g4a79000)
  Downloading cloudpickle-3.1.0-py3-none-any.whl.metadata (7.0 kB)
Collecting partd>=1.4.0 (from dask[array,bag]->databroker==1.2.5->instrument==0.1.5.dev38+g4a79000)
  Using cached partd-1.4.2-py3-none-any.whl.metadata (4.6 kB)
Collecting importlib-metadata>=4.13.0 (from dask[array,bag]->databroker==1.2.5->instrument==0.1.5.dev38+g4a79000)
  Using cached importlib_metadata-8.5.0-py3-none-any.whl.metadata (4.8 kB)
Collecting suitcase-jsonl (from databroker-pack->apstools->instrument==0.1.5.dev38+g4a79000)
  Using cached suitcase_jsonl-0.2.2-py3-none-any.whl.metadata (548 bytes)
Collecting prettytable (from doct->databroker==1.2.5->instrument==0.1.5.dev38+g4a79000)
  Using cached prettytable-3.11.0-py3-none-any.whl.metadata (30 kB)
Collecting contourpy>=1.0.1 (from matplotlib->apstools->instrument==0.1.5.dev38+g4a79000)
  Using cached contourpy-1.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (5.4 kB)
Collecting fonttools>=4.22.0 (from matplotlib->apstools->instrument==0.1.5.dev38+g4a79000)
  Downloading fonttools-4.54.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (163 kB)
Collecting kiwisolver>=1.3.1 (from matplotlib->apstools->instrument==0.1.5.dev38+g4a79000)
  Downloading kiwisolver-1.4.7-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl.metadata (6.3 kB)
Collecting pillow>=8 (from matplotlib->apstools->instrument==0.1.5.dev38+g4a79000)
  Using cached pillow-10.4.0-cp310-cp310-manylinux_2_28_x86_64.whl.metadata (9.2 kB)
Collecting mypy-extensions>=1.0.0 (from mypy->instrument==0.1.5.dev38+g4a79000)
  Using cached mypy_extensions-1.0.0-py3-none-any.whl.metadata (1.1 kB)
Collecting docutils<0.22,>=0.19 (from myst-parser->instrument==0.1.5.dev38+g4a79000)
  Using cached docutils-0.21.2-py3-none-any.whl.metadata (2.8 kB)
Collecting markdown-it-py~=3.0 (from myst-parser->instrument==0.1.5.dev38+g4a79000)
  Using cached markdown_it_py-3.0.0-py3-none-any.whl.metadata (6.9 kB)
Collecting mdit-py-plugins>=0.4.1,~=0.4 (from myst-parser->instrument==0.1.5.dev38+g4a79000)
  Using cached mdit_py_plugins-0.4.2-py3-none-any.whl.metadata (2.8 kB)
Collecting sphinxcontrib-applehelp>=1.0.7 (from sphinx->instrument==0.1.5.dev38+g4a79000)
  Using cached sphinxcontrib_applehelp-2.0.0-py3-none-any.whl.metadata (2.3 kB)
Collecting sphinxcontrib-devhelp>=1.0.6 (from sphinx->instrument==0.1.5.dev38+g4a79000)
  Using cached sphinxcontrib_devhelp-2.0.0-py3-none-any.whl.metadata (2.3 kB)
Collecting sphinxcontrib-htmlhelp>=2.0.6 (from sphinx->instrument==0.1.5.dev38+g4a79000)
  Using cached sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl.metadata (2.3 kB)
Collecting sphinxcontrib-jsmath>=1.0.1 (from sphinx->instrument==0.1.5.dev38+g4a79000)
  Using cached sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl.metadata (1.4 kB)
Collecting sphinxcontrib-qthelp>=1.0.6 (from sphinx->instrument==0.1.5.dev38+g4a79000)
  Using cached sphinxcontrib_qthelp-2.0.0-py3-none-any.whl.metadata (2.3 kB)
Collecting sphinxcontrib-serializinghtml>=1.1.9 (from sphinx->instrument==0.1.5.dev38+g4a79000)
  Using cached sphinxcontrib_serializinghtml-2.0.0-py3-none-any.whl.metadata (2.4 kB)
Collecting snowballstemmer>=2.2 (from sphinx->instrument==0.1.5.dev38+g4a79000)
  Using cached snowballstemmer-2.2.0-py2.py3-none-any.whl.metadata (6.5 kB)
Collecting alabaster>=0.7.14 (from sphinx->instrument==0.1.5.dev38+g4a79000)
  Using cached alabaster-1.0.0-py3-none-any.whl.metadata (2.8 kB)
Collecting imagesize>=1.3 (from sphinx->instrument==0.1.5.dev38+g4a79000)
  Using cached imagesize-1.4.1-py2.py3-none-any.whl.metadata (1.5 kB)
Collecting tabulate>=0.8.10 (from numpydoc->bluesky-queueserver->instrument==0.1.5.dev38+g4a79000)
  Using cached tabulate-0.9.0-py3-none-any.whl.metadata (34 kB)
Collecting et-xmlfile (from openpyxl->apstools->instrument==0.1.5.dev38+g4a79000)
  Using cached et_xmlfile-1.1.0-py3-none-any.whl.metadata (1.8 kB)
Collecting deprecated>=1.2.6 (from opentelemetry-api->bluesky->instrument==0.1.5.dev38+g4a79000)
  Downloading Deprecated-1.2.14-py2.py3-none-any.whl.metadata (5.4 kB)
Collecting importlib-metadata>=4.13.0 (from dask[array,bag]->databroker==1.2.5->instrument==0.1.5.dev38+g4a79000)
  Using cached importlib_metadata-8.4.0-py3-none-any.whl.metadata (4.7 kB)
Collecting tzdata>=2022.7 (from pandas->databroker==1.2.5->instrument==0.1.5.dev38+g4a79000)
  Using cached tzdata-2024.2-py2.py3-none-any.whl.metadata (1.4 kB)
Collecting imageio (from pims->databroker==1.2.5->instrument==0.1.5.dev38+g4a79000)
  Using cached imageio-2.35.1-py3-none-any.whl.metadata (4.9 kB)
Collecting slicerator>=0.9.8 (from pims->databroker==1.2.5->instrument==0.1.5.dev38+g4a79000)
  Using cached slicerator-1.1.0-py3-none-any.whl.metadata (1.9 kB)
Collecting flexcache>=0.3 (from pint->apstools->instrument==0.1.5.dev38+g4a79000)
  Using cached flexcache-0.3-py3-none-any.whl.metadata (7.0 kB)
Collecting flexparser>=0.3 (from pint->apstools->instrument==0.1.5.dev38+g4a79000)
  Using cached flexparser-0.3.1-py3-none-any.whl.metadata (18 kB)
Collecting cfgv>=2.0.0 (from pre-commit->instrument==0.1.5.dev38+g4a79000)
  Using cached cfgv-3.4.0-py2.py3-none-any.whl.metadata (8.5 kB)
Collecting identify>=1.0.0 (from pre-commit->instrument==0.1.5.dev38+g4a79000)
  Using cached identify-2.6.1-py2.py3-none-any.whl.metadata (4.4 kB)
Collecting nodeenv>=0.11.1 (from pre-commit->instrument==0.1.5.dev38+g4a79000)
  Using cached nodeenv-1.9.1-py2.py3-none-any.whl.metadata (21 kB)
Collecting virtualenv>=20.10.0 (from pre-commit->instrument==0.1.5.dev38+g4a79000)
  Using cached virtualenv-20.26.6-py3-none-any.whl.metadata (4.5 kB)
Collecting annotated-types>=0.6.0 (from pydantic->bluesky-queueserver->instrument==0.1.5.dev38+g4a79000)
  Using cached annotated_types-0.7.0-py3-none-any.whl.metadata (15 kB)
Collecting pydantic-core==2.23.4 (from pydantic->bluesky-queueserver->instrument==0.1.5.dev38+g4a79000)
  Downloading pydantic_core-2.23.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (6.6 kB)
Collecting iniconfig (from pytest->instrument==0.1.5.dev38+g4a79000)
  Using cached iniconfig-2.0.0-py3-none-any.whl.metadata (2.6 kB)
Collecting pluggy<2,>=1.5 (from pytest->instrument==0.1.5.dev38+g4a79000)
  Using cached pluggy-1.5.0-py3-none-any.whl.metadata (4.8 kB)
Collecting async-timeout>=4.0.3 (from redis[hiredis]->bluesky-queueserver->instrument==0.1.5.dev38+g4a79000)
  Using cached async_timeout-4.0.3-py3-none-any.whl.metadata (4.2 kB)
Collecting hiredis>=3.0.0 (from redis[hiredis]->bluesky-queueserver->instrument==0.1.5.dev38+g4a79000)
  Using cached hiredis-3.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (7.2 kB)
Collecting lazy-loader>=0.4 (from scikit-image->bluesky-queueserver->instrument==0.1.5.dev38+g4a79000)
  Using cached lazy_loader-0.4-py3-none-any.whl.metadata (7.6 kB)
Collecting executing>=1.2.0 (from stack-data->ipython->instrument==0.1.5.dev38+g4a79000)
  Using cached executing-2.1.0-py2.py3-none-any.whl.metadata (8.9 kB)
Collecting asttokens>=2.1.0 (from stack-data->ipython->instrument==0.1.5.dev38+g4a79000)
  Using cached asttokens-2.4.1-py2.py3-none-any.whl.metadata (5.2 kB)
Collecting pure-eval (from stack-data->ipython->instrument==0.1.5.dev38+g4a79000)
  Using cached pure_eval-0.2.3-py3-none-any.whl.metadata (6.3 kB)
Collecting asciitree (from zarr->databroker==1.2.5->instrument==0.1.5.dev38+g4a79000)
  Using cached asciitree-0.3.3-py3-none-any.whl
Collecting numcodecs>=0.10.0 (from zarr->databroker==1.2.5->instrument==0.1.5.dev38+g4a79000)
  Downloading numcodecs-0.13.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (2.9 kB)
Collecting fasteners (from zarr->databroker==1.2.5->instrument==0.1.5.dev38+g4a79000)
  Using cached fasteners-0.19-py3-none-any.whl.metadata (4.9 kB)
Collecting argon2-cffi-bindings (from argon2-cffi>=21.1->jupyter-server<3,>=2.4.0->jupyterlab->instrument==0.1.5.dev38+g4a79000)
  Using cached argon2_cffi_bindings-21.2.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (6.7 kB)
Collecting wrapt<2,>=1.10 (from deprecated>=1.2.6->opentelemetry-api->bluesky->instrument==0.1.5.dev38+g4a79000)
  Downloading wrapt-1.16.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (6.6 kB)
Requirement already satisfied: zipp>=0.5 in /home/prjemian/.conda/envs/model_instrument_env/lib/python3.10/site-packages (from importlib-metadata>=4.13.0->dask[array,bag]->databroker==1.2.5->instrument==0.1.5.dev38+g4a79000) (3.20.2)
Collecting python-json-logger>=2.0.4 (from jupyter-events>=0.9.0->jupyter-server<3,>=2.4.0->jupyterlab->instrument==0.1.5.dev38+g4a79000)
  Using cached python_json_logger-2.0.7-py3-none-any.whl.metadata (6.5 kB)
Collecting rfc3339-validator (from jupyter-events>=0.9.0->jupyter-server<3,>=2.4.0->jupyterlab->instrument==0.1.5.dev38+g4a79000)
  Using cached rfc3339_validator-0.1.4-py2.py3-none-any.whl.metadata (1.5 kB)
Collecting rfc3986-validator>=0.1.1 (from jupyter-events>=0.9.0->jupyter-server<3,>=2.4.0->jupyterlab->instrument==0.1.5.dev38+g4a79000)
  Using cached rfc3986_validator-0.1.1-py2.py3-none-any.whl.metadata (1.7 kB)
Collecting mdurl~=0.1 (from markdown-it-py~=3.0->myst-parser->instrument==0.1.5.dev38+g4a79000)
  Using cached mdurl-0.1.2-py3-none-any.whl.metadata (1.6 kB)
Collecting beautifulsoup4 (from nbconvert>=6.4.4->jupyter-server<3,>=2.4.0->jupyterlab->instrument==0.1.5.dev38+g4a79000)
  Using cached beautifulsoup4-4.12.3-py3-none-any.whl.metadata (3.8 kB)
Collecting bleach!=5.0.0 (from nbconvert>=6.4.4->jupyter-server<3,>=2.4.0->jupyterlab->instrument==0.1.5.dev38+g4a79000)
  Using cached bleach-6.1.0-py3-none-any.whl.metadata (30 kB)
Collecting defusedxml (from nbconvert>=6.4.4->jupyter-server<3,>=2.4.0->jupyterlab->instrument==0.1.5.dev38+g4a79000)
  Using cached defusedxml-0.7.1-py2.py3-none-any.whl.metadata (32 kB)
Collecting jupyterlab-pygments (from nbconvert>=6.4.4->jupyter-server<3,>=2.4.0->jupyterlab->instrument==0.1.5.dev38+g4a79000)
  Using cached jupyterlab_pygments-0.3.0-py3-none-any.whl.metadata (4.4 kB)
Collecting mistune<4,>=2.0.3 (from nbconvert>=6.4.4->jupyter-server<3,>=2.4.0->jupyterlab->instrument==0.1.5.dev38+g4a79000)
  Using cached mistune-3.0.2-py3-none-any.whl.metadata (1.7 kB)
Collecting nbclient>=0.5.0 (from nbconvert>=6.4.4->jupyter-server<3,>=2.4.0->jupyterlab->instrument==0.1.5.dev38+g4a79000)
  Using cached nbclient-0.10.0-py3-none-any.whl.metadata (7.8 kB)
Collecting pandocfilters>=1.4.1 (from nbconvert>=6.4.4->jupyter-server<3,>=2.4.0->jupyterlab->instrument==0.1.5.dev38+g4a79000)
  Using cached pandocfilters-1.5.1-py2.py3-none-any.whl.metadata (9.0 kB)
Collecting tinycss2 (from nbconvert>=6.4.4->jupyter-server<3,>=2.4.0->jupyterlab->instrument==0.1.5.dev38+g4a79000)
  Using cached tinycss2-1.3.0-py3-none-any.whl.metadata (3.0 kB)
Collecting fastjsonschema>=2.15 (from nbformat>=5.3.0->jupyter-server<3,>=2.4.0->jupyterlab->instrument==0.1.5.dev38+g4a79000)
  Using cached fastjsonschema-2.20.0-py3-none-any.whl.metadata (2.1 kB)
Collecting locket (from partd>=1.4.0->dask[array,bag]->databroker==1.2.5->instrument==0.1.5.dev38+g4a79000)
  Using cached locket-1.0.0-py2.py3-none-any.whl.metadata (2.8 kB)
Collecting distlib<1,>=0.3.7 (from virtualenv>=20.10.0->pre-commit->instrument==0.1.5.dev38+g4a79000)
  Downloading distlib-0.3.9-py2.py3-none-any.whl.metadata (5.2 kB)
Collecting filelock<4,>=3.12.2 (from virtualenv>=20.10.0->pre-commit->instrument==0.1.5.dev38+g4a79000)
  Using cached filelock-3.16.1-py3-none-any.whl.metadata (2.9 kB)
Collecting webencodings (from bleach!=5.0.0->nbconvert>=6.4.4->jupyter-server<3,>=2.4.0->jupyterlab->instrument==0.1.5.dev38+g4a79000)
  Using cached webencodings-0.5.1-py2.py3-none-any.whl.metadata (2.1 kB)
Collecting fqdn (from jsonschema[format-nongpl]>=4.18.0->jupyter-events>=0.9.0->jupyter-server<3,>=2.4.0->jupyterlab->instrument==0.1.5.dev38+g4a79000)
  Using cached fqdn-1.5.1-py3-none-any.whl.metadata (1.4 kB)
Collecting isoduration (from jsonschema[format-nongpl]>=4.18.0->jupyter-events>=0.9.0->jupyter-server<3,>=2.4.0->jupyterlab->instrument==0.1.5.dev38+g4a79000)
  Using cached isoduration-20.11.0-py3-none-any.whl.metadata (5.7 kB)
Collecting jsonpointer>1.13 (from jsonschema[format-nongpl]>=4.18.0->jupyter-events>=0.9.0->jupyter-server<3,>=2.4.0->jupyterlab->instrument==0.1.5.dev38+g4a79000)
  Using cached jsonpointer-3.0.0-py2.py3-none-any.whl.metadata (2.3 kB)
Collecting uri-template (from jsonschema[format-nongpl]>=4.18.0->jupyter-events>=0.9.0->jupyter-server<3,>=2.4.0->jupyterlab->instrument==0.1.5.dev38+g4a79000)
  Using cached uri_template-1.3.0-py3-none-any.whl.metadata (8.8 kB)
Collecting webcolors>=24.6.0 (from jsonschema[format-nongpl]>=4.18.0->jupyter-events>=0.9.0->jupyter-server<3,>=2.4.0->jupyterlab->instrument==0.1.5.dev38+g4a79000)
  Using cached webcolors-24.8.0-py3-none-any.whl.metadata (2.6 kB)
Collecting cffi>=1.0.1 (from argon2-cffi-bindings->argon2-cffi>=21.1->jupyter-server<3,>=2.4.0->jupyterlab->instrument==0.1.5.dev38+g4a79000)
  Downloading cffi-1.17.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (1.5 kB)
Collecting soupsieve>1.2 (from beautifulsoup4->nbconvert>=6.4.4->jupyter-server<3,>=2.4.0->jupyterlab->instrument==0.1.5.dev38+g4a79000)
  Using cached soupsieve-2.6-py3-none-any.whl.metadata (4.6 kB)
Collecting pycparser (from cffi>=1.0.1->argon2-cffi-bindings->argon2-cffi>=21.1->jupyter-server<3,>=2.4.0->jupyterlab->instrument==0.1.5.dev38+g4a79000)
  Using cached pycparser-2.22-py3-none-any.whl.metadata (943 bytes)
Collecting arrow>=0.15.0 (from isoduration->jsonschema[format-nongpl]>=4.18.0->jupyter-events>=0.9.0->jupyter-server<3,>=2.4.0->jupyterlab->instrument==0.1.5.dev38+g4a79000)
  Using cached arrow-1.3.0-py3-none-any.whl.metadata (7.5 kB)
Collecting types-python-dateutil>=2.8.10 (from arrow>=0.15.0->isoduration->jsonschema[format-nongpl]>=4.18.0->jupyter-events>=0.9.0->jupyter-server<3,>=2.4.0->jupyterlab->instrument==0.1.5.dev38+g4a79000)
  Downloading types_python_dateutil-2.9.0.20241003-py3-none-any.whl.metadata (1.9 kB)
Using cached databroker-1.2.5-py2.py3-none-any.whl (232 kB)
Using cached apstools-1.7.0-py3-none-any.whl (396 kB)
Downloading bluesky-1.13-py3-none-any.whl (326 kB)
Using cached ophyd-1.9.0-py3-none-any.whl (285 kB)
Using cached bluesky_queueserver-0.0.21-py3-none-any.whl (371 kB)
Using cached bluesky_queueserver_api-0.0.11-py3-none-any.whl (98 kB)
Using cached bluesky_widgets-0.0.16-py3-none-any.whl (155 kB)
Using cached ipython-8.28.0-py3-none-any.whl (819 kB)
Using cached jupyterlab-4.2.5-py3-none-any.whl (11.6 MB)
Using cached ophyd_registry-1.3.3-py3-none-any.whl (13 kB)
Using cached pysumreg-1.0.6-py3-none-any.whl (16 kB)
Using cached QtPy-2.4.1-py3-none-any.whl (93 kB)
Using cached async_lru-2.0.4-py3-none-any.whl (6.1 kB)
Using cached bluesky_live-0.0.8-py3-none-any.whl (33 kB)
Using cached event_model-1.21.0-py3-none-any.whl (63 kB)
Using cached httpx-0.27.2-py3-none-any.whl (76 kB)
Using cached httpcore-1.0.6-py3-none-any.whl (78 kB)
Using cached intake-0.6.4-py3-none-any.whl (1.5 MB)
Using cached ipykernel-6.29.5-py3-none-any.whl (117 kB)
Using cached jedi-0.19.1-py2.py3-none-any.whl (1.6 MB)
Using cached jinja2-3.1.4-py3-none-any.whl (133 kB)
Using cached jsonschema-4.23.0-py3-none-any.whl (88 kB)
Using cached jupyter_client-8.6.3-py3-none-any.whl (106 kB)
Using cached jupyter_core-5.7.2-py3-none-any.whl (28 kB)
Using cached jupyter_lsp-2.2.5-py3-none-any.whl (69 kB)
Using cached jupyter_server-2.14.2-py3-none-any.whl (383 kB)
Using cached jupyterlab_server-2.27.3-py3-none-any.whl (59 kB)
Using cached babel-2.16.0-py3-none-any.whl (9.6 MB)
Downloading MarkupSafe-3.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (20 kB)
Using cached matplotlib_inline-0.1.7-py3-none-any.whl (9.9 kB)
Using cached mongoquery-1.4.2-py3-none-any.whl (6.3 kB)
Downloading msgpack-1.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (378 kB)
Downloading networkx-3.4-py3-none-any.whl (1.7 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.7/1.7 MB 7.8 MB/s eta 0:00:00
Using cached notebook_shim-0.2.4-py3-none-any.whl (13 kB)
Using cached numpy-1.26.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (18.2 MB)
Using cached packaging-24.1-py3-none-any.whl (53 kB)
Using cached pexpect-4.9.0-py2.py3-none-any.whl (63 kB)
Using cached prompt_toolkit-3.0.48-py3-none-any.whl (386 kB)
Using cached pygments-2.18.0-py3-none-any.whl (1.2 MB)
Downloading pymongo-4.10.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.4 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.4/1.4 MB 8.7 MB/s eta 0:00:00
Using cached pyRestTable-2020.0.10-py3-none-any.whl (21 kB)
Downloading pyzmq-26.2.0-cp310-cp310-manylinux_2_28_x86_64.whl (868 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 868.8/868.8 kB 8.0 MB/s eta 0:00:00
Using cached requests-2.32.3-py3-none-any.whl (64 kB)
Using cached spec2nexus-2021.2.6-py3-none-any.whl (11.0 MB)
Using cached suitcase_utils-0.5.3-py3-none-any.whl (9.6 kB)
Using cached tifffile-2024.9.20-py3-none-any.whl (228 kB)
Using cached tomli-2.0.2-py3-none-any.whl (13 kB)
Downloading toolz-1.0.0-py3-none-any.whl (56 kB)
Using cached tornado-6.4.1-cp38-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (436 kB)
Using cached tqdm-4.66.5-py3-none-any.whl (78 kB)
Using cached traitlets-5.14.3-py3-none-any.whl (85 kB)
Using cached typing_extensions-4.12.2-py3-none-any.whl (37 kB)
Using cached zict-2.2.0-py2.py3-none-any.whl (23 kB)
Using cached area_detector_handlers-0.0.10-py3-none-any.whl (21 kB)
Using cached bluesky_kafka-0.10.0-py3-none-any.whl (37 kB)
Using cached boltons-24.0.0-py3-none-any.whl (191 kB)
Downloading build-1.2.2.post1-py3-none-any.whl (22 kB)
Using cached cachetools-5.5.0-py3-none-any.whl (9.5 kB)
Using cached cycler-0.12.1-py3-none-any.whl (8.3 kB)
Using cached PyYAML-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (751 kB)
Using cached databroker_pack-0.3.0-py3-none-any.whl (21 kB)
Using cached decorator-5.1.1-py3-none-any.whl (9.1 kB)
Using cached doct-1.1.0-py3-none-any.whl (5.2 kB)
Using cached entrypoints-0.4-py3-none-any.whl (5.3 kB)
Using cached exceptiongroup-1.2.2-py3-none-any.whl (16 kB)
Downloading h5py-3.12.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (5.3 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 5.3/5.3 MB 9.4 MB/s eta 0:00:00
Using cached historydict-1.2.6-py3-none-any.whl (4.5 kB)
Downloading humanize-4.11.0-py3-none-any.whl (128 kB)
Using cached isort-5.13.2-py3-none-any.whl (92 kB)
Using cached jupyter_console-6.6.3-py3-none-any.whl (24 kB)
Using cached matplotlib-3.9.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (8.3 MB)
Using cached msgpack_numpy-0.4.8-py2.py3-none-any.whl (6.9 kB)
Downloading mypy-1.11.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl (12.5 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 12.5/12.5 MB 12.6 MB/s eta 0:00:00
Using cached myst_parser-4.0.0-py3-none-any.whl (84 kB)
Downloading sphinx-8.1.0-py3-none-any.whl (3.5 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.5/3.5 MB 14.0 MB/s eta 0:00:00
Using cached nbsphinx-0.9.5-py3-none-any.whl (31 kB)
Using cached numpydoc-1.8.0-py3-none-any.whl (64 kB)
Using cached openpyxl-3.1.5-py2.py3-none-any.whl (250 kB)
Downloading opentelemetry_api-1.27.0-py3-none-any.whl (63 kB)
Downloading pandas-2.2.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (13.1 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 13.1/13.1 MB 15.5 MB/s eta 0:00:00
Using cached pytz-2024.2-py2.py3-none-any.whl (508 kB)
Using cached Pint-0.24.3-py3-none-any.whl (301 kB)
Downloading pre_commit-4.0.1-py2.py3-none-any.whl (218 kB)
Using cached psutil-6.0.0-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (290 kB)
Using cached pyarrow-17.0.0-cp310-cp310-manylinux_2_28_x86_64.whl (39.9 MB)
Using cached pydantic-2.9.2-py3-none-any.whl (434 kB)
Downloading pydantic_core-2.23.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.1 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.1/2.1 MB 14.8 MB/s eta 0:00:00
Using cached pygments_ipython_console-1.0.1-py3-none-any.whl (3.7 kB)
Using cached pytest-8.3.3-py3-none-any.whl (342 kB)
Using cached python_multipart-0.0.12-py3-none-any.whl (23 kB)
Downloading ruff-0.6.9-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (10.9 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 10.9/10.9 MB 17.5 MB/s eta 0:00:00
Using cached scikit_image-0.24.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (14.9 MB)
Downloading scipy-1.14.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (41.2 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 41.2/41.2 MB 21.2 MB/s eta 0:00:00
Using cached six-1.16.0-py2.py3-none-any.whl (11 kB)
Using cached sphinx_design-0.6.1-py3-none-any.whl (2.2 MB)
Downloading sphinx_tabs-3.4.7-py3-none-any.whl (9.7 kB)
Using cached stack_data-0.6.3-py3-none-any.whl (24 kB)
Using cached suitcase_mongo-0.6.0-py3-none-any.whl (23 kB)
Using cached suitcase_msgpack-0.3.0-py3-none-any.whl (5.6 kB)
Using cached tzlocal-5.2-py3-none-any.whl (17 kB)
Using cached xarray-2024.9.0-py3-none-any.whl (1.2 MB)
Using cached xlrd-2.0.1-py2.py3-none-any.whl (96 kB)
Using cached zarr-2.18.3-py3-none-any.whl (210 kB)
Using cached alabaster-1.0.0-py3-none-any.whl (13 kB)
Using cached annotated_types-0.7.0-py3-none-any.whl (13 kB)
Using cached anyio-4.6.0-py3-none-any.whl (89 kB)
Using cached appdirs-1.4.4-py2.py3-none-any.whl (9.6 kB)
Using cached argon2_cffi-23.1.0-py3-none-any.whl (15 kB)
Using cached asttokens-2.4.1-py2.py3-none-any.whl (27 kB)
Using cached async_timeout-4.0.3-py3-none-any.whl (5.7 kB)
Using cached attrs-24.2.0-py3-none-any.whl (63 kB)
Using cached certifi-2024.8.30-py3-none-any.whl (167 kB)
Using cached cfgv-3.4.0-py2.py3-none-any.whl (7.2 kB)
Downloading charset_normalizer-3.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (144 kB)
Using cached click-8.1.7-py3-none-any.whl (97 kB)
Downloading cloudpickle-3.1.0-py3-none-any.whl (22 kB)
Using cached comm-0.2.2-py3-none-any.whl (7.2 kB)
Using cached contourpy-1.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (322 kB)
Using cached dask-2024.9.1-py3-none-any.whl (1.3 MB)
Downloading debugpy-1.8.7-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.5 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.5/3.5 MB 21.0 MB/s eta 0:00:00
Downloading Deprecated-1.2.14-py2.py3-none-any.whl (9.6 kB)
Downloading dnspython-2.7.0-py3-none-any.whl (313 kB)
Using cached docutils-0.21.2-py3-none-any.whl (587 kB)
Using cached executing-2.1.0-py2.py3-none-any.whl (25 kB)
Using cached flexcache-0.3-py3-none-any.whl (13 kB)
Using cached flexparser-0.3.1-py3-none-any.whl (27 kB)
Downloading fonttools-4.54.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.6 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.6/4.6 MB 21.7 MB/s eta 0:00:00
Using cached fsspec-2024.9.0-py3-none-any.whl (179 kB)
Using cached hiredis-3.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (165 kB)
Using cached identify-2.6.1-py2.py3-none-any.whl (98 kB)
Using cached idna-3.10-py3-none-any.whl (70 kB)
Using cached imageio-2.35.1-py3-none-any.whl (315 kB)
Using cached imagesize-1.4.1-py2.py3-none-any.whl (8.8 kB)
Using cached importlib_metadata-8.4.0-py3-none-any.whl (26 kB)
Using cached json5-0.9.25-py3-none-any.whl (30 kB)
Downloading jsonschema_specifications-2024.10.1-py3-none-any.whl (18 kB)
Using cached jupyter_events-0.10.0-py3-none-any.whl (18 kB)
Using cached jupyter_server_terminals-0.5.3-py3-none-any.whl (13 kB)
Downloading kiwisolver-1.4.7-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (1.6 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.6/1.6 MB 21.7 MB/s eta 0:00:00
Using cached lazy_loader-0.4-py3-none-any.whl (12 kB)
Using cached markdown_it_py-3.0.0-py3-none-any.whl (87 kB)
Using cached mdit_py_plugins-0.4.2-py3-none-any.whl (55 kB)
Using cached mypy_extensions-1.0.0-py3-none-any.whl (4.7 kB)
Using cached nbconvert-7.16.4-py3-none-any.whl (257 kB)
Using cached nbformat-5.10.4-py3-none-any.whl (78 kB)
Using cached nodeenv-1.9.1-py2.py3-none-any.whl (22 kB)
Downloading numcodecs-0.13.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (8.6 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8.6/8.6 MB 23.0 MB/s eta 0:00:00
Using cached overrides-7.7.0-py3-none-any.whl (17 kB)
Using cached parso-0.8.4-py2.py3-none-any.whl (103 kB)
Using cached partd-1.4.2-py3-none-any.whl (18 kB)
Using cached pillow-10.4.0-cp310-cp310-manylinux_2_28_x86_64.whl (4.5 MB)
Using cached platformdirs-4.3.6-py3-none-any.whl (18 kB)
Using cached pluggy-1.5.0-py3-none-any.whl (20 kB)
Using cached prometheus_client-0.21.0-py3-none-any.whl (54 kB)
Using cached ptyprocess-0.7.0-py2.py3-none-any.whl (13 kB)
Using cached python_dateutil-2.9.0.post0-py2.py3-none-any.whl (229 kB)
Using cached referencing-0.35.1-py3-none-any.whl (26 kB)
Using cached rpds_py-0.20.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (354 kB)
Using cached Send2Trash-1.8.3-py3-none-any.whl (18 kB)
Using cached slicerator-1.1.0-py3-none-any.whl (10 kB)
Using cached sniffio-1.3.1-py3-none-any.whl (10 kB)
Using cached snowballstemmer-2.2.0-py2.py3-none-any.whl (93 kB)
Using cached sphinxcontrib_applehelp-2.0.0-py3-none-any.whl (119 kB)
Using cached sphinxcontrib_devhelp-2.0.0-py3-none-any.whl (82 kB)
Using cached sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl (98 kB)
Using cached sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl (5.1 kB)
Using cached sphinxcontrib_qthelp-2.0.0-py3-none-any.whl (88 kB)
Using cached sphinxcontrib_serializinghtml-2.0.0-py3-none-any.whl (92 kB)
Using cached tabulate-0.9.0-py3-none-any.whl (35 kB)
Using cached terminado-0.18.1-py3-none-any.whl (14 kB)
Using cached tzdata-2024.2-py2.py3-none-any.whl (346 kB)
Using cached urllib3-2.2.3-py3-none-any.whl (126 kB)
Using cached virtualenv-20.26.6-py3-none-any.whl (6.0 MB)
Using cached websocket_client-1.8.0-py3-none-any.whl (58 kB)
Downloading confluent_kafka-2.6.0-cp310-cp310-manylinux_2_28_x86_64.whl (3.9 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.9/3.9 MB 21.6 MB/s eta 0:00:00
Using cached et_xmlfile-1.1.0-py3-none-any.whl (4.7 kB)
Using cached fasteners-0.19-py3-none-any.whl (18 kB)
Using cached HeapDict-1.0.1-py3-none-any.whl (3.9 kB)
Using cached iniconfig-2.0.0-py3-none-any.whl (5.9 kB)
Downloading lxml-5.3.0-cp310-cp310-manylinux_2_28_x86_64.whl (5.0 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 5.0/5.0 MB 23.2 MB/s eta 0:00:00
Using cached nest_asyncio-1.6.0-py3-none-any.whl (5.2 kB)
Using cached prettytable-3.11.0-py3-none-any.whl (28 kB)
Using cached pure_eval-0.2.3-py3-none-any.whl (11 kB)
Using cached pyproject_hooks-1.2.0-py3-none-any.whl (10 kB)
Downloading redis-5.1.1-py3-none-any.whl (261 kB)
Using cached setuptools_scm-8.1.0-py3-none-any.whl (43 kB)
Using cached suitcase_jsonl-0.2.2-py3-none-any.whl (6.6 kB)
Using cached wcwidth-0.2.13-py2.py3-none-any.whl (34 kB)
Using cached bleach-6.1.0-py3-none-any.whl (162 kB)
Downloading distlib-0.3.9-py2.py3-none-any.whl (468 kB)
Using cached fastjsonschema-2.20.0-py3-none-any.whl (23 kB)
Using cached filelock-3.16.1-py3-none-any.whl (16 kB)
Using cached h11-0.14.0-py3-none-any.whl (58 kB)
Using cached mdurl-0.1.2-py3-none-any.whl (10.0 kB)
Using cached mistune-3.0.2-py3-none-any.whl (47 kB)
Using cached nbclient-0.10.0-py3-none-any.whl (25 kB)
Using cached pandocfilters-1.5.1-py2.py3-none-any.whl (8.7 kB)
Using cached python_json_logger-2.0.7-py3-none-any.whl (8.1 kB)
Using cached rfc3986_validator-0.1.1-py2.py3-none-any.whl (4.2 kB)
Downloading wrapt-1.16.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (80 kB)
Using cached argon2_cffi_bindings-21.2.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (86 kB)
Using cached beautifulsoup4-4.12.3-py3-none-any.whl (147 kB)
Using cached defusedxml-0.7.1-py2.py3-none-any.whl (25 kB)
Using cached jupyterlab_pygments-0.3.0-py3-none-any.whl (15 kB)
Using cached locket-1.0.0-py2.py3-none-any.whl (4.4 kB)
Using cached rfc3339_validator-0.1.4-py2.py3-none-any.whl (3.5 kB)
Using cached tinycss2-1.3.0-py3-none-any.whl (22 kB)
Downloading cffi-1.17.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (446 kB)
Using cached jsonpointer-3.0.0-py2.py3-none-any.whl (7.6 kB)
Using cached soupsieve-2.6-py3-none-any.whl (36 kB)
Using cached webcolors-24.8.0-py3-none-any.whl (15 kB)
Using cached webencodings-0.5.1-py2.py3-none-any.whl (11 kB)
Using cached fqdn-1.5.1-py3-none-any.whl (9.1 kB)
Using cached isoduration-20.11.0-py3-none-any.whl (11 kB)
Using cached uri_template-1.3.0-py3-none-any.whl (11 kB)
Using cached arrow-1.3.0-py3-none-any.whl (66 kB)
Using cached pycparser-2.22-py3-none-any.whl (117 kB)
Downloading types_python_dateutil-2.9.0.20241003-py3-none-any.whl (9.7 kB)
Building wheels for collected packages: instrument
  Building editable for instrument (pyproject.toml) ... done
  Created wheel for instrument: filename=instrument-0.1.5.dev38+g4a79000-0.editable-py3-none-any.whl size=4178 sha256=bc7ac70b014fd72443c3576646c728aceca5d2c032d2a984b5e424e086e6d2b9
  Stored in directory: /tmp/pip-ephem-wheel-cache-d74ox_k7/wheels/8b/1a/69/50fd9fa534bd5f67276afda92a6706ae694763f3bdd4296f32
Successfully built instrument
Installing collected packages: webencodings, wcwidth, suitcase-utils, snowballstemmer, slicerator, pytz, pure-eval, ptyprocess, historydict, heapdict, fastjsonschema, distlib, confluent-kafka, asciitree, appdirs, zict, xlrd, wrapt, websocket-client, webcolors, urllib3, uri-template, tzlocal, tzdata, typing-extensions, types-python-dateutil, traitlets, tqdm, tornado, toolz, tomli, tinycss2, tabulate, sphinxcontrib-serializinghtml, sphinxcontrib-qthelp, sphinxcontrib-jsmath, sphinxcontrib-htmlhelp, sphinxcontrib-devhelp, sphinxcontrib-applehelp, soupsieve, sniffio, six, send2trash, ruff, rpds-py, rfc3986-validator, pyzmq, pyyaml, python-multipart, python-json-logger, pysumreg, pyproject_hooks, pygments-ipython-console, pygments, pycparser, psutil, prompt-toolkit, prometheus-client, prettytable, pluggy, platformdirs, pillow, pexpect, parso, pandocfilters, packaging, overrides, numpy, nodeenv, networkx, nest-asyncio, mypy-extensions, msgpack, mistune, mdurl, markupsafe, lxml, locket, kiwisolver, jupyterlab-pygments, jsonpointer, json5, isort, iniconfig, importlib-metadata, imagesize, idna, identify, humanize, hiredis, h11, fsspec, fqdn, fonttools, filelock, fasteners, executing, exceptiongroup, et-xmlfile, entrypoints, docutils, dnspython, defusedxml, decorator, debugpy, cycler, cloudpickle, click, charset-normalizer, cfgv, certifi, cachetools, boltons, babel, attrs, async-timeout, annotated-types, alabaster, virtualenv, tifffile, terminado, setuptools-scm, scipy, rfc3339-validator, requests, referencing, redis, qtpy, python-dateutil, pytest, pyRestTable, pymongo, pydantic-core, pyarrow, partd, openpyxl, numcodecs, mypy, msgpack-numpy, mongoquery, matplotlib-inline, markdown-it-py, lazy-loader, jupyter-core, jinja2, jedi, imageio, httpcore, h5py, flexparser, flexcache, doct, deprecated, contourpy, comm, cffi, build, bleach, beautifulsoup4, async-lru, asttokens, anyio, zarr, stack-data, sphinx, spec2nexus, scikit-image, pydantic, pre-commit, pint, pims, pandas, opentelemetry-api, mdit-py-plugins, matplotlib, jupyter-server-terminals, jupyter-client, jsonschema-specifications, httpx, dask, arrow, argon2-cffi-bindings, xarray, sphinx-tabs, sphinx-design, ophyd, numpydoc, myst-parser, jsonschema, isoduration, ipython, intake, argon2-cffi, ophyd-registry, nbformat, ipykernel, event-model, area-detector-handlers, suitcase-msgpack, suitcase-mongo, suitcase-jsonl, nbclient, jupyter-events, jupyter-console, bluesky-live, bluesky, nbconvert, databroker, bluesky-widgets, bluesky-kafka, nbsphinx, jupyter-server, databroker-pack, bluesky-queueserver, notebook-shim, jupyterlab-server, jupyter-lsp, bluesky-queueserver-api, apstools, jupyterlab, instrument
  Attempting uninstall: numpy
    Found existing installation: numpy 2.1.2
    Uninstalling numpy-2.1.2:
      Successfully uninstalled numpy-2.1.2
Successfully installed alabaster-1.0.0 annotated-types-0.7.0 anyio-4.6.0 appdirs-1.4.4 apstools-1.7.0 area-detector-handlers-0.0.10 argon2-cffi-23.1.0 argon2-cffi-bindings-21.2.0 arrow-1.3.0 asciitree-0.3.3 asttokens-2.4.1 async-lru-2.0.4 async-timeout-4.0.3 attrs-24.2.0 babel-2.16.0 beautifulsoup4-4.12.3 bleach-6.1.0 bluesky-1.13 bluesky-kafka-0.10.0 bluesky-live-0.0.8 bluesky-queueserver-0.0.21 bluesky-queueserver-api-0.0.11 bluesky-widgets-0.0.16 boltons-24.0.0 build-1.2.2.post1 cachetools-5.5.0 certifi-2024.8.30 cffi-1.17.1 cfgv-3.4.0 charset-normalizer-3.4.0 click-8.1.7 cloudpickle-3.1.0 comm-0.2.2 confluent-kafka-2.6.0 contourpy-1.3.0 cycler-0.12.1 dask-2024.9.1 databroker-1.2.5 databroker-pack-0.3.0 debugpy-1.8.7 decorator-5.1.1 defusedxml-0.7.1 deprecated-1.2.14 distlib-0.3.9 dnspython-2.7.0 doct-1.1.0 docutils-0.21.2 entrypoints-0.4 et-xmlfile-1.1.0 event-model-1.21.0 exceptiongroup-1.2.2 executing-2.1.0 fasteners-0.19 fastjsonschema-2.20.0 filelock-3.16.1 flexcache-0.3 flexparser-0.3.1 fonttools-4.54.1 fqdn-1.5.1 fsspec-2024.9.0 h11-0.14.0 h5py-3.12.1 heapdict-1.0.1 hiredis-3.0.0 historydict-1.2.6 httpcore-1.0.6 httpx-0.27.2 humanize-4.11.0 identify-2.6.1 idna-3.10 imageio-2.35.1 imagesize-1.4.1 importlib-metadata-8.4.0 iniconfig-2.0.0 instrument-0.1.5.dev38+g4a79000 intake-0.6.4 ipykernel-6.29.5 ipython-8.28.0 isoduration-20.11.0 isort-5.13.2 jedi-0.19.1 jinja2-3.1.4 json5-0.9.25 jsonpointer-3.0.0 jsonschema-4.23.0 jsonschema-specifications-2024.10.1 jupyter-client-8.6.3 jupyter-console-6.6.3 jupyter-core-5.7.2 jupyter-events-0.10.0 jupyter-lsp-2.2.5 jupyter-server-2.14.2 jupyter-server-terminals-0.5.3 jupyterlab-4.2.5 jupyterlab-pygments-0.3.0 jupyterlab-server-2.27.3 kiwisolver-1.4.7 lazy-loader-0.4 locket-1.0.0 lxml-5.3.0 markdown-it-py-3.0.0 markupsafe-3.0.1 matplotlib-3.9.2 matplotlib-inline-0.1.7 mdit-py-plugins-0.4.2 mdurl-0.1.2 mistune-3.0.2 mongoquery-1.4.2 msgpack-1.1.0 msgpack-numpy-0.4.8 mypy-1.11.2 mypy-extensions-1.0.0 myst-parser-4.0.0 nbclient-0.10.0 nbconvert-7.16.4 nbformat-5.10.4 nbsphinx-0.9.5 nest-asyncio-1.6.0 networkx-3.4 nodeenv-1.9.1 notebook-shim-0.2.4 numcodecs-0.13.1 numpy-1.26.4 numpydoc-1.8.0 openpyxl-3.1.5 opentelemetry-api-1.27.0 ophyd-1.9.0 ophyd-registry-1.3.3 overrides-7.7.0 packaging-24.1 pandas-2.2.3 pandocfilters-1.5.1 parso-0.8.4 partd-1.4.2 pexpect-4.9.0 pillow-10.4.0 pims-0.7 pint-0.24.3 platformdirs-4.3.6 pluggy-1.5.0 pre-commit-4.0.1 prettytable-3.11.0 prometheus-client-0.21.0 prompt-toolkit-3.0.48 psutil-6.0.0 ptyprocess-0.7.0 pure-eval-0.2.3 pyRestTable-2020.0.10 pyarrow-17.0.0 pycparser-2.22 pydantic-2.9.2 pydantic-core-2.23.4 pygments-2.18.0 pygments-ipython-console-1.0.1 pymongo-4.10.1 pyproject_hooks-1.2.0 pysumreg-1.0.6 pytest-8.3.3 python-dateutil-2.9.0.post0 python-json-logger-2.0.7 python-multipart-0.0.12 pytz-2024.2 pyyaml-6.0.2 pyzmq-26.2.0 qtpy-2.4.1 redis-5.1.1 referencing-0.35.1 requests-2.32.3 rfc3339-validator-0.1.4 rfc3986-validator-0.1.1 rpds-py-0.20.0 ruff-0.6.9 scikit-image-0.24.0 scipy-1.14.1 send2trash-1.8.3 setuptools-scm-8.1.0 six-1.16.0 slicerator-1.1.0 sniffio-1.3.1 snowballstemmer-2.2.0 soupsieve-2.6 spec2nexus-2021.2.6 sphinx-8.1.0 sphinx-design-0.6.1 sphinx-tabs-3.4.7 sphinxcontrib-applehelp-2.0.0 sphinxcontrib-devhelp-2.0.0 sphinxcontrib-htmlhelp-2.1.0 sphinxcontrib-jsmath-1.0.1 sphinxcontrib-qthelp-2.0.0 sphinxcontrib-serializinghtml-2.0.0 stack-data-0.6.3 suitcase-jsonl-0.2.2 suitcase-mongo-0.6.0 suitcase-msgpack-0.3.0 suitcase-utils-0.5.3 tabulate-0.9.0 terminado-0.18.1 tifffile-2024.9.20 tinycss2-1.3.0 tomli-2.0.2 toolz-1.0.0 tornado-6.4.1 tqdm-4.66.5 traitlets-5.14.3 types-python-dateutil-2.9.0.20241003 typing-extensions-4.12.2 tzdata-2024.2 tzlocal-5.2 uri-template-1.3.0 urllib3-2.2.3 virtualenv-20.26.6 wcwidth-0.2.13 webcolors-24.8.0 webencodings-0.5.1 websocket-client-1.8.0 wrapt-1.16.0 xarray-2024.9.0 xlrd-2.0.1 zarr-2.18.3 zict-2.2.0
(model_instrument_env) prjemian@arf:~/.../prjemian/model_instrument$ python ./dev_test.py 
I Fri-14:49:21: /home/prjemian/Documents/projects/prjemian/model_instrument/src/instrument/utils/_logging_setup.py
I Fri-14:49:21: /home/prjemian/Documents/projects/prjemian/model_instrument/src/instrument/startup.py
I Fri-14:49:21: /home/prjemian/Documents/projects/prjemian/model_instrument/src/instrument/configs/loaders.py
I Fri-14:49:21: /home/prjemian/Documents/projects/prjemian/model_instrument/src/instrument/utils/aps_functions.py
I Fri-14:49:22: /home/prjemian/Documents/projects/prjemian/model_instrument/src/instrument/utils/helper_functions.py
qtagg backend also not available. Using default backend.
W Fri-14:49:22: APS DM setup file does not exist: '/home/dm/etc/dm.setup.sh'
I Fri-14:49:22: /home/prjemian/Documents/projects/prjemian/model_instrument/src/instrument/core/best_effort_init.py
I Fri-14:49:23: /home/prjemian/Documents/projects/prjemian/model_instrument/src/instrument/core/catalog_init.py
I Fri-14:49:23: Databroker catalog: temp
I Fri-14:49:23: /home/prjemian/Documents/projects/prjemian/model_instrument/src/instrument/utils/controls_setup.py
I Fri-14:49:23: /home/prjemian/Documents/projects/prjemian/model_instrument/src/instrument/utils/metadata.py
I Fri-14:49:23: RunEngine metadata saved in directory: /home/prjemian/.config/Bluesky_RunEngine_md
I Fri-14:49:23: /home/prjemian/Documents/projects/prjemian/model_instrument/src/instrument/core/run_engine_init.py
I Fri-14:49:23: using ophyd control layer: 'pyepics'
I Fri-14:49:23: /home/prjemian/.conda/envs/model_instrument_env/lib/python3.10/site-packages/apstools/callbacks/scan_signal_statistics.py
I Fri-14:49:23: /home/prjemian/.conda/envs/model_instrument_env/lib/python3.10/site-packages/apstools/utils/image_analysis.py
I Fri-14:49:23: /home/prjemian/Documents/projects/prjemian/model_instrument/src/instrument/callbacks/spec_data_file_writer.py
I Fri-14:49:23: SPEC data file: /home/prjemian/Documents/projects/prjemian/model_instrument/20241011-144923.dat
I Fri-14:49:23: /home/prjemian/.conda/envs/model_instrument_env/lib/python3.10/site-packages/apstools/plans/command_list.py
I Fri-14:49:23: /home/prjemian/Documents/projects/prjemian/model_instrument/src/instrument/tests/sim_plans.py
I Fri-14:49:23: (instrument.tests.sim_plans) sim_print_plan()
(instrument.tests.sim_plans) This is a test.
(instrument.tests.sim_plans)  motor.position=0  noisy_det.read()=OrderedDict([('noisy_det', {'value': 1.064261856822206, 'timestamp': 1728676163.393427})]).
I Fri-14:49:23: (instrument.tests.sim_plans) sim_count_plan()


Transient Scan ID: 1     Time: 2024-10-11 14:49:23
Persistent Unique Scan ID: '215bb77c-1fd1-4d92-8c65-e07a673857f6'
New stream: 'primary'
+-----------+------------+------------+
|   seq_num |       time |  noisy_det |
+-----------+------------+------------+
|         1 | 14:49:23.6 |  10000.099 |
+-----------+------------+------------+
generator count ['215bb77c'] (scan num: 1)



I Fri-14:49:23: (instrument.tests.sim_plans) sim_rel_scan_plan()
(instrument.tests.sim_plans)  motor.position=0  noisy_det.read()=OrderedDict([('noisy_det', {'value': 10000.098690587545, 'timestamp': 1728676163.632278})]).
(instrument.tests.sim_plans)  noisy_det.read_configuration()=OrderedDict([('noisy_det_Imax', {'value': 10000, 'timestamp': 1728676163.7432876}), ('noisy_det_center', {'value': 0, 'timestamp': 1728676163.744835}), ('noisy_det_sigma', {'value': 1, 'timestamp': 1728676163.7463875}), ('noisy_det_noise', {'value': 'uniform', 'timestamp': 1728676163.7480912}), ('noisy_det_noise_multiplier', {'value': 0.1, 'timestamp': 1728676163.3932157})]).
(instrument.tests.sim_plans)  noisy_det.noise._enum_strs=('none', 'poisson', 'uniform').


Transient Scan ID: 2     Time: 2024-10-11 14:49:23
Persistent Unique Scan ID: 'afdc19de-0f0a-4ac5-b934-87f5e6cc1f5b'
New stream: 'primary'
/home/prjemian/.conda/envs/model_instrument_env/lib/python3.10/site-packages/bluesky/callbacks/best_effort.py:211: UserWarning: Starting a Matplotlib GUI outside of the main thread will likely fail.
  fig = self._fig_factory(fig_name)
+-----------+------------+------------+------------+
|   seq_num |       time |      motor |  noisy_det |
+-----------+------------+------------+------------+
|         1 | 14:49:25.8 |     -2.500 |    439.409 |
|         2 | 14:49:25.8 |     -2.000 |   1353.437 |
|         3 | 14:49:25.8 |     -1.500 |   3246.574 |
|         4 | 14:49:25.8 |     -1.000 |   6065.346 |
|         5 | 14:49:25.8 |     -0.500 |   8825.038 |
|         6 | 14:49:25.8 |      0.000 |  10000.090 |
|         7 | 14:49:25.8 |      0.500 |   8824.991 |
|         8 | 14:49:25.8 |      1.000 |   6065.405 |
|         9 | 14:49:25.8 |      1.500 |   3246.520 |
|        10 | 14:49:25.8 |      2.000 |   1353.288 |
|        11 | 14:49:25.8 |      2.500 |    439.438 |
+-----------+------------+------------+------------+
generator rel_scan ['afdc19de'] (scan num: 2)



Exception ignored in atexit callback: <bound method Gcf.destroy_all of <class 'matplotlib._pylab_helpers.Gcf'>>
Traceback (most recent call last):
  File "/home/prjemian/.conda/envs/model_instrument_env/lib/python3.10/site-packages/matplotlib/_pylab_helpers.py", line 81, in destroy_all
    manager.destroy()
  File "/home/prjemian/.conda/envs/model_instrument_env/lib/python3.10/site-packages/matplotlib/backends/_backend_tk.py", line 562, in destroy
    self.canvas._tkcanvas.after_cancel(self.canvas._idle_draw_id)
  File "/home/prjemian/.conda/envs/model_instrument_env/lib/python3.10/tkinter/__init__.py", line 871, in after_cancel
    data = self.tk.call('after', 'info', id)
RuntimeError: main thread is not in main loop

@prjemian
Copy link
Owner

Er, that was before pulling latest changes ...

@prjemian
Copy link
Owner

After pulling latest changes, fails differently:

(model_instrument_env) prjemian@arf:~/.../prjemian/model_instrument$ git pull
remote: Enumerating objects: 8, done.
remote: Counting objects: 100% (8/8), done.
remote: Total 8 (delta 6), reused 8 (delta 6), pack-reused 0 (from 0)
Unpacking objects: 100% (8/8), 709 bytes | 236.00 KiB/s, done.
From https://github.com/prjemian/model_instrument
   4a79000..da55c14  mpl        -> origin/mpl
Updating 4a79000..da55c14
Fast-forward
 README.md                                |  4 ++--
 pyproject.toml                           |  1 +
 src/instrument/utils/helper_functions.py | 17 +++--------------
 3 files changed, 6 insertions(+), 16 deletions(-)
(model_instrument_env) prjemian@arf:~/.../prjemian/model_instrument$ python ./dev_test.py 
I Fri-14:54:24: /home/prjemian/Documents/projects/prjemian/model_instrument/src/instrument/utils/_logging_setup.py
I Fri-14:54:24: /home/prjemian/Documents/projects/prjemian/model_instrument/src/instrument/startup.py
I Fri-14:54:24: /home/prjemian/Documents/projects/prjemian/model_instrument/src/instrument/configs/loaders.py
I Fri-14:54:24: /home/prjemian/Documents/projects/prjemian/model_instrument/src/instrument/utils/aps_functions.py
I Fri-14:54:25: /home/prjemian/Documents/projects/prjemian/model_instrument/src/instrument/utils/helper_functions.py
Traceback (most recent call last):
  File "/home/prjemian/Documents/projects/prjemian/model_instrument/./dev_test.py", line 3, in <module>
    from instrument.startup import RE
  File "/home/prjemian/Documents/projects/prjemian/model_instrument/src/instrument/startup.py", line 24, in <module>
    from .core.best_effort_init import bec  # noqa: F401
  File "/home/prjemian/Documents/projects/prjemian/model_instrument/src/instrument/core/__init__.py", line 13, in <module>
    mpl_setup()
  File "/home/prjemian/Documents/projects/prjemian/model_instrument/src/instrument/utils/helper_functions.py", line 71, in mpl_setup
    mpl.use("qtAgg")  # Set the backend early
  File "/home/prjemian/.conda/envs/model_instrument_env/lib/python3.10/site-packages/matplotlib/__init__.py", line 1255, in use
    plt.switch_backend(name)
  File "/home/prjemian/.conda/envs/model_instrument_env/lib/python3.10/site-packages/matplotlib/pyplot.py", line 415, in switch_backend
    module = backend_registry.load_backend_module(newbackend)
  File "/home/prjemian/.conda/envs/model_instrument_env/lib/python3.10/site-packages/matplotlib/backends/registry.py", line 323, in load_backend_module
    return importlib.import_module(module_name)
  File "/home/prjemian/.conda/envs/model_instrument_env/lib/python3.10/importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "/home/prjemian/.conda/envs/model_instrument_env/lib/python3.10/site-packages/matplotlib/backends/backend_qtagg.py", line 9, in <module>
    from .qt_compat import QT_API, QtCore, QtGui
  File "/home/prjemian/.conda/envs/model_instrument_env/lib/python3.10/site-packages/matplotlib/backends/qt_compat.py", line 130, in <module>
    raise ImportError(
ImportError: Failed to import any of the following Qt binding modules: PyQt6, PySide6, PyQt5, PySide2

The Qt libraries are binary code. Can't see how pip can install them properly.

@MDecarabas
Copy link
Collaborator Author

MDecarabas commented Oct 11, 2024

After pulling latest changes, fails differently:

(model_instrument_env) prjemian@arf:~/.../prjemian/model_instrument$ git pull
remote: Enumerating objects: 8, done.
remote: Counting objects: 100% (8/8), done.
remote: Total 8 (delta 6), reused 8 (delta 6), pack-reused 0 (from 0)
Unpacking objects: 100% (8/8), 709 bytes | 236.00 KiB/s, done.
From https://github.com/prjemian/model_instrument
   4a79000..da55c14  mpl        -> origin/mpl
Updating 4a79000..da55c14
Fast-forward
 README.md                                |  4 ++--
 pyproject.toml                           |  1 +
 src/instrument/utils/helper_functions.py | 17 +++--------------
 3 files changed, 6 insertions(+), 16 deletions(-)
(model_instrument_env) prjemian@arf:~/.../prjemian/model_instrument$ python ./dev_test.py 
I Fri-14:54:24: /home/prjemian/Documents/projects/prjemian/model_instrument/src/instrument/utils/_logging_setup.py
I Fri-14:54:24: /home/prjemian/Documents/projects/prjemian/model_instrument/src/instrument/startup.py
I Fri-14:54:24: /home/prjemian/Documents/projects/prjemian/model_instrument/src/instrument/configs/loaders.py
I Fri-14:54:24: /home/prjemian/Documents/projects/prjemian/model_instrument/src/instrument/utils/aps_functions.py
I Fri-14:54:25: /home/prjemian/Documents/projects/prjemian/model_instrument/src/instrument/utils/helper_functions.py
Traceback (most recent call last):
  File "/home/prjemian/Documents/projects/prjemian/model_instrument/./dev_test.py", line 3, in <module>
    from instrument.startup import RE
  File "/home/prjemian/Documents/projects/prjemian/model_instrument/src/instrument/startup.py", line 24, in <module>
    from .core.best_effort_init import bec  # noqa: F401
  File "/home/prjemian/Documents/projects/prjemian/model_instrument/src/instrument/core/__init__.py", line 13, in <module>
    mpl_setup()
  File "/home/prjemian/Documents/projects/prjemian/model_instrument/src/instrument/utils/helper_functions.py", line 71, in mpl_setup
    mpl.use("qtAgg")  # Set the backend early
  File "/home/prjemian/.conda/envs/model_instrument_env/lib/python3.10/site-packages/matplotlib/__init__.py", line 1255, in use
    plt.switch_backend(name)
  File "/home/prjemian/.conda/envs/model_instrument_env/lib/python3.10/site-packages/matplotlib/pyplot.py", line 415, in switch_backend
    module = backend_registry.load_backend_module(newbackend)
  File "/home/prjemian/.conda/envs/model_instrument_env/lib/python3.10/site-packages/matplotlib/backends/registry.py", line 323, in load_backend_module
    return importlib.import_module(module_name)
  File "/home/prjemian/.conda/envs/model_instrument_env/lib/python3.10/importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "/home/prjemian/.conda/envs/model_instrument_env/lib/python3.10/site-packages/matplotlib/backends/backend_qtagg.py", line 9, in <module>
    from .qt_compat import QT_API, QtCore, QtGui
  File "/home/prjemian/.conda/envs/model_instrument_env/lib/python3.10/site-packages/matplotlib/backends/qt_compat.py", line 130, in <module>
    raise ImportError(
ImportError: Failed to import any of the following Qt binding modules: PyQt6, PySide6, PyQt5, PySide2

The Qt libraries are binary code. Can't see how pip can install them properly.

I have no idea in that case why it keeps failing on your end. My linux workstation and MacBook are both running fine off of the code. Can you try the below commands in an ipython session without running the instrument package:

import matplotlib as mpl
import PyQt5
mpl.use("qtAgg")

@prjemian
Copy link
Owner

When pyqt is installed by pip

(model_instrument_env) prjemian@arf:~/.../prjemian/model_instrument$ conda list qt
# packages in environment at /home/prjemian/.conda/envs/model_instrument_env:
#
# Name                    Version                   Build  Channel
qtpy                      2.4.1                    pypi_0    pypi
sphinxcontrib-qthelp      2.0.0                    pypi_0    pypi

When pyqt is installed by conda

(model_instrument_env) prjemian@arf:~/.../prjemian/model_instrument$ conda list qt
# packages in environment at /home/prjemian/.conda/envs/model_instrument_env:
#
# Name                    Version                   Build  Channel
pyqt                      5.15.9          py310h04931ad_5    conda-forge
pyqt5-sip                 12.12.2         py310hc6cd4ac_5    conda-forge
qt-main                   5.15.8              h3155989_26    conda-forge
qtpy                      2.4.1                    pypi_0    pypi
sphinxcontrib-qthelp      2.0.0                    pypi_0    pypi

One big difference is that pip does not install qt-main

@prjemian
Copy link
Owner

Testing with the conda-installed "pyqt>5.15" worked for python test.

@MDecarabas
Copy link
Collaborator Author

Testing with the conda-installed "pyqt>5.15" worked for python test.

I think when you pip installed you didn't have the latest toml version which contains such a requirement

@prjemian
Copy link
Owner

jupyter and ipython, good, too, all that's left is to remove the Python pin

@MDecarabas MDecarabas requested a review from prjemian October 11, 2024 20:31
@MDecarabas
Copy link
Collaborator Author

jupyter and ipython, good, too, all that's left is to remove the Python pin

Left the lock and cited reason as it fails to build Pyarrow. It is now pinned to 3.11

@prjemian
Copy link
Owner

prjemian commented Oct 11, 2024

Ah, one of the pip packages requires ... requires pyarrow. On what OS does pyarrow fail to build? I just installed with no python pin and got this:

(model_instrument_env) prjemian@arf:~/.../prjemian/model_instrument$ conda list arrow
# packages in environment at /home/prjemian/.conda/envs/model_instrument_env:
#
# Name                    Version                   Build  Channel
arrow                     1.3.0                    pypi_0    pypi
pyarrow                   17.0.0                   pypi_0    pypi

@prjemian
Copy link
Owner

prjemian commented Oct 11, 2024

Hard to relax that python pin if a pip install might try something different. Should the pyarrow (or the package that requires it) be installed by conda so the requirements can be matched? That's really the point of the pin, as I understand it.

@prjemian
Copy link
Owner

PyArrow's PyPI page states:

provides a Python API for functionality provided by the Arrow C++ libraries

That's where conda install is superior to pip.

@prjemian
Copy link
Owner

We could go with the pin(s) for now, but sometime we need to discard the notion that everything can or should be installed with pip. That notion imposes limitations such as pinning Python to a specific version so that pip installs will succeed.

@prjemian
Copy link
Owner

FWIW: local QS test was success

@MDecarabas
Copy link
Collaborator Author

We could go with the pin(s) for now, but sometime we need to discard the notion that everything can or should be installed with pip. That notion imposes limitations such as pinning Python to a specific version so that pip installs will succeed.

I disagree, but that can be a separate branch. If all is good please approve and then I can merge it in

@prjemian
Copy link
Owner

I'm not happy adding pins that do something already accomplished by package management software. We must not start that. Clearly conda can resolve the package requirements and it is not necessary to pin to a fixed version.

State your technical reasons.

@MDecarabas
Copy link
Collaborator Author

I'm not happy adding pins that do something already accomplished by package management software. We must not start that. Clearly conda can resolve the package requirements and it is not necessary to pin to a fixed version.

State your technical reasons.

Pinning makes sure that when the package is deployed, it is done so with the exact set of dependencies the team tested with. Bugs will still happen, but it’s much more reliable and consistent than using loose versioning, where the dependencies can vary and cause unexpected issues. As was shown above in Pyarrow not being able to be resolved.

@prjemian
Copy link
Owner

prjemian commented Oct 11, 2024

According to the pip installation record above, bluesky-queueserver requires pyarrow:

Collecting pyarrow (from bluesky-queueserver->instrument ...

Asked about this on Mattermost.

Copy link
Owner

@prjemian prjemian left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Tested at APS and home linux workstations with python, ipython, jupyter notebook, and queueserver. All tests pass.

@MDecarabas MDecarabas merged commit afd9c86 into main Oct 14, 2024
1 check passed
@prjemian prjemian deleted the mpl branch October 14, 2024 16:44
@@ -47,6 +47,7 @@ dependencies = [
"ophyd",
"pysumreg",
"qtpy",
"PyQt5>5.15",

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

any version of pyqt5, pyqt6, pyside2, or pyside6 should work (and if it does not it is a bug in bluesky).

Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We're using PyQt5 in other places in our local work. Is any part of bluesky using Qt6?

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That is a site-level choice, in bluesky/bluesky#1512 we got it to work and had a test, but I'm not sure if the pyqt6 dep survived a testing refactor...

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants