From 8e3ece32e9dde9452d5ec36902c2f8199ef68854 Mon Sep 17 00:00:00 2001 From: Florian Rau Date: Tue, 1 Oct 2024 11:42:44 +0100 Subject: [PATCH 1/8] add pyqt dependency --- iblrig/gui/tab_data.py | 4 +- iblrig/gui/tools.py | 143 ----------------------------------------- pdm.lock | 85 ++++++++++++++++-------- pyproject.toml | 1 + 4 files changed, 61 insertions(+), 172 deletions(-) diff --git a/iblrig/gui/tab_data.py b/iblrig/gui/tab_data.py index b2274e3f6..d9cb85e6a 100644 --- a/iblrig/gui/tab_data.py +++ b/iblrig/gui/tab_data.py @@ -17,7 +17,7 @@ ) from PyQt5.QtWidgets import QHeaderView, QStyledItemDelegate, QWidget -from iblrig.gui.tools import DataFrameTableModel +from iblqt.core import DataFrameTableModel from iblrig.gui.ui_tab_data import Ui_TabData from iblrig.path_helper import get_local_and_remote_paths from iblrig.transfer_experiments import CopyState, SessionCopier @@ -79,7 +79,7 @@ def __init__(self, *args, **kwargs): # create empty DataFrameTableModel data = pd.DataFrame(None, index=[], columns=[c.name for c in COLUMNS]) - self.tableModel = DataFrameTableModel(df=data) + self.tableModel = DataFrameTableModel(dataFrame=data) # create filter proxy & assign it to view self.tableProxy = QSortFilterProxyModel() diff --git a/iblrig/gui/tools.py b/iblrig/gui/tools.py index 50180120c..6cf1db920 100644 --- a/iblrig/gui/tools.py +++ b/iblrig/gui/tools.py @@ -9,17 +9,12 @@ from shutil import disk_usage from typing import Any -import numpy as np -import pandas as pd from PyQt5 import QtGui from PyQt5.QtCore import ( - QAbstractTableModel, - QModelIndex, QObject, QRunnable, Qt, QThreadPool, - QVariant, pyqtProperty, pyqtSignal, pyqtSlot, @@ -223,144 +218,6 @@ def run(self) -> None: self.signals.finished.emit() -class DataFrameTableModel(QAbstractTableModel): - def __init__(self, *args, df: pd.DataFrame, **kwargs): - super().__init__(*args, **kwargs) - self._dataFrame = df - - def dataFrame(self): - return self._dataFrame - - def setDataFrame(self, data_frame: pd.DataFrame): - self.beginResetModel() - self._dataFrame = data_frame.copy() - self.endResetModel() - - dataFrame = pyqtProperty(pd.DataFrame, fget=dataFrame, fset=setDataFrame) - - def headerData(self, section, orientation, role=...): - """ - Get the header data for the specified section. - - Parameters - ---------- - section : int - The section index. - orientation : Qt.Orientation - The orientation of the header. - role : int, optional - The role of the header data. - - Returns - ------- - QVariant - The header data. - """ - if role == Qt.DisplayRole: - if orientation == Qt.Horizontal: - return str(self._dataFrame.columns[section]) - else: - return str(self._dataFrame.index[section]) - - def rowCount(self, parent=...): - """ - Get the number of rows in the model. - - Parameters - ---------- - parent : QModelIndex, optional - The parent index. - - Returns - ------- - int - The number of rows. - """ - if isinstance(parent, QModelIndex) and parent.isValid(): - return 0 - return self.dataFrame.shape[0] - - def columnCount(self, parent=...): - """ - Get the number of columns in the model. - - Parameters - ---------- - parent : QModelIndex, optional - The parent index. - - Returns - ------- - int - The number of columns. - """ - if isinstance(parent, QModelIndex) and parent.isValid(): - return 0 - return self.dataFrame.shape[1] - - def data(self, index, role=...): - """ - Get the data for the specified index. - - Parameters - ---------- - index : QModelIndex - The index of the data. - role : int, optional - The role of the data. - - Returns - ------- - QVariant - The data for the specified index. - """ - if index.isValid(): - row = self._dataFrame.index[index.row()] - col = self._dataFrame.columns[index.column()] - dat = self._dataFrame.iloc[row][col] - if role == Qt.DisplayRole: - if isinstance(dat, np.generic): - return dat.item() - return dat - return QVariant() - - def sort(self, column, order=...): - """ - Sort the data based on the specified column and order. - - Parameters - ---------- - column : int - The column index to sort by. - order : Qt.SortOrder, optional - The sort order. - """ - self.layoutAboutToBeChanged.emit() - col_name = self._dataFrame.columns.values[column] - self._dataFrame.sort_values(by=col_name, ascending=order == Qt.AscendingOrder, inplace=True) - self._dataFrame.reset_index(inplace=True, drop=True) - self.layoutChanged.emit() - - def setData(self, index, value, role=Qt.DisplayRole): - """ - Set data at the specified index with the given value. - - Parameters - ---------- - index : QModelIndex - The index where the data will be set. - value : Any - The new value to be set at the specified index. - role : int, optional - The role of the data. Default is Qt.DisplayRole. - """ - if index.isValid(): - row = self._dataFrame.index[index.row()] - col = self._dataFrame.columns[index.column()] - self._dataFrame.at[row, col] = value - self.dataChanged.emit(index, index, [role]) - - class RemoteDevicesListView(QListView): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) diff --git a/pdm.lock b/pdm.lock index 99581b35d..119c99600 100644 --- a/pdm.lock +++ b/pdm.lock @@ -5,7 +5,7 @@ groups = ["default", "ci", "dev", "doc", "project-extraction", "test", "typing"] strategy = ["inherit_metadata"] lock_version = "4.5.0" -content_hash = "sha256:714a13365ed6f4d37114c9146f1b274c61e9b99dee7955f3add4550cabdf3845" +content_hash = "sha256:0d63e3f9e96fca63e8653703b8fdbd9ac7205a8319254615fd7dab520713139f" [[metadata.targets]] requires_python = "==3.10.*" @@ -849,6 +849,23 @@ dependencies = [ "pyusb", ] +[[package]] +name = "iblqt" +version = "0.1.0" +requires_python = ">=3.10" +summary = "A collection of extensions to the Qt framework." +groups = ["default"] +dependencies = [ + "numpy", + "pandas>2.0", + "pyqtgraph>=0.13.7", + "qtpy>=2.4.1", +] +files = [ + {file = "iblqt-0.1.0-py3-none-any.whl", hash = "sha256:c0fde6b4bb96e18c1806b657c545ac94c9ed6a1ac974099b985e70e6895f3e93"}, + {file = "iblqt-0.1.0.tar.gz", hash = "sha256:a7c14884e4036ecdadcbdee1aece812b18d464cd8b12ea00ff037ae9eff34aa4"}, +] + [[package]] name = "iblutil" version = "1.12.1" @@ -1873,24 +1890,24 @@ files = [ [[package]] name = "pydantic" -version = "2.9.1" +version = "2.9.2" requires_python = ">=3.8" summary = "Data validation using Python type hints" groups = ["default"] dependencies = [ "annotated-types>=0.6.0", - "pydantic-core==2.23.3", + "pydantic-core==2.23.4", "typing-extensions>=4.12.2; python_version >= \"3.13\"", "typing-extensions>=4.6.1; python_version < \"3.13\"", ] files = [ - {file = "pydantic-2.9.1-py3-none-any.whl", hash = "sha256:7aff4db5fdf3cf573d4b3c30926a510a10e19a0774d38fc4967f78beb6deb612"}, - {file = "pydantic-2.9.1.tar.gz", hash = "sha256:1363c7d975c7036df0db2b4a61f2e062fbc0aa5ab5f2772e0ffc7191a4f4bce2"}, + {file = "pydantic-2.9.2-py3-none-any.whl", hash = "sha256:f048cec7b26778210e28a0459867920654d48e5e62db0958433636cde4254f12"}, + {file = "pydantic-2.9.2.tar.gz", hash = "sha256:d155cef71265d1e9807ed1c32b4c8deec042a44a50a4188b25ac67ecd81a9c0f"}, ] [[package]] name = "pydantic-core" -version = "2.23.3" +version = "2.23.4" requires_python = ">=3.8" summary = "Core functionality for Pydantic validation and serialization" groups = ["default"] @@ -1898,27 +1915,27 @@ dependencies = [ "typing-extensions!=4.7.0,>=4.6.0", ] files = [ - {file = "pydantic_core-2.23.3-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:7f10a5d1b9281392f1bf507d16ac720e78285dfd635b05737c3911637601bae6"}, - {file = "pydantic_core-2.23.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:3c09a7885dd33ee8c65266e5aa7fb7e2f23d49d8043f089989726391dd7350c5"}, - {file = "pydantic_core-2.23.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6470b5a1ec4d1c2e9afe928c6cb37eb33381cab99292a708b8cb9aa89e62429b"}, - {file = "pydantic_core-2.23.3-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9172d2088e27d9a185ea0a6c8cebe227a9139fd90295221d7d495944d2367700"}, - {file = "pydantic_core-2.23.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:86fc6c762ca7ac8fbbdff80d61b2c59fb6b7d144aa46e2d54d9e1b7b0e780e01"}, - {file = "pydantic_core-2.23.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f0cb80fd5c2df4898693aa841425ea1727b1b6d2167448253077d2a49003e0ed"}, - {file = "pydantic_core-2.23.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:03667cec5daf43ac4995cefa8aaf58f99de036204a37b889c24a80927b629cec"}, - {file = "pydantic_core-2.23.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:047531242f8e9c2db733599f1c612925de095e93c9cc0e599e96cf536aaf56ba"}, - {file = "pydantic_core-2.23.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:5499798317fff7f25dbef9347f4451b91ac2a4330c6669821c8202fd354c7bee"}, - {file = "pydantic_core-2.23.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:bbb5e45eab7624440516ee3722a3044b83fff4c0372efe183fd6ba678ff681fe"}, - {file = "pydantic_core-2.23.3-cp310-none-win32.whl", hash = "sha256:8b5b3ed73abb147704a6e9f556d8c5cb078f8c095be4588e669d315e0d11893b"}, - {file = "pydantic_core-2.23.3-cp310-none-win_amd64.whl", hash = "sha256:2b603cde285322758a0279995b5796d64b63060bfbe214b50a3ca23b5cee3e83"}, - {file = "pydantic_core-2.23.3-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:f399e8657c67313476a121a6944311fab377085ca7f490648c9af97fc732732d"}, - {file = "pydantic_core-2.23.3-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:6b5547d098c76e1694ba85f05b595720d7c60d342f24d5aad32c3049131fa5c4"}, - {file = "pydantic_core-2.23.3-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0dda0290a6f608504882d9f7650975b4651ff91c85673341789a476b1159f211"}, - {file = "pydantic_core-2.23.3-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:65b6e5da855e9c55a0c67f4db8a492bf13d8d3316a59999cfbaf98cc6e401961"}, - {file = "pydantic_core-2.23.3-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:09e926397f392059ce0afdcac920df29d9c833256354d0c55f1584b0b70cf07e"}, - {file = "pydantic_core-2.23.3-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:87cfa0ed6b8c5bd6ae8b66de941cece179281239d482f363814d2b986b79cedc"}, - {file = "pydantic_core-2.23.3-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:e61328920154b6a44d98cabcb709f10e8b74276bc709c9a513a8c37a18786cc4"}, - {file = "pydantic_core-2.23.3-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:ce3317d155628301d649fe5e16a99528d5680af4ec7aa70b90b8dacd2d725c9b"}, - {file = "pydantic_core-2.23.3.tar.gz", hash = "sha256:3cb0f65d8b4121c1b015c60104a685feb929a29d7cf204387c7f2688c7974690"}, + {file = "pydantic_core-2.23.4-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:b10bd51f823d891193d4717448fab065733958bdb6a6b351967bd349d48d5c9b"}, + {file = "pydantic_core-2.23.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:4fc714bdbfb534f94034efaa6eadd74e5b93c8fa6315565a222f7b6f42ca1166"}, + {file = "pydantic_core-2.23.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:63e46b3169866bd62849936de036f901a9356e36376079b05efa83caeaa02ceb"}, + {file = "pydantic_core-2.23.4-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ed1a53de42fbe34853ba90513cea21673481cd81ed1be739f7f2efb931b24916"}, + {file = "pydantic_core-2.23.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cfdd16ab5e59fc31b5e906d1a3f666571abc367598e3e02c83403acabc092e07"}, + {file = "pydantic_core-2.23.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:255a8ef062cbf6674450e668482456abac99a5583bbafb73f9ad469540a3a232"}, + {file = "pydantic_core-2.23.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4a7cd62e831afe623fbb7aabbb4fe583212115b3ef38a9f6b71869ba644624a2"}, + {file = "pydantic_core-2.23.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f09e2ff1f17c2b51f2bc76d1cc33da96298f0a036a137f5440ab3ec5360b624f"}, + {file = "pydantic_core-2.23.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e38e63e6f3d1cec5a27e0afe90a085af8b6806ee208b33030e65b6516353f1a3"}, + {file = "pydantic_core-2.23.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:0dbd8dbed2085ed23b5c04afa29d8fd2771674223135dc9bc937f3c09284d071"}, + {file = "pydantic_core-2.23.4-cp310-none-win32.whl", hash = "sha256:6531b7ca5f951d663c339002e91aaebda765ec7d61b7d1e3991051906ddde119"}, + {file = "pydantic_core-2.23.4-cp310-none-win_amd64.whl", hash = "sha256:7c9129eb40958b3d4500fa2467e6a83356b3b61bfff1b414c7361d9220f9ae8f"}, + {file = "pydantic_core-2.23.4-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:f455ee30a9d61d3e1a15abd5068827773d6e4dc513e795f380cdd59932c782d5"}, + {file = "pydantic_core-2.23.4-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:1e90d2e3bd2c3863d48525d297cd143fe541be8bbf6f579504b9712cb6b643ec"}, + {file = "pydantic_core-2.23.4-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2e203fdf807ac7e12ab59ca2bfcabb38c7cf0b33c41efeb00f8e5da1d86af480"}, + {file = "pydantic_core-2.23.4-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e08277a400de01bc72436a0ccd02bdf596631411f592ad985dcee21445bd0068"}, + {file = "pydantic_core-2.23.4-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f220b0eea5965dec25480b6333c788fb72ce5f9129e8759ef876a1d805d00801"}, + {file = "pydantic_core-2.23.4-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:d06b0c8da4f16d1d1e352134427cb194a0a6e19ad5db9161bf32b2113409e728"}, + {file = "pydantic_core-2.23.4-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:ba1a0996f6c2773bd83e63f18914c1de3c9dd26d55f4ac302a7efe93fb8e7433"}, + {file = "pydantic_core-2.23.4-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:9a5bce9d23aac8f0cf0836ecfc033896aa8443b501c58d0602dbfd5bd5b37753"}, + {file = "pydantic_core-2.23.4.tar.gz", hash = "sha256:2584f7cf844ac4d970fba483a717dbe10c1c1c96a969bf65d61ffe94df1b2863"}, ] [[package]] @@ -2285,6 +2302,20 @@ files = [ {file = "pyzmq-26.1.0.tar.gz", hash = "sha256:6c5aeea71f018ebd3b9115c7cb13863dd850e98ca6b9258509de1246461a7e7f"}, ] +[[package]] +name = "qtpy" +version = "2.4.1" +requires_python = ">=3.7" +summary = "Provides an abstraction layer on top of the various Qt bindings (PyQt5/6 and PySide2/6)." +groups = ["default"] +dependencies = [ + "packaging", +] +files = [ + {file = "QtPy-2.4.1-py3-none-any.whl", hash = "sha256:1c1d8c4fa2c884ae742b069151b0abe15b3f70491f3972698c683b8e38de839b"}, + {file = "QtPy-2.4.1.tar.gz", hash = "sha256:a5a15ffd519550a1361bdc56ffc07fda56a6af7292f17c7b395d4083af632987"}, +] + [[package]] name = "referencing" version = "0.35.1" diff --git a/pyproject.toml b/pyproject.toml index daaaf9811..f3a0714f5 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -42,6 +42,7 @@ dependencies = [ "PyYAML>=6.0.2", "scipy>=1.14.0", "sounddevice>=0.5.0", + "iblqt>=0.1.0", ] [project.optional-dependencies] project-extraction = [ From dc3d16415fa082f69a9febec7b8a92ac051f966c Mon Sep 17 00:00:00 2001 From: Florian Rau Date: Tue, 1 Oct 2024 12:15:14 +0100 Subject: [PATCH 2/8] update to iblqt 0.1.1 --- pdm.lock | 758 +++++++++++++++++++++++++------------------------ pyproject.toml | 2 +- 2 files changed, 384 insertions(+), 376 deletions(-) diff --git a/pdm.lock b/pdm.lock index 119c99600..19aea9bce 100644 --- a/pdm.lock +++ b/pdm.lock @@ -5,7 +5,7 @@ groups = ["default", "ci", "dev", "doc", "project-extraction", "test", "typing"] strategy = ["inherit_metadata"] lock_version = "4.5.0" -content_hash = "sha256:0d63e3f9e96fca63e8653703b8fdbd9ac7205a8319254615fd7dab520713139f" +content_hash = "sha256:b6dae76706b27d84b1d5a0b19339dc1bf662b247155da409b620193225fcf399" [[metadata.targets]] requires_python = "==3.10.*" @@ -47,8 +47,8 @@ files = [ [[package]] name = "anyio" -version = "4.4.0" -requires_python = ">=3.8" +version = "4.6.0" +requires_python = ">=3.9" summary = "High level compatibility layer for multiple asynchronous event loop implementations" groups = ["dev", "doc"] dependencies = [ @@ -58,8 +58,8 @@ dependencies = [ "typing-extensions>=4.1; python_version < \"3.11\"", ] files = [ - {file = "anyio-4.4.0-py3-none-any.whl", hash = "sha256:c1b2d8f46a8a812513012e1107cb0e68c17159a7a594208005a57dc776e1bdc7"}, - {file = "anyio-4.4.0.tar.gz", hash = "sha256:5aadc6a1bbb7cdb0bede386cac5e2940f5e2ff3aa20277e991cf028e0585ce94"}, + {file = "anyio-4.6.0-py3-none-any.whl", hash = "sha256:c7d2e9d63e31599eeb636c8c5c03a7e108d73b345f064f1c19fdc87b79036a9a"}, + {file = "anyio-4.6.0.tar.gz", hash = "sha256:137b4559cbb034c477165047febb6ff83f390fc3b20bf181c1fc0a728cb8beeb"}, ] [[package]] @@ -132,23 +132,23 @@ files = [ [[package]] name = "boto3" -version = "1.34.162" +version = "1.35.30" requires_python = ">=3.8" summary = "The AWS SDK for Python" groups = ["default"] dependencies = [ - "botocore<1.35.0,>=1.34.162", + "botocore<1.36.0,>=1.35.30", "jmespath<2.0.0,>=0.7.1", "s3transfer<0.11.0,>=0.10.0", ] files = [ - {file = "boto3-1.34.162-py3-none-any.whl", hash = "sha256:d6f6096bdab35a0c0deff469563b87d184a28df7689790f7fe7be98502b7c590"}, - {file = "boto3-1.34.162.tar.gz", hash = "sha256:873f8f5d2f6f85f1018cbb0535b03cceddc7b655b61f66a0a56995238804f41f"}, + {file = "boto3-1.35.30-py3-none-any.whl", hash = "sha256:d89c3459db89c5408e83219ab849ffd0146bc4285e75cdc67c6e45d390a12df2"}, + {file = "boto3-1.35.30.tar.gz", hash = "sha256:d2851aec8e9dc6937977acbe9a5124ecc31b3ad5f50a10cd9ae52636da3f52fa"}, ] [[package]] name = "botocore" -version = "1.34.162" +version = "1.35.30" requires_python = ">=3.8" summary = "Low-level, data-driven core of boto 3." groups = ["default"] @@ -159,8 +159,8 @@ dependencies = [ "urllib3<1.27,>=1.25.4; python_version < \"3.10\"", ] files = [ - {file = "botocore-1.34.162-py3-none-any.whl", hash = "sha256:2d918b02db88d27a75b48275e6fb2506e9adaaddbec1ffa6a8a0898b34e769be"}, - {file = "botocore-1.34.162.tar.gz", hash = "sha256:adc23be4fb99ad31961236342b7cbf3c0bfc62532cd02852196032e8c0d682f3"}, + {file = "botocore-1.35.30-py3-none-any.whl", hash = "sha256:3bb9f9dde001608671ea74681ac3cec06bbbb10cba8cb8c1387a25e843075ce0"}, + {file = "botocore-1.35.30.tar.gz", hash = "sha256:ab5350e8a50e48d371fa2d517d65c29a40c43788cb9a15387f93eac5a23df0fd"}, ] [[package]] @@ -212,18 +212,18 @@ files = [ [[package]] name = "certifi" -version = "2024.7.4" +version = "2024.8.30" requires_python = ">=3.6" summary = "Python package for providing Mozilla's CA Bundle." groups = ["default", "dev", "doc"] files = [ - {file = "certifi-2024.7.4-py3-none-any.whl", hash = "sha256:c198e21b1289c2ab85ee4e67bb4b4ef3ead0892059901a8d5b622f24a1101e90"}, - {file = "certifi-2024.7.4.tar.gz", hash = "sha256:5a1e7645bc0ec61a09e26c36f6106dd4cf40c6db3a1fb6352b0244e7fb057c7b"}, + {file = "certifi-2024.8.30-py3-none-any.whl", hash = "sha256:922820b53db7a7257ffbda3f597266d435245903d80737e34f8a45ff3e3230d8"}, + {file = "certifi-2024.8.30.tar.gz", hash = "sha256:bec941d2aa8195e248a60b31ff9f0558284cf01a52591ceda73ea9afffd69fd9"}, ] [[package]] name = "cffi" -version = "1.17.0" +version = "1.17.1" requires_python = ">=3.8" summary = "Foreign Function Interface for Python calling C code." groups = ["default", "dev", "doc"] @@ -231,19 +231,19 @@ dependencies = [ "pycparser", ] files = [ - {file = "cffi-1.17.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f9338cc05451f1942d0d8203ec2c346c830f8e86469903d5126c1f0a13a2bcbb"}, - {file = "cffi-1.17.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a0ce71725cacc9ebf839630772b07eeec220cbb5f03be1399e0457a1464f8e1a"}, - {file = "cffi-1.17.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c815270206f983309915a6844fe994b2fa47e5d05c4c4cef267c3b30e34dbe42"}, - {file = "cffi-1.17.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d6bdcd415ba87846fd317bee0774e412e8792832e7805938987e4ede1d13046d"}, - {file = "cffi-1.17.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8a98748ed1a1df4ee1d6f927e151ed6c1a09d5ec21684de879c7ea6aa96f58f2"}, - {file = "cffi-1.17.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0a048d4f6630113e54bb4b77e315e1ba32a5a31512c31a273807d0027a7e69ab"}, - {file = "cffi-1.17.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:24aa705a5f5bd3a8bcfa4d123f03413de5d86e497435693b638cbffb7d5d8a1b"}, - {file = "cffi-1.17.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:856bf0924d24e7f93b8aee12a3a1095c34085600aa805693fb7f5d1962393206"}, - {file = "cffi-1.17.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:4304d4416ff032ed50ad6bb87416d802e67139e31c0bde4628f36a47a3164bfa"}, - {file = "cffi-1.17.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:331ad15c39c9fe9186ceaf87203a9ecf5ae0ba2538c9e898e3a6967e8ad3db6f"}, - {file = "cffi-1.17.0-cp310-cp310-win32.whl", hash = "sha256:669b29a9eca6146465cc574659058ed949748f0809a2582d1f1a324eb91054dc"}, - {file = "cffi-1.17.0-cp310-cp310-win_amd64.whl", hash = "sha256:48b389b1fd5144603d61d752afd7167dfd205973a43151ae5045b35793232aa2"}, - {file = "cffi-1.17.0.tar.gz", hash = "sha256:f3157624b7558b914cb039fd1af735e5e8049a87c817cc215109ad1c8779df76"}, + {file = "cffi-1.17.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:df8b1c11f177bc2313ec4b2d46baec87a5f3e71fc8b45dab2ee7cae86d9aba14"}, + {file = "cffi-1.17.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8f2cdc858323644ab277e9bb925ad72ae0e67f69e804f4898c070998d50b1a67"}, + {file = "cffi-1.17.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:edae79245293e15384b51f88b00613ba9f7198016a5948b5dddf4917d4d26382"}, + {file = "cffi-1.17.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45398b671ac6d70e67da8e4224a065cec6a93541bb7aebe1b198a61b58c7b702"}, + {file = "cffi-1.17.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ad9413ccdeda48c5afdae7e4fa2192157e991ff761e7ab8fdd8926f40b160cc3"}, + {file = "cffi-1.17.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5da5719280082ac6bd9aa7becb3938dc9f9cbd57fac7d2871717b1feb0902ab6"}, + {file = "cffi-1.17.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2bb1a08b8008b281856e5971307cc386a8e9c5b625ac297e853d36da6efe9c17"}, + {file = "cffi-1.17.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:045d61c734659cc045141be4bae381a41d89b741f795af1dd018bfb532fd0df8"}, + {file = "cffi-1.17.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:6883e737d7d9e4899a8a695e00ec36bd4e5e4f18fabe0aca0efe0a4b44cdb13e"}, + {file = "cffi-1.17.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:6b8b4a92e1c65048ff98cfe1f735ef8f1ceb72e3d5f0c25fdb12087a23da22be"}, + {file = "cffi-1.17.1-cp310-cp310-win32.whl", hash = "sha256:c9c3d058ebabb74db66e431095118094d06abf53284d9c81f27300d0e0d8bc7c"}, + {file = "cffi-1.17.1-cp310-cp310-win_amd64.whl", hash = "sha256:0f048dcf80db46f0098ccac01132761580d28e28bc0f78ae0d58048063317e15"}, + {file = "cffi-1.17.1.tar.gz", hash = "sha256:1c39c6016c32bc48dd54561950ebd6836e1670f2ae46128f67cf49e789c52824"}, ] [[package]] @@ -360,25 +360,28 @@ files = [ [[package]] name = "contourpy" -version = "1.2.1" +version = "1.3.0" requires_python = ">=3.9" summary = "Python library for calculating contours of 2D quadrilateral grids" groups = ["default"] dependencies = [ - "numpy>=1.20", + "numpy>=1.23", ] files = [ - {file = "contourpy-1.2.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bd7c23df857d488f418439686d3b10ae2fbf9bc256cd045b37a8c16575ea1040"}, - {file = "contourpy-1.2.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5b9eb0ca724a241683c9685a484da9d35c872fd42756574a7cfbf58af26677fd"}, - {file = "contourpy-1.2.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4c75507d0a55378240f781599c30e7776674dbaf883a46d1c90f37e563453480"}, - {file = "contourpy-1.2.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:11959f0ce4a6f7b76ec578576a0b61a28bdc0696194b6347ba3f1c53827178b9"}, - {file = "contourpy-1.2.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:eb3315a8a236ee19b6df481fc5f997436e8ade24a9f03dfdc6bd490fea20c6da"}, - {file = "contourpy-1.2.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:39f3ecaf76cd98e802f094e0d4fbc6dc9c45a8d0c4d185f0f6c2234e14e5f75b"}, - {file = "contourpy-1.2.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:94b34f32646ca0414237168d68a9157cb3889f06b096612afdd296003fdd32fd"}, - {file = "contourpy-1.2.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:457499c79fa84593f22454bbd27670227874cd2ff5d6c84e60575c8b50a69619"}, - {file = "contourpy-1.2.1-cp310-cp310-win32.whl", hash = "sha256:ac58bdee53cbeba2ecad824fa8159493f0bf3b8ea4e93feb06c9a465d6c87da8"}, - {file = "contourpy-1.2.1-cp310-cp310-win_amd64.whl", hash = "sha256:9cffe0f850e89d7c0012a1fb8730f75edd4320a0a731ed0c183904fe6ecfc3a9"}, - {file = "contourpy-1.2.1.tar.gz", hash = "sha256:4d8908b3bee1c889e547867ca4cdc54e5ab6be6d3e078556814a22457f49423c"}, + {file = "contourpy-1.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:880ea32e5c774634f9fcd46504bf9f080a41ad855f4fef54f5380f5133d343c7"}, + {file = "contourpy-1.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:76c905ef940a4474a6289c71d53122a4f77766eef23c03cd57016ce19d0f7b42"}, + {file = "contourpy-1.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:92f8557cbb07415a4d6fa191f20fd9d2d9eb9c0b61d1b2f52a8926e43c6e9af7"}, + {file = "contourpy-1.3.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:36f965570cff02b874773c49bfe85562b47030805d7d8360748f3eca570f4cab"}, + {file = "contourpy-1.3.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cacd81e2d4b6f89c9f8a5b69b86490152ff39afc58a95af002a398273e5ce589"}, + {file = "contourpy-1.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:69375194457ad0fad3a839b9e29aa0b0ed53bb54db1bfb6c3ae43d111c31ce41"}, + {file = "contourpy-1.3.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:7a52040312b1a858b5e31ef28c2e865376a386c60c0e248370bbea2d3f3b760d"}, + {file = "contourpy-1.3.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:3faeb2998e4fcb256542e8a926d08da08977f7f5e62cf733f3c211c2a5586223"}, + {file = "contourpy-1.3.0-cp310-cp310-win32.whl", hash = "sha256:36e0cff201bcb17a0a8ecc7f454fe078437fa6bda730e695a92f2d9932bd507f"}, + {file = "contourpy-1.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:87ddffef1dbe5e669b5c2440b643d3fdd8622a348fe1983fad7a0f0ccb1cd67b"}, + {file = "contourpy-1.3.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:fe41b41505a5a33aeaed2a613dccaeaa74e0e3ead6dd6fd3a118fb471644fd6c"}, + {file = "contourpy-1.3.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eca7e17a65f72a5133bdbec9ecf22401c62bcf4821361ef7811faee695799779"}, + {file = "contourpy-1.3.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:1ec4dc6bf570f5b22ed0d7efba0dfa9c5b9e0431aeea7581aa217542d9e809a4"}, + {file = "contourpy-1.3.0.tar.gz", hash = "sha256:7ffa0db17717a8ffb127efd0c95a4362d996b892c2904db72428d5b52e1938a4"}, ] [[package]] @@ -430,7 +433,7 @@ files = [ [[package]] name = "cryptography" -version = "43.0.0" +version = "43.0.1" requires_python = ">=3.7" summary = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." groups = ["default"] @@ -438,29 +441,29 @@ dependencies = [ "cffi>=1.12; platform_python_implementation != \"PyPy\"", ] files = [ - {file = "cryptography-43.0.0-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:64c3f16e2a4fc51c0d06af28441881f98c5d91009b8caaff40cf3548089e9c74"}, - {file = "cryptography-43.0.0-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3dcdedae5c7710b9f97ac6bba7e1052b95c7083c9d0e9df96e02a1932e777895"}, - {file = "cryptography-43.0.0-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3d9a1eca329405219b605fac09ecfc09ac09e595d6def650a437523fcd08dd22"}, - {file = "cryptography-43.0.0-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:ea9e57f8ea880eeea38ab5abf9fbe39f923544d7884228ec67d666abd60f5a47"}, - {file = "cryptography-43.0.0-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:9a8d6802e0825767476f62aafed40532bd435e8a5f7d23bd8b4f5fd04cc80ecf"}, - {file = "cryptography-43.0.0-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:cc70b4b581f28d0a254d006f26949245e3657d40d8857066c2ae22a61222ef55"}, - {file = "cryptography-43.0.0-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:4a997df8c1c2aae1e1e5ac49c2e4f610ad037fc5a3aadc7b64e39dea42249431"}, - {file = "cryptography-43.0.0-cp37-abi3-win32.whl", hash = "sha256:6e2b11c55d260d03a8cf29ac9b5e0608d35f08077d8c087be96287f43af3ccdc"}, - {file = "cryptography-43.0.0-cp37-abi3-win_amd64.whl", hash = "sha256:31e44a986ceccec3d0498e16f3d27b2ee5fdf69ce2ab89b52eaad1d2f33d8778"}, - {file = "cryptography-43.0.0-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:7b3f5fe74a5ca32d4d0f302ffe6680fcc5c28f8ef0dc0ae8f40c0f3a1b4fca66"}, - {file = "cryptography-43.0.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ac1955ce000cb29ab40def14fd1bbfa7af2017cca696ee696925615cafd0dce5"}, - {file = "cryptography-43.0.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:299d3da8e00b7e2b54bb02ef58d73cd5f55fb31f33ebbf33bd00d9aa6807df7e"}, - {file = "cryptography-43.0.0-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:ee0c405832ade84d4de74b9029bedb7b31200600fa524d218fc29bfa371e97f5"}, - {file = "cryptography-43.0.0-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:cb013933d4c127349b3948aa8aaf2f12c0353ad0eccd715ca789c8a0f671646f"}, - {file = "cryptography-43.0.0-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:fdcb265de28585de5b859ae13e3846a8e805268a823a12a4da2597f1f5afc9f0"}, - {file = "cryptography-43.0.0-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:2905ccf93a8a2a416f3ec01b1a7911c3fe4073ef35640e7ee5296754e30b762b"}, - {file = "cryptography-43.0.0-cp39-abi3-win32.whl", hash = "sha256:47ca71115e545954e6c1d207dd13461ab81f4eccfcb1345eac874828b5e3eaaf"}, - {file = "cryptography-43.0.0-cp39-abi3-win_amd64.whl", hash = "sha256:0663585d02f76929792470451a5ba64424acc3cd5227b03921dab0e2f27b1709"}, - {file = "cryptography-43.0.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:2c6d112bf61c5ef44042c253e4859b3cbbb50df2f78fa8fae6747a7814484a70"}, - {file = "cryptography-43.0.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:844b6d608374e7d08f4f6e6f9f7b951f9256db41421917dfb2d003dde4cd6b66"}, - {file = "cryptography-43.0.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:51956cf8730665e2bdf8ddb8da0056f699c1a5715648c1b0144670c1ba00b48f"}, - {file = "cryptography-43.0.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:aae4d918f6b180a8ab8bf6511a419473d107df4dbb4225c7b48c5c9602c38c7f"}, - {file = "cryptography-43.0.0.tar.gz", hash = "sha256:b88075ada2d51aa9f18283532c9f60e72170041bba88d7f37e49cbb10275299e"}, + {file = "cryptography-43.0.1-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:8385d98f6a3bf8bb2d65a73e17ed87a3ba84f6991c155691c51112075f9ffc5d"}, + {file = "cryptography-43.0.1-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:27e613d7077ac613e399270253259d9d53872aaf657471473ebfc9a52935c062"}, + {file = "cryptography-43.0.1-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:68aaecc4178e90719e95298515979814bda0cbada1256a4485414860bd7ab962"}, + {file = "cryptography-43.0.1-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:de41fd81a41e53267cb020bb3a7212861da53a7d39f863585d13ea11049cf277"}, + {file = "cryptography-43.0.1-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:f98bf604c82c416bc829e490c700ca1553eafdf2912a91e23a79d97d9801372a"}, + {file = "cryptography-43.0.1-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:61ec41068b7b74268fa86e3e9e12b9f0c21fcf65434571dbb13d954bceb08042"}, + {file = "cryptography-43.0.1-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:014f58110f53237ace6a408b5beb6c427b64e084eb451ef25a28308270086494"}, + {file = "cryptography-43.0.1-cp37-abi3-win32.whl", hash = "sha256:2bd51274dcd59f09dd952afb696bf9c61a7a49dfc764c04dd33ef7a6b502a1e2"}, + {file = "cryptography-43.0.1-cp37-abi3-win_amd64.whl", hash = "sha256:666ae11966643886c2987b3b721899d250855718d6d9ce41b521252a17985f4d"}, + {file = "cryptography-43.0.1-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:ac119bb76b9faa00f48128b7f5679e1d8d437365c5d26f1c2c3f0da4ce1b553d"}, + {file = "cryptography-43.0.1-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1bbcce1a551e262dfbafb6e6252f1ae36a248e615ca44ba302df077a846a8806"}, + {file = "cryptography-43.0.1-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:58d4e9129985185a06d849aa6df265bdd5a74ca6e1b736a77959b498e0505b85"}, + {file = "cryptography-43.0.1-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:d03a475165f3134f773d1388aeb19c2d25ba88b6a9733c5c590b9ff7bbfa2e0c"}, + {file = "cryptography-43.0.1-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:511f4273808ab590912a93ddb4e3914dfd8a388fed883361b02dea3791f292e1"}, + {file = "cryptography-43.0.1-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:80eda8b3e173f0f247f711eef62be51b599b5d425c429b5d4ca6a05e9e856baa"}, + {file = "cryptography-43.0.1-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:38926c50cff6f533f8a2dae3d7f19541432610d114a70808f0926d5aaa7121e4"}, + {file = "cryptography-43.0.1-cp39-abi3-win32.whl", hash = "sha256:a575913fb06e05e6b4b814d7f7468c2c660e8bb16d8d5a1faf9b33ccc569dd47"}, + {file = "cryptography-43.0.1-cp39-abi3-win_amd64.whl", hash = "sha256:d75601ad10b059ec832e78823b348bfa1a59f6b8d545db3a24fd44362a1564cb"}, + {file = "cryptography-43.0.1-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:ea25acb556320250756e53f9e20a4177515f012c9eaea17eb7587a8c4d8ae034"}, + {file = "cryptography-43.0.1-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:c1332724be35d23a854994ff0b66530119500b6053d0bd3363265f7e5e77288d"}, + {file = "cryptography-43.0.1-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:fba1007b3ef89946dbbb515aeeb41e30203b004f0b4b00e5e16078b518563289"}, + {file = "cryptography-43.0.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:5b43d1ea6b378b54a1dc99dd8a2b5be47658fe9a7ce0a58ff0b55f4b43ef2b84"}, + {file = "cryptography-43.0.1.tar.gz", hash = "sha256:203e92a75716d8cfb491dc47c79e17d0d9207ccffcbcb35f598fbe463ae3444d"}, ] [[package]] @@ -491,13 +494,13 @@ files = [ [[package]] name = "dask" -version = "2024.8.0" -requires_python = ">=3.9" +version = "2024.9.1" +requires_python = ">=3.10" summary = "Parallel PyData with Task Scheduling" groups = ["default"] dependencies = [ "click>=8.1", - "cloudpickle>=1.5.0", + "cloudpickle>=3.0.0", "fsspec>=2021.09.0", "importlib-metadata>=4.13.0; python_version < \"3.12\"", "packaging>=20.0", @@ -506,8 +509,8 @@ dependencies = [ "toolz>=0.10.0", ] files = [ - {file = "dask-2024.8.0-py3-none-any.whl", hash = "sha256:250ea3df30d4a25958290eec4f252850091c6cfaed82d098179c3b25bba18309"}, - {file = "dask-2024.8.0.tar.gz", hash = "sha256:f1fec39373d2f101bc045529ad4e9b30e34e6eb33b7aa0fa7073aec7b1bf9eee"}, + {file = "dask-2024.9.1-py3-none-any.whl", hash = "sha256:3757bb6c976f0436fef6bd6ad32f8983ee5ce7d8a738a1f643e208cd390ec794"}, + {file = "dask-2024.9.1.tar.gz", hash = "sha256:06eccc6a68d2882bcd9de24548fa96e8d0da7fbfff0baed3f3c2a526b73dfbb4"}, ] [[package]] @@ -526,17 +529,17 @@ files = [ [[package]] name = "debugpy" -version = "1.8.5" +version = "1.8.6" requires_python = ">=3.8" summary = "An implementation of the Debug Adapter Protocol for Python" groups = ["dev", "doc"] files = [ - {file = "debugpy-1.8.5-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:7e4d594367d6407a120b76bdaa03886e9eb652c05ba7f87e37418426ad2079f7"}, - {file = "debugpy-1.8.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4413b7a3ede757dc33a273a17d685ea2b0c09dbd312cc03f5534a0fd4d40750a"}, - {file = "debugpy-1.8.5-cp310-cp310-win32.whl", hash = "sha256:dd3811bd63632bb25eda6bd73bea8e0521794cda02be41fa3160eb26fc29e7ed"}, - {file = "debugpy-1.8.5-cp310-cp310-win_amd64.whl", hash = "sha256:b78c1250441ce893cb5035dd6f5fc12db968cc07f91cc06996b2087f7cefdd8e"}, - {file = "debugpy-1.8.5-py2.py3-none-any.whl", hash = "sha256:55919dce65b471eff25901acf82d328bbd5b833526b6c1364bd5133754777a44"}, - {file = "debugpy-1.8.5.zip", hash = "sha256:b2112cfeb34b4507399d298fe7023a16656fc553ed5246536060ca7bd0e668d0"}, + {file = "debugpy-1.8.6-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:30f467c5345d9dfdcc0afdb10e018e47f092e383447500f125b4e013236bf14b"}, + {file = "debugpy-1.8.6-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d73d8c52614432f4215d0fe79a7e595d0dd162b5c15233762565be2f014803b"}, + {file = "debugpy-1.8.6-cp310-cp310-win32.whl", hash = "sha256:e3e182cd98eac20ee23a00653503315085b29ab44ed66269482349d307b08df9"}, + {file = "debugpy-1.8.6-cp310-cp310-win_amd64.whl", hash = "sha256:e3a82da039cfe717b6fb1886cbbe5c4a3f15d7df4765af857f4307585121c2dd"}, + {file = "debugpy-1.8.6-py2.py3-none-any.whl", hash = "sha256:b48892df4d810eff21d3ef37274f4c60d32cdcafc462ad5647239036b0f0649f"}, + {file = "debugpy-1.8.6.zip", hash = "sha256:c931a9371a86784cee25dec8d65bc2dc7a21f3f1552e3833d9ef8f919d22280a"}, ] [[package]] @@ -575,13 +578,13 @@ files = [ [[package]] name = "executing" -version = "2.0.1" -requires_python = ">=3.5" +version = "2.1.0" +requires_python = ">=3.8" summary = "Get the currently executing AST node of a frame, and other information" groups = ["default", "dev", "doc"] files = [ - {file = "executing-2.0.1-py2.py3-none-any.whl", hash = "sha256:eac49ca94516ccc753f9fb5ce82603156e590b27525a8bc32cce8ae302eb61bc"}, - {file = "executing-2.0.1.tar.gz", hash = "sha256:35afe2ce3affba8ee97f2d69927fa823b08b472b7b994e36a52a964b93d16147"}, + {file = "executing-2.1.0-py2.py3-none-any.whl", hash = "sha256:8d63781349375b5ebccc3142f4b30350c0cd9c79f921cde38be2be4637e98eaf"}, + {file = "executing-2.1.0.tar.gz", hash = "sha256:8ea27ddd260da8150fa5a708269c4a10e76161e2496ec3e587da9e3c0fe4b9ab"}, ] [[package]] @@ -612,26 +615,26 @@ files = [ [[package]] name = "fonttools" -version = "4.53.1" +version = "4.54.1" requires_python = ">=3.8" summary = "Tools to manipulate font files" groups = ["default", "dev", "doc"] files = [ - {file = "fonttools-4.53.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0679a30b59d74b6242909945429dbddb08496935b82f91ea9bf6ad240ec23397"}, - {file = "fonttools-4.53.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e8bf06b94694251861ba7fdeea15c8ec0967f84c3d4143ae9daf42bbc7717fe3"}, - {file = "fonttools-4.53.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b96cd370a61f4d083c9c0053bf634279b094308d52fdc2dd9a22d8372fdd590d"}, - {file = "fonttools-4.53.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a1c7c5aa18dd3b17995898b4a9b5929d69ef6ae2af5b96d585ff4005033d82f0"}, - {file = "fonttools-4.53.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:e013aae589c1c12505da64a7d8d023e584987e51e62006e1bb30d72f26522c41"}, - {file = "fonttools-4.53.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:9efd176f874cb6402e607e4cc9b4a9cd584d82fc34a4b0c811970b32ba62501f"}, - {file = "fonttools-4.53.1-cp310-cp310-win32.whl", hash = "sha256:c8696544c964500aa9439efb6761947393b70b17ef4e82d73277413f291260a4"}, - {file = "fonttools-4.53.1-cp310-cp310-win_amd64.whl", hash = "sha256:8959a59de5af6d2bec27489e98ef25a397cfa1774b375d5787509c06659b3671"}, - {file = "fonttools-4.53.1-py3-none-any.whl", hash = "sha256:f1f8758a2ad110bd6432203a344269f445a2907dc24ef6bccfd0ac4e14e0d71d"}, - {file = "fonttools-4.53.1.tar.gz", hash = "sha256:e128778a8e9bc11159ce5447f76766cefbd876f44bd79aff030287254e4752c4"}, + {file = "fonttools-4.54.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7ed7ee041ff7b34cc62f07545e55e1468808691dddfd315d51dd82a6b37ddef2"}, + {file = "fonttools-4.54.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:41bb0b250c8132b2fcac148e2e9198e62ff06f3cc472065dff839327945c5882"}, + {file = "fonttools-4.54.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7965af9b67dd546e52afcf2e38641b5be956d68c425bef2158e95af11d229f10"}, + {file = "fonttools-4.54.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:278913a168f90d53378c20c23b80f4e599dca62fbffae4cc620c8eed476b723e"}, + {file = "fonttools-4.54.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:0e88e3018ac809b9662615072dcd6b84dca4c2d991c6d66e1970a112503bba7e"}, + {file = "fonttools-4.54.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:4aa4817f0031206e637d1e685251ac61be64d1adef111060df84fdcbc6ab6c44"}, + {file = "fonttools-4.54.1-cp310-cp310-win32.whl", hash = "sha256:7e3b7d44e18c085fd8c16dcc6f1ad6c61b71ff463636fcb13df7b1b818bd0c02"}, + {file = "fonttools-4.54.1-cp310-cp310-win_amd64.whl", hash = "sha256:dd9cc95b8d6e27d01e1e1f1fae8559ef3c02c76317da650a19047f249acd519d"}, + {file = "fonttools-4.54.1-py3-none-any.whl", hash = "sha256:37cddd62d83dc4f72f7c3f3c2bcf2697e89a30efb152079896544a93907733bd"}, + {file = "fonttools-4.54.1.tar.gz", hash = "sha256:957f669d4922f92c171ba01bef7f29410668db09f6c02111e22b2bce446f3285"}, ] [[package]] name = "fonttools" -version = "4.53.1" +version = "4.54.1" extras = ["woff"] requires_python = ">=3.8" summary = "Tools to manipulate font files" @@ -639,36 +642,36 @@ groups = ["dev", "doc"] dependencies = [ "brotli>=1.0.1; platform_python_implementation == \"CPython\"", "brotlicffi>=0.8.0; platform_python_implementation != \"CPython\"", - "fonttools==4.53.1", + "fonttools==4.54.1", "zopfli>=0.1.4", ] files = [ - {file = "fonttools-4.53.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0679a30b59d74b6242909945429dbddb08496935b82f91ea9bf6ad240ec23397"}, - {file = "fonttools-4.53.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e8bf06b94694251861ba7fdeea15c8ec0967f84c3d4143ae9daf42bbc7717fe3"}, - {file = "fonttools-4.53.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b96cd370a61f4d083c9c0053bf634279b094308d52fdc2dd9a22d8372fdd590d"}, - {file = "fonttools-4.53.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a1c7c5aa18dd3b17995898b4a9b5929d69ef6ae2af5b96d585ff4005033d82f0"}, - {file = "fonttools-4.53.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:e013aae589c1c12505da64a7d8d023e584987e51e62006e1bb30d72f26522c41"}, - {file = "fonttools-4.53.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:9efd176f874cb6402e607e4cc9b4a9cd584d82fc34a4b0c811970b32ba62501f"}, - {file = "fonttools-4.53.1-cp310-cp310-win32.whl", hash = "sha256:c8696544c964500aa9439efb6761947393b70b17ef4e82d73277413f291260a4"}, - {file = "fonttools-4.53.1-cp310-cp310-win_amd64.whl", hash = "sha256:8959a59de5af6d2bec27489e98ef25a397cfa1774b375d5787509c06659b3671"}, - {file = "fonttools-4.53.1-py3-none-any.whl", hash = "sha256:f1f8758a2ad110bd6432203a344269f445a2907dc24ef6bccfd0ac4e14e0d71d"}, - {file = "fonttools-4.53.1.tar.gz", hash = "sha256:e128778a8e9bc11159ce5447f76766cefbd876f44bd79aff030287254e4752c4"}, + {file = "fonttools-4.54.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7ed7ee041ff7b34cc62f07545e55e1468808691dddfd315d51dd82a6b37ddef2"}, + {file = "fonttools-4.54.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:41bb0b250c8132b2fcac148e2e9198e62ff06f3cc472065dff839327945c5882"}, + {file = "fonttools-4.54.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7965af9b67dd546e52afcf2e38641b5be956d68c425bef2158e95af11d229f10"}, + {file = "fonttools-4.54.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:278913a168f90d53378c20c23b80f4e599dca62fbffae4cc620c8eed476b723e"}, + {file = "fonttools-4.54.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:0e88e3018ac809b9662615072dcd6b84dca4c2d991c6d66e1970a112503bba7e"}, + {file = "fonttools-4.54.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:4aa4817f0031206e637d1e685251ac61be64d1adef111060df84fdcbc6ab6c44"}, + {file = "fonttools-4.54.1-cp310-cp310-win32.whl", hash = "sha256:7e3b7d44e18c085fd8c16dcc6f1ad6c61b71ff463636fcb13df7b1b818bd0c02"}, + {file = "fonttools-4.54.1-cp310-cp310-win_amd64.whl", hash = "sha256:dd9cc95b8d6e27d01e1e1f1fae8559ef3c02c76317da650a19047f249acd519d"}, + {file = "fonttools-4.54.1-py3-none-any.whl", hash = "sha256:37cddd62d83dc4f72f7c3f3c2bcf2697e89a30efb152079896544a93907733bd"}, + {file = "fonttools-4.54.1.tar.gz", hash = "sha256:957f669d4922f92c171ba01bef7f29410668db09f6c02111e22b2bce446f3285"}, ] [[package]] name = "fsspec" -version = "2024.6.1" +version = "2024.9.0" requires_python = ">=3.8" summary = "File-system specification" groups = ["default"] files = [ - {file = "fsspec-2024.6.1-py3-none-any.whl", hash = "sha256:3cb443f8bcd2efb31295a5b9fdb02aee81d8452c80d28f97a6d0959e6cee101e"}, - {file = "fsspec-2024.6.1.tar.gz", hash = "sha256:fad7d7e209dd4c1208e3bbfda706620e0da5142bebbd9c384afb95b07e798e49"}, + {file = "fsspec-2024.9.0-py3-none-any.whl", hash = "sha256:a0947d552d8a6efa72cc2c730b12c41d043509156966cca4fb157b0f2a0c574b"}, + {file = "fsspec-2024.9.0.tar.gz", hash = "sha256:4b0afb90c2f21832df142f292649035d80b421f60a9e1c027802e5a0da2b04e8"}, ] [[package]] name = "globus-sdk" -version = "3.44.0" +version = "3.45.0" requires_python = ">=3.8" summary = "Globus SDK for Python" groups = ["default"] @@ -680,8 +683,8 @@ dependencies = [ "typing-extensions>=4.0; python_version < \"3.10\"", ] files = [ - {file = "globus_sdk-3.44.0-py3-none-any.whl", hash = "sha256:6986ca5dee9521551f17bc239269e993adb2913016ccfdd628ae7d7b1aeb1fbd"}, - {file = "globus_sdk-3.44.0.tar.gz", hash = "sha256:645ebeeb7140a5095126696b37323010452a7d8216549c2df5931489a1827983"}, + {file = "globus_sdk-3.45.0-py3-none-any.whl", hash = "sha256:bf3d523f5ac690539ab97e45195f44689f2df537ec5af73e77e2eaba4c1721e3"}, + {file = "globus_sdk-3.45.0.tar.gz", hash = "sha256:80da09d3ca254a63e1aa6d2f7cf86bc3252cf62f4321378a09199283b9df87fb"}, ] [[package]] @@ -697,22 +700,22 @@ files = [ [[package]] name = "greenlet" -version = "3.0.3" +version = "3.1.1" requires_python = ">=3.7" summary = "Lightweight in-process concurrent programming" groups = ["dev", "doc"] marker = "(platform_machine == \"win32\" or platform_machine == \"WIN32\" or platform_machine == \"AMD64\" or platform_machine == \"amd64\" or platform_machine == \"x86_64\" or platform_machine == \"ppc64le\" or platform_machine == \"aarch64\") and python_version < \"3.13\"" files = [ - {file = "greenlet-3.0.3-cp310-cp310-macosx_11_0_universal2.whl", hash = "sha256:9da2bd29ed9e4f15955dd1595ad7bc9320308a3b766ef7f837e23ad4b4aac31a"}, - {file = "greenlet-3.0.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d353cadd6083fdb056bb46ed07e4340b0869c305c8ca54ef9da3421acbdf6881"}, - {file = "greenlet-3.0.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dca1e2f3ca00b84a396bc1bce13dd21f680f035314d2379c4160c98153b2059b"}, - {file = "greenlet-3.0.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3ed7fb269f15dc662787f4119ec300ad0702fa1b19d2135a37c2c4de6fadfd4a"}, - {file = "greenlet-3.0.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd4f49ae60e10adbc94b45c0b5e6a179acc1736cf7a90160b404076ee283cf83"}, - {file = "greenlet-3.0.3-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:73a411ef564e0e097dbe7e866bb2dda0f027e072b04da387282b02c308807405"}, - {file = "greenlet-3.0.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:7f362975f2d179f9e26928c5b517524e89dd48530a0202570d55ad6ca5d8a56f"}, - {file = "greenlet-3.0.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:649dde7de1a5eceb258f9cb00bdf50e978c9db1b996964cd80703614c86495eb"}, - {file = "greenlet-3.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:68834da854554926fbedd38c76e60c4a2e3198c6fbed520b106a8986445caaf9"}, - {file = "greenlet-3.0.3.tar.gz", hash = "sha256:43374442353259554ce33599da8b692d5aa96f8976d567d4badf263371fbe491"}, + {file = "greenlet-3.1.1-cp310-cp310-macosx_11_0_universal2.whl", hash = "sha256:0bbae94a29c9e5c7e4a2b7f0aae5c17e8e90acbfd3bf6270eeba60c39fce3563"}, + {file = "greenlet-3.1.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0fde093fb93f35ca72a556cf72c92ea3ebfda3d79fc35bb19fbe685853869a83"}, + {file = "greenlet-3.1.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:36b89d13c49216cadb828db8dfa6ce86bbbc476a82d3a6c397f0efae0525bdd0"}, + {file = "greenlet-3.1.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:94b6150a85e1b33b40b1464a3f9988dcc5251d6ed06842abff82e42632fac120"}, + {file = "greenlet-3.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:93147c513fac16385d1036b7e5b102c7fbbdb163d556b791f0f11eada7ba65dc"}, + {file = "greenlet-3.1.1-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:da7a9bff22ce038e19bf62c4dd1ec8391062878710ded0a845bcf47cc0200617"}, + {file = "greenlet-3.1.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:b2795058c23988728eec1f36a4e5e4ebad22f8320c85f3587b539b9ac84128d7"}, + {file = "greenlet-3.1.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:ed10eac5830befbdd0c32f83e8aa6288361597550ba669b04c48f0f9a2c843c6"}, + {file = "greenlet-3.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:77c386de38a60d1dfb8e55b8c1101d68c79dfdd25c7095d51fec2dd800892b80"}, + {file = "greenlet-3.1.1.tar.gz", hash = "sha256:4ce3ac6cdb6adf7946475d7ef31777c26d94bccc377e070a7986bd2d5c515467"}, ] [[package]] @@ -746,7 +749,7 @@ files = [ [[package]] name = "ibl-neuropixel" -version = "1.2.0" +version = "1.3.2" requires_python = ">=3.8" summary = "Collection of tools for Neuropixel 1.0 and 2.0 probes data" groups = ["default"] @@ -755,19 +758,19 @@ dependencies = [ "joblib", "matplotlib", "mtscomp", - "numpy", + "numpy>=1.21.6", "one-api", "pandas", - "scipy", + "scipy>=1.11", ] files = [ - {file = "ibl_neuropixel-1.2.0-py3-none-any.whl", hash = "sha256:8b59fdb387a132395d81bdfbe655a6827046178416677e4daf85599c839fc094"}, - {file = "ibl_neuropixel-1.2.0.tar.gz", hash = "sha256:e2810ceb0bfee29d355d235c0ed6ad09e144a2d2155d9061745bf0dbb85cc527"}, + {file = "ibl_neuropixel-1.3.2-py3-none-any.whl", hash = "sha256:6a4bbd618cc94679d26ed6e291aff258fdc7e31706d9cce74dc6a6edb307523a"}, + {file = "ibl_neuropixel-1.3.2.tar.gz", hash = "sha256:264573fa7bd5a1dc01a2bfd06f1c1f878de79c3211279d565990c9ec33791252"}, ] [[package]] name = "iblatlas" -version = "0.5.3" +version = "0.5.4" requires_python = ">=3.8" summary = "IBL atlas module" groups = ["default"] @@ -780,8 +783,8 @@ dependencies = [ "scipy", ] files = [ - {file = "iblatlas-0.5.3-py3-none-any.whl", hash = "sha256:4262c077e6546acab5f6790db0af09ac52fbe4953005793a8145247653b71c0d"}, - {file = "iblatlas-0.5.3.tar.gz", hash = "sha256:6c25fedce7901c53b2c00b68d16e6704aa0b1f062038f56b046ea805234292c5"}, + {file = "iblatlas-0.5.4-py3-none-any.whl", hash = "sha256:b83657d4b90124b0414d36b4bfa1ff856496f25dd5b9bef3980af311f59aacda"}, + {file = "iblatlas-0.5.4.tar.gz", hash = "sha256:3bb6d50efa376e394b6d418498cf7c976440eb4706ff3949d1a48017ae786eeb"}, ] [[package]] @@ -851,7 +854,7 @@ dependencies = [ [[package]] name = "iblqt" -version = "0.1.0" +version = "0.1.1" requires_python = ">=3.10" summary = "A collection of extensions to the Qt framework." groups = ["default"] @@ -862,8 +865,8 @@ dependencies = [ "qtpy>=2.4.1", ] files = [ - {file = "iblqt-0.1.0-py3-none-any.whl", hash = "sha256:c0fde6b4bb96e18c1806b657c545ac94c9ed6a1ac974099b985e70e6895f3e93"}, - {file = "iblqt-0.1.0.tar.gz", hash = "sha256:a7c14884e4036ecdadcbdee1aece812b18d464cd8b12ea00ff037ae9eff34aa4"}, + {file = "iblqt-0.1.1-py3-none-any.whl", hash = "sha256:1a3c62dc7092e4cb1a6cf16029afc6938e7da7d0d1e957b901d3b031de2c8f78"}, + {file = "iblqt-0.1.1.tar.gz", hash = "sha256:d3d38c9db707dce62e58dce4bafe0ed7093684fd0868cddc46c1cfca98117249"}, ] [[package]] @@ -888,18 +891,18 @@ files = [ [[package]] name = "idna" -version = "3.7" -requires_python = ">=3.5" +version = "3.10" +requires_python = ">=3.6" summary = "Internationalized Domain Names in Applications (IDNA)" groups = ["default", "dev", "doc"] files = [ - {file = "idna-3.7-py3-none-any.whl", hash = "sha256:82fee1fc78add43492d3a1898bfa6d8a904cc97d8427f683ed8e798d07761aa0"}, - {file = "idna-3.7.tar.gz", hash = "sha256:028ff3aadf0609c1fd278d8ea3089299412a7a8b9bd005dd08b9f8285bcb5cfc"}, + {file = "idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3"}, + {file = "idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9"}, ] [[package]] name = "imagecodecs" -version = "2024.6.1" +version = "2024.9.22" requires_python = ">=3.9" summary = "Image transformation, compression, and decompression codecs" groups = ["default"] @@ -907,29 +910,29 @@ dependencies = [ "numpy", ] files = [ - {file = "imagecodecs-2024.6.1-cp310-cp310-macosx_10_14_x86_64.whl", hash = "sha256:369816eaddfe6e9d8d1faa6794341c89f3494fef846c9b5d834f77dc7583bfdf"}, - {file = "imagecodecs-2024.6.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9300198b5e4ec09f94f5d6bdd6f727d02bbccba5ed0c974e9931d3f9d5d7fa35"}, - {file = "imagecodecs-2024.6.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42eafc88b3dd44cfb7a8b076ff64ff794874e88d45c3691b32e9e93fbc42e86e"}, - {file = "imagecodecs-2024.6.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f428f141ed102cecf98ffbe61ed02b1f3f7d65db0bf1459cf2e7b1a53fb279b2"}, - {file = "imagecodecs-2024.6.1-cp310-cp310-win32.whl", hash = "sha256:5526a7e41939613a5c68403911f7cc738f6fe1a8ac0456535720f53253497b76"}, - {file = "imagecodecs-2024.6.1-cp310-cp310-win_amd64.whl", hash = "sha256:8d3d82ebe83a3e31ab7f09a8b72155c5436a3f87145052ca57dc5caf3a2dc9c0"}, - {file = "imagecodecs-2024.6.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:20d66ea962e9e6ea690a89f56ff9da7831378990d705c1fb133cddac2f2c507a"}, - {file = "imagecodecs-2024.6.1.tar.gz", hash = "sha256:0f3e94b7f51e2f78287b7ffae82cd850b1007639148894538274fa50bd179886"}, + {file = "imagecodecs-2024.9.22-cp310-cp310-macosx_10_14_x86_64.whl", hash = "sha256:4cc21a59c6eb409bc3930dc642039eb1ff67a36b3f8d9e8c229eaede6b26557e"}, + {file = "imagecodecs-2024.9.22-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:321ff2e6907820bdbf8350d20733f5068bf53513476d522028117aefab55fc03"}, + {file = "imagecodecs-2024.9.22-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e1608015c1e182e103d8b2ecda4a0e54595c3f846ca76fa484302283f24f3e7f"}, + {file = "imagecodecs-2024.9.22-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:432e518d74ee5b9ac7d5b1022ed29a9fdabd0eab18201220e742fde631962cf8"}, + {file = "imagecodecs-2024.9.22-cp310-cp310-win32.whl", hash = "sha256:50d14caef565ccb4bdeb60e045b61f5d899d3caaf18e980923cdb50a181e4db2"}, + {file = "imagecodecs-2024.9.22-cp310-cp310-win_amd64.whl", hash = "sha256:d7220e9134c3abda5e9f720dcd810031b01b8ba1a71faa8055ab6b43b5056109"}, + {file = "imagecodecs-2024.9.22-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:ec3ce35e6131853beb8a39e47e59b183d034c6e9476fafda38c7ab4d8d17e1f4"}, + {file = "imagecodecs-2024.9.22.tar.gz", hash = "sha256:fea0801b4008d25e971918d991397a351bbe76276cfa98eed2de54cb87e894a3"}, ] [[package]] name = "imageio" -version = "2.35.0" +version = "2.35.1" requires_python = ">=3.8" summary = "Library for reading and writing a wide range of image, video, scientific, and volumetric data formats." groups = ["default"] dependencies = [ - "numpy<2.0.0", + "numpy", "pillow>=8.3.2", ] files = [ - {file = "imageio-2.35.0-py3-none-any.whl", hash = "sha256:ebfb39c0ad7acf93750d7ee151664238aaa9208f202288ea6f3ca7cb0ed719c3"}, - {file = "imageio-2.35.0.tar.gz", hash = "sha256:e88f759803d2968e19a55fa8372e9fbe12967a8598fe042d8719ca46d03f4256"}, + {file = "imageio-2.35.1-py3-none-any.whl", hash = "sha256:6eb2e5244e7a16b85c10b5c2fe0f7bf961b40fcb9f1a9fd1bd1d2c2f8fb3cd65"}, + {file = "imageio-2.35.1.tar.gz", hash = "sha256:4952dfeef3c3947957f6d5dedb1f4ca31c6e509a476891062396834048aeed2a"}, ] [[package]] @@ -945,17 +948,17 @@ files = [ [[package]] name = "importlib-metadata" -version = "8.2.0" +version = "8.5.0" requires_python = ">=3.8" summary = "Read metadata from Python packages" groups = ["default", "dev", "doc"] dependencies = [ "typing-extensions>=3.6.4; python_version < \"3.8\"", - "zipp>=0.5", + "zipp>=3.20", ] files = [ - {file = "importlib_metadata-8.2.0-py3-none-any.whl", hash = "sha256:11901fa0c2f97919b288679932bb64febaeacf289d18ac84dd68cb2e74213369"}, - {file = "importlib_metadata-8.2.0.tar.gz", hash = "sha256:72e8d4399996132204f9a16dcc751af254a48f8d1b20b9ff0f98d4a8f901e73d"}, + {file = "importlib_metadata-8.5.0-py3-none-any.whl", hash = "sha256:45e54197d28b7a7f1559e60b95e7c567032b602131fbd588f1497f47880aa68b"}, + {file = "importlib_metadata-8.5.0.tar.gz", hash = "sha256:71522656f0abace1d072b9e5481a48f07c138e00f079c38c8f883823f9c26bd7"}, ] [[package]] @@ -997,7 +1000,7 @@ files = [ [[package]] name = "ipython" -version = "8.26.0" +version = "8.27.0" requires_python = ">=3.10" summary = "IPython: Productive Interactive Computing" groups = ["default", "dev", "doc"] @@ -1015,8 +1018,8 @@ dependencies = [ "typing-extensions>=4.6; python_version < \"3.12\"", ] files = [ - {file = "ipython-8.26.0-py3-none-any.whl", hash = "sha256:e6b347c27bdf9c32ee9d31ae85defc525755a1869f14057e900675b9e8d6e6ff"}, - {file = "ipython-8.26.0.tar.gz", hash = "sha256:1cec0fbba8404af13facebe83d04436a7434c7400e59f47acf467c64abd0956c"}, + {file = "ipython-8.27.0-py3-none-any.whl", hash = "sha256:f68b3cb8bde357a5d7adc9598d57e22a45dfbea19eb6b98286fa3b288c9cd55c"}, + {file = "ipython-8.27.0.tar.gz", hash = "sha256:0b99a2dc9f15fd68692e898e5568725c6d49c527d36a9fb5960ffbdeaa82ff7e"}, ] [[package]] @@ -1126,7 +1129,7 @@ files = [ [[package]] name = "jupyter-client" -version = "8.6.2" +version = "8.6.3" requires_python = ">=3.8" summary = "Jupyter protocol implementation and client libraries" groups = ["dev", "doc"] @@ -1139,8 +1142,8 @@ dependencies = [ "traitlets>=5.3", ] files = [ - {file = "jupyter_client-8.6.2-py3-none-any.whl", hash = "sha256:50cbc5c66fd1b8f65ecb66bc490ab73217993632809b6e505687de18e9dea39f"}, - {file = "jupyter_client-8.6.2.tar.gz", hash = "sha256:2bda14d55ee5ba58552a8c53ae43d215ad9868853489213f37da060ced54d8df"}, + {file = "jupyter_client-8.6.3-py3-none-any.whl", hash = "sha256:e8a19cc986cc45905ac3362915f410f3af85424b4c0905e94fa5f2cb08e8f23f"}, + {file = "jupyter_client-8.6.3.tar.gz", hash = "sha256:35b3a0947c4a6e9d589eb97d7d4cd5e90f910ee73101611f01283732bd6d9419"}, ] [[package]] @@ -1161,30 +1164,34 @@ files = [ [[package]] name = "kiwisolver" -version = "1.4.5" -requires_python = ">=3.7" +version = "1.4.7" +requires_python = ">=3.8" summary = "A fast implementation of the Cassowary constraint solver" groups = ["default"] -dependencies = [ - "typing-extensions; python_version < \"3.8\"", -] files = [ - {file = "kiwisolver-1.4.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:05703cf211d585109fcd72207a31bb170a0f22144d68298dc5e61b3c946518af"}, - {file = "kiwisolver-1.4.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:146d14bebb7f1dc4d5fbf74f8a6cb15ac42baadee8912eb84ac0b3b2a3dc6ac3"}, - {file = "kiwisolver-1.4.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6ef7afcd2d281494c0a9101d5c571970708ad911d028137cd558f02b851c08b4"}, - {file = "kiwisolver-1.4.5-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:9eaa8b117dc8337728e834b9c6e2611f10c79e38f65157c4c38e9400286f5cb1"}, - {file = "kiwisolver-1.4.5-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ec20916e7b4cbfb1f12380e46486ec4bcbaa91a9c448b97023fde0d5bbf9e4ff"}, - {file = "kiwisolver-1.4.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:39b42c68602539407884cf70d6a480a469b93b81b7701378ba5e2328660c847a"}, - {file = "kiwisolver-1.4.5-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aa12042de0171fad672b6c59df69106d20d5596e4f87b5e8f76df757a7c399aa"}, - {file = "kiwisolver-1.4.5-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2a40773c71d7ccdd3798f6489aaac9eee213d566850a9533f8d26332d626b82c"}, - {file = "kiwisolver-1.4.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:19df6e621f6d8b4b9c4d45f40a66839294ff2bb235e64d2178f7522d9170ac5b"}, - {file = "kiwisolver-1.4.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:83d78376d0d4fd884e2c114d0621624b73d2aba4e2788182d286309ebdeed770"}, - {file = "kiwisolver-1.4.5-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:e391b1f0a8a5a10ab3b9bb6afcfd74f2175f24f8975fb87ecae700d1503cdee0"}, - {file = "kiwisolver-1.4.5-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:852542f9481f4a62dbb5dd99e8ab7aedfeb8fb6342349a181d4036877410f525"}, - {file = "kiwisolver-1.4.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:59edc41b24031bc25108e210c0def6f6c2191210492a972d585a06ff246bb79b"}, - {file = "kiwisolver-1.4.5-cp310-cp310-win32.whl", hash = "sha256:a6aa6315319a052b4ee378aa171959c898a6183f15c1e541821c5c59beaa0238"}, - {file = "kiwisolver-1.4.5-cp310-cp310-win_amd64.whl", hash = "sha256:d0ef46024e6a3d79c01ff13801cb19d0cad7fd859b15037aec74315540acc276"}, - {file = "kiwisolver-1.4.5.tar.gz", hash = "sha256:e57e563a57fb22a142da34f38acc2fc1a5c864bc29ca1517a88abc963e60d6ec"}, + {file = "kiwisolver-1.4.7-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:8a9c83f75223d5e48b0bc9cb1bf2776cf01563e00ade8775ffe13b0b6e1af3a6"}, + {file = "kiwisolver-1.4.7-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:58370b1ffbd35407444d57057b57da5d6549d2d854fa30249771775c63b5fe17"}, + {file = "kiwisolver-1.4.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:aa0abdf853e09aff551db11fce173e2177d00786c688203f52c87ad7fcd91ef9"}, + {file = "kiwisolver-1.4.7-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:8d53103597a252fb3ab8b5845af04c7a26d5e7ea8122303dd7a021176a87e8b9"}, + {file = "kiwisolver-1.4.7-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:88f17c5ffa8e9462fb79f62746428dd57b46eb931698e42e990ad63103f35e6c"}, + {file = "kiwisolver-1.4.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:88a9ca9c710d598fd75ee5de59d5bda2684d9db36a9f50b6125eaea3969c2599"}, + {file = "kiwisolver-1.4.7-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f4d742cb7af1c28303a51b7a27aaee540e71bb8e24f68c736f6f2ffc82f2bf05"}, + {file = "kiwisolver-1.4.7-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e28c7fea2196bf4c2f8d46a0415c77a1c480cc0724722f23d7410ffe9842c407"}, + {file = "kiwisolver-1.4.7-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:e968b84db54f9d42046cf154e02911e39c0435c9801681e3fc9ce8a3c4130278"}, + {file = "kiwisolver-1.4.7-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:0c18ec74c0472de033e1bebb2911c3c310eef5649133dd0bedf2a169a1b269e5"}, + {file = "kiwisolver-1.4.7-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:8f0ea6da6d393d8b2e187e6a5e3fb81f5862010a40c3945e2c6d12ae45cfb2ad"}, + {file = "kiwisolver-1.4.7-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:f106407dda69ae456dd1227966bf445b157ccc80ba0dff3802bb63f30b74e895"}, + {file = "kiwisolver-1.4.7-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:84ec80df401cfee1457063732d90022f93951944b5b58975d34ab56bb150dfb3"}, + {file = "kiwisolver-1.4.7-cp310-cp310-win32.whl", hash = "sha256:71bb308552200fb2c195e35ef05de12f0c878c07fc91c270eb3d6e41698c3bcc"}, + {file = "kiwisolver-1.4.7-cp310-cp310-win_amd64.whl", hash = "sha256:44756f9fd339de0fb6ee4f8c1696cfd19b2422e0d70b4cefc1cc7f1f64045a8c"}, + {file = "kiwisolver-1.4.7-cp310-cp310-win_arm64.whl", hash = "sha256:78a42513018c41c2ffd262eb676442315cbfe3c44eed82385c2ed043bc63210a"}, + {file = "kiwisolver-1.4.7-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:94252291e3fe68001b1dd747b4c0b3be12582839b95ad4d1b641924d68fd4643"}, + {file = "kiwisolver-1.4.7-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:5b7dfa3b546da08a9f622bb6becdb14b3e24aaa30adba66749d38f3cc7ea9706"}, + {file = "kiwisolver-1.4.7-pp310-pypy310_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bd3de6481f4ed8b734da5df134cd5a6a64fe32124fe83dde1e5b5f29fe30b1e6"}, + {file = "kiwisolver-1.4.7-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a91b5f9f1205845d488c928e8570dcb62b893372f63b8b6e98b863ebd2368ff2"}, + {file = "kiwisolver-1.4.7-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40fa14dbd66b8b8f470d5fc79c089a66185619d31645f9b0773b88b19f7223c4"}, + {file = "kiwisolver-1.4.7-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:eb542fe7933aa09d8d8f9d9097ef37532a7df6497819d16efe4359890a2f417a"}, + {file = "kiwisolver-1.4.7.tar.gz", hash = "sha256:9893ff81bd7107f7b685d3017cc6583daadb4fc26e4a888350df530e41980a60"}, ] [[package]] @@ -1332,7 +1339,7 @@ files = [ [[package]] name = "mdit-py-plugins" -version = "0.4.1" +version = "0.4.2" requires_python = ">=3.8" summary = "Collection of plugins for markdown-it-py" groups = ["dev", "doc"] @@ -1340,8 +1347,8 @@ dependencies = [ "markdown-it-py<4.0.0,>=1.0.0", ] files = [ - {file = "mdit_py_plugins-0.4.1-py3-none-any.whl", hash = "sha256:1020dfe4e6bfc2c79fb49ae4e3f5b297f5ccd20f010187acc52af2921e27dc6a"}, - {file = "mdit_py_plugins-0.4.1.tar.gz", hash = "sha256:834b8ac23d1cd60cec703646ffd22ae97b7955a6d596eb1d304be1e251ae499c"}, + {file = "mdit_py_plugins-0.4.2-py3-none-any.whl", hash = "sha256:0c673c3f889399a33b95e88d2f0d111b4447bdfea7f237dab2d488f459835636"}, + {file = "mdit_py_plugins-0.4.2.tar.gz", hash = "sha256:5f2cd1fdb606ddf152d37ec30e46101a60512bc0e5fa1a7002c36647b09e26b5"}, ] [[package]] @@ -1367,7 +1374,7 @@ files = [ [[package]] name = "mypy" -version = "1.11.1" +version = "1.11.2" requires_python = ">=3.8" summary = "Optional static typing for Python" groups = ["dev", "typing"] @@ -1377,13 +1384,13 @@ dependencies = [ "typing-extensions>=4.6.0", ] files = [ - {file = "mypy-1.11.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a32fc80b63de4b5b3e65f4be82b4cfa362a46702672aa6a0f443b4689af7008c"}, - {file = "mypy-1.11.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c1952f5ea8a5a959b05ed5f16452fddadbaae48b5d39235ab4c3fc444d5fd411"}, - {file = "mypy-1.11.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e1e30dc3bfa4e157e53c1d17a0dad20f89dc433393e7702b813c10e200843b03"}, - {file = "mypy-1.11.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:2c63350af88f43a66d3dfeeeb8d77af34a4f07d760b9eb3a8697f0386c7590b4"}, - {file = "mypy-1.11.1-cp310-cp310-win_amd64.whl", hash = "sha256:a831671bad47186603872a3abc19634f3011d7f83b083762c942442d51c58d58"}, - {file = "mypy-1.11.1-py3-none-any.whl", hash = "sha256:0624bdb940255d2dd24e829d99a13cfeb72e4e9031f9492148f410ed30bcab54"}, - {file = "mypy-1.11.1.tar.gz", hash = "sha256:f404a0b069709f18bbdb702eb3dcfe51910602995de00bd39cea3050b5772d08"}, + {file = "mypy-1.11.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d42a6dd818ffce7be66cce644f1dff482f1d97c53ca70908dff0b9ddc120b77a"}, + {file = "mypy-1.11.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:801780c56d1cdb896eacd5619a83e427ce436d86a3bdf9112527f24a66618fef"}, + {file = "mypy-1.11.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:41ea707d036a5307ac674ea172875f40c9d55c5394f888b168033177fce47383"}, + {file = "mypy-1.11.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:6e658bd2d20565ea86da7d91331b0eed6d2eee22dc031579e6297f3e12c758c8"}, + {file = "mypy-1.11.2-cp310-cp310-win_amd64.whl", hash = "sha256:478db5f5036817fe45adb7332d927daa62417159d49783041338921dcf646fc7"}, + {file = "mypy-1.11.2-py3-none-any.whl", hash = "sha256:b499bc07dbdcd3de92b0a8b29fdf592c111276f6a12fe29c30f6c417dd546d12"}, + {file = "mypy-1.11.2.tar.gz", hash = "sha256:7f9993ad3e0ffdc95c2a14b66dee63729f021968bff8ad911867579c65d13a79"}, ] [[package]] @@ -1399,7 +1406,7 @@ files = [ [[package]] name = "myst-nb" -version = "1.1.1" +version = "1.1.2" requires_python = ">=3.9" summary = "A Jupyter Notebook Sphinx reader built on top of the MyST markdown parser." groups = ["dev", "doc"] @@ -1416,8 +1423,8 @@ dependencies = [ "typing-extensions", ] files = [ - {file = "myst_nb-1.1.1-py3-none-any.whl", hash = "sha256:8b8f9085287d948eef46cb3764aafc21915e0e981882b8c742719f5b1a84c36f"}, - {file = "myst_nb-1.1.1.tar.gz", hash = "sha256:74227c11f76d03494f43b7788659b161b94f4dedef230a2912412bc8c3c9e553"}, + {file = "myst_nb-1.1.2-py3-none-any.whl", hash = "sha256:9b7034e5d62640cb6daf03f9ca16ef45d0462fced27944c77aa3f98c7cdcd566"}, + {file = "myst_nb-1.1.2.tar.gz", hash = "sha256:961b4005657029ca89892a4c75edbf0856c54ceaf6172368b46bf7676c1f7700"}, ] [[package]] @@ -1562,7 +1569,7 @@ files = [ [[package]] name = "one-api" -version = "2.9rc0" +version = "2.9.1" requires_python = ">=3.7" summary = "Open Neurophysiology Environment" groups = ["default"] @@ -1578,8 +1585,8 @@ dependencies = [ "tqdm>=4.32.1", ] files = [ - {file = "ONE-api-2.9rc0.tar.gz", hash = "sha256:5878110963c7faf5547323fbaa614239121643f01572a68a1915f434d2b7f843"}, - {file = "ONE_api-2.9rc0-py3-none-any.whl", hash = "sha256:08766a12d2e1a0eb85bf9ddcfdad7d83f1628af375452f93c00f6b8fc12d1ad7"}, + {file = "ONE_api-2.9.1-py3-none-any.whl", hash = "sha256:d1249e33967edbbd5cc853be2fecc16074fed804418b22940b32b1341fdac36c"}, + {file = "one_api-2.9.1.tar.gz", hash = "sha256:31e8f72a542ab0a1207003dc631a3251a86e12f72c9107d5754b3ba9a5bd33b3"}, ] [[package]] @@ -1623,7 +1630,7 @@ files = [ [[package]] name = "pandas" -version = "2.2.2" +version = "2.2.3" requires_python = ">=3.9" summary = "Powerful data structures for data analysis, time series, and statistics" groups = ["default"] @@ -1636,14 +1643,14 @@ dependencies = [ "tzdata>=2022.7", ] files = [ - {file = "pandas-2.2.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:90c6fca2acf139569e74e8781709dccb6fe25940488755716d1d354d6bc58bce"}, - {file = "pandas-2.2.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c7adfc142dac335d8c1e0dcbd37eb8617eac386596eb9e1a1b77791cf2498238"}, - {file = "pandas-2.2.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4abfe0be0d7221be4f12552995e58723c7422c80a659da13ca382697de830c08"}, - {file = "pandas-2.2.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8635c16bf3d99040fdf3ca3db669a7250ddf49c55dc4aa8fe0ae0fa8d6dcc1f0"}, - {file = "pandas-2.2.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:40ae1dffb3967a52203105a077415a86044a2bea011b5f321c6aa64b379a3f51"}, - {file = "pandas-2.2.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8e5a0b00e1e56a842f922e7fae8ae4077aee4af0acb5ae3622bd4b4c30aedf99"}, - {file = "pandas-2.2.2-cp310-cp310-win_amd64.whl", hash = "sha256:ddf818e4e6c7c6f4f7c8a12709696d193976b591cc7dc50588d3d1a6b5dc8772"}, - {file = "pandas-2.2.2.tar.gz", hash = "sha256:9e79019aba43cb4fda9e4d983f8e88ca0373adbb697ae9c6c43093218de28b54"}, + {file = "pandas-2.2.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1948ddde24197a0f7add2bdc4ca83bf2b1ef84a1bc8ccffd95eda17fd836ecb5"}, + {file = "pandas-2.2.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:381175499d3802cde0eabbaf6324cce0c4f5d52ca6f8c377c29ad442f50f6348"}, + {file = "pandas-2.2.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d9c45366def9a3dd85a6454c0e7908f2b3b8e9c138f5dc38fed7ce720d8453ed"}, + {file = "pandas-2.2.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:86976a1c5b25ae3f8ccae3a5306e443569ee3c3faf444dfd0f41cda24667ad57"}, + {file = "pandas-2.2.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:b8661b0238a69d7aafe156b7fa86c44b881387509653fdf857bebc5e4008ad42"}, + {file = "pandas-2.2.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:37e0aced3e8f539eccf2e099f65cdb9c8aa85109b0be6e93e2baff94264bdc6f"}, + {file = "pandas-2.2.3-cp310-cp310-win_amd64.whl", hash = "sha256:56534ce0746a58afaf7942ba4863e0ef81c9c50d3f0ae93e9497d6a41a057645"}, + {file = "pandas-2.2.3.tar.gz", hash = "sha256:4f18ba62b61d7e192368b84517265a99b4d7ee8912f8708660fb4a366cc82667"}, ] [[package]] @@ -1750,13 +1757,13 @@ files = [ [[package]] name = "platformdirs" -version = "4.2.2" +version = "4.3.6" requires_python = ">=3.8" summary = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`." groups = ["dev", "doc"] files = [ - {file = "platformdirs-4.2.2-py3-none-any.whl", hash = "sha256:2d7a1657e36a80ea911db832a8a6ece5ee53d8de21edd5cc5879af6530b1bfee"}, - {file = "platformdirs-4.2.2.tar.gz", hash = "sha256:38b7b51f512eed9e84a22788b4bce1de17c0adb134d6becb09836e37d8654cd3"}, + {file = "platformdirs-4.3.6-py3-none-any.whl", hash = "sha256:73e575e1408ab8103900836b97580d5307456908a03e92031bab39e4554cc3fb"}, + {file = "platformdirs-4.3.6.tar.gz", hash = "sha256:357fb2acbc885b0419afd3ce3ed34564c13c9b95c89360cd9563f73aa5e2b907"}, ] [[package]] @@ -1772,16 +1779,16 @@ files = [ [[package]] name = "project-extraction" -version = "0.2.7" +version = "0.3.0" requires_python = "~=3.10" git = "https://github.com/int-brain-lab/project_extraction.git" -revision = "517662d2e84bf09a6e731c90cfccc057e3c5944f" +revision = "f9b5a45c6a812bf736b6fd5237bfc8d5f3768e2e" summary = "Custom extractors for satellite tasks" groups = ["project-extraction"] [[package]] name = "prompt-toolkit" -version = "3.0.47" +version = "3.0.48" requires_python = ">=3.7.0" summary = "Library for building powerful interactive command lines in Python" groups = ["default", "dev", "doc"] @@ -1789,8 +1796,8 @@ dependencies = [ "wcwidth", ] files = [ - {file = "prompt_toolkit-3.0.47-py3-none-any.whl", hash = "sha256:0d7bfa67001d5e39d02c224b663abc33687405033a8c422d0d675a5a13361d10"}, - {file = "prompt_toolkit-3.0.47.tar.gz", hash = "sha256:1e1b29cb58080b1e69f207c893a1a7bf16d127a5c30c9d17a25a5d77792e5360"}, + {file = "prompt_toolkit-3.0.48-py3-none-any.whl", hash = "sha256:f49a827f90062e411f1ce1f854f2aedb3c23353244f8108b89283587397ac10e"}, + {file = "prompt_toolkit-3.0.48.tar.gz", hash = "sha256:d6623ab0477a80df74e646bdbc93621143f5caf104206aa29294d53de1a03d90"}, ] [[package]] @@ -2016,13 +2023,13 @@ files = [ [[package]] name = "pyparsing" -version = "3.1.2" +version = "3.1.4" requires_python = ">=3.6.8" summary = "pyparsing module - Classes and methods to define and execute parsing grammars" groups = ["default"] files = [ - {file = "pyparsing-3.1.2-py3-none-any.whl", hash = "sha256:f9db75911801ed778fe61bb643079ff86601aca99fcae6345aa67292038fb742"}, - {file = "pyparsing-3.1.2.tar.gz", hash = "sha256:a1bac0ce561155ecc3ed78ca94d3c9378656ad4c94c1270de543f621420f94ad"}, + {file = "pyparsing-3.1.4-py3-none-any.whl", hash = "sha256:a6a7ee4235a3f944aa1fa2249307708f893fe5717dc603503c6c7969c070fb7c"}, + {file = "pyparsing-3.1.4.tar.gz", hash = "sha256:f86ec8d1a83f11977c9a6ea7598e8c27fc5cddfa5b07ea2241edbbde1d7bc032"}, ] [[package]] @@ -2150,7 +2157,7 @@ files = [ [[package]] name = "pytest" -version = "8.3.2" +version = "8.3.3" requires_python = ">=3.8" summary = "pytest: simple powerful testing with Python" groups = ["default", "ci", "dev", "test"] @@ -2163,8 +2170,8 @@ dependencies = [ "tomli>=1; python_version < \"3.11\"", ] files = [ - {file = "pytest-8.3.2-py3-none-any.whl", hash = "sha256:4ba08f9ae7dcf84ded419494d229b48d0903ea6407b030eaec46df5e6a73bba5"}, - {file = "pytest-8.3.2.tar.gz", hash = "sha256:c132345d12ce551242c87269de812483f5bcc87cdbb4722e48487ba194f9fdce"}, + {file = "pytest-8.3.3-py3-none-any.whl", hash = "sha256:a6853c7375b2663155079443d2e45de913a911a11d669df02a50814944db57b2"}, + {file = "pytest-8.3.3.tar.gz", hash = "sha256:70b98107bd648308a7952b06e6ca9a50bc660be218d53c257cc1fc94fda10181"}, ] [[package]] @@ -2212,23 +2219,23 @@ files = [ [[package]] name = "python-osc" -version = "1.8.3" -requires_python = ">=3.7" +version = "1.9.0" +requires_python = ">=3.10" summary = "Open Sound Control server and client implementations in pure Python" groups = ["default"] files = [ - {file = "python-osc-1.8.3.tar.gz", hash = "sha256:a5ce1ba56c8d82df51cb3f2946b5dd33a70522791acc4b8564e62d2b20ad9caa"}, - {file = "python_osc-1.8.3-py3-none-any.whl", hash = "sha256:6fa7e5cf7690057712c26e5f67a747126e6a5f481a40792aad0f25ac3edee815"}, + {file = "python_osc-1.9.0-py3-none-any.whl", hash = "sha256:4b16d8c4ae6a8a291037b2216a188d8654a4babe721387b8a37f89470b0c82c1"}, + {file = "python_osc-1.9.0.tar.gz", hash = "sha256:ab50f66b1a19efd5bff722f26ab6450df19cdd84ba868f08c9a33e7c78514456"}, ] [[package]] name = "pytz" -version = "2024.1" +version = "2024.2" summary = "World timezone definitions, modern and historical" groups = ["default"] files = [ - {file = "pytz-2024.1-py2.py3-none-any.whl", hash = "sha256:328171f4e3623139da4983451950b28e95ac706e13f3f2630a879749e7a8b319"}, - {file = "pytz-2024.1.tar.gz", hash = "sha256:2a29735ea9c18baf14b448846bde5a48030ed267578472d8955cd0e7443a9812"}, + {file = "pytz-2024.2-py2.py3-none-any.whl", hash = "sha256:31c7c1817eb7fae7ca4b8c7ee50c72f93aa2dd863de768e1ef4245d426aa0725"}, + {file = "pytz-2024.2.tar.gz", hash = "sha256:2aa355083c50a0f93fa581709deac0c9ad65cca8a9e9beac660adcbd493c798a"}, ] [[package]] @@ -2274,7 +2281,7 @@ files = [ [[package]] name = "pyzmq" -version = "26.1.0" +version = "26.2.0" requires_python = ">=3.7" summary = "Python bindings for 0MQ" groups = ["dev", "doc"] @@ -2282,24 +2289,24 @@ dependencies = [ "cffi; implementation_name == \"pypy\"", ] files = [ - {file = "pyzmq-26.1.0-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:263cf1e36862310bf5becfbc488e18d5d698941858860c5a8c079d1511b3b18e"}, - {file = "pyzmq-26.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d5c8b17f6e8f29138678834cf8518049e740385eb2dbf736e8f07fc6587ec682"}, - {file = "pyzmq-26.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:75a95c2358fcfdef3374cb8baf57f1064d73246d55e41683aaffb6cfe6862917"}, - {file = "pyzmq-26.1.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f99de52b8fbdb2a8f5301ae5fc0f9e6b3ba30d1d5fc0421956967edcc6914242"}, - {file = "pyzmq-26.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7bcbfbab4e1895d58ab7da1b5ce9a327764f0366911ba5b95406c9104bceacb0"}, - {file = "pyzmq-26.1.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:77ce6a332c7e362cb59b63f5edf730e83590d0ab4e59c2aa5bd79419a42e3449"}, - {file = "pyzmq-26.1.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:ba0a31d00e8616149a5ab440d058ec2da621e05d744914774c4dde6837e1f545"}, - {file = "pyzmq-26.1.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:8b88641384e84a258b740801cd4dbc45c75f148ee674bec3149999adda4a8598"}, - {file = "pyzmq-26.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:2fa76ebcebe555cce90f16246edc3ad83ab65bb7b3d4ce408cf6bc67740c4f88"}, - {file = "pyzmq-26.1.0-cp310-cp310-win32.whl", hash = "sha256:fbf558551cf415586e91160d69ca6416f3fce0b86175b64e4293644a7416b81b"}, - {file = "pyzmq-26.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:a7b8aab50e5a288c9724d260feae25eda69582be84e97c012c80e1a5e7e03fb2"}, - {file = "pyzmq-26.1.0-cp310-cp310-win_arm64.whl", hash = "sha256:08f74904cb066e1178c1ec706dfdb5c6c680cd7a8ed9efebeac923d84c1f13b1"}, - {file = "pyzmq-26.1.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:b24079a14c9596846bf7516fe75d1e2188d4a528364494859106a33d8b48be38"}, - {file = "pyzmq-26.1.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:59d0acd2976e1064f1b398a00e2c3e77ed0a157529779e23087d4c2fb8aaa416"}, - {file = "pyzmq-26.1.0-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:911c43a4117915203c4cc8755e0f888e16c4676a82f61caee2f21b0c00e5b894"}, - {file = "pyzmq-26.1.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b10163e586cc609f5f85c9b233195554d77b1e9a0801388907441aaeb22841c5"}, - {file = "pyzmq-26.1.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:28a8b2abb76042f5fd7bd720f7fea48c0fd3e82e9de0a1bf2c0de3812ce44a42"}, - {file = "pyzmq-26.1.0.tar.gz", hash = "sha256:6c5aeea71f018ebd3b9115c7cb13863dd850e98ca6b9258509de1246461a7e7f"}, + {file = "pyzmq-26.2.0-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:ddf33d97d2f52d89f6e6e7ae66ee35a4d9ca6f36eda89c24591b0c40205a3629"}, + {file = "pyzmq-26.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:dacd995031a01d16eec825bf30802fceb2c3791ef24bcce48fa98ce40918c27b"}, + {file = "pyzmq-26.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:89289a5ee32ef6c439086184529ae060c741334b8970a6855ec0b6ad3ff28764"}, + {file = "pyzmq-26.2.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5506f06d7dc6ecf1efacb4a013b1f05071bb24b76350832c96449f4a2d95091c"}, + {file = "pyzmq-26.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8ea039387c10202ce304af74def5021e9adc6297067f3441d348d2b633e8166a"}, + {file = "pyzmq-26.2.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:a2224fa4a4c2ee872886ed00a571f5e967c85e078e8e8c2530a2fb01b3309b88"}, + {file = "pyzmq-26.2.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:28ad5233e9c3b52d76196c696e362508959741e1a005fb8fa03b51aea156088f"}, + {file = "pyzmq-26.2.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:1c17211bc037c7d88e85ed8b7d8f7e52db6dc8eca5590d162717c654550f7282"}, + {file = "pyzmq-26.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b8f86dd868d41bea9a5f873ee13bf5551c94cf6bc51baebc6f85075971fe6eea"}, + {file = "pyzmq-26.2.0-cp310-cp310-win32.whl", hash = "sha256:46a446c212e58456b23af260f3d9fb785054f3e3653dbf7279d8f2b5546b21c2"}, + {file = "pyzmq-26.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:49d34ab71db5a9c292a7644ce74190b1dd5a3475612eefb1f8be1d6961441971"}, + {file = "pyzmq-26.2.0-cp310-cp310-win_arm64.whl", hash = "sha256:bfa832bfa540e5b5c27dcf5de5d82ebc431b82c453a43d141afb1e5d2de025fa"}, + {file = "pyzmq-26.2.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:706e794564bec25819d21a41c31d4df2d48e1cc4b061e8d345d7fb4dd3e94072"}, + {file = "pyzmq-26.2.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b435f2753621cd36e7c1762156815e21c985c72b19135dac43a7f4f31d28dd1"}, + {file = "pyzmq-26.2.0-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:160c7e0a5eb178011e72892f99f918c04a131f36056d10d9c1afb223fc952c2d"}, + {file = "pyzmq-26.2.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2c4a71d5d6e7b28a47a394c0471b7e77a0661e2d651e7ae91e0cab0a587859ca"}, + {file = "pyzmq-26.2.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:90412f2db8c02a3864cbfc67db0e3dcdbda336acf1c469526d3e869394fe001c"}, + {file = "pyzmq-26.2.0.tar.gz", hash = "sha256:070672c258581c8e4f640b5159297580a9974b026043bd4ab0470be9ed324f1f"}, ] [[package]] @@ -2385,29 +2392,29 @@ files = [ [[package]] name = "ruff" -version = "0.6.0" +version = "0.6.8" requires_python = ">=3.7" summary = "An extremely fast Python linter and code formatter, written in Rust." groups = ["dev", "test"] files = [ - {file = "ruff-0.6.0-py3-none-linux_armv6l.whl", hash = "sha256:92dcce923e5df265781e5fc76f9a1edad52201a7aafe56e586b90988d5239013"}, - {file = "ruff-0.6.0-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:31b90ff9dc79ed476c04e957ba7e2b95c3fceb76148f2079d0d68a908d2cfae7"}, - {file = "ruff-0.6.0-py3-none-macosx_11_0_arm64.whl", hash = "sha256:6d834a9ec9f8287dd6c3297058b3a265ed6b59233db22593379ee38ebc4b9768"}, - {file = "ruff-0.6.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f2089267692696aba342179471831a085043f218706e642564812145df8b8d0d"}, - {file = "ruff-0.6.0-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:aa62b423ee4bbd8765f2c1dbe8f6aac203e0583993a91453dc0a449d465c84da"}, - {file = "ruff-0.6.0-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7344e1a964b16b1137ea361d6516ce4ee61a0403fa94252a1913ecc1311adcae"}, - {file = "ruff-0.6.0-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:487f3a35c3f33bf82be212ce15dc6278ea854e35573a3f809442f73bec8b2760"}, - {file = "ruff-0.6.0-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:75db409984077a793cf344d499165298a6f65449e905747ac65983b12e3e64b1"}, - {file = "ruff-0.6.0-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:84908bd603533ecf1db456d8fc2665d1f4335d722e84bc871d3bbd2d1116c272"}, - {file = "ruff-0.6.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0f1749a0aef3ec41ed91a0e2127a6ae97d2e2853af16dbd4f3c00d7a3af726c5"}, - {file = "ruff-0.6.0-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:016fea751e2bcfbbd2f8cb19b97b37b3fd33148e4df45b526e87096f4e17354f"}, - {file = "ruff-0.6.0-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:6ae80f141b53b2e36e230017e64f5ea2def18fac14334ffceaae1b780d70c4f7"}, - {file = "ruff-0.6.0-py3-none-musllinux_1_2_i686.whl", hash = "sha256:eaaaf33ea4b3f63fd264d6a6f4a73fa224bbfda4b438ffea59a5340f4afa2bb5"}, - {file = "ruff-0.6.0-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:7667ddd1fc688150a7ca4137140867584c63309695a30016880caf20831503a0"}, - {file = "ruff-0.6.0-py3-none-win32.whl", hash = "sha256:ae48365aae60d40865a412356f8c6f2c0be1c928591168111eaf07eaefa6bea3"}, - {file = "ruff-0.6.0-py3-none-win_amd64.whl", hash = "sha256:774032b507c96f0c803c8237ce7d2ef3934df208a09c40fa809c2931f957fe5e"}, - {file = "ruff-0.6.0-py3-none-win_arm64.whl", hash = "sha256:a5366e8c3ae6b2dc32821749b532606c42e609a99b0ae1472cf601da931a048c"}, - {file = "ruff-0.6.0.tar.gz", hash = "sha256:272a81830f68f9bd19d49eaf7fa01a5545c5a2e86f32a9935bb0e4bb9a1db5b8"}, + {file = "ruff-0.6.8-py3-none-linux_armv6l.whl", hash = "sha256:77944bca110ff0a43b768f05a529fecd0706aac7bcce36d7f1eeb4cbfca5f0f2"}, + {file = "ruff-0.6.8-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:27b87e1801e786cd6ede4ada3faa5e254ce774de835e6723fd94551464c56b8c"}, + {file = "ruff-0.6.8-py3-none-macosx_11_0_arm64.whl", hash = "sha256:cd48f945da2a6334f1793d7f701725a76ba93bf3d73c36f6b21fb04d5338dcf5"}, + {file = "ruff-0.6.8-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:677e03c00f37c66cea033274295a983c7c546edea5043d0c798833adf4cf4c6f"}, + {file = "ruff-0.6.8-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9f1476236b3eacfacfc0f66aa9e6cd39f2a624cb73ea99189556015f27c0bdeb"}, + {file = "ruff-0.6.8-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6f5a2f17c7d32991169195d52a04c95b256378bbf0de8cb98478351eb70d526f"}, + {file = "ruff-0.6.8-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:5fd0d4b7b1457c49e435ee1e437900ced9b35cb8dc5178921dfb7d98d65a08d0"}, + {file = "ruff-0.6.8-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f8034b19b993e9601f2ddf2c517451e17a6ab5cdb1c13fdff50c1442a7171d87"}, + {file = "ruff-0.6.8-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6cfb227b932ba8ef6e56c9f875d987973cd5e35bc5d05f5abf045af78ad8e098"}, + {file = "ruff-0.6.8-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6ef0411eccfc3909269fed47c61ffebdcb84a04504bafa6b6df9b85c27e813b0"}, + {file = "ruff-0.6.8-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:007dee844738c3d2e6c24ab5bc7d43c99ba3e1943bd2d95d598582e9c1b27750"}, + {file = "ruff-0.6.8-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:ce60058d3cdd8490e5e5471ef086b3f1e90ab872b548814e35930e21d848c9ce"}, + {file = "ruff-0.6.8-py3-none-musllinux_1_2_i686.whl", hash = "sha256:1085c455d1b3fdb8021ad534379c60353b81ba079712bce7a900e834859182fa"}, + {file = "ruff-0.6.8-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:70edf6a93b19481affd287d696d9e311388d808671bc209fb8907b46a8c3af44"}, + {file = "ruff-0.6.8-py3-none-win32.whl", hash = "sha256:792213f7be25316f9b46b854df80a77e0da87ec66691e8f012f887b4a671ab5a"}, + {file = "ruff-0.6.8-py3-none-win_amd64.whl", hash = "sha256:ec0517dc0f37cad14a5319ba7bba6e7e339d03fbf967a6d69b0907d61be7a263"}, + {file = "ruff-0.6.8-py3-none-win_arm64.whl", hash = "sha256:8d3bb2e3fbb9875172119021a13eed38849e762499e3cfde9588e4b4d70968dc"}, + {file = "ruff-0.6.8.tar.gz", hash = "sha256:a5bf44b1aa0adaf6d9d20f86162b34f7c593bfedabc51239953e446aefc8ce18"}, ] [[package]] @@ -2451,7 +2458,7 @@ files = [ [[package]] name = "scikit-learn" -version = "1.5.1" +version = "1.5.2" requires_python = ">=3.9" summary = "A set of python modules for machine learning and data mining" groups = ["default"] @@ -2462,17 +2469,17 @@ dependencies = [ "threadpoolctl>=3.1.0", ] files = [ - {file = "scikit_learn-1.5.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:781586c414f8cc58e71da4f3d7af311e0505a683e112f2f62919e3019abd3745"}, - {file = "scikit_learn-1.5.1-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:f5b213bc29cc30a89a3130393b0e39c847a15d769d6e59539cd86b75d276b1a7"}, - {file = "scikit_learn-1.5.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1ff4ba34c2abff5ec59c803ed1d97d61b036f659a17f55be102679e88f926fac"}, - {file = "scikit_learn-1.5.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:161808750c267b77b4a9603cf9c93579c7a74ba8486b1336034c2f1579546d21"}, - {file = "scikit_learn-1.5.1-cp310-cp310-win_amd64.whl", hash = "sha256:10e49170691514a94bb2e03787aa921b82dbc507a4ea1f20fd95557862c98dc1"}, - {file = "scikit_learn-1.5.1.tar.gz", hash = "sha256:0ea5d40c0e3951df445721927448755d3fe1d80833b0b7308ebff5d2a45e6414"}, + {file = "scikit_learn-1.5.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:299406827fb9a4f862626d0fe6c122f5f87f8910b86fe5daa4c32dcd742139b6"}, + {file = "scikit_learn-1.5.2-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:2d4cad1119c77930b235579ad0dc25e65c917e756fe80cab96aa3b9428bd3fb0"}, + {file = "scikit_learn-1.5.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c412ccc2ad9bf3755915e3908e677b367ebc8d010acbb3f182814524f2e5540"}, + {file = "scikit_learn-1.5.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a686885a4b3818d9e62904d91b57fa757fc2bed3e465c8b177be652f4dd37c8"}, + {file = "scikit_learn-1.5.2-cp310-cp310-win_amd64.whl", hash = "sha256:c15b1ca23d7c5f33cc2cb0a0d6aaacf893792271cddff0edbd6a40e8319bc113"}, + {file = "scikit_learn-1.5.2.tar.gz", hash = "sha256:b4237ed7b3fdd0a4882792e68ef2545d5baa50aca3bb45aa7df468138ad8f94d"}, ] [[package]] name = "scipy" -version = "1.14.0" +version = "1.14.1" requires_python = ">=3.10" summary = "Fundamental algorithms for scientific computing in Python" groups = ["default"] @@ -2480,15 +2487,15 @@ dependencies = [ "numpy<2.3,>=1.23.5", ] files = [ - {file = "scipy-1.14.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7e911933d54ead4d557c02402710c2396529540b81dd554fc1ba270eb7308484"}, - {file = "scipy-1.14.0-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:687af0a35462402dd851726295c1a5ae5f987bd6e9026f52e9505994e2f84ef6"}, - {file = "scipy-1.14.0-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:07e179dc0205a50721022344fb85074f772eadbda1e1b3eecdc483f8033709b7"}, - {file = "scipy-1.14.0-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:6a9c9a9b226d9a21e0a208bdb024c3982932e43811b62d202aaf1bb59af264b1"}, - {file = "scipy-1.14.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:076c27284c768b84a45dcf2e914d4000aac537da74236a0d45d82c6fa4b7b3c0"}, - {file = "scipy-1.14.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:42470ea0195336df319741e230626b6225a740fd9dce9642ca13e98f667047c0"}, - {file = "scipy-1.14.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:176c6f0d0470a32f1b2efaf40c3d37a24876cebf447498a4cefb947a79c21e9d"}, - {file = "scipy-1.14.0-cp310-cp310-win_amd64.whl", hash = "sha256:ad36af9626d27a4326c8e884917b7ec321d8a1841cd6dacc67d2a9e90c2f0359"}, - {file = "scipy-1.14.0.tar.gz", hash = "sha256:b5923f48cb840380f9854339176ef21763118a7300a88203ccd0bdd26e58527b"}, + {file = "scipy-1.14.1-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:b28d2ca4add7ac16ae8bb6632a3c86e4b9e4d52d3e34267f6e1b0c1f8d87e389"}, + {file = "scipy-1.14.1-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:d0d2821003174de06b69e58cef2316a6622b60ee613121199cb2852a873f8cf3"}, + {file = "scipy-1.14.1-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:8bddf15838ba768bb5f5083c1ea012d64c9a444e16192762bd858f1e126196d0"}, + {file = "scipy-1.14.1-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:97c5dddd5932bd2a1a31c927ba5e1463a53b87ca96b5c9bdf5dfd6096e27efc3"}, + {file = "scipy-1.14.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2ff0a7e01e422c15739ecd64432743cf7aae2b03f3084288f399affcefe5222d"}, + {file = "scipy-1.14.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8e32dced201274bf96899e6491d9ba3e9a5f6b336708656466ad0522d8528f69"}, + {file = "scipy-1.14.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:8426251ad1e4ad903a4514712d2fa8fdd5382c978010d1c6f5f37ef286a713ad"}, + {file = "scipy-1.14.1-cp310-cp310-win_amd64.whl", hash = "sha256:a49f6ed96f83966f576b33a44257d869756df6cf1ef4934f59dd58b25e0327e5"}, + {file = "scipy-1.14.1.tar.gz", hash = "sha256:5a275584e726026a5699459aa72f828a610821006228e841b94275c4a7c08417"}, ] [[package]] @@ -2509,13 +2516,13 @@ files = [ [[package]] name = "setuptools" -version = "72.2.0" +version = "75.1.0" requires_python = ">=3.8" summary = "Easily download, build, install, upgrade, and uninstall Python packages" groups = ["dev", "doc"] files = [ - {file = "setuptools-72.2.0-py3-none-any.whl", hash = "sha256:f11dd94b7bae3a156a95ec151f24e4637fb4fa19c878e4d191bfb8b2d82728c4"}, - {file = "setuptools-72.2.0.tar.gz", hash = "sha256:80aacbf633704e9c8bfa1d99fa5dd4dc59573efcf9e4042c13d3bcef91ac2ef9"}, + {file = "setuptools-75.1.0-py3-none-any.whl", hash = "sha256:35ab7fd3bcd95e6b7fd704e4a1539513edad446c097797f2985e0e4b960772f2"}, + {file = "setuptools-75.1.0.tar.gz", hash = "sha256:d59a21b17a275fb872a9c3dae73963160ae079f1049ed956880cd7c09b120538"}, ] [[package]] @@ -2645,12 +2652,12 @@ files = [ [[package]] name = "sphinx-autobuild" -version = "2024.4.16" +version = "2024.9.19" requires_python = ">=3.9" summary = "Rebuild Sphinx documentation on changes, with hot reloading in the browser." groups = ["dev", "doc"] dependencies = [ - "colorama", + "colorama>=0.4.6", "sphinx", "starlette>=0.35", "uvicorn>=0.25", @@ -2658,8 +2665,8 @@ dependencies = [ "websockets>=11", ] files = [ - {file = "sphinx_autobuild-2024.4.16-py3-none-any.whl", hash = "sha256:f2522779d30fcbf0253e09714f274ce8c608cb6ebcd67922b1c54de59faba702"}, - {file = "sphinx_autobuild-2024.4.16.tar.gz", hash = "sha256:1c0ed37a1970eed197f9c5a66d65759e7c4e4cba7b5a5d77940752bf1a59f2c7"}, + {file = "sphinx_autobuild-2024.9.19-py3-none-any.whl", hash = "sha256:57d974eebfc6461ff0fd136e78bf7a9c057d543d5166d318a45599898019b82c"}, + {file = "sphinx_autobuild-2024.9.19.tar.gz", hash = "sha256:2dd4863d174e533c1cd075eb5dfc90ad9a21734af7efd25569bf228b405e08ef"}, ] [[package]] @@ -2867,7 +2874,7 @@ files = [ [[package]] name = "sqlalchemy" -version = "2.0.32" +version = "2.0.35" requires_python = ">=3.7" summary = "Database Abstraction Library" groups = ["dev", "doc"] @@ -2877,16 +2884,16 @@ dependencies = [ "typing-extensions>=4.6.0", ] files = [ - {file = "SQLAlchemy-2.0.32-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0c9045ecc2e4db59bfc97b20516dfdf8e41d910ac6fb667ebd3a79ea54084619"}, - {file = "SQLAlchemy-2.0.32-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1467940318e4a860afd546ef61fefb98a14d935cd6817ed07a228c7f7c62f389"}, - {file = "SQLAlchemy-2.0.32-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5954463675cb15db8d4b521f3566a017c8789222b8316b1e6934c811018ee08b"}, - {file = "SQLAlchemy-2.0.32-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:167e7497035c303ae50651b351c28dc22a40bb98fbdb8468cdc971821b1ae533"}, - {file = "SQLAlchemy-2.0.32-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:b27dfb676ac02529fb6e343b3a482303f16e6bc3a4d868b73935b8792edb52d0"}, - {file = "SQLAlchemy-2.0.32-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:bf2360a5e0f7bd75fa80431bf8ebcfb920c9f885e7956c7efde89031695cafb8"}, - {file = "SQLAlchemy-2.0.32-cp310-cp310-win32.whl", hash = "sha256:306fe44e754a91cd9d600a6b070c1f2fadbb4a1a257b8781ccf33c7067fd3e4d"}, - {file = "SQLAlchemy-2.0.32-cp310-cp310-win_amd64.whl", hash = "sha256:99db65e6f3ab42e06c318f15c98f59a436f1c78179e6a6f40f529c8cc7100b22"}, - {file = "SQLAlchemy-2.0.32-py3-none-any.whl", hash = "sha256:e567a8793a692451f706b363ccf3c45e056b67d90ead58c3bc9471af5d212202"}, - {file = "SQLAlchemy-2.0.32.tar.gz", hash = "sha256:c1b88cc8b02b6a5f0efb0345a03672d4c897dc7d92585176f88c67346f565ea8"}, + {file = "SQLAlchemy-2.0.35-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:67219632be22f14750f0d1c70e62f204ba69d28f62fd6432ba05ab295853de9b"}, + {file = "SQLAlchemy-2.0.35-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:4668bd8faf7e5b71c0319407b608f278f279668f358857dbfd10ef1954ac9f90"}, + {file = "SQLAlchemy-2.0.35-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cb8bea573863762bbf45d1e13f87c2d2fd32cee2dbd50d050f83f87429c9e1ea"}, + {file = "SQLAlchemy-2.0.35-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f552023710d4b93d8fb29a91fadf97de89c5926c6bd758897875435f2a939f33"}, + {file = "SQLAlchemy-2.0.35-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:016b2e665f778f13d3c438651dd4de244214b527a275e0acf1d44c05bc6026a9"}, + {file = "SQLAlchemy-2.0.35-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:7befc148de64b6060937231cbff8d01ccf0bfd75aa26383ffdf8d82b12ec04ff"}, + {file = "SQLAlchemy-2.0.35-cp310-cp310-win32.whl", hash = "sha256:22b83aed390e3099584b839b93f80a0f4a95ee7f48270c97c90acd40ee646f0b"}, + {file = "SQLAlchemy-2.0.35-cp310-cp310-win_amd64.whl", hash = "sha256:a29762cd3d116585278ffb2e5b8cc311fb095ea278b96feef28d0b423154858e"}, + {file = "SQLAlchemy-2.0.35-py3-none-any.whl", hash = "sha256:2ab3f0336c0387662ce6221ad30ab3a5e6499aab01b9790879b6578fd9b8faa1"}, + {file = "sqlalchemy-2.0.35.tar.gz", hash = "sha256:e11d7ea4d24f0a262bccf9a7cd6284c976c5369dac21db237cff59586045ab9f"}, ] [[package]] @@ -2906,7 +2913,7 @@ files = [ [[package]] name = "starlette" -version = "0.38.2" +version = "0.39.2" requires_python = ">=3.8" summary = "The little ASGI library that shines." groups = ["dev", "doc"] @@ -2915,31 +2922,31 @@ dependencies = [ "typing-extensions>=3.10.0; python_version < \"3.10\"", ] files = [ - {file = "starlette-0.38.2-py3-none-any.whl", hash = "sha256:4ec6a59df6bbafdab5f567754481657f7ed90dc9d69b0c9ff017907dd54faeff"}, - {file = "starlette-0.38.2.tar.gz", hash = "sha256:c7c0441065252160993a1a37cf2a73bb64d271b17303e0b0c1eb7191cfb12d75"}, + {file = "starlette-0.39.2-py3-none-any.whl", hash = "sha256:134dd6deb655a9775991d352312d53f1879775e5cc8a481f966e83416a2c3f71"}, + {file = "starlette-0.39.2.tar.gz", hash = "sha256:caaa3b87ef8518ef913dac4f073dea44e85f73343ad2bdc17941931835b2a26a"}, ] [[package]] name = "statsmodels" -version = "0.14.2" +version = "0.14.3" requires_python = ">=3.9" summary = "Statistical computations and models for Python" groups = ["default"] dependencies = [ - "numpy>=1.22.3", + "numpy<3,>=1.22.3", "packaging>=21.3", "pandas!=2.1.0,>=1.4", "patsy>=0.5.6", "scipy!=1.9.2,>=1.8", ] files = [ - {file = "statsmodels-0.14.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:df5d6f95c46f0341da6c79ee7617e025bf2b371e190a8e60af1ae9cabbdb7a97"}, - {file = "statsmodels-0.14.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a87ef21fadb445b650f327340dde703f13aec1540f3d497afb66324499dea97a"}, - {file = "statsmodels-0.14.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5827a12e3ede2b98a784476d61d6bec43011fedb64aa815f2098e0573bece257"}, - {file = "statsmodels-0.14.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:10f2b7611a61adb7d596a6d239abdf1a4d5492b931b00d5ed23d32844d40e48e"}, - {file = "statsmodels-0.14.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c254c66142f1167b4c7d031cf8db55294cc62ff3280e090fc45bd10a7f5fd029"}, - {file = "statsmodels-0.14.2-cp310-cp310-win_amd64.whl", hash = "sha256:0e46e9d59293c1af4cc1f4e5248f17e7e7bc596bfce44d327c789ac27f09111b"}, - {file = "statsmodels-0.14.2.tar.gz", hash = "sha256:890550147ad3a81cda24f0ba1a5c4021adc1601080bd00e191ae7cd6feecd6ad"}, + {file = "statsmodels-0.14.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7372c92f18b8afb06355e067285abb94e8b214afd9f2fda6d3c26f3ea004cbdf"}, + {file = "statsmodels-0.14.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:42459cdaafe217f455e6b95c05d9e089caf02dd53295aebe63bc1e0206f83176"}, + {file = "statsmodels-0.14.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6a72d3d9fe61f70baf18667bc9cf2e68b6bdd8f5cce4f7b21f9e662e19d2ffdf"}, + {file = "statsmodels-0.14.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9050e5817f23a5adcb87822406b5260758795c42c41fa2fa60816023f0a0d8ef"}, + {file = "statsmodels-0.14.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:f12d74743936323165dae648f75193ee4a47381a85610be661d34de56c7634e0"}, + {file = "statsmodels-0.14.3-cp310-cp310-win_amd64.whl", hash = "sha256:53212f597747534bed475bbd89f4bc39a3757c20692bb7664021e30fbd967c53"}, + {file = "statsmodels-0.14.3.tar.gz", hash = "sha256:ecf3502643fa93aabe5f0bdf238efb59609517c4d60a811632d31fcdce86c2d2"}, ] [[package]] @@ -2966,16 +2973,16 @@ files = [ [[package]] name = "tifffile" -version = "2024.8.10" -requires_python = ">=3.9" +version = "2024.9.20" +requires_python = ">=3.10" summary = "Read and write TIFF files" groups = ["default"] dependencies = [ "numpy", ] files = [ - {file = "tifffile-2024.8.10-py3-none-any.whl", hash = "sha256:1c224564fa92e7e9f9a0ed65880b2ece97c3f0d10029ffbebfa5e62b3f6b343d"}, - {file = "tifffile-2024.8.10.tar.gz", hash = "sha256:fdc12124f1478a07b1524641dc6b50cf6bde0483011a63fd2a773094090c3dcf"}, + {file = "tifffile-2024.9.20-py3-none-any.whl", hash = "sha256:c54dc85bc1065d972cb8a6ffb3181389d597876aa80177933459733e4ed243dd"}, + {file = "tifffile-2024.9.20.tar.gz", hash = "sha256:3fbf3be2f995a7051a8ae05a4be70c96fc0789f22ed6f1c4104c973cf68a640b"}, ] [[package]] @@ -3084,29 +3091,29 @@ files = [ [[package]] name = "types-python-dateutil" -version = "2.9.0.20240316" +version = "2.9.0.20240906" requires_python = ">=3.8" summary = "Typing stubs for python-dateutil" groups = ["dev", "typing"] files = [ - {file = "types-python-dateutil-2.9.0.20240316.tar.gz", hash = "sha256:5d2f2e240b86905e40944dd787db6da9263f0deabef1076ddaed797351ec0202"}, - {file = "types_python_dateutil-2.9.0.20240316-py3-none-any.whl", hash = "sha256:6b8cb66d960771ce5ff974e9dd45e38facb81718cc1e208b10b1baccbfdbee3b"}, + {file = "types-python-dateutil-2.9.0.20240906.tar.gz", hash = "sha256:9706c3b68284c25adffc47319ecc7947e5bb86b3773f843c73906fd598bc176e"}, + {file = "types_python_dateutil-2.9.0.20240906-py3-none-any.whl", hash = "sha256:27c8cc2d058ccb14946eebcaaa503088f4f6dbc4fb6093d3d456a49aef2753f6"}, ] [[package]] name = "types-pyyaml" -version = "6.0.12.20240808" +version = "6.0.12.20240917" requires_python = ">=3.8" summary = "Typing stubs for PyYAML" groups = ["dev", "typing"] files = [ - {file = "types-PyYAML-6.0.12.20240808.tar.gz", hash = "sha256:b8f76ddbd7f65440a8bda5526a9607e4c7a322dc2f8e1a8c405644f9a6f4b9af"}, - {file = "types_PyYAML-6.0.12.20240808-py3-none-any.whl", hash = "sha256:deda34c5c655265fc517b546c902aa6eed2ef8d3e921e4765fe606fe2afe8d35"}, + {file = "types-PyYAML-6.0.12.20240917.tar.gz", hash = "sha256:d1405a86f9576682234ef83bcb4e6fff7c9305c8b1fbad5e0bcd4f7dbdc9c587"}, + {file = "types_PyYAML-6.0.12.20240917-py3-none-any.whl", hash = "sha256:392b267f1c0fe6022952462bf5d6523f31e37f6cea49b14cee7ad634b6301570"}, ] [[package]] name = "types-requests" -version = "2.32.0.20240712" +version = "2.32.0.20240914" requires_python = ">=3.8" summary = "Typing stubs for requests" groups = ["dev", "typing"] @@ -3114,8 +3121,8 @@ dependencies = [ "urllib3>=2", ] files = [ - {file = "types-requests-2.32.0.20240712.tar.gz", hash = "sha256:90c079ff05e549f6bf50e02e910210b98b8ff1ebdd18e19c873cd237737c1358"}, - {file = "types_requests-2.32.0.20240712-py3-none-any.whl", hash = "sha256:f754283e152c752e46e70942fa2a146b5bc70393522257bb85bd1ef7e019dcc3"}, + {file = "types-requests-2.32.0.20240914.tar.gz", hash = "sha256:2850e178db3919d9bf809e434eef65ba49d0e7e33ac92d588f4a5e295fffd405"}, + {file = "types_requests-2.32.0.20240914-py3-none-any.whl", hash = "sha256:59c2f673eb55f32a99b2894faf6020e1a9f4a402ad0f192bfee0b64469054310"}, ] [[package]] @@ -3131,29 +3138,29 @@ files = [ [[package]] name = "tzdata" -version = "2024.1" +version = "2024.2" requires_python = ">=2" summary = "Provider of IANA time zone data" groups = ["default"] files = [ - {file = "tzdata-2024.1-py2.py3-none-any.whl", hash = "sha256:9068bc196136463f5245e51efda838afa15aaeca9903f49050dfa2679db4d252"}, - {file = "tzdata-2024.1.tar.gz", hash = "sha256:2674120f8d891909751c38abcdfd386ac0a5a1127954fbc332af6b5ceae07efd"}, + {file = "tzdata-2024.2-py2.py3-none-any.whl", hash = "sha256:a48093786cdcde33cad18c2555e8532f34422074448fbc874186f0abd79565cd"}, + {file = "tzdata-2024.2.tar.gz", hash = "sha256:7d85cc416e9382e69095b7bdf4afd9e3880418a2413feec7069d533d6b4e31cc"}, ] [[package]] name = "urllib3" -version = "2.2.2" +version = "2.2.3" requires_python = ">=3.8" summary = "HTTP library with thread-safe connection pooling, file post, and more." groups = ["default", "dev", "doc", "typing"] files = [ - {file = "urllib3-2.2.2-py3-none-any.whl", hash = "sha256:a448b2f64d686155468037e1ace9f2d2199776e17f0a46610480d311f73e3472"}, - {file = "urllib3-2.2.2.tar.gz", hash = "sha256:dd505485549a7a552833da5e6063639d0d177c04f23bc3864e41e5dc5f612168"}, + {file = "urllib3-2.2.3-py3-none-any.whl", hash = "sha256:ca899ca043dcb1bafa3e262d73aa25c465bfb49e0bd9dd5d59f1d0acba2f8fac"}, + {file = "urllib3-2.2.3.tar.gz", hash = "sha256:e7d814a81dad81e6caf2ec9fdedb284ecc9c73076b62654547cc64ccdcae26e9"}, ] [[package]] name = "uvicorn" -version = "0.30.6" +version = "0.31.0" requires_python = ">=3.8" summary = "The lightning-fast ASGI server." groups = ["dev", "doc"] @@ -3163,13 +3170,13 @@ dependencies = [ "typing-extensions>=4.0; python_version < \"3.11\"", ] files = [ - {file = "uvicorn-0.30.6-py3-none-any.whl", hash = "sha256:65fd46fe3fda5bdc1b03b94eb634923ff18cd35b2f084813ea79d1f103f711b5"}, - {file = "uvicorn-0.30.6.tar.gz", hash = "sha256:4b15decdda1e72be08209e860a1e10e92439ad5b97cf44cc945fcbee66fc5788"}, + {file = "uvicorn-0.31.0-py3-none-any.whl", hash = "sha256:cac7be4dd4d891c363cd942160a7b02e69150dcbc7a36be04d5f4af4b17c8ced"}, + {file = "uvicorn-0.31.0.tar.gz", hash = "sha256:13bc21373d103859f68fe739608e2eb054a816dea79189bc3ca08ea89a275906"}, ] [[package]] name = "watchfiles" -version = "0.23.0" +version = "0.24.0" requires_python = ">=3.8" summary = "Simple, modern and high performance file watching and code reload in python." groups = ["dev", "doc"] @@ -3177,23 +3184,23 @@ dependencies = [ "anyio>=3.0.0", ] files = [ - {file = "watchfiles-0.23.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:bee8ce357a05c20db04f46c22be2d1a2c6a8ed365b325d08af94358e0688eeb4"}, - {file = "watchfiles-0.23.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:4ccd3011cc7ee2f789af9ebe04745436371d36afe610028921cab9f24bb2987b"}, - {file = "watchfiles-0.23.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb02d41c33be667e6135e6686f1bb76104c88a312a18faa0ef0262b5bf7f1a0f"}, - {file = "watchfiles-0.23.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7cf12ac34c444362f3261fb3ff548f0037ddd4c5bb85f66c4be30d2936beb3c5"}, - {file = "watchfiles-0.23.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a0b2c25040a3c0ce0e66c7779cc045fdfbbb8d59e5aabfe033000b42fe44b53e"}, - {file = "watchfiles-0.23.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ecf2be4b9eece4f3da8ba5f244b9e51932ebc441c0867bd6af46a3d97eb068d6"}, - {file = "watchfiles-0.23.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:40cb8fa00028908211eb9f8d47744dca21a4be6766672e1ff3280bee320436f1"}, - {file = "watchfiles-0.23.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f48c917ffd36ff9a5212614c2d0d585fa8b064ca7e66206fb5c095015bc8207"}, - {file = "watchfiles-0.23.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:9d183e3888ada88185ab17064079c0db8c17e32023f5c278d7bf8014713b1b5b"}, - {file = "watchfiles-0.23.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:9837edf328b2805346f91209b7e660f65fb0e9ca18b7459d075d58db082bf981"}, - {file = "watchfiles-0.23.0-cp310-none-win32.whl", hash = "sha256:296e0b29ab0276ca59d82d2da22cbbdb39a23eed94cca69aed274595fb3dfe42"}, - {file = "watchfiles-0.23.0-cp310-none-win_amd64.whl", hash = "sha256:4ea756e425ab2dfc8ef2a0cb87af8aa7ef7dfc6fc46c6f89bcf382121d4fff75"}, - {file = "watchfiles-0.23.0-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:6a9265cf87a5b70147bfb2fec14770ed5b11a5bb83353f0eee1c25a81af5abfe"}, - {file = "watchfiles-0.23.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:9f02a259fcbbb5fcfe7a0805b1097ead5ba7a043e318eef1db59f93067f0b49b"}, - {file = "watchfiles-0.23.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1ebaebb53b34690da0936c256c1cdb0914f24fb0e03da76d185806df9328abed"}, - {file = "watchfiles-0.23.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd257f98cff9c6cb39eee1a83c7c3183970d8a8d23e8cf4f47d9a21329285cee"}, - {file = "watchfiles-0.23.0.tar.gz", hash = "sha256:9338ade39ff24f8086bb005d16c29f8e9f19e55b18dcb04dfa26fcbc09da497b"}, + {file = "watchfiles-0.24.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:083dc77dbdeef09fa44bb0f4d1df571d2e12d8a8f985dccde71ac3ac9ac067a0"}, + {file = "watchfiles-0.24.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e94e98c7cb94cfa6e071d401ea3342767f28eb5a06a58fafdc0d2a4974f4f35c"}, + {file = "watchfiles-0.24.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:82ae557a8c037c42a6ef26c494d0631cacca040934b101d001100ed93d43f361"}, + {file = "watchfiles-0.24.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:acbfa31e315a8f14fe33e3542cbcafc55703b8f5dcbb7c1eecd30f141df50db3"}, + {file = "watchfiles-0.24.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b74fdffce9dfcf2dc296dec8743e5b0332d15df19ae464f0e249aa871fc1c571"}, + {file = "watchfiles-0.24.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:449f43f49c8ddca87c6b3980c9284cab6bd1f5c9d9a2b00012adaaccd5e7decd"}, + {file = "watchfiles-0.24.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4abf4ad269856618f82dee296ac66b0cd1d71450fc3c98532d93798e73399b7a"}, + {file = "watchfiles-0.24.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9f895d785eb6164678ff4bb5cc60c5996b3ee6df3edb28dcdeba86a13ea0465e"}, + {file = "watchfiles-0.24.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:7ae3e208b31be8ce7f4c2c0034f33406dd24fbce3467f77223d10cd86778471c"}, + {file = "watchfiles-0.24.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:2efec17819b0046dde35d13fb8ac7a3ad877af41ae4640f4109d9154ed30a188"}, + {file = "watchfiles-0.24.0-cp310-none-win32.whl", hash = "sha256:6bdcfa3cd6fdbdd1a068a52820f46a815401cbc2cb187dd006cb076675e7b735"}, + {file = "watchfiles-0.24.0-cp310-none-win_amd64.whl", hash = "sha256:54ca90a9ae6597ae6dc00e7ed0a040ef723f84ec517d3e7ce13e63e4bc82fa04"}, + {file = "watchfiles-0.24.0-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:632676574429bee8c26be8af52af20e0c718cc7f5f67f3fb658c71928ccd4f7f"}, + {file = "watchfiles-0.24.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:a2a9891723a735d3e2540651184be6fd5b96880c08ffe1a98bae5017e65b544b"}, + {file = "watchfiles-0.24.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4a7fa2bc0efef3e209a8199fd111b8969fe9db9c711acc46636686331eda7dd4"}, + {file = "watchfiles-0.24.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:01550ccf1d0aed6ea375ef259706af76ad009ef5b0203a3a4cce0f6024f9b68a"}, + {file = "watchfiles-0.24.0.tar.gz", hash = "sha256:afb72325b74fa7a428c009c1b8be4b4d7c2afedafb2982827ef2156646df2fe1"}, ] [[package]] @@ -3242,29 +3249,30 @@ files = [ [[package]] name = "websockets" -version = "12.0" +version = "13.1" requires_python = ">=3.8" summary = "An implementation of the WebSocket Protocol (RFC 6455 & 7692)" groups = ["dev", "doc"] files = [ - {file = "websockets-12.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d554236b2a2006e0ce16315c16eaa0d628dab009c33b63ea03f41c6107958374"}, - {file = "websockets-12.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2d225bb6886591b1746b17c0573e29804619c8f755b5598d875bb4235ea639be"}, - {file = "websockets-12.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:eb809e816916a3b210bed3c82fb88eaf16e8afcf9c115ebb2bacede1797d2547"}, - {file = "websockets-12.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c588f6abc13f78a67044c6b1273a99e1cf31038ad51815b3b016ce699f0d75c2"}, - {file = "websockets-12.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5aa9348186d79a5f232115ed3fa9020eab66d6c3437d72f9d2c8ac0c6858c558"}, - {file = "websockets-12.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6350b14a40c95ddd53e775dbdbbbc59b124a5c8ecd6fbb09c2e52029f7a9f480"}, - {file = "websockets-12.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:70ec754cc2a769bcd218ed8d7209055667b30860ffecb8633a834dde27d6307c"}, - {file = "websockets-12.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:6e96f5ed1b83a8ddb07909b45bd94833b0710f738115751cdaa9da1fb0cb66e8"}, - {file = "websockets-12.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:4d87be612cbef86f994178d5186add3d94e9f31cc3cb499a0482b866ec477603"}, - {file = "websockets-12.0-cp310-cp310-win32.whl", hash = "sha256:befe90632d66caaf72e8b2ed4d7f02b348913813c8b0a32fae1cc5fe3730902f"}, - {file = "websockets-12.0-cp310-cp310-win_amd64.whl", hash = "sha256:363f57ca8bc8576195d0540c648aa58ac18cf85b76ad5202b9f976918f4219cf"}, - {file = "websockets-12.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:248d8e2446e13c1d4326e0a6a4e9629cb13a11195051a73acf414812700badbd"}, - {file = "websockets-12.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f44069528d45a933997a6fef143030d8ca8042f0dfaad753e2906398290e2870"}, - {file = "websockets-12.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c4e37d36f0d19f0a4413d3e18c0d03d0c268ada2061868c1e6f5ab1a6d575077"}, - {file = "websockets-12.0-pp310-pypy310_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3d829f975fc2e527a3ef2f9c8f25e553eb7bc779c6665e8e1d52aa22800bb38b"}, - {file = "websockets-12.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:2c71bd45a777433dd9113847af751aae36e448bc6b8c361a566cb043eda6ec30"}, - {file = "websockets-12.0-py3-none-any.whl", hash = "sha256:dc284bbc8d7c78a6c69e0c7325ab46ee5e40bb4d50e494d8131a07ef47500e9e"}, - {file = "websockets-12.0.tar.gz", hash = "sha256:81df9cbcbb6c260de1e007e58c011bfebe2dafc8435107b0537f393dd38c8b1b"}, + {file = "websockets-13.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:f48c749857f8fb598fb890a75f540e3221d0976ed0bf879cf3c7eef34151acee"}, + {file = "websockets-13.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c7e72ce6bda6fb9409cc1e8164dd41d7c91466fb599eb047cfda72fe758a34a7"}, + {file = "websockets-13.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f779498eeec470295a2b1a5d97aa1bc9814ecd25e1eb637bd9d1c73a327387f6"}, + {file = "websockets-13.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4676df3fe46956fbb0437d8800cd5f2b6d41143b6e7e842e60554398432cf29b"}, + {file = "websockets-13.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a7affedeb43a70351bb811dadf49493c9cfd1ed94c9c70095fd177e9cc1541fa"}, + {file = "websockets-13.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1971e62d2caa443e57588e1d82d15f663b29ff9dfe7446d9964a4b6f12c1e700"}, + {file = "websockets-13.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:5f2e75431f8dc4a47f31565a6e1355fb4f2ecaa99d6b89737527ea917066e26c"}, + {file = "websockets-13.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:58cf7e75dbf7e566088b07e36ea2e3e2bd5676e22216e4cad108d4df4a7402a0"}, + {file = "websockets-13.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:c90d6dec6be2c7d03378a574de87af9b1efea77d0c52a8301dd831ece938452f"}, + {file = "websockets-13.1-cp310-cp310-win32.whl", hash = "sha256:730f42125ccb14602f455155084f978bd9e8e57e89b569b4d7f0f0c17a448ffe"}, + {file = "websockets-13.1-cp310-cp310-win_amd64.whl", hash = "sha256:5993260f483d05a9737073be197371940c01b257cc45ae3f1d5d7adb371b266a"}, + {file = "websockets-13.1-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:5dd6da9bec02735931fccec99d97c29f47cc61f644264eb995ad6c0c27667238"}, + {file = "websockets-13.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:2510c09d8e8df777177ee3d40cd35450dc169a81e747455cc4197e63f7e7bfe5"}, + {file = "websockets-13.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f1c3cf67185543730888b20682fb186fc8d0fa6f07ccc3ef4390831ab4b388d9"}, + {file = "websockets-13.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bcc03c8b72267e97b49149e4863d57c2d77f13fae12066622dc78fe322490fe6"}, + {file = "websockets-13.1-pp310-pypy310_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:004280a140f220c812e65f36944a9ca92d766b6cc4560be652a0a3883a79ed8a"}, + {file = "websockets-13.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:e2620453c075abeb0daa949a292e19f56de518988e079c36478bacf9546ced23"}, + {file = "websockets-13.1-py3-none-any.whl", hash = "sha256:a9a396a6ad26130cdae92ae10c36af09d9bfe6cafe69670fd3b6da9b07b4044f"}, + {file = "websockets-13.1.tar.gz", hash = "sha256:a3b3366087c1bc0a2795111edcadddb8b3b59509d5db5d7ea3fdd69f954a8878"}, ] [[package]] @@ -3280,13 +3288,13 @@ files = [ [[package]] name = "zipp" -version = "3.20.0" +version = "3.20.2" requires_python = ">=3.8" summary = "Backport of pathlib-compatible object wrapper for zip files" groups = ["default", "dev", "doc"] files = [ - {file = "zipp-3.20.0-py3-none-any.whl", hash = "sha256:58da6168be89f0be59beb194da1250516fdaa062ccebd30127ac65d30045e10d"}, - {file = "zipp-3.20.0.tar.gz", hash = "sha256:0145e43d89664cfe1a2e533adc75adafed82fe2da404b4bbb6b026c0157bdb31"}, + {file = "zipp-3.20.2-py3-none-any.whl", hash = "sha256:a817ac80d6cf4b23bf7f2828b7cabf326f15a001bea8b1f9b49631780ba28350"}, + {file = "zipp-3.20.2.tar.gz", hash = "sha256:bc9eb26f4506fda01b81bcde0ca78103b6e62f991b381fec825435c836edbc29"}, ] [[package]] diff --git a/pyproject.toml b/pyproject.toml index f3a0714f5..9a0e613c6 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -42,7 +42,7 @@ dependencies = [ "PyYAML>=6.0.2", "scipy>=1.14.0", "sounddevice>=0.5.0", - "iblqt>=0.1.0", + "iblqt>=0.1.1", ] [project.optional-dependencies] project-extraction = [ From 5ef3d09e3dbb513da5d75b156256682ac24cef7e Mon Sep 17 00:00:00 2001 From: GaelleChapuis Date: Thu, 3 Oct 2024 11:30:04 +0200 Subject: [PATCH 3/8] Doc for placing mouse onto previous Training Phase --- docs/source/faq.rst | 29 ++++++++++++++++++ .../img/training_phase_manual_update.png | Bin 0 -> 164193 bytes 2 files changed, 29 insertions(+) create mode 100644 docs/source/img/training_phase_manual_update.png diff --git a/docs/source/faq.rst b/docs/source/faq.rst index 8a98a9134..5138b23bc 100644 --- a/docs/source/faq.rst +++ b/docs/source/faq.rst @@ -121,3 +121,32 @@ Frame2TTL Look for a voltage step in Frame2TTL's output when the calibration routine switches from dark to light. #. If you *do* see the change in the TTL signal, the Bpod might be faulty. Try using a different Bpod unit. #. If you do *not* see the voltage step, the Frame2TTL might be faulty. Try using a different Frame2TTL unit. + + +Move a mouse onto a previous training stage +=========================================== +Training phases enfold according to an automated procedure, see the `mouse training protocol on Figshare `_ for a description of these phases. + +However, it is possible that one wants to overwrite the automated progression, and bring back an animal onto a previous +training stage. + +In this case: + +1. Select the training protocol on the GUI +2. Select the wanted training phase manually + + + .. figure:: img/training_phase_manual_update.png + :width: 100% + :class: with-border + + Select the training phase manually using the arrows. + +On the next day of training, the "automatic" criteria will be computed assuming the training phase last used, i.e. +the one you manually selected in this instance. + +For example, if you have a mouse on Training Phase 5, and move it manually to Phase 4 (which can be useful when +trying to debias an animal), the next session on "automatic" mode will compute the stage progression from stage 4, +and disregard the fact that the mouse was on Phase 5 beforehand. diff --git a/docs/source/img/training_phase_manual_update.png b/docs/source/img/training_phase_manual_update.png new file mode 100644 index 0000000000000000000000000000000000000000..8d88207bbabaca9106cab27392230908f43b851e GIT binary patch literal 164193 zcmZ^}1$dl0&Ndusn3)+GX3m6}xq*h68)jx^W^NdpG-;TjVP@u}VWw}|b9VRa{_j6? z&GmR}%a(0DvUE$~it-W&u(+@wARq`*lA_8WAYg?cAP@@BkiZ(+;lm0L5O_fg5fMcx z5fNfV2Rl;>YZDL<$?)V)P#P-3m^s?YB>51?ai|_>qD2sKsKRi>?a&3N2_X4>*w8dC zPD(LR|`hTu66_YJq?#jcdy?#0@c53QE9&2f6vITbs(Lrrvf(#w=<*=cFJedr!!ab%d2Cl=^HE0l{g6DMyEpjs26@YBBh1ujsLm0O3 z)4oDw|Ln9VL9)DZOAplG#u6ieinyX^X)Aj-<9Tx(9!*Ags0~pA$l&7A=Cb}=smco9 za;QYKkL3cez#7_w34}qwdWI=krqHnoS;XRAUUM^<2_hMqfig1T8MFS0g(`eD%Xas^jm23wji?r^%F?4zHupGuH`8>Q%oya8nM}YpH>%&w^-@es@lZ ztC$`<6w|zvLRKMZqC=+;7nTiOq!yrJ_-w*j{xK4bTc0ese`KdQh)ew=B8=j(Q83Q* zrbe>2h3;FISDl6 zhI}p(`QmFKWn|uj92OX!(Z5;DqV8;3<8?hQ!QC*s_hi2=;obc(Hz;d^L2wVE*D}iaoyz zDh+b!A?tA#hT6J=P^!Br{U{NL_?4(~MC>WHrK>8x1dq_~S57#dr5^)vyCcN<6nK7?d~{`3Il5XBejCV|+Zm6E`DqJ z0$-sdx~0BAeuhZxcK(7@og;q%b`#*b$r?aR9u&fa4Bm%cCybAb6%_nHDkKSk8c9xO zAxTLpZam~<%%B`XCoxZw8E3ba6ICr#F{xut;DOp6rYpfaiDga%$;2*;#M+C`j5*L

W6no@mHg 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℘gXpN#zxEKl`n*!u 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 z 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 W3)4OIi#}`vHr%n}sB#<6#J>S`Q;IPF literal 0 HcmV?d00001 From a23ddb7c9bb72eff373056957b0cb0a339c4eeb3 Mon Sep 17 00:00:00 2001 From: GaelleChapuis Date: Thu, 3 Oct 2024 11:33:00 +0200 Subject: [PATCH 4/8] Developper documentation building update --- docs/source/reference_developer_guide.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/reference_developer_guide.rst b/docs/source/reference_developer_guide.rst index a5a6e24db..87e7027f3 100644 --- a/docs/source/reference_developer_guide.rst +++ b/docs/source/reference_developer_guide.rst @@ -139,4 +139,4 @@ To write the documentation: To release the documentation onto the `website `_: * Wait for the next release, or -* Manually trigger the GitHub action by clicking "Run Workflow" (select ``master``) `here `_ +* Manually trigger the GitHub action by clicking "Run Workflow" (select ``iblrigv8dev``) `here `_ From d89bb2c3d537d61bab93339acbb49bd8fc76433e Mon Sep 17 00:00:00 2001 From: Miles Wells Date: Fri, 4 Oct 2024 11:28:32 +0300 Subject: [PATCH 5/8] HOTFIX resolves #379 --- iblrig/__init__.py | 2 +- iblrig/test/test_hardware_mixins.py | 4 +-- iblrig/test/test_transfers.py | 49 +++++++++++++++++++++++++++++ iblrig/transfer_experiments.py | 3 +- 4 files changed, 54 insertions(+), 4 deletions(-) diff --git a/iblrig/__init__.py b/iblrig/__init__.py index 60f029c22..a7fb4293c 100644 --- a/iblrig/__init__.py +++ b/iblrig/__init__.py @@ -6,7 +6,7 @@ # 5) git tag the release in accordance to the version number below (after merge!) # >>> git tag 8.15.6 # >>> git push origin --tags -__version__ = '8.24.2' +__version__ = '8.24.3' from iblrig.version_management import get_detailed_version_string diff --git a/iblrig/test/test_hardware_mixins.py b/iblrig/test/test_hardware_mixins.py index f89d7bb5a..10a40452d 100644 --- a/iblrig/test/test_hardware_mixins.py +++ b/iblrig/test/test_hardware_mixins.py @@ -103,12 +103,12 @@ def test_rotary_encoder_mixin(self): """ session = self.session RotaryEncoderMixin.init_mixin_rotary_encoder(session) - assert session.device_rotary_encoder.ENCODER_EVENTS == [ + assert [ 'RotaryEncoder1_1', 'RotaryEncoder1_2', 'RotaryEncoder1_3', 'RotaryEncoder1_4', - ] + ] == session.device_rotary_encoder.ENCODER_EVENTS assert { -35: 'RotaryEncoder1_1', 35: 'RotaryEncoder1_2', diff --git a/iblrig/test/test_transfers.py b/iblrig/test/test_transfers.py index 4a82be0f6..a85085d5d 100644 --- a/iblrig/test/test_transfers.py +++ b/iblrig/test/test_transfers.py @@ -6,6 +6,9 @@ from pathlib import Path from unittest import mock +from packaging import version + +import ibllib import iblrig.commands import iblrig.path_helper import iblrig.raw_data_loaders @@ -228,6 +231,52 @@ def test_behavior_ephys_video_copy(self): self.assertEqual(set(final_experiment_description['devices']['cameras'].keys()), {'left'}) self.assertEqual(set(final_experiment_description['sync'].keys()), {'nidq'}) + # Requires recent change to ibllib test fixture code supporting no probe ephys recording files + @unittest.skipIf(version.parse(ibllib.__version__) < version.parse('2.39')) + def test_ephys_no_probe(self): + """Test copying a session at ephys rig when no probes were used (DAQ only).""" + # First create a behavior session + task_kwargs = copy.deepcopy(self.session_kwargs) + task_kwargs['hardware_settings'].update( + { + 'device_cameras': None, + 'MAIN_SYNC': False, # this is quite important for ephys sessions + } + ) + session = _create_behavior_session(kwargs=task_kwargs, ntrials=50) + folder_session_ephys = Path(self.td.name).joinpath('ephys', 'Subjects', *session.paths.SESSION_FOLDER.parts[-3:]) + + # Create an ephys acquisition + n_probes = 0 + # SpikeGLX then saves these files into the session folder + populate_raw_spikeglx(folder_session_ephys, model='3B', n_probes=n_probes) + + # Test the copiers + sc = BehaviorCopier(session_path=session.paths.SESSION_FOLDER, remote_subjects_folder=session.paths.REMOTE_SUBJECT_FOLDER) + self.assertEqual('.status_pending', sc.glob_file_remote_copy_status().suffix) + self.assertEqual(1, sc.state) + sc.copy_collections() + self.assertEqual(2, sc.state) + self.assertEqual('.status_complete', sc.glob_file_remote_copy_status().suffix) + sc.copy_collections() + self.assertEqual(2, sc.state) + sc.finalize_copy(number_of_expected_devices=None) + self.assertEqual(2, sc.state) # here we still don't have all devices so we stay in state 2 + + ec = EphysCopier(session_path=folder_session_ephys, remote_subjects_folder=session.paths.REMOTE_SUBJECT_FOLDER) + self.assertEqual(0, ec.state) + ec.initialize_experiment() + self.assertEqual(1, ec.state) + self.assertIn('sync', ec.experiment_description) + ec.copy_collections() + self.assertEqual(2, ec.state) + # this time it's all there and we move on + ec.finalize_copy(number_of_expected_devices=None) + self.assertEqual(3, ec.state) + final_experiment_description = session_params.read_params(ec.remote_session_path) + self.assertEqual(1, len(final_experiment_description['tasks'])) + self.assertEqual(set(final_experiment_description['sync'].keys()), {'nidq'}) + def test_copy_snapshots(self): """Test copy of snapshots folder(s).""" # Create without task data diff --git a/iblrig/transfer_experiments.py b/iblrig/transfer_experiments.py index 97f8fdcef..c4d3ef266 100644 --- a/iblrig/transfer_experiments.py +++ b/iblrig/transfer_experiments.py @@ -553,8 +553,9 @@ def initialize_experiment(self, acquisition_description=None, nprobes=None, main self._experiment_description = acquisition_description super().initialize_experiment(acquisition_description=acquisition_description, **kwargs) # once the session folders have been initialized, create the probe folders + (ephys_path := self.session_path.joinpath('raw_ephys_data')).mkdir(exist_ok=True) for n in range(nprobes): - self.session_path.joinpath('raw_ephys_data', f'probe{n:02}').mkdir(exist_ok=True, parents=True) + ephys_path.joinpath(f'probe{n:02}').mkdir(exist_ok=True) def _copy_collections(self): """Here we overload the copy to be able to rename the probes properly and also create the insertions.""" From 66051a9dc666169a79fd1d63f3df2b3f7c227a24 Mon Sep 17 00:00:00 2001 From: Florian Rau Date: Fri, 4 Oct 2024 10:13:57 +0100 Subject: [PATCH 6/8] SIM910 / SIM300 --- iblrig/base_tasks.py | 2 +- iblrig/test/test_hardware_mixins.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/iblrig/base_tasks.py b/iblrig/base_tasks.py index 0833b3955..d2a11c311 100644 --- a/iblrig/base_tasks.py +++ b/iblrig/base_tasks.py @@ -1215,7 +1215,7 @@ def __init__(self, *_, remote_rigs=None, **kwargs): if isinstance(remote_rigs, list): # For now we flatten to list of remote rig names but could permit list of (name, URI) tuples remote_rigs = list(filter(None, flatten(remote_rigs))) - all_remote_rigs = net.get_remote_devices(iblrig_settings=kwargs.get('iblrig_settings', None)) + all_remote_rigs = net.get_remote_devices(iblrig_settings=kwargs.get('iblrig_settings')) if not set(remote_rigs).issubset(all_remote_rigs.keys()): raise ValueError('Selected remote rigs not in remote rigs list') remote_rigs = {k: v for k, v in all_remote_rigs.items() if k in remote_rigs} diff --git a/iblrig/test/test_hardware_mixins.py b/iblrig/test/test_hardware_mixins.py index 10a40452d..f89d7bb5a 100644 --- a/iblrig/test/test_hardware_mixins.py +++ b/iblrig/test/test_hardware_mixins.py @@ -103,12 +103,12 @@ def test_rotary_encoder_mixin(self): """ session = self.session RotaryEncoderMixin.init_mixin_rotary_encoder(session) - assert [ + assert session.device_rotary_encoder.ENCODER_EVENTS == [ 'RotaryEncoder1_1', 'RotaryEncoder1_2', 'RotaryEncoder1_3', 'RotaryEncoder1_4', - ] == session.device_rotary_encoder.ENCODER_EVENTS + ] assert { -35: 'RotaryEncoder1_1', 35: 'RotaryEncoder1_2', From 8e4cc6b9ec73e836da6340a46727c0388db54b83 Mon Sep 17 00:00:00 2001 From: Florian Rau Date: Fri, 4 Oct 2024 10:24:10 +0100 Subject: [PATCH 7/8] more yoda / fix test / changelog --- CHANGELOG.md | 4 ++++ iblrig/test/test_hardware_mixins.py | 4 ++-- iblrig/test/test_transfers.py | 2 +- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 451f27a27..962050828 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,10 @@ Changelog ========= +8.24.2 +------ +* fix: create the `raw_ephys_data` folder even if there are no probes (when running behavior sessions on ephys rig) + 8.24.2 ------ * make Frame2TTL validation more robust diff --git a/iblrig/test/test_hardware_mixins.py b/iblrig/test/test_hardware_mixins.py index f89d7bb5a..1fcfae39f 100644 --- a/iblrig/test/test_hardware_mixins.py +++ b/iblrig/test/test_hardware_mixins.py @@ -109,12 +109,12 @@ def test_rotary_encoder_mixin(self): 'RotaryEncoder1_3', 'RotaryEncoder1_4', ] - assert { + assert session.device_rotary_encoder.THRESHOLD_EVENTS == { -35: 'RotaryEncoder1_1', 35: 'RotaryEncoder1_2', -2: 'RotaryEncoder1_3', 2: 'RotaryEncoder1_4', - } == session.device_rotary_encoder.THRESHOLD_EVENTS + } with self.assertRaises(ValueError): RotaryEncoderMixin.start_mixin_rotary_encoder(session) diff --git a/iblrig/test/test_transfers.py b/iblrig/test/test_transfers.py index a85085d5d..edfdae5e8 100644 --- a/iblrig/test/test_transfers.py +++ b/iblrig/test/test_transfers.py @@ -232,7 +232,7 @@ def test_behavior_ephys_video_copy(self): self.assertEqual(set(final_experiment_description['sync'].keys()), {'nidq'}) # Requires recent change to ibllib test fixture code supporting no probe ephys recording files - @unittest.skipIf(version.parse(ibllib.__version__) < version.parse('2.39')) + @unittest.skipIf(version.parse(ibllib.__version__) < version.parse('2.39'), 'ibllib < 2.39') def test_ephys_no_probe(self): """Test copying a session at ephys rig when no probes were used (DAQ only).""" # First create a behavior session From d585cdc2b09fef6c0adf2ae7a0247295a932d224 Mon Sep 17 00:00:00 2001 From: Florian Rau Date: Fri, 4 Oct 2024 10:27:48 +0100 Subject: [PATCH 8/8] prepare release --- CHANGELOG.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 962050828..07978501e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,9 +1,10 @@ Changelog ========= -8.24.2 +8.24.3 ------ * fix: create the `raw_ephys_data` folder even if there are no probes (when running behavior sessions on ephys rig) +* move some Qt related code to `iblqt` repository 8.24.2 ------