diff --git a/pinned-versions/3.10/lockfile.lightning_gp.txt b/pinned-versions/3.10/lockfile.lightning_gp.txt new file mode 100644 index 0000000..50148e2 --- /dev/null +++ b/pinned-versions/3.10/lockfile.lightning_gp.txt @@ -0,0 +1,726 @@ +# This file was autogenerated by uv via the following command: +# nox -s dependencies_pin-3.10(extra='lightning_gp') +accessible-pygments==0.0.5 + # via pydata-sphinx-theme +aiohappyeyeballs==2.4.3 + # via aiohttp +aiohttp==3.10.10 + # via + # datasets + # fsspec +aiosignal==1.3.1 + # via aiohttp +alabaster==1.0.0 + # via sphinx +annotated-types==0.7.0 + # via pydantic +antlr4-python3-runtime==4.13.2 + # via moto +apeye==1.4.1 + # via sphinx-toolbox +apeye-core==1.1.5 + # via apeye +appnope==0.1.4 + # via ipykernel +asttokens==2.4.1 + # via stack-data +async-timeout==4.0.3 + # via aiohttp +attrs==24.2.0 + # via + # aiohttp + # jsonschema + # jupyter-cache + # referencing +autodocsumm==0.2.13 + # via sphinx-toolbox +aws-sam-translator==1.91.0 + # via cfn-lint +aws-xray-sdk==2.14.0 + # via moto +babel==2.16.0 + # via + # pydata-sphinx-theme + # sphinx +beautifulsoup4==4.12.3 + # via + # pydata-sphinx-theme + # sphinx-toolbox +blinker==1.8.2 + # via flask +boto3==1.35.38 + # via + # molflux (pyproject.toml) + # aws-sam-translator + # cloudpathlib + # moto +botocore==1.35.38 + # via + # molflux (pyproject.toml) + # aws-xray-sdk + # boto3 + # moto + # s3transfer +cachecontrol==0.14.0 + # via sphinx-toolbox +catboost==1.2.7 + # via molflux (pyproject.toml) +certifi==2024.8.30 + # via + # requests + # sphinx-prompt +cffi==1.17.1 + # via cryptography +cfn-lint==1.16.1 + # via moto +charset-normalizer==3.4.0 + # via requests +class-resolver==0.5.2 + # via molflux (pyproject.toml) +click==8.1.7 + # via + # flask + # jupyter-cache +cloudpathlib==0.19.0 + # via molflux (pyproject.toml) +colorama==0.4.6 + # via molflux (pyproject.toml) +comm==0.2.2 + # via + # ipykernel + # ipywidgets +contourpy==1.3.0 + # via matplotlib +coverage==7.6.2 + # via molflux (pyproject.toml) +cryptography==43.0.1 + # via + # joserfc + # moto +cssutils==2.11.1 + # via dict2css +cycler==0.12.1 + # via matplotlib +datasets==3.0.1 + # via + # molflux (pyproject.toml) + # evaluate +debugpy==1.8.7 + # via ipykernel +decorator==5.1.1 + # via ipython +dict2css==0.3.0.post1 + # via sphinx-toolbox +dill==0.3.8 + # via + # datasets + # evaluate + # multiprocess +docker==7.1.0 + # via moto +docutils==0.21.2 + # via + # myst-parser + # pydata-sphinx-theme + # sphinx + # sphinx-prompt + # sphinx-tabs + # sphinx-togglebutton + # sphinx-toolbox +domdf-python-tools==3.9.0 + # via + # apeye + # apeye-core + # dict2css + # sphinx-toolbox +evaluate==0.4.3 + # via molflux (pyproject.toml) +exceptiongroup==1.2.2 + # via + # ipython + # pytest +executing==2.1.0 + # via stack-data +fastjsonschema==2.20.0 + # via nbformat +filelock==3.16.1 + # via + # cachecontrol + # datasets + # huggingface-hub + # sphinx-toolbox + # torch +flask==3.0.3 + # via + # flask-cors + # moto +flask-cors==5.0.0 + # via moto +fonttools==4.54.1 + # via matplotlib +frozenlist==1.4.1 + # via + # aiohttp + # aiosignal +fsspec==2024.6.1 + # via + # molflux (pyproject.toml) + # datasets + # evaluate + # huggingface-hub + # lightning + # pytorch-lightning + # torch +gpytorch==1.13 + # via molflux (pyproject.toml) +graphql-core==3.2.4 + # via moto +graphviz==0.20.3 + # via catboost +h5py==3.12.1 + # via molflux (pyproject.toml) +html5lib==1.1 + # via sphinx-toolbox +huggingface-hub==0.25.2 + # via + # datasets + # evaluate +idna==3.10 + # via + # apeye-core + # requests + # sphinx-prompt + # yarl +imagesize==1.4.1 + # via sphinx +importlib-metadata==8.5.0 + # via + # jupyter-cache + # myst-nb +iniconfig==2.0.0 + # via pytest +ipykernel==6.29.5 + # via myst-nb +ipython==8.28.0 + # via + # ipykernel + # ipywidgets + # myst-nb +ipywidgets==8.1.5 + # via molflux (pyproject.toml) +itsdangerous==2.2.0 + # via flask +jaxtyping==0.2.19 + # via + # gpytorch + # linear-operator +jedi==0.19.1 + # via ipython +jinja2==3.1.4 + # via + # flask + # moto + # myst-parser + # sphinx + # sphinx-jinja2-compat + # torch +jmespath==1.0.1 + # via + # boto3 + # botocore +joblib==1.4.2 + # via + # molflux (pyproject.toml) + # scikit-learn +joserfc==1.0.0 + # via moto +jsondiff==2.2.1 + # via moto +jsonpatch==1.33 + # via cfn-lint +jsonpath-ng==1.6.1 + # via moto +jsonpointer==3.0.0 + # via jsonpatch +jsonschema==4.23.0 + # via + # aws-sam-translator + # nbformat + # openapi-schema-validator + # openapi-spec-validator +jsonschema-path==0.3.3 + # via openapi-spec-validator +jsonschema-specifications==2023.12.1 + # via + # jsonschema + # openapi-schema-validator +jupyter-cache==1.0.0 + # via myst-nb +jupyter-client==8.6.3 + # via + # ipykernel + # nbclient +jupyter-core==5.7.2 + # via + # ipykernel + # jupyter-client + # nbclient + # nbformat +jupyterlab-widgets==3.0.13 + # via ipywidgets +jupytext==1.16.4 + # via molflux (pyproject.toml) +kiwisolver==1.4.7 + # via matplotlib +lazy-object-proxy==1.10.0 + # via openapi-spec-validator +lightning==2.4.0 + # via molflux (pyproject.toml) +lightning-utilities==0.11.7 + # via + # lightning + # pytorch-lightning + # torchmetrics +linear-operator==0.5.3 + # via gpytorch +mapie==0.9.1 + # via molflux (pyproject.toml) +markdown-it-py==3.0.0 + # via + # jupytext + # mdit-py-plugins + # myst-parser +markupsafe==3.0.1 + # via + # jinja2 + # sphinx-jinja2-compat + # werkzeug +matplotlib==3.9.2 + # via + # molflux (pyproject.toml) + # catboost +matplotlib-inline==0.1.7 + # via + # ipykernel + # ipython +mdit-py-plugins==0.4.2 + # via + # jupytext + # myst-parser +mdurl==0.1.2 + # via markdown-it-py +mergedeep==1.3.4 + # via molflux (pyproject.toml) +mock==5.1.0 + # via molflux (pyproject.toml) +more-itertools==10.5.0 + # via + # molflux (pyproject.toml) + # cssutils +moto==5.0.16 + # via molflux (pyproject.toml) +mpmath==1.3.0 + # via + # gpytorch + # linear-operator + # sympy +msgpack==1.1.0 + # via cachecontrol +multidict==6.1.0 + # via + # aiohttp + # yarl +multiprocess==0.70.16 + # via + # datasets + # evaluate +myst-nb==1.1.2 + # via molflux (pyproject.toml) +myst-parser==4.0.0 + # via myst-nb +natsort==8.4.0 + # via domdf-python-tools +nbclient==0.10.0 + # via + # jupyter-cache + # myst-nb +nbformat==5.10.4 + # via + # jupyter-cache + # jupytext + # myst-nb + # nbclient +nest-asyncio==1.6.0 + # via ipykernel +networkx==3.4 + # via + # cfn-lint + # torch +numpy==1.26.4 + # via + # molflux (pyproject.toml) + # catboost + # contourpy + # datasets + # evaluate + # h5py + # jaxtyping + # mapie + # matplotlib + # pandas + # pyarrow + # rdkit + # scikit-learn + # scipy + # torchmetrics +openapi-schema-validator==0.6.2 + # via openapi-spec-validator +openapi-spec-validator==0.7.1 + # via moto +packaging==24.1 + # via + # datasets + # evaluate + # huggingface-hub + # ipykernel + # jupytext + # lightning + # lightning-utilities + # mapie + # matplotlib + # plotly + # pydata-sphinx-theme + # pytest + # pytorch-lightning + # sphinx + # torchmetrics +pandas==2.2.3 + # via + # molflux (pyproject.toml) + # catboost + # datasets + # evaluate +parso==0.8.4 + # via jedi +pathable==0.4.3 + # via jsonschema-path +pexpect==4.9.0 + # via ipython +pillow==10.4.0 + # via + # matplotlib + # rdkit +platformdirs==4.3.6 + # via + # apeye + # jupyter-core +plotly==5.24.1 + # via catboost +pluggy==1.5.0 + # via pytest +ply==3.11 + # via jsonpath-ng +prompt-toolkit==3.0.48 + # via ipython +propcache==0.2.0 + # via yarl +psutil==6.0.0 + # via ipykernel +ptyprocess==0.7.0 + # via pexpect +pure-eval==0.2.3 + # via stack-data +py-partiql-parser==0.5.6 + # via moto +pyarrow==17.0.0 + # via + # molflux (pyproject.toml) + # datasets +pycparser==2.22 + # via cffi +pydantic==2.9.2 + # via + # molflux (pyproject.toml) + # aws-sam-translator +pydantic-core==2.23.4 + # via pydantic +pydata-sphinx-theme==0.15.4 + # via sphinx-book-theme +pygments==2.18.0 + # via + # accessible-pygments + # ipython + # pydata-sphinx-theme + # sphinx + # sphinx-prompt + # sphinx-tabs +pyparsing==3.1.4 + # via + # matplotlib + # moto +pytest==8.3.3 + # via molflux (pyproject.toml) +python-dateutil==2.9.0.post0 + # via + # molflux (pyproject.toml) + # botocore + # jupyter-client + # matplotlib + # moto + # pandas +pytorch-lightning==2.4.0 + # via lightning +pytz==2024.2 + # via pandas +pyyaml==6.0.2 + # via + # molflux (pyproject.toml) + # cfn-lint + # datasets + # huggingface-hub + # jsondiff + # jsonschema-path + # jupyter-cache + # jupytext + # lightning + # moto + # myst-nb + # myst-parser + # pytorch-lightning + # responses +pyzmq==26.2.0 + # via + # ipykernel + # jupyter-client +rapidfuzz==3.10.0 + # via thefuzz +rdkit==2024.3.5 + # via molflux (pyproject.toml) +referencing==0.35.1 + # via + # jsonschema + # jsonschema-path + # jsonschema-specifications +regex==2024.9.11 + # via cfn-lint +requests==2.32.3 + # via + # molflux (pyproject.toml) + # apeye + # cachecontrol + # datasets + # docker + # evaluate + # huggingface-hub + # jsonschema-path + # moto + # responses + # sphinx +responses==0.25.3 + # via moto +rfc3339-validator==0.1.4 + # via openapi-schema-validator +rpds-py==0.20.0 + # via + # jsonschema + # referencing +ruamel-yaml==0.18.6 + # via sphinx-toolbox +ruamel-yaml-clib==0.2.8 + # via ruamel-yaml +s3transfer==0.10.3 + # via boto3 +scikit-learn==1.5.2 + # via + # molflux (pyproject.toml) + # gpytorch + # mapie +scipy==1.14.1 + # via + # molflux (pyproject.toml) + # catboost + # gpytorch + # linear-operator + # mapie + # scikit-learn +setuptools==75.1.0 + # via + # lightning-utilities + # moto + # sphinx-togglebutton +six==1.16.0 + # via + # asttokens + # catboost + # html5lib + # python-dateutil + # rfc3339-validator +snowballstemmer==2.2.0 + # via sphinx +soupsieve==2.6 + # via beautifulsoup4 +sphinx==8.1.0 + # via + # molflux (pyproject.toml) + # autodocsumm + # myst-nb + # myst-parser + # pydata-sphinx-theme + # sphinx-autodoc-typehints + # sphinx-book-theme + # sphinx-design + # sphinx-inline-tabs + # sphinx-prompt + # sphinx-sitemap + # sphinx-tabs + # sphinx-togglebutton + # sphinx-toolbox +sphinx-autodoc-typehints==2.5.0 + # via sphinx-toolbox +sphinx-book-theme==1.1.3 + # via molflux (pyproject.toml) +sphinx-design==0.6.1 + # via molflux (pyproject.toml) +sphinx-inline-tabs==2023.4.21 + # via molflux (pyproject.toml) +sphinx-jinja2-compat==0.3.0 + # via sphinx-toolbox +sphinx-prompt==1.9.0 + # via sphinx-toolbox +sphinx-sitemap==2.6.0 + # via molflux (pyproject.toml) +sphinx-tabs==3.4.5 + # via sphinx-toolbox +sphinx-togglebutton==0.3.2 + # via molflux (pyproject.toml) +sphinx-toolbox==3.8.1 + # via molflux (pyproject.toml) +sphinxcontrib-applehelp==2.0.0 + # via sphinx +sphinxcontrib-devhelp==2.0.0 + # via sphinx +sphinxcontrib-htmlhelp==2.1.0 + # via sphinx +sphinxcontrib-jsmath==1.0.1 + # via sphinx +sphinxcontrib-qthelp==2.0.0 + # via sphinx +sphinxcontrib-serializinghtml==2.0.0 + # via sphinx +sqlalchemy==2.0.35 + # via jupyter-cache +stack-data==0.6.3 + # via ipython +sympy==1.13.3 + # via + # cfn-lint + # torch +tabulate==0.9.0 + # via + # jupyter-cache + # sphinx-toolbox +tenacity==9.0.0 + # via + # molflux (pyproject.toml) + # plotly +thefuzz==0.22.1 + # via molflux (pyproject.toml) +threadpoolctl==3.5.0 + # via scikit-learn +tomli==2.0.2 + # via + # coverage + # jupytext + # pytest + # sphinx +torch==2.4.1 + # via + # molflux (pyproject.toml) + # lightning + # linear-operator + # pytorch-lightning + # torchmetrics +torchmetrics==1.4.3 + # via + # lightning + # pytorch-lightning +tornado==6.4.1 + # via + # ipykernel + # jupyter-client +tqdm==4.66.5 + # via + # molflux (pyproject.toml) + # datasets + # evaluate + # huggingface-hub + # lightning + # pytorch-lightning +traitlets==5.14.3 + # via + # comm + # ipykernel + # ipython + # ipywidgets + # jupyter-client + # jupyter-core + # matplotlib-inline + # nbclient + # nbformat +typeguard==4.3.0 + # via jaxtyping +typing-extensions==4.12.2 + # via + # molflux (pyproject.toml) + # aws-sam-translator + # cfn-lint + # cloudpathlib + # domdf-python-tools + # huggingface-hub + # ipython + # jaxtyping + # lightning + # lightning-utilities + # multidict + # myst-nb + # pydantic + # pydantic-core + # pydata-sphinx-theme + # pytorch-lightning + # sphinx-toolbox + # sqlalchemy + # torch + # typeguard +tzdata==2024.2 + # via pandas +urllib3==2.2.3 + # via + # botocore + # docker + # requests + # responses + # sphinx-prompt +wcwidth==0.2.13 + # via prompt-toolkit +webencodings==0.5.1 + # via html5lib +werkzeug==3.0.4 + # via + # flask + # moto +wheel==0.44.0 + # via sphinx-togglebutton +widgetsnbextension==4.0.13 + # via ipywidgets +wrapt==1.16.0 + # via aws-xray-sdk +xmltodict==0.14.1 + # via moto +xxhash==3.5.0 + # via + # datasets + # evaluate +yarl==1.14.0 + # via aiohttp +zipp==3.20.2 + # via importlib-metadata diff --git a/pinned-versions/3.11/lockfile.lightning_gp.txt b/pinned-versions/3.11/lockfile.lightning_gp.txt new file mode 100644 index 0000000..990a999 --- /dev/null +++ b/pinned-versions/3.11/lockfile.lightning_gp.txt @@ -0,0 +1,712 @@ +# This file was autogenerated by uv via the following command: +# nox -s dependencies_pin-3.11(extra='lightning_gp') +accessible-pygments==0.0.5 + # via pydata-sphinx-theme +aiohappyeyeballs==2.4.3 + # via aiohttp +aiohttp==3.10.10 + # via + # datasets + # fsspec +aiosignal==1.3.1 + # via aiohttp +alabaster==1.0.0 + # via sphinx +annotated-types==0.7.0 + # via pydantic +antlr4-python3-runtime==4.13.2 + # via moto +apeye==1.4.1 + # via sphinx-toolbox +apeye-core==1.1.5 + # via apeye +appnope==0.1.4 + # via ipykernel +asttokens==2.4.1 + # via stack-data +attrs==24.2.0 + # via + # aiohttp + # jsonschema + # jupyter-cache + # referencing +autodocsumm==0.2.13 + # via sphinx-toolbox +aws-sam-translator==1.91.0 + # via cfn-lint +aws-xray-sdk==2.14.0 + # via moto +babel==2.16.0 + # via + # pydata-sphinx-theme + # sphinx +beautifulsoup4==4.12.3 + # via + # pydata-sphinx-theme + # sphinx-toolbox +blinker==1.8.2 + # via flask +boto3==1.35.38 + # via + # molflux (pyproject.toml) + # aws-sam-translator + # cloudpathlib + # moto +botocore==1.35.38 + # via + # molflux (pyproject.toml) + # aws-xray-sdk + # boto3 + # moto + # s3transfer +cachecontrol==0.14.0 + # via sphinx-toolbox +catboost==1.2.7 + # via molflux (pyproject.toml) +certifi==2024.8.30 + # via + # requests + # sphinx-prompt +cffi==1.17.1 + # via cryptography +cfn-lint==1.16.1 + # via moto +charset-normalizer==3.4.0 + # via requests +class-resolver==0.5.2 + # via molflux (pyproject.toml) +click==8.1.7 + # via + # flask + # jupyter-cache +cloudpathlib==0.19.0 + # via molflux (pyproject.toml) +colorama==0.4.6 + # via molflux (pyproject.toml) +comm==0.2.2 + # via + # ipykernel + # ipywidgets +contourpy==1.3.0 + # via matplotlib +coverage==7.6.2 + # via molflux (pyproject.toml) +cryptography==43.0.1 + # via + # joserfc + # moto +cssutils==2.11.1 + # via dict2css +cycler==0.12.1 + # via matplotlib +datasets==3.0.1 + # via + # molflux (pyproject.toml) + # evaluate +debugpy==1.8.7 + # via ipykernel +decorator==5.1.1 + # via ipython +dict2css==0.3.0.post1 + # via sphinx-toolbox +dill==0.3.8 + # via + # datasets + # evaluate + # multiprocess +docker==7.1.0 + # via moto +docutils==0.21.2 + # via + # myst-parser + # pydata-sphinx-theme + # sphinx + # sphinx-prompt + # sphinx-tabs + # sphinx-togglebutton + # sphinx-toolbox +domdf-python-tools==3.9.0 + # via + # apeye + # apeye-core + # dict2css + # sphinx-toolbox +evaluate==0.4.3 + # via molflux (pyproject.toml) +executing==2.1.0 + # via stack-data +fastjsonschema==2.20.0 + # via nbformat +filelock==3.16.1 + # via + # cachecontrol + # datasets + # huggingface-hub + # sphinx-toolbox + # torch +flask==3.0.3 + # via + # flask-cors + # moto +flask-cors==5.0.0 + # via moto +fonttools==4.54.1 + # via matplotlib +frozenlist==1.4.1 + # via + # aiohttp + # aiosignal +fsspec==2024.6.1 + # via + # molflux (pyproject.toml) + # datasets + # evaluate + # huggingface-hub + # lightning + # pytorch-lightning + # torch +gpytorch==1.13 + # via molflux (pyproject.toml) +graphql-core==3.2.4 + # via moto +graphviz==0.20.3 + # via catboost +h5py==3.12.1 + # via molflux (pyproject.toml) +html5lib==1.1 + # via sphinx-toolbox +huggingface-hub==0.25.2 + # via + # datasets + # evaluate +idna==3.10 + # via + # apeye-core + # requests + # sphinx-prompt + # yarl +imagesize==1.4.1 + # via sphinx +importlib-metadata==8.5.0 + # via + # jupyter-cache + # myst-nb +iniconfig==2.0.0 + # via pytest +ipykernel==6.29.5 + # via myst-nb +ipython==8.28.0 + # via + # ipykernel + # ipywidgets + # myst-nb +ipywidgets==8.1.5 + # via molflux (pyproject.toml) +itsdangerous==2.2.0 + # via flask +jaxtyping==0.2.19 + # via + # gpytorch + # linear-operator +jedi==0.19.1 + # via ipython +jinja2==3.1.4 + # via + # flask + # moto + # myst-parser + # sphinx + # sphinx-jinja2-compat + # torch +jmespath==1.0.1 + # via + # boto3 + # botocore +joblib==1.4.2 + # via + # molflux (pyproject.toml) + # scikit-learn +joserfc==1.0.0 + # via moto +jsondiff==2.2.1 + # via moto +jsonpatch==1.33 + # via cfn-lint +jsonpath-ng==1.6.1 + # via moto +jsonpointer==3.0.0 + # via jsonpatch +jsonschema==4.23.0 + # via + # aws-sam-translator + # nbformat + # openapi-schema-validator + # openapi-spec-validator +jsonschema-path==0.3.3 + # via openapi-spec-validator +jsonschema-specifications==2023.12.1 + # via + # jsonschema + # openapi-schema-validator +jupyter-cache==1.0.0 + # via myst-nb +jupyter-client==8.6.3 + # via + # ipykernel + # nbclient +jupyter-core==5.7.2 + # via + # ipykernel + # jupyter-client + # nbclient + # nbformat +jupyterlab-widgets==3.0.13 + # via ipywidgets +jupytext==1.16.4 + # via molflux (pyproject.toml) +kiwisolver==1.4.7 + # via matplotlib +lazy-object-proxy==1.10.0 + # via openapi-spec-validator +lightning==2.4.0 + # via molflux (pyproject.toml) +lightning-utilities==0.11.7 + # via + # lightning + # pytorch-lightning + # torchmetrics +linear-operator==0.5.3 + # via gpytorch +mapie==0.9.1 + # via molflux (pyproject.toml) +markdown-it-py==3.0.0 + # via + # jupytext + # mdit-py-plugins + # myst-parser +markupsafe==3.0.1 + # via + # jinja2 + # sphinx-jinja2-compat + # werkzeug +matplotlib==3.9.2 + # via + # molflux (pyproject.toml) + # catboost +matplotlib-inline==0.1.7 + # via + # ipykernel + # ipython +mdit-py-plugins==0.4.2 + # via + # jupytext + # myst-parser +mdurl==0.1.2 + # via markdown-it-py +mergedeep==1.3.4 + # via molflux (pyproject.toml) +mock==5.1.0 + # via molflux (pyproject.toml) +more-itertools==10.5.0 + # via + # molflux (pyproject.toml) + # cssutils +moto==5.0.16 + # via molflux (pyproject.toml) +mpmath==1.3.0 + # via + # gpytorch + # linear-operator + # sympy +msgpack==1.1.0 + # via cachecontrol +multidict==6.1.0 + # via + # aiohttp + # yarl +multiprocess==0.70.16 + # via + # datasets + # evaluate +myst-nb==1.1.2 + # via molflux (pyproject.toml) +myst-parser==4.0.0 + # via myst-nb +natsort==8.4.0 + # via domdf-python-tools +nbclient==0.10.0 + # via + # jupyter-cache + # myst-nb +nbformat==5.10.4 + # via + # jupyter-cache + # jupytext + # myst-nb + # nbclient +nest-asyncio==1.6.0 + # via ipykernel +networkx==3.4 + # via + # cfn-lint + # torch +numpy==1.26.4 + # via + # molflux (pyproject.toml) + # catboost + # contourpy + # datasets + # evaluate + # h5py + # jaxtyping + # mapie + # matplotlib + # pandas + # pyarrow + # rdkit + # scikit-learn + # scipy + # torchmetrics +openapi-schema-validator==0.6.2 + # via openapi-spec-validator +openapi-spec-validator==0.7.1 + # via moto +packaging==24.1 + # via + # datasets + # evaluate + # huggingface-hub + # ipykernel + # jupytext + # lightning + # lightning-utilities + # mapie + # matplotlib + # plotly + # pydata-sphinx-theme + # pytest + # pytorch-lightning + # sphinx + # torchmetrics +pandas==2.2.3 + # via + # molflux (pyproject.toml) + # catboost + # datasets + # evaluate +parso==0.8.4 + # via jedi +pathable==0.4.3 + # via jsonschema-path +pexpect==4.9.0 + # via ipython +pillow==10.4.0 + # via + # matplotlib + # rdkit +platformdirs==4.3.6 + # via + # apeye + # jupyter-core +plotly==5.24.1 + # via catboost +pluggy==1.5.0 + # via pytest +ply==3.11 + # via jsonpath-ng +prompt-toolkit==3.0.48 + # via ipython +propcache==0.2.0 + # via yarl +psutil==6.0.0 + # via ipykernel +ptyprocess==0.7.0 + # via pexpect +pure-eval==0.2.3 + # via stack-data +py-partiql-parser==0.5.6 + # via moto +pyarrow==17.0.0 + # via + # molflux (pyproject.toml) + # datasets +pycparser==2.22 + # via cffi +pydantic==2.9.2 + # via + # molflux (pyproject.toml) + # aws-sam-translator +pydantic-core==2.23.4 + # via pydantic +pydata-sphinx-theme==0.15.4 + # via sphinx-book-theme +pygments==2.18.0 + # via + # accessible-pygments + # ipython + # pydata-sphinx-theme + # sphinx + # sphinx-prompt + # sphinx-tabs +pyparsing==3.1.4 + # via + # matplotlib + # moto +pytest==8.3.3 + # via molflux (pyproject.toml) +python-dateutil==2.9.0.post0 + # via + # molflux (pyproject.toml) + # botocore + # jupyter-client + # matplotlib + # moto + # pandas +pytorch-lightning==2.4.0 + # via lightning +pytz==2024.2 + # via pandas +pyyaml==6.0.2 + # via + # molflux (pyproject.toml) + # cfn-lint + # datasets + # huggingface-hub + # jsondiff + # jsonschema-path + # jupyter-cache + # jupytext + # lightning + # moto + # myst-nb + # myst-parser + # pytorch-lightning + # responses +pyzmq==26.2.0 + # via + # ipykernel + # jupyter-client +rapidfuzz==3.10.0 + # via thefuzz +rdkit==2024.3.5 + # via molflux (pyproject.toml) +referencing==0.35.1 + # via + # jsonschema + # jsonschema-path + # jsonschema-specifications +regex==2024.9.11 + # via cfn-lint +requests==2.32.3 + # via + # molflux (pyproject.toml) + # apeye + # cachecontrol + # datasets + # docker + # evaluate + # huggingface-hub + # jsonschema-path + # moto + # responses + # sphinx +responses==0.25.3 + # via moto +rfc3339-validator==0.1.4 + # via openapi-schema-validator +rpds-py==0.20.0 + # via + # jsonschema + # referencing +ruamel-yaml==0.18.6 + # via sphinx-toolbox +ruamel-yaml-clib==0.2.8 + # via ruamel-yaml +s3transfer==0.10.3 + # via boto3 +scikit-learn==1.5.2 + # via + # molflux (pyproject.toml) + # gpytorch + # mapie +scipy==1.14.1 + # via + # molflux (pyproject.toml) + # catboost + # gpytorch + # linear-operator + # mapie + # scikit-learn +setuptools==75.1.0 + # via + # lightning-utilities + # moto + # sphinx-togglebutton +six==1.16.0 + # via + # asttokens + # catboost + # html5lib + # python-dateutil + # rfc3339-validator +snowballstemmer==2.2.0 + # via sphinx +soupsieve==2.6 + # via beautifulsoup4 +sphinx==8.1.0 + # via + # molflux (pyproject.toml) + # autodocsumm + # myst-nb + # myst-parser + # pydata-sphinx-theme + # sphinx-autodoc-typehints + # sphinx-book-theme + # sphinx-design + # sphinx-inline-tabs + # sphinx-prompt + # sphinx-sitemap + # sphinx-tabs + # sphinx-togglebutton + # sphinx-toolbox +sphinx-autodoc-typehints==2.5.0 + # via sphinx-toolbox +sphinx-book-theme==1.1.3 + # via molflux (pyproject.toml) +sphinx-design==0.6.1 + # via molflux (pyproject.toml) +sphinx-inline-tabs==2023.4.21 + # via molflux (pyproject.toml) +sphinx-jinja2-compat==0.3.0 + # via sphinx-toolbox +sphinx-prompt==1.9.0 + # via sphinx-toolbox +sphinx-sitemap==2.6.0 + # via molflux (pyproject.toml) +sphinx-tabs==3.4.5 + # via sphinx-toolbox +sphinx-togglebutton==0.3.2 + # via molflux (pyproject.toml) +sphinx-toolbox==3.8.1 + # via molflux (pyproject.toml) +sphinxcontrib-applehelp==2.0.0 + # via sphinx +sphinxcontrib-devhelp==2.0.0 + # via sphinx +sphinxcontrib-htmlhelp==2.1.0 + # via sphinx +sphinxcontrib-jsmath==1.0.1 + # via sphinx +sphinxcontrib-qthelp==2.0.0 + # via sphinx +sphinxcontrib-serializinghtml==2.0.0 + # via sphinx +sqlalchemy==2.0.35 + # via jupyter-cache +stack-data==0.6.3 + # via ipython +sympy==1.13.3 + # via + # cfn-lint + # torch +tabulate==0.9.0 + # via + # jupyter-cache + # sphinx-toolbox +tenacity==9.0.0 + # via + # molflux (pyproject.toml) + # plotly +thefuzz==0.22.1 + # via molflux (pyproject.toml) +threadpoolctl==3.5.0 + # via scikit-learn +torch==2.4.1 + # via + # molflux (pyproject.toml) + # lightning + # linear-operator + # pytorch-lightning + # torchmetrics +torchmetrics==1.4.3 + # via + # lightning + # pytorch-lightning +tornado==6.4.1 + # via + # ipykernel + # jupyter-client +tqdm==4.66.5 + # via + # molflux (pyproject.toml) + # datasets + # evaluate + # huggingface-hub + # lightning + # pytorch-lightning +traitlets==5.14.3 + # via + # comm + # ipykernel + # ipython + # ipywidgets + # jupyter-client + # jupyter-core + # matplotlib-inline + # nbclient + # nbformat +typeguard==4.3.0 + # via jaxtyping +typing-extensions==4.12.2 + # via + # molflux (pyproject.toml) + # aws-sam-translator + # cfn-lint + # domdf-python-tools + # huggingface-hub + # ipython + # jaxtyping + # lightning + # lightning-utilities + # myst-nb + # pydantic + # pydantic-core + # pydata-sphinx-theme + # pytorch-lightning + # sphinx-toolbox + # sqlalchemy + # torch + # typeguard +tzdata==2024.2 + # via pandas +urllib3==2.2.3 + # via + # botocore + # docker + # requests + # responses + # sphinx-prompt +wcwidth==0.2.13 + # via prompt-toolkit +webencodings==0.5.1 + # via html5lib +werkzeug==3.0.4 + # via + # flask + # moto +wheel==0.44.0 + # via sphinx-togglebutton +widgetsnbextension==4.0.13 + # via ipywidgets +wrapt==1.16.0 + # via aws-xray-sdk +xmltodict==0.14.1 + # via moto +xxhash==3.5.0 + # via + # datasets + # evaluate +yarl==1.14.0 + # via aiohttp +zipp==3.20.2 + # via importlib-metadata diff --git a/pyproject.toml b/pyproject.toml index fe958d3..c5c3695 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -423,6 +423,12 @@ filterwarnings = [ "ignore:Total length of `dict` across ranks is zero. Please make sure this was your intention:UserWarning", "ignore: Starting from v1.9.0, `tensorboardX` has been removed as a dependency of the `lightning.pytorch` package:UserWarning", "ignore: GPU available but not used.", + # [modelzoo.lightning_gp] + # ignore warnings on predicting using GPyTorch models on their training data + "ignore:The input matches the stored training data. Did you forget to call model.train()?", + # ignore warnings on empty DataLoaders in lightning models + "ignore:Total length of `DataLoader` across ranks is zero. Please make sure this was your intention.", + "ignore:Total length of `CombinedLoader` across ranks is zero. Please make sure this was your intention.", # [modelzoo.mapie] # ignore unhandled DataConversionWarning raised internally by mapie "ignore:A column-vector y was passed when a 1d array was expected. Please change the shape of y::sklearn.utils.validation", diff --git a/tests/modelzoo/plugins/lightning_gp/__init__.py b/tests/modelzoo/plugins/lightning_gp/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/tests/modelzoo/plugins/lightning_gp/conftest.py b/tests/modelzoo/plugins/lightning_gp/conftest.py new file mode 100644 index 0000000..3c7bd67 --- /dev/null +++ b/tests/modelzoo/plugins/lightning_gp/conftest.py @@ -0,0 +1,119 @@ +import pandas as pd +import pytest + +import datasets +from molflux.modelzoo.load import load_from_dict +from molflux.modelzoo.protocols import Model + +model_name = "lightning_gp_regressor" + +_X_FEATURES = ["X_col_1", "X_col_2"] +_Y_FEATURES = ["y_col"] + + +@pytest.fixture() +def train_df() -> pd.DataFrame: + return pd.DataFrame( + [ + [1.0, 2.0, 3.0], + [1.0, 3.0, 4.0], + [2.0, 4.0, 6.0], + [2.0, 4.0, 6.0], + [2.0, 4.0, 6.0], + ], + columns=_X_FEATURES + _Y_FEATURES, + ) + + +@pytest.fixture() +def validation_df() -> pd.DataFrame: + return pd.DataFrame( + [ + [1.0, 2.0, 3.0], + [1.0, 3.0, 4.0], + [2.0, 4.0, 6.0], + [2.0, 4.0, 6.0], + [2.0, 5.0, 7.0], + ], + columns=_X_FEATURES + _Y_FEATURES, + ) + + +@pytest.fixture() +def predict_df() -> pd.DataFrame: + return pd.DataFrame( + [ + [1.0, 2.0], + [1.0, 3.0], + [2.0, 4.0], + [2.0, 4.0], + [2.0, 5.0], + ], + columns=_X_FEATURES, + ) + + +@pytest.fixture() +def empty_predict_df() -> pd.DataFrame: + return pd.DataFrame([], columns=_X_FEATURES) + + +@pytest.fixture() +def train_dataset(train_df: pd.DataFrame) -> datasets.Dataset: + return datasets.Dataset.from_pandas(train_df) + + +@pytest.fixture() +def train_dataset_b(train_df: pd.DataFrame) -> datasets.Dataset: + joint_df = pd.concat([train_df, train_df]).iloc[:8] + return datasets.Dataset.from_pandas(joint_df) + + +@pytest.fixture() +def validation_dataset(validation_df: pd.DataFrame) -> datasets.Dataset: + return datasets.Dataset.from_pandas(validation_df) + + +@pytest.fixture() +def predict_dataset(predict_df: pd.DataFrame) -> datasets.Dataset: + return datasets.Dataset.from_pandas(predict_df) + + +@pytest.fixture() +def empty_predict_dataset(empty_predict_df: pd.DataFrame) -> datasets.Dataset: + return datasets.Dataset.from_pandas(empty_predict_df) + + +@pytest.fixture() +def single_row_predict_dataset(predict_df: pd.DataFrame) -> datasets.Dataset: + return datasets.Dataset.from_pandas(predict_df.iloc[:1]) + + +@pytest.fixture(scope="function") +def fixture_gp_config() -> dict: + gp_config = { + "name": model_name, + "config": { + "x_features": _X_FEATURES, + "y_features": _Y_FEATURES, + "num_tasks": len(_Y_FEATURES), + "likelihood_config": { + "noise_constraint": { + "name": "GreaterThan", + "lower_bound": 0.01, + }, + }, + "kernel_config": { + "name": "RBFKernel", + }, + "trainer": { + "accelerator": "cpu", + }, + }, + } + return gp_config + + +@pytest.fixture(scope="function") +def fixture_gp_model(fixture_gp_config: dict) -> Model: + return load_from_dict(fixture_gp_config) diff --git a/tests/modelzoo/plugins/lightning_gp/test_gp_regressor.py b/tests/modelzoo/plugins/lightning_gp/test_gp_regressor.py new file mode 100644 index 0000000..a4116aa --- /dev/null +++ b/tests/modelzoo/plugins/lightning_gp/test_gp_regressor.py @@ -0,0 +1,153 @@ +import numpy as np +import torch + +from molflux.modelzoo import load_from_dict, load_from_store, save_to_store +from molflux.modelzoo.catalogue import list_models +from molflux.modelzoo.models.lightning_gp.gp_model import LightningGPRegressor +from molflux.modelzoo.protocols import Estimator, SupportsStandardDeviation + +model_name = "lightning_gp_regressor" + + +def test_in_catalogue(): + """That the model is registered in the catalogue.""" + catalogue = list_models() + all_names = [name for names in catalogue.values() for name in names] + assert model_name in all_names + + +def test_default_model_tag_matches_entrypoint_name(fixture_gp_model): + """That the default model tag matches the catalogue entrypoint name. + + This is not strictly required, but ensures a more intuitive user experience. + """ + model = fixture_gp_model + assert model.tag == model_name + + +def test_is_mapped_to_correct_class(fixture_gp_model): + """That the model name is mapped to the appropriate class.""" + model = fixture_gp_model + assert isinstance(model, LightningGPRegressor) + + +def test_implements_protocol(fixture_gp_model): + """That the model implements the public Estimator protocol.""" + model = fixture_gp_model + assert isinstance(model, Estimator) + + +def test_implements_standard_deviation_protocol(fixture_gp_model): + """That the model implements the standard deviation protocol.""" + model = fixture_gp_model + assert isinstance(model, SupportsStandardDeviation) + + +def test_train_predict_model( + fixture_gp_model, + tmp_path, + train_dataset, + predict_dataset, + empty_predict_dataset, + single_row_predict_dataset, +): + """Test that a model can run the train, predict and predict_with_std functions""" + + model = fixture_gp_model + + model.train( + train_data=train_dataset, + validation_data=None, + trainer_config={ + "accelerator": "cpu", + "max_epochs": 5, + "default_root_dir": str(tmp_path), + }, + ) + + for prediction_dataset in [ + empty_predict_dataset, + single_row_predict_dataset, + predict_dataset, + ]: + predictions = model.predict(prediction_dataset) + assert len(predictions) == len(model.y_features) + + for task in predictions: + assert len(predictions[task]) == len(prediction_dataset) + + predictions_from_std_method, stds = model.predict_with_std(prediction_dataset) + assert predictions_from_std_method and stds + assert len(predictions_from_std_method) == len(model.y_features) and len( + stds, + ) == len(model.y_features) + for task in predictions_from_std_method: + assert len(predictions_from_std_method[task]) == len(predictions[task]) + + +def test_saving_loading( + tmp_path, + fixture_gp_model, + train_dataset, + predict_dataset, +): + """Test that a model can successfully be saved and loaded""" + + fixture_gp_model.train( + train_data=train_dataset, + validation_data=None, + trainer_config={ + "accelerator": "cpu", + "max_epochs": 5, + "default_root_dir": str(tmp_path), + }, + ) + + save_to_store(tmp_path, fixture_gp_model) + loaded_model = load_from_store(tmp_path) + + assert loaded_model.predict(predict_dataset) + + +def test_train_model_overfit( + fixture_gp_model, + tmp_path, + train_dataset, +): + """Test that a model can overfit to a small batch""" + + torch.manual_seed(0) + + model = fixture_gp_model + + model.train( + train_data=train_dataset, + validation_data=None, + trainer_config={ + "accelerator": "cpu", + "max_epochs": 400, + "default_root_dir": str(tmp_path), + }, + optimizer_config={"name": "SGD", "config": {"lr": 1}}, + ) + predictions = model.predict( + train_dataset, + ) + + np.testing.assert_allclose( + predictions[f"{model_name}::y_col"], + train_dataset["y_col"], + rtol=5e-2, + ) + + +def test_validation_configs(fixture_gp_config, train_dataset, predict_dataset): + """Test that running with the NoValidation parameter works""" + config = fixture_gp_config + config["config"]["validation_config"] = {"name": "NoValidation"} + + model = load_from_dict(config) + model.train(train_dataset) + predictions = model.predict(train_dataset) + + assert len(predictions) == len(model.y_features)