diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 0c91dd0ce..e7563efbf 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -22,7 +22,7 @@ jobs: - name: Install poetry run: pip install poetry==1.4.2 - name: Install dependencies - run: poetry install --all-extras + run: poetry install --all-extras --with dev - name: Lint with ruff run: | make format_diff diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 0d0f9775b..1ac63449e 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -22,7 +22,7 @@ We use `poetry` as our package manager. You can install poetry by following the Please DO NOT use pip or conda to install the dependencies. Instead, use poetry: ```bash -poetry install --all-extras +poetry install --all-extras --with dev ``` ### 📌 Pre-commit diff --git a/docs/examples.md b/docs/examples.md index f4f004ad6..bb82731a2 100644 --- a/docs/examples.md +++ b/docs/examples.md @@ -114,6 +114,43 @@ print(response) Remember that at the moment, you need to make sure that the Google Sheet is public. +## Working with Modin dataframes + +Example of using PandasAI with a Modin DataFrame. In order to use Modin dataframes as a data source, you need to install the `pandasai[modin]` extra dependency. + +```console +pip install pandasai[modin] +``` + +Then, you can use PandasAI with a Modin DataFrame as follows: + +```python +import pandasai +from pandasai import SmartDataframe +import modin.pandas as pd +from pandasai.llm import OpenAI + +llm = OpenAI(api_token="YOUR_API_TOKEN") + +# You can instantiate a SmartDataframe with a Polars DataFrame + +df = pd.DataFrame({ + "country": ["United States", "United Kingdom", "France", "Germany", "Italy", "Spain", "Canada", "Australia", + "Japan", "China"], + "gdp": [19294482071552, 2891615567872, 2411255037952, 3435817336832, 1745433788416, 1181205135360, 1607402389504, + 1490967855104, 4380756541440, 14631844184064], + "happiness_index": [6.94, 7.16, 6.66, 7.07, 6.38, 6.4, 7.23, 7.22, 5.87, 5.12] +}) + +pandasai.set_pd_engine("modin") +df = SmartDataframe(df, config={"llm": llm}) +response = df.chat("How many loans are from men and have been paid off?") +print(response) + +# you can switch back to pandas using +# pandasai.set_pd_engine("pandas") +``` + ## Working with Polars dataframes Example of using PandasAI with a Polars DataFrame (still in beta). In order to use Polars dataframes as a data source, you need to install the `pandasai[polars]` extra dependency. diff --git a/docs/getting-started.md b/docs/getting-started.md index 3c5b819e6..f9d72f733 100644 --- a/docs/getting-started.md +++ b/docs/getting-started.md @@ -27,6 +27,7 @@ You can replace `extra-dependency-name` with any of the following: - `google-aip`: this extra dependency is required if you want to use Google PaLM as a language model. - `google-sheet`: this extra dependency is required if you want to use Google Sheets as a data source. - `excel`: this extra dependency is required if you want to use Excel files as a data source. +- `modin`: this extra dependency is required if you want to use Modin dataframes as a data source. - `polars`: this extra dependency is required if you want to use Polars dataframes as a data source. - `langchain`: this extra dependency is required if you want to support the LangChain LLMs. - `numpy`: this extra dependency is required if you want to support numpy. diff --git a/pandasai/__init__.py b/pandasai/__init__.py index c64f2c142..3fba900bd 100644 --- a/pandasai/__init__.py +++ b/pandasai/__init__.py @@ -5,6 +5,7 @@ import importlib.metadata from .agent import Agent +from .engine import set_pd_engine from .helpers.cache import Cache from .skills import skill from .smart_dataframe import SmartDataframe @@ -25,4 +26,6 @@ def clear_cache(filename: str = None): "Agent", "clear_cache", "skill", + "set_pd_engine", + "pandas", ] diff --git a/pandasai/connectors/airtable.py b/pandasai/connectors/airtable.py index a21c62dc5..6e3173b69 100644 --- a/pandasai/connectors/airtable.py +++ b/pandasai/connectors/airtable.py @@ -8,9 +8,10 @@ from functools import cache, cached_property from typing import Optional, Union -import pandas as pd import requests +import pandasai.pandas as pd + from ..exceptions import InvalidRequestError from ..helpers.path import find_project_root from .base import AirtableConnectorConfig, BaseConnector, BaseConnectorConfig diff --git a/pandasai/connectors/snowflake.py b/pandasai/connectors/snowflake.py index 21883829e..f2937b014 100644 --- a/pandasai/connectors/snowflake.py +++ b/pandasai/connectors/snowflake.py @@ -5,9 +5,10 @@ from functools import cache from typing import Union -import pandas as pd from sqlalchemy import create_engine +import pandasai.pandas as pd + from .base import BaseConnectorConfig, SnowFlakeConnectorConfig from .sql import SQLConnector diff --git a/pandasai/connectors/sql.py b/pandasai/connectors/sql.py index 32315b327..6572af78d 100644 --- a/pandasai/connectors/sql.py +++ b/pandasai/connectors/sql.py @@ -9,10 +9,10 @@ from functools import cache, cached_property from typing import Union -import pandas as pd from sqlalchemy import asc, create_engine, select, text from sqlalchemy.engine import Connection +import pandasai.pandas as pd from pandasai.exceptions import MaliciousQueryError from ..constants import DEFAULT_FILE_PERMISSIONS diff --git a/pandasai/connectors/yahoo_finance.py b/pandasai/connectors/yahoo_finance.py index d77f9757e..d714331e1 100644 --- a/pandasai/connectors/yahoo_finance.py +++ b/pandasai/connectors/yahoo_finance.py @@ -3,7 +3,7 @@ import time from typing import Optional, Union -import pandas as pd +import pandasai.pandas as pd from ..constants import DEFAULT_FILE_PERMISSIONS from ..helpers.path import find_project_root diff --git a/pandasai/constants.py b/pandasai/constants.py index 97f606611..393921a74 100644 --- a/pandasai/constants.py +++ b/pandasai/constants.py @@ -94,4 +94,5 @@ "base64", "scipy", "streamlit", + "modin", ] diff --git a/pandasai/engine.py b/pandasai/engine.py new file mode 100644 index 000000000..7d9c8ed94 --- /dev/null +++ b/pandasai/engine.py @@ -0,0 +1,24 @@ +import threading +from importlib import reload + +_engine = "pandas" +_lock: threading.RLock = threading.RLock() + + +def set_pd_engine(engine: str = "pandas"): + global _engine + if engine.lower() not in ("modin", "pandas"): + raise ValueError( + f"Unknown engine {engine}. Valid options are ('modin', 'pandas')" + ) + + if engine != _engine: + with _lock: + _engine = engine + _reload_pd() + + +def _reload_pd(): + import pandasai + + reload(pandasai.pandas) diff --git a/pandasai/helpers/anonymizer.py b/pandasai/helpers/anonymizer.py index 384302b00..f69bdb3d7 100644 --- a/pandasai/helpers/anonymizer.py +++ b/pandasai/helpers/anonymizer.py @@ -7,7 +7,7 @@ import re import string -import pandas as pd +import pandasai.pandas as pd class Anonymizer: diff --git a/pandasai/helpers/code_manager.py b/pandasai/helpers/code_manager.py index 7014aab8d..41cbe9078 100644 --- a/pandasai/helpers/code_manager.py +++ b/pandasai/helpers/code_manager.py @@ -7,8 +7,8 @@ from typing import Any, Generator, List, Union import astor -import pandas as pd +import pandasai.pandas as pd from pandasai.helpers.path import find_project_root from pandasai.helpers.skills_manager import SkillsManager from pandasai.helpers.sql import extract_table_names diff --git a/pandasai/helpers/data_sampler.py b/pandasai/helpers/data_sampler.py index 68a1780f2..ed55fb0e1 100644 --- a/pandasai/helpers/data_sampler.py +++ b/pandasai/helpers/data_sampler.py @@ -10,7 +10,8 @@ import random import numpy as np -import pandas as pd + +import pandasai.pandas as pd from .anonymizer import Anonymizer from .df_info import DataFrameType, df_type diff --git a/pandasai/helpers/df_config_manager.py b/pandasai/helpers/df_config_manager.py index 002abfc62..23b6fbd02 100644 --- a/pandasai/helpers/df_config_manager.py +++ b/pandasai/helpers/df_config_manager.py @@ -78,7 +78,7 @@ def _get_import_path(self): # Save df if pandas or polar dataframe_type = df_type(self.original_import) - if dataframe_type == "pandas": + if dataframe_type in ("pandas", "modin"): file_path = self._create_save_path() self._sdf.dataframe.to_parquet(file_path) elif dataframe_type == "polars": diff --git a/pandasai/helpers/df_info.py b/pandasai/helpers/df_info.py index 67f35e265..c9344deb8 100644 --- a/pandasai/helpers/df_info.py +++ b/pandasai/helpers/df_info.py @@ -2,14 +2,46 @@ import pandas as pd + +def _import_modin(): + try: + import modin.pandas as pd + except ImportError as e: + raise ImportError( + "Could not import modin, please install with " "`pip install modin`." + ) from e + return pd + + +def _import_polars(): + try: + import polars as pl + except ImportError as e: + raise ImportError( + "Could not import polars, please install with " "`pip install polars`." + ) from e + return pl + + +DataFrameType = Union[pd.DataFrame, str] + polars_imported = False +modin_imported = False try: - import polars as pl + pl = _import_polars() polars_imported = True - DataFrameType = Union[pd.DataFrame, pl.DataFrame, str] + DataFrameType = Union[DataFrameType, pl.DataFrame] +except ImportError: + pass + +try: + mpd = _import_modin() + + modin_imported = True + DataFrameType = Union[DataFrameType, mpd.DataFrame] except ImportError: - DataFrameType = Union[pd.DataFrame, str] + pass def df_type(df: DataFrameType) -> Union[str, None]: @@ -17,13 +49,15 @@ def df_type(df: DataFrameType) -> Union[str, None]: Returns the type of the dataframe. Args: - df (DataFrameType): Pandas or Polars dataframe + df (DataFrameType): Pandas, Modin or Polars dataframe Returns: str: Type of the dataframe """ if polars_imported and isinstance(df, pl.DataFrame): return "polars" + elif modin_imported and isinstance(df, mpd.DataFrame): + return "modin" elif isinstance(df, pd.DataFrame): return "pandas" else: diff --git a/pandasai/helpers/df_validator.py b/pandasai/helpers/df_validator.py index 8cc632a26..a77ecbb5e 100644 --- a/pandasai/helpers/df_validator.py +++ b/pandasai/helpers/df_validator.py @@ -101,7 +101,7 @@ def _df_to_list_of_dict(self, df: DataFrameType, dataframe_type: str) -> List[Di Returns: list of dict of dataframe rows """ - if dataframe_type == "pandas": + if dataframe_type in ("pandas", "modin"): return df.to_dict(orient="records") elif dataframe_type == "polars": return df.to_dicts() diff --git a/pandasai/helpers/from_google_sheets.py b/pandasai/helpers/from_google_sheets.py index d145b83e9..bc5e9f05b 100644 --- a/pandasai/helpers/from_google_sheets.py +++ b/pandasai/helpers/from_google_sheets.py @@ -1,8 +1,9 @@ import re -import pandas as pd import requests +import pandasai.pandas as pd + def get_google_sheet(src) -> list: """ @@ -49,7 +50,7 @@ def sheet_to_df(sheet) -> list: """ # A dataframe starts when a header is found - # A header is a the first instance of a set of contiguous alphanumeric columns + # A header is the first instance of a set of contiguous alphanumeric columns # A dataframe ends when a blank row is found or an empty column is found num = 0 # The number of the dataframe diff --git a/pandasai/pandas/__init__.py b/pandasai/pandas/__init__.py new file mode 100644 index 000000000..3e82a8816 --- /dev/null +++ b/pandasai/pandas/__init__.py @@ -0,0 +1,15 @@ +from pandasai.engine import _engine + +if _engine == "modin": + try: + from modin.pandas import * + + __name__ = "modin.pandas" + except ImportError as e: + raise ImportError( + "Could not import modin. Please install with `pip install modin[ray]`." + ) from e +else: + from pandas import * + + __name__ = "pandas" diff --git a/pandasai/prompts/clarification_questions_prompt.py b/pandasai/prompts/clarification_questions_prompt.py index f0ae1eef5..7685e9b2e 100644 --- a/pandasai/prompts/clarification_questions_prompt.py +++ b/pandasai/prompts/clarification_questions_prompt.py @@ -18,7 +18,7 @@ import json from typing import List -import pandas as pd +import pandasai.pandas as pd from .file_based_prompt import FileBasedPrompt diff --git a/pandasai/prompts/generate_python_code.py b/pandasai/prompts/generate_python_code.py index 13a5b81a0..acd88ce39 100644 --- a/pandasai/prompts/generate_python_code.py +++ b/pandasai/prompts/generate_python_code.py @@ -17,6 +17,8 @@ - return the updated analyze_data function wrapped within ```python ```""" # noqa: E501 +import pandasai.pandas as pd + from .file_based_prompt import FileBasedPrompt @@ -70,7 +72,7 @@ def setup(self, **kwargs) -> None: self.set_var("prev_conversation", kwargs.pop("prev_conversation", "")) def on_prompt_generation(self) -> None: - default_import = "import pandas as pd" + default_import = f"import {pd.__name__} as pd" engine_df_name = "pd.DataFrame" self.set_var("default_import", default_import) diff --git a/pandasai/prompts/rephase_query_prompt.py b/pandasai/prompts/rephase_query_prompt.py index c6cad168c..e746e00ae 100644 --- a/pandasai/prompts/rephase_query_prompt.py +++ b/pandasai/prompts/rephase_query_prompt.py @@ -10,7 +10,7 @@ """ from typing import List -import pandas as pd +import pandasai.pandas as pd from .file_based_prompt import FileBasedPrompt diff --git a/pandasai/responses/streamlit_response.py b/pandasai/responses/streamlit_response.py index 4d921fff2..6618ba4ff 100644 --- a/pandasai/responses/streamlit_response.py +++ b/pandasai/responses/streamlit_response.py @@ -1,7 +1,6 @@ from typing import Any -import pandas as pd - +import pandasai.pandas as pd from pandasai.responses.response_parser import ResponseParser diff --git a/pandasai/smart_dataframe/__init__.py b/pandasai/smart_dataframe/__init__.py index c25a934b8..725faea7b 100644 --- a/pandasai/smart_dataframe/__init__.py +++ b/pandasai/smart_dataframe/__init__.py @@ -20,13 +20,14 @@ import hashlib import uuid +import warnings from functools import cached_property from io import StringIO from typing import Any, List, Optional, Union -import pandas as pd import pydantic +import pandasai.pandas as pd from pandasai.helpers.df_validator import DfValidator from ..connectors.base import BaseConnector @@ -67,7 +68,7 @@ def _load_dataframe(self, df): Args: df (Union[pd.DataFrame, pl.DataFrame, BaseConnector]): - Pandas or Polars dataframe or a connector. + Pandas, Modin or Polars dataframe or a connector. """ if isinstance(df, BaseConnector): self.dataframe = None @@ -98,7 +99,7 @@ def _import_from_file(self, file_path: str): file_path (str): Path to the file to be imported. Returns: - pd.DataFrame: Pandas dataframe + pd.DataFrame: Pandas or Modin dataframe """ if file_path.endswith(".csv"): @@ -114,16 +115,22 @@ def _import_from_file(self, file_path: str): def _load_engine(self): """ - Load the engine of the dataframe (Pandas or Polars) + Load the engine of the dataframe (Pandas, Modin or Polars) """ - engine = df_type(self._df) + df_engine = df_type(self._df) - if engine is None: + if df_engine is None: raise ValueError( - "Invalid input data. Must be a Pandas or Polars dataframe." + "Invalid input data. Must be a Pandas, Modin or Polars dataframe." ) - self._engine = engine + if df_engine != "polars" and not isinstance(self._df, pd.DataFrame): + raise ValueError( + f"The provided dataframe is a {df_engine} dataframe, but the current pandasai engine is {pd.__name__}. " + f"To use {df_engine}, please run `pandasai.set_engine('{df_engine}')`. " + ) + + self._engine = df_engine def _validate_and_convert_dataframe(self, df: DataFrameType) -> DataFrameType: """ @@ -181,7 +188,7 @@ def dataframe(self) -> DataFrameType: if self._engine == "polars": return_df = self._df.clone() - elif self._engine == "pandas": + elif self._engine in ("pandas", "modin"): return_df = self._df.copy() if self.has_connector and self._df_loaded and self._temporary_loaded: @@ -306,7 +313,7 @@ def chat(self, query: str, output_type: Optional[str] = None): * number - specifies that user expects to get a number as a response object * dataframe - specifies that user expects to get - pandas/polars dataframe as a response object + pandas/modin/polars dataframe as a response object * plot - specifies that user expects LLM to build a plot * string - specifies that user expects to get text @@ -379,13 +386,12 @@ def _truncate_head_columns(self, df: DataFrameType, max_size=25) -> DataFrameTyp Truncate the columns of the dataframe to a maximum of 20 characters. Args: - df (DataFrameType): Pandas or Polars dataframe + df (DataFrameType): Pandas, Modin or Polars dataframe Returns: - DataFrameType: Pandas or Polars dataframe + DataFrameType: Pandas, Modin or Polars dataframe """ - - if df_type(df) == "pandas": + if (engine := df_type(df)) in ("pandas", "modin"): df_trunc = df.copy() for col in df.columns: @@ -393,7 +399,7 @@ def _truncate_head_columns(self, df: DataFrameType, max_size=25) -> DataFrameTyp first_val = df[col].iloc[0] if isinstance(first_val, str) and len(first_val) > max_size: df_trunc[col] = df_trunc[col].str.slice(0, max_size - 3) + "..." - elif df_type(df) == "polars": + elif engine == "polars": try: import polars as pl @@ -411,6 +417,10 @@ def _truncate_head_columns(self, df: DataFrameType, max_size=25) -> DataFrameTyp "Polars is not installed. " "Please install Polars to use this feature." ) from e + else: + raise ValueError( + f"Unrecognized engine {engine}. It must either be pandas, modin or polars." + ) return df_trunc @@ -429,7 +439,6 @@ def _get_sample_head(self) -> DataFrameType: sampler = DataSampler(head) sampled_head = sampler.sample(rows_to_display) - if self.lake.config.enforce_privacy: return sampled_head else: @@ -506,7 +515,7 @@ def head_df(self): Get the head of the dataframe as a dataframe. Returns: - DataFrameType: Pandas or Polars dataframe + DataFrameType: Pandas, Modin or Polars dataframe """ return self._get_sample_head() diff --git a/pandasai/smart_dataframe/abstract_df.py b/pandasai/smart_dataframe/abstract_df.py index 676c00411..e85244917 100644 --- a/pandasai/smart_dataframe/abstract_df.py +++ b/pandasai/smart_dataframe/abstract_df.py @@ -297,7 +297,7 @@ def to_dict(self, orient="dict", into=dict, as_series=True): """ A proxy-call to the dataframe's `.to_dict()`. """ - if self._engine == "pandas": + if self._engine in ("pandas", "modin"): return self.dataframe.to_dict(orient=orient, into=into) elif self._engine == "polars": return self.dataframe.to_dict(as_series=as_series) diff --git a/pandasai/smart_datalake/__init__.py b/pandasai/smart_datalake/__init__.py index 9ac6d667a..5ce32e7fe 100644 --- a/pandasai/smart_datalake/__init__.py +++ b/pandasai/smart_datalake/__init__.py @@ -19,6 +19,7 @@ """ import logging import os +import threading import uuid from typing import Any, List, Optional, Union @@ -69,6 +70,7 @@ class SmartDatalake: _last_error: str = None _viz_lib: str = None + _lock: threading.RLock = threading.RLock() def __init__( self, @@ -162,7 +164,8 @@ def initialize(self): charts_dir = os.path.join( os.getcwd(), self._config.save_charts_path ) - os.makedirs(charts_dir, mode=DEFAULT_FILE_PERMISSIONS, exist_ok=True) + with self._lock: + os.makedirs(charts_dir, mode=DEFAULT_FILE_PERMISSIONS, exist_ok=True) if self._config.enable_cache: try: diff --git a/poetry.lock b/poetry.lock index 33b5cbf28..0a7cbc432 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,9 +1,10 @@ -# This file is automatically @generated by Poetry 1.7.0 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.4.2 and should not be changed by hand. [[package]] name = "aiohttp" version = "3.8.6" description = "Async http client/server framework (asyncio)" +category = "main" optional = true python-versions = ">=3.6" files = [ @@ -108,10 +109,26 @@ yarl = ">=1.0,<2.0" [package.extras] speedups = ["Brotli", "aiodns", "cchardet"] +[[package]] +name = "aiohttp-cors" +version = "0.7.0" +description = "CORS support for aiohttp" +category = "main" +optional = true +python-versions = "*" +files = [ + {file = "aiohttp-cors-0.7.0.tar.gz", hash = "sha256:4d39c6d7100fd9764ed1caf8cebf0eb01bf5e3f24e2e073fda6234bc48b19f5d"}, + {file = "aiohttp_cors-0.7.0-py3-none-any.whl", hash = "sha256:0451ba59fdf6909d0e2cd21e4c0a43752bc0703d33fc78ae94d9d9321710193e"}, +] + +[package.dependencies] +aiohttp = ">=1.1" + [[package]] name = "aiosignal" version = "1.3.1" description = "aiosignal: a list of registered asynchronous callbacks" +category = "main" optional = true python-versions = ">=3.7" files = [ @@ -126,6 +143,7 @@ frozenlist = ">=1.1.0" name = "alembic" version = "1.12.1" description = "A database migration tool for SQLAlchemy." +category = "main" optional = true python-versions = ">=3.7" files = [ @@ -145,6 +163,7 @@ tz = ["python-dateutil"] name = "altair" version = "5.1.2" description = "Vega-Altair: A declarative statistical visualization library for Python." +category = "main" optional = true python-versions = ">=3.8" files = [ @@ -165,10 +184,23 @@ typing-extensions = {version = ">=4.0.1", markers = "python_version < \"3.11\""} dev = ["anywidget", "black (<24)", "hatch", "ipython", "m2r", "mypy", "pandas-stubs", "pyarrow (>=11)", "pytest", "pytest-cov", "ruff", "types-jsonschema", "types-setuptools", "vega-datasets", "vegafusion[embed] (>=1.4.0)", "vl-convert-python (>=0.14.0)"] doc = ["docutils", "geopandas", "jinja2", "myst-parser", "numpydoc", "pillow (>=9,<10)", "pydata-sphinx-theme", "scipy", "sphinx", "sphinx-copybutton", "sphinx-design", "sphinxext-altair"] +[[package]] +name = "ansicon" +version = "1.89.0" +description = "Python wrapper for loading Jason Hood's ANSICON" +category = "main" +optional = true +python-versions = "*" +files = [ + {file = "ansicon-1.89.0-py2.py3-none-any.whl", hash = "sha256:f1def52d17f65c2c9682cf8370c03f541f410c1752d6a14029f97318e4b9dfec"}, + {file = "ansicon-1.89.0.tar.gz", hash = "sha256:e4d039def5768a47e4afec8e89e83ec3ae5a26bf00ad851f914d1240b444d2b1"}, +] + [[package]] name = "anyio" version = "3.7.1" description = "High level compatibility layer for multiple asynchronous event loop implementations" +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -190,6 +222,7 @@ trio = ["trio (<0.22)"] name = "appdirs" version = "1.4.4" description = "A small Python module for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." +category = "main" optional = true python-versions = "*" files = [ @@ -201,6 +234,7 @@ files = [ name = "appnope" version = "0.1.3" description = "Disable App Nap on macOS >= 10.9" +category = "main" optional = false python-versions = "*" files = [ @@ -212,6 +246,7 @@ files = [ name = "asn1crypto" version = "1.5.1" description = "Fast ASN.1 parser and serializer with definitions for private keys, public keys, certificates, CRL, OCSP, CMS, PKCS#3, PKCS#7, PKCS#8, PKCS#12, PKCS#5, X.509 and TSP" +category = "main" optional = true python-versions = "*" files = [ @@ -223,6 +258,7 @@ files = [ name = "astor" version = "0.8.1" description = "Read/rewrite/write Python ASTs" +category = "main" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7" files = [ @@ -234,6 +270,7 @@ files = [ name = "asttokens" version = "2.4.1" description = "Annotate AST trees with source code positions" +category = "main" optional = false python-versions = "*" files = [ @@ -252,6 +289,7 @@ test = ["astroid (>=1,<2)", "astroid (>=2,<4)", "pytest"] name = "async-timeout" version = "4.0.3" description = "Timeout context manager for asyncio programs" +category = "main" optional = true python-versions = ">=3.7" files = [ @@ -263,6 +301,7 @@ files = [ name = "attrs" version = "23.1.0" description = "Classes Without Boilerplate" +category = "main" optional = true python-versions = ">=3.7" files = [ @@ -281,6 +320,7 @@ tests-no-zope = ["cloudpickle", "hypothesis", "mypy (>=1.1.1)", "pympler", "pyte name = "beautifulsoup4" version = "4.12.2" description = "Screen-scraping library" +category = "main" optional = true python-versions = ">=3.6.0" files = [ @@ -295,10 +335,28 @@ soupsieve = ">1.2" html5lib = ["html5lib"] lxml = ["lxml"] +[[package]] +name = "blessed" +version = "1.20.0" +description = "Easy, practical library for making terminal apps, by providing an elegant, well-documented interface to Colors, Keyboard input, and screen Positioning capabilities." +category = "main" +optional = true +python-versions = ">=2.7" +files = [ + {file = "blessed-1.20.0-py2.py3-none-any.whl", hash = "sha256:0c542922586a265e699188e52d5f5ac5ec0dd517e5a1041d90d2bbf23f906058"}, + {file = "blessed-1.20.0.tar.gz", hash = "sha256:2cdd67f8746e048f00df47a2880f4d6acbcdb399031b604e34ba8f71d5787680"}, +] + +[package.dependencies] +jinxed = {version = ">=1.1.0", markers = "platform_system == \"Windows\""} +six = ">=1.9.0" +wcwidth = ">=0.1.4" + [[package]] name = "blinker" version = "1.6.3" description = "Fast, simple object-to-object and broadcast signaling" +category = "main" optional = true python-versions = ">=3.7" files = [ @@ -310,6 +368,7 @@ files = [ name = "brewer2mpl" version = "1.4.1" description = "Connect colorbrewer2.org color maps to Python and matplotlib" +category = "main" optional = true python-versions = "*" files = [ @@ -322,7 +381,8 @@ files = [ name = "cachetools" version = "5.3.2" description = "Extensible memoizing collections and decorators" -optional = false +category = "main" +optional = true python-versions = ">=3.7" files = [ {file = "cachetools-5.3.2-py3-none-any.whl", hash = "sha256:861f35a13a451f94e301ce2bec7cac63e881232ccce7ed67fab9b5df4d3beaa1"}, @@ -333,6 +393,7 @@ files = [ name = "certifi" version = "2023.7.22" description = "Python package for providing Mozilla's CA Bundle." +category = "main" optional = false python-versions = ">=3.6" files = [ @@ -344,6 +405,7 @@ files = [ name = "cffi" version = "1.16.0" description = "Foreign Function Interface for Python calling C code." +category = "main" optional = true python-versions = ">=3.8" files = [ @@ -408,6 +470,7 @@ pycparser = "*" name = "cfgv" version = "3.4.0" description = "Validate configuration and produce human readable error messages." +category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -419,6 +482,7 @@ files = [ name = "charset-normalizer" version = "3.3.2" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." +category = "main" optional = false python-versions = ">=3.7.0" files = [ @@ -518,6 +582,7 @@ files = [ name = "click" version = "8.1.7" description = "Composable command line interface toolkit" +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -532,6 +597,7 @@ colorama = {version = "*", markers = "platform_system == \"Windows\""} name = "codespell" version = "2.2.6" description = "Codespell" +category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -549,6 +615,7 @@ types = ["chardet (>=5.1.0)", "mypy", "pytest", "pytest-cov", "pytest-dependency name = "colorama" version = "0.4.6" description = "Cross-platform colored terminal text." +category = "main" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" files = [ @@ -556,10 +623,26 @@ files = [ {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, ] +[[package]] +name = "colorful" +version = "0.5.6" +description = "Terminal string styling done right, in Python." +category = "main" +optional = true +python-versions = "*" +files = [ + {file = "colorful-0.5.6-py2.py3-none-any.whl", hash = "sha256:eab8c1c809f5025ad2b5238a50bd691e26850da8cac8f90d660ede6ea1af9f1e"}, + {file = "colorful-0.5.6.tar.gz", hash = "sha256:b56d5c01db1dac4898308ea889edcb113fbee3e6ec5df4bacffd61d5241b5b8d"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "platform_system == \"Windows\""} + [[package]] name = "contourpy" version = "1.1.0" description = "Python library for calculating contours of 2D quadrilateral grids" +category = "main" optional = false python-versions = ">=3.8" files = [ @@ -618,6 +701,7 @@ test-no-images = ["pytest", "pytest-cov", "wurlitzer"] name = "contourpy" version = "1.1.1" description = "Python library for calculating contours of 2D quadrilateral grids" +category = "main" optional = false python-versions = ">=3.8" files = [ @@ -689,6 +773,7 @@ test-no-images = ["pytest", "pytest-cov", "wurlitzer"] name = "coverage" version = "7.3.2" description = "Code coverage measurement for Python" +category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -753,6 +838,7 @@ toml = ["tomli"] name = "cryptography" version = "41.0.5" description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." +category = "main" optional = true python-versions = ">=3.7" files = [ @@ -798,6 +884,7 @@ test-randomorder = ["pytest-randomly"] name = "cycler" version = "0.12.1" description = "Composable style cycles" +category = "main" optional = false python-versions = ">=3.8" files = [ @@ -813,6 +900,7 @@ tests = ["pytest", "pytest-cov", "pytest-xdist"] name = "databricks-sql-connector" version = "2.9.3" description = "Databricks SQL Connector for Python" +category = "main" optional = true python-versions = ">=3.7.1,<4.0.0" files = [ @@ -843,6 +931,7 @@ urllib3 = ">=1.0" name = "dataclasses-json" version = "0.5.9" description = "Easily serialize dataclasses to and from JSON" +category = "main" optional = true python-versions = ">=3.6" files = [ @@ -862,6 +951,7 @@ dev = ["flake8", "hypothesis", "ipython", "mypy (>=0.710)", "portray", "pytest ( name = "decorator" version = "5.1.1" description = "Decorators for Humans" +category = "main" optional = false python-versions = ">=3.5" files = [ @@ -873,6 +963,7 @@ files = [ name = "distlib" version = "0.3.7" description = "Distribution utilities" +category = "main" optional = false python-versions = "*" files = [ @@ -884,6 +975,7 @@ files = [ name = "distro" version = "1.8.0" description = "Distro - an OS platform information API" +category = "main" optional = false python-versions = ">=3.6" files = [ @@ -895,6 +987,7 @@ files = [ name = "duckdb" version = "0.9.2" description = "DuckDB embedded database" +category = "main" optional = false python-versions = ">=3.7.0" files = [ @@ -943,6 +1036,7 @@ files = [ name = "et-xmlfile" version = "1.1.0" description = "An implementation of lxml.xmlfile for the standard library" +category = "main" optional = true python-versions = ">=3.6" files = [ @@ -954,6 +1048,7 @@ files = [ name = "exceptiongroup" version = "1.1.3" description = "Backport of PEP 654 (exception groups)" +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -968,6 +1063,7 @@ test = ["pytest (>=6)"] name = "executing" version = "2.0.1" description = "Get the currently executing AST node of a frame, and other information" +category = "main" optional = false python-versions = ">=3.5" files = [ @@ -982,6 +1078,7 @@ tests = ["asttokens (>=2.1.0)", "coverage", "coverage-enable-subprocess", "ipyth name = "faker" version = "19.12.1" description = "Faker is a Python package that generates fake data for you." +category = "main" optional = false python-versions = ">=3.8" files = [ @@ -996,6 +1093,7 @@ python-dateutil = ">=2.4" name = "filelock" version = "3.13.1" description = "A platform independent file lock." +category = "main" optional = false python-versions = ">=3.8" files = [ @@ -1012,6 +1110,7 @@ typing = ["typing-extensions (>=4.8)"] name = "fonttools" version = "4.43.1" description = "Tools to manipulate font files" +category = "main" optional = false python-versions = ">=3.8" files = [ @@ -1077,6 +1176,7 @@ woff = ["brotli (>=1.0.1)", "brotlicffi (>=0.8.0)", "zopfli (>=0.1.4)"] name = "frozendict" version = "2.3.8" description = "A simple immutable dictionary" +category = "main" optional = true python-versions = ">=3.6" files = [ @@ -1123,6 +1223,7 @@ files = [ name = "frozenlist" version = "1.4.0" description = "A list-like structure which implements collections.abc.MutableSequence" +category = "main" optional = true python-versions = ">=3.8" files = [ @@ -1193,6 +1294,7 @@ files = [ name = "fsspec" version = "2023.10.0" description = "File-system specification" +category = "main" optional = true python-versions = ">=3.8" files = [ @@ -1228,6 +1330,7 @@ tqdm = ["tqdm"] name = "future" version = "0.18.3" description = "Clean single-source support for Python 3 and 2" +category = "main" optional = true python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" files = [ @@ -1238,6 +1341,7 @@ files = [ name = "ggplot" version = "0.11.5" description = "ggplot for python" +category = "main" optional = true python-versions = "*" files = [ @@ -1260,6 +1364,7 @@ statsmodels = "*" name = "ghp-import" version = "2.1.0" description = "Copy your docs directly to the gh-pages branch." +category = "dev" optional = false python-versions = "*" files = [ @@ -1277,6 +1382,7 @@ dev = ["flake8", "markdown", "twine", "wheel"] name = "gitdb" version = "4.0.11" description = "Git Object Database" +category = "main" optional = true python-versions = ">=3.7" files = [ @@ -1291,6 +1397,7 @@ smmap = ">=3.0.1,<6" name = "gitpython" version = "3.1.40" description = "GitPython is a Python library used to interact with Git repositories" +category = "main" optional = true python-versions = ">=3.7" files = [ @@ -1308,6 +1415,7 @@ test = ["black", "coverage[toml]", "ddt (>=1.1.1,!=1.4.3)", "mock", "mypy", "pre name = "google-ai-generativelanguage" version = "0.4.0" description = "Google Ai Generativelanguage API client library" +category = "main" optional = true python-versions = ">=3.7" files = [ @@ -1316,7 +1424,7 @@ files = [ ] [package.dependencies] -google-api-core = {version = ">=1.34.0,<2.0.dev0 || >=2.11.dev0,<3.0.0dev", extras = ["grpc"]} +google-api-core = {version = ">=1.34.0,<2.0.0 || >=2.11.0,<3.0.0dev", extras = ["grpc"]} proto-plus = ">=1.22.3,<2.0.0dev" protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.0 || >4.21.0,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4.21.3 || >4.21.3,<4.21.4 || >4.21.4,<4.21.5 || >4.21.5,<5.0.0dev" @@ -1324,7 +1432,8 @@ protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.0 || >4.21.0,<4 name = "google-api-core" version = "2.12.0" description = "Google API client core library" -optional = false +category = "main" +optional = true python-versions = ">=3.7" files = [ {file = "google-api-core-2.12.0.tar.gz", hash = "sha256:c22e01b1e3c4dcd90998494879612c38d0a3411d1f7b679eb89e2abe3ce1f553"}, @@ -1335,11 +1444,11 @@ files = [ google-auth = ">=2.14.1,<3.0.dev0" googleapis-common-protos = ">=1.56.2,<2.0.dev0" grpcio = [ - {version = ">=1.33.2,<2.0dev", optional = true, markers = "python_version < \"3.11\" and extra == \"grpc\""}, + {version = ">=1.33.2,<2.0dev", optional = true, markers = "extra == \"grpc\""}, {version = ">=1.49.1,<2.0dev", optional = true, markers = "python_version >= \"3.11\" and extra == \"grpc\""}, ] grpcio-status = [ - {version = ">=1.33.2,<2.0.dev0", optional = true, markers = "python_version < \"3.11\" and extra == \"grpc\""}, + {version = ">=1.33.2,<2.0.dev0", optional = true, markers = "extra == \"grpc\""}, {version = ">=1.49.1,<2.0.dev0", optional = true, markers = "python_version >= \"3.11\" and extra == \"grpc\""}, ] protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.0 || >4.21.0,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4.21.3 || >4.21.3,<4.21.4 || >4.21.4,<4.21.5 || >4.21.5,<5.0.0.dev0" @@ -1354,7 +1463,8 @@ grpcio-gcp = ["grpcio-gcp (>=0.2.2,<1.0.dev0)"] name = "google-auth" version = "2.23.4" description = "Google Authentication Library" -optional = false +category = "main" +optional = true python-versions = ">=3.7" files = [ {file = "google-auth-2.23.4.tar.gz", hash = "sha256:79905d6b1652187def79d491d6e23d0cbb3a21d3c7ba0dbaa9c8a01906b13ff3"}, @@ -1377,7 +1487,8 @@ requests = ["requests (>=2.20.0,<3.0.0.dev0)"] name = "google-cloud-aiplatform" version = "1.38.0" description = "Vertex AI API client library" -optional = false +category = "main" +optional = true python-versions = ">=3.8" files = [ {file = "google-cloud-aiplatform-1.38.0.tar.gz", hash = "sha256:dff91f79b64e279f0e61dfd63c4e067ba5fa75ef0f4614289bbdca70d086a9e2"}, @@ -1385,7 +1496,7 @@ files = [ ] [package.dependencies] -google-api-core = {version = ">=1.32.0,<2.0.dev0 || >=2.8.dev0,<3.0.0dev", extras = ["grpc"]} +google-api-core = {version = ">=1.32.0,<2.0.0 || >=2.8.0,<3.0.0dev", extras = ["grpc"]} google-cloud-bigquery = ">=1.15.0,<4.0.0dev" google-cloud-resource-manager = ">=1.3.3,<3.0.0dev" google-cloud-storage = ">=1.32.0,<3.0.0dev" @@ -1417,7 +1528,8 @@ xai = ["tensorflow (>=2.3.0,<3.0.0dev)"] name = "google-cloud-bigquery" version = "3.13.0" description = "Google BigQuery API client library" -optional = false +category = "main" +optional = true python-versions = ">=3.7" files = [ {file = "google-cloud-bigquery-3.13.0.tar.gz", hash = "sha256:794ccfc93ccb0e0ad689442f896f9c82de56da0fe18a195531bb37096c2657d6"}, @@ -1425,7 +1537,7 @@ files = [ ] [package.dependencies] -google-api-core = {version = ">=1.31.5,<2.0.dev0 || >2.3.0,<3.0.0dev", extras = ["grpc"]} +google-api-core = {version = ">=1.31.5,<2.0.0 || >2.3.0,<3.0.0dev", extras = ["grpc"]} google-cloud-core = ">=1.6.0,<3.0.0dev" google-resumable-media = ">=0.6.0,<3.0dev" grpcio = [ @@ -1452,7 +1564,8 @@ tqdm = ["tqdm (>=4.7.4,<5.0.0dev)"] name = "google-cloud-core" version = "2.3.3" description = "Google Cloud API client core library" -optional = false +category = "main" +optional = true python-versions = ">=3.7" files = [ {file = "google-cloud-core-2.3.3.tar.gz", hash = "sha256:37b80273c8d7eee1ae816b3a20ae43585ea50506cb0e60f3cf5be5f87f1373cb"}, @@ -1460,7 +1573,7 @@ files = [ ] [package.dependencies] -google-api-core = ">=1.31.6,<2.0.dev0 || >2.3.0,<3.0.0dev" +google-api-core = ">=1.31.6,<2.0.0 || >2.3.0,<3.0.0dev" google-auth = ">=1.25.0,<3.0dev" [package.extras] @@ -1470,7 +1583,8 @@ grpc = ["grpcio (>=1.38.0,<2.0dev)"] name = "google-cloud-resource-manager" version = "1.10.4" description = "Google Cloud Resource Manager API client library" -optional = false +category = "main" +optional = true python-versions = ">=3.7" files = [ {file = "google-cloud-resource-manager-1.10.4.tar.gz", hash = "sha256:456b25ddda3d4cd27488a72736bbc3af04d713ae2fe3655c01b66a339d28d679"}, @@ -1478,7 +1592,7 @@ files = [ ] [package.dependencies] -google-api-core = {version = ">=1.34.0,<2.0.dev0 || >=2.11.dev0,<3.0.0dev", extras = ["grpc"]} +google-api-core = {version = ">=1.34.0,<2.0.0 || >=2.11.0,<3.0.0dev", extras = ["grpc"]} grpc-google-iam-v1 = ">=0.12.4,<1.0.0dev" proto-plus = [ {version = ">=1.22.0,<2.0.0dev", markers = "python_version < \"3.11\""}, @@ -1490,7 +1604,8 @@ protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.0 || >4.21.0,<4 name = "google-cloud-storage" version = "2.13.0" description = "Google Cloud Storage API client library" -optional = false +category = "main" +optional = true python-versions = ">=3.7" files = [ {file = "google-cloud-storage-2.13.0.tar.gz", hash = "sha256:f62dc4c7b6cd4360d072e3deb28035fbdad491ac3d9b0b1815a12daea10f37c7"}, @@ -1498,7 +1613,7 @@ files = [ ] [package.dependencies] -google-api-core = ">=1.31.5,<2.0.dev0 || >2.3.0,<3.0.0dev" +google-api-core = ">=1.31.5,<2.0.0 || >2.3.0,<3.0.0dev" google-auth = ">=2.23.3,<3.0dev" google-cloud-core = ">=2.3.0,<3.0dev" google-crc32c = ">=1.0,<2.0dev" @@ -1512,7 +1627,8 @@ protobuf = ["protobuf (<5.0.0dev)"] name = "google-crc32c" version = "1.5.0" description = "A python wrapper of the C library 'Google CRC32C'" -optional = false +category = "main" +optional = true python-versions = ">=3.7" files = [ {file = "google-crc32c-1.5.0.tar.gz", hash = "sha256:89284716bc6a5a415d4eaa11b1726d2d60a0cd12aadf5439828353662ede9dd7"}, @@ -1592,6 +1708,7 @@ testing = ["pytest"] name = "google-generativeai" version = "0.3.2" description = "Google Generative AI High level API client library and tools." +category = "main" optional = true python-versions = ">=3.9" files = [ @@ -1613,7 +1730,8 @@ dev = ["Pillow", "absl-py", "black", "ipython", "nose2", "pandas", "pytype", "py name = "google-resumable-media" version = "2.6.0" description = "Utilities for Google Media Downloads and Resumable Uploads" -optional = false +category = "main" +optional = true python-versions = ">= 3.7" files = [ {file = "google-resumable-media-2.6.0.tar.gz", hash = "sha256:972852f6c65f933e15a4a210c2b96930763b47197cdf4aa5f5bea435efb626e7"}, @@ -1631,7 +1749,8 @@ requests = ["requests (>=2.18.0,<3.0.0dev)"] name = "googleapis-common-protos" version = "1.61.0" description = "Common protobufs used in Google APIs" -optional = false +category = "main" +optional = true python-versions = ">=3.7" files = [ {file = "googleapis-common-protos-1.61.0.tar.gz", hash = "sha256:8a64866a97f6304a7179873a465d6eee97b7a24ec6cfd78e0f575e96b821240b"}, @@ -1645,10 +1764,31 @@ protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.1 || >4.21.1,<4 [package.extras] grpc = ["grpcio (>=1.44.0,<2.0.0.dev0)"] +[[package]] +name = "gpustat" +version = "1.1.1" +description = "An utility to monitor NVIDIA GPU status and usage" +category = "main" +optional = true +python-versions = ">=3.6" +files = [ + {file = "gpustat-1.1.1.tar.gz", hash = "sha256:c18d3ed5518fc16300c42d694debc70aebb3be55cae91f1db64d63b5fa8af9d8"}, +] + +[package.dependencies] +blessed = ">=1.17.1" +nvidia-ml-py = ">=11.450.129" +psutil = ">=5.6.0" + +[package.extras] +completion = ["shtab"] +test = ["mockito (>=1.2.1)", "pytest (>=5.4.1)", "pytest-runner"] + [[package]] name = "greenlet" version = "3.0.1" description = "Lightweight in-process concurrent programming" +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1719,6 +1859,7 @@ test = ["objgraph", "psutil"] name = "griffe" version = "0.36.9" description = "Signatures for entire Python programs. Extract the structure, the frame, the skeleton of your project, to generate API documentation or find breaking changes in your API." +category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -1733,7 +1874,8 @@ colorama = ">=0.4" name = "grpc-google-iam-v1" version = "0.12.6" description = "IAM API client library" -optional = false +category = "main" +optional = true python-versions = ">=3.7" files = [ {file = "grpc-google-iam-v1-0.12.6.tar.gz", hash = "sha256:2bc4b8fdf22115a65d751c9317329322602c39b7c86a289c9b72d228d960ef5f"}, @@ -1749,7 +1891,8 @@ protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.1 || >4.21.1,<4 name = "grpcio" version = "1.59.2" description = "HTTP/2-based RPC framework" -optional = false +category = "main" +optional = true python-versions = ">=3.7" files = [ {file = "grpcio-1.59.2-cp310-cp310-linux_armv7l.whl", hash = "sha256:d2fa68a96a30dd240be80bbad838a0ac81a61770611ff7952b889485970c4c71"}, @@ -1815,7 +1958,8 @@ protobuf = ["grpcio-tools (>=1.59.2)"] name = "grpcio-status" version = "1.59.2" description = "Status proto mapping for gRPC" -optional = false +category = "main" +optional = true python-versions = ">=3.6" files = [ {file = "grpcio-status-1.59.2.tar.gz", hash = "sha256:a2c2b146e66b73ba80d021ab34fce5db4dd9be67ca4566cda40d36b185ce54f4"}, @@ -1831,6 +1975,7 @@ protobuf = ">=4.21.6" name = "h11" version = "0.14.0" description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1" +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1842,6 +1987,7 @@ files = [ name = "html5lib" version = "1.1" description = "HTML parser based on the WHATWG HTML specification" +category = "main" optional = true python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" files = [ @@ -1863,6 +2009,7 @@ lxml = ["lxml"] name = "httpcore" version = "1.0.2" description = "A minimal low-level HTTP client." +category = "main" optional = false python-versions = ">=3.8" files = [ @@ -1877,13 +2024,14 @@ h11 = ">=0.13,<0.15" [package.extras] asyncio = ["anyio (>=4.0,<5.0)"] http2 = ["h2 (>=3,<5)"] -socks = ["socksio (==1.*)"] +socks = ["socksio (>=1.0.0,<2.0.0)"] trio = ["trio (>=0.22.0,<0.23.0)"] [[package]] name = "httpx" version = "0.25.1" description = "The next generation HTTP client." +category = "main" optional = false python-versions = ">=3.8" files = [ @@ -1900,14 +2048,15 @@ sniffio = "*" [package.extras] brotli = ["brotli", "brotlicffi"] -cli = ["click (==8.*)", "pygments (==2.*)", "rich (>=10,<14)"] +cli = ["click (>=8.0.0,<9.0.0)", "pygments (>=2.0.0,<3.0.0)", "rich (>=10,<14)"] http2 = ["h2 (>=3,<5)"] -socks = ["socksio (==1.*)"] +socks = ["socksio (>=1.0.0,<2.0.0)"] [[package]] name = "huggingface-hub" version = "0.18.0" description = "Client library to download and publish models, datasets and other repos on the huggingface.co hub" +category = "main" optional = true python-versions = ">=3.8.0" files = [ @@ -1941,6 +2090,7 @@ typing = ["pydantic (<2.0)", "types-PyYAML", "types-requests", "types-simplejson name = "identify" version = "2.5.31" description = "File identification library for Python" +category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -1955,6 +2105,7 @@ license = ["ukkonen"] name = "idna" version = "3.4" description = "Internationalized Domain Names in Applications (IDNA)" +category = "main" optional = false python-versions = ">=3.5" files = [ @@ -1966,6 +2117,7 @@ files = [ name = "importlib-metadata" version = "6.8.0" description = "Read metadata from Python packages" +category = "main" optional = false python-versions = ">=3.8" files = [ @@ -1985,6 +2137,7 @@ testing = ["flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs name = "importlib-resources" version = "6.1.0" description = "Read resources from Python packages" +category = "main" optional = false python-versions = ">=3.8" files = [ @@ -2003,6 +2156,7 @@ testing = ["pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", name = "iniconfig" version = "2.0.0" description = "brain-dead simple config-ini parsing" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2014,6 +2168,7 @@ files = [ name = "ipython" version = "8.17.2" description = "IPython: Productive Interactive Computing" +category = "main" optional = false python-versions = ">=3.9" files = [ @@ -2052,6 +2207,7 @@ test-extra = ["curio", "matplotlib (!=3.2.0)", "nbformat", "numpy (>=1.22)", "pa name = "jedi" version = "0.19.1" description = "An autocompletion tool for Python that can be used for text editors." +category = "main" optional = false python-versions = ">=3.6" files = [ @@ -2071,6 +2227,7 @@ testing = ["Django", "attrs", "colorama", "docopt", "pytest (<7.0.0)"] name = "jinja2" version = "3.1.2" description = "A very fast and expressive template engine." +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -2084,10 +2241,26 @@ MarkupSafe = ">=2.0" [package.extras] i18n = ["Babel (>=2.7)"] +[[package]] +name = "jinxed" +version = "1.2.1" +description = "Jinxed Terminal Library" +category = "main" +optional = true +python-versions = "*" +files = [ + {file = "jinxed-1.2.1-py2.py3-none-any.whl", hash = "sha256:37422659c4925969c66148c5e64979f553386a4226b9484d910d3094ced37d30"}, + {file = "jinxed-1.2.1.tar.gz", hash = "sha256:30c3f861b73279fea1ed928cfd4dfb1f273e16cd62c8a32acfac362da0f78f3f"}, +] + +[package.dependencies] +ansicon = {version = "*", markers = "platform_system == \"Windows\""} + [[package]] name = "joblib" version = "1.3.2" description = "Lightweight pipelining with Python functions" +category = "main" optional = true python-versions = ">=3.7" files = [ @@ -2099,6 +2272,7 @@ files = [ name = "jsonschema" version = "4.19.2" description = "An implementation of JSON Schema validation for Python" +category = "main" optional = true python-versions = ">=3.8" files = [ @@ -2120,6 +2294,7 @@ format-nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339- name = "jsonschema-specifications" version = "2023.7.1" description = "The JSON Schema meta-schemas and vocabularies, exposed as a Registry" +category = "main" optional = true python-versions = ">=3.8" files = [ @@ -2134,6 +2309,7 @@ referencing = ">=0.28.0" name = "kaleido" version = "0.2.0" description = "Static image export for web-based visualization libraries with zero dependencies" +category = "main" optional = true python-versions = "*" files = [ @@ -2149,6 +2325,7 @@ files = [ name = "kiwisolver" version = "1.4.5" description = "A fast implementation of the Cassowary constraint solver" +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -2262,6 +2439,7 @@ files = [ name = "langchain" version = "0.0.199" description = "Building applications with LLMs through composability" +category = "main" optional = true python-versions = ">=3.8.1,<4.0" files = [ @@ -2299,6 +2477,7 @@ text-helpers = ["chardet (>=5.1.0,<6.0.0)"] name = "langchainplus-sdk" version = "0.0.20" description = "Client library to connect to the LangSmith LLM Tracing and Evaluation Platform." +category = "main" optional = true python-versions = ">=3.8.1,<4.0" files = [ @@ -2315,6 +2494,7 @@ tenacity = ">=8.1.0,<9.0.0" name = "lxml" version = "4.9.3" description = "Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API." +category = "main" optional = true python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, != 3.4.*" files = [ @@ -2422,6 +2602,7 @@ source = ["Cython (>=0.29.35)"] name = "lz4" version = "4.3.2" description = "LZ4 Bindings for Python" +category = "main" optional = true python-versions = ">=3.7" files = [ @@ -2471,6 +2652,7 @@ tests = ["psutil", "pytest (!=3.3.0)", "pytest-cov"] name = "mako" version = "1.2.4" description = "A super-fast templating language that borrows the best ideas from the existing templating languages." +category = "main" optional = true python-versions = ">=3.7" files = [ @@ -2490,6 +2672,7 @@ testing = ["pytest"] name = "markdown" version = "3.5.1" description = "Python implementation of John Gruber's Markdown." +category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -2508,6 +2691,7 @@ testing = ["coverage", "pyyaml"] name = "markdown-include" version = "0.6.0" description = "This is an extension to Python-Markdown which provides an \"include\" function, similar to that found in LaTeX (and also the C pre-processor and Fortran). I originally wrote it for my FORD Fortran auto-documentation generator." +category = "dev" optional = false python-versions = "*" files = [ @@ -2521,6 +2705,7 @@ markdown = "*" name = "markdown-it-py" version = "3.0.0" description = "Python port of markdown-it. Markdown parsing, done right!" +category = "main" optional = true python-versions = ">=3.8" files = [ @@ -2545,6 +2730,7 @@ testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] name = "markupsafe" version = "2.1.3" description = "Safely add untrusted strings to HTML/XML markup." +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -2604,6 +2790,7 @@ files = [ name = "marshmallow" version = "3.20.1" description = "A lightweight library for converting complex datatypes to and from native Python datatypes." +category = "main" optional = true python-versions = ">=3.8" files = [ @@ -2624,6 +2811,7 @@ tests = ["pytest", "pytz", "simplejson"] name = "marshmallow-enum" version = "1.5.1" description = "Enum field for Marshmallow" +category = "main" optional = true python-versions = "*" files = [ @@ -2638,6 +2826,7 @@ marshmallow = ">=2.0.0" name = "matplotlib" version = "3.8.1" description = "Python plotting package" +category = "main" optional = false python-versions = ">=3.9" files = [ @@ -2687,6 +2876,7 @@ python-dateutil = ">=2.7" name = "matplotlib-inline" version = "0.1.6" description = "Inline Matplotlib backend for Jupyter" +category = "main" optional = false python-versions = ">=3.5" files = [ @@ -2701,6 +2891,7 @@ traitlets = "*" name = "mdurl" version = "0.1.2" description = "Markdown URL utilities" +category = "main" optional = true python-versions = ">=3.7" files = [ @@ -2712,6 +2903,7 @@ files = [ name = "mergedeep" version = "1.3.4" description = "A deep merge function for 🐍." +category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -2723,6 +2915,7 @@ files = [ name = "mkdocs" version = "1.5.3" description = "Project documentation with Markdown." +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2754,6 +2947,7 @@ min-versions = ["babel (==2.9.0)", "click (==7.0)", "colorama (==0.4)", "ghp-imp name = "mkdocs-autorefs" version = "0.5.0" description = "Automatically link across pages in MkDocs." +category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -2769,6 +2963,7 @@ mkdocs = ">=1.1" name = "mkdocstrings" version = "0.23.0" description = "Automatic documentation from sources, for MkDocs." +category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -2795,6 +2990,7 @@ python-legacy = ["mkdocstrings-python-legacy (>=0.2.1)"] name = "mkdocstrings-python" version = "1.7.2" description = "A Python handler for mkdocstrings." +category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -2806,10 +3002,107 @@ files = [ griffe = ">=0.35" mkdocstrings = ">=0.20" +[[package]] +name = "modin" +version = "0.18.1" +description = "Modin: Make your pandas code run faster by changing one line of code." +category = "main" +optional = true +python-versions = ">=3.8" +files = [ + {file = "modin-0.18.1-py3-none-any.whl", hash = "sha256:ce2a928de715b64c37de8d6f8c5547c3cc0696fd11a99795a27fc96079f65551"}, + {file = "modin-0.18.1.tar.gz", hash = "sha256:4ba831d272d8b8b122973e56a709fe86f3c50c0792c7e2cb091d95b422f83720"}, +] + +[package.dependencies] +fsspec = "*" +numpy = ">=1.18.5" +packaging = "*" +pandas = "1.5.3" +psutil = "*" +pyarrow = {version = "*", optional = true, markers = "extra == \"ray\""} +ray = {version = ">=1.13.0", extras = ["default"], optional = true, markers = "extra == \"ray\""} + +[package.extras] +all = ["boto3", "cloudpickle", "dask (>=2.22.0)", "distributed (>=2.22.0)", "modin-spreadsheet (>=0.1.0)", "pyarrow", "ray[default] (>=1.13.0)", "rpyc (==4.1.5)", "unidist[mpi] (>=0.2.1)"] +dask = ["dask (>=2.22.0)", "distributed (>=2.22.0)"] +ray = ["pyarrow", "ray[default] (>=1.13.0)"] +remote = ["boto3", "cloudpickle", "rpyc (==4.1.5)"] +spreadsheet = ["modin-spreadsheet (>=0.1.0)"] +sql = ["dfsql (>=0.4.2)", "pyparsing (<=2.4.7)"] +unidist = ["unidist[mpi] (>=0.2.1)"] + +[[package]] +name = "msgpack" +version = "1.0.7" +description = "MessagePack serializer" +category = "main" +optional = true +python-versions = ">=3.8" +files = [ + {file = "msgpack-1.0.7-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:04ad6069c86e531682f9e1e71b71c1c3937d6014a7c3e9edd2aa81ad58842862"}, + {file = "msgpack-1.0.7-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:cca1b62fe70d761a282496b96a5e51c44c213e410a964bdffe0928e611368329"}, + {file = "msgpack-1.0.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e50ebce52f41370707f1e21a59514e3375e3edd6e1832f5e5235237db933c98b"}, + {file = "msgpack-1.0.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4a7b4f35de6a304b5533c238bee86b670b75b03d31b7797929caa7a624b5dda6"}, + {file = "msgpack-1.0.7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:28efb066cde83c479dfe5a48141a53bc7e5f13f785b92ddde336c716663039ee"}, + {file = "msgpack-1.0.7-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4cb14ce54d9b857be9591ac364cb08dc2d6a5c4318c1182cb1d02274029d590d"}, + {file = "msgpack-1.0.7-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:b573a43ef7c368ba4ea06050a957c2a7550f729c31f11dd616d2ac4aba99888d"}, + {file = "msgpack-1.0.7-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:ccf9a39706b604d884d2cb1e27fe973bc55f2890c52f38df742bc1d79ab9f5e1"}, + {file = "msgpack-1.0.7-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:cb70766519500281815dfd7a87d3a178acf7ce95390544b8c90587d76b227681"}, + {file = "msgpack-1.0.7-cp310-cp310-win32.whl", hash = "sha256:b610ff0f24e9f11c9ae653c67ff8cc03c075131401b3e5ef4b82570d1728f8a9"}, + {file = "msgpack-1.0.7-cp310-cp310-win_amd64.whl", hash = "sha256:a40821a89dc373d6427e2b44b572efc36a2778d3f543299e2f24eb1a5de65415"}, + {file = "msgpack-1.0.7-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:576eb384292b139821c41995523654ad82d1916da6a60cff129c715a6223ea84"}, + {file = "msgpack-1.0.7-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:730076207cb816138cf1af7f7237b208340a2c5e749707457d70705715c93b93"}, + {file = "msgpack-1.0.7-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:85765fdf4b27eb5086f05ac0491090fc76f4f2b28e09d9350c31aac25a5aaff8"}, + {file = "msgpack-1.0.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3476fae43db72bd11f29a5147ae2f3cb22e2f1a91d575ef130d2bf49afd21c46"}, + {file = "msgpack-1.0.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6d4c80667de2e36970ebf74f42d1088cc9ee7ef5f4e8c35eee1b40eafd33ca5b"}, + {file = "msgpack-1.0.7-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5b0bf0effb196ed76b7ad883848143427a73c355ae8e569fa538365064188b8e"}, + {file = "msgpack-1.0.7-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:f9a7c509542db4eceed3dcf21ee5267ab565a83555c9b88a8109dcecc4709002"}, + {file = "msgpack-1.0.7-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:84b0daf226913133f899ea9b30618722d45feffa67e4fe867b0b5ae83a34060c"}, + {file = "msgpack-1.0.7-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:ec79ff6159dffcc30853b2ad612ed572af86c92b5168aa3fc01a67b0fa40665e"}, + {file = "msgpack-1.0.7-cp311-cp311-win32.whl", hash = "sha256:3e7bf4442b310ff154b7bb9d81eb2c016b7d597e364f97d72b1acc3817a0fdc1"}, + {file = "msgpack-1.0.7-cp311-cp311-win_amd64.whl", hash = "sha256:3f0c8c6dfa6605ab8ff0611995ee30d4f9fcff89966cf562733b4008a3d60d82"}, + {file = "msgpack-1.0.7-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:f0936e08e0003f66bfd97e74ee530427707297b0d0361247e9b4f59ab78ddc8b"}, + {file = "msgpack-1.0.7-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:98bbd754a422a0b123c66a4c341de0474cad4a5c10c164ceed6ea090f3563db4"}, + {file = "msgpack-1.0.7-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b291f0ee7961a597cbbcc77709374087fa2a9afe7bdb6a40dbbd9b127e79afee"}, + {file = "msgpack-1.0.7-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ebbbba226f0a108a7366bf4b59bf0f30a12fd5e75100c630267d94d7f0ad20e5"}, + {file = "msgpack-1.0.7-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1e2d69948e4132813b8d1131f29f9101bc2c915f26089a6d632001a5c1349672"}, + {file = "msgpack-1.0.7-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bdf38ba2d393c7911ae989c3bbba510ebbcdf4ecbdbfec36272abe350c454075"}, + {file = "msgpack-1.0.7-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:993584fc821c58d5993521bfdcd31a4adf025c7d745bbd4d12ccfecf695af5ba"}, + {file = "msgpack-1.0.7-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:52700dc63a4676669b341ba33520f4d6e43d3ca58d422e22ba66d1736b0a6e4c"}, + {file = "msgpack-1.0.7-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:e45ae4927759289c30ccba8d9fdce62bb414977ba158286b5ddaf8df2cddb5c5"}, + {file = "msgpack-1.0.7-cp312-cp312-win32.whl", hash = "sha256:27dcd6f46a21c18fa5e5deed92a43d4554e3df8d8ca5a47bf0615d6a5f39dbc9"}, + {file = "msgpack-1.0.7-cp312-cp312-win_amd64.whl", hash = "sha256:7687e22a31e976a0e7fc99c2f4d11ca45eff652a81eb8c8085e9609298916dcf"}, + {file = "msgpack-1.0.7-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5b6ccc0c85916998d788b295765ea0e9cb9aac7e4a8ed71d12e7d8ac31c23c95"}, + {file = "msgpack-1.0.7-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:235a31ec7db685f5c82233bddf9858748b89b8119bf4538d514536c485c15fe0"}, + {file = "msgpack-1.0.7-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:cab3db8bab4b7e635c1c97270d7a4b2a90c070b33cbc00c99ef3f9be03d3e1f7"}, + {file = "msgpack-1.0.7-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0bfdd914e55e0d2c9e1526de210f6fe8ffe9705f2b1dfcc4aecc92a4cb4b533d"}, + {file = "msgpack-1.0.7-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:36e17c4592231a7dbd2ed09027823ab295d2791b3b1efb2aee874b10548b7524"}, + {file = "msgpack-1.0.7-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:38949d30b11ae5f95c3c91917ee7a6b239f5ec276f271f28638dec9156f82cfc"}, + {file = "msgpack-1.0.7-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:ff1d0899f104f3921d94579a5638847f783c9b04f2d5f229392ca77fba5b82fc"}, + {file = "msgpack-1.0.7-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:dc43f1ec66eb8440567186ae2f8c447d91e0372d793dfe8c222aec857b81a8cf"}, + {file = "msgpack-1.0.7-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:dd632777ff3beaaf629f1ab4396caf7ba0bdd075d948a69460d13d44357aca4c"}, + {file = "msgpack-1.0.7-cp38-cp38-win32.whl", hash = "sha256:4e71bc4416de195d6e9b4ee93ad3f2f6b2ce11d042b4d7a7ee00bbe0358bd0c2"}, + {file = "msgpack-1.0.7-cp38-cp38-win_amd64.whl", hash = "sha256:8f5b234f567cf76ee489502ceb7165c2a5cecec081db2b37e35332b537f8157c"}, + {file = "msgpack-1.0.7-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:bfef2bb6ef068827bbd021017a107194956918ab43ce4d6dc945ffa13efbc25f"}, + {file = "msgpack-1.0.7-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:484ae3240666ad34cfa31eea7b8c6cd2f1fdaae21d73ce2974211df099a95d81"}, + {file = "msgpack-1.0.7-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3967e4ad1aa9da62fd53e346ed17d7b2e922cba5ab93bdd46febcac39be636fc"}, + {file = "msgpack-1.0.7-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8dd178c4c80706546702c59529ffc005681bd6dc2ea234c450661b205445a34d"}, + {file = "msgpack-1.0.7-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f6ffbc252eb0d229aeb2f9ad051200668fc3a9aaa8994e49f0cb2ffe2b7867e7"}, + {file = "msgpack-1.0.7-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:822ea70dc4018c7e6223f13affd1c5c30c0f5c12ac1f96cd8e9949acddb48a61"}, + {file = "msgpack-1.0.7-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:384d779f0d6f1b110eae74cb0659d9aa6ff35aaf547b3955abf2ab4c901c4819"}, + {file = "msgpack-1.0.7-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:f64e376cd20d3f030190e8c32e1c64582eba56ac6dc7d5b0b49a9d44021b52fd"}, + {file = "msgpack-1.0.7-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5ed82f5a7af3697b1c4786053736f24a0efd0a1b8a130d4c7bfee4b9ded0f08f"}, + {file = "msgpack-1.0.7-cp39-cp39-win32.whl", hash = "sha256:f26a07a6e877c76a88e3cecac8531908d980d3d5067ff69213653649ec0f60ad"}, + {file = "msgpack-1.0.7-cp39-cp39-win_amd64.whl", hash = "sha256:1dc93e8e4653bdb5910aed79f11e165c85732067614f180f70534f056da97db3"}, + {file = "msgpack-1.0.7.tar.gz", hash = "sha256:572efc93db7a4d27e404501975ca6d2d9775705c2d922390d878fcf768d92c87"}, +] + [[package]] name = "multidict" version = "6.0.4" description = "multidict implementation" +category = "main" optional = true python-versions = ">=3.7" files = [ @@ -2893,6 +3186,7 @@ files = [ name = "multitasking" version = "0.0.11" description = "Non-blocking Python methods using decorators" +category = "main" optional = true python-versions = "*" files = [ @@ -2904,6 +3198,7 @@ files = [ name = "mypy-extensions" version = "1.0.0" description = "Type system extensions for programs checked with the mypy type checker." +category = "main" optional = true python-versions = ">=3.5" files = [ @@ -2915,6 +3210,7 @@ files = [ name = "nodeenv" version = "1.8.0" description = "Node.js virtual environment builder" +category = "dev" optional = false python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*" files = [ @@ -2929,6 +3225,7 @@ setuptools = "*" name = "numexpr" version = "2.8.7" description = "Fast numerical expression evaluator for NumPy" +category = "main" optional = true python-versions = ">=3.9" files = [ @@ -2970,6 +3267,7 @@ numpy = ">=1.13.3" name = "numpy" version = "1.25.2" description = "Fundamental package for array computing in Python" +category = "main" optional = false python-versions = ">=3.9" files = [ @@ -3000,10 +3298,23 @@ files = [ {file = "numpy-1.25.2.tar.gz", hash = "sha256:fd608e19c8d7c55021dffd43bfe5492fab8cc105cc8986f813f8c3c048b38760"}, ] +[[package]] +name = "nvidia-ml-py" +version = "12.535.133" +description = "Python Bindings for the NVIDIA Management Library" +category = "main" +optional = true +python-versions = "*" +files = [ + {file = "nvidia-ml-py-12.535.133.tar.gz", hash = "sha256:b1559af0d57dd20955bf58d05afff7b166ddd44947eb3051c9905638799eb1dc"}, + {file = "nvidia_ml_py-12.535.133-py3-none-any.whl", hash = "sha256:91d808d3f246d30bead2a0a2540b74b9e9fc584a9c3f1f55abfc2940c4e44fd2"}, +] + [[package]] name = "oauthlib" version = "3.2.2" description = "A generic, spec-compliant, thorough implementation of the OAuth request-signing logic" +category = "main" optional = true python-versions = ">=3.6" files = [ @@ -3020,6 +3331,7 @@ signedtoken = ["cryptography (>=3.0.0)", "pyjwt (>=2.0.0,<3)"] name = "openai" version = "1.3.0" description = "The official Python library for the openai API" +category = "main" optional = false python-versions = ">=3.7.1" files = [ @@ -3042,6 +3354,7 @@ datalib = ["numpy (>=1)", "pandas (>=1.2.3)", "pandas-stubs (>=1.1.0.11)"] name = "openapi-schema-pydantic" version = "1.2.4" description = "OpenAPI (v3) specification schema as pydantic class" +category = "main" optional = true python-versions = ">=3.6.1" files = [ @@ -3052,10 +3365,40 @@ files = [ [package.dependencies] pydantic = ">=1.8.2" +[[package]] +name = "opencensus" +version = "0.11.4" +description = "A stats collection and distributed tracing framework" +category = "main" +optional = true +python-versions = "*" +files = [ + {file = "opencensus-0.11.4-py2.py3-none-any.whl", hash = "sha256:a18487ce68bc19900336e0ff4655c5a116daf10c1b3685ece8d971bddad6a864"}, + {file = "opencensus-0.11.4.tar.gz", hash = "sha256:cbef87d8b8773064ab60e5c2a1ced58bbaa38a6d052c41aec224958ce544eff2"}, +] + +[package.dependencies] +google-api-core = {version = ">=1.0.0,<3.0.0", markers = "python_version >= \"3.6\""} +opencensus-context = ">=0.1.3" +six = ">=1.16,<2.0" + +[[package]] +name = "opencensus-context" +version = "0.1.3" +description = "OpenCensus Runtime Context" +category = "main" +optional = true +python-versions = "*" +files = [ + {file = "opencensus-context-0.1.3.tar.gz", hash = "sha256:a03108c3c10d8c80bb5ddf5c8a1f033161fa61972a9917f9b9b3a18517f0088c"}, + {file = "opencensus_context-0.1.3-py2.py3-none-any.whl", hash = "sha256:073bb0590007af276853009fac7e4bab1d523c3f03baf4cb4511ca38967c6039"}, +] + [[package]] name = "openpyxl" version = "3.1.2" description = "A Python library to read/write Excel 2010 xlsx/xlsm files" +category = "main" optional = true python-versions = ">=3.6" files = [ @@ -3070,6 +3413,7 @@ et-xmlfile = "*" name = "oscrypto" version = "1.3.0" description = "TLS (SSL) sockets, key generation, encryption, decryption, signing, verification and KDFs using the OS crypto libraries. Does not require a compiler, and relies on the OS for patching. Works on Windows, OS X and Linux/BSD." +category = "main" optional = true python-versions = "*" files = [ @@ -3084,6 +3428,7 @@ asn1crypto = ">=1.5.1" name = "packaging" version = "23.2" description = "Core utilities for Python packages" +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -3095,6 +3440,7 @@ files = [ name = "pandas" version = "1.5.3" description = "Powerful data structures for data analysis, time series, and statistics" +category = "main" optional = false python-versions = ">=3.8" files = [ @@ -3129,8 +3475,8 @@ files = [ [package.dependencies] numpy = [ - {version = ">=1.21.0", markers = "python_version >= \"3.10\" and python_version < \"3.11\""}, {version = ">=1.20.3", markers = "python_version < \"3.10\""}, + {version = ">=1.21.0", markers = "python_version >= \"3.10\""}, {version = ">=1.23.2", markers = "python_version >= \"3.11\""}, ] python-dateutil = ">=2.8.1" @@ -3143,6 +3489,7 @@ test = ["hypothesis (>=5.5.3)", "pytest (>=6.0)", "pytest-xdist (>=1.31)"] name = "parso" version = "0.8.3" description = "A Python Parser" +category = "main" optional = false python-versions = ">=3.6" files = [ @@ -3158,6 +3505,7 @@ testing = ["docopt", "pytest (<6.0.0)"] name = "pathspec" version = "0.11.2" description = "Utility library for gitignore style pattern matching of file paths." +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -3169,6 +3517,7 @@ files = [ name = "patsy" version = "0.5.3" description = "A Python package for describing statistical models and for building design matrices." +category = "main" optional = true python-versions = "*" files = [ @@ -3187,6 +3536,7 @@ test = ["pytest", "pytest-cov", "scipy"] name = "peewee" version = "3.17.0" description = "a little orm" +category = "main" optional = true python-versions = "*" files = [ @@ -3197,6 +3547,7 @@ files = [ name = "pexpect" version = "4.8.0" description = "Pexpect allows easy control of interactive console applications." +category = "main" optional = false python-versions = "*" files = [ @@ -3211,6 +3562,7 @@ ptyprocess = ">=0.5" name = "pillow" version = "10.1.0" description = "Python Imaging Library (Fork)" +category = "main" optional = false python-versions = ">=3.8" files = [ @@ -3278,6 +3630,7 @@ tests = ["check-manifest", "coverage", "defusedxml", "markdown2", "olefile", "pa name = "platformdirs" version = "3.11.0" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -3293,6 +3646,7 @@ test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4)", "pytest-co name = "plotly" version = "5.18.0" description = "An open-source, interactive data visualization library for Python" +category = "main" optional = true python-versions = ">=3.6" files = [ @@ -3308,6 +3662,7 @@ tenacity = ">=6.2.0" name = "pluggy" version = "1.3.0" description = "plugin and hook calling mechanisms for python" +category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -3323,6 +3678,7 @@ testing = ["pytest", "pytest-benchmark"] name = "polars" version = "0.18.15" description = "Blazingly fast DataFrame library" +category = "main" optional = true python-versions = ">=3.8" files = [ @@ -3355,6 +3711,7 @@ xlsxwriter = ["xlsxwriter"] name = "pre-commit" version = "3.5.0" description = "A framework for managing and maintaining multi-language pre-commit hooks." +category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -3369,10 +3726,26 @@ nodeenv = ">=0.11.1" pyyaml = ">=5.1" virtualenv = ">=20.10.0" +[[package]] +name = "prometheus-client" +version = "0.19.0" +description = "Python client for the Prometheus monitoring system." +category = "main" +optional = true +python-versions = ">=3.8" +files = [ + {file = "prometheus_client-0.19.0-py3-none-any.whl", hash = "sha256:c88b1e6ecf6b41cd8fb5731c7ae919bf66df6ec6fafa555cd6c0e16ca169ae92"}, + {file = "prometheus_client-0.19.0.tar.gz", hash = "sha256:4585b0d1223148c27a225b10dbec5ae9bc4c81a99a3fa80774fa6209935324e1"}, +] + +[package.extras] +twisted = ["twisted"] + [[package]] name = "prompt-toolkit" version = "3.0.39" description = "Library for building powerful interactive command lines in Python" +category = "main" optional = false python-versions = ">=3.7.0" files = [ @@ -3387,7 +3760,8 @@ wcwidth = "*" name = "proto-plus" version = "1.22.3" description = "Beautiful, Pythonic protocol buffers." -optional = false +category = "main" +optional = true python-versions = ">=3.6" files = [ {file = "proto-plus-1.22.3.tar.gz", hash = "sha256:fdcd09713cbd42480740d2fe29c990f7fbd885a67efc328aa8be6ee3e9f76a6b"}, @@ -3404,7 +3778,8 @@ testing = ["google-api-core[grpc] (>=1.31.5)"] name = "protobuf" version = "4.24.4" description = "" -optional = false +category = "main" +optional = true python-versions = ">=3.7" files = [ {file = "protobuf-4.24.4-cp310-abi3-win32.whl", hash = "sha256:ec9912d5cb6714a5710e28e592ee1093d68c5ebfeda61983b3f40331da0b1ebb"}, @@ -3422,10 +3797,40 @@ files = [ {file = "protobuf-4.24.4.tar.gz", hash = "sha256:5a70731910cd9104762161719c3d883c960151eea077134458503723b60e3667"}, ] +[[package]] +name = "psutil" +version = "5.9.8" +description = "Cross-platform lib for process and system monitoring in Python." +category = "main" +optional = true +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" +files = [ + {file = "psutil-5.9.8-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:26bd09967ae00920df88e0352a91cff1a78f8d69b3ecabbfe733610c0af486c8"}, + {file = "psutil-5.9.8-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:05806de88103b25903dff19bb6692bd2e714ccf9e668d050d144012055cbca73"}, + {file = "psutil-5.9.8-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:611052c4bc70432ec770d5d54f64206aa7203a101ec273a0cd82418c86503bb7"}, + {file = "psutil-5.9.8-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:50187900d73c1381ba1454cf40308c2bf6f34268518b3f36a9b663ca87e65e36"}, + {file = "psutil-5.9.8-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:02615ed8c5ea222323408ceba16c60e99c3f91639b07da6373fb7e6539abc56d"}, + {file = "psutil-5.9.8-cp27-none-win32.whl", hash = "sha256:36f435891adb138ed3c9e58c6af3e2e6ca9ac2f365efe1f9cfef2794e6c93b4e"}, + {file = "psutil-5.9.8-cp27-none-win_amd64.whl", hash = "sha256:bd1184ceb3f87651a67b2708d4c3338e9b10c5df903f2e3776b62303b26cb631"}, + {file = "psutil-5.9.8-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:aee678c8720623dc456fa20659af736241f575d79429a0e5e9cf88ae0605cc81"}, + {file = "psutil-5.9.8-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8cb6403ce6d8e047495a701dc7c5bd788add903f8986d523e3e20b98b733e421"}, + {file = "psutil-5.9.8-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d06016f7f8625a1825ba3732081d77c94589dca78b7a3fc072194851e88461a4"}, + {file = "psutil-5.9.8-cp36-cp36m-win32.whl", hash = "sha256:7d79560ad97af658a0f6adfef8b834b53f64746d45b403f225b85c5c2c140eee"}, + {file = "psutil-5.9.8-cp36-cp36m-win_amd64.whl", hash = "sha256:27cc40c3493bb10de1be4b3f07cae4c010ce715290a5be22b98493509c6299e2"}, + {file = "psutil-5.9.8-cp37-abi3-win32.whl", hash = "sha256:bc56c2a1b0d15aa3eaa5a60c9f3f8e3e565303b465dbf57a1b730e7a2b9844e0"}, + {file = "psutil-5.9.8-cp37-abi3-win_amd64.whl", hash = "sha256:8db4c1b57507eef143a15a6884ca10f7c73876cdf5d51e713151c1236a0e68cf"}, + {file = "psutil-5.9.8-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:d16bbddf0693323b8c6123dd804100241da461e41d6e332fb0ba6058f630f8c8"}, + {file = "psutil-5.9.8.tar.gz", hash = "sha256:6be126e3225486dff286a8fb9a06246a5253f4c7c53b475ea5f5ac934e64194c"}, +] + +[package.extras] +test = ["enum34", "ipaddress", "mock", "pywin32", "wmi"] + [[package]] name = "psycopg2" version = "2.9.9" description = "psycopg2 - Python-PostgreSQL Database Adapter" +category = "main" optional = true python-versions = ">=3.7" files = [ @@ -3433,6 +3838,8 @@ files = [ {file = "psycopg2-2.9.9-cp310-cp310-win_amd64.whl", hash = "sha256:426f9f29bde126913a20a96ff8ce7d73fd8a216cfb323b1f04da402d452853c3"}, {file = "psycopg2-2.9.9-cp311-cp311-win32.whl", hash = "sha256:ade01303ccf7ae12c356a5e10911c9e1c51136003a9a1d92f7aa9d010fb98372"}, {file = "psycopg2-2.9.9-cp311-cp311-win_amd64.whl", hash = "sha256:121081ea2e76729acfb0673ff33755e8703d45e926e416cb59bae3a86c6a4981"}, + {file = "psycopg2-2.9.9-cp312-cp312-win32.whl", hash = "sha256:d735786acc7dd25815e89cc4ad529a43af779db2e25aa7c626de864127e5a024"}, + {file = "psycopg2-2.9.9-cp312-cp312-win_amd64.whl", hash = "sha256:a7653d00b732afb6fc597e29c50ad28087dcb4fbfb28e86092277a559ae4e693"}, {file = "psycopg2-2.9.9-cp37-cp37m-win32.whl", hash = "sha256:5e0d98cade4f0e0304d7d6f25bbfbc5bd186e07b38eac65379309c4ca3193efa"}, {file = "psycopg2-2.9.9-cp37-cp37m-win_amd64.whl", hash = "sha256:7e2dacf8b009a1c1e843b5213a87f7c544b2b042476ed7755be813eaf4e8347a"}, {file = "psycopg2-2.9.9-cp38-cp38-win32.whl", hash = "sha256:ff432630e510709564c01dafdbe996cb552e0b9f3f065eb89bdce5bd31fabf4c"}, @@ -3446,6 +3853,7 @@ files = [ name = "ptyprocess" version = "0.7.0" description = "Run a subprocess in a pseudo terminal" +category = "main" optional = false python-versions = "*" files = [ @@ -3457,6 +3865,7 @@ files = [ name = "pure-eval" version = "0.2.2" description = "Safely evaluate AST nodes without side effects" +category = "main" optional = false python-versions = "*" files = [ @@ -3467,10 +3876,28 @@ files = [ [package.extras] tests = ["pytest"] +[[package]] +name = "py-spy" +version = "0.3.14" +description = "Sampling profiler for Python programs" +category = "main" +optional = true +python-versions = "*" +files = [ + {file = "py_spy-0.3.14-py2.py3-none-macosx_10_7_x86_64.whl", hash = "sha256:5b342cc5feb8d160d57a7ff308de153f6be68dcf506ad02b4d67065f2bae7f45"}, + {file = "py_spy-0.3.14-py2.py3-none-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:fe7efe6c91f723442259d428bf1f9ddb9c1679828866b353d539345ca40d9dd2"}, + {file = "py_spy-0.3.14-py2.py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:590905447241d789d9de36cff9f52067b6f18d8b5e9fb399242041568d414461"}, + {file = "py_spy-0.3.14-py2.py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fd6211fe7f587b3532ba9d300784326d9a6f2b890af7bf6fff21a029ebbc812b"}, + {file = "py_spy-0.3.14-py2.py3-none-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3e8e48032e71c94c3dd51694c39e762e4bbfec250df5bf514adcdd64e79371e0"}, + {file = "py_spy-0.3.14-py2.py3-none-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:f59b0b52e56ba9566305236375e6fc68888261d0d36b5addbe3cf85affbefc0e"}, + {file = "py_spy-0.3.14-py2.py3-none-win_amd64.whl", hash = "sha256:8f5b311d09f3a8e33dbd0d44fc6e37b715e8e0c7efefafcda8bfd63b31ab5a31"}, +] + [[package]] name = "pyarrow" version = "13.0.0" description = "Python library for Apache Arrow" +category = "main" optional = true python-versions = ">=3.8" files = [ @@ -3512,7 +3939,8 @@ numpy = ">=1.16.6" name = "pyasn1" version = "0.5.0" description = "Pure-Python implementation of ASN.1 types and DER/BER/CER codecs (X.208)" -optional = false +category = "main" +optional = true python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" files = [ {file = "pyasn1-0.5.0-py2.py3-none-any.whl", hash = "sha256:87a2121042a1ac9358cabcaf1d07680ff97ee6404333bacca15f76aa8ad01a57"}, @@ -3523,7 +3951,8 @@ files = [ name = "pyasn1-modules" version = "0.3.0" description = "A collection of ASN.1-based protocols modules" -optional = false +category = "main" +optional = true python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" files = [ {file = "pyasn1_modules-0.3.0-py2.py3-none-any.whl", hash = "sha256:d3ccd6ed470d9ffbc716be08bd90efbd44d0734bc9303818f7336070984a162d"}, @@ -3537,6 +3966,7 @@ pyasn1 = ">=0.4.6,<0.6.0" name = "pycparser" version = "2.21" description = "C parser in Python" +category = "main" optional = true python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -3548,6 +3978,7 @@ files = [ name = "pycryptodomex" version = "3.19.0" description = "Cryptographic library for Python" +category = "main" optional = true python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" files = [ @@ -3589,6 +4020,7 @@ files = [ name = "pydantic" version = "1.10.13" description = "Data validation and settings management using python type hints" +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -3641,6 +4073,7 @@ email = ["email-validator (>=1.0.3)"] name = "pydeck" version = "0.8.0" description = "Widget for deck.gl maps" +category = "main" optional = true python-versions = ">=3.7" files = [ @@ -3660,6 +4093,7 @@ jupyter = ["ipykernel (>=5.1.2)", "ipython (>=5.8.0)", "ipywidgets (>=7,<8)", "t name = "pygments" version = "2.16.1" description = "Pygments is a syntax highlighting package written in Python." +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -3674,6 +4108,7 @@ plugins = ["importlib-metadata"] name = "pyhive" version = "0.7.0" description = "Python interface to Hive" +category = "main" optional = true python-versions = "*" files = [ @@ -3696,6 +4131,7 @@ trino = ["requests (>=1.0.0)"] name = "pyjwt" version = "2.8.0" description = "JSON Web Token implementation in Python" +category = "main" optional = true python-versions = ">=3.7" files = [ @@ -3713,6 +4149,7 @@ tests = ["coverage[toml] (==5.0.4)", "pytest (>=6.0.0,<7.0.0)"] name = "pymdown-extensions" version = "10.3.1" description = "Extension pack for Python Markdown." +category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -3731,6 +4168,7 @@ extra = ["pygments (>=2.12)"] name = "pymysql" version = "1.1.0" description = "Pure Python MySQL Driver" +category = "main" optional = true python-versions = ">=3.7" files = [ @@ -3746,6 +4184,7 @@ rsa = ["cryptography"] name = "pyopenssl" version = "23.3.0" description = "Python wrapper module around the OpenSSL library" +category = "main" optional = true python-versions = ">=3.7" files = [ @@ -3764,6 +4203,7 @@ test = ["flaky", "pretend", "pytest (>=3.0.1)"] name = "pyparsing" version = "3.1.1" description = "pyparsing module - Classes and methods to define and execute parsing grammars" +category = "main" optional = false python-versions = ">=3.6.8" files = [ @@ -3778,6 +4218,7 @@ diagrams = ["jinja2", "railroad-diagrams"] name = "pytest" version = "7.4.3" description = "pytest: simple powerful testing with Python" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -3800,6 +4241,7 @@ testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "no name = "pytest-env" version = "0.8.2" description = "py.test plugin that allows you to add environment variables." +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -3817,6 +4259,7 @@ test = ["coverage (>=7.2.7)", "pytest-mock (>=3.10)"] name = "pytest-mock" version = "3.12.0" description = "Thin-wrapper around the mock package for easier use with pytest" +category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -3834,6 +4277,7 @@ dev = ["pre-commit", "pytest-asyncio", "tox"] name = "python-dateutil" version = "2.8.2" description = "Extensions to the standard Python datetime module" +category = "main" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" files = [ @@ -3848,6 +4292,7 @@ six = ">=1.5" name = "python-dotenv" version = "1.0.0" description = "Read key-value pairs from a .env file and set them as environment variables" +category = "main" optional = false python-versions = ">=3.8" files = [ @@ -3862,6 +4307,7 @@ cli = ["click (>=5.0)"] name = "pytz" version = "2023.3.post1" description = "World timezone definitions, modern and historical" +category = "main" optional = false python-versions = "*" files = [ @@ -3873,6 +4319,7 @@ files = [ name = "pyyaml" version = "6.0.1" description = "YAML parser and emitter for Python" +category = "main" optional = false python-versions = ">=3.6" files = [ @@ -3922,6 +4369,7 @@ files = [ name = "pyyaml-env-tag" version = "0.1" description = "A custom YAML tag for referencing environment variables in YAML files. " +category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -3932,10 +4380,81 @@ files = [ [package.dependencies] pyyaml = "*" +[[package]] +name = "ray" +version = "2.9.1" +description = "Ray provides a simple, universal API for building distributed applications." +category = "main" +optional = true +python-versions = ">=3.8" +files = [ + {file = "ray-2.9.1-cp310-cp310-macosx_10_15_x86_64.whl", hash = "sha256:586d462e555ba51840fbfce4d62b0ed886930e520517b34a88befeb4fb4c244a"}, + {file = "ray-2.9.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:eb3dbb0639fedf2bc2b98784bb94dbdc2c2a470c91c6b54e12c51d0a0069aebf"}, + {file = "ray-2.9.1-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:74a1d12117e87ffd7411fadb96b40bf66ca7d32fdb2049cd3dd66705a0923f9e"}, + {file = "ray-2.9.1-cp310-cp310-manylinux2014_x86_64.whl", hash = "sha256:50436361012cefdd90ebb8c920711cb334cf64d7a5677c9b72e60d8c9e23ee70"}, + {file = "ray-2.9.1-cp310-cp310-win_amd64.whl", hash = "sha256:8760d406d782cbf6684c2b98c09bd4893a14c009c2287cbe65aa11cb6e7a571f"}, + {file = "ray-2.9.1-cp311-cp311-macosx_10_15_x86_64.whl", hash = "sha256:cd974b141088b752d1eed4d6d0cf94e8ed63b97d5f1d5f5844970f3f373dde87"}, + {file = "ray-2.9.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9e9d99496effa490f94e43c10a09964146269733cd24610d3b6902b566190a9b"}, + {file = "ray-2.9.1-cp311-cp311-manylinux2014_aarch64.whl", hash = "sha256:1907649d69efdc1b9ffbc03db086f6d768216cb73908ebd4038ac5030effef9e"}, + {file = "ray-2.9.1-cp311-cp311-manylinux2014_x86_64.whl", hash = "sha256:fabc520990c1b98dde592813d62737e5e817460e0ac359f32ba029ace292cbe2"}, + {file = "ray-2.9.1-cp311-cp311-win_amd64.whl", hash = "sha256:bb0c83c0f40a5ab4139f9357d3fd4ef8a2e8b46f5c023fe45f305fe2297c520c"}, + {file = "ray-2.9.1-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:e7b1f3284b35aa98968ba8cdc8ea43f6a0afe42090711f2db678d3f73c5cb8f9"}, + {file = "ray-2.9.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:38b7a3282783f74cfd232b0e04bfde40e51e13bf3f83423ce97b2ae577a4a345"}, + {file = "ray-2.9.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:177a5a018d9ff0eef822b279f7af62ca5f5935e4d83246105868017ee298faae"}, + {file = "ray-2.9.1-cp38-cp38-manylinux2014_x86_64.whl", hash = "sha256:917efa43b88d5f5de19a5ffa7c4aa0aa28399a0c33595d83c26d5b9f79dfb861"}, + {file = "ray-2.9.1-cp38-cp38-win_amd64.whl", hash = "sha256:94961e948763a101d99f9e9cfe8ba1d789f5ca030ebc8089fbf02da1d085f870"}, + {file = "ray-2.9.1-cp39-cp39-macosx_10_15_x86_64.whl", hash = "sha256:9efc8a2035521c5d66b625222a7b03c7759f1c0969d382697fd688577bea21a4"}, + {file = "ray-2.9.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4aa6a66fb20a35ded74674ad8d48e813afd4e65a0bc8ccd99e981bccf656ce13"}, + {file = "ray-2.9.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:f063f0140bc1ea0b02f8ee59abd8e964866c1ca6c768a2b0fd19b691cf9feace"}, + {file = "ray-2.9.1-cp39-cp39-manylinux2014_x86_64.whl", hash = "sha256:334c47ca24dbe59e295e2d46152c09ff113f2c2cde873181da11c24dfdacfcfb"}, + {file = "ray-2.9.1-cp39-cp39-win_amd64.whl", hash = "sha256:c2e360743ae25babfcb436250275550fd96a567c830393ff5dd7fc708875c4c9"}, +] + +[package.dependencies] +aiohttp = {version = ">=3.7", optional = true, markers = "extra == \"default\""} +aiohttp-cors = {version = "*", optional = true, markers = "extra == \"default\""} +aiosignal = "*" +click = ">=7.0" +colorful = {version = "*", optional = true, markers = "extra == \"default\""} +filelock = "*" +frozenlist = "*" +gpustat = {version = ">=1.0.0", optional = true, markers = "extra == \"default\""} +grpcio = [ + {version = ">=1.32.0", optional = true, markers = "python_version < \"3.10\" and extra == \"default\""}, + {version = ">=1.42.0", optional = true, markers = "python_version >= \"3.10\" and extra == \"default\""}, +] +jsonschema = "*" +msgpack = ">=1.0.0,<2.0.0" +opencensus = {version = "*", optional = true, markers = "extra == \"default\""} +packaging = "*" +prometheus-client = {version = ">=0.7.1", optional = true, markers = "extra == \"default\""} +protobuf = ">=3.15.3,<3.19.5 || >3.19.5" +py-spy = {version = ">=0.2.0", optional = true, markers = "extra == \"default\""} +pydantic = {version = "<2.0.0 || >=2.5.0,<3", optional = true, markers = "extra == \"default\""} +pyyaml = "*" +requests = "*" +smart-open = {version = "*", optional = true, markers = "extra == \"default\""} +virtualenv = {version = ">=20.0.24,<20.21.1 || >20.21.1", optional = true, markers = "extra == \"default\""} + +[package.extras] +air = ["aiohttp (>=3.7)", "aiohttp-cors", "aiorwlock", "colorful", "fastapi", "fsspec", "gpustat (>=1.0.0)", "grpcio (>=1.32.0)", "grpcio (>=1.42.0)", "numpy (>=1.20)", "opencensus", "pandas", "pandas (>=1.3)", "prometheus-client (>=0.7.1)", "py-spy (>=0.2.0)", "pyarrow (>=6.0.1)", "pydantic (<2.0.0 || >=2.5.0,<3)", "requests", "smart-open", "starlette", "tensorboardX (>=1.9)", "uvicorn[standard]", "virtualenv (>=20.0.24,!=20.21.1)", "watchfiles"] +all = ["aiohttp (>=3.7)", "aiohttp-cors", "aiorwlock", "colorful", "dm-tree", "fastapi", "fsspec", "gpustat (>=1.0.0)", "grpcio (!=1.56.0)", "grpcio (>=1.32.0)", "grpcio (>=1.42.0)", "gymnasium (==0.28.1)", "lz4", "numpy (>=1.20)", "opencensus", "opentelemetry-api", "opentelemetry-exporter-otlp", "opentelemetry-sdk", "pandas", "pandas (>=1.3)", "prometheus-client (>=0.7.1)", "py-spy (>=0.2.0)", "pyarrow (>=6.0.1)", "pydantic (<2.0.0 || >=2.5.0,<3)", "pyyaml", "ray-cpp (==2.9.1)", "requests", "rich", "scikit-image", "scipy", "smart-open", "starlette", "tensorboardX (>=1.9)", "typer", "uvicorn[standard]", "virtualenv (>=20.0.24,!=20.21.1)", "watchfiles"] +client = ["grpcio (!=1.56.0)"] +cpp = ["ray-cpp (==2.9.1)"] +data = ["fsspec", "numpy (>=1.20)", "pandas (>=1.3)", "pyarrow (>=6.0.1)"] +default = ["aiohttp (>=3.7)", "aiohttp-cors", "colorful", "gpustat (>=1.0.0)", "grpcio (>=1.32.0)", "grpcio (>=1.42.0)", "opencensus", "prometheus-client (>=0.7.1)", "py-spy (>=0.2.0)", "pydantic (<2.0.0 || >=2.5.0,<3)", "requests", "smart-open", "virtualenv (>=20.0.24,!=20.21.1)"] +observability = ["opentelemetry-api", "opentelemetry-exporter-otlp", "opentelemetry-sdk"] +rllib = ["dm-tree", "fsspec", "gymnasium (==0.28.1)", "lz4", "pandas", "pyarrow (>=6.0.1)", "pyyaml", "requests", "rich", "scikit-image", "scipy", "tensorboardX (>=1.9)", "typer"] +serve = ["aiohttp (>=3.7)", "aiohttp-cors", "aiorwlock", "colorful", "fastapi", "gpustat (>=1.0.0)", "grpcio (>=1.32.0)", "grpcio (>=1.42.0)", "opencensus", "prometheus-client (>=0.7.1)", "py-spy (>=0.2.0)", "pydantic (<2.0.0 || >=2.5.0,<3)", "requests", "smart-open", "starlette", "uvicorn[standard]", "virtualenv (>=20.0.24,!=20.21.1)", "watchfiles"] +serve-grpc = ["aiohttp (>=3.7)", "aiohttp-cors", "aiorwlock", "colorful", "fastapi", "gpustat (>=1.0.0)", "grpcio (>=1.32.0)", "grpcio (>=1.42.0)", "opencensus", "prometheus-client (>=0.7.1)", "py-spy (>=0.2.0)", "pydantic (<2.0.0 || >=2.5.0,<3)", "requests", "smart-open", "starlette", "uvicorn[standard]", "virtualenv (>=20.0.24,!=20.21.1)", "watchfiles"] +train = ["fsspec", "pandas", "pyarrow (>=6.0.1)", "requests", "tensorboardX (>=1.9)"] +tune = ["fsspec", "pandas", "pyarrow (>=6.0.1)", "requests", "tensorboardX (>=1.9)"] + [[package]] name = "referencing" version = "0.30.2" description = "JSON Referencing + Python" +category = "main" optional = true python-versions = ">=3.8" files = [ @@ -3951,6 +4470,7 @@ rpds-py = ">=0.7.0" name = "requests" version = "2.31.0" description = "Python HTTP for Humans." +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -3972,6 +4492,7 @@ use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] name = "rich" version = "13.6.0" description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" +category = "main" optional = true python-versions = ">=3.7.0" files = [ @@ -3990,6 +4511,7 @@ jupyter = ["ipywidgets (>=7.5.1,<9)"] name = "rpds-py" version = "0.10.6" description = "Python bindings to Rust's persistent data structures (rpds)" +category = "main" optional = true python-versions = ">=3.8" files = [ @@ -4098,7 +4620,8 @@ files = [ name = "rsa" version = "4.9" description = "Pure-Python RSA implementation" -optional = false +category = "main" +optional = true python-versions = ">=3.6,<4" files = [ {file = "rsa-4.9-py3-none-any.whl", hash = "sha256:90260d9058e514786967344d0ef75fa8727eed8a7d2e43ce9f4bcf1b536174f7"}, @@ -4112,6 +4635,7 @@ pyasn1 = ">=0.1.3" name = "ruff" version = "0.1.3" description = "An extremely fast Python linter, written in Rust." +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -4138,6 +4662,7 @@ files = [ name = "scikit-learn" version = "1.3.2" description = "A set of python modules for machine learning and data mining" +category = "main" optional = true python-versions = ">=3.8" files = [ @@ -4185,6 +4710,7 @@ tests = ["black (>=23.3.0)", "matplotlib (>=3.1.3)", "mypy (>=1.3)", "numpydoc ( name = "scipy" version = "1.9.3" description = "Fundamental algorithms for scientific computing in Python" +category = "main" optional = true python-versions = ">=3.8" files = [ @@ -4223,6 +4749,7 @@ test = ["asv", "gmpy2", "mpmath", "pytest", "pytest-cov", "pytest-xdist", "sciki name = "seaborn" version = "0.12.2" description = "Statistical data visualization" +category = "main" optional = true python-versions = ">=3.7" files = [ @@ -4244,6 +4771,7 @@ stats = ["scipy (>=1.3)", "statsmodels (>=0.10)"] name = "setuptools" version = "68.2.2" description = "Easily download, build, install, upgrade, and uninstall Python packages" +category = "main" optional = false python-versions = ">=3.8" files = [ @@ -4260,7 +4788,8 @@ testing-integration = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "jar name = "shapely" version = "2.0.2" description = "Manipulation and analysis of geometric objects" -optional = false +category = "main" +optional = true python-versions = ">=3.7" files = [ {file = "shapely-2.0.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:6ca8cffbe84ddde8f52b297b53f8e0687bd31141abb2c373fd8a9f032df415d6"}, @@ -4310,13 +4839,14 @@ files = [ numpy = ">=1.14" [package.extras] -docs = ["matplotlib", "numpydoc (==1.1.*)", "sphinx", "sphinx-book-theme", "sphinx-remove-toctrees"] +docs = ["matplotlib", "numpydoc (>=1.1.0,<1.2.0)", "sphinx", "sphinx-book-theme", "sphinx-remove-toctrees"] test = ["pytest", "pytest-cov"] [[package]] name = "six" version = "1.16.0" description = "Python 2 and 3 compatibility utilities" +category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" files = [ @@ -4324,10 +4854,33 @@ files = [ {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, ] +[[package]] +name = "smart-open" +version = "6.4.0" +description = "Utils for streaming large files (S3, HDFS, GCS, Azure Blob Storage, gzip, bz2...)" +category = "main" +optional = true +python-versions = ">=3.6,<4.0" +files = [ + {file = "smart_open-6.4.0-py3-none-any.whl", hash = "sha256:8d3ef7e6997e8e42dd55c74166ed21e6ac70664caa32dd940b26d54a8f6b4142"}, + {file = "smart_open-6.4.0.tar.gz", hash = "sha256:be3c92c246fbe80ebce8fbacb180494a481a77fcdcb7c1aadb2ea5b9c2bee8b9"}, +] + +[package.extras] +all = ["azure-common", "azure-core", "azure-storage-blob", "boto3", "google-cloud-storage (>=2.6.0)", "paramiko", "requests"] +azure = ["azure-common", "azure-core", "azure-storage-blob"] +gcs = ["google-cloud-storage (>=2.6.0)"] +http = ["requests"] +s3 = ["boto3"] +ssh = ["paramiko"] +test = ["azure-common", "azure-core", "azure-storage-blob", "boto3", "google-cloud-storage (>=2.6.0)", "moto[server]", "paramiko", "pytest", "pytest-rerunfailures", "requests", "responses"] +webhdfs = ["requests"] + [[package]] name = "smmap" version = "5.0.1" description = "A pure Python implementation of a sliding window memory map manager" +category = "main" optional = true python-versions = ">=3.7" files = [ @@ -4339,6 +4892,7 @@ files = [ name = "sniffio" version = "1.3.0" description = "Sniff out which async library your code is running under" +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -4350,6 +4904,7 @@ files = [ name = "snowflake-connector-python" version = "3.3.1" description = "Snowflake Connector for Python" +category = "main" optional = true python-versions = ">=3.8" files = [ @@ -4406,6 +4961,7 @@ secure-local-storage = ["keyring (!=16.1.0,<25.0.0)"] name = "snowflake-sqlalchemy" version = "1.5.0" description = "Snowflake SQLAlchemy Dialect" +category = "main" optional = true python-versions = ">=3.7" files = [ @@ -4425,6 +4981,7 @@ pandas = ["snowflake-connector-python[pandas] (<4.0.0)"] name = "sortedcontainers" version = "2.4.0" description = "Sorted Containers -- Sorted List, Sorted Dict, Sorted Set" +category = "main" optional = true python-versions = "*" files = [ @@ -4436,6 +4993,7 @@ files = [ name = "soupsieve" version = "2.5" description = "A modern CSS selector implementation for Beautiful Soup." +category = "main" optional = true python-versions = ">=3.8" files = [ @@ -4447,6 +5005,7 @@ files = [ name = "sourcery" version = "1.12.0" description = "Magically refactor Python" +category = "dev" optional = false python-versions = "*" files = [ @@ -4459,6 +5018,7 @@ files = [ name = "sqlalchemy" version = "1.4.50" description = "Database Abstraction Library" +category = "main" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" files = [ @@ -4490,7 +5050,7 @@ files = [ ] [package.dependencies] -greenlet = {version = "!=0.4.17", markers = "python_version >= \"3\" and (platform_machine == \"aarch64\" or platform_machine == \"ppc64le\" or platform_machine == \"x86_64\" or platform_machine == \"amd64\" or platform_machine == \"AMD64\" or platform_machine == \"win32\" or platform_machine == \"WIN32\")"} +greenlet = {version = "!=0.4.17", markers = "python_version >= \"3\" and platform_machine == \"aarch64\" or python_version >= \"3\" and platform_machine == \"ppc64le\" or python_version >= \"3\" and platform_machine == \"x86_64\" or python_version >= \"3\" and platform_machine == \"amd64\" or python_version >= \"3\" and platform_machine == \"AMD64\" or python_version >= \"3\" and platform_machine == \"win32\" or python_version >= \"3\" and platform_machine == \"WIN32\""} [package.extras] aiomysql = ["aiomysql (>=0.2.0)", "greenlet (!=0.4.17)"] @@ -4517,6 +5077,7 @@ sqlcipher = ["sqlcipher3-binary"] name = "sqlalchemy-databricks" version = "0.2.0" description = "SQLAlchemy Dialect for Databricks" +category = "main" optional = true python-versions = ">=3.8,<4.0" files = [ @@ -4533,6 +5094,7 @@ SQLAlchemy = ">=1,<2" name = "stack-data" version = "0.6.3" description = "Extract data from python stack frames and tracebacks for informative displays" +category = "main" optional = false python-versions = "*" files = [ @@ -4552,6 +5114,7 @@ tests = ["cython", "littleutils", "pygments", "pytest", "typeguard"] name = "statsmodels" version = "0.14.0" description = "Statistical computations and models for Python" +category = "main" optional = true python-versions = ">=3.8" files = [ @@ -4580,8 +5143,8 @@ files = [ [package.dependencies] numpy = [ - {version = ">=1.22.3", markers = "python_version == \"3.10\" and platform_system == \"Windows\" and platform_python_implementation != \"PyPy\""}, {version = ">=1.18", markers = "python_version != \"3.10\" or platform_system != \"Windows\" or platform_python_implementation == \"PyPy\""}, + {version = ">=1.22.3", markers = "python_version == \"3.10\" and platform_system == \"Windows\" and platform_python_implementation != \"PyPy\""}, ] packaging = ">=21.3" pandas = ">=1.0" @@ -4597,6 +5160,7 @@ docs = ["ipykernel", "jupyter-client", "matplotlib", "nbconvert", "nbformat", "n name = "streamlit" version = "1.28.0" description = "A faster way to build and share data apps" +category = "main" optional = true python-versions = ">=3.8, !=3.9.7" files = [ @@ -4636,6 +5200,7 @@ snowflake = ["snowflake-connector-python (>=2.8.0)", "snowflake-snowpark-python name = "tenacity" version = "8.2.3" description = "Retry code until it succeeds" +category = "main" optional = true python-versions = ">=3.7" files = [ @@ -4650,6 +5215,7 @@ doc = ["reno", "sphinx", "tornado (>=4.5)"] name = "text-generation" version = "0.6.1" description = "Hugging Face Text Generation Python Client" +category = "main" optional = true python-versions = ">=3.7,<4.0" files = [ @@ -4666,6 +5232,7 @@ pydantic = ">1.10,<3" name = "threadpoolctl" version = "3.2.0" description = "threadpoolctl" +category = "main" optional = true python-versions = ">=3.8" files = [ @@ -4677,6 +5244,7 @@ files = [ name = "thrift" version = "0.16.0" description = "Python bindings for the Apache Thrift RPC system" +category = "main" optional = true python-versions = "*" files = [ @@ -4695,6 +5263,7 @@ twisted = ["twisted"] name = "toml" version = "0.10.2" description = "Python Library for Tom's Obvious, Minimal Language" +category = "main" optional = true python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" files = [ @@ -4706,6 +5275,7 @@ files = [ name = "tomli" version = "2.0.1" description = "A lil' TOML parser" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -4717,6 +5287,7 @@ files = [ name = "tomlkit" version = "0.12.1" description = "Style preserving TOML library" +category = "main" optional = true python-versions = ">=3.7" files = [ @@ -4728,6 +5299,7 @@ files = [ name = "toolz" version = "0.12.0" description = "List processing tools and functional utilities" +category = "main" optional = true python-versions = ">=3.5" files = [ @@ -4739,6 +5311,7 @@ files = [ name = "tornado" version = "6.3.3" description = "Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed." +category = "main" optional = true python-versions = ">= 3.8" files = [ @@ -4759,6 +5332,7 @@ files = [ name = "tqdm" version = "4.66.1" description = "Fast, Extensible Progress Meter" +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -4779,6 +5353,7 @@ telegram = ["requests"] name = "traitlets" version = "5.13.0" description = "Traitlets Python configuration system" +category = "main" optional = false python-versions = ">=3.8" files = [ @@ -4794,6 +5369,7 @@ test = ["argcomplete (>=3.0.3)", "mypy (>=1.6.0)", "pre-commit", "pytest (>=7.0, name = "typing-extensions" version = "4.8.0" description = "Backported and Experimental Type Hints for Python 3.8+" +category = "main" optional = false python-versions = ">=3.8" files = [ @@ -4805,6 +5381,7 @@ files = [ name = "typing-inspect" version = "0.9.0" description = "Runtime inspection utilities for typing module." +category = "main" optional = true python-versions = "*" files = [ @@ -4820,6 +5397,7 @@ typing-extensions = ">=3.7.4" name = "tzdata" version = "2023.3" description = "Provider of IANA time zone data" +category = "main" optional = true python-versions = ">=2" files = [ @@ -4831,6 +5409,7 @@ files = [ name = "tzlocal" version = "5.2" description = "tzinfo object for the local timezone" +category = "main" optional = true python-versions = ">=3.8" files = [ @@ -4848,6 +5427,7 @@ devenv = ["check-manifest", "pytest (>=4.3)", "pytest-cov", "pytest-mock (>=3.3) name = "urllib3" version = "1.26.18" description = "HTTP library with thread-safe connection pooling, file post, and more." +category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" files = [ @@ -4864,6 +5444,7 @@ socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] name = "validators" version = "0.22.0" description = "Python Data Validation for Humans™" +category = "main" optional = true python-versions = ">=3.8" files = [ @@ -4886,6 +5467,7 @@ tooling-extras = ["pyaml (>=23.7.0)", "pypandoc-binary (>=1.11)", "pytest (>=7.4 name = "virtualenv" version = "20.24.6" description = "Virtual Python Environment builder" +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -4906,6 +5488,7 @@ test = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "coverage-enable-subprocess name = "watchdog" version = "3.0.0" description = "Filesystem events monitoring" +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -4945,6 +5528,7 @@ watchmedo = ["PyYAML (>=3.10)"] name = "wcwidth" version = "0.2.9" description = "Measures the displayed width of unicode strings in a terminal" +category = "main" optional = false python-versions = "*" files = [ @@ -4956,6 +5540,7 @@ files = [ name = "webencodings" version = "0.5.1" description = "Character encoding aliases for legacy web content" +category = "main" optional = true python-versions = "*" files = [ @@ -4967,6 +5552,7 @@ files = [ name = "yarl" version = "1.9.2" description = "Yet another URL library" +category = "main" optional = true python-versions = ">=3.7" files = [ @@ -5054,6 +5640,7 @@ multidict = ">=4.0" name = "yfinance" version = "0.2.31" description = "Download market data from Yahoo! Finance API" +category = "main" optional = true python-versions = "*" files = [ @@ -5078,6 +5665,7 @@ requests = ">=2.31" name = "zipp" version = "3.17.0" description = "Backport of pathlib-compatible object wrapper for zip files" +category = "main" optional = false python-versions = ">=3.8" files = [ @@ -5096,6 +5684,7 @@ ggplot = ["ggplot"] google-ai = ["google-cloud-aiplatform", "google-generativeai"] google-sheets = ["beautifulsoup4"] langchain = ["langchain"] +modin = ["modin"] numpy = ["numpy"] plotly = ["kaleido", "plotly"] polars = ["polars"] @@ -5109,4 +5698,4 @@ yfinance = ["yfinance"] [metadata] lock-version = "2.0" python-versions = ">=3.9,<3.9.7 || >3.9.7,<4.0" -content-hash = "33310dfcccd79b43c742efa191fef9dd776aef6e8947332a767c8fbc4db8a78b" +content-hash = "15d2cf07791015ec92063188115ee2c4b15101fa1ced50dbc5a469eac38da45b" diff --git a/pyproject.toml b/pyproject.toml index b3d1d8a49..95532eaa1 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -19,7 +19,11 @@ pydantic = "^1" sqlalchemy = ">=1.4,<3" duckdb = "^0.9.2" faker = "^19.12.0" +pillow = "^10.1.0" +requests = "^2.31.0" +modin = {version = "0.18.1", optional = true, extras=["ray"]} beautifulsoup4 = {version="^4.12.2", optional = true} +google-generativeai = {version = "^0.3.2", optional = true} google-cloud-aiplatform = {version = "^1.26.1", optional = true} langchain = {version = "^0.0.199", optional = true} polars = {version = "^0.18.15", optional = true} @@ -39,8 +43,11 @@ psycopg2 = { version = "^2.9.7", optional = true } yfinance = { version = "^0.2.28", optional = true } sqlalchemy-databricks = { version = "^0.2.0", optional = true } snowflake-sqlalchemy = { version = "^1.5.0", optional = true } -pillow = "^10.1.0" -google-generativeai = {version = "^0.3.2", optional = true} + + +[tool.poetry.group.dev] +optional = true + [tool.poetry.group.dev.dependencies] pre-commit = "^3.2.2" @@ -53,8 +60,6 @@ click = "^8.1.3" coverage = "^7.2.7" sourcery = "^1.11.0" -[tool.poetry.group.extras.dependencies] -google-cloud-aiplatform = "^1.26.1" [tool.poetry.extras] connectors = [ "pymysql", "psycopg2", "sqlalchemy-databricks", "snowflake-sqlalchemy"] @@ -72,6 +77,10 @@ scikit-learn = ["scikit-learn"] streamlit = ["streamlit"] text-generation = ["fsspec", "huggingface-hub", "text-generation"] yfinance = ["yfinance"] +modin = ["modin", "ray"] + +[tool.poetry.group.docs] +optional = true [tool.poetry.group.docs.dependencies] mkdocs = "1.5.3" diff --git a/tests/unit_tests/test_df_info.py b/tests/unit_tests/test_df_info.py index f9b425137..7bd590bdd 100644 --- a/tests/unit_tests/test_df_info.py +++ b/tests/unit_tests/test_df_info.py @@ -1,5 +1,6 @@ import unittest +import modin.pandas as mpd import pandas as pd import polars as pl @@ -11,6 +12,9 @@ def setUp(self): self.pd_df = pd.DataFrame( {"A": [1, 2, 3], "B": ["foo", "bar", "baz"], "C": [1.0, 2.0, 3.0]} ) + self.mpd_df = mpd.DataFrame( + {"A": [1, 2, 3], "B": ["foo", "bar", "baz"], "C": [1.0, 2.0, 3.0]} + ) self.pl_df = None if "pl" in globals(): self.pl_df = pl.DataFrame( @@ -28,6 +32,11 @@ def test_df_type_polars(self): expected_output = "polars" self.assertEqual(actual_output, expected_output) + def test_df_type_modin(self): + actual_output = df_type(self.mpd_df) + expected_output = "modin" + self.assertEqual(actual_output, expected_output) + def test_df_type_none(self): actual_output = df_type("not a dataframe") expected_output = None diff --git a/tests/unit_tests/test_smartdataframe.py b/tests/unit_tests/test_smartdataframe.py index d5a2b30d6..b35b62a7f 100644 --- a/tests/unit_tests/test_smartdataframe.py +++ b/tests/unit_tests/test_smartdataframe.py @@ -13,6 +13,7 @@ import pytest from pydantic import BaseModel, Field +import pandasai from pandasai import SmartDataframe from pandasai.exceptions import LLMNotFoundError from pandasai.helpers.cache import Cache @@ -331,6 +332,7 @@ def test_to_dict(self, smart_dataframe: SmartDataframe): "to_dict_params,expected_passing_params,engine_type", [ ({}, {"orient": "dict", "into": dict}, "pandas"), + ({}, {"orient": "dict", "into": dict}, "modin"), ({}, {"as_series": True}, "polars"), ({"orient": "dict"}, {"orient": "dict", "into": dict}, "pandas"), ( @@ -338,6 +340,12 @@ def test_to_dict(self, smart_dataframe: SmartDataframe): {"orient": "dict", "into": defaultdict}, "pandas", ), + ({"orient": "dict"}, {"orient": "dict", "into": dict}, "modin"), + ( + {"orient": "dict", "into": defaultdict}, + {"orient": "dict", "into": defaultdict}, + "modin", + ), ({"as_series": False}, {"as_series": False}, "polars"), ( {"as_series": False, "orient": "dict", "into": defaultdict}, @@ -681,7 +689,7 @@ def test_load_dataframe_from_saved_dfs(self, sample_saved_dfs, mocker): "size": ["1240KB", "320KB"], } ) - mocker.patch.object(pd, "read_parquet", return_value=expected_df) + mocker.patch.object(pandasai.pandas, "read_parquet", return_value=expected_df) mocker.patch.object( json, @@ -696,7 +704,7 @@ def test_load_dataframe_from_saved_dfs(self, sample_saved_dfs, mocker): assert smart_dataframe.table_name == saved_df_name assert smart_dataframe.dataframe.equals(expected_df) - def test_load_dataframe_from_other_dataframe_type(self, smart_dataframe): + def test_load_dataframe_from_polars(self, smart_dataframe): polars_df = pl.DataFrame({"column1": [1, 2, 3], "column2": [4, 5, 6]}) smart_dataframe._load_dataframe(polars_df) @@ -706,7 +714,7 @@ def test_load_dataframe_from_other_dataframe_type(self, smart_dataframe): def test_import_csv_file(self, smart_dataframe, mocker): mocker.patch.object( - pd, + pandasai.pandas, "read_parquet", return_value=pd.DataFrame({"column1": [1, 2, 3], "column2": [4, 5, 6]}), ) @@ -719,7 +727,7 @@ def test_import_csv_file(self, smart_dataframe, mocker): def test_import_parquet_file(self, smart_dataframe, mocker): mocker.patch.object( - pd, + pandasai.pandas, "read_parquet", return_value=pd.DataFrame({"column1": [1, 2, 3], "column2": [4, 5, 6]}), ) @@ -732,7 +740,7 @@ def test_import_parquet_file(self, smart_dataframe, mocker): def test_import_excel_file(self, smart_dataframe, mocker): mocker.patch.object( - pd, + pandasai.pandas, "read_excel", return_value=pd.DataFrame({"column1": [1, 2, 3], "column2": [4, 5, 6]}), )