From 87ab6a6ae324eb7385d70fa432b7ab990b8f0fd1 Mon Sep 17 00:00:00 2001 From: Bryce Meyer Date: Wed, 8 Nov 2023 21:26:19 +0100 Subject: [PATCH 01/29] finished setting up initial docs generation --- .gitignore | 3 + .pre-commit-config.yaml | 2 +- docs/Makefile | 20 + docs/README.md | 28 ++ docs/make.bat | 35 ++ docs/make_docs.py | 66 +++ docs/source/apidoc_templates/module.rst_t | 8 + docs/source/apidoc_templates/package.rst_t | 50 +++ docs/source/apidoc_templates/toc.rst_t | 12 + docs/source/conf.py | 150 +++++++ docs/source/content/citation.md | 13 + docs/source/content/contributing.md | 140 +++++++ docs/source/content/gallery.md | 39 ++ docs/source/content/getting_started.md | 21 + .../content/getting_started_mech_interp.md | 37 ++ docs/source/content/tutorials.md | 35 ++ docs/source/favicon.ico | Bin 0 -> 15086 bytes docs/source/index.md | 43 ++ poetry.lock | 392 +++++++++++++++++- pyproject.toml | 20 +- 20 files changed, 1110 insertions(+), 4 deletions(-) create mode 100755 docs/Makefile create mode 100644 docs/README.md create mode 100644 docs/make.bat create mode 100644 docs/make_docs.py create mode 100644 docs/source/apidoc_templates/module.rst_t create mode 100644 docs/source/apidoc_templates/package.rst_t create mode 100644 docs/source/apidoc_templates/toc.rst_t create mode 100644 docs/source/conf.py create mode 100644 docs/source/content/citation.md create mode 100644 docs/source/content/contributing.md create mode 100644 docs/source/content/gallery.md create mode 100644 docs/source/content/getting_started.md create mode 100644 docs/source/content/getting_started_mech_interp.md create mode 100644 docs/source/content/tutorials.md create mode 100644 docs/source/favicon.ico create mode 100644 docs/source/index.md diff --git a/.gitignore b/.gitignore index 07c64927..33b00853 100644 --- a/.gitignore +++ b/.gitignore @@ -52,6 +52,9 @@ coverage.xml .hypothesis/ .pytest_cache/ +# Docs stuff +docs/source/generated + # Translations *.mo *.pot diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 98fe2580..290a0ed6 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -18,7 +18,7 @@ repos: hooks: - id: ruff_lint name: Ruff Lint - entry: poetry run ruff check sparse_autoencoder + entry: poetry run ruff check sparse_autoencoder --fix language: system types: [python] require_serial: true diff --git a/docs/Makefile b/docs/Makefile new file mode 100755 index 00000000..d0c3cbf1 --- /dev/null +++ b/docs/Makefile @@ -0,0 +1,20 @@ +# Minimal makefile for Sphinx documentation +# + +# You can set these variables from the command line, and also +# from the environment for the first two. +SPHINXOPTS ?= +SPHINXBUILD ?= sphinx-build +SOURCEDIR = source +BUILDDIR = build + +# Put it first so that "make" without argument is like "make help". +help: + @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) + +.PHONY: help Makefile + +# Catch-all target: route all unknown targets to Sphinx using the new +# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). +%: Makefile + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 00000000..4020f7fe --- /dev/null +++ b/docs/README.md @@ -0,0 +1,28 @@ + +# Sparse Autoencoder Docs + + +This repo contains the [website](https://neelnanda-io.github.io/TransformerLens/) for [TransformerLens](https://github.com/neelnanda-io/TransformerLens). This site is currently in Beta and we are in the process of adding/editing information. + +The documentation uses Sphinx. However, the documentation is written in regular md, NOT rst. + +## Build the Documentation + +First install the docs packages: + +```bash +poetry install --with docs +``` + +Then for hot-reloading, run this (note the model properties table won't hot reload, but everything +else will): + +```bash +poetry run docs-hot-reload +``` + +Alternatively to build once, run: + +```bash +poetry run build-docs +``` diff --git a/docs/make.bat b/docs/make.bat new file mode 100644 index 00000000..747ffb7b --- /dev/null +++ b/docs/make.bat @@ -0,0 +1,35 @@ +@ECHO OFF + +pushd %~dp0 + +REM Command file for Sphinx documentation + +if "%SPHINXBUILD%" == "" ( + set SPHINXBUILD=sphinx-build +) +set SOURCEDIR=source +set BUILDDIR=build + +%SPHINXBUILD% >NUL 2>NUL +if errorlevel 9009 ( + echo. + echo.The 'sphinx-build' command was not found. Make sure you have Sphinx + echo.installed, then set the SPHINXBUILD environment variable to point + echo.to the full path of the 'sphinx-build' executable. Alternatively you + echo.may add the Sphinx directory to PATH. + echo. + echo.If you don't have Sphinx installed, grab it from + echo.https://www.sphinx-doc.org/ + exit /b 1 +) + +if "%1" == "" goto help + +%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% +goto end + +:help +%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% + +:end +popd diff --git a/docs/make_docs.py b/docs/make_docs.py new file mode 100644 index 00000000..ce1f1906 --- /dev/null +++ b/docs/make_docs.py @@ -0,0 +1,66 @@ +"""Build the API Documentation.""" +from pathlib import Path +import shutil +import subprocess +from typing import Any + + +# Docs Directories +CURRENT_DIR = Path(__file__).parent +SOURCE_PATH = CURRENT_DIR / "../docs/source" +BUILD_PATH = CURRENT_DIR / "../docs/build" +PACKAGE_DIR = CURRENT_DIR.parent +DEMOS_DIR = CURRENT_DIR.parent +GENERATED_DIR = CURRENT_DIR.parent / "docs/source/generated" + + +def copy_demos(_app: Any | None = None) -> None: + """Copy demo notebooks to the generated directory.""" + copy_to_dir = GENERATED_DIR / "demos" + notebooks_to_copy = [ + "benchmarks.ipynb", + "demo.ipynb", + ] + + if copy_to_dir.exists(): + shutil.rmtree(copy_to_dir) + + copy_to_dir.mkdir() + for filename in notebooks_to_copy: + shutil.copy(DEMOS_DIR / filename, copy_to_dir) + + +def build_docs() -> None: + """Build the docs.""" + copy_demos() + + # Generating docs + subprocess.run( + [ + "sphinx-build", + SOURCE_PATH, + BUILD_PATH, + # Nitpicky mode (warn about all missing references) + # "-n", # noqa: ERA001 + # Turn warnings into errors + "-W", + ], + check=True, + ) + + +def docs_hot_reload() -> None: + """Hot reload the docs.""" + copy_demos() + + subprocess.run( + [ + "sphinx-autobuild", + "--watch", + str(PACKAGE_DIR) + "," + str(DEMOS_DIR), + "--open-browser", + SOURCE_PATH, + BUILD_PATH, + ], + check=True, + ) diff --git a/docs/source/apidoc_templates/module.rst_t b/docs/source/apidoc_templates/module.rst_t new file mode 100644 index 00000000..2644b730 --- /dev/null +++ b/docs/source/apidoc_templates/module.rst_t @@ -0,0 +1,8 @@ +{%- if show_headings %} +{{- [basename] | join(' ') | e | heading }} + +{% endif -%} +.. automodule:: {{ qualname }} +{%- for option in automodule_options %} + :{{ option }}: +{%- endfor %} diff --git a/docs/source/apidoc_templates/package.rst_t b/docs/source/apidoc_templates/package.rst_t new file mode 100644 index 00000000..8b230b71 --- /dev/null +++ b/docs/source/apidoc_templates/package.rst_t @@ -0,0 +1,50 @@ +{%- macro automodule(modname, options) -%} +.. automodule:: {{ modname }} +{%- for option in options %} + :{{ option }}: +{%- endfor %} +{%- endmacro %} + +{%- macro toctree(docnames) -%} +.. toctree:: + :maxdepth: 1 +{% for docname in docnames %} + {{ docname }} +{%- endfor %} +{%- endmacro %} + +{%- if is_namespace %} +{{- [pkgname] | join(" ") | e | heading }} +{% else %} +{{- [pkgname] | join(" ") | e | heading }} +{% endif %} + +{%- if is_namespace %} +.. py:module:: {{ pkgname }} +{% endif %} + +{%- if modulefirst and not is_namespace %} +{{ automodule(pkgname, automodule_options) }} +{% endif %} + +{%- if submodules %} +Submodules +---------- +{% if separatemodules %} +{{ toctree(submodules) }} +{% else %} +{%- for submodule in submodules %} +{% if show_headings %} +{{- [submodule, "module"] | join(" ") | e | heading(2) }} +{% endif %} +{{ automodule(submodule, automodule_options) }} +{% endfor %} +{%- endif %} +{%- endif %} + +{%- if subpackages %} +Subpackages +----------- + +{{ toctree(subpackages) }} +{% endif %} diff --git a/docs/source/apidoc_templates/toc.rst_t b/docs/source/apidoc_templates/toc.rst_t new file mode 100644 index 00000000..f13dbb73 --- /dev/null +++ b/docs/source/apidoc_templates/toc.rst_t @@ -0,0 +1,12 @@ +Sparse Autoencoder API +---------------------- + +If browsing the docs for the first time, we recommend initially looking at ... +Contents +^^^^^^^^ + +.. toctree:: + :maxdepth: 3 +{% for docname in docnames %} + {{ docname }} +{%- endfor %} diff --git a/docs/source/conf.py b/docs/source/conf.py new file mode 100644 index 00000000..fb1c18ff --- /dev/null +++ b/docs/source/conf.py @@ -0,0 +1,150 @@ +"""Sphinx configuration. + +https://www.sphinx-doc.org/en/master/usage/configuration.html +""" +# pylint: disable=invalid-name +from pathlib import Path +from typing import Any + +from sphinx.ext import apidoc + + +# -- Project information ----------------------------------------------------- +# https://www.sphinx-doc.org/en/master/usage/configuration.html#project-information + +project = "Sparse Autoencoder" +project_copyright = "" +author = "" +release = "0.0.0" + +# -- General configuration --------------------------------------------------- +# https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration + +extensions = [ + "sphinx.ext.autodoc", + "sphinx.ext.napoleon", + "myst_parser", + "sphinx.ext.githubpages", + "nbsphinx", +] + +source_suffix = { + ".rst": "restructuredtext", + ".md": "markdown", +} + +templates_path = ["_templates"] + + +# -- Napoleon Extension Configuration ----------------------------------------- + +napoleon_include_init_with_doc = True +napoleon_use_admonition_for_notes = True +napoleon_custom_sections = [ + "Motivation:", + "Warning:", + "Getting Started:", +] + +# -- Options for HTML output ------------------------------------------------- +# https://www.sphinx-doc.org/en/master/usage/configuration.html#options-for-html-output + +html_theme = "furo" +html_title = "Sparse Autoencoder Documentation" +html_static_path = ["_static"] +html_logo = "" +html_favicon = "favicon.ico" + +# Fix to get Plotly Working +nbsphinx_prolog = r""" +.. raw:: html + + + +""" + +# -- Sphinx-Apidoc Configuration --------------------------------------------- + +# Functions to ignore as they're not interesting to the end user +functions_to_ignore = [ + # functions from load_from_pretrained.py + "convert_hf_model_config", + "convert_bert_weights", + "convert_gpt2_weights", + "convert_gptj_weights", + "convert_llama_weights", + "convert_mingpt_weights", + "convert_neel_solu_old_weights", + "convert_neo_weights", + "convert_neox_weights", + "convert_neel_model_config", + "convert_opt_weights", + "fill_missing_keys", + "get_basic_config", + "get_official_model_name", + "get_pretrained_state_dict", + "make_model_alias_map", + # functions from make_docs.py + "get_config", + "get_property", + # functions from patching.py + "make_df_from_ranges", + # functions from utils.py + "check_structure", + "clear_huggingface_cache", + "select_compatible_kwargs", +] + +# Default AutoDoc Options +# https://www.sphinx-doc.org/en/master/usage/extensions/autodoc.html#confval-autodoc_default_options +autodoc_default_options = { + "exclude-members": ", ".join(functions_to_ignore), +} + + +def run_apidoc(_app: Any | None = None) -> None: + """Run Sphinx-Apidoc. + + Allows us to automatically generate API documentation from docstrings, every time we build the + docs. + """ + # Path to the package codebase + package_path = Path(__file__).resolve().parents[2] / "sparse_autoencoder" + + # Template directory + template_dir = Path(__file__).resolve().parent / "apidoc_templates" + + # Output path for the generated reStructuredText files + generated_path = Path(__file__).resolve().parent / "generated" + output_path = generated_path / "code" + generated_path.mkdir(parents=True, exist_ok=True) + output_path.mkdir(parents=True, exist_ok=True) + + # Arguments for sphinx-apidoc + args = [ + "--force", # Overwrite existing files + "--separate", # Put documentation for each module on its own page. + "--templatedir=" + str(template_dir), # Use custom templates + "-o", + str(output_path), + str(package_path), + ] + + # Call sphinx-apidoc + apidoc.main(args) + + +# -- Sphinx Setup Overrides -------------------------------------------------- + + +def setup(app: Any) -> None: + """Sphinx setup overrides.""" + # Connect functions to run when watch detects a file change + app.connect("builder-inited", run_apidoc) diff --git a/docs/source/content/citation.md b/docs/source/content/citation.md new file mode 100644 index 00000000..111f5b61 --- /dev/null +++ b/docs/source/content/citation.md @@ -0,0 +1,13 @@ + +# Citation + +Please cite this library as: + +```BibTeX +@misc{nanda2022transformerlens, + title = {TransformerLens}, + author = {Neel Nanda and Joseph Bloom}, + year = {2022}, + howpublished = {\url{https://github.com/neelnanda-io/TransformerLens}}, +} +``` diff --git a/docs/source/content/contributing.md b/docs/source/content/contributing.md new file mode 100644 index 00000000..b92c9741 --- /dev/null +++ b/docs/source/content/contributing.md @@ -0,0 +1,140 @@ +# Contributing + +## Setup + +### DevContainer + +For a one-click setup of your development environment, this project includes a +[DevContainer](https://containers.dev/). It can be used locally with [VS +Code](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers) or +with [GitHub Codespaces](https://github.com/features/codespaces). + +### Manual Setup + +This project uses [Poetry](https://python-poetry.org/docs/#installation) for package management. +Install as follows (this will also setup your virtual environment): + +```bash +poetry config virtualenvs.in-project true +poetry install --with dev,docs,jupyter +``` + +## Testing + +If adding a feature, please add unit tests for it. If you need a model, please use one of the ones +that are cached by GitHub Actions (so that it runs quickly on the CD). These are `gpt2`, +`attn-only-1l`, `attn-only-2l`, `attn-only-3l`, `attn-only-4l`, `tiny-stories-1M`. Note `gpt2` is +quite slow (as we only have CPU actions) so the smaller models like `attn-only-1l` and +`tiny-stories-1M` are preferred if possible. + +### Running the tests + +- Unit tests only via `make unit-test` +- Acceptance tests only via `make acceptance-test` +- Docstring tests only via `make docstring-test` + +## Formatting + +This project uses `pycln`, `isort` and `black` for formatting, pull requests are checked in github +actions. + +- Format all files via `make format` +- Only check the formatting via `make check-format` + +## Documentation + +Please make sure to add thorough documentation for any features you add. You should do this directly +in the docstring, and this will then automatically generate the API docs when merged into `main`. +They will also be automatically checked with [pytest](https://docs.pytest.org/) (via +[doctest](https://docs.python.org/3/library/doctest.html)). + +If you want to view your documentation changes, run `pytest run docs-hot-reload`. This will give you +hot-reloading docs (they change in real time as you edit docstrings). + +### Docstring Style Guide + +We follow the Google Python Docstring Style for writing docstrings, with some added features from +reStructuredText (reST). + +#### Sections and Order + +You should follow this order: + +```python +"""Title In Title Case. + +A description of what the function/class does, including as much detail as is necessary to fully understand it. + +Warning: + +Any warnings to the user (e.g. common pitfalls). + +Examples: + +Include any examples here. They will be checked with doctest. + + >>> print(1 + 2) + 3 + +Args: + param_without_type_signature: + Each description should be indented once more. + param_2: + Another example parameter. + +Returns: + Returns description without type signature. + +Raises: + Information about the error it may raise (if any). +""" +``` + +#### Supported Sphinx Properties + +##### References to Other Functions/Classes + +You can reference other parts of the codebase using +[cross-referencing](https://www.sphinx-doc.org/en/master/usage/domains/python.html#cross-referencing-python-objects) +(noting that you can omit the full path if it is in the same file). + +```reStructuredText +:mod:transformer_lens # Function or module + +:const:`transformer_lens.loading_from_pretrained.OFFICIAL_MODEL_NAMES` + +:class:`transformer_lens.HookedTransformer` + +:meth:`transformer_lens.HookedTransformer.from_pretrained` + +:attr:`transformer_lens.HookedTransformer.cfg` +``` + +##### Maths + +You can use LaTeX, but note that as you're placing this in python strings the backwards slash (`\`) +must be repeated (i.e. `\\`). You can write LaTeX inline, or in "display mode". + +```reStructuredText +:math:`(a + b)^2 = a^2 + 2ab + b^2` +``` + +```reStructuredText +.. math:: + :nowrap: + + \\begin{eqnarray} + y & = & ax^2 + bx + c \\ + f(x) & = & x^2 + 2xy + y^2 + \\end{eqnarray} +``` + +#### Markup + +- Italics - `*text*` +- Bold - `**text**` +- Code - ` ``code`` ` +- List items - `*item` +- Numbered items - `1. Item` +- Quotes - indent one level +- External links = ``` `Link text ` ``` diff --git a/docs/source/content/gallery.md b/docs/source/content/gallery.md new file mode 100644 index 00000000..4d41bfae --- /dev/null +++ b/docs/source/content/gallery.md @@ -0,0 +1,39 @@ +# Gallery + +Research done involving TransformerLens: + +- [Progress Measures for Grokking via Mechanistic + Interpretability](https://arxiv.org/abs/2301.05217) (ICLR Spotlight, 2023) by Neel Nanda, Lawrence + Chan, Tom Lieberum, Jess Smith, Jacob Steinhardt +- [Finding Neurons in a Haystack: Case Studies with Sparse + Probing](https://arxiv.org/abs/2305.01610) by Wes Gurnee, Neel Nanda, Matthew Pauly, Katherine + Harvey, Dmitrii Troitskii, Dimitris Bertsimas +- [Towards Automated Circuit Discovery for Mechanistic + Interpretability](https://arxiv.org/abs/2304.14997) by Arthur Conmy, Augustine N. Mavor-Parker, + Aengus Lynch, Stefan Heimersheim, Adrià Garriga-Alonso +- [Actually, Othello-GPT Has A Linear Emergent World Representation](https://neelnanda.io/othello) + by Neel Nanda +- [A circuit for Python docstrings in a 4-layer attention-only + transformer](https://www.alignmentforum.org/posts/u6KXXmKFbXfWzoAXn/a-circuit-for-python-docstrings-in-a-4-layer-attention-only) + by Stefan Heimersheim and Jett Janiak +- [A Toy Model of Universality](https://arxiv.org/abs/2302.03025) (ICML, 2023) by Bilal Chughtai, + Lawrence Chan, Neel Nanda +- [N2G: A Scalable Approach for Quantifying Interpretable Neuron Representations in Large Language + Models](https://openreview.net/forum?id=ZB6bK6MTYq) (2023, ICLR Workshop RTML) by Alex Foote, Neel + Nanda, Esben Kran, Ioannis Konstas, Fazl Barez +- [Eliciting Latent Predictions from Transformers with the Tuned + Lens](https://arxiv.org/abs/2303.08112) by Nora Belrose, Zach Furman, Logan Smith, Danny Halawi, + Igor Ostrovsky, Lev McKinney, Stella Biderman, Jacob Steinhardt + +User contributed examples of the library being used in action: + +- [Induction Heads Phase Change + Replication](https://colab.research.google.com/github/ckkissane/induction-heads-transformer-lens/blob/main/Induction_Heads_Phase_Change.ipynb): + A partial replication of [In-Context Learning and Induction + Heads](https://transformer-circuits.pub/2022/in-context-learning-and-induction-heads/index.html) + from Connor Kissane +- [Decision Transformer + Interpretability](https://github.com/jbloomAus/DecisionTransformerInterpretability): A set of + scripts for training decision transformers which uses transformer lens to view intermediate + activations, perform attribution and ablations. A write up of the initial work can be found + [here](https://www.lesswrong.com/posts/bBuBDJBYHt39Q5zZy/decision-transformer-interpretability). diff --git a/docs/source/content/getting_started.md b/docs/source/content/getting_started.md new file mode 100644 index 00000000..8d848359 --- /dev/null +++ b/docs/source/content/getting_started.md @@ -0,0 +1,21 @@ +# Getting Started + +**Start with the [main demo](https://neelnanda.io/transformer-lens-demo) to learn how the library works, and the basic features**. + +To see what using it for exploratory analysis in practice looks like, check out [my notebook analysing Indirect Objection Identification](https://neelnanda.io/exploratory-analysis-demo) or [my recording of myself doing research](https://www.youtube.com/watch?v=yo4QvDn-vsU)! + +Mechanistic interpretability is a very young and small field, and there are a *lot* of open problems - if you would like to help, please try working on one! **Check out my [list of concrete open problems](https://docs.google.com/document/d/1WONBzNqfKIxERejrrPlQMyKqg7jSFW92x5UMXNrMdPo/edit) to figure out where to start.**. It begins with advice on skilling up, and key resources to check out. + +If you're new to transformers, check out my [what is a transformer tutorial](https://neelnanda.io/transformer-tutorial) and [tutorial on coding GPT-2 from scratch](https://neelnanda.io/transformer-tutorial-2) (with [an accompanying template](https://neelnanda.io/transformer-template) to write one yourself! + +## Advice for Reading the Code + +One significant design decision made was to have a single transformer implementation that could support a range of subtly different GPT-style models. This has the upside of interpretability code just working for arbitrary models when you change the model name in `HookedTransformer.from_pretrained`! But it has the significant downside that the code implementing the model (in `HookedTransformer.py` and `components.py`) can be difficult to read. I recommend starting with my [Clean Transformer Demo](https://neelnanda.io/transformer-solution), which is a clean, minimal implementation of GPT-2 with the same internal architecture and activation names as HookedTransformer, but is significantly clearer and better documented. + +## Installation + +`pip install git+https://github.com/neelnanda-io/TransformerLens` + +Import the library with `import transformer_lens` + +(Note: This library used to be known as EasyTransformer, and some breaking changes have been made since the rename. If you need to use the old version with some legacy code, run `pip install git+https://github.com/neelnanda-io/TransformerLens@v1`.) diff --git a/docs/source/content/getting_started_mech_interp.md b/docs/source/content/getting_started_mech_interp.md new file mode 100644 index 00000000..90848b15 --- /dev/null +++ b/docs/source/content/getting_started_mech_interp.md @@ -0,0 +1,37 @@ +# Getting Started in Mechanistic Interpretability + +Mechanistic interpretability is a very young and small field, and there are a _lot_ of open +problems. This means there's both a lot of low-hanging fruit, and that the bar for entry is low - if +you would like to help, please try working on one! The standard answer to "why has no one done this +yet" is just that there aren't enough people! Key resources: + +- [A Guide to Getting Started in Mechanistic Interpretability](https://neelnanda.io/getting-started) +- [ARENA Mechanistic Interpretability Tutorials](https://arena-ch1-transformers.streamlit.app/) from + Callum McDougall. A comprehensive practical introduction to mech interp, written in + TransformerLens - full of snippets to copy and they come with exercises and solutions! Notable + tutorials: + - [Coding GPT-2 from + scratch](https://arena-ch1-transformers.streamlit.app/[1.1]_Transformer_from_Scratch), with + accompanying video tutorial from me ([1](https://neelnanda.io/transformer-tutorial) + [2](https://neelnanda.io/transformer-tutorial-2)) - a good introduction to transformers + - [Introduction to Mech Interp and + TransformerLens](https://arena-ch1-transformers.streamlit.app/[1.2]_Intro_to_Mech_Interp): An + introduction to TransformerLens and mech interp via studying induction heads. Covers the + foundational concepts of the library + - [Indirect Object + Identification](https://arena-ch1-transformers.streamlit.app/[1.3]_Indirect_Object_Identification): + a replication of interpretability in the wild, that covers standard techniques in mech interp + such as [direct logit + attribution](https://dynalist.io/d/n2ZWtnoYHrU1s4vnFSAQ519J#z=disz2gTx-jooAcR0a5r8e7LZ), + [activation patching and path + patching](https://www.lesswrong.com/posts/xh85KbTFhbCz7taD4/how-to-think-about-activation-patching) +- [Mech Interp Paper Reading List](https://neelnanda.io/paper-list) +- [200 Concrete Open Problems in Mechanistic + Interpretability](https://neelnanda.io/concrete-open-problems) +- [A Comprehensive Mechanistic Interpretability Explainer](https://neelnanda.io/glossary): To look + up all the jargon and unfamiliar terms you're going to come across! +- [Neel Nanda's Youtube channel](https://www.youtube.com/channel/UCBMJ0D-omcRay8dh4QT0doQ): A range + of mech interp video content, including [paper + walkthroughs](https://www.youtube.com/watch?v=KV5gbOmHbjU&list=PL7m7hLIqA0hpsJYYhlt1WbHHgdfRLM2eY&index=1), + and [walkthroughs of doing + research](https://www.youtube.com/watch?v=yo4QvDn-vsU&list=PL7m7hLIqA0hr4dVOgjNwP2zjQGVHKeB7T) diff --git a/docs/source/content/tutorials.md b/docs/source/content/tutorials.md new file mode 100644 index 00000000..b31cbee3 --- /dev/null +++ b/docs/source/content/tutorials.md @@ -0,0 +1,35 @@ +# Tutorials + +- **Start with the [main demo](https://neelnanda.io/transformer-lens-demo) to learn how the library works, and the basic features**. + +## Where To Start + +- To see what using it for exploratory analysis in practice looks like, check out [my notebook analysing Indirect Objection Identification](https://neelnanda.io/exploratory-analysis-demo) or [my recording of myself doing research](https://www.youtube.com/watch?v=yo4QvDn-vsU)! + +- [What is a Transformer tutorial](https://neelnanda.io/transformer-tutorial) + +## Demos + +- [**Activation Patching in TransformerLens**](https://colab.research.google.com/github/neelnanda-io/TransformerLens/blob/main/demos/Activation_Patching_in_TL_Demo.ipynb) - Accompanies the [Exploratory Analysis Demo](https://colab.research.google.com/github/neelnanda-io/TransformerLens/blob/main/demos/Exploratory Analysis Demo.ipynb). This demo explains how to use [Activation Patching](https://dynalist.io/d/n2ZWtnoYHrU1s4vnFSAQ519J#z=qeWBvs-R-taFfcCq-S_hgMqx) in TransformerLens, a mechanistic interpretability technique that uses causal intervention to identify which activations in a model matter for producing an output. + +- [**Attribution Patching**](https://colab.research.google.com/github/neelnanda-io/TransformerLens/blob/main/demos/Attribution_Patching_Demo.ipynb) - [Attribution Patching](https://www.neelnanda.io/mechanistic-interpretability/attribution-patching) is an incomplete project that uses gradients to take a linear approximation to activation patching. It's a good approximation when patching in small activations like the outputs of individual attention heads, and bad when patching in large activations like a residual stream. + +- [**Exploratory Analysis**](https://colab.research.google.com/github/neelnanda-io/TransformerLens/blob/main/demos/Exploratory_Analysis_Demo.ipynb) - Probably the best place to start, after the Main Demo. Demonstrates how to use TransformerLens to perform exploratory analysis - focuses less on rigor and more on getting a grasp of what's going on quickly. Uses a lot of useful interpretability techniques like logit attribution and activation patching. Steal liberally from this! + +- [**Grokking**](https://colab.research.google.com/github/neelnanda-io/TransformerLens/blob/main/demos/Grokking_Demo.ipynb) - "Grokking" is a phenomenon where a model can learn to memorise the training data (minimising training loss) but then, if trained for a lot longer, can learn to generalise, leading to a sharp decrease in test loss as well. This demo shows training a model on the task of modular addition, verifying that it groks, and doing analysis. The demo is light on explanation, so you'll probably want to pair it with [Neel's video series](https://www.youtube.com/watch?v=ob4vuiqG2Go) on the paper it's based on. + +- [**Head Detector**](https://colab.research.google.com/github/neelnanda-io/TransformerLens/blob/main/demos/Head_Detector_Demo.ipynb) - Shows how to use TransformerLens to automatically detect several common types of attention head, as well as create your own custom detection algorithms to find your own! + +- [**Interactive Neuroscope**](https://colab.research.google.com/github/neelnanda-io/TransformerLens/blob/main/demos/Interactive_Neuroscope.ipynb) - Very hacky demo, but this is a feature, not a bug. Shows how to quickly create useful web-based visualisations of data, even if you're not a professional front-end developer. This demo creates an interactive Neuroscope - a visualization of a neuron's activations on text that will dynamically update as you edit the text. + +- [**LLaMA**](https://colab.research.google.com/github/neelnanda-io/TransformerLens/blob/main/demos/LLaMA.ipynb) - Converts Meta's LLaMA model (7B parameter version for now until multi-GPU support is added) to TransformerLens. + +- [**Main Demo**](https://colab.research.google.com/github/neelnanda-io/TransformerLens/blob/main/demos/Main_Demo.ipynb) - The main demo. This is where to start if you're new to TransformerLens. Shows a lot of great features for getting started, including available models, how to access model activations, and generally useful features you should know about. + +- [**No Position Experiment**](https://colab.research.google.com/github/neelnanda-io/TransformerLens/blob/main/demos/No_Position_Experiment.ipynb) - The accompanying notebook to Neel's [real-time research video](https://www.youtube.com/watch?v=yo4QvDn-vsU). Trains a model with no positional embeddings to predict the previous token, and makes a start at analysing what's going on there! + +- [**Othello-GPT**](https://colab.research.google.com/github/neelnanda-io/TransformerLens/blob/main/demos/Othello_GPT.ipynb) - This is a demo notebook porting the weights of the Othello-GPT Model from the excellent [Emergent World Representations](https://arxiv.org/pdf/2210.13382.pdf) paper to TransformerLens. Neel's [sequence on investigating this](https://www.lesswrong.com/s/nhGNHyJHbrofpPbRG) is also well worth reading if you're interested in this topic! + +- [**SVD Interpreter Demo**](https://colab.research.google.com/github/neelnanda-io/TransformerLens/blob/main/demos/SVD_Interpreter_demo.ipynb) - Based on the [Conjecture post](https://www.lesswrong.com/posts/mkbGjzxD8d8XqKHzA/the-singular-value-decompositions-of-transformer-weight#Directly_editing_SVD_representations) about how the singular value decompositions of transformer matrices are surprisingly interpretable, this demo shows how to use TransformerLens to reproduce this and investigate further. + +- [**Tracr to TransformerLens**](https://colab.research.google.com/github/neelnanda-io/TransformerLens/blob/main/demos/Tracr_to_Transformer_Lens_Demo.ipynb) - [Tracr](https://github.com/deepmind/tracr) is a cool new DeepMind tool that compiles a written program in [RASP](https://arxiv.org/abs/2106.06981) to transformer weights.This is a (hacky!) script to convert Tracr weights from the JAX form to a TransformerLens HookedTransformer in PyTorch. diff --git a/docs/source/favicon.ico b/docs/source/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..9e517edaf1c0136dfa4eaf7dbd74177d6c23f2e8 GIT binary patch literal 15086 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 +``` diff --git a/poetry.lock b/poetry.lock index 31b8fa00..2a85eb0f 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.6.1 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.7.0 and should not be changed by hand. [[package]] name = "accelerate" @@ -151,6 +151,17 @@ files = [ [package.dependencies] frozenlist = ">=1.1.0" +[[package]] +name = "alabaster" +version = "0.7.13" +description = "A configurable sidebar-enabled Sphinx theme" +optional = false +python-versions = ">=3.6" +files = [ + {file = "alabaster-0.7.13-py3-none-any.whl", hash = "sha256:1ee19aca801bbabb5ba3f5f258e4422dfa86f82f3e9cefb0859b283cdd7f62a3"}, + {file = "alabaster-0.7.13.tar.gz", hash = "sha256:a27a4a084d5e690e16e01e03ad2b2e552c61a65469419b907243193de1a84ae2"}, +] + [[package]] name = "anyio" version = "4.0.0" @@ -823,6 +834,17 @@ files = [ [package.dependencies] six = ">=1.4.0" +[[package]] +name = "docutils" +version = "0.20.1" +description = "Docutils -- Python Documentation Utilities" +optional = false +python-versions = ">=3.7" +files = [ + {file = "docutils-0.20.1-py3-none-any.whl", hash = "sha256:96f387a2c5562db4476f09f13bbab2192e764cac08ebbf3a34a95d9b1e4a59d6"}, + {file = "docutils-0.20.1.tar.gz", hash = "sha256:f08a4e276c3a1583a86dce3e34aba3fe04d02bba2dd51ed16106244e8a923e3b"}, +] + [[package]] name = "einops" version = "0.7.0" @@ -1023,6 +1045,23 @@ smb = ["smbprotocol"] ssh = ["paramiko"] tqdm = ["tqdm"] +[[package]] +name = "furo" +version = "2023.9.10" +description = "A clean customisable Sphinx documentation theme." +optional = false +python-versions = ">=3.8" +files = [ + {file = "furo-2023.9.10-py3-none-any.whl", hash = "sha256:513092538537dc5c596691da06e3c370714ec99bc438680edc1debffb73e5bfc"}, + {file = "furo-2023.9.10.tar.gz", hash = "sha256:5707530a476d2a63b8cad83b4f961f3739a69f4b058bcf38a03a39fa537195b2"}, +] + +[package.dependencies] +beautifulsoup4 = "*" +pygments = ">=2.7" +sphinx = ">=6.0,<8.0" +sphinx-basic-ng = "*" + [[package]] name = "gitdb" version = "4.0.11" @@ -1112,6 +1151,17 @@ files = [ {file = "idna-3.4.tar.gz", hash = "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4"}, ] +[[package]] +name = "imagesize" +version = "1.4.1" +description = "Getting image size from png/jpeg/jpeg2000/gif file" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "imagesize-1.4.1-py2.py3-none-any.whl", hash = "sha256:0d8d18d08f840c19d0ee7ca1fd82490fdc3729b7ac93f49870406ddde8ef8d8b"}, + {file = "imagesize-1.4.1.tar.gz", hash = "sha256:69150444affb9cb0d5cc5a92b3676f0b2fb7cd9ae39e947a5e11a36b4497cd4a"}, +] + [[package]] name = "iniconfig" version = "2.0.0" @@ -1606,6 +1656,21 @@ files = [ {file = "jupyterlab_widgets-3.0.9.tar.gz", hash = "sha256:6005a4e974c7beee84060fdfba341a3218495046de8ae3ec64888e5fe19fdb4c"}, ] +[[package]] +name = "livereload" +version = "2.6.3" +description = "Python LiveReload is an awesome tool for web developers" +optional = false +python-versions = "*" +files = [ + {file = "livereload-2.6.3-py2.py3-none-any.whl", hash = "sha256:ad4ac6f53b2d62bb6ce1a5e6e96f1f00976a32348afedcb4b6d68df2a1d346e4"}, + {file = "livereload-2.6.3.tar.gz", hash = "sha256:776f2f865e59fde56490a56bcc6773b6917366bce0c267c60ee8aaf1a0959869"}, +] + +[package.dependencies] +six = "*" +tornado = {version = "*", markers = "python_version > \"2.7\""} + [[package]] name = "markdown-it-py" version = "3.0.0" @@ -1713,6 +1778,25 @@ files = [ [package.dependencies] traitlets = "*" +[[package]] +name = "mdit-py-plugins" +version = "0.4.0" +description = "Collection of plugins for markdown-it-py" +optional = false +python-versions = ">=3.8" +files = [ + {file = "mdit_py_plugins-0.4.0-py3-none-any.whl", hash = "sha256:b51b3bb70691f57f974e257e367107857a93b36f322a9e6d44ca5bf28ec2def9"}, + {file = "mdit_py_plugins-0.4.0.tar.gz", hash = "sha256:d8ab27e9aed6c38aa716819fedfde15ca275715955f8a185a8e1cf90fb1d2c1b"}, +] + +[package.dependencies] +markdown-it-py = ">=1.0.0,<4.0.0" + +[package.extras] +code-style = ["pre-commit"] +rtd = ["myst-parser", "sphinx-book-theme"] +testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] + [[package]] name = "mdurl" version = "0.1.2" @@ -1863,6 +1947,32 @@ files = [ [package.dependencies] dill = ">=0.3.7" +[[package]] +name = "myst-parser" +version = "2.0.0" +description = "An extended [CommonMark](https://spec.commonmark.org/) compliant parser," +optional = false +python-versions = ">=3.8" +files = [ + {file = "myst_parser-2.0.0-py3-none-any.whl", hash = "sha256:7c36344ae39c8e740dad7fdabf5aa6fc4897a813083c6cc9990044eb93656b14"}, + {file = "myst_parser-2.0.0.tar.gz", hash = "sha256:ea929a67a6a0b1683cdbe19b8d2e724cd7643f8aa3e7bb18dd65beac3483bead"}, +] + +[package.dependencies] +docutils = ">=0.16,<0.21" +jinja2 = "*" +markdown-it-py = ">=3.0,<4.0" +mdit-py-plugins = ">=0.4,<1.0" +pyyaml = "*" +sphinx = ">=6,<8" + +[package.extras] +code-style = ["pre-commit (>=3.0,<4.0)"] +linkify = ["linkify-it-py (>=2.0,<3.0)"] +rtd = ["ipython", "pydata-sphinx-theme (==v0.13.0rc4)", "sphinx-autodoc2 (>=0.4.2,<0.5.0)", "sphinx-book-theme (==1.0.0rc2)", "sphinx-copybutton", "sphinx-design2", "sphinx-pyscript", "sphinx-tippy (>=0.3.1)", "sphinx-togglebutton", "sphinxext-opengraph (>=0.8.2,<0.9.0)", "sphinxext-rediraffe (>=0.2.7,<0.3.0)"] +testing = ["beautifulsoup4", "coverage[toml]", "pytest (>=7,<8)", "pytest-cov", "pytest-param-files (>=0.3.4,<0.4.0)", "pytest-regressions", "sphinx-pytest"] +testing-docutils = ["pygments", "pytest (>=7,<8)", "pytest-param-files (>=0.3.4,<0.4.0)"] + [[package]] name = "nbclient" version = "0.9.0" @@ -1943,6 +2053,25 @@ traitlets = ">=5.1" docs = ["myst-parser", "pydata-sphinx-theme", "sphinx", "sphinxcontrib-github-alt", "sphinxcontrib-spelling"] test = ["pep440", "pre-commit", "pytest", "testpath"] +[[package]] +name = "nbsphinx" +version = "0.9.3" +description = "Jupyter Notebook Tools for Sphinx" +optional = false +python-versions = ">=3.6" +files = [ + {file = "nbsphinx-0.9.3-py3-none-any.whl", hash = "sha256:6e805e9627f4a358bd5720d5cbf8bf48853989c79af557afd91a5f22e163029f"}, + {file = "nbsphinx-0.9.3.tar.gz", hash = "sha256:ec339c8691b688f8676104a367a4b8cf3ea01fd089dc28d24dec22d563b11562"}, +] + +[package.dependencies] +docutils = "*" +jinja2 = "*" +nbconvert = "!=5.4" +nbformat = "*" +sphinx = ">=1.8" +traitlets = ">=5" + [[package]] name = "nest-asyncio" version = "1.5.8" @@ -2119,6 +2248,7 @@ optional = false python-versions = ">=3" files = [ {file = "nvidia_cudnn_cu12-8.9.6.50-py3-none-manylinux1_x86_64.whl", hash = "sha256:02fbdf6a9f00ba88da68b275d1f175111cc01bbe2294fb688cd309fd61af8844"}, + {file = "nvidia_cudnn_cu12-8.9.6.50-py3-none-win_amd64.whl", hash = "sha256:acfc4447a9345e8ba525e3b0641ee64bdfd35189ab9904241814ff991792f77a"}, ] [package.dependencies] @@ -2298,6 +2428,20 @@ sql-other = ["SQLAlchemy (>=1.4.36)"] test = ["hypothesis (>=6.46.1)", "pytest (>=7.3.2)", "pytest-asyncio (>=0.17.0)", "pytest-xdist (>=2.2.0)"] xml = ["lxml (>=4.8.0)"] +[[package]] +name = "pandoc" +version = "2.3" +description = "Pandoc Documents for Python" +optional = false +python-versions = "*" +files = [ + {file = "pandoc-2.3.tar.gz", hash = "sha256:e772c2c6d871146894579828dbaf1efd538eb64fc7e71d4a6b3a11a18baef90d"}, +] + +[package.dependencies] +plumbum = "*" +ply = "*" + [[package]] name = "pandocfilters" version = "1.5.0" @@ -2394,6 +2538,50 @@ files = [ dev = ["pre-commit", "tox"] testing = ["pytest", "pytest-benchmark"] +[[package]] +name = "plumbum" +version = "1.8.2" +description = "Plumbum: shell combinators library" +optional = false +python-versions = ">=3.6" +files = [ + {file = "plumbum-1.8.2-py3-none-any.whl", hash = "sha256:3ad9e5f56c6ec98f6f7988f7ea8b52159662ea9e915868d369dbccbfca0e367e"}, + {file = "plumbum-1.8.2.tar.gz", hash = "sha256:9e6dc032f4af952665f32f3206567bc23b7858b1413611afe603a3f8ad9bfd75"}, +] + +[package.dependencies] +pywin32 = {version = "*", markers = "platform_system == \"Windows\" and platform_python_implementation != \"PyPy\""} + +[package.extras] +dev = ["paramiko", "psutil", "pytest (>=6.0)", "pytest-cov", "pytest-mock", "pytest-timeout"] +docs = ["sphinx (>=4.0.0)", "sphinx-rtd-theme (>=1.0.0)"] +ssh = ["paramiko"] + +[[package]] +name = "ply" +version = "3.11" +description = "Python Lex & Yacc" +optional = false +python-versions = "*" +files = [ + {file = "ply-3.11-py2.py3-none-any.whl", hash = "sha256:096f9b8350b65ebd2fd1346b12452efe5b9607f7482813ffca50c22722a807ce"}, + {file = "ply-3.11.tar.gz", hash = "sha256:00c7c1aaa88358b9c765b6d3000c6eec0ba42abca5351b095321aef446081da3"}, +] + +[[package]] +name = "pockets" +version = "0.9.1" +description = "A collection of helpful Python tools!" +optional = false +python-versions = "*" +files = [ + {file = "pockets-0.9.1-py2.py3-none-any.whl", hash = "sha256:68597934193c08a08eb2bf6a1d85593f627c22f9b065cc727a4f03f669d96d86"}, + {file = "pockets-0.9.1.tar.gz", hash = "sha256:9320f1a3c6f7a9133fe3b571f283bcf3353cd70249025ae8d618e40e9f7e92b3"}, +] + +[package.dependencies] +six = ">=1.5.2" + [[package]] name = "poethepoet" version = "0.24.2" @@ -3581,6 +3769,17 @@ files = [ {file = "sniffio-1.3.0.tar.gz", hash = "sha256:e60305c5e5d314f5389259b7f22aaa33d8f7dee49763119234af3755c55b9101"}, ] +[[package]] +name = "snowballstemmer" +version = "2.2.0" +description = "This package provides 29 stemmers for 28 languages generated from Snowball algorithms." +optional = false +python-versions = "*" +files = [ + {file = "snowballstemmer-2.2.0-py2.py3-none-any.whl", hash = "sha256:c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a"}, + {file = "snowballstemmer-2.2.0.tar.gz", hash = "sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1"}, +] + [[package]] name = "soupsieve" version = "2.5" @@ -3592,6 +3791,195 @@ files = [ {file = "soupsieve-2.5.tar.gz", hash = "sha256:5663d5a7b3bfaeee0bc4372e7fc48f9cff4940b3eec54a6451cc5299f1097690"}, ] +[[package]] +name = "sphinx" +version = "7.2.6" +description = "Python documentation generator" +optional = false +python-versions = ">=3.9" +files = [ + {file = "sphinx-7.2.6-py3-none-any.whl", hash = "sha256:1e09160a40b956dc623c910118fa636da93bd3ca0b9876a7b3df90f07d691560"}, + {file = "sphinx-7.2.6.tar.gz", hash = "sha256:9a5160e1ea90688d5963ba09a2dcd8bdd526620edbb65c328728f1b2228d5ab5"}, +] + +[package.dependencies] +alabaster = ">=0.7,<0.8" +babel = ">=2.9" +colorama = {version = ">=0.4.5", markers = "sys_platform == \"win32\""} +docutils = ">=0.18.1,<0.21" +imagesize = ">=1.3" +Jinja2 = ">=3.0" +packaging = ">=21.0" +Pygments = ">=2.14" +requests = ">=2.25.0" +snowballstemmer = ">=2.0" +sphinxcontrib-applehelp = "*" +sphinxcontrib-devhelp = "*" +sphinxcontrib-htmlhelp = ">=2.0.0" +sphinxcontrib-jsmath = "*" +sphinxcontrib-qthelp = "*" +sphinxcontrib-serializinghtml = ">=1.1.9" + +[package.extras] +docs = ["sphinxcontrib-websupport"] +lint = ["docutils-stubs", "flake8 (>=3.5.0)", "flake8-simplify", "isort", "mypy (>=0.990)", "ruff", "sphinx-lint", "types-requests"] +test = ["cython (>=3.0)", "filelock", "html5lib", "pytest (>=4.6)", "setuptools (>=67.0)"] + +[[package]] +name = "sphinx-autobuild" +version = "2021.3.14" +description = "Rebuild Sphinx documentation on changes, with live-reload in the browser." +optional = false +python-versions = ">=3.6" +files = [ + {file = "sphinx-autobuild-2021.3.14.tar.gz", hash = "sha256:de1ca3b66e271d2b5b5140c35034c89e47f263f2cd5db302c9217065f7443f05"}, + {file = "sphinx_autobuild-2021.3.14-py3-none-any.whl", hash = "sha256:8fe8cbfdb75db04475232f05187c776f46f6e9e04cacf1e49ce81bdac649ccac"}, +] + +[package.dependencies] +colorama = "*" +livereload = "*" +sphinx = "*" + +[package.extras] +test = ["pytest", "pytest-cov"] + +[[package]] +name = "sphinx-basic-ng" +version = "1.0.0b2" +description = "A modern skeleton for Sphinx themes." +optional = false +python-versions = ">=3.7" +files = [ + {file = "sphinx_basic_ng-1.0.0b2-py3-none-any.whl", hash = "sha256:eb09aedbabfb650607e9b4b68c9d240b90b1e1be221d6ad71d61c52e29f7932b"}, + {file = "sphinx_basic_ng-1.0.0b2.tar.gz", hash = "sha256:9ec55a47c90c8c002b5960c57492ec3021f5193cb26cebc2dc4ea226848651c9"}, +] + +[package.dependencies] +sphinx = ">=4.0" + +[package.extras] +docs = ["furo", "ipython", "myst-parser", "sphinx-copybutton", "sphinx-inline-tabs"] + +[[package]] +name = "sphinxcontrib-applehelp" +version = "1.0.7" +description = "sphinxcontrib-applehelp is a Sphinx extension which outputs Apple help books" +optional = false +python-versions = ">=3.9" +files = [ + {file = "sphinxcontrib_applehelp-1.0.7-py3-none-any.whl", hash = "sha256:094c4d56209d1734e7d252f6e0b3ccc090bd52ee56807a5d9315b19c122ab15d"}, + {file = "sphinxcontrib_applehelp-1.0.7.tar.gz", hash = "sha256:39fdc8d762d33b01a7d8f026a3b7d71563ea3b72787d5f00ad8465bd9d6dfbfa"}, +] + +[package.dependencies] +Sphinx = ">=5" + +[package.extras] +lint = ["docutils-stubs", "flake8", "mypy"] +test = ["pytest"] + +[[package]] +name = "sphinxcontrib-devhelp" +version = "1.0.5" +description = "sphinxcontrib-devhelp is a sphinx extension which outputs Devhelp documents" +optional = false +python-versions = ">=3.9" +files = [ + {file = "sphinxcontrib_devhelp-1.0.5-py3-none-any.whl", hash = "sha256:fe8009aed765188f08fcaadbb3ea0d90ce8ae2d76710b7e29ea7d047177dae2f"}, + {file = "sphinxcontrib_devhelp-1.0.5.tar.gz", hash = "sha256:63b41e0d38207ca40ebbeabcf4d8e51f76c03e78cd61abe118cf4435c73d4212"}, +] + +[package.dependencies] +Sphinx = ">=5" + +[package.extras] +lint = ["docutils-stubs", "flake8", "mypy"] +test = ["pytest"] + +[[package]] +name = "sphinxcontrib-htmlhelp" +version = "2.0.4" +description = "sphinxcontrib-htmlhelp is a sphinx extension which renders HTML help files" +optional = false +python-versions = ">=3.9" +files = [ + {file = "sphinxcontrib_htmlhelp-2.0.4-py3-none-any.whl", hash = "sha256:8001661c077a73c29beaf4a79968d0726103c5605e27db92b9ebed8bab1359e9"}, + {file = "sphinxcontrib_htmlhelp-2.0.4.tar.gz", hash = "sha256:6c26a118a05b76000738429b724a0568dbde5b72391a688577da08f11891092a"}, +] + +[package.dependencies] +Sphinx = ">=5" + +[package.extras] +lint = ["docutils-stubs", "flake8", "mypy"] +test = ["html5lib", "pytest"] + +[[package]] +name = "sphinxcontrib-jsmath" +version = "1.0.1" +description = "A sphinx extension which renders display math in HTML via JavaScript" +optional = false +python-versions = ">=3.5" +files = [ + {file = "sphinxcontrib-jsmath-1.0.1.tar.gz", hash = "sha256:a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8"}, + {file = "sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl", hash = "sha256:2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178"}, +] + +[package.extras] +test = ["flake8", "mypy", "pytest"] + +[[package]] +name = "sphinxcontrib-napoleon" +version = "0.7" +description = "Sphinx \"napoleon\" extension." +optional = false +python-versions = "*" +files = [ + {file = "sphinxcontrib-napoleon-0.7.tar.gz", hash = "sha256:407382beed396e9f2d7f3043fad6afda95719204a1e1a231ac865f40abcbfcf8"}, + {file = "sphinxcontrib_napoleon-0.7-py2.py3-none-any.whl", hash = "sha256:711e41a3974bdf110a484aec4c1a556799eb0b3f3b897521a018ad7e2db13fef"}, +] + +[package.dependencies] +pockets = ">=0.3" +six = ">=1.5.2" + +[[package]] +name = "sphinxcontrib-qthelp" +version = "1.0.6" +description = "sphinxcontrib-qthelp is a sphinx extension which outputs QtHelp documents" +optional = false +python-versions = ">=3.9" +files = [ + {file = "sphinxcontrib_qthelp-1.0.6-py3-none-any.whl", hash = "sha256:bf76886ee7470b934e363da7a954ea2825650013d367728588732c7350f49ea4"}, + {file = "sphinxcontrib_qthelp-1.0.6.tar.gz", hash = "sha256:62b9d1a186ab7f5ee3356d906f648cacb7a6bdb94d201ee7adf26db55092982d"}, +] + +[package.dependencies] +Sphinx = ">=5" + +[package.extras] +lint = ["docutils-stubs", "flake8", "mypy"] +test = ["pytest"] + +[[package]] +name = "sphinxcontrib-serializinghtml" +version = "1.1.9" +description = "sphinxcontrib-serializinghtml is a sphinx extension which outputs \"serialized\" HTML files (json and pickle)" +optional = false +python-versions = ">=3.9" +files = [ + {file = "sphinxcontrib_serializinghtml-1.1.9-py3-none-any.whl", hash = "sha256:9b36e503703ff04f20e9675771df105e58aa029cfcbc23b8ed716019b7416ae1"}, + {file = "sphinxcontrib_serializinghtml-1.1.9.tar.gz", hash = "sha256:0c64ff898339e1fac29abd2bf5f11078f3ec413cfe9c046d3120d7ca65530b54"}, +] + +[package.dependencies] +Sphinx = ">=5" + +[package.extras] +lint = ["docutils-stubs", "flake8", "mypy"] +test = ["pytest"] + [[package]] name = "stack-data" version = "0.6.3" @@ -4452,4 +4840,4 @@ cffi = ["cffi (>=1.11)"] [metadata] lock-version = "2.0" python-versions = ">=3.10, <3.12" -content-hash = "fe9961f7d226ecb7bcde8ad4b3cb6ce4d06635138b842841d3fbc4c9aaf6dd0b" +content-hash = "543e27d4d101c3041fbbddd3b7f4925da8f65137be2478de80d0be8df3aef0f3" diff --git a/pyproject.toml b/pyproject.toml index 8b550764..0cf8f250 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -33,6 +33,16 @@ transformer-lens=">=1.9.0" transformers=">=4.33.1, <4.34.0" # See https://github.com/neelnanda-io/TransformerLens/issues/404 + [tool.poetry.group.docs.dependencies] + sphinx = "^7.2.6" + sphinxcontrib-napoleon = "^0.7" + sphinx-autobuild = "^2021.3.14" + furo = "^2023.9.10" + myst-parser = "^2.0.0" + nbsphinx = "^0.9.3" + nbconvert = "^7.11.0" + pandoc = "^2.3" + [tool.poe.tasks] [tool.poe.tasks.check] help="Run all checks" @@ -80,6 +90,10 @@ help=" [alias for typecheck]" sequence=["typecheck"] + [tool.poe.tasks.make-docs] + script="docs.make_docs:build_docs" + help="Generates our docs" + [build-system] build-backend="poetry.core.masonry.api" requires=["poetry-core"] @@ -92,7 +106,6 @@ [tool.ruff] cache-dir=".cache/ruff" - exclude=["/.venv"] ignore=[ "ANN101", # self type annotation (it's inferred) "F722", # Forward annotations check (conflicts with jaxtyping) @@ -119,6 +132,11 @@ lines-after-imports=2 [tool.ruff.lint.per-file-ignores] + "**/docs/*" = [ + "ANN401", # Allow type.Any in doc scripts + "S603", # Starting an untrusted subprocess + "S607", # Starting a process with a partial path for sphinx + ] "**/tests/*"=[ "ARG001", # Fixtures often have unused arguments "PT004", # Fixtures don't return anything From db28ac7ee693e5c5837189c4b60dbc2c4cf1da80 Mon Sep 17 00:00:00 2001 From: Bryce Meyer Date: Wed, 8 Nov 2023 21:31:17 +0100 Subject: [PATCH 02/29] added hot reload command --- pyproject.toml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/pyproject.toml b/pyproject.toml index 0cf8f250..c9a6d89e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -94,6 +94,10 @@ script="docs.make_docs:build_docs" help="Generates our docs" + [tool.poe.tasks.docs-hot-reload] + script="docs.make_docs:docs_hot_reload" + help="Starts our watch server" + [build-system] build-backend="poetry.core.masonry.api" requires=["poetry-core"] From 62245002a45eaae8153089c98d93ee5b62c6a65a Mon Sep 17 00:00:00 2001 From: Bryce Meyer Date: Wed, 8 Nov 2023 21:36:56 +0100 Subject: [PATCH 03/29] added github docs action --- .github/workflows/gh-pages.yml | 61 ++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 .github/workflows/gh-pages.yml diff --git a/.github/workflows/gh-pages.yml b/.github/workflows/gh-pages.yml new file mode 100644 index 00000000..a521a2e7 --- /dev/null +++ b/.github/workflows/gh-pages.yml @@ -0,0 +1,61 @@ +name: Docs +on: + push: + branches: + - main + pull_request: + branches: + - '*' + +permissions: + contents: write + +jobs: + build-docs: + # When running on a PR, this just checks we can build the docs without errors + # When running on merge to main, it builds the docs and then another job deploys them + name: ${{ github.event_name == 'pull_request' && 'Check Build Docs' || 'Build Docs' }} + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Install Poetry + uses: snok/install-poetry@v1 + - name: Set up Python + uses: actions/setup-python@v4 + with: + python-version: "3.11" + cache: "poetry" + - name: Install pandoc + uses: awalsh128/cache-apt-pkgs-action@latest + with: + packages: pandoc + version: 1.0 + - name: Install dependencies + run: poetry install --with docs + - name: Build Docs + run: poetry poe build-docs + - name: Upload Docs Artifact + uses: actions/upload-artifact@v3 + with: + name: documentation + path: docs/build + + deploy-docs: + name: Deploy Docs + runs-on: ubuntu-latest + # Only run if merging a PR into main + if: github.event_name == 'push' && github.ref == 'refs/heads/main' + needs: build-docs + steps: + - uses: actions/checkout@v4 + - name: Download Docs Artifact + uses: actions/download-artifact@v3 + with: + name: documentation + path: docs/build + - name: Upload to GitHub Pages + uses: JamesIves/github-pages-deploy-action@v4 + with: + folder: docs/build + clean-exclude: | + *.*.*/ From f589872abf8a83a028da2784d7a7cb7dc6b923a2 Mon Sep 17 00:00:00 2001 From: Bryce Meyer Date: Wed, 8 Nov 2023 21:43:22 +0100 Subject: [PATCH 04/29] changed build command --- .github/workflows/gh-pages.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/gh-pages.yml b/.github/workflows/gh-pages.yml index a521a2e7..b8af4914 100644 --- a/.github/workflows/gh-pages.yml +++ b/.github/workflows/gh-pages.yml @@ -33,7 +33,7 @@ jobs: - name: Install dependencies run: poetry install --with docs - name: Build Docs - run: poetry poe build-docs + run: poetry run build-docs - name: Upload Docs Artifact uses: actions/upload-artifact@v3 with: From bd5d37bfd2b3ddfcb1274c891741889d21080fcd Mon Sep 17 00:00:00 2001 From: Bryce Meyer Date: Wed, 8 Nov 2023 21:58:38 +0100 Subject: [PATCH 05/29] ensured generated directory exists --- .pre-commit-config.yaml | 2 +- docs/make_docs.py | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 290a0ed6..477bf407 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -24,7 +24,7 @@ repos: require_serial: true - id: ruff_format name: Ruff Format - entry: poetry run ruff format sparse_autoencoder --check + entry: poetry run ruff format sparse_autoencoder --check --diff language: system types: [python] require_serial: true diff --git a/docs/make_docs.py b/docs/make_docs.py index ce1f1906..fe84b0bb 100644 --- a/docs/make_docs.py +++ b/docs/make_docs.py @@ -16,6 +16,9 @@ def copy_demos(_app: Any | None = None) -> None: """Copy demo notebooks to the generated directory.""" + if not GENERATED_DIR.exists(): + GENERATED_DIR.mkdir() + copy_to_dir = GENERATED_DIR / "demos" notebooks_to_copy = [ "benchmarks.ipynb", From 4439ad0e9f7acc5a6466e433e4265dcf7fb73470 Mon Sep 17 00:00:00 2001 From: Bryce Meyer Date: Wed, 8 Nov 2023 22:03:08 +0100 Subject: [PATCH 06/29] made sure static directory exists --- docs/source/_static/.gitkeep | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/source/_static/.gitkeep diff --git a/docs/source/_static/.gitkeep b/docs/source/_static/.gitkeep new file mode 100644 index 00000000..e69de29b From 43aa55ff5f4ebfa7ba84be2f7d00eec087e03ef5 Mon Sep 17 00:00:00 2001 From: Bryce Meyer Date: Wed, 8 Nov 2023 23:04:18 +0100 Subject: [PATCH 07/29] only used cuda if available --- benchmarks.ipynb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/benchmarks.ipynb b/benchmarks.ipynb index dd3c53b8..d9aaa37b 100644 --- a/benchmarks.ipynb +++ b/benchmarks.ipynb @@ -264,7 +264,7 @@ "source": [ "benchmarks_to_run = {\n", " \"GPU Tensor\": TensorActivationStore(\n", - " max_items=num_items, num_neurons=num_neurons, device=torch.device(\"cuda\")\n", + " max_items=num_items, num_neurons=num_neurons, device=torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n", " ),\n", " \"CPU Tensor\": TensorActivationStore(\n", " max_items=num_items, num_neurons=num_neurons, device=torch.device(\"cpu\")\n", From b1f1f66c07ff38521dd8af3301c2b9f84519451a Mon Sep 17 00:00:00 2001 From: Bryce Meyer Date: Wed, 8 Nov 2023 23:07:52 +0100 Subject: [PATCH 08/29] commented out blocks --- benchmarks.ipynb | 52 ++++++++++++++++++++++++------------------------ 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/benchmarks.ipynb b/benchmarks.ipynb index d9aaa37b..ae024fa6 100644 --- a/benchmarks.ipynb +++ b/benchmarks.ipynb @@ -262,19 +262,19 @@ "metadata": {}, "outputs": [], "source": [ - "benchmarks_to_run = {\n", - " \"GPU Tensor\": TensorActivationStore(\n", - " max_items=num_items, num_neurons=num_neurons, device=torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n", - " ),\n", - " \"CPU Tensor\": TensorActivationStore(\n", - " max_items=num_items, num_neurons=num_neurons, device=torch.device(\"cpu\")\n", - " ),\n", - " \"CPU List, No Multiprocessing\": ListActivationStore(),\n", - " \"CPU List, Multiprocessing (multiple GPUs)\": ListActivationStore(\n", - " multiprocessing_enabled=True\n", - " ),\n", - " \"Disk\": DiskActivationStore(empty_dir=True, max_cache_size=100_000),\n", - "}" + "# benchmarks_to_run = {\n", + "# \"GPU Tensor\": TensorActivationStore(\n", + "# max_items=num_items, num_neurons=num_neurons, device=torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n", + "# ),\n", + "# \"CPU Tensor\": TensorActivationStore(\n", + "# max_items=num_items, num_neurons=num_neurons, device=torch.device(\"cpu\")\n", + "# ),\n", + "# \"CPU List, No Multiprocessing\": ListActivationStore(),\n", + "# \"CPU List, Multiprocessing (multiple GPUs)\": ListActivationStore(\n", + "# multiprocessing_enabled=True\n", + "# ),\n", + "# \"Disk\": DiskActivationStore(empty_dir=True, max_cache_size=100_000),\n", + "# }" ] }, { @@ -298,21 +298,21 @@ "metadata": {}, "outputs": [], "source": [ - "results = {}\n", + "# results = {}\n", "\n", - "for name, store in tqdm.tqdm(benchmarks_to_run.items()):\n", - " store.empty()\n", - " start_time = time.time()\n", - " for batch in dummy_activations:\n", - " store.extend(batch)\n", - " if hasattr(store, \"wait_for_writes_to_complete\"):\n", - " store.wait_for_writes_to_complete()\n", - " end_time = time.time()\n", - " results[name] = end_time - start_time\n", + "# for name, store in tqdm.tqdm(benchmarks_to_run.items()):\n", + "# store.empty()\n", + "# start_time = time.time()\n", + "# for batch in dummy_activations:\n", + "# store.extend(batch)\n", + "# if hasattr(store, \"wait_for_writes_to_complete\"):\n", + "# store.wait_for_writes_to_complete()\n", + "# end_time = time.time()\n", + "# results[name] = end_time - start_time\n", "\n", - "df = pd.DataFrame(results, index=[\"Time (s)\"]).T\n", - "df[\"Time 10B (h estimate)\"] = df[\"Time (s)\"] * 10**10 / num_items / 3600\n", - "df" + "# df = pd.DataFrame(results, index=[\"Time (s)\"]).T\n", + "# df[\"Time 10B (h estimate)\"] = df[\"Time (s)\"] * 10**10 / num_items / 3600\n", + "# df" ] }, { From 1613bfb6c306da8ee531398f7649842ae358bae0 Mon Sep 17 00:00:00 2001 From: Bryce Meyer Date: Wed, 8 Nov 2023 23:12:14 +0100 Subject: [PATCH 09/29] commented out more blocks --- benchmarks.ipynb | 124 +++++++++++++++++++++++------------------------ 1 file changed, 62 insertions(+), 62 deletions(-) diff --git a/benchmarks.ipynb b/benchmarks.ipynb index ae024fa6..1335986e 100644 --- a/benchmarks.ipynb +++ b/benchmarks.ipynb @@ -75,15 +75,15 @@ "metadata": {}, "outputs": [], "source": [ - "# Create a batch of text data\n", - "dataset = load_dataset(\"NeelNanda/c4-code-tokenized-2b\", split=\"train\", streaming=True)\n", - "first_batch = []\n", - "for idx, example in enumerate(dataset):\n", - " if not idx <= 24:\n", - " break\n", - " first_batch.append(example[\"tokens\"])\n", - "first_batch = torch.tensor(first_batch)\n", - "f\"Number of activations to store in this benchmark test: {first_batch.numel()}\"" + "# # Create a batch of text data\n", + "# dataset = load_dataset(\"NeelNanda/c4-code-tokenized-2b\", split=\"train\", streaming=True)\n", + "# first_batch = []\n", + "# for idx, example in enumerate(dataset):\n", + "# if not idx <= 24:\n", + "# break\n", + "# first_batch.append(example[\"tokens\"])\n", + "# first_batch = torch.tensor(first_batch)\n", + "# f\"Number of activations to store in this benchmark test: {first_batch.numel()}\"" ] }, { @@ -92,14 +92,14 @@ "metadata": {}, "outputs": [], "source": [ - "# Create the activations\n", - "src_model = HookedTransformer.from_pretrained(\"NeelNanda/GELU_1L512W_C4_Code\")\n", - "logits, cache = src_model.run_with_cache(first_batch)\n", - "activations = cache[\"blocks.0.mlp.hook_post\"].half()\n", - "number_activations = activations.numel()\n", - "size_bytes_activations = number_activations * 2 # Assume float 16\n", - "size_mb_activations = f\"{size_bytes_activations / (10**6):.2f} MB\"\n", - "f\"With {activations.numel()} features at half precision, the features take up {size_mb_activations} of memory\"" + "# # Create the activations\n", + "# src_model = HookedTransformer.from_pretrained(\"NeelNanda/GELU_1L512W_C4_Code\")\n", + "# logits, cache = src_model.run_with_cache(first_batch)\n", + "# activations = cache[\"blocks.0.mlp.hook_post\"].half()\n", + "# number_activations = activations.numel()\n", + "# size_bytes_activations = number_activations * 2 # Assume float 16\n", + "# size_mb_activations = f\"{size_bytes_activations / (10**6):.2f} MB\"\n", + "# f\"With {activations.numel()} features at half precision, the features take up {size_mb_activations} of memory\"" ] }, { @@ -115,20 +115,20 @@ "metadata": {}, "outputs": [], "source": [ - "# Save to temp dir\n", - "temp_dir = tempfile.gettempdir()\n", - "temp_file = temp_dir + \"/temp.pt\"\n", - "temp_file_gz = temp_file + \".gz\"\n", - "torch.save(activations, temp_file)\n", + "# # Save to temp dir\n", + "# temp_dir = tempfile.gettempdir()\n", + "# temp_file = temp_dir + \"/temp.pt\"\n", + "# temp_file_gz = temp_file + \".gz\"\n", + "# torch.save(activations, temp_file)\n", "\n", - "# Zip it\n", - "with open(temp_file, \"rb\") as f_in:\n", - " with gzip.open(temp_file_gz, \"wb\") as f_out:\n", - " shutil.copyfileobj(f_in, f_out)\n", + "# # Zip it\n", + "# with open(temp_file, \"rb\") as f_in:\n", + "# with gzip.open(temp_file_gz, \"wb\") as f_out:\n", + "# shutil.copyfileobj(f_in, f_out)\n", "\n", - "# Get the file size back\n", - "fs_bytes = os.path.getsize(temp_file_gz)\n", - "f\"Compressed file size is {fs_bytes / (10**6):.2f} MB\"" + "# # Get the file size back\n", + "# fs_bytes = os.path.getsize(temp_file_gz)\n", + "# f\"Compressed file size is {fs_bytes / (10**6):.2f} MB\"" ] }, { @@ -144,16 +144,16 @@ "metadata": {}, "outputs": [], "source": [ - "assumed_n_activation_batches = 8 * (10**9)\n", - "assumed_n_activations_per_batch = 2048\n", - "uncompressed_size_per_activation = 2 # float16\n", - "estimated_size = (\n", - " assumed_n_activation_batches\n", - " * assumed_n_activations_per_batch\n", - " * uncompressed_size_per_activation\n", - ")\n", - "f\"With {assumed_n_activation_batches/10**9}B activations with {assumed_n_activations_per_batch} features, \\\n", - "the estimated size is {estimated_size / (10**12):.2f} TB\"" + "# assumed_n_activation_batches = 8 * (10**9)\n", + "# assumed_n_activations_per_batch = 2048\n", + "# uncompressed_size_per_activation = 2 # float16\n", + "# estimated_size = (\n", + "# assumed_n_activation_batches\n", + "# * assumed_n_activations_per_batch\n", + "# * uncompressed_size_per_activation\n", + "# )\n", + "# f\"With {assumed_n_activation_batches/10**9}B activations with {assumed_n_activations_per_batch} features, \\\n", + "# the estimated size is {estimated_size / (10**12):.2f} TB\"" ] }, { @@ -162,18 +162,18 @@ "metadata": {}, "outputs": [], "source": [ - "# Calculate the amount of activations you can store with different sizes\n", - "sizes_gb = [10, 50, 100, 300, 500, 1000]\n", - "activations_per_size = [\n", - " i * (10**9) / uncompressed_size_per_activation / assumed_n_activations_per_batch\n", - " for i in sizes_gb\n", - "]\n", + "# # Calculate the amount of activations you can store with different sizes\n", + "# sizes_gb = [10, 50, 100, 300, 500, 1000]\n", + "# activations_per_size = [\n", + "# i * (10**9) / uncompressed_size_per_activation / assumed_n_activations_per_batch\n", + "# for i in sizes_gb\n", + "# ]\n", "\n", - "table = pd.DataFrame({\"Size (GB)\": sizes_gb, \"Activations\": activations_per_size})\n", - "table[\"Activations\"] = table[\"Activations\"].apply(\n", - " lambda x: \"{:,.0f}\".format(x / 10**6) + \"M\"\n", - ")\n", - "table" + "# table = pd.DataFrame({\"Size (GB)\": sizes_gb, \"Activations\": activations_per_size})\n", + "# table[\"Activations\"] = table[\"Activations\"].apply(\n", + "# lambda x: \"{:,.0f}\".format(x / 10**6) + \"M\"\n", + "# )\n", + "# table" ] }, { @@ -238,22 +238,22 @@ "metadata": {}, "outputs": [], "source": [ - "num_items: int = 1_000_000\n", - "num_neurons: int = 2048\n", + "# num_items: int = 1_000_000\n", + "# num_neurons: int = 2048\n", "\n", "\n", - "def create_dummy_activations(\n", - " n_items: int, n_neurons: int\n", - ") -> list[Float[Tensor, \"batch neurons\"]]:\n", - " \"\"\"Create Dummy Activations for Benchmarks.\"\"\"\n", - " batch_size = 1_000\n", - " n_batches = int(n_items // batch_size)\n", - " activations = [torch.rand(batch_size, n_neurons) for _ in range(n_batches)]\n", - " return activations\n", + "# def create_dummy_activations(\n", + "# n_items: int, n_neurons: int\n", + "# ) -> list[Float[Tensor, \"batch neurons\"]]:\n", + "# \"\"\"Create Dummy Activations for Benchmarks.\"\"\"\n", + "# batch_size = 1_000\n", + "# n_batches = int(n_items // batch_size)\n", + "# activations = [torch.rand(batch_size, n_neurons) for _ in range(n_batches)]\n", + "# return activations\n", "\n", "\n", - "dummy_activations = create_dummy_activations(num_items, num_neurons)\n", - "dummy_activations[0].shape" + "# dummy_activations = create_dummy_activations(num_items, num_neurons)\n", + "# dummy_activations[0].shape" ] }, { From 241e7f568bcbe64b59cbb74bb84a110adc72791d Mon Sep 17 00:00:00 2001 From: Bryce Meyer Date: Wed, 8 Nov 2023 23:18:47 +0100 Subject: [PATCH 10/29] added block again --- benchmarks.ipynb | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/benchmarks.ipynb b/benchmarks.ipynb index 1335986e..78544ae2 100644 --- a/benchmarks.ipynb +++ b/benchmarks.ipynb @@ -75,15 +75,15 @@ "metadata": {}, "outputs": [], "source": [ - "# # Create a batch of text data\n", - "# dataset = load_dataset(\"NeelNanda/c4-code-tokenized-2b\", split=\"train\", streaming=True)\n", - "# first_batch = []\n", - "# for idx, example in enumerate(dataset):\n", - "# if not idx <= 24:\n", - "# break\n", - "# first_batch.append(example[\"tokens\"])\n", - "# first_batch = torch.tensor(first_batch)\n", - "# f\"Number of activations to store in this benchmark test: {first_batch.numel()}\"" + "# Create a batch of text data\n", + "dataset = load_dataset(\"NeelNanda/c4-code-tokenized-2b\", split=\"train\", streaming=True)\n", + "first_batch = []\n", + "for idx, example in enumerate(dataset):\n", + " if not idx <= 24:\n", + " break\n", + " first_batch.append(example[\"tokens\"])\n", + "first_batch = torch.tensor(first_batch)\n", + "f\"Number of activations to store in this benchmark test: {first_batch.numel()}\"" ] }, { From 75146f726fb93129d410ae10406e9db53aed59c9 Mon Sep 17 00:00:00 2001 From: Bryce Meyer Date: Wed, 8 Nov 2023 23:20:59 +0100 Subject: [PATCH 11/29] added two more blocks --- benchmarks.ipynb | 40 ++++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/benchmarks.ipynb b/benchmarks.ipynb index 78544ae2..5e44c250 100644 --- a/benchmarks.ipynb +++ b/benchmarks.ipynb @@ -92,14 +92,14 @@ "metadata": {}, "outputs": [], "source": [ - "# # Create the activations\n", - "# src_model = HookedTransformer.from_pretrained(\"NeelNanda/GELU_1L512W_C4_Code\")\n", - "# logits, cache = src_model.run_with_cache(first_batch)\n", - "# activations = cache[\"blocks.0.mlp.hook_post\"].half()\n", - "# number_activations = activations.numel()\n", - "# size_bytes_activations = number_activations * 2 # Assume float 16\n", - "# size_mb_activations = f\"{size_bytes_activations / (10**6):.2f} MB\"\n", - "# f\"With {activations.numel()} features at half precision, the features take up {size_mb_activations} of memory\"" + "# Create the activations\n", + "src_model = HookedTransformer.from_pretrained(\"NeelNanda/GELU_1L512W_C4_Code\")\n", + "logits, cache = src_model.run_with_cache(first_batch)\n", + "activations = cache[\"blocks.0.mlp.hook_post\"].half()\n", + "number_activations = activations.numel()\n", + "size_bytes_activations = number_activations * 2 # Assume float 16\n", + "size_mb_activations = f\"{size_bytes_activations / (10**6):.2f} MB\"\n", + "f\"With {activations.numel()} features at half precision, the features take up {size_mb_activations} of memory\"" ] }, { @@ -115,20 +115,20 @@ "metadata": {}, "outputs": [], "source": [ - "# # Save to temp dir\n", - "# temp_dir = tempfile.gettempdir()\n", - "# temp_file = temp_dir + \"/temp.pt\"\n", - "# temp_file_gz = temp_file + \".gz\"\n", - "# torch.save(activations, temp_file)\n", + "# Save to temp dir\n", + "temp_dir = tempfile.gettempdir()\n", + "temp_file = temp_dir + \"/temp.pt\"\n", + "temp_file_gz = temp_file + \".gz\"\n", + "torch.save(activations, temp_file)\n", "\n", - "# # Zip it\n", - "# with open(temp_file, \"rb\") as f_in:\n", - "# with gzip.open(temp_file_gz, \"wb\") as f_out:\n", - "# shutil.copyfileobj(f_in, f_out)\n", + "# Zip it\n", + "with open(temp_file, \"rb\") as f_in:\n", + " with gzip.open(temp_file_gz, \"wb\") as f_out:\n", + " shutil.copyfileobj(f_in, f_out)\n", "\n", - "# # Get the file size back\n", - "# fs_bytes = os.path.getsize(temp_file_gz)\n", - "# f\"Compressed file size is {fs_bytes / (10**6):.2f} MB\"" + "# Get the file size back\n", + "fs_bytes = os.path.getsize(temp_file_gz)\n", + "f\"Compressed file size is {fs_bytes / (10**6):.2f} MB\"" ] }, { From 1eab931f056949243440c121a3b438d584cab1c4 Mon Sep 17 00:00:00 2001 From: Bryce Meyer Date: Wed, 8 Nov 2023 23:24:21 +0100 Subject: [PATCH 12/29] added two more blocks --- benchmarks.ipynb | 42 +++++++++++++++++++++--------------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/benchmarks.ipynb b/benchmarks.ipynb index 5e44c250..b034cff4 100644 --- a/benchmarks.ipynb +++ b/benchmarks.ipynb @@ -144,16 +144,16 @@ "metadata": {}, "outputs": [], "source": [ - "# assumed_n_activation_batches = 8 * (10**9)\n", - "# assumed_n_activations_per_batch = 2048\n", - "# uncompressed_size_per_activation = 2 # float16\n", - "# estimated_size = (\n", - "# assumed_n_activation_batches\n", - "# * assumed_n_activations_per_batch\n", - "# * uncompressed_size_per_activation\n", - "# )\n", - "# f\"With {assumed_n_activation_batches/10**9}B activations with {assumed_n_activations_per_batch} features, \\\n", - "# the estimated size is {estimated_size / (10**12):.2f} TB\"" + "assumed_n_activation_batches = 8 * (10**9)\n", + "assumed_n_activations_per_batch = 2048\n", + "uncompressed_size_per_activation = 2 # float16\n", + "estimated_size = (\n", + " assumed_n_activation_batches\n", + " * assumed_n_activations_per_batch\n", + " * uncompressed_size_per_activation\n", + ")\n", + "f\"With {assumed_n_activation_batches/10**9}B activations with {assumed_n_activations_per_batch} features, \\\n", + "the estimated size is {estimated_size / (10**12):.2f} TB\"" ] }, { @@ -162,18 +162,18 @@ "metadata": {}, "outputs": [], "source": [ - "# # Calculate the amount of activations you can store with different sizes\n", - "# sizes_gb = [10, 50, 100, 300, 500, 1000]\n", - "# activations_per_size = [\n", - "# i * (10**9) / uncompressed_size_per_activation / assumed_n_activations_per_batch\n", - "# for i in sizes_gb\n", - "# ]\n", + "# Calculate the amount of activations you can store with different sizes\n", + "sizes_gb = [10, 50, 100, 300, 500, 1000]\n", + "activations_per_size = [\n", + " i * (10**9) / uncompressed_size_per_activation / assumed_n_activations_per_batch\n", + " for i in sizes_gb\n", + "]\n", "\n", - "# table = pd.DataFrame({\"Size (GB)\": sizes_gb, \"Activations\": activations_per_size})\n", - "# table[\"Activations\"] = table[\"Activations\"].apply(\n", - "# lambda x: \"{:,.0f}\".format(x / 10**6) + \"M\"\n", - "# )\n", - "# table" + "table = pd.DataFrame({\"Size (GB)\": sizes_gb, \"Activations\": activations_per_size})\n", + "table[\"Activations\"] = table[\"Activations\"].apply(\n", + " lambda x: \"{:,.0f}\".format(x / 10**6) + \"M\"\n", + ")\n", + "table" ] }, { From fd7aec7f175b3a76befe836aa6984543cb8a7bd2 Mon Sep 17 00:00:00 2001 From: Bryce Meyer Date: Wed, 8 Nov 2023 23:27:08 +0100 Subject: [PATCH 13/29] added another block --- benchmarks.ipynb | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/benchmarks.ipynb b/benchmarks.ipynb index b034cff4..ae024fa6 100644 --- a/benchmarks.ipynb +++ b/benchmarks.ipynb @@ -238,22 +238,22 @@ "metadata": {}, "outputs": [], "source": [ - "# num_items: int = 1_000_000\n", - "# num_neurons: int = 2048\n", + "num_items: int = 1_000_000\n", + "num_neurons: int = 2048\n", "\n", "\n", - "# def create_dummy_activations(\n", - "# n_items: int, n_neurons: int\n", - "# ) -> list[Float[Tensor, \"batch neurons\"]]:\n", - "# \"\"\"Create Dummy Activations for Benchmarks.\"\"\"\n", - "# batch_size = 1_000\n", - "# n_batches = int(n_items // batch_size)\n", - "# activations = [torch.rand(batch_size, n_neurons) for _ in range(n_batches)]\n", - "# return activations\n", + "def create_dummy_activations(\n", + " n_items: int, n_neurons: int\n", + ") -> list[Float[Tensor, \"batch neurons\"]]:\n", + " \"\"\"Create Dummy Activations for Benchmarks.\"\"\"\n", + " batch_size = 1_000\n", + " n_batches = int(n_items // batch_size)\n", + " activations = [torch.rand(batch_size, n_neurons) for _ in range(n_batches)]\n", + " return activations\n", "\n", "\n", - "# dummy_activations = create_dummy_activations(num_items, num_neurons)\n", - "# dummy_activations[0].shape" + "dummy_activations = create_dummy_activations(num_items, num_neurons)\n", + "dummy_activations[0].shape" ] }, { From a1aa9db850ca0d40cdd5b9da069dab17c63bab75 Mon Sep 17 00:00:00 2001 From: Bryce Meyer Date: Wed, 8 Nov 2023 23:30:55 +0100 Subject: [PATCH 14/29] added more blocks --- benchmarks.ipynb | 56 ++++++++++++++++++++++++------------------------ 1 file changed, 28 insertions(+), 28 deletions(-) diff --git a/benchmarks.ipynb b/benchmarks.ipynb index ae024fa6..7fc3bc6e 100644 --- a/benchmarks.ipynb +++ b/benchmarks.ipynb @@ -252,8 +252,8 @@ " return activations\n", "\n", "\n", - "dummy_activations = create_dummy_activations(num_items, num_neurons)\n", - "dummy_activations[0].shape" + "# dummy_activations = create_dummy_activations(num_items, num_neurons)\n", + "# dummy_activations[0].shape" ] }, { @@ -262,19 +262,19 @@ "metadata": {}, "outputs": [], "source": [ - "# benchmarks_to_run = {\n", - "# \"GPU Tensor\": TensorActivationStore(\n", - "# max_items=num_items, num_neurons=num_neurons, device=torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n", - "# ),\n", - "# \"CPU Tensor\": TensorActivationStore(\n", - "# max_items=num_items, num_neurons=num_neurons, device=torch.device(\"cpu\")\n", - "# ),\n", - "# \"CPU List, No Multiprocessing\": ListActivationStore(),\n", - "# \"CPU List, Multiprocessing (multiple GPUs)\": ListActivationStore(\n", - "# multiprocessing_enabled=True\n", - "# ),\n", - "# \"Disk\": DiskActivationStore(empty_dir=True, max_cache_size=100_000),\n", - "# }" + "benchmarks_to_run = {\n", + " \"GPU Tensor\": TensorActivationStore(\n", + " max_items=num_items, num_neurons=num_neurons, device=torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n", + " ),\n", + " \"CPU Tensor\": TensorActivationStore(\n", + " max_items=num_items, num_neurons=num_neurons, device=torch.device(\"cpu\")\n", + " ),\n", + " \"CPU List, No Multiprocessing\": ListActivationStore(),\n", + " \"CPU List, Multiprocessing (multiple GPUs)\": ListActivationStore(\n", + " multiprocessing_enabled=True\n", + " ),\n", + " \"Disk\": DiskActivationStore(empty_dir=True, max_cache_size=100_000),\n", + "}" ] }, { @@ -298,21 +298,21 @@ "metadata": {}, "outputs": [], "source": [ - "# results = {}\n", + "results = {}\n", "\n", - "# for name, store in tqdm.tqdm(benchmarks_to_run.items()):\n", - "# store.empty()\n", - "# start_time = time.time()\n", - "# for batch in dummy_activations:\n", - "# store.extend(batch)\n", - "# if hasattr(store, \"wait_for_writes_to_complete\"):\n", - "# store.wait_for_writes_to_complete()\n", - "# end_time = time.time()\n", - "# results[name] = end_time - start_time\n", + "for name, store in tqdm.tqdm(benchmarks_to_run.items()):\n", + " store.empty()\n", + " start_time = time.time()\n", + " for batch in dummy_activations:\n", + " store.extend(batch)\n", + " if hasattr(store, \"wait_for_writes_to_complete\"):\n", + " store.wait_for_writes_to_complete()\n", + " end_time = time.time()\n", + " results[name] = end_time - start_time\n", "\n", - "# df = pd.DataFrame(results, index=[\"Time (s)\"]).T\n", - "# df[\"Time 10B (h estimate)\"] = df[\"Time (s)\"] * 10**10 / num_items / 3600\n", - "# df" + "df = pd.DataFrame(results, index=[\"Time (s)\"]).T\n", + "df[\"Time 10B (h estimate)\"] = df[\"Time (s)\"] * 10**10 / num_items / 3600\n", + "df" ] }, { From 8835615999d86cd1548ee2adba95b48d3731a1c3 Mon Sep 17 00:00:00 2001 From: Bryce Meyer Date: Wed, 8 Nov 2023 23:33:59 +0100 Subject: [PATCH 15/29] removed another block --- benchmarks.ipynb | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/benchmarks.ipynb b/benchmarks.ipynb index 7fc3bc6e..a5b5f83c 100644 --- a/benchmarks.ipynb +++ b/benchmarks.ipynb @@ -264,7 +264,7 @@ "source": [ "benchmarks_to_run = {\n", " \"GPU Tensor\": TensorActivationStore(\n", - " max_items=num_items, num_neurons=num_neurons, device=torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n", + " max_items=num_items, num_neurons=num_neurons, device=torch.device(\"cuda\")\n", " ),\n", " \"CPU Tensor\": TensorActivationStore(\n", " max_items=num_items, num_neurons=num_neurons, device=torch.device(\"cpu\")\n", @@ -298,21 +298,21 @@ "metadata": {}, "outputs": [], "source": [ - "results = {}\n", + "# results = {}\n", "\n", - "for name, store in tqdm.tqdm(benchmarks_to_run.items()):\n", - " store.empty()\n", - " start_time = time.time()\n", - " for batch in dummy_activations:\n", - " store.extend(batch)\n", - " if hasattr(store, \"wait_for_writes_to_complete\"):\n", - " store.wait_for_writes_to_complete()\n", - " end_time = time.time()\n", - " results[name] = end_time - start_time\n", + "# for name, store in tqdm.tqdm(benchmarks_to_run.items()):\n", + "# store.empty()\n", + "# start_time = time.time()\n", + "# for batch in dummy_activations:\n", + "# store.extend(batch)\n", + "# if hasattr(store, \"wait_for_writes_to_complete\"):\n", + "# store.wait_for_writes_to_complete()\n", + "# end_time = time.time()\n", + "# results[name] = end_time - start_time\n", "\n", - "df = pd.DataFrame(results, index=[\"Time (s)\"]).T\n", - "df[\"Time 10B (h estimate)\"] = df[\"Time (s)\"] * 10**10 / num_items / 3600\n", - "df" + "# df = pd.DataFrame(results, index=[\"Time (s)\"]).T\n", + "# df[\"Time 10B (h estimate)\"] = df[\"Time (s)\"] * 10**10 / num_items / 3600\n", + "# df" ] }, { From 8a7321c4cd6b70ea0cd2785bc28dadc9dba7182b Mon Sep 17 00:00:00 2001 From: Bryce Meyer Date: Wed, 8 Nov 2023 23:37:40 +0100 Subject: [PATCH 16/29] added cuda check again --- benchmarks.ipynb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/benchmarks.ipynb b/benchmarks.ipynb index a5b5f83c..9765f626 100644 --- a/benchmarks.ipynb +++ b/benchmarks.ipynb @@ -264,7 +264,7 @@ "source": [ "benchmarks_to_run = {\n", " \"GPU Tensor\": TensorActivationStore(\n", - " max_items=num_items, num_neurons=num_neurons, device=torch.device(\"cuda\")\n", + " max_items=num_items, num_neurons=num_neurons, device=torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n", " ),\n", " \"CPU Tensor\": TensorActivationStore(\n", " max_items=num_items, num_neurons=num_neurons, device=torch.device(\"cpu\")\n", From 7ec4c6a1277f4fcbb61583028f49a41b76964769 Mon Sep 17 00:00:00 2001 From: Bryce Meyer Date: Wed, 8 Nov 2023 23:42:01 +0100 Subject: [PATCH 17/29] removed block again --- benchmarks.ipynb | 52 ++++++++++++++++++++++++------------------------ 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/benchmarks.ipynb b/benchmarks.ipynb index 9765f626..4e677209 100644 --- a/benchmarks.ipynb +++ b/benchmarks.ipynb @@ -262,19 +262,19 @@ "metadata": {}, "outputs": [], "source": [ - "benchmarks_to_run = {\n", - " \"GPU Tensor\": TensorActivationStore(\n", - " max_items=num_items, num_neurons=num_neurons, device=torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n", - " ),\n", - " \"CPU Tensor\": TensorActivationStore(\n", - " max_items=num_items, num_neurons=num_neurons, device=torch.device(\"cpu\")\n", - " ),\n", - " \"CPU List, No Multiprocessing\": ListActivationStore(),\n", - " \"CPU List, Multiprocessing (multiple GPUs)\": ListActivationStore(\n", - " multiprocessing_enabled=True\n", - " ),\n", - " \"Disk\": DiskActivationStore(empty_dir=True, max_cache_size=100_000),\n", - "}" + "# benchmarks_to_run = {\n", + "# \"GPU Tensor\": TensorActivationStore(\n", + "# max_items=num_items, num_neurons=num_neurons, device=torch.device(\"cuda\")\n", + "# ),\n", + "# \"CPU Tensor\": TensorActivationStore(\n", + "# max_items=num_items, num_neurons=num_neurons, device=torch.device(\"cpu\")\n", + "# ),\n", + "# \"CPU List, No Multiprocessing\": ListActivationStore(),\n", + "# \"CPU List, Multiprocessing (multiple GPUs)\": ListActivationStore(\n", + "# multiprocessing_enabled=True\n", + "# ),\n", + "# \"Disk\": DiskActivationStore(empty_dir=True, max_cache_size=100_000),\n", + "# }" ] }, { @@ -298,21 +298,21 @@ "metadata": {}, "outputs": [], "source": [ - "# results = {}\n", + "results = {}\n", "\n", - "# for name, store in tqdm.tqdm(benchmarks_to_run.items()):\n", - "# store.empty()\n", - "# start_time = time.time()\n", - "# for batch in dummy_activations:\n", - "# store.extend(batch)\n", - "# if hasattr(store, \"wait_for_writes_to_complete\"):\n", - "# store.wait_for_writes_to_complete()\n", - "# end_time = time.time()\n", - "# results[name] = end_time - start_time\n", + "for name, store in tqdm.tqdm(benchmarks_to_run.items()):\n", + " store.empty()\n", + " start_time = time.time()\n", + " for batch in dummy_activations:\n", + " store.extend(batch)\n", + " if hasattr(store, \"wait_for_writes_to_complete\"):\n", + " store.wait_for_writes_to_complete()\n", + " end_time = time.time()\n", + " results[name] = end_time - start_time\n", "\n", - "# df = pd.DataFrame(results, index=[\"Time (s)\"]).T\n", - "# df[\"Time 10B (h estimate)\"] = df[\"Time (s)\"] * 10**10 / num_items / 3600\n", - "# df" + "df = pd.DataFrame(results, index=[\"Time (s)\"]).T\n", + "df[\"Time 10B (h estimate)\"] = df[\"Time (s)\"] * 10**10 / num_items / 3600\n", + "df" ] }, { From dc7f582cc9de6d4c33269d8e7dab30fce5994dfd Mon Sep 17 00:00:00 2001 From: Bryce Meyer Date: Wed, 8 Nov 2023 23:50:24 +0100 Subject: [PATCH 18/29] commented out last block --- benchmarks.ipynb | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/benchmarks.ipynb b/benchmarks.ipynb index 4e677209..77a9b08d 100644 --- a/benchmarks.ipynb +++ b/benchmarks.ipynb @@ -298,21 +298,21 @@ "metadata": {}, "outputs": [], "source": [ - "results = {}\n", + "# results = {}\n", "\n", - "for name, store in tqdm.tqdm(benchmarks_to_run.items()):\n", - " store.empty()\n", - " start_time = time.time()\n", - " for batch in dummy_activations:\n", - " store.extend(batch)\n", - " if hasattr(store, \"wait_for_writes_to_complete\"):\n", - " store.wait_for_writes_to_complete()\n", - " end_time = time.time()\n", - " results[name] = end_time - start_time\n", + "# for name, store in tqdm.tqdm(benchmarks_to_run.items()):\n", + "# store.empty()\n", + "# start_time = time.time()\n", + "# for batch in dummy_activations:\n", + "# store.extend(batch)\n", + "# if hasattr(store, \"wait_for_writes_to_complete\"):\n", + "# store.wait_for_writes_to_complete()\n", + "# end_time = time.time()\n", + "# results[name] = end_time - start_time\n", "\n", - "df = pd.DataFrame(results, index=[\"Time (s)\"]).T\n", - "df[\"Time 10B (h estimate)\"] = df[\"Time (s)\"] * 10**10 / num_items / 3600\n", - "df" + "# df = pd.DataFrame(results, index=[\"Time (s)\"]).T\n", + "# df[\"Time 10B (h estimate)\"] = df[\"Time (s)\"] * 10**10 / num_items / 3600\n", + "# df" ] }, { From 29987cb71747e73749aef73dd429dd0df8ac08ee Mon Sep 17 00:00:00 2001 From: Bryce Meyer Date: Wed, 8 Nov 2023 23:56:01 +0100 Subject: [PATCH 19/29] commented out remaining block --- benchmarks.ipynb | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/benchmarks.ipynb b/benchmarks.ipynb index 77a9b08d..584b0c45 100644 --- a/benchmarks.ipynb +++ b/benchmarks.ipynb @@ -238,18 +238,18 @@ "metadata": {}, "outputs": [], "source": [ - "num_items: int = 1_000_000\n", - "num_neurons: int = 2048\n", + "# num_items: int = 1_000_000\n", + "# num_neurons: int = 2048\n", "\n", "\n", - "def create_dummy_activations(\n", - " n_items: int, n_neurons: int\n", - ") -> list[Float[Tensor, \"batch neurons\"]]:\n", - " \"\"\"Create Dummy Activations for Benchmarks.\"\"\"\n", - " batch_size = 1_000\n", - " n_batches = int(n_items // batch_size)\n", - " activations = [torch.rand(batch_size, n_neurons) for _ in range(n_batches)]\n", - " return activations\n", + "# def create_dummy_activations(\n", + "# n_items: int, n_neurons: int\n", + "# ) -> list[Float[Tensor, \"batch neurons\"]]:\n", + "# \"\"\"Create Dummy Activations for Benchmarks.\"\"\"\n", + "# batch_size = 1_000\n", + "# n_batches = int(n_items // batch_size)\n", + "# activations = [torch.rand(batch_size, n_neurons) for _ in range(n_batches)]\n", + "# return activations\n", "\n", "\n", "# dummy_activations = create_dummy_activations(num_items, num_neurons)\n", From ac5e8446e06846a684c8d30e76e548d4e02cc639 Mon Sep 17 00:00:00 2001 From: Bryce Meyer Date: Thu, 9 Nov 2023 00:23:33 +0100 Subject: [PATCH 20/29] cleaned up markdown --- docs/source/content/citation.md | 9 ----- docs/source/content/gallery.md | 39 ------------------- docs/source/content/getting_started.md | 20 ---------- .../content/getting_started_mech_interp.md | 37 ------------------ docs/source/content/tutorials.md | 35 ----------------- 5 files changed, 140 deletions(-) delete mode 100644 docs/source/content/gallery.md delete mode 100644 docs/source/content/getting_started_mech_interp.md delete mode 100644 docs/source/content/tutorials.md diff --git a/docs/source/content/citation.md b/docs/source/content/citation.md index 111f5b61..cfa0678d 100644 --- a/docs/source/content/citation.md +++ b/docs/source/content/citation.md @@ -2,12 +2,3 @@ # Citation Please cite this library as: - -```BibTeX -@misc{nanda2022transformerlens, - title = {TransformerLens}, - author = {Neel Nanda and Joseph Bloom}, - year = {2022}, - howpublished = {\url{https://github.com/neelnanda-io/TransformerLens}}, -} -``` diff --git a/docs/source/content/gallery.md b/docs/source/content/gallery.md deleted file mode 100644 index 4d41bfae..00000000 --- a/docs/source/content/gallery.md +++ /dev/null @@ -1,39 +0,0 @@ -# Gallery - -Research done involving TransformerLens: - -- [Progress Measures for Grokking via Mechanistic - Interpretability](https://arxiv.org/abs/2301.05217) (ICLR Spotlight, 2023) by Neel Nanda, Lawrence - Chan, Tom Lieberum, Jess Smith, Jacob Steinhardt -- [Finding Neurons in a Haystack: Case Studies with Sparse - Probing](https://arxiv.org/abs/2305.01610) by Wes Gurnee, Neel Nanda, Matthew Pauly, Katherine - Harvey, Dmitrii Troitskii, Dimitris Bertsimas -- [Towards Automated Circuit Discovery for Mechanistic - Interpretability](https://arxiv.org/abs/2304.14997) by Arthur Conmy, Augustine N. Mavor-Parker, - Aengus Lynch, Stefan Heimersheim, Adrià Garriga-Alonso -- [Actually, Othello-GPT Has A Linear Emergent World Representation](https://neelnanda.io/othello) - by Neel Nanda -- [A circuit for Python docstrings in a 4-layer attention-only - transformer](https://www.alignmentforum.org/posts/u6KXXmKFbXfWzoAXn/a-circuit-for-python-docstrings-in-a-4-layer-attention-only) - by Stefan Heimersheim and Jett Janiak -- [A Toy Model of Universality](https://arxiv.org/abs/2302.03025) (ICML, 2023) by Bilal Chughtai, - Lawrence Chan, Neel Nanda -- [N2G: A Scalable Approach for Quantifying Interpretable Neuron Representations in Large Language - Models](https://openreview.net/forum?id=ZB6bK6MTYq) (2023, ICLR Workshop RTML) by Alex Foote, Neel - Nanda, Esben Kran, Ioannis Konstas, Fazl Barez -- [Eliciting Latent Predictions from Transformers with the Tuned - Lens](https://arxiv.org/abs/2303.08112) by Nora Belrose, Zach Furman, Logan Smith, Danny Halawi, - Igor Ostrovsky, Lev McKinney, Stella Biderman, Jacob Steinhardt - -User contributed examples of the library being used in action: - -- [Induction Heads Phase Change - Replication](https://colab.research.google.com/github/ckkissane/induction-heads-transformer-lens/blob/main/Induction_Heads_Phase_Change.ipynb): - A partial replication of [In-Context Learning and Induction - Heads](https://transformer-circuits.pub/2022/in-context-learning-and-induction-heads/index.html) - from Connor Kissane -- [Decision Transformer - Interpretability](https://github.com/jbloomAus/DecisionTransformerInterpretability): A set of - scripts for training decision transformers which uses transformer lens to view intermediate - activations, perform attribution and ablations. A write up of the initial work can be found - [here](https://www.lesswrong.com/posts/bBuBDJBYHt39Q5zZy/decision-transformer-interpretability). diff --git a/docs/source/content/getting_started.md b/docs/source/content/getting_started.md index 8d848359..bad55622 100644 --- a/docs/source/content/getting_started.md +++ b/docs/source/content/getting_started.md @@ -1,21 +1 @@ # Getting Started - -**Start with the [main demo](https://neelnanda.io/transformer-lens-demo) to learn how the library works, and the basic features**. - -To see what using it for exploratory analysis in practice looks like, check out [my notebook analysing Indirect Objection Identification](https://neelnanda.io/exploratory-analysis-demo) or [my recording of myself doing research](https://www.youtube.com/watch?v=yo4QvDn-vsU)! - -Mechanistic interpretability is a very young and small field, and there are a *lot* of open problems - if you would like to help, please try working on one! **Check out my [list of concrete open problems](https://docs.google.com/document/d/1WONBzNqfKIxERejrrPlQMyKqg7jSFW92x5UMXNrMdPo/edit) to figure out where to start.**. It begins with advice on skilling up, and key resources to check out. - -If you're new to transformers, check out my [what is a transformer tutorial](https://neelnanda.io/transformer-tutorial) and [tutorial on coding GPT-2 from scratch](https://neelnanda.io/transformer-tutorial-2) (with [an accompanying template](https://neelnanda.io/transformer-template) to write one yourself! - -## Advice for Reading the Code - -One significant design decision made was to have a single transformer implementation that could support a range of subtly different GPT-style models. This has the upside of interpretability code just working for arbitrary models when you change the model name in `HookedTransformer.from_pretrained`! But it has the significant downside that the code implementing the model (in `HookedTransformer.py` and `components.py`) can be difficult to read. I recommend starting with my [Clean Transformer Demo](https://neelnanda.io/transformer-solution), which is a clean, minimal implementation of GPT-2 with the same internal architecture and activation names as HookedTransformer, but is significantly clearer and better documented. - -## Installation - -`pip install git+https://github.com/neelnanda-io/TransformerLens` - -Import the library with `import transformer_lens` - -(Note: This library used to be known as EasyTransformer, and some breaking changes have been made since the rename. If you need to use the old version with some legacy code, run `pip install git+https://github.com/neelnanda-io/TransformerLens@v1`.) diff --git a/docs/source/content/getting_started_mech_interp.md b/docs/source/content/getting_started_mech_interp.md deleted file mode 100644 index 90848b15..00000000 --- a/docs/source/content/getting_started_mech_interp.md +++ /dev/null @@ -1,37 +0,0 @@ -# Getting Started in Mechanistic Interpretability - -Mechanistic interpretability is a very young and small field, and there are a _lot_ of open -problems. This means there's both a lot of low-hanging fruit, and that the bar for entry is low - if -you would like to help, please try working on one! The standard answer to "why has no one done this -yet" is just that there aren't enough people! Key resources: - -- [A Guide to Getting Started in Mechanistic Interpretability](https://neelnanda.io/getting-started) -- [ARENA Mechanistic Interpretability Tutorials](https://arena-ch1-transformers.streamlit.app/) from - Callum McDougall. A comprehensive practical introduction to mech interp, written in - TransformerLens - full of snippets to copy and they come with exercises and solutions! Notable - tutorials: - - [Coding GPT-2 from - scratch](https://arena-ch1-transformers.streamlit.app/[1.1]_Transformer_from_Scratch), with - accompanying video tutorial from me ([1](https://neelnanda.io/transformer-tutorial) - [2](https://neelnanda.io/transformer-tutorial-2)) - a good introduction to transformers - - [Introduction to Mech Interp and - TransformerLens](https://arena-ch1-transformers.streamlit.app/[1.2]_Intro_to_Mech_Interp): An - introduction to TransformerLens and mech interp via studying induction heads. Covers the - foundational concepts of the library - - [Indirect Object - Identification](https://arena-ch1-transformers.streamlit.app/[1.3]_Indirect_Object_Identification): - a replication of interpretability in the wild, that covers standard techniques in mech interp - such as [direct logit - attribution](https://dynalist.io/d/n2ZWtnoYHrU1s4vnFSAQ519J#z=disz2gTx-jooAcR0a5r8e7LZ), - [activation patching and path - patching](https://www.lesswrong.com/posts/xh85KbTFhbCz7taD4/how-to-think-about-activation-patching) -- [Mech Interp Paper Reading List](https://neelnanda.io/paper-list) -- [200 Concrete Open Problems in Mechanistic - Interpretability](https://neelnanda.io/concrete-open-problems) -- [A Comprehensive Mechanistic Interpretability Explainer](https://neelnanda.io/glossary): To look - up all the jargon and unfamiliar terms you're going to come across! -- [Neel Nanda's Youtube channel](https://www.youtube.com/channel/UCBMJ0D-omcRay8dh4QT0doQ): A range - of mech interp video content, including [paper - walkthroughs](https://www.youtube.com/watch?v=KV5gbOmHbjU&list=PL7m7hLIqA0hpsJYYhlt1WbHHgdfRLM2eY&index=1), - and [walkthroughs of doing - research](https://www.youtube.com/watch?v=yo4QvDn-vsU&list=PL7m7hLIqA0hr4dVOgjNwP2zjQGVHKeB7T) diff --git a/docs/source/content/tutorials.md b/docs/source/content/tutorials.md deleted file mode 100644 index b31cbee3..00000000 --- a/docs/source/content/tutorials.md +++ /dev/null @@ -1,35 +0,0 @@ -# Tutorials - -- **Start with the [main demo](https://neelnanda.io/transformer-lens-demo) to learn how the library works, and the basic features**. - -## Where To Start - -- To see what using it for exploratory analysis in practice looks like, check out [my notebook analysing Indirect Objection Identification](https://neelnanda.io/exploratory-analysis-demo) or [my recording of myself doing research](https://www.youtube.com/watch?v=yo4QvDn-vsU)! - -- [What is a Transformer tutorial](https://neelnanda.io/transformer-tutorial) - -## Demos - -- [**Activation Patching in TransformerLens**](https://colab.research.google.com/github/neelnanda-io/TransformerLens/blob/main/demos/Activation_Patching_in_TL_Demo.ipynb) - Accompanies the [Exploratory Analysis Demo](https://colab.research.google.com/github/neelnanda-io/TransformerLens/blob/main/demos/Exploratory Analysis Demo.ipynb). This demo explains how to use [Activation Patching](https://dynalist.io/d/n2ZWtnoYHrU1s4vnFSAQ519J#z=qeWBvs-R-taFfcCq-S_hgMqx) in TransformerLens, a mechanistic interpretability technique that uses causal intervention to identify which activations in a model matter for producing an output. - -- [**Attribution Patching**](https://colab.research.google.com/github/neelnanda-io/TransformerLens/blob/main/demos/Attribution_Patching_Demo.ipynb) - [Attribution Patching](https://www.neelnanda.io/mechanistic-interpretability/attribution-patching) is an incomplete project that uses gradients to take a linear approximation to activation patching. It's a good approximation when patching in small activations like the outputs of individual attention heads, and bad when patching in large activations like a residual stream. - -- [**Exploratory Analysis**](https://colab.research.google.com/github/neelnanda-io/TransformerLens/blob/main/demos/Exploratory_Analysis_Demo.ipynb) - Probably the best place to start, after the Main Demo. Demonstrates how to use TransformerLens to perform exploratory analysis - focuses less on rigor and more on getting a grasp of what's going on quickly. Uses a lot of useful interpretability techniques like logit attribution and activation patching. Steal liberally from this! - -- [**Grokking**](https://colab.research.google.com/github/neelnanda-io/TransformerLens/blob/main/demos/Grokking_Demo.ipynb) - "Grokking" is a phenomenon where a model can learn to memorise the training data (minimising training loss) but then, if trained for a lot longer, can learn to generalise, leading to a sharp decrease in test loss as well. This demo shows training a model on the task of modular addition, verifying that it groks, and doing analysis. The demo is light on explanation, so you'll probably want to pair it with [Neel's video series](https://www.youtube.com/watch?v=ob4vuiqG2Go) on the paper it's based on. - -- [**Head Detector**](https://colab.research.google.com/github/neelnanda-io/TransformerLens/blob/main/demos/Head_Detector_Demo.ipynb) - Shows how to use TransformerLens to automatically detect several common types of attention head, as well as create your own custom detection algorithms to find your own! - -- [**Interactive Neuroscope**](https://colab.research.google.com/github/neelnanda-io/TransformerLens/blob/main/demos/Interactive_Neuroscope.ipynb) - Very hacky demo, but this is a feature, not a bug. Shows how to quickly create useful web-based visualisations of data, even if you're not a professional front-end developer. This demo creates an interactive Neuroscope - a visualization of a neuron's activations on text that will dynamically update as you edit the text. - -- [**LLaMA**](https://colab.research.google.com/github/neelnanda-io/TransformerLens/blob/main/demos/LLaMA.ipynb) - Converts Meta's LLaMA model (7B parameter version for now until multi-GPU support is added) to TransformerLens. - -- [**Main Demo**](https://colab.research.google.com/github/neelnanda-io/TransformerLens/blob/main/demos/Main_Demo.ipynb) - The main demo. This is where to start if you're new to TransformerLens. Shows a lot of great features for getting started, including available models, how to access model activations, and generally useful features you should know about. - -- [**No Position Experiment**](https://colab.research.google.com/github/neelnanda-io/TransformerLens/blob/main/demos/No_Position_Experiment.ipynb) - The accompanying notebook to Neel's [real-time research video](https://www.youtube.com/watch?v=yo4QvDn-vsU). Trains a model with no positional embeddings to predict the previous token, and makes a start at analysing what's going on there! - -- [**Othello-GPT**](https://colab.research.google.com/github/neelnanda-io/TransformerLens/blob/main/demos/Othello_GPT.ipynb) - This is a demo notebook porting the weights of the Othello-GPT Model from the excellent [Emergent World Representations](https://arxiv.org/pdf/2210.13382.pdf) paper to TransformerLens. Neel's [sequence on investigating this](https://www.lesswrong.com/s/nhGNHyJHbrofpPbRG) is also well worth reading if you're interested in this topic! - -- [**SVD Interpreter Demo**](https://colab.research.google.com/github/neelnanda-io/TransformerLens/blob/main/demos/SVD_Interpreter_demo.ipynb) - Based on the [Conjecture post](https://www.lesswrong.com/posts/mkbGjzxD8d8XqKHzA/the-singular-value-decompositions-of-transformer-weight#Directly_editing_SVD_representations) about how the singular value decompositions of transformer matrices are surprisingly interpretable, this demo shows how to use TransformerLens to reproduce this and investigate further. - -- [**Tracr to TransformerLens**](https://colab.research.google.com/github/neelnanda-io/TransformerLens/blob/main/demos/Tracr_to_Transformer_Lens_Demo.ipynb) - [Tracr](https://github.com/deepmind/tracr) is a cool new DeepMind tool that compiles a written program in [RASP](https://arxiv.org/abs/2106.06981) to transformer weights.This is a (hacky!) script to convert Tracr weights from the JAX form to a TransformerLens HookedTransformer in PyTorch. From e6f0b6ad7f9d0de4bab52e1b94b47e36fb569295 Mon Sep 17 00:00:00 2001 From: Bryce Meyer Date: Mon, 13 Nov 2023 21:33:31 +0100 Subject: [PATCH 21/29] setup mkdocs --- .gitignore | 3 +- docs/Makefile | 20 - docs/README.md | 28 - docs/content/SUMMARY.md | 5 + docs/{source => }/content/citation.md | 0 docs/{source => }/content/contributing.md | 0 docs/{source => }/content/getting_started.md | 0 docs/content/index.md | 16 + docs/gen_ref_pages.py | 52 + docs/make.bat | 35 - docs/make_docs.py | 69 -- docs/source/_static/.gitkeep | 0 docs/source/apidoc_templates/module.rst_t | 8 - docs/source/apidoc_templates/package.rst_t | 50 - docs/source/apidoc_templates/toc.rst_t | 12 - docs/source/conf.py | 150 --- docs/source/favicon.ico | Bin 15086 -> 0 bytes docs/source/index.md | 43 - mkdocs.yml | 15 + poetry.lock | 916 ++++++++---------- pyproject.toml | 24 +- .../activation_store/utils/__init__.py | 1 + sparse_autoencoder/autoencoder/__init__.py | 1 + .../autoencoder/components/__init__.py | 1 + sparse_autoencoder/source_data/__init__.py | 1 + sparse_autoencoder/source_data/random_int.py | 1 - sparse_autoencoder/src_model/__init__.py | 1 + sparse_autoencoder/train/__init__.py | 1 + sparse_autoencoder/train/metrics/__init__.py | 1 + sparse_autoencoder/train/utils/__init__.py | 1 + 30 files changed, 511 insertions(+), 944 deletions(-) delete mode 100755 docs/Makefile delete mode 100644 docs/README.md create mode 100644 docs/content/SUMMARY.md rename docs/{source => }/content/citation.md (100%) rename docs/{source => }/content/contributing.md (100%) rename docs/{source => }/content/getting_started.md (100%) create mode 100644 docs/content/index.md create mode 100644 docs/gen_ref_pages.py delete mode 100644 docs/make.bat delete mode 100644 docs/make_docs.py delete mode 100644 docs/source/_static/.gitkeep delete mode 100644 docs/source/apidoc_templates/module.rst_t delete mode 100644 docs/source/apidoc_templates/package.rst_t delete mode 100644 docs/source/apidoc_templates/toc.rst_t delete mode 100644 docs/source/conf.py delete mode 100644 docs/source/favicon.ico delete mode 100644 docs/source/index.md create mode 100644 mkdocs.yml create mode 100644 sparse_autoencoder/activation_store/utils/__init__.py create mode 100644 sparse_autoencoder/autoencoder/__init__.py create mode 100644 sparse_autoencoder/autoencoder/components/__init__.py create mode 100644 sparse_autoencoder/source_data/__init__.py create mode 100644 sparse_autoencoder/src_model/__init__.py create mode 100644 sparse_autoencoder/train/__init__.py create mode 100644 sparse_autoencoder/train/metrics/__init__.py create mode 100644 sparse_autoencoder/train/utils/__init__.py diff --git a/.gitignore b/.gitignore index 33b00853..4dd4b684 100644 --- a/.gitignore +++ b/.gitignore @@ -53,7 +53,8 @@ coverage.xml .pytest_cache/ # Docs stuff -docs/source/generated +docs/content/reference +docs/generated # Translations *.mo diff --git a/docs/Makefile b/docs/Makefile deleted file mode 100755 index d0c3cbf1..00000000 --- a/docs/Makefile +++ /dev/null @@ -1,20 +0,0 @@ -# Minimal makefile for Sphinx documentation -# - -# You can set these variables from the command line, and also -# from the environment for the first two. -SPHINXOPTS ?= -SPHINXBUILD ?= sphinx-build -SOURCEDIR = source -BUILDDIR = build - -# Put it first so that "make" without argument is like "make help". -help: - @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) - -.PHONY: help Makefile - -# Catch-all target: route all unknown targets to Sphinx using the new -# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). -%: Makefile - @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) diff --git a/docs/README.md b/docs/README.md deleted file mode 100644 index 4020f7fe..00000000 --- a/docs/README.md +++ /dev/null @@ -1,28 +0,0 @@ - -# Sparse Autoencoder Docs - - -This repo contains the [website](https://neelnanda-io.github.io/TransformerLens/) for [TransformerLens](https://github.com/neelnanda-io/TransformerLens). This site is currently in Beta and we are in the process of adding/editing information. - -The documentation uses Sphinx. However, the documentation is written in regular md, NOT rst. - -## Build the Documentation - -First install the docs packages: - -```bash -poetry install --with docs -``` - -Then for hot-reloading, run this (note the model properties table won't hot reload, but everything -else will): - -```bash -poetry run docs-hot-reload -``` - -Alternatively to build once, run: - -```bash -poetry run build-docs -``` diff --git a/docs/content/SUMMARY.md b/docs/content/SUMMARY.md new file mode 100644 index 00000000..bd84a757 --- /dev/null +++ b/docs/content/SUMMARY.md @@ -0,0 +1,5 @@ +* [Home](index.md) +* [Getting Started](getting_started.md) +* [Contributing](contributing.md) +* [Citation](citation.md) +* [Reference](reference/) diff --git a/docs/source/content/citation.md b/docs/content/citation.md similarity index 100% rename from docs/source/content/citation.md rename to docs/content/citation.md diff --git a/docs/source/content/contributing.md b/docs/content/contributing.md similarity index 100% rename from docs/source/content/contributing.md rename to docs/content/contributing.md diff --git a/docs/source/content/getting_started.md b/docs/content/getting_started.md similarity index 100% rename from docs/source/content/getting_started.md rename to docs/content/getting_started.md diff --git a/docs/content/index.md b/docs/content/index.md new file mode 100644 index 00000000..6ffc97d1 --- /dev/null +++ b/docs/content/index.md @@ -0,0 +1,16 @@ +# Home + +[![PyPI](https://img.shields.io/pypi/v/sparse_autoencoder?color=blue)](https://pypi.org/project/transformer-lens/) +![PyPI - +License](https://img.shields.io/pypi/l/sparse_autoencoder?color=blue) [![Checks](https://github.com/alan-cooney/sparse_autoencoder/actions/workflows/checks.yml/badge.svg)](https://github.com/alan-cooney/sparse_autoencoder/actions/workflows/checks.yml) +[![Release](https://github.com/alan-cooney/sparse_autoencoder/actions/workflows/release.yml/badge.svg)](https://github.com/alan-cooney/sparse_autoencoder/actions/workflows/release.yml) + +A sparse autoencoder for mechanistic interpretability research. + +```shell +pip install sparse_autoencoder +``` + +## Demo + +Check out the demo notebook for a guide to using this library. diff --git a/docs/gen_ref_pages.py b/docs/gen_ref_pages.py new file mode 100644 index 00000000..e467c1b1 --- /dev/null +++ b/docs/gen_ref_pages.py @@ -0,0 +1,52 @@ +"""Generate the code reference pages.""" + + +from pathlib import Path + +import mkdocs_gen_files + + +def is_source_file(file: Path) -> bool: + """Checks an individual file to see if they are source files for Sparse Encoder.""" + return "test" not in str(file) + + +nav = mkdocs_gen_files.Nav() # type: ignore + +CURRENT_DIR = Path(__file__).parent +REPO_ROOT = CURRENT_DIR.parent +PROJECT_ROOT = REPO_ROOT / "sparse_autoencoder" +REFERENCE_DIR = CURRENT_DIR / "content/reference" + +python_files = Path(PROJECT_ROOT).rglob("*.py") +source_files = filter(is_source_file, python_files) + +for path in sorted(source_files): + module_path = path.relative_to(PROJECT_ROOT).with_suffix("") # + doc_path = path.relative_to(PROJECT_ROOT).with_suffix(".md") # + full_doc_path = Path(REFERENCE_DIR, doc_path) # + + parts = list(module_path.parts) + + if parts[-1] == "__init__": # + parts = parts[:-1] + doc_path = doc_path.with_name("index.md") + full_doc_path = full_doc_path.with_name("index.md") + elif parts[-1] == "__main__": + continue + + slug = ["Home"] if not len(parts) else parts + + nav[slug] = doc_path.as_posix() # type: ignore + + parts.insert(0, "sparse_autoencoder") + + with mkdocs_gen_files.open(full_doc_path, "w") as fd: # + identifier = ".".join(parts) # + fd.write(f"::: {identifier}") # + + mkdocs_gen_files.set_edit_path(full_doc_path, path) # + + +with mkdocs_gen_files.open(REFERENCE_DIR / "SUMMARY.md", "w") as nav_file: # + nav_file.writelines(nav.build_literate_nav()) diff --git a/docs/make.bat b/docs/make.bat deleted file mode 100644 index 747ffb7b..00000000 --- a/docs/make.bat +++ /dev/null @@ -1,35 +0,0 @@ -@ECHO OFF - -pushd %~dp0 - -REM Command file for Sphinx documentation - -if "%SPHINXBUILD%" == "" ( - set SPHINXBUILD=sphinx-build -) -set SOURCEDIR=source -set BUILDDIR=build - -%SPHINXBUILD% >NUL 2>NUL -if errorlevel 9009 ( - echo. - echo.The 'sphinx-build' command was not found. Make sure you have Sphinx - echo.installed, then set the SPHINXBUILD environment variable to point - echo.to the full path of the 'sphinx-build' executable. Alternatively you - echo.may add the Sphinx directory to PATH. - echo. - echo.If you don't have Sphinx installed, grab it from - echo.https://www.sphinx-doc.org/ - exit /b 1 -) - -if "%1" == "" goto help - -%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% -goto end - -:help -%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% - -:end -popd diff --git a/docs/make_docs.py b/docs/make_docs.py deleted file mode 100644 index fe84b0bb..00000000 --- a/docs/make_docs.py +++ /dev/null @@ -1,69 +0,0 @@ -"""Build the API Documentation.""" -from pathlib import Path -import shutil -import subprocess -from typing import Any - - -# Docs Directories -CURRENT_DIR = Path(__file__).parent -SOURCE_PATH = CURRENT_DIR / "../docs/source" -BUILD_PATH = CURRENT_DIR / "../docs/build" -PACKAGE_DIR = CURRENT_DIR.parent -DEMOS_DIR = CURRENT_DIR.parent -GENERATED_DIR = CURRENT_DIR.parent / "docs/source/generated" - - -def copy_demos(_app: Any | None = None) -> None: - """Copy demo notebooks to the generated directory.""" - if not GENERATED_DIR.exists(): - GENERATED_DIR.mkdir() - - copy_to_dir = GENERATED_DIR / "demos" - notebooks_to_copy = [ - "benchmarks.ipynb", - "demo.ipynb", - ] - - if copy_to_dir.exists(): - shutil.rmtree(copy_to_dir) - - copy_to_dir.mkdir() - for filename in notebooks_to_copy: - shutil.copy(DEMOS_DIR / filename, copy_to_dir) - - -def build_docs() -> None: - """Build the docs.""" - copy_demos() - - # Generating docs - subprocess.run( - [ - "sphinx-build", - SOURCE_PATH, - BUILD_PATH, - # Nitpicky mode (warn about all missing references) - # "-n", # noqa: ERA001 - # Turn warnings into errors - "-W", - ], - check=True, - ) - - -def docs_hot_reload() -> None: - """Hot reload the docs.""" - copy_demos() - - subprocess.run( - [ - "sphinx-autobuild", - "--watch", - str(PACKAGE_DIR) + "," + str(DEMOS_DIR), - "--open-browser", - SOURCE_PATH, - BUILD_PATH, - ], - check=True, - ) diff --git a/docs/source/_static/.gitkeep b/docs/source/_static/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/docs/source/apidoc_templates/module.rst_t b/docs/source/apidoc_templates/module.rst_t deleted file mode 100644 index 2644b730..00000000 --- a/docs/source/apidoc_templates/module.rst_t +++ /dev/null @@ -1,8 +0,0 @@ -{%- if show_headings %} -{{- [basename] | join(' ') | e | heading }} - -{% endif -%} -.. automodule:: {{ qualname }} -{%- for option in automodule_options %} - :{{ option }}: -{%- endfor %} diff --git a/docs/source/apidoc_templates/package.rst_t b/docs/source/apidoc_templates/package.rst_t deleted file mode 100644 index 8b230b71..00000000 --- a/docs/source/apidoc_templates/package.rst_t +++ /dev/null @@ -1,50 +0,0 @@ -{%- macro automodule(modname, options) -%} -.. automodule:: {{ modname }} -{%- for option in options %} - :{{ option }}: -{%- endfor %} -{%- endmacro %} - -{%- macro toctree(docnames) -%} -.. toctree:: - :maxdepth: 1 -{% for docname in docnames %} - {{ docname }} -{%- endfor %} -{%- endmacro %} - -{%- if is_namespace %} -{{- [pkgname] | join(" ") | e | heading }} -{% else %} -{{- [pkgname] | join(" ") | e | heading }} -{% endif %} - -{%- if is_namespace %} -.. py:module:: {{ pkgname }} -{% endif %} - -{%- if modulefirst and not is_namespace %} -{{ automodule(pkgname, automodule_options) }} -{% endif %} - -{%- if submodules %} -Submodules ----------- -{% if separatemodules %} -{{ toctree(submodules) }} -{% else %} -{%- for submodule in submodules %} -{% if show_headings %} -{{- [submodule, "module"] | join(" ") | e | heading(2) }} -{% endif %} -{{ automodule(submodule, automodule_options) }} -{% endfor %} -{%- endif %} -{%- endif %} - -{%- if subpackages %} -Subpackages ------------ - -{{ toctree(subpackages) }} -{% endif %} diff --git a/docs/source/apidoc_templates/toc.rst_t b/docs/source/apidoc_templates/toc.rst_t deleted file mode 100644 index f13dbb73..00000000 --- a/docs/source/apidoc_templates/toc.rst_t +++ /dev/null @@ -1,12 +0,0 @@ -Sparse Autoencoder API ----------------------- - -If browsing the docs for the first time, we recommend initially looking at ... -Contents -^^^^^^^^ - -.. toctree:: - :maxdepth: 3 -{% for docname in docnames %} - {{ docname }} -{%- endfor %} diff --git a/docs/source/conf.py b/docs/source/conf.py deleted file mode 100644 index fb1c18ff..00000000 --- a/docs/source/conf.py +++ /dev/null @@ -1,150 +0,0 @@ -"""Sphinx configuration. - -https://www.sphinx-doc.org/en/master/usage/configuration.html -""" -# pylint: disable=invalid-name -from pathlib import Path -from typing import Any - -from sphinx.ext import apidoc - - -# -- Project information ----------------------------------------------------- -# https://www.sphinx-doc.org/en/master/usage/configuration.html#project-information - -project = "Sparse Autoencoder" -project_copyright = "" -author = "" -release = "0.0.0" - -# -- General configuration --------------------------------------------------- -# https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration - -extensions = [ - "sphinx.ext.autodoc", - "sphinx.ext.napoleon", - "myst_parser", - "sphinx.ext.githubpages", - "nbsphinx", -] - -source_suffix = { - ".rst": "restructuredtext", - ".md": "markdown", -} - -templates_path = ["_templates"] - - -# -- Napoleon Extension Configuration ----------------------------------------- - -napoleon_include_init_with_doc = True -napoleon_use_admonition_for_notes = True -napoleon_custom_sections = [ - "Motivation:", - "Warning:", - "Getting Started:", -] - -# -- Options for HTML output ------------------------------------------------- -# https://www.sphinx-doc.org/en/master/usage/configuration.html#options-for-html-output - -html_theme = "furo" -html_title = "Sparse Autoencoder Documentation" -html_static_path = ["_static"] -html_logo = "" -html_favicon = "favicon.ico" - -# Fix to get Plotly Working -nbsphinx_prolog = r""" -.. raw:: html - - - -""" - -# -- Sphinx-Apidoc Configuration --------------------------------------------- - -# Functions to ignore as they're not interesting to the end user -functions_to_ignore = [ - # functions from load_from_pretrained.py - "convert_hf_model_config", - "convert_bert_weights", - "convert_gpt2_weights", - "convert_gptj_weights", - "convert_llama_weights", - "convert_mingpt_weights", - "convert_neel_solu_old_weights", - "convert_neo_weights", - "convert_neox_weights", - "convert_neel_model_config", - "convert_opt_weights", - "fill_missing_keys", - "get_basic_config", - "get_official_model_name", - "get_pretrained_state_dict", - "make_model_alias_map", - # functions from make_docs.py - "get_config", - "get_property", - # functions from patching.py - "make_df_from_ranges", - # functions from utils.py - "check_structure", - "clear_huggingface_cache", - "select_compatible_kwargs", -] - -# Default AutoDoc Options -# https://www.sphinx-doc.org/en/master/usage/extensions/autodoc.html#confval-autodoc_default_options -autodoc_default_options = { - "exclude-members": ", ".join(functions_to_ignore), -} - - -def run_apidoc(_app: Any | None = None) -> None: - """Run Sphinx-Apidoc. - - Allows us to automatically generate API documentation from docstrings, every time we build the - docs. - """ - # Path to the package codebase - package_path = Path(__file__).resolve().parents[2] / "sparse_autoencoder" - - # Template directory - template_dir = Path(__file__).resolve().parent / "apidoc_templates" - - # Output path for the generated reStructuredText files - generated_path = Path(__file__).resolve().parent / "generated" - output_path = generated_path / "code" - generated_path.mkdir(parents=True, exist_ok=True) - output_path.mkdir(parents=True, exist_ok=True) - - # Arguments for sphinx-apidoc - args = [ - "--force", # Overwrite existing files - "--separate", # Put documentation for each module on its own page. - "--templatedir=" + str(template_dir), # Use custom templates - "-o", - str(output_path), - str(package_path), - ] - - # Call sphinx-apidoc - apidoc.main(args) - - -# -- Sphinx Setup Overrides -------------------------------------------------- - - -def setup(app: Any) -> None: - """Sphinx setup overrides.""" - # Connect functions to run when watch detects a file change - app.connect("builder-inited", run_apidoc) diff --git a/docs/source/favicon.ico b/docs/source/favicon.ico deleted file mode 100644 index 9e517edaf1c0136dfa4eaf7dbd74177d6c23f2e8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15086 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 -``` diff --git a/mkdocs.yml b/mkdocs.yml new file mode 100644 index 00000000..4675d605 --- /dev/null +++ b/mkdocs.yml @@ -0,0 +1,15 @@ +site_name: Sparse Autoencoder +docs_dir: docs/content +site_dir: docs/generated +theme: + name: readthedocs +plugins: + - search + - autorefs + - gen-files: + scripts: + - docs/gen_ref_pages.py + - literate-nav: + nav_file: SUMMARY.md + - section-index + - mkdocstrings diff --git a/poetry.lock b/poetry.lock index 2a85eb0f..3576c37e 100644 --- a/poetry.lock +++ b/poetry.lock @@ -151,17 +151,6 @@ files = [ [package.dependencies] frozenlist = ">=1.1.0" -[[package]] -name = "alabaster" -version = "0.7.13" -description = "A configurable sidebar-enabled Sphinx theme" -optional = false -python-versions = ">=3.6" -files = [ - {file = "alabaster-0.7.13-py3-none-any.whl", hash = "sha256:1ee19aca801bbabb5ba3f5f258e4422dfa86f82f3e9cefb0859b283cdd7f62a3"}, - {file = "alabaster-0.7.13.tar.gz", hash = "sha256:a27a4a084d5e690e16e01e03ad2b2e552c61a65469419b907243193de1a84ae2"}, -] - [[package]] name = "anyio" version = "4.0.0" @@ -834,17 +823,6 @@ files = [ [package.dependencies] six = ">=1.4.0" -[[package]] -name = "docutils" -version = "0.20.1" -description = "Docutils -- Python Documentation Utilities" -optional = false -python-versions = ">=3.7" -files = [ - {file = "docutils-0.20.1-py3-none-any.whl", hash = "sha256:96f387a2c5562db4476f09f13bbab2192e764cac08ebbf3a34a95d9b1e4a59d6"}, - {file = "docutils-0.20.1.tar.gz", hash = "sha256:f08a4e276c3a1583a86dce3e34aba3fe04d02bba2dd51ed16106244e8a923e3b"}, -] - [[package]] name = "einops" version = "0.7.0" @@ -1046,21 +1024,21 @@ ssh = ["paramiko"] tqdm = ["tqdm"] [[package]] -name = "furo" -version = "2023.9.10" -description = "A clean customisable Sphinx documentation theme." +name = "ghp-import" +version = "2.1.0" +description = "Copy your docs directly to the gh-pages branch." optional = false -python-versions = ">=3.8" +python-versions = "*" files = [ - {file = "furo-2023.9.10-py3-none-any.whl", hash = "sha256:513092538537dc5c596691da06e3c370714ec99bc438680edc1debffb73e5bfc"}, - {file = "furo-2023.9.10.tar.gz", hash = "sha256:5707530a476d2a63b8cad83b4f961f3739a69f4b058bcf38a03a39fa537195b2"}, + {file = "ghp-import-2.1.0.tar.gz", hash = "sha256:9c535c4c61193c2df8871222567d7fd7e5014d835f97dc7b7439069e2413d343"}, + {file = "ghp_import-2.1.0-py3-none-any.whl", hash = "sha256:8337dd7b50877f163d4c0289bc1f1c7f127550241988d568c1db512c4324a619"}, ] [package.dependencies] -beautifulsoup4 = "*" -pygments = ">=2.7" -sphinx = ">=6.0,<8.0" -sphinx-basic-ng = "*" +python-dateutil = ">=2.8.1" + +[package.extras] +dev = ["flake8", "markdown", "twine", "wheel"] [[package]] name = "gitdb" @@ -1093,15 +1071,29 @@ gitdb = ">=4.0.1,<5" [package.extras] test = ["black", "coverage[toml]", "ddt (>=1.1.1,!=1.4.3)", "mock", "mypy", "pre-commit", "pytest", "pytest-cov", "pytest-instafail", "pytest-subtests", "pytest-sugar"] +[[package]] +name = "griffe" +version = "0.38.0" +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." +optional = false +python-versions = ">=3.8" +files = [ + {file = "griffe-0.38.0-py3-none-any.whl", hash = "sha256:6a5bc457320e8e199006aa5fbb03e162f5e21abe31aa6221f7a5c37ea0724c71"}, + {file = "griffe-0.38.0.tar.gz", hash = "sha256:9b97487b583042b543d1e28196caee638ecd766c8c4c98135071806cb5333ac2"}, +] + +[package.dependencies] +colorama = ">=0.4" + [[package]] name = "huggingface-hub" -version = "0.19.0" +version = "0.19.1" description = "Client library to download and publish models, datasets and other repos on the huggingface.co hub" optional = false python-versions = ">=3.8.0" files = [ - {file = "huggingface_hub-0.19.0-py3-none-any.whl", hash = "sha256:8cd7ffdb36393ba1c99b4576fbe8900b3496c98a643cde05f355348fe7d89144"}, - {file = "huggingface_hub-0.19.0.tar.gz", hash = "sha256:7395c9b8053dc8aa0dec2900f367890f66be07bfe46369b95af3f4c1013eb09e"}, + {file = "huggingface_hub-0.19.1-py3-none-any.whl", hash = "sha256:7131d1fc3f6794e1d2c16d05b0a4784525cb7a97cc785207600a143154b6dca9"}, + {file = "huggingface_hub-0.19.1.tar.gz", hash = "sha256:a84ad99b802ba58b40a5444689e679420657dc187179d57521b6bc4cde725898"}, ] [package.dependencies] @@ -1151,17 +1143,6 @@ files = [ {file = "idna-3.4.tar.gz", hash = "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4"}, ] -[[package]] -name = "imagesize" -version = "1.4.1" -description = "Getting image size from png/jpeg/jpeg2000/gif file" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -files = [ - {file = "imagesize-1.4.1-py2.py3-none-any.whl", hash = "sha256:0d8d18d08f840c19d0ee7ca1fd82490fdc3729b7ac93f49870406ddde8ef8d8b"}, - {file = "imagesize-1.4.1.tar.gz", hash = "sha256:69150444affb9cb0d5cc5a92b3676f0b2fb7cd9ae39e947a5e11a36b4497cd4a"}, -] - [[package]] name = "iniconfig" version = "2.0.0" @@ -1657,19 +1638,19 @@ files = [ ] [[package]] -name = "livereload" -version = "2.6.3" -description = "Python LiveReload is an awesome tool for web developers" +name = "markdown" +version = "3.5.1" +description = "Python implementation of John Gruber's Markdown." optional = false -python-versions = "*" +python-versions = ">=3.8" files = [ - {file = "livereload-2.6.3-py2.py3-none-any.whl", hash = "sha256:ad4ac6f53b2d62bb6ce1a5e6e96f1f00976a32348afedcb4b6d68df2a1d346e4"}, - {file = "livereload-2.6.3.tar.gz", hash = "sha256:776f2f865e59fde56490a56bcc6773b6917366bce0c267c60ee8aaf1a0959869"}, + {file = "Markdown-3.5.1-py3-none-any.whl", hash = "sha256:5874b47d4ee3f0b14d764324d2c94c03ea66bee56f2d929da9f2508d65e722dc"}, + {file = "Markdown-3.5.1.tar.gz", hash = "sha256:b65d7beb248dc22f2e8a31fb706d93798093c308dc1aba295aedeb9d41a813bd"}, ] -[package.dependencies] -six = "*" -tornado = {version = "*", markers = "python_version > \"2.7\""} +[package.extras] +docs = ["mdx-gh-links (>=0.2)", "mkdocs (>=1.5)", "mkdocs-gen-files", "mkdocs-literate-nav", "mkdocs-nature (>=0.6)", "mkdocs-section-index", "mkdocstrings[python]"] +testing = ["coverage", "pyyaml"] [[package]] name = "markdown-it-py" @@ -1778,25 +1759,6 @@ files = [ [package.dependencies] traitlets = "*" -[[package]] -name = "mdit-py-plugins" -version = "0.4.0" -description = "Collection of plugins for markdown-it-py" -optional = false -python-versions = ">=3.8" -files = [ - {file = "mdit_py_plugins-0.4.0-py3-none-any.whl", hash = "sha256:b51b3bb70691f57f974e257e367107857a93b36f322a9e6d44ca5bf28ec2def9"}, - {file = "mdit_py_plugins-0.4.0.tar.gz", hash = "sha256:d8ab27e9aed6c38aa716819fedfde15ca275715955f8a185a8e1cf90fb1d2c1b"}, -] - -[package.dependencies] -markdown-it-py = ">=1.0.0,<4.0.0" - -[package.extras] -code-style = ["pre-commit"] -rtd = ["myst-parser", "sphinx-book-theme"] -testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] - [[package]] name = "mdurl" version = "0.1.2" @@ -1808,6 +1770,17 @@ files = [ {file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"}, ] +[[package]] +name = "mergedeep" +version = "1.3.4" +description = "A deep merge function for 🐍." +optional = false +python-versions = ">=3.6" +files = [ + {file = "mergedeep-1.3.4-py3-none-any.whl", hash = "sha256:70775750742b25c0d8f36c55aed03d24c3384d17c951b3175d898bd778ef0307"}, + {file = "mergedeep-1.3.4.tar.gz", hash = "sha256:0096d52e9dad9939c3d975a774666af186eda617e6ca84df4c94dec30004f2a8"}, +] + [[package]] name = "mistune" version = "3.0.2" @@ -1819,6 +1792,132 @@ files = [ {file = "mistune-3.0.2.tar.gz", hash = "sha256:fc7f93ded930c92394ef2cb6f04a8aabab4117a91449e72dcc8dfa646a508be8"}, ] +[[package]] +name = "mkdocs" +version = "1.5.3" +description = "Project documentation with Markdown." +optional = false +python-versions = ">=3.7" +files = [ + {file = "mkdocs-1.5.3-py3-none-any.whl", hash = "sha256:3b3a78e736b31158d64dbb2f8ba29bd46a379d0c6e324c2246c3bc3d2189cfc1"}, + {file = "mkdocs-1.5.3.tar.gz", hash = "sha256:eb7c99214dcb945313ba30426c2451b735992c73c2e10838f76d09e39ff4d0e2"}, +] + +[package.dependencies] +click = ">=7.0" +colorama = {version = ">=0.4", markers = "platform_system == \"Windows\""} +ghp-import = ">=1.0" +jinja2 = ">=2.11.1" +markdown = ">=3.2.1" +markupsafe = ">=2.0.1" +mergedeep = ">=1.3.4" +packaging = ">=20.5" +pathspec = ">=0.11.1" +platformdirs = ">=2.2.0" +pyyaml = ">=5.1" +pyyaml-env-tag = ">=0.1" +watchdog = ">=2.0" + +[package.extras] +i18n = ["babel (>=2.9.0)"] +min-versions = ["babel (==2.9.0)", "click (==7.0)", "colorama (==0.4)", "ghp-import (==1.0)", "importlib-metadata (==4.3)", "jinja2 (==2.11.1)", "markdown (==3.2.1)", "markupsafe (==2.0.1)", "mergedeep (==1.3.4)", "packaging (==20.5)", "pathspec (==0.11.1)", "platformdirs (==2.2.0)", "pyyaml (==5.1)", "pyyaml-env-tag (==0.1)", "typing-extensions (==3.10)", "watchdog (==2.0)"] + +[[package]] +name = "mkdocs-autorefs" +version = "0.5.0" +description = "Automatically link across pages in MkDocs." +optional = false +python-versions = ">=3.8" +files = [ + {file = "mkdocs_autorefs-0.5.0-py3-none-any.whl", hash = "sha256:7930fcb8ac1249f10e683967aeaddc0af49d90702af111a5e390e8b20b3d97ff"}, + {file = "mkdocs_autorefs-0.5.0.tar.gz", hash = "sha256:9a5054a94c08d28855cfab967ada10ed5be76e2bfad642302a610b252c3274c0"}, +] + +[package.dependencies] +Markdown = ">=3.3" +mkdocs = ">=1.1" + +[[package]] +name = "mkdocs-gen-files" +version = "0.5.0" +description = "MkDocs plugin to programmatically generate documentation pages during the build" +optional = false +python-versions = ">=3.7" +files = [ + {file = "mkdocs_gen_files-0.5.0-py3-none-any.whl", hash = "sha256:7ac060096f3f40bd19039e7277dd3050be9a453c8ac578645844d4d91d7978ea"}, + {file = "mkdocs_gen_files-0.5.0.tar.gz", hash = "sha256:4c7cf256b5d67062a788f6b1d035e157fc1a9498c2399be9af5257d4ff4d19bc"}, +] + +[package.dependencies] +mkdocs = ">=1.0.3" + +[[package]] +name = "mkdocs-literate-nav" +version = "0.6.1" +description = "MkDocs plugin to specify the navigation in Markdown instead of YAML" +optional = false +python-versions = ">=3.7" +files = [ + {file = "mkdocs_literate_nav-0.6.1-py3-none-any.whl", hash = "sha256:e70bdc4a07050d32da79c0b697bd88e9a104cf3294282e9cb20eec94c6b0f401"}, + {file = "mkdocs_literate_nav-0.6.1.tar.gz", hash = "sha256:78a7ab6d878371728acb0cdc6235c9b0ffc6e83c997b037f4a5c6ff7cef7d759"}, +] + +[package.dependencies] +mkdocs = ">=1.0.3" + +[[package]] +name = "mkdocs-section-index" +version = "0.3.8" +description = "MkDocs plugin to allow clickable sections that lead to an index page" +optional = false +python-versions = ">=3.7" +files = [ + {file = "mkdocs_section_index-0.3.8-py3-none-any.whl", hash = "sha256:823d298d78bc1e73e23678ff60889f3c369c2167b03dba73fea88bd0e268a60d"}, + {file = "mkdocs_section_index-0.3.8.tar.gz", hash = "sha256:bbd209f0da79441baf136ef3a9c40665bb9681d1fb62c73ca2f116fd1388a404"}, +] + +[package.dependencies] +mkdocs = ">=1.2" + +[[package]] +name = "mkdocstrings" +version = "0.23.0" +description = "Automatic documentation from sources, for MkDocs." +optional = false +python-versions = ">=3.8" +files = [ + {file = "mkdocstrings-0.23.0-py3-none-any.whl", hash = "sha256:051fa4014dfcd9ed90254ae91de2dbb4f24e166347dae7be9a997fe16316c65e"}, + {file = "mkdocstrings-0.23.0.tar.gz", hash = "sha256:d9c6a37ffbe7c14a7a54ef1258c70b8d394e6a33a1c80832bce40b9567138d1c"}, +] + +[package.dependencies] +Jinja2 = ">=2.11.1" +Markdown = ">=3.3" +MarkupSafe = ">=1.1" +mkdocs = ">=1.2" +mkdocs-autorefs = ">=0.3.1" +pymdown-extensions = ">=6.3" + +[package.extras] +crystal = ["mkdocstrings-crystal (>=0.3.4)"] +python = ["mkdocstrings-python (>=0.5.2)"] +python-legacy = ["mkdocstrings-python-legacy (>=0.2.1)"] + +[[package]] +name = "mkdocstrings-python" +version = "1.7.4" +description = "A Python handler for mkdocstrings." +optional = false +python-versions = ">=3.8" +files = [ + {file = "mkdocstrings_python-1.7.4-py3-none-any.whl", hash = "sha256:70eacbe5f2d5071f2e525ba0b35bc447d398437dfbcd90c63fe6e977551cfe26"}, + {file = "mkdocstrings_python-1.7.4.tar.gz", hash = "sha256:c2fc34efd70000ec31aee247910006e8dd9d1b9f3957bf46880c3f6e51a8f0d5"}, +] + +[package.dependencies] +griffe = ">=0.37" +mkdocstrings = ">=0.20" + [[package]] name = "mpmath" version = "1.3.0" @@ -1947,32 +2046,6 @@ files = [ [package.dependencies] dill = ">=0.3.7" -[[package]] -name = "myst-parser" -version = "2.0.0" -description = "An extended [CommonMark](https://spec.commonmark.org/) compliant parser," -optional = false -python-versions = ">=3.8" -files = [ - {file = "myst_parser-2.0.0-py3-none-any.whl", hash = "sha256:7c36344ae39c8e740dad7fdabf5aa6fc4897a813083c6cc9990044eb93656b14"}, - {file = "myst_parser-2.0.0.tar.gz", hash = "sha256:ea929a67a6a0b1683cdbe19b8d2e724cd7643f8aa3e7bb18dd65beac3483bead"}, -] - -[package.dependencies] -docutils = ">=0.16,<0.21" -jinja2 = "*" -markdown-it-py = ">=3.0,<4.0" -mdit-py-plugins = ">=0.4,<1.0" -pyyaml = "*" -sphinx = ">=6,<8" - -[package.extras] -code-style = ["pre-commit (>=3.0,<4.0)"] -linkify = ["linkify-it-py (>=2.0,<3.0)"] -rtd = ["ipython", "pydata-sphinx-theme (==v0.13.0rc4)", "sphinx-autodoc2 (>=0.4.2,<0.5.0)", "sphinx-book-theme (==1.0.0rc2)", "sphinx-copybutton", "sphinx-design2", "sphinx-pyscript", "sphinx-tippy (>=0.3.1)", "sphinx-togglebutton", "sphinxext-opengraph (>=0.8.2,<0.9.0)", "sphinxext-rediraffe (>=0.2.7,<0.3.0)"] -testing = ["beautifulsoup4", "coverage[toml]", "pytest (>=7,<8)", "pytest-cov", "pytest-param-files (>=0.3.4,<0.4.0)", "pytest-regressions", "sphinx-pytest"] -testing-docutils = ["pygments", "pytest (>=7,<8)", "pytest-param-files (>=0.3.4,<0.4.0)"] - [[package]] name = "nbclient" version = "0.9.0" @@ -2053,25 +2126,6 @@ traitlets = ">=5.1" docs = ["myst-parser", "pydata-sphinx-theme", "sphinx", "sphinxcontrib-github-alt", "sphinxcontrib-spelling"] test = ["pep440", "pre-commit", "pytest", "testpath"] -[[package]] -name = "nbsphinx" -version = "0.9.3" -description = "Jupyter Notebook Tools for Sphinx" -optional = false -python-versions = ">=3.6" -files = [ - {file = "nbsphinx-0.9.3-py3-none-any.whl", hash = "sha256:6e805e9627f4a358bd5720d5cbf8bf48853989c79af557afd91a5f22e163029f"}, - {file = "nbsphinx-0.9.3.tar.gz", hash = "sha256:ec339c8691b688f8676104a367a4b8cf3ea01fd089dc28d24dec22d563b11562"}, -] - -[package.dependencies] -docutils = "*" -jinja2 = "*" -nbconvert = "!=5.4" -nbformat = "*" -sphinx = ">=1.8" -traitlets = ">=5" - [[package]] name = "nest-asyncio" version = "1.5.8" @@ -2157,43 +2211,47 @@ test = ["pytest", "pytest-console-scripts", "pytest-jupyter", "pytest-tornasync" [[package]] name = "numpy" -version = "1.26.1" +version = "1.26.2" description = "Fundamental package for array computing in Python" optional = false -python-versions = "<3.13,>=3.9" -files = [ - {file = "numpy-1.26.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:82e871307a6331b5f09efda3c22e03c095d957f04bf6bc1804f30048d0e5e7af"}, - {file = "numpy-1.26.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:cdd9ec98f0063d93baeb01aad472a1a0840dee302842a2746a7a8e92968f9575"}, - {file = "numpy-1.26.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d78f269e0c4fd365fc2992c00353e4530d274ba68f15e968d8bc3c69ce5f5244"}, - {file = "numpy-1.26.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8ab9163ca8aeb7fd32fe93866490654d2f7dda4e61bc6297bf72ce07fdc02f67"}, - {file = "numpy-1.26.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:78ca54b2f9daffa5f323f34cdf21e1d9779a54073f0018a3094ab907938331a2"}, - {file = "numpy-1.26.1-cp310-cp310-win32.whl", hash = "sha256:d1cfc92db6af1fd37a7bb58e55c8383b4aa1ba23d012bdbba26b4bcca45ac297"}, - {file = "numpy-1.26.1-cp310-cp310-win_amd64.whl", hash = "sha256:d2984cb6caaf05294b8466966627e80bf6c7afd273279077679cb010acb0e5ab"}, - {file = "numpy-1.26.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cd7837b2b734ca72959a1caf3309457a318c934abef7a43a14bb984e574bbb9a"}, - {file = "numpy-1.26.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1c59c046c31a43310ad0199d6299e59f57a289e22f0f36951ced1c9eac3665b9"}, - {file = "numpy-1.26.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d58e8c51a7cf43090d124d5073bc29ab2755822181fcad978b12e144e5e5a4b3"}, - {file = "numpy-1.26.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6081aed64714a18c72b168a9276095ef9155dd7888b9e74b5987808f0dd0a974"}, - {file = "numpy-1.26.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:97e5d6a9f0702c2863aaabf19f0d1b6c2628fbe476438ce0b5ce06e83085064c"}, - {file = "numpy-1.26.1-cp311-cp311-win32.whl", hash = "sha256:b9d45d1dbb9de84894cc50efece5b09939752a2d75aab3a8b0cef6f3a35ecd6b"}, - {file = "numpy-1.26.1-cp311-cp311-win_amd64.whl", hash = "sha256:3649d566e2fc067597125428db15d60eb42a4e0897fc48d28cb75dc2e0454e53"}, - {file = "numpy-1.26.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:1d1bd82d539607951cac963388534da3b7ea0e18b149a53cf883d8f699178c0f"}, - {file = "numpy-1.26.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:afd5ced4e5a96dac6725daeb5242a35494243f2239244fad10a90ce58b071d24"}, - {file = "numpy-1.26.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a03fb25610ef560a6201ff06df4f8105292ba56e7cdd196ea350d123fc32e24e"}, - {file = "numpy-1.26.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dcfaf015b79d1f9f9c9fd0731a907407dc3e45769262d657d754c3a028586124"}, - {file = "numpy-1.26.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:e509cbc488c735b43b5ffea175235cec24bbc57b227ef1acc691725beb230d1c"}, - {file = "numpy-1.26.1-cp312-cp312-win32.whl", hash = "sha256:af22f3d8e228d84d1c0c44c1fbdeb80f97a15a0abe4f080960393a00db733b66"}, - {file = "numpy-1.26.1-cp312-cp312-win_amd64.whl", hash = "sha256:9f42284ebf91bdf32fafac29d29d4c07e5e9d1af862ea73686581773ef9e73a7"}, - {file = "numpy-1.26.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bb894accfd16b867d8643fc2ba6c8617c78ba2828051e9a69511644ce86ce83e"}, - {file = "numpy-1.26.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e44ccb93f30c75dfc0c3aa3ce38f33486a75ec9abadabd4e59f114994a9c4617"}, - {file = "numpy-1.26.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9696aa2e35cc41e398a6d42d147cf326f8f9d81befcb399bc1ed7ffea339b64e"}, - {file = "numpy-1.26.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a5b411040beead47a228bde3b2241100454a6abde9df139ed087bd73fc0a4908"}, - {file = "numpy-1.26.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:1e11668d6f756ca5ef534b5be8653d16c5352cbb210a5c2a79ff288e937010d5"}, - {file = "numpy-1.26.1-cp39-cp39-win32.whl", hash = "sha256:d1d2c6b7dd618c41e202c59c1413ef9b2c8e8a15f5039e344af64195459e3104"}, - {file = "numpy-1.26.1-cp39-cp39-win_amd64.whl", hash = "sha256:59227c981d43425ca5e5c01094d59eb14e8772ce6975d4b2fc1e106a833d5ae2"}, - {file = "numpy-1.26.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:06934e1a22c54636a059215d6da99e23286424f316fddd979f5071093b648668"}, - {file = "numpy-1.26.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:76ff661a867d9272cd2a99eed002470f46dbe0943a5ffd140f49be84f68ffc42"}, - {file = "numpy-1.26.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:6965888d65d2848e8768824ca8288db0a81263c1efccec881cb35a0d805fcd2f"}, - {file = "numpy-1.26.1.tar.gz", hash = "sha256:c8c6c72d4a9f831f328efb1312642a1cafafaa88981d9ab76368d50d07d93cbe"}, +python-versions = ">=3.9" +files = [ + {file = "numpy-1.26.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:3703fc9258a4a122d17043e57b35e5ef1c5a5837c3db8be396c82e04c1cf9b0f"}, + {file = "numpy-1.26.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:cc392fdcbd21d4be6ae1bb4475a03ce3b025cd49a9be5345d76d7585aea69440"}, + {file = "numpy-1.26.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:36340109af8da8805d8851ef1d74761b3b88e81a9bd80b290bbfed61bd2b4f75"}, + {file = "numpy-1.26.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bcc008217145b3d77abd3e4d5ef586e3bdfba8fe17940769f8aa09b99e856c00"}, + {file = "numpy-1.26.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:3ced40d4e9e18242f70dd02d739e44698df3dcb010d31f495ff00a31ef6014fe"}, + {file = "numpy-1.26.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b272d4cecc32c9e19911891446b72e986157e6a1809b7b56518b4f3755267523"}, + {file = "numpy-1.26.2-cp310-cp310-win32.whl", hash = "sha256:22f8fc02fdbc829e7a8c578dd8d2e15a9074b630d4da29cda483337e300e3ee9"}, + {file = "numpy-1.26.2-cp310-cp310-win_amd64.whl", hash = "sha256:26c9d33f8e8b846d5a65dd068c14e04018d05533b348d9eaeef6c1bd787f9919"}, + {file = "numpy-1.26.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b96e7b9c624ef3ae2ae0e04fa9b460f6b9f17ad8b4bec6d7756510f1f6c0c841"}, + {file = "numpy-1.26.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:aa18428111fb9a591d7a9cc1b48150097ba6a7e8299fb56bdf574df650e7d1f1"}, + {file = "numpy-1.26.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:06fa1ed84aa60ea6ef9f91ba57b5ed963c3729534e6e54055fc151fad0423f0a"}, + {file = "numpy-1.26.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:96ca5482c3dbdd051bcd1fce8034603d6ebfc125a7bd59f55b40d8f5d246832b"}, + {file = "numpy-1.26.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:854ab91a2906ef29dc3925a064fcd365c7b4da743f84b123002f6139bcb3f8a7"}, + {file = "numpy-1.26.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:f43740ab089277d403aa07567be138fc2a89d4d9892d113b76153e0e412409f8"}, + {file = "numpy-1.26.2-cp311-cp311-win32.whl", hash = "sha256:a2bbc29fcb1771cd7b7425f98b05307776a6baf43035d3b80c4b0f29e9545186"}, + {file = "numpy-1.26.2-cp311-cp311-win_amd64.whl", hash = "sha256:2b3fca8a5b00184828d12b073af4d0fc5fdd94b1632c2477526f6bd7842d700d"}, + {file = "numpy-1.26.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:a4cd6ed4a339c21f1d1b0fdf13426cb3b284555c27ac2f156dfdaaa7e16bfab0"}, + {file = "numpy-1.26.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5d5244aabd6ed7f312268b9247be47343a654ebea52a60f002dc70c769048e75"}, + {file = "numpy-1.26.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6a3cdb4d9c70e6b8c0814239ead47da00934666f668426fc6e94cce869e13fd7"}, + {file = "numpy-1.26.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa317b2325f7aa0a9471663e6093c210cb2ae9c0ad824732b307d2c51983d5b6"}, + {file = "numpy-1.26.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:174a8880739c16c925799c018f3f55b8130c1f7c8e75ab0a6fa9d41cab092fd6"}, + {file = "numpy-1.26.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:f79b231bf5c16b1f39c7f4875e1ded36abee1591e98742b05d8a0fb55d8a3eec"}, + {file = "numpy-1.26.2-cp312-cp312-win32.whl", hash = "sha256:4a06263321dfd3598cacb252f51e521a8cb4b6df471bb12a7ee5cbab20ea9167"}, + {file = "numpy-1.26.2-cp312-cp312-win_amd64.whl", hash = "sha256:b04f5dc6b3efdaab541f7857351aac359e6ae3c126e2edb376929bd3b7f92d7e"}, + {file = "numpy-1.26.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4eb8df4bf8d3d90d091e0146f6c28492b0be84da3e409ebef54349f71ed271ef"}, + {file = "numpy-1.26.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1a13860fdcd95de7cf58bd6f8bc5a5ef81c0b0625eb2c9a783948847abbef2c2"}, + {file = "numpy-1.26.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:64308ebc366a8ed63fd0bf426b6a9468060962f1a4339ab1074c228fa6ade8e3"}, + {file = "numpy-1.26.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:baf8aab04a2c0e859da118f0b38617e5ee65d75b83795055fb66c0d5e9e9b818"}, + {file = "numpy-1.26.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d73a3abcac238250091b11caef9ad12413dab01669511779bc9b29261dd50210"}, + {file = "numpy-1.26.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:b361d369fc7e5e1714cf827b731ca32bff8d411212fccd29ad98ad622449cc36"}, + {file = "numpy-1.26.2-cp39-cp39-win32.whl", hash = "sha256:bd3f0091e845164a20bd5a326860c840fe2af79fa12e0469a12768a3ec578d80"}, + {file = "numpy-1.26.2-cp39-cp39-win_amd64.whl", hash = "sha256:2beef57fb031dcc0dc8fa4fe297a742027b954949cabb52a2a376c144e5e6060"}, + {file = "numpy-1.26.2-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:1cc3d5029a30fb5f06704ad6b23b35e11309491c999838c31f124fee32107c79"}, + {file = "numpy-1.26.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:94cc3c222bb9fb5a12e334d0479b97bb2df446fbe622b470928f5284ffca3f8d"}, + {file = "numpy-1.26.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:fe6b44fb8fcdf7eda4ef4461b97b3f63c466b27ab151bec2366db8b197387841"}, + {file = "numpy-1.26.2.tar.gz", hash = "sha256:f65738447676ab5777f11e6bbbdb8ce11b785e105f690bc45966574816b6d3ea"}, ] [[package]] @@ -2363,36 +2421,36 @@ files = [ [[package]] name = "pandas" -version = "2.1.2" +version = "2.1.3" description = "Powerful data structures for data analysis, time series, and statistics" optional = false python-versions = ">=3.9" files = [ - {file = "pandas-2.1.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:24057459f19db9ebb02984c6fdd164a970b31a95f38e4a49cf7615b36a1b532c"}, - {file = "pandas-2.1.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a6cf8fcc8a63d333970b950a7331a30544cf59b1a97baf0a7409e09eafc1ac38"}, - {file = "pandas-2.1.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6ae6ffbd9d614c20d028c7117ee911fc4e266b4dca2065d5c5909e401f8ff683"}, - {file = "pandas-2.1.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eff794eeb7883c5aefb1ed572e7ff533ae779f6c6277849eab9e77986e352688"}, - {file = "pandas-2.1.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:02954e285e8e2f4006b6f22be6f0df1f1c3c97adbb7ed211c6b483426f20d5c8"}, - {file = "pandas-2.1.2-cp310-cp310-win_amd64.whl", hash = "sha256:5b40c9f494e1f27588c369b9e4a6ca19cd924b3a0e1ef9ef1a8e30a07a438f43"}, - {file = "pandas-2.1.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:08d287b68fd28906a94564f15118a7ca8c242e50ae7f8bd91130c362b2108a81"}, - {file = "pandas-2.1.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:bbd98dcdcd32f408947afdb3f7434fade6edd408c3077bbce7bd840d654d92c6"}, - {file = "pandas-2.1.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e90c95abb3285d06f6e4feedafc134306a8eced93cb78e08cf50e224d5ce22e2"}, - {file = "pandas-2.1.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:52867d69a54e71666cd184b04e839cff7dfc8ed0cd6b936995117fdae8790b69"}, - {file = "pandas-2.1.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:8d0382645ede2fde352da2a885aac28ec37d38587864c0689b4b2361d17b1d4c"}, - {file = "pandas-2.1.2-cp311-cp311-win_amd64.whl", hash = "sha256:65177d1c519b55e5b7f094c660ed357bb7d86e799686bb71653b8a4803d8ff0d"}, - {file = "pandas-2.1.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:5aa6b86802e8cf7716bf4b4b5a3c99b12d34e9c6a9d06dad254447a620437931"}, - {file = "pandas-2.1.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d594e2ce51b8e0b4074e6644758865dc2bb13fd654450c1eae51201260a539f1"}, - {file = "pandas-2.1.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3223f997b6d2ebf9c010260cf3d889848a93f5d22bb4d14cd32638b3d8bba7ad"}, - {file = "pandas-2.1.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc4944dc004ca6cc701dfa19afb8bdb26ad36b9bed5bcec617d2a11e9cae6902"}, - {file = "pandas-2.1.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:3f76280ce8ec216dde336e55b2b82e883401cf466da0fe3be317c03fb8ee7c7d"}, - {file = "pandas-2.1.2-cp312-cp312-win_amd64.whl", hash = "sha256:7ad20d24acf3a0042512b7e8d8fdc2e827126ed519d6bd1ed8e6c14ec8a2c813"}, - {file = "pandas-2.1.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:021f09c15e1381e202d95d4a21ece8e7f2bf1388b6d7e9cae09dfe27bd2043d1"}, - {file = "pandas-2.1.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e7f12b2de0060b0b858cfec0016e7d980ae5bae455a1746bfcc70929100ee633"}, - {file = "pandas-2.1.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:83c166b9bb27c1715bed94495d9598a7f02950b4749dba9349c1dd2cbf10729d"}, - {file = "pandas-2.1.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:25c9976c17311388fcd953cb3d0697999b2205333f4e11e669d90ff8d830d429"}, - {file = "pandas-2.1.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:851b5afbb0d62f6129ae891b533aa508cc357d5892c240c91933d945fff15731"}, - {file = "pandas-2.1.2-cp39-cp39-win_amd64.whl", hash = "sha256:e78507adcc730533619de07bfdd1c62b2918a68cd4419ea386e28abf7f6a1e5c"}, - {file = "pandas-2.1.2.tar.gz", hash = "sha256:52897edc2774d2779fbeb6880d2cfb305daa0b1a29c16b91f531a18918a6e0f3"}, + {file = "pandas-2.1.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:acf08a73b5022b479c1be155d4988b72f3020f308f7a87c527702c5f8966d34f"}, + {file = "pandas-2.1.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:3cc4469ff0cf9aa3a005870cb49ab8969942b7156e0a46cc3f5abd6b11051dfb"}, + {file = "pandas-2.1.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:35172bff95f598cc5866c047f43c7f4df2c893acd8e10e6653a4b792ed7f19bb"}, + {file = "pandas-2.1.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:59dfe0e65a2f3988e940224e2a70932edc964df79f3356e5f2997c7d63e758b4"}, + {file = "pandas-2.1.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:0296a66200dee556850d99b24c54c7dfa53a3264b1ca6f440e42bad424caea03"}, + {file = "pandas-2.1.3-cp310-cp310-win_amd64.whl", hash = "sha256:465571472267a2d6e00657900afadbe6097c8e1dc43746917db4dfc862e8863e"}, + {file = "pandas-2.1.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:04d4c58e1f112a74689da707be31cf689db086949c71828ef5da86727cfe3f82"}, + {file = "pandas-2.1.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7fa2ad4ff196768ae63a33f8062e6838efed3a319cf938fdf8b95e956c813042"}, + {file = "pandas-2.1.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4441ac94a2a2613e3982e502ccec3bdedefe871e8cea54b8775992485c5660ef"}, + {file = "pandas-2.1.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d5ded6ff28abbf0ea7689f251754d3789e1edb0c4d0d91028f0b980598418a58"}, + {file = "pandas-2.1.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:fca5680368a5139d4920ae3dc993eb5106d49f814ff24018b64d8850a52c6ed2"}, + {file = "pandas-2.1.3-cp311-cp311-win_amd64.whl", hash = "sha256:de21e12bf1511190fc1e9ebc067f14ca09fccfb189a813b38d63211d54832f5f"}, + {file = "pandas-2.1.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:a5d53c725832e5f1645e7674989f4c106e4b7249c1d57549023ed5462d73b140"}, + {file = "pandas-2.1.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7cf4cf26042476e39394f1f86868d25b265ff787c9b2f0d367280f11afbdee6d"}, + {file = "pandas-2.1.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:72c84ec1b1d8e5efcbff5312abe92bfb9d5b558f11e0cf077f5496c4f4a3c99e"}, + {file = "pandas-2.1.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1f539e113739a3e0cc15176bf1231a553db0239bfa47a2c870283fd93ba4f683"}, + {file = "pandas-2.1.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:fc77309da3b55732059e484a1efc0897f6149183c522390772d3561f9bf96c00"}, + {file = "pandas-2.1.3-cp312-cp312-win_amd64.whl", hash = "sha256:08637041279b8981a062899da0ef47828df52a1838204d2b3761fbd3e9fcb549"}, + {file = "pandas-2.1.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b99c4e51ef2ed98f69099c72c75ec904dd610eb41a32847c4fcbc1a975f2d2b8"}, + {file = "pandas-2.1.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f7ea8ae8004de0381a2376662c0505bb0a4f679f4c61fbfd122aa3d1b0e5f09d"}, + {file = "pandas-2.1.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fcd76d67ca2d48f56e2db45833cf9d58f548f97f61eecd3fdc74268417632b8a"}, + {file = "pandas-2.1.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1329dbe93a880a3d7893149979caa82d6ba64a25e471682637f846d9dbc10dd2"}, + {file = "pandas-2.1.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:321ecdb117bf0f16c339cc6d5c9a06063854f12d4d9bc422a84bb2ed3207380a"}, + {file = "pandas-2.1.3-cp39-cp39-win_amd64.whl", hash = "sha256:11a771450f36cebf2a4c9dbd3a19dfa8c46c4b905a3ea09dc8e556626060fe71"}, + {file = "pandas-2.1.3.tar.gz", hash = "sha256:22929f84bca106921917eb73c1521317ddd0a4c71b395bcf767a106e3494209f"}, ] [package.dependencies] @@ -2405,7 +2463,7 @@ pytz = ">=2020.1" tzdata = ">=2022.1" [package.extras] -all = ["PyQt5 (>=5.15.6)", "SQLAlchemy (>=1.4.36)", "beautifulsoup4 (>=4.11.1)", "bottleneck (>=1.3.4)", "dataframe-api-compat (>=0.1.7)", "fastparquet (>=0.8.1)", "fsspec (>=2022.05.0)", "gcsfs (>=2022.05.0)", "html5lib (>=1.1)", "hypothesis (>=6.46.1)", "jinja2 (>=3.1.2)", "lxml (>=4.8.0)", "matplotlib (>=3.6.1)", "numba (>=0.55.2)", "numexpr (>=2.8.0)", "odfpy (>=1.4.1)", "openpyxl (>=3.0.10)", "pandas-gbq (>=0.17.5)", "psycopg2 (>=2.9.3)", "pyarrow (>=7.0.0)", "pymysql (>=1.0.2)", "pyreadstat (>=1.1.5)", "pytest (>=7.3.2)", "pytest-asyncio (>=0.17.0)", "pytest-xdist (>=2.2.0)", "pyxlsb (>=1.0.9)", "qtpy (>=2.2.0)", "s3fs (>=2022.05.0)", "scipy (>=1.8.1)", "tables (>=3.7.0)", "tabulate (>=0.8.10)", "xarray (>=2022.03.0)", "xlrd (>=2.0.1)", "xlsxwriter (>=3.0.3)", "zstandard (>=0.17.0)"] +all = ["PyQt5 (>=5.15.6)", "SQLAlchemy (>=1.4.36)", "beautifulsoup4 (>=4.11.1)", "bottleneck (>=1.3.4)", "dataframe-api-compat (>=0.1.7)", "fastparquet (>=0.8.1)", "fsspec (>=2022.05.0)", "gcsfs (>=2022.05.0)", "html5lib (>=1.1)", "hypothesis (>=6.46.1)", "jinja2 (>=3.1.2)", "lxml (>=4.8.0)", "matplotlib (>=3.6.1)", "numba (>=0.55.2)", "numexpr (>=2.8.0)", "odfpy (>=1.4.1)", "openpyxl (>=3.0.10)", "pandas-gbq (>=0.17.5)", "psycopg2 (>=2.9.3)", "pyarrow (>=7.0.0)", "pymysql (>=1.0.2)", "pyreadstat (>=1.1.5)", "pytest (>=7.3.2)", "pytest-xdist (>=2.2.0)", "pyxlsb (>=1.0.9)", "qtpy (>=2.2.0)", "s3fs (>=2022.05.0)", "scipy (>=1.8.1)", "tables (>=3.7.0)", "tabulate (>=0.8.10)", "xarray (>=2022.03.0)", "xlrd (>=2.0.1)", "xlsxwriter (>=3.0.3)", "zstandard (>=0.17.0)"] aws = ["s3fs (>=2022.05.0)"] clipboard = ["PyQt5 (>=5.15.6)", "qtpy (>=2.2.0)"] compression = ["zstandard (>=0.17.0)"] @@ -2425,23 +2483,9 @@ plot = ["matplotlib (>=3.6.1)"] postgresql = ["SQLAlchemy (>=1.4.36)", "psycopg2 (>=2.9.3)"] spss = ["pyreadstat (>=1.1.5)"] sql-other = ["SQLAlchemy (>=1.4.36)"] -test = ["hypothesis (>=6.46.1)", "pytest (>=7.3.2)", "pytest-asyncio (>=0.17.0)", "pytest-xdist (>=2.2.0)"] +test = ["hypothesis (>=6.46.1)", "pytest (>=7.3.2)", "pytest-xdist (>=2.2.0)"] xml = ["lxml (>=4.8.0)"] -[[package]] -name = "pandoc" -version = "2.3" -description = "Pandoc Documents for Python" -optional = false -python-versions = "*" -files = [ - {file = "pandoc-2.3.tar.gz", hash = "sha256:e772c2c6d871146894579828dbaf1efd538eb64fc7e71d4a6b3a11a18baef90d"}, -] - -[package.dependencies] -plumbum = "*" -ply = "*" - [[package]] name = "pandocfilters" version = "1.5.0" @@ -2479,6 +2523,17 @@ files = [ {file = "pastel-0.2.1.tar.gz", hash = "sha256:e6581ac04e973cac858828c6202c1e1e81fee1dc7de7683f3e1ffe0bfd8a573d"}, ] +[[package]] +name = "pathspec" +version = "0.11.2" +description = "Utility library for gitignore style pattern matching of file paths." +optional = false +python-versions = ">=3.7" +files = [ + {file = "pathspec-0.11.2-py3-none-any.whl", hash = "sha256:1d6ed233af05e679efb96b1851550ea95bbb64b7c490b0f5aa52996c11e92a20"}, + {file = "pathspec-0.11.2.tar.gz", hash = "sha256:e0d8d0ac2f12da61956eb2306b69f9469b42f4deb0f3cb6ed47b9cce9996ced3"}, +] + [[package]] name = "pexpect" version = "4.8.0" @@ -2538,59 +2593,15 @@ files = [ dev = ["pre-commit", "tox"] testing = ["pytest", "pytest-benchmark"] -[[package]] -name = "plumbum" -version = "1.8.2" -description = "Plumbum: shell combinators library" -optional = false -python-versions = ">=3.6" -files = [ - {file = "plumbum-1.8.2-py3-none-any.whl", hash = "sha256:3ad9e5f56c6ec98f6f7988f7ea8b52159662ea9e915868d369dbccbfca0e367e"}, - {file = "plumbum-1.8.2.tar.gz", hash = "sha256:9e6dc032f4af952665f32f3206567bc23b7858b1413611afe603a3f8ad9bfd75"}, -] - -[package.dependencies] -pywin32 = {version = "*", markers = "platform_system == \"Windows\" and platform_python_implementation != \"PyPy\""} - -[package.extras] -dev = ["paramiko", "psutil", "pytest (>=6.0)", "pytest-cov", "pytest-mock", "pytest-timeout"] -docs = ["sphinx (>=4.0.0)", "sphinx-rtd-theme (>=1.0.0)"] -ssh = ["paramiko"] - -[[package]] -name = "ply" -version = "3.11" -description = "Python Lex & Yacc" -optional = false -python-versions = "*" -files = [ - {file = "ply-3.11-py2.py3-none-any.whl", hash = "sha256:096f9b8350b65ebd2fd1346b12452efe5b9607f7482813ffca50c22722a807ce"}, - {file = "ply-3.11.tar.gz", hash = "sha256:00c7c1aaa88358b9c765b6d3000c6eec0ba42abca5351b095321aef446081da3"}, -] - -[[package]] -name = "pockets" -version = "0.9.1" -description = "A collection of helpful Python tools!" -optional = false -python-versions = "*" -files = [ - {file = "pockets-0.9.1-py2.py3-none-any.whl", hash = "sha256:68597934193c08a08eb2bf6a1d85593f627c22f9b065cc727a4f03f669d96d86"}, - {file = "pockets-0.9.1.tar.gz", hash = "sha256:9320f1a3c6f7a9133fe3b571f283bcf3353cd70249025ae8d618e40e9f7e92b3"}, -] - -[package.dependencies] -six = ">=1.5.2" - [[package]] name = "poethepoet" -version = "0.24.2" +version = "0.24.3" description = "A task runner that works well with poetry." optional = false python-versions = ">=3.8" files = [ - {file = "poethepoet-0.24.2-py3-none-any.whl", hash = "sha256:affaf7669542f54df05ed1e2be3d24028c9f4bd2ea514813fae7f01c5ca6e686"}, - {file = "poethepoet-0.24.2.tar.gz", hash = "sha256:f600ecdbf58b474f7dba273060b194242566ffccb41d75f5b0d1cb8f5aa8bf2e"}, + {file = "poethepoet-0.24.3-py3-none-any.whl", hash = "sha256:8817c6d3d8492776bbb17eb29b7b815b2905aefaa0ad887137e69e53349e2235"}, + {file = "poethepoet-0.24.3.tar.gz", hash = "sha256:73f1060200d1c8f21e303d06a879c5c0e17b96ab16740da70aee2dcc3e4350e4"}, ] [package.dependencies] @@ -2634,13 +2645,13 @@ twisted = ["twisted"] [[package]] name = "prompt-toolkit" -version = "3.0.39" +version = "3.0.40" description = "Library for building powerful interactive command lines in Python" optional = false python-versions = ">=3.7.0" files = [ - {file = "prompt_toolkit-3.0.39-py3-none-any.whl", hash = "sha256:9dffbe1d8acf91e3de75f3b544e4842382fc06c6babe903ac9acb74dc6e08d88"}, - {file = "prompt_toolkit-3.0.39.tar.gz", hash = "sha256:04505ade687dc26dc4284b1ad19a83be2f2afe83e7a828ace0c72f3a1df72aac"}, + {file = "prompt_toolkit-3.0.40-py3-none-any.whl", hash = "sha256:99ba3dfb23d5b5af89712f89e60a5f3d9b8b67a9482ca377c5771d0e9047a34b"}, + {file = "prompt_toolkit-3.0.40.tar.gz", hash = "sha256:a371c06bb1d66cd499fecd708e50c0b6ae00acba9822ba33c586e2f16d1b739e"}, ] [package.dependencies] @@ -2721,47 +2732,47 @@ tests = ["pytest"] [[package]] name = "pyarrow" -version = "14.0.0" +version = "14.0.1" description = "Python library for Apache Arrow" optional = false python-versions = ">=3.8" files = [ - {file = "pyarrow-14.0.0-cp310-cp310-macosx_10_14_x86_64.whl", hash = "sha256:4fce1db17efbc453080c5b306f021926de7c636456a128328797e574c151f81a"}, - {file = "pyarrow-14.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:28de7c05b4d7a71ec660360639cc9b65ceb1175e0e9d4dfccd879a1545bc38f7"}, - {file = "pyarrow-14.0.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1541e9209c094e7f4d7b43fdd9de3a8c71d3069cf6fc03b59bf5774042411849"}, - {file = "pyarrow-14.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8c05e6c45d303c80e41ab04996430a0251321f70986ed51213903ea7bc0b7efd"}, - {file = "pyarrow-14.0.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:426ffec63ab9b4dff23dec51be2150e3a4a99eb38e66c10a70e2c48779fe9c9d"}, - {file = "pyarrow-14.0.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:968844f591902160bd3c9ee240ce8822a3b4e7de731e91daea76ad43fe0ff062"}, - {file = "pyarrow-14.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:dcedbc0b4ea955c530145acfe99e324875c386419a09db150291a24cb01aeb81"}, - {file = "pyarrow-14.0.0-cp311-cp311-macosx_10_14_x86_64.whl", hash = "sha256:97993a12aacc781efad9c92d4545a877e803c4d106d34237ec4ce987bec825a3"}, - {file = "pyarrow-14.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:80225768d94024d59a31320374f5e6abf8899866c958dfb4f4ea8e2d9ec91bde"}, - {file = "pyarrow-14.0.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b61546977a8bd7e3d0c697ede723341ef4737e761af2239aef6e1db447f97727"}, - {file = "pyarrow-14.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:42509e6c93b4a1c8ae8ccd939a43f437097783fe130a1991497a6a1abbba026f"}, - {file = "pyarrow-14.0.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:3eccce331a1392e46573f2ce849a9ee3c074e0d7008e9be0b44566ac149fd6a1"}, - {file = "pyarrow-14.0.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:ecc463c45f2b6b36431f5f2025842245e8c15afe4d42072230575785f3bb00c6"}, - {file = "pyarrow-14.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:4362ed90def81640addcd521811dd16a13015f0a8255bec324a41262c1524b6c"}, - {file = "pyarrow-14.0.0-cp312-cp312-macosx_10_14_x86_64.whl", hash = "sha256:2fbb7ab62537782c5ab31aa08db0e1f6de92c2c515fdfc0790128384e919adcb"}, - {file = "pyarrow-14.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ad7095f8f0fe0bfa3d3fca1909b8fa15c70e630b0cc1ff8d35e143f5e2704064"}, - {file = "pyarrow-14.0.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e6602272fce71c0fb64f266e7cdbe51b93b00c22fc1bb57f2b0cb681c4aeedf4"}, - {file = "pyarrow-14.0.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5b2b8f87951b08a3e72265c8963da3fe4f737bb81290269037e047dd172aa591"}, - {file = "pyarrow-14.0.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:a1c9675966662a042caebbaafa1ae7fc26291287ebc3da06aa63ad74c323ec30"}, - {file = "pyarrow-14.0.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:771079fddc0b4440c41af541dbdebc711a7062c93d3c4764476a9442606977db"}, - {file = "pyarrow-14.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:c4096136318de1c4937370c0c365f949961c371201c396d8cc94a353f342069d"}, - {file = "pyarrow-14.0.0-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:6c94056fb5f0ee0bae2206c3f776881e1db2bd0d133d06805755ae7ac5145349"}, - {file = "pyarrow-14.0.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:687d0df1e08876b2d24d42abae129742fc655367e3fe6700aa4d79fcf2e3215e"}, - {file = "pyarrow-14.0.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0f4054e5ee6c88ca256a67fc8b27f9c59bcd385216346265831d462a6069033f"}, - {file = "pyarrow-14.0.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:768b962e4c042ab2c96576ca0757935472e220d11af855c7d0be3279d7fced5f"}, - {file = "pyarrow-14.0.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:77293b1319c7044f68ebfa43db8c929a0a5254ce371f1a0873d343f1460171d0"}, - {file = "pyarrow-14.0.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:d2bc7c53941d85f0133b1bd5a814bca0af213922f50d8a8dc0eed4d9ed477845"}, - {file = "pyarrow-14.0.0-cp38-cp38-win_amd64.whl", hash = "sha256:378955365dd087c285ef4f34ad939d7e551b7715326710e8cd21cfa2ce511bd7"}, - {file = "pyarrow-14.0.0-cp39-cp39-macosx_10_14_x86_64.whl", hash = "sha256:f05e81b4c621e6ad4bcd8f785e3aa1d6c49a935818b809ea6e7bf206a5b1a4e8"}, - {file = "pyarrow-14.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:6867f6a8057eaef5a7ac6d27fe5518133f67973c5d4295d79a943458350e7c61"}, - {file = "pyarrow-14.0.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ca54b87c46abdfe027f18f959ca388102bd7326c344838f72244807462d091b2"}, - {file = "pyarrow-14.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:35abf61bd0cc9daca3afc715f6ba74ea83d792fa040025352624204bec66bf6a"}, - {file = "pyarrow-14.0.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:65c377523b369f7ef1ba02be814e832443bb3b15065010838f02dae5bdc0f53c"}, - {file = "pyarrow-14.0.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:e8a1e470e4b5f7bda7bede0410291daec55ab69f346d77795d34fd6a45b41579"}, - {file = "pyarrow-14.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:466c1a5a7a4b279cfa363ac34dedd0c3c6af388cec9e6a468ffc095a6627849a"}, - {file = "pyarrow-14.0.0.tar.gz", hash = "sha256:45d3324e1c9871a07de6b4d514ebd73225490963a6dd46c64c465c4b6079fe1e"}, + {file = "pyarrow-14.0.1-cp310-cp310-macosx_10_14_x86_64.whl", hash = "sha256:96d64e5ba7dceb519a955e5eeb5c9adcfd63f73a56aea4722e2cc81364fc567a"}, + {file = "pyarrow-14.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1a8ae88c0038d1bc362a682320112ee6774f006134cd5afc291591ee4bc06505"}, + {file = "pyarrow-14.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0f6f053cb66dc24091f5511e5920e45c83107f954a21032feadc7b9e3a8e7851"}, + {file = "pyarrow-14.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:906b0dc25f2be12e95975722f1e60e162437023f490dbd80d0deb7375baf3171"}, + {file = "pyarrow-14.0.1-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:78d4a77a46a7de9388b653af1c4ce539350726cd9af62e0831e4f2bd0c95a2f4"}, + {file = "pyarrow-14.0.1-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:06ca79080ef89d6529bb8e5074d4b4f6086143b2520494fcb7cf8a99079cde93"}, + {file = "pyarrow-14.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:32542164d905002c42dff896efdac79b3bdd7291b1b74aa292fac8450d0e4dcd"}, + {file = "pyarrow-14.0.1-cp311-cp311-macosx_10_14_x86_64.whl", hash = "sha256:c7331b4ed3401b7ee56f22c980608cf273f0380f77d0f73dd3c185f78f5a6220"}, + {file = "pyarrow-14.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:922e8b49b88da8633d6cac0e1b5a690311b6758d6f5d7c2be71acb0f1e14cd61"}, + {file = "pyarrow-14.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:58c889851ca33f992ea916b48b8540735055201b177cb0dcf0596a495a667b00"}, + {file = "pyarrow-14.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:30d8494870d9916bb53b2a4384948491444741cb9a38253c590e21f836b01222"}, + {file = "pyarrow-14.0.1-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:be28e1a07f20391bb0b15ea03dcac3aade29fc773c5eb4bee2838e9b2cdde0cb"}, + {file = "pyarrow-14.0.1-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:981670b4ce0110d8dcb3246410a4aabf5714db5d8ea63b15686bce1c914b1f83"}, + {file = "pyarrow-14.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:4756a2b373a28f6166c42711240643fb8bd6322467e9aacabd26b488fa41ec23"}, + {file = "pyarrow-14.0.1-cp312-cp312-macosx_10_14_x86_64.whl", hash = "sha256:cf87e2cec65dd5cf1aa4aba918d523ef56ef95597b545bbaad01e6433851aa10"}, + {file = "pyarrow-14.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:470ae0194fbfdfbf4a6b65b4f9e0f6e1fa0ea5b90c1ee6b65b38aecee53508c8"}, + {file = "pyarrow-14.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6263cffd0c3721c1e348062997babdf0151301f7353010c9c9a8ed47448f82ab"}, + {file = "pyarrow-14.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7a8089d7e77d1455d529dbd7cff08898bbb2666ee48bc4085203af1d826a33cc"}, + {file = "pyarrow-14.0.1-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:fada8396bc739d958d0b81d291cfd201126ed5e7913cb73de6bc606befc30226"}, + {file = "pyarrow-14.0.1-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:2a145dab9ed7849fc1101bf03bcdc69913547f10513fdf70fc3ab6c0a50c7eee"}, + {file = "pyarrow-14.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:05fe7994745b634c5fb16ce5717e39a1ac1fac3e2b0795232841660aa76647cd"}, + {file = "pyarrow-14.0.1-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:a8eeef015ae69d104c4c3117a6011e7e3ecd1abec79dc87fd2fac6e442f666ee"}, + {file = "pyarrow-14.0.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:3c76807540989fe8fcd02285dd15e4f2a3da0b09d27781abec3adc265ddbeba1"}, + {file = "pyarrow-14.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:450e4605e3c20e558485f9161a79280a61c55efe585d51513c014de9ae8d393f"}, + {file = "pyarrow-14.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:323cbe60210173ffd7db78bfd50b80bdd792c4c9daca8843ef3cd70b186649db"}, + {file = "pyarrow-14.0.1-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:0140c7e2b740e08c5a459439d87acd26b747fc408bde0a8806096ee0baaa0c15"}, + {file = "pyarrow-14.0.1-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:e592e482edd9f1ab32f18cd6a716c45b2c0f2403dc2af782f4e9674952e6dd27"}, + {file = "pyarrow-14.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:d264ad13605b61959f2ae7c1d25b1a5b8505b112715c961418c8396433f213ad"}, + {file = "pyarrow-14.0.1-cp39-cp39-macosx_10_14_x86_64.whl", hash = "sha256:01e44de9749cddc486169cb632f3c99962318e9dacac7778315a110f4bf8a450"}, + {file = "pyarrow-14.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d0351fecf0e26e152542bc164c22ea2a8e8c682726fce160ce4d459ea802d69c"}, + {file = "pyarrow-14.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:33c1f6110c386464fd2e5e4ea3624466055bbe681ff185fd6c9daa98f30a3f9a"}, + {file = "pyarrow-14.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:11e045dfa09855b6d3e7705a37c42e2dc2c71d608fab34d3c23df2e02df9aec3"}, + {file = "pyarrow-14.0.1-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:097828b55321897db0e1dbfc606e3ff8101ae5725673498cbfa7754ee0da80e4"}, + {file = "pyarrow-14.0.1-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:1daab52050a1c48506c029e6fa0944a7b2436334d7e44221c16f6f1b2cc9c510"}, + {file = "pyarrow-14.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:3f6d5faf4f1b0d5a7f97be987cf9e9f8cd39902611e818fe134588ee99bf0283"}, + {file = "pyarrow-14.0.1.tar.gz", hash = "sha256:b8b3f4fe8d4ec15e1ef9b599b94683c5216adaed78d5cb4c606180546d1e2ee1"}, ] [package.dependencies] @@ -2792,6 +2803,24 @@ files = [ [package.extras] plugins = ["importlib-metadata"] +[[package]] +name = "pymdown-extensions" +version = "10.4" +description = "Extension pack for Python Markdown." +optional = false +python-versions = ">=3.8" +files = [ + {file = "pymdown_extensions-10.4-py3-none-any.whl", hash = "sha256:cfc28d6a09d19448bcbf8eee3ce098c7d17ff99f7bd3069db4819af181212037"}, + {file = "pymdown_extensions-10.4.tar.gz", hash = "sha256:bc46f11749ecd4d6b71cf62396104b4a200bad3498cb0f5dad1b8502fe461a35"}, +] + +[package.dependencies] +markdown = ">=3.2" +pyyaml = "*" + +[package.extras] +extra = ["pygments (>=2.12)"] + [[package]] name = "pyright" version = "1.1.335" @@ -2983,6 +3012,20 @@ files = [ {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, ] +[[package]] +name = "pyyaml-env-tag" +version = "0.1" +description = "A custom YAML tag for referencing environment variables in YAML files. " +optional = false +python-versions = ">=3.6" +files = [ + {file = "pyyaml_env_tag-0.1-py3-none-any.whl", hash = "sha256:af31106dec8a4d68c60207c1886031cbf839b68aa7abccdb19868200532c2069"}, + {file = "pyyaml_env_tag-0.1.tar.gz", hash = "sha256:70092675bda14fdec33b31ba77e7543de9ddc88f2e5b99160396572d11525bdb"}, +] + +[package.dependencies] +pyyaml = "*" + [[package]] name = "pyzmq" version = "25.1.1" @@ -3416,28 +3459,28 @@ files = [ [[package]] name = "ruff" -version = "0.1.4" +version = "0.1.5" description = "An extremely fast Python linter and code formatter, written in Rust." optional = false python-versions = ">=3.7" files = [ - {file = "ruff-0.1.4-py3-none-macosx_10_7_x86_64.whl", hash = "sha256:864958706b669cce31d629902175138ad8a069d99ca53514611521f532d91495"}, - {file = "ruff-0.1.4-py3-none-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:9fdd61883bb34317c788af87f4cd75dfee3a73f5ded714b77ba928e418d6e39e"}, - {file = "ruff-0.1.4-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b4eaca8c9cc39aa7f0f0d7b8fe24ecb51232d1bb620fc4441a61161be4a17539"}, - {file = "ruff-0.1.4-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a9a1301dc43cbf633fb603242bccd0aaa34834750a14a4c1817e2e5c8d60de17"}, - {file = "ruff-0.1.4-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:78e8db8ab6f100f02e28b3d713270c857d370b8d61871d5c7d1702ae411df683"}, - {file = "ruff-0.1.4-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:80fea754eaae06335784b8ea053d6eb8e9aac75359ebddd6fee0858e87c8d510"}, - {file = "ruff-0.1.4-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6bc02a480d4bfffd163a723698da15d1a9aec2fced4c06f2a753f87f4ce6969c"}, - {file = "ruff-0.1.4-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9862811b403063765b03e716dac0fda8fdbe78b675cd947ed5873506448acea4"}, - {file = "ruff-0.1.4-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:58826efb8b3efbb59bb306f4b19640b7e366967a31c049d49311d9eb3a4c60cb"}, - {file = "ruff-0.1.4-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:fdfd453fc91d9d86d6aaa33b1bafa69d114cf7421057868f0b79104079d3e66e"}, - {file = "ruff-0.1.4-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:e8791482d508bd0b36c76481ad3117987301b86072158bdb69d796503e1c84a8"}, - {file = "ruff-0.1.4-py3-none-musllinux_1_2_i686.whl", hash = "sha256:01206e361021426e3c1b7fba06ddcb20dbc5037d64f6841e5f2b21084dc51800"}, - {file = "ruff-0.1.4-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:645591a613a42cb7e5c2b667cbefd3877b21e0252b59272ba7212c3d35a5819f"}, - {file = "ruff-0.1.4-py3-none-win32.whl", hash = "sha256:99908ca2b3b85bffe7e1414275d004917d1e0dfc99d497ccd2ecd19ad115fd0d"}, - {file = "ruff-0.1.4-py3-none-win_amd64.whl", hash = "sha256:1dfd6bf8f6ad0a4ac99333f437e0ec168989adc5d837ecd38ddb2cc4a2e3db8a"}, - {file = "ruff-0.1.4-py3-none-win_arm64.whl", hash = "sha256:d98ae9ebf56444e18a3e3652b3383204748f73e247dea6caaf8b52d37e6b32da"}, - {file = "ruff-0.1.4.tar.gz", hash = "sha256:21520ecca4cc555162068d87c747b8f95e1e95f8ecfcbbe59e8dd00710586315"}, + {file = "ruff-0.1.5-py3-none-macosx_10_7_x86_64.whl", hash = "sha256:32d47fc69261c21a4c48916f16ca272bf2f273eb635d91c65d5cd548bf1f3d96"}, + {file = "ruff-0.1.5-py3-none-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:171276c1df6c07fa0597fb946139ced1c2978f4f0b8254f201281729981f3c17"}, + {file = "ruff-0.1.5-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:17ef33cd0bb7316ca65649fc748acc1406dfa4da96a3d0cde6d52f2e866c7b39"}, + {file = "ruff-0.1.5-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b2c205827b3f8c13b4a432e9585750b93fd907986fe1aec62b2a02cf4401eee6"}, + {file = "ruff-0.1.5-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bb408e3a2ad8f6881d0f2e7ad70cddb3ed9f200eb3517a91a245bbe27101d379"}, + {file = "ruff-0.1.5-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:f20dc5e5905ddb407060ca27267c7174f532375c08076d1a953cf7bb016f5a24"}, + {file = "ruff-0.1.5-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aafb9d2b671ed934998e881e2c0f5845a4295e84e719359c71c39a5363cccc91"}, + {file = "ruff-0.1.5-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a4894dddb476597a0ba4473d72a23151b8b3b0b5f958f2cf4d3f1c572cdb7af7"}, + {file = "ruff-0.1.5-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a00a7ec893f665ed60008c70fe9eeb58d210e6b4d83ec6654a9904871f982a2a"}, + {file = "ruff-0.1.5-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:a8c11206b47f283cbda399a654fd0178d7a389e631f19f51da15cbe631480c5b"}, + {file = "ruff-0.1.5-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:fa29e67b3284b9a79b1a85ee66e293a94ac6b7bb068b307a8a373c3d343aa8ec"}, + {file = "ruff-0.1.5-py3-none-musllinux_1_2_i686.whl", hash = "sha256:9b97fd6da44d6cceb188147b68db69a5741fbc736465b5cea3928fdac0bc1aeb"}, + {file = "ruff-0.1.5-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:721f4b9d3b4161df8dc9f09aa8562e39d14e55a4dbaa451a8e55bdc9590e20f4"}, + {file = "ruff-0.1.5-py3-none-win32.whl", hash = "sha256:f80c73bba6bc69e4fdc73b3991db0b546ce641bdcd5b07210b8ad6f64c79f1ab"}, + {file = "ruff-0.1.5-py3-none-win_amd64.whl", hash = "sha256:c21fe20ee7d76206d290a76271c1af7a5096bc4c73ab9383ed2ad35f852a0087"}, + {file = "ruff-0.1.5-py3-none-win_arm64.whl", hash = "sha256:82bfcb9927e88c1ed50f49ac6c9728dab3ea451212693fe40d08d314663e412f"}, + {file = "ruff-0.1.5.tar.gz", hash = "sha256:5cbec0ef2ae1748fb194f420fb03fb2c25c3258c86129af7172ff8f198f125ab"}, ] [[package]] @@ -3577,13 +3620,13 @@ win32 = ["pywin32"] [[package]] name = "sentry-sdk" -version = "1.34.0" +version = "1.35.0" description = "Python client for Sentry (https://sentry.io)" optional = false python-versions = "*" files = [ - {file = "sentry-sdk-1.34.0.tar.gz", hash = "sha256:e5d0d2b25931d88fa10986da59d941ac6037f742ab6ff2fce4143a27981d60c3"}, - {file = "sentry_sdk-1.34.0-py2.py3-none-any.whl", hash = "sha256:76dd087f38062ac6c1e30ed6feb533ee0037ff9e709974802db7b5dbf2e5db21"}, + {file = "sentry-sdk-1.35.0.tar.gz", hash = "sha256:04e392db9a0d59bd49a51b9e3a92410ac5867556820465057c2ef89a38e953e9"}, + {file = "sentry_sdk-1.35.0-py2.py3-none-any.whl", hash = "sha256:a7865952701e46d38b41315c16c075367675c48d049b90a4cc2e41991ebc7efa"}, ] [package.dependencies] @@ -3769,17 +3812,6 @@ files = [ {file = "sniffio-1.3.0.tar.gz", hash = "sha256:e60305c5e5d314f5389259b7f22aaa33d8f7dee49763119234af3755c55b9101"}, ] -[[package]] -name = "snowballstemmer" -version = "2.2.0" -description = "This package provides 29 stemmers for 28 languages generated from Snowball algorithms." -optional = false -python-versions = "*" -files = [ - {file = "snowballstemmer-2.2.0-py2.py3-none-any.whl", hash = "sha256:c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a"}, - {file = "snowballstemmer-2.2.0.tar.gz", hash = "sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1"}, -] - [[package]] name = "soupsieve" version = "2.5" @@ -3791,195 +3823,6 @@ files = [ {file = "soupsieve-2.5.tar.gz", hash = "sha256:5663d5a7b3bfaeee0bc4372e7fc48f9cff4940b3eec54a6451cc5299f1097690"}, ] -[[package]] -name = "sphinx" -version = "7.2.6" -description = "Python documentation generator" -optional = false -python-versions = ">=3.9" -files = [ - {file = "sphinx-7.2.6-py3-none-any.whl", hash = "sha256:1e09160a40b956dc623c910118fa636da93bd3ca0b9876a7b3df90f07d691560"}, - {file = "sphinx-7.2.6.tar.gz", hash = "sha256:9a5160e1ea90688d5963ba09a2dcd8bdd526620edbb65c328728f1b2228d5ab5"}, -] - -[package.dependencies] -alabaster = ">=0.7,<0.8" -babel = ">=2.9" -colorama = {version = ">=0.4.5", markers = "sys_platform == \"win32\""} -docutils = ">=0.18.1,<0.21" -imagesize = ">=1.3" -Jinja2 = ">=3.0" -packaging = ">=21.0" -Pygments = ">=2.14" -requests = ">=2.25.0" -snowballstemmer = ">=2.0" -sphinxcontrib-applehelp = "*" -sphinxcontrib-devhelp = "*" -sphinxcontrib-htmlhelp = ">=2.0.0" -sphinxcontrib-jsmath = "*" -sphinxcontrib-qthelp = "*" -sphinxcontrib-serializinghtml = ">=1.1.9" - -[package.extras] -docs = ["sphinxcontrib-websupport"] -lint = ["docutils-stubs", "flake8 (>=3.5.0)", "flake8-simplify", "isort", "mypy (>=0.990)", "ruff", "sphinx-lint", "types-requests"] -test = ["cython (>=3.0)", "filelock", "html5lib", "pytest (>=4.6)", "setuptools (>=67.0)"] - -[[package]] -name = "sphinx-autobuild" -version = "2021.3.14" -description = "Rebuild Sphinx documentation on changes, with live-reload in the browser." -optional = false -python-versions = ">=3.6" -files = [ - {file = "sphinx-autobuild-2021.3.14.tar.gz", hash = "sha256:de1ca3b66e271d2b5b5140c35034c89e47f263f2cd5db302c9217065f7443f05"}, - {file = "sphinx_autobuild-2021.3.14-py3-none-any.whl", hash = "sha256:8fe8cbfdb75db04475232f05187c776f46f6e9e04cacf1e49ce81bdac649ccac"}, -] - -[package.dependencies] -colorama = "*" -livereload = "*" -sphinx = "*" - -[package.extras] -test = ["pytest", "pytest-cov"] - -[[package]] -name = "sphinx-basic-ng" -version = "1.0.0b2" -description = "A modern skeleton for Sphinx themes." -optional = false -python-versions = ">=3.7" -files = [ - {file = "sphinx_basic_ng-1.0.0b2-py3-none-any.whl", hash = "sha256:eb09aedbabfb650607e9b4b68c9d240b90b1e1be221d6ad71d61c52e29f7932b"}, - {file = "sphinx_basic_ng-1.0.0b2.tar.gz", hash = "sha256:9ec55a47c90c8c002b5960c57492ec3021f5193cb26cebc2dc4ea226848651c9"}, -] - -[package.dependencies] -sphinx = ">=4.0" - -[package.extras] -docs = ["furo", "ipython", "myst-parser", "sphinx-copybutton", "sphinx-inline-tabs"] - -[[package]] -name = "sphinxcontrib-applehelp" -version = "1.0.7" -description = "sphinxcontrib-applehelp is a Sphinx extension which outputs Apple help books" -optional = false -python-versions = ">=3.9" -files = [ - {file = "sphinxcontrib_applehelp-1.0.7-py3-none-any.whl", hash = "sha256:094c4d56209d1734e7d252f6e0b3ccc090bd52ee56807a5d9315b19c122ab15d"}, - {file = "sphinxcontrib_applehelp-1.0.7.tar.gz", hash = "sha256:39fdc8d762d33b01a7d8f026a3b7d71563ea3b72787d5f00ad8465bd9d6dfbfa"}, -] - -[package.dependencies] -Sphinx = ">=5" - -[package.extras] -lint = ["docutils-stubs", "flake8", "mypy"] -test = ["pytest"] - -[[package]] -name = "sphinxcontrib-devhelp" -version = "1.0.5" -description = "sphinxcontrib-devhelp is a sphinx extension which outputs Devhelp documents" -optional = false -python-versions = ">=3.9" -files = [ - {file = "sphinxcontrib_devhelp-1.0.5-py3-none-any.whl", hash = "sha256:fe8009aed765188f08fcaadbb3ea0d90ce8ae2d76710b7e29ea7d047177dae2f"}, - {file = "sphinxcontrib_devhelp-1.0.5.tar.gz", hash = "sha256:63b41e0d38207ca40ebbeabcf4d8e51f76c03e78cd61abe118cf4435c73d4212"}, -] - -[package.dependencies] -Sphinx = ">=5" - -[package.extras] -lint = ["docutils-stubs", "flake8", "mypy"] -test = ["pytest"] - -[[package]] -name = "sphinxcontrib-htmlhelp" -version = "2.0.4" -description = "sphinxcontrib-htmlhelp is a sphinx extension which renders HTML help files" -optional = false -python-versions = ">=3.9" -files = [ - {file = "sphinxcontrib_htmlhelp-2.0.4-py3-none-any.whl", hash = "sha256:8001661c077a73c29beaf4a79968d0726103c5605e27db92b9ebed8bab1359e9"}, - {file = "sphinxcontrib_htmlhelp-2.0.4.tar.gz", hash = "sha256:6c26a118a05b76000738429b724a0568dbde5b72391a688577da08f11891092a"}, -] - -[package.dependencies] -Sphinx = ">=5" - -[package.extras] -lint = ["docutils-stubs", "flake8", "mypy"] -test = ["html5lib", "pytest"] - -[[package]] -name = "sphinxcontrib-jsmath" -version = "1.0.1" -description = "A sphinx extension which renders display math in HTML via JavaScript" -optional = false -python-versions = ">=3.5" -files = [ - {file = "sphinxcontrib-jsmath-1.0.1.tar.gz", hash = "sha256:a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8"}, - {file = "sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl", hash = "sha256:2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178"}, -] - -[package.extras] -test = ["flake8", "mypy", "pytest"] - -[[package]] -name = "sphinxcontrib-napoleon" -version = "0.7" -description = "Sphinx \"napoleon\" extension." -optional = false -python-versions = "*" -files = [ - {file = "sphinxcontrib-napoleon-0.7.tar.gz", hash = "sha256:407382beed396e9f2d7f3043fad6afda95719204a1e1a231ac865f40abcbfcf8"}, - {file = "sphinxcontrib_napoleon-0.7-py2.py3-none-any.whl", hash = "sha256:711e41a3974bdf110a484aec4c1a556799eb0b3f3b897521a018ad7e2db13fef"}, -] - -[package.dependencies] -pockets = ">=0.3" -six = ">=1.5.2" - -[[package]] -name = "sphinxcontrib-qthelp" -version = "1.0.6" -description = "sphinxcontrib-qthelp is a sphinx extension which outputs QtHelp documents" -optional = false -python-versions = ">=3.9" -files = [ - {file = "sphinxcontrib_qthelp-1.0.6-py3-none-any.whl", hash = "sha256:bf76886ee7470b934e363da7a954ea2825650013d367728588732c7350f49ea4"}, - {file = "sphinxcontrib_qthelp-1.0.6.tar.gz", hash = "sha256:62b9d1a186ab7f5ee3356d906f648cacb7a6bdb94d201ee7adf26db55092982d"}, -] - -[package.dependencies] -Sphinx = ">=5" - -[package.extras] -lint = ["docutils-stubs", "flake8", "mypy"] -test = ["pytest"] - -[[package]] -name = "sphinxcontrib-serializinghtml" -version = "1.1.9" -description = "sphinxcontrib-serializinghtml is a sphinx extension which outputs \"serialized\" HTML files (json and pickle)" -optional = false -python-versions = ">=3.9" -files = [ - {file = "sphinxcontrib_serializinghtml-1.1.9-py3-none-any.whl", hash = "sha256:9b36e503703ff04f20e9675771df105e58aa029cfcbc23b8ed716019b7416ae1"}, - {file = "sphinxcontrib_serializinghtml-1.1.9.tar.gz", hash = "sha256:0c64ff898339e1fac29abd2bf5f11078f3ec413cfe9c046d3120d7ca65530b54"}, -] - -[package.dependencies] -Sphinx = ">=5" - -[package.extras] -lint = ["docutils-stubs", "flake8", "mypy"] -test = ["pytest"] - [[package]] name = "stack-data" version = "0.6.3" @@ -4043,13 +3886,13 @@ doc = ["reno", "sphinx", "tornado (>=4.5)"] [[package]] name = "terminado" -version = "0.17.1" +version = "0.18.0" description = "Tornado websocket backend for the Xterm.js Javascript terminal emulator library." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "terminado-0.17.1-py3-none-any.whl", hash = "sha256:8650d44334eba354dd591129ca3124a6ba42c3d5b70df5051b6921d506fdaeae"}, - {file = "terminado-0.17.1.tar.gz", hash = "sha256:6ccbbcd3a4f8a25a5ec04991f39a0b8db52dfcd487ea0e578d977e6752380333"}, + {file = "terminado-0.18.0-py3-none-any.whl", hash = "sha256:87b0d96642d0fe5f5abd7783857b9cab167f221a39ff98e3b9619a788a3c0f2e"}, + {file = "terminado-0.18.0.tar.gz", hash = "sha256:1ea08a89b835dd1b8c0c900d92848147cef2537243361b2e3f4dc15df9b6fded"}, ] [package.dependencies] @@ -4060,6 +3903,7 @@ tornado = ">=6.1.0" [package.extras] docs = ["myst-parser", "pydata-sphinx-theme", "sphinx"] test = ["pre-commit", "pytest (>=7.0)", "pytest-timeout"] +typing = ["mypy (>=1.6,<2.0)", "traitlets (>=5.11.1)"] [[package]] name = "tinycss2" @@ -4241,13 +4085,13 @@ test = ["argcomplete (>=3.0.3)", "mypy (>=1.6.0)", "pre-commit", "pytest (>=7.0, [[package]] name = "transformer-lens" -version = "1.9.1" +version = "1.10.0" description = "An implementation of transformers tailored for mechanistic interpretability." optional = false python-versions = ">=3.8,<4.0" files = [ - {file = "transformer_lens-1.9.1-py3-none-any.whl", hash = "sha256:62f2b2b2f8f286e35cdd296ec2592b5fd768ac820e71a4ee0697a4081fd2bd39"}, - {file = "transformer_lens-1.9.1.tar.gz", hash = "sha256:a0d36f52dcc641da857d4f1df469fb314e80139813be877e5b4ab14298535073"}, + {file = "transformer_lens-1.10.0-py3-none-any.whl", hash = "sha256:1a296e8fe49e059d627869ea6ebaf1d8023af6a14aebe98f7392231f26bfeeaf"}, + {file = "transformer_lens-1.10.0.tar.gz", hash = "sha256:9b45d70730c19f72e3452760d9a47c6de3a3c64a626f85d29a3185a559baddd1"}, ] [package.dependencies] @@ -4436,18 +4280,17 @@ dev = ["flake8", "flake8-annotations", "flake8-bandit", "flake8-bugbear", "flake [[package]] name = "urllib3" -version = "2.0.7" +version = "2.1.0" description = "HTTP library with thread-safe connection pooling, file post, and more." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "urllib3-2.0.7-py3-none-any.whl", hash = "sha256:fdb6d215c776278489906c2f8916e6e7d4f5a9b602ccbcfdf7f016fc8da0596e"}, - {file = "urllib3-2.0.7.tar.gz", hash = "sha256:c97dfde1f7bd43a71c8d2a58e369e9b2bf692d1334ea9f9cae55add7d0dd0f84"}, + {file = "urllib3-2.1.0-py3-none-any.whl", hash = "sha256:55901e917a5896a349ff771be919f8bd99aff50b79fe58fec595eb37bbc56bb3"}, + {file = "urllib3-2.1.0.tar.gz", hash = "sha256:df7aa8afb0148fa78488e7899b2c59b5f4ffcfa82e6c54ccb9dd37c1d7b52d54"}, ] [package.extras] brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"] -secure = ["certifi", "cryptography (>=1.9)", "idna (>=2.0.0)", "pyopenssl (>=17.1.0)", "urllib3-secure-extra"] socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] zstd = ["zstandard (>=0.18.0)"] @@ -4508,6 +4351,45 @@ nexus = ["wandb-core (>=0.17.0b1)"] perf = ["orjson"] sweeps = ["sweeps (>=0.2.0)"] +[[package]] +name = "watchdog" +version = "3.0.0" +description = "Filesystem events monitoring" +optional = false +python-versions = ">=3.7" +files = [ + {file = "watchdog-3.0.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:336adfc6f5cc4e037d52db31194f7581ff744b67382eb6021c868322e32eef41"}, + {file = "watchdog-3.0.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a70a8dcde91be523c35b2bf96196edc5730edb347e374c7de7cd20c43ed95397"}, + {file = "watchdog-3.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:adfdeab2da79ea2f76f87eb42a3ab1966a5313e5a69a0213a3cc06ef692b0e96"}, + {file = "watchdog-3.0.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:2b57a1e730af3156d13b7fdddfc23dea6487fceca29fc75c5a868beed29177ae"}, + {file = "watchdog-3.0.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:7ade88d0d778b1b222adebcc0927428f883db07017618a5e684fd03b83342bd9"}, + {file = "watchdog-3.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7e447d172af52ad204d19982739aa2346245cc5ba6f579d16dac4bfec226d2e7"}, + {file = "watchdog-3.0.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:9fac43a7466eb73e64a9940ac9ed6369baa39b3bf221ae23493a9ec4d0022674"}, + {file = "watchdog-3.0.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:8ae9cda41fa114e28faf86cb137d751a17ffd0316d1c34ccf2235e8a84365c7f"}, + {file = "watchdog-3.0.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:25f70b4aa53bd743729c7475d7ec41093a580528b100e9a8c5b5efe8899592fc"}, + {file = "watchdog-3.0.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4f94069eb16657d2c6faada4624c39464f65c05606af50bb7902e036e3219be3"}, + {file = "watchdog-3.0.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7c5f84b5194c24dd573fa6472685b2a27cc5a17fe5f7b6fd40345378ca6812e3"}, + {file = "watchdog-3.0.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3aa7f6a12e831ddfe78cdd4f8996af9cf334fd6346531b16cec61c3b3c0d8da0"}, + {file = "watchdog-3.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:233b5817932685d39a7896b1090353fc8efc1ef99c9c054e46c8002561252fb8"}, + {file = "watchdog-3.0.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:13bbbb462ee42ec3c5723e1205be8ced776f05b100e4737518c67c8325cf6100"}, + {file = "watchdog-3.0.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:8f3ceecd20d71067c7fd4c9e832d4e22584318983cabc013dbf3f70ea95de346"}, + {file = "watchdog-3.0.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:c9d8c8ec7efb887333cf71e328e39cffbf771d8f8f95d308ea4125bf5f90ba64"}, + {file = "watchdog-3.0.0-py3-none-manylinux2014_aarch64.whl", hash = "sha256:0e06ab8858a76e1219e68c7573dfeba9dd1c0219476c5a44d5333b01d7e1743a"}, + {file = "watchdog-3.0.0-py3-none-manylinux2014_armv7l.whl", hash = "sha256:d00e6be486affb5781468457b21a6cbe848c33ef43f9ea4a73b4882e5f188a44"}, + {file = "watchdog-3.0.0-py3-none-manylinux2014_i686.whl", hash = "sha256:c07253088265c363d1ddf4b3cdb808d59a0468ecd017770ed716991620b8f77a"}, + {file = "watchdog-3.0.0-py3-none-manylinux2014_ppc64.whl", hash = "sha256:5113334cf8cf0ac8cd45e1f8309a603291b614191c9add34d33075727a967709"}, + {file = "watchdog-3.0.0-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:51f90f73b4697bac9c9a78394c3acbbd331ccd3655c11be1a15ae6fe289a8c83"}, + {file = "watchdog-3.0.0-py3-none-manylinux2014_s390x.whl", hash = "sha256:ba07e92756c97e3aca0912b5cbc4e5ad802f4557212788e72a72a47ff376950d"}, + {file = "watchdog-3.0.0-py3-none-manylinux2014_x86_64.whl", hash = "sha256:d429c2430c93b7903914e4db9a966c7f2b068dd2ebdd2fa9b9ce094c7d459f33"}, + {file = "watchdog-3.0.0-py3-none-win32.whl", hash = "sha256:3ed7c71a9dccfe838c2f0b6314ed0d9b22e77d268c67e015450a29036a81f60f"}, + {file = "watchdog-3.0.0-py3-none-win_amd64.whl", hash = "sha256:4c9956d27be0bb08fc5f30d9d0179a855436e655f046d288e2bcc11adfae893c"}, + {file = "watchdog-3.0.0-py3-none-win_ia64.whl", hash = "sha256:5d9f3a10e02d7371cd929b5d8f11e87d4bad890212ed3901f9b4d68767bee759"}, + {file = "watchdog-3.0.0.tar.gz", hash = "sha256:4d98a320595da7a7c5a18fc48cb633c2e73cda78f93cac2ef42d42bf609a33f9"}, +] + +[package.extras] +watchmedo = ["PyYAML (>=3.10)"] + [[package]] name = "wcwidth" version = "0.2.9" @@ -4840,4 +4722,4 @@ cffi = ["cffi (>=1.11)"] [metadata] lock-version = "2.0" python-versions = ">=3.10, <3.12" -content-hash = "543e27d4d101c3041fbbddd3b7f4925da8f65137be2478de80d0be8df3aef0f3" +content-hash = "746cb76729de1c119d4978bed3705bd60d4116d046bb92ba2127bab065c05ac7" diff --git a/pyproject.toml b/pyproject.toml index c9a6d89e..a7f0ac09 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -34,14 +34,12 @@ transformers=">=4.33.1, <4.34.0" # See https://github.com/neelnanda-io/TransformerLens/issues/404 [tool.poetry.group.docs.dependencies] - sphinx = "^7.2.6" - sphinxcontrib-napoleon = "^0.7" - sphinx-autobuild = "^2021.3.14" - furo = "^2023.9.10" - myst-parser = "^2.0.0" - nbsphinx = "^0.9.3" - nbconvert = "^7.11.0" - pandoc = "^2.3" + mkdocs = "^1.5.3" + mkdocstrings = "^0.23.0" + mkdocstrings-python = "^1.7.3" + mkdocs-gen-files = "^0.5.0" + mkdocs-literate-nav = "^0.6.1" + mkdocs-section-index = "^0.3.8" [tool.poe.tasks] [tool.poe.tasks.check] @@ -90,12 +88,18 @@ help=" [alias for typecheck]" sequence=["typecheck"] + [tool.poe.tasks.clean-docs] + cmd="rm -rf ./docs/reference/" + help="Cleans out the automatically generated docs." + [tool.poe.tasks.make-docs] - script="docs.make_docs:build_docs" + deps=["clean-docs"] + cmd="mkdocs build" help="Generates our docs" [tool.poe.tasks.docs-hot-reload] - script="docs.make_docs:docs_hot_reload" + deps=["clean-docs"] + cmd="mkdocs serve" help="Starts our watch server" [build-system] diff --git a/sparse_autoencoder/activation_store/utils/__init__.py b/sparse_autoencoder/activation_store/utils/__init__.py new file mode 100644 index 00000000..e774d257 --- /dev/null +++ b/sparse_autoencoder/activation_store/utils/__init__.py @@ -0,0 +1 @@ +"""Activation Store Utils.""" diff --git a/sparse_autoencoder/autoencoder/__init__.py b/sparse_autoencoder/autoencoder/__init__.py new file mode 100644 index 00000000..d8d8b647 --- /dev/null +++ b/sparse_autoencoder/autoencoder/__init__.py @@ -0,0 +1 @@ +"""Autoencoder.""" diff --git a/sparse_autoencoder/autoencoder/components/__init__.py b/sparse_autoencoder/autoencoder/components/__init__.py new file mode 100644 index 00000000..14cd717a --- /dev/null +++ b/sparse_autoencoder/autoencoder/components/__init__.py @@ -0,0 +1 @@ +"""Autoencoder Components.""" diff --git a/sparse_autoencoder/source_data/__init__.py b/sparse_autoencoder/source_data/__init__.py new file mode 100644 index 00000000..3524949d --- /dev/null +++ b/sparse_autoencoder/source_data/__init__.py @@ -0,0 +1 @@ +"""Source Data.""" diff --git a/sparse_autoencoder/source_data/random_int.py b/sparse_autoencoder/source_data/random_int.py index 0adb93b6..46b5029d 100644 --- a/sparse_autoencoder/source_data/random_int.py +++ b/sparse_autoencoder/source_data/random_int.py @@ -90,7 +90,6 @@ def __init__( 250 Args: - tokenizer: The tokenizer to use to tokenize the prompts. context_size: The context size to use when returning a list of tokenized prompts. *Towards Monosemanticity: Decomposing Language Models With Dictionary Learning* used a context size of 250. diff --git a/sparse_autoencoder/src_model/__init__.py b/sparse_autoencoder/src_model/__init__.py new file mode 100644 index 00000000..da15acd0 --- /dev/null +++ b/sparse_autoencoder/src_model/__init__.py @@ -0,0 +1 @@ +"""Source Model.""" diff --git a/sparse_autoencoder/train/__init__.py b/sparse_autoencoder/train/__init__.py new file mode 100644 index 00000000..4a13d436 --- /dev/null +++ b/sparse_autoencoder/train/__init__.py @@ -0,0 +1 @@ +"""Train.""" diff --git a/sparse_autoencoder/train/metrics/__init__.py b/sparse_autoencoder/train/metrics/__init__.py new file mode 100644 index 00000000..693f46b4 --- /dev/null +++ b/sparse_autoencoder/train/metrics/__init__.py @@ -0,0 +1 @@ +"""Train Metrics.""" diff --git a/sparse_autoencoder/train/utils/__init__.py b/sparse_autoencoder/train/utils/__init__.py new file mode 100644 index 00000000..5241f1bc --- /dev/null +++ b/sparse_autoencoder/train/utils/__init__.py @@ -0,0 +1 @@ +"""Train Utils.""" From 9180b00f8dfedc1f5ad8ccb4836907cbf52dcf52 Mon Sep 17 00:00:00 2001 From: Bryce Meyer Date: Mon, 13 Nov 2023 23:32:40 +0100 Subject: [PATCH 22/29] setup commands --- docs/gen_ref_pages.py | 60 ++++++++++++++++++++++--------------------- mkdocs.yml | 7 +++-- poetry.lock | 22 +++------------- pyproject.toml | 9 ++++--- 4 files changed, 44 insertions(+), 54 deletions(-) diff --git a/docs/gen_ref_pages.py b/docs/gen_ref_pages.py index e467c1b1..02934c9f 100644 --- a/docs/gen_ref_pages.py +++ b/docs/gen_ref_pages.py @@ -6,47 +6,49 @@ import mkdocs_gen_files -def is_source_file(file: Path) -> bool: - """Checks an individual file to see if they are source files for Sparse Encoder.""" - return "test" not in str(file) - - -nav = mkdocs_gen_files.Nav() # type: ignore - CURRENT_DIR = Path(__file__).parent REPO_ROOT = CURRENT_DIR.parent PROJECT_ROOT = REPO_ROOT / "sparse_autoencoder" REFERENCE_DIR = CURRENT_DIR / "content/reference" -python_files = Path(PROJECT_ROOT).rglob("*.py") -source_files = filter(is_source_file, python_files) -for path in sorted(source_files): - module_path = path.relative_to(PROJECT_ROOT).with_suffix("") # - doc_path = path.relative_to(PROJECT_ROOT).with_suffix(".md") # - full_doc_path = Path(REFERENCE_DIR, doc_path) # +def is_source_file(file: Path) -> bool: + """Checks an individual file to see if they are source files for Sparse Encoder.""" + return "test" not in str(file) + + +def run() -> None: + """Handles the actual generation of our reference docs.""" + nav = mkdocs_gen_files.Nav() # type: ignore + + python_files = Path(PROJECT_ROOT).rglob("*.py") + source_files = filter(is_source_file, python_files) - parts = list(module_path.parts) + for path in sorted(source_files): + module_path = path.relative_to(PROJECT_ROOT).with_suffix("") # + doc_path = path.relative_to(PROJECT_ROOT).with_suffix(".md") # + full_doc_path = Path(REFERENCE_DIR, doc_path) # - if parts[-1] == "__init__": # - parts = parts[:-1] - doc_path = doc_path.with_name("index.md") - full_doc_path = full_doc_path.with_name("index.md") - elif parts[-1] == "__main__": - continue + parts = list(module_path.parts) - slug = ["Home"] if not len(parts) else parts + if parts[-1] == "__init__": # + parts = parts[:-1] + doc_path = doc_path.with_name("index.md") + full_doc_path = full_doc_path.with_name("index.md") + elif parts[-1] == "__main__": + continue - nav[slug] = doc_path.as_posix() # type: ignore + slug = ["Home"] if not len(parts) else parts - parts.insert(0, "sparse_autoencoder") + nav[slug] = doc_path.as_posix() # type: ignore - with mkdocs_gen_files.open(full_doc_path, "w") as fd: # - identifier = ".".join(parts) # - fd.write(f"::: {identifier}") # + parts.insert(0, "sparse_autoencoder") - mkdocs_gen_files.set_edit_path(full_doc_path, path) # + with mkdocs_gen_files.open(full_doc_path, "w") as fd: # + identifier = ".".join(parts) # + fd.write(f"::: {identifier}") # + mkdocs_gen_files.set_edit_path(full_doc_path, path) # -with mkdocs_gen_files.open(REFERENCE_DIR / "SUMMARY.md", "w") as nav_file: # - nav_file.writelines(nav.build_literate_nav()) + with mkdocs_gen_files.open(REFERENCE_DIR / "SUMMARY.md", "w") as nav_file: # + nav_file.writelines(nav.build_literate_nav()) diff --git a/mkdocs.yml b/mkdocs.yml index 4675d605..b001e6f0 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -4,12 +4,11 @@ site_dir: docs/generated theme: name: readthedocs plugins: - - search - - autorefs - gen-files: scripts: - docs/gen_ref_pages.py + - mkdocstrings + - search + - autorefs - literate-nav: nav_file: SUMMARY.md - - section-index - - mkdocstrings diff --git a/poetry.lock b/poetry.lock index 3576c37e..ccf8d177 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1865,20 +1865,6 @@ files = [ [package.dependencies] mkdocs = ">=1.0.3" -[[package]] -name = "mkdocs-section-index" -version = "0.3.8" -description = "MkDocs plugin to allow clickable sections that lead to an index page" -optional = false -python-versions = ">=3.7" -files = [ - {file = "mkdocs_section_index-0.3.8-py3-none-any.whl", hash = "sha256:823d298d78bc1e73e23678ff60889f3c369c2167b03dba73fea88bd0e268a60d"}, - {file = "mkdocs_section_index-0.3.8.tar.gz", hash = "sha256:bbd209f0da79441baf136ef3a9c40665bb9681d1fb62c73ca2f116fd1388a404"}, -] - -[package.dependencies] -mkdocs = ">=1.2" - [[package]] name = "mkdocstrings" version = "0.23.0" @@ -4392,13 +4378,13 @@ watchmedo = ["PyYAML (>=3.10)"] [[package]] name = "wcwidth" -version = "0.2.9" +version = "0.2.10" description = "Measures the displayed width of unicode strings in a terminal" optional = false python-versions = "*" files = [ - {file = "wcwidth-0.2.9-py2.py3-none-any.whl", hash = "sha256:9a929bd8380f6cd9571a968a9c8f4353ca58d7cd812a4822bba831f8d685b223"}, - {file = "wcwidth-0.2.9.tar.gz", hash = "sha256:a675d1a4a2d24ef67096a04b85b02deeecd8e226f57b5e3a72dbb9ed99d27da8"}, + {file = "wcwidth-0.2.10-py2.py3-none-any.whl", hash = "sha256:aec5179002dd0f0d40c456026e74a729661c9d468e1ed64405e3a6c2176ca36f"}, + {file = "wcwidth-0.2.10.tar.gz", hash = "sha256:390c7454101092a6a5e43baad8f83de615463af459201709556b6e4b1c861f97"}, ] [[package]] @@ -4722,4 +4708,4 @@ cffi = ["cffi (>=1.11)"] [metadata] lock-version = "2.0" python-versions = ">=3.10, <3.12" -content-hash = "746cb76729de1c119d4978bed3705bd60d4116d046bb92ba2127bab065c05ac7" +content-hash = "46b5c11d3edbd4af557f2224528862a39219188bd653b9621f48b945602eb3e4" diff --git a/pyproject.toml b/pyproject.toml index a7f0ac09..c8b5aa59 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -39,7 +39,6 @@ mkdocstrings-python = "^1.7.3" mkdocs-gen-files = "^0.5.0" mkdocs-literate-nav = "^0.6.1" - mkdocs-section-index = "^0.3.8" [tool.poe.tasks] [tool.poe.tasks.check] @@ -89,11 +88,15 @@ sequence=["typecheck"] [tool.poe.tasks.clean-docs] - cmd="rm -rf ./docs/reference/" + cmd="rm -rf ./docs/content/reference/" + help="Cleans out the automatically generated docs." + + [tool.poe.tasks.gen-docs] + script="docs.gen_ref_pages:run" help="Cleans out the automatically generated docs." [tool.poe.tasks.make-docs] - deps=["clean-docs"] + deps=["clean-docs", "gen-docs"] cmd="mkdocs build" help="Generates our docs" From f3509ec245e36b36ac546cd614ca0220badde3d3 Mon Sep 17 00:00:00 2001 From: Bryce Meyer Date: Mon, 13 Nov 2023 23:40:07 +0100 Subject: [PATCH 23/29] installed mkdocs --- .github/workflows/gh-pages.yml | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/.github/workflows/gh-pages.yml b/.github/workflows/gh-pages.yml index b8af4914..3e040178 100644 --- a/.github/workflows/gh-pages.yml +++ b/.github/workflows/gh-pages.yml @@ -25,15 +25,12 @@ jobs: with: python-version: "3.11" cache: "poetry" - - name: Install pandoc - uses: awalsh128/cache-apt-pkgs-action@latest - with: - packages: pandoc - version: 1.0 + - name: Install mkdocs + run: pip install mkdocs - name: Install dependencies run: poetry install --with docs - name: Build Docs - run: poetry run build-docs + run: poetry run make-docs - name: Upload Docs Artifact uses: actions/upload-artifact@v3 with: From 0400a23389ef4e54162bbf53ce9879a03f033fbf Mon Sep 17 00:00:00 2001 From: Bryce Meyer Date: Mon, 13 Nov 2023 23:47:02 +0100 Subject: [PATCH 24/29] installed poethepoet --- .github/workflows/gh-pages.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/gh-pages.yml b/.github/workflows/gh-pages.yml index 3e040178..db8c9c32 100644 --- a/.github/workflows/gh-pages.yml +++ b/.github/workflows/gh-pages.yml @@ -25,12 +25,14 @@ jobs: with: python-version: "3.11" cache: "poetry" + - name: Install poe + run: pip install poethepoet - name: Install mkdocs run: pip install mkdocs - name: Install dependencies run: poetry install --with docs - name: Build Docs - run: poetry run make-docs + run: poe make-docs - name: Upload Docs Artifact uses: actions/upload-artifact@v3 with: From 31de4951aa6b5c13060951ab3a2707658a088dd2 Mon Sep 17 00:00:00 2001 From: Bryce Meyer Date: Mon, 13 Nov 2023 23:51:50 +0100 Subject: [PATCH 25/29] added init file for new module --- sparse_autoencoder/optimizer/__init__.py | 1 + 1 file changed, 1 insertion(+) create mode 100644 sparse_autoencoder/optimizer/__init__.py diff --git a/sparse_autoencoder/optimizer/__init__.py b/sparse_autoencoder/optimizer/__init__.py new file mode 100644 index 00000000..e0b34899 --- /dev/null +++ b/sparse_autoencoder/optimizer/__init__.py @@ -0,0 +1 @@ +"""Optimizer.""" From f3697b373d9e0da530014323170be93776ab81f6 Mon Sep 17 00:00:00 2001 From: Bryce Meyer Date: Tue, 14 Nov 2023 00:09:49 +0100 Subject: [PATCH 26/29] fixed doc string typing --- sparse_autoencoder/train/resample_neurons.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sparse_autoencoder/train/resample_neurons.py b/sparse_autoencoder/train/resample_neurons.py index b6e48e9e..75f1c0a4 100644 --- a/sparse_autoencoder/train/resample_neurons.py +++ b/sparse_autoencoder/train/resample_neurons.py @@ -122,11 +122,11 @@ def sample_input( Example: >>> probabilities = torch.tensor([0.1, 0.2, 0.7]) - >>> input_activations = torch.tensor([[1, 2], [3, 4], [5, 6]]) + >>> input_activations = torch.tensor([[1.0, 2.0], [3.0, 4.0], [5.0, 6.0]]) >>> _seed = torch.manual_seed(0) # For reproducibility in example >>> sampled_input = sample_input(probabilities, input_activations, 2) >>> sampled_input.tolist() - [[5, 6], [3, 4]] + [[5.0, 6.0], [3.0, 4.0]] Args: probabilities: Probabilities for each input. From 2fcc1b538658930b54743cdc455219517f68b076 Mon Sep 17 00:00:00 2001 From: Bryce Meyer Date: Tue, 14 Nov 2023 23:54:15 +0100 Subject: [PATCH 27/29] removed doc typing exceptions --- pyproject.toml | 5 ----- 1 file changed, 5 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 824335e9..d3000cbd 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -145,11 +145,6 @@ lines-after-imports=2 [tool.ruff.lint.per-file-ignores] - "**/docs/*" = [ - "ANN401", # Allow type.Any in doc scripts - "S603", # Starting an untrusted subprocess - "S607", # Starting a process with a partial path for sphinx - ] "**/tests/*"=[ "ARG001", # Fixtures often have unused arguments "PT004", # Fixtures don't return anything From 8e90ae0228d8be241369c74090d5dcc489134f50 Mon Sep 17 00:00:00 2001 From: Bryce Meyer Date: Thu, 16 Nov 2023 20:43:18 +0100 Subject: [PATCH 28/29] regenerated lock file --- poetry.lock | 452 +++++++++++++++++++++++++++------------------------- 1 file changed, 238 insertions(+), 214 deletions(-) diff --git a/poetry.lock b/poetry.lock index e1e922a3..75f7c853 100644 --- a/poetry.lock +++ b/poetry.lock @@ -695,25 +695,26 @@ toml = ["tomli"] [[package]] name = "datasets" -version = "2.14.6" +version = "2.15.0" description = "HuggingFace community-driven open-source library of datasets" optional = false python-versions = ">=3.8.0" files = [ - {file = "datasets-2.14.6-py3-none-any.whl", hash = "sha256:4de857ffce21cfc847236745c69f102e33cd1f0fa8398e7be9964525fd4cd5db"}, - {file = "datasets-2.14.6.tar.gz", hash = "sha256:97ebbace8ec7af11434a87d1215379927f8fee2beab2c4a674003756ecfe920c"}, + {file = "datasets-2.15.0-py3-none-any.whl", hash = "sha256:6d658d23811393dfc982d026082e1650bdaaae28f6a86e651966cb072229a228"}, + {file = "datasets-2.15.0.tar.gz", hash = "sha256:a26d059370bd7503bd60e9337977199a13117a83f72fb61eda7e66f0c4d50b2b"}, ] [package.dependencies] aiohttp = "*" dill = ">=0.3.0,<0.3.8" fsspec = {version = ">=2023.1.0,<=2023.10.0", extras = ["http"]} -huggingface-hub = ">=0.14.0,<1.0.0" +huggingface-hub = ">=0.18.0" multiprocess = "*" numpy = ">=1.17" packaging = "*" pandas = "*" pyarrow = ">=8.0.0" +pyarrow-hotfix = "*" pyyaml = ">=5.1" requests = ">=2.19.0" tqdm = ">=4.62.1" @@ -723,15 +724,15 @@ xxhash = "*" apache-beam = ["apache-beam (>=2.26.0,<2.44.0)"] audio = ["librosa", "soundfile (>=0.12.1)"] benchmarks = ["tensorflow (==2.12.0)", "torch (==2.0.1)", "transformers (==4.30.1)"] -dev = ["Pillow (>=6.2.1)", "absl-py", "apache-beam (>=2.26.0,<2.44.0)", "black (>=23.1,<24.0)", "elasticsearch (<8.0.0)", "faiss-cpu (>=1.6.4)", "joblib (<1.3.0)", "joblibspark", "librosa", "lz4", "py7zr", "pyspark (>=3.4)", "pytest", "pytest-datadir", "pytest-xdist", "pyyaml (>=5.3.1)", "rarfile (>=4.0)", "ruff (>=0.0.241)", "s3fs", "s3fs (>=2021.11.1)", "soundfile (>=0.12.1)", "sqlalchemy (<2.0.0)", "tensorflow (>=2.2.0,!=2.6.0,!=2.6.1)", "tensorflow (>=2.3,!=2.6.0,!=2.6.1)", "tensorflow-macos", "tiktoken", "torch", "transformers", "zstandard"] +dev = ["Pillow (>=6.2.1)", "absl-py", "apache-beam (>=2.26.0,<2.44.0)", "black (>=23.1,<24.0)", "elasticsearch (<8.0.0)", "faiss-cpu (>=1.6.4)", "jax (>=0.3.14)", "jaxlib (>=0.3.14)", "joblib (<1.3.0)", "joblibspark", "librosa", "lz4", "py7zr", "pyspark (>=3.4)", "pytest", "pytest-datadir", "pytest-xdist", "pyyaml (>=5.3.1)", "rarfile (>=4.0)", "ruff (>=0.0.241)", "s3fs", "s3fs (>=2021.11.1)", "soundfile (>=0.12.1)", "sqlalchemy (<2.0.0)", "tensorflow (>=2.2.0,!=2.6.0,!=2.6.1)", "tensorflow (>=2.3,!=2.6.0,!=2.6.1)", "tensorflow-macos", "tiktoken", "torch", "transformers", "typing-extensions (>=4.6.1)", "zstandard"] docs = ["s3fs", "tensorflow (>=2.2.0,!=2.6.0,!=2.6.1)", "tensorflow-macos", "torch", "transformers"] -jax = ["jax (>=0.2.8,!=0.3.2,<=0.3.25)", "jaxlib (>=0.1.65,<=0.3.25)"] +jax = ["jax (>=0.3.14)", "jaxlib (>=0.3.14)"] metrics-tests = ["Werkzeug (>=1.0.1)", "accelerate", "bert-score (>=0.3.6)", "jiwer", "langdetect", "mauve-text", "nltk", "requests-file (>=1.5.1)", "rouge-score", "sacrebleu", "sacremoses", "scikit-learn", "scipy", "sentencepiece", "seqeval", "six (>=1.15.0,<1.16.0)", "spacy (>=3.0.0)", "texttable (>=1.6.3)", "tldextract", "tldextract (>=3.1.0)", "toml (>=0.10.1)", "typer (<0.5.0)"] quality = ["black (>=23.1,<24.0)", "pyyaml (>=5.3.1)", "ruff (>=0.0.241)"] s3 = ["s3fs"] tensorflow = ["tensorflow (>=2.2.0,!=2.6.0,!=2.6.1)", "tensorflow-macos"] tensorflow-gpu = ["tensorflow-gpu (>=2.2.0,!=2.6.0,!=2.6.1)"] -tests = ["Pillow (>=6.2.1)", "absl-py", "apache-beam (>=2.26.0,<2.44.0)", "elasticsearch (<8.0.0)", "faiss-cpu (>=1.6.4)", "joblib (<1.3.0)", "joblibspark", "librosa", "lz4", "py7zr", "pyspark (>=3.4)", "pytest", "pytest-datadir", "pytest-xdist", "rarfile (>=4.0)", "s3fs (>=2021.11.1)", "soundfile (>=0.12.1)", "sqlalchemy (<2.0.0)", "tensorflow (>=2.3,!=2.6.0,!=2.6.1)", "tensorflow-macos", "tiktoken", "torch", "transformers", "zstandard"] +tests = ["Pillow (>=6.2.1)", "absl-py", "apache-beam (>=2.26.0,<2.44.0)", "elasticsearch (<8.0.0)", "faiss-cpu (>=1.6.4)", "jax (>=0.3.14)", "jaxlib (>=0.3.14)", "joblib (<1.3.0)", "joblibspark", "librosa", "lz4", "py7zr", "pyspark (>=3.4)", "pytest", "pytest-datadir", "pytest-xdist", "rarfile (>=4.0)", "s3fs (>=2021.11.1)", "soundfile (>=0.12.1)", "sqlalchemy (<2.0.0)", "tensorflow (>=2.3,!=2.6.0,!=2.6.1)", "tensorflow-macos", "tiktoken", "torch", "transformers", "typing-extensions (>=4.6.1)", "zstandard"] torch = ["torch"] vision = ["Pillow (>=6.2.1)"] @@ -875,13 +876,13 @@ files = [ [[package]] name = "fastjsonschema" -version = "2.18.1" +version = "2.19.0" description = "Fastest Python implementation of JSON schema" optional = false python-versions = "*" files = [ - {file = "fastjsonschema-2.18.1-py3-none-any.whl", hash = "sha256:aec6a19e9f66e9810ab371cc913ad5f4e9e479b63a7072a2cd060a9369e329a8"}, - {file = "fastjsonschema-2.18.1.tar.gz", hash = "sha256:06dc8680d937628e993fa0cd278f196d20449a1adc087640710846b324d422ea"}, + {file = "fastjsonschema-2.19.0-py3-none-any.whl", hash = "sha256:b9fd1a2dd6971dbc7fee280a95bd199ae0dd9ce22beb91cc75e9c1c528a5170e"}, + {file = "fastjsonschema-2.19.0.tar.gz", hash = "sha256:e25df6647e1bc4a26070b700897b07b542ec898dd4f1f6ea013e7f6a88417225"}, ] [package.extras] @@ -1087,13 +1088,13 @@ colorama = ">=0.4" [[package]] name = "huggingface-hub" -version = "0.19.1" +version = "0.19.4" description = "Client library to download and publish models, datasets and other repos on the huggingface.co hub" optional = false python-versions = ">=3.8.0" files = [ - {file = "huggingface_hub-0.19.1-py3-none-any.whl", hash = "sha256:7131d1fc3f6794e1d2c16d05b0a4784525cb7a97cc785207600a143154b6dca9"}, - {file = "huggingface_hub-0.19.1.tar.gz", hash = "sha256:a84ad99b802ba58b40a5444689e679420657dc187179d57521b6bc4cde725898"}, + {file = "huggingface_hub-0.19.4-py3-none-any.whl", hash = "sha256:dba013f779da16f14b606492828f3760600a1e1801432d09fe1c33e50b825bb5"}, + {file = "huggingface_hub-0.19.4.tar.gz", hash = "sha256:176a4fc355a851c17550e7619488f383189727eab209534d7cef2114dae77b22"}, ] [package.dependencies] @@ -1106,17 +1107,17 @@ tqdm = ">=4.42.1" typing-extensions = ">=3.7.4.3" [package.extras] -all = ["InquirerPy (==0.3.4)", "Jinja2", "Pillow", "aiohttp", "gradio", "jedi", "mypy (==1.5.1)", "numpy", "pydantic (>1.1,<3.0)", "pytest", "pytest-asyncio", "pytest-cov", "pytest-env", "pytest-vcr", "pytest-xdist", "ruff (>=0.1.3)", "soundfile", "types-PyYAML", "types-requests", "types-simplejson", "types-toml", "types-tqdm", "types-urllib3", "typing-extensions (>=4.8.0)", "urllib3 (<2.0)"] +all = ["InquirerPy (==0.3.4)", "Jinja2", "Pillow", "aiohttp", "gradio", "jedi", "mypy (==1.5.1)", "numpy", "pydantic (>1.1,<2.0)", "pydantic (>1.1,<3.0)", "pytest", "pytest-asyncio", "pytest-cov", "pytest-env", "pytest-vcr", "pytest-xdist", "ruff (>=0.1.3)", "soundfile", "types-PyYAML", "types-requests", "types-simplejson", "types-toml", "types-tqdm", "types-urllib3", "typing-extensions (>=4.8.0)", "urllib3 (<2.0)"] cli = ["InquirerPy (==0.3.4)"] -dev = ["InquirerPy (==0.3.4)", "Jinja2", "Pillow", "aiohttp", "gradio", "jedi", "mypy (==1.5.1)", "numpy", "pydantic (>1.1,<3.0)", "pytest", "pytest-asyncio", "pytest-cov", "pytest-env", "pytest-vcr", "pytest-xdist", "ruff (>=0.1.3)", "soundfile", "types-PyYAML", "types-requests", "types-simplejson", "types-toml", "types-tqdm", "types-urllib3", "typing-extensions (>=4.8.0)", "urllib3 (<2.0)"] -docs = ["InquirerPy (==0.3.4)", "Jinja2", "Pillow", "aiohttp", "gradio", "hf-doc-builder", "jedi", "mypy (==1.5.1)", "numpy", "pydantic (>1.1,<3.0)", "pytest", "pytest-asyncio", "pytest-cov", "pytest-env", "pytest-vcr", "pytest-xdist", "ruff (>=0.1.3)", "soundfile", "types-PyYAML", "types-requests", "types-simplejson", "types-toml", "types-tqdm", "types-urllib3", "typing-extensions (>=4.8.0)", "urllib3 (<2.0)", "watchdog"] +dev = ["InquirerPy (==0.3.4)", "Jinja2", "Pillow", "aiohttp", "gradio", "jedi", "mypy (==1.5.1)", "numpy", "pydantic (>1.1,<2.0)", "pydantic (>1.1,<3.0)", "pytest", "pytest-asyncio", "pytest-cov", "pytest-env", "pytest-vcr", "pytest-xdist", "ruff (>=0.1.3)", "soundfile", "types-PyYAML", "types-requests", "types-simplejson", "types-toml", "types-tqdm", "types-urllib3", "typing-extensions (>=4.8.0)", "urllib3 (<2.0)"] +docs = ["InquirerPy (==0.3.4)", "Jinja2", "Pillow", "aiohttp", "gradio", "hf-doc-builder", "jedi", "mypy (==1.5.1)", "numpy", "pydantic (>1.1,<2.0)", "pydantic (>1.1,<3.0)", "pytest", "pytest-asyncio", "pytest-cov", "pytest-env", "pytest-vcr", "pytest-xdist", "ruff (>=0.1.3)", "soundfile", "types-PyYAML", "types-requests", "types-simplejson", "types-toml", "types-tqdm", "types-urllib3", "typing-extensions (>=4.8.0)", "urllib3 (<2.0)", "watchdog"] fastai = ["fastai (>=2.4)", "fastcore (>=1.3.27)", "toml"] -inference = ["aiohttp", "pydantic (>1.1,<3.0)"] +inference = ["aiohttp", "pydantic (>1.1,<2.0)", "pydantic (>1.1,<3.0)"] quality = ["mypy (==1.5.1)", "ruff (>=0.1.3)"] tensorflow = ["graphviz", "pydot", "tensorflow"] -testing = ["InquirerPy (==0.3.4)", "Jinja2", "Pillow", "aiohttp", "gradio", "jedi", "numpy", "pydantic (>1.1,<3.0)", "pytest", "pytest-asyncio", "pytest-cov", "pytest-env", "pytest-vcr", "pytest-xdist", "soundfile", "urllib3 (<2.0)"] +testing = ["InquirerPy (==0.3.4)", "Jinja2", "Pillow", "aiohttp", "gradio", "jedi", "numpy", "pydantic (>1.1,<2.0)", "pydantic (>1.1,<3.0)", "pytest", "pytest-asyncio", "pytest-cov", "pytest-env", "pytest-vcr", "pytest-xdist", "soundfile", "urllib3 (<2.0)"] torch = ["torch"] -typing = ["pydantic (>1.1,<3.0)", "types-PyYAML", "types-requests", "types-simplejson", "types-toml", "types-tqdm", "types-urllib3", "typing-extensions (>=4.8.0)"] +typing = ["types-PyYAML", "types-requests", "types-simplejson", "types-toml", "types-tqdm", "types-urllib3", "typing-extensions (>=4.8.0)"] [[package]] name = "identify" @@ -1338,13 +1339,13 @@ files = [ [[package]] name = "jsonschema" -version = "4.19.2" +version = "4.20.0" description = "An implementation of JSON Schema validation for Python" optional = false python-versions = ">=3.8" files = [ - {file = "jsonschema-4.19.2-py3-none-any.whl", hash = "sha256:eee9e502c788e89cb166d4d37f43084e3b64ab405c795c03d343a4dbc2c810fc"}, - {file = "jsonschema-4.19.2.tar.gz", hash = "sha256:c9ff4d7447eed9592c23a12ccee508baf0dd0d59650615e847feb6cdca74f392"}, + {file = "jsonschema-4.20.0-py3-none-any.whl", hash = "sha256:ed6231f0429ecf966f5bc8dfef245998220549cbbcf140f913b7464c52c3b6b3"}, + {file = "jsonschema-4.20.0.tar.gz", hash = "sha256:4f614fd46d8d61258610998997743ec5492a648b33cf478c1ddc23ed4598a5fa"}, ] [package.dependencies] @@ -1367,17 +1368,17 @@ format-nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339- [[package]] name = "jsonschema-specifications" -version = "2023.7.1" +version = "2023.11.1" description = "The JSON Schema meta-schemas and vocabularies, exposed as a Registry" optional = false python-versions = ">=3.8" files = [ - {file = "jsonschema_specifications-2023.7.1-py3-none-any.whl", hash = "sha256:05adf340b659828a004220a9613be00fa3f223f2b82002e273dee62fd50524b1"}, - {file = "jsonschema_specifications-2023.7.1.tar.gz", hash = "sha256:c91a50404e88a1f6ba40636778e2ee08f6e24c5613fe4c53ac24578a5a7f72bb"}, + {file = "jsonschema_specifications-2023.11.1-py3-none-any.whl", hash = "sha256:f596778ab612b3fd29f72ea0d990393d0540a5aab18bf0407a46632eab540779"}, + {file = "jsonschema_specifications-2023.11.1.tar.gz", hash = "sha256:c9b234904ffe02f079bf91b14d79987faa685fd4b39c377a0996954c0090b9ca"}, ] [package.dependencies] -referencing = ">=0.28.0" +referencing = ">=0.31.0" [[package]] name = "jupyter" @@ -1506,13 +1507,13 @@ jupyter-server = ">=1.1.2" [[package]] name = "jupyter-server" -version = "2.10.0" +version = "2.10.1" description = "The backend—i.e. core services, APIs, and REST endpoints—to Jupyter web applications." optional = false python-versions = ">=3.8" files = [ - {file = "jupyter_server-2.10.0-py3-none-any.whl", hash = "sha256:dde56c9bc3cb52d7b72cc0f696d15d7163603526f1a758eb4a27405b73eab2a5"}, - {file = "jupyter_server-2.10.0.tar.gz", hash = "sha256:47b8f5e63440125cb1bb8957bf12b18453ee5ed9efe42d2f7b2ca66a7019a278"}, + {file = "jupyter_server-2.10.1-py3-none-any.whl", hash = "sha256:20519e355d951fc5e1b6ac5952854fe7620d0cfb56588fa4efe362a758977ed3"}, + {file = "jupyter_server-2.10.1.tar.gz", hash = "sha256:e6da2657a954a7879eed28cc08e0817b01ffd81d7eab8634660397b55f926472"}, ] [package.dependencies] @@ -1521,7 +1522,7 @@ argon2-cffi = "*" jinja2 = "*" jupyter-client = ">=7.4.4" jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" -jupyter-events = ">=0.6.0" +jupyter-events = ">=0.9.0" jupyter-server-terminals = "*" nbconvert = ">=6.4.4" nbformat = ">=5.3.0" @@ -2242,93 +2243,92 @@ files = [ [[package]] name = "nvidia-cublas-cu12" -version = "12.3.2.9" +version = "12.1.3.1" description = "CUBLAS native runtime libraries" optional = false python-versions = ">=3" files = [ - {file = "nvidia_cublas_cu12-12.3.2.9-py3-none-manylinux1_x86_64.whl", hash = "sha256:87cc0514009361159b85a65e2f63a7df5ff6363a9e77800f0549b44b583b917a"}, - {file = "nvidia_cublas_cu12-12.3.2.9-py3-none-win_amd64.whl", hash = "sha256:23e288e14cadd24eb645a11215326449cfd763f809dc6552bb4db0e1983cdf8e"}, + {file = "nvidia_cublas_cu12-12.1.3.1-py3-none-manylinux1_x86_64.whl", hash = "sha256:ee53ccca76a6fc08fb9701aa95b6ceb242cdaab118c3bb152af4e579af792728"}, + {file = "nvidia_cublas_cu12-12.1.3.1-py3-none-win_amd64.whl", hash = "sha256:2b964d60e8cf11b5e1073d179d85fa340c120e99b3067558f3cf98dd69d02906"}, ] [[package]] name = "nvidia-cuda-cupti-cu12" -version = "12.3.52" +version = "12.1.105" description = "CUDA profiling tools runtime libs." optional = false python-versions = ">=3" files = [ - {file = "nvidia_cuda_cupti_cu12-12.3.52-py3-none-manylinux1_x86_64.whl", hash = "sha256:04e29413fcf41a2bbdebf8700cb39fbb5ffe505d1ee848ec00fbbecdeaf5bfe3"}, - {file = "nvidia_cuda_cupti_cu12-12.3.52-py3-none-win_amd64.whl", hash = "sha256:c0ffeba5389f5eff51949172cb8e3374719136f5e9ff23c70ee8634e089bb858"}, + {file = "nvidia_cuda_cupti_cu12-12.1.105-py3-none-manylinux1_x86_64.whl", hash = "sha256:e54fde3983165c624cb79254ae9818a456eb6e87a7fd4d56a2352c24ee542d7e"}, + {file = "nvidia_cuda_cupti_cu12-12.1.105-py3-none-win_amd64.whl", hash = "sha256:bea8236d13a0ac7190bd2919c3e8e6ce1e402104276e6f9694479e48bb0eb2a4"}, ] [[package]] name = "nvidia-cuda-nvrtc-cu12" -version = "12.3.52" +version = "12.1.105" description = "NVRTC native runtime libraries" optional = false python-versions = ">=3" files = [ - {file = "nvidia_cuda_nvrtc_cu12-12.3.52-py3-none-manylinux1_x86_64.whl", hash = "sha256:22f24e1d980ebab0f3b33539248bf523b4f54ee381fcfb4534bfee32882317c6"}, - {file = "nvidia_cuda_nvrtc_cu12-12.3.52-py3-none-win_amd64.whl", hash = "sha256:c1330498a6ac669edcf60b51c46d10b8983870d78c28fb18707f9d04705d3b78"}, + {file = "nvidia_cuda_nvrtc_cu12-12.1.105-py3-none-manylinux1_x86_64.whl", hash = "sha256:339b385f50c309763ca65456ec75e17bbefcbbf2893f462cb8b90584cd27a1c2"}, + {file = "nvidia_cuda_nvrtc_cu12-12.1.105-py3-none-win_amd64.whl", hash = "sha256:0a98a522d9ff138b96c010a65e145dc1b4850e9ecb75a0172371793752fd46ed"}, ] [[package]] name = "nvidia-cuda-runtime-cu12" -version = "12.3.52" +version = "12.1.105" description = "CUDA Runtime native Libraries" optional = false python-versions = ">=3" files = [ - {file = "nvidia_cuda_runtime_cu12-12.3.52-py3-none-manylinux1_x86_64.whl", hash = "sha256:038de2d9e9aa0f07fcd4b9615a7ea23ef28bca0073b0f212e4201246b386bfec"}, - {file = "nvidia_cuda_runtime_cu12-12.3.52-py3-none-win_amd64.whl", hash = "sha256:7e6f2933e8ed25964a2f38bc9f74f6bbfd0eafacab07452e513ed2acf971e42e"}, + {file = "nvidia_cuda_runtime_cu12-12.1.105-py3-none-manylinux1_x86_64.whl", hash = "sha256:6e258468ddf5796e25f1dc591a31029fa317d97a0a94ed93468fc86301d61e40"}, + {file = "nvidia_cuda_runtime_cu12-12.1.105-py3-none-win_amd64.whl", hash = "sha256:dfb46ef84d73fababab44cf03e3b83f80700d27ca300e537f85f636fac474344"}, ] [[package]] name = "nvidia-cudnn-cu12" -version = "8.9.6.50" +version = "8.9.2.26" description = "cuDNN runtime libraries" optional = false python-versions = ">=3" files = [ - {file = "nvidia_cudnn_cu12-8.9.6.50-py3-none-manylinux1_x86_64.whl", hash = "sha256:02fbdf6a9f00ba88da68b275d1f175111cc01bbe2294fb688cd309fd61af8844"}, + {file = "nvidia_cudnn_cu12-8.9.2.26-py3-none-manylinux1_x86_64.whl", hash = "sha256:5ccb288774fdfb07a7e7025ffec286971c06d8d7b4fb162525334616d7629ff9"}, ] [package.dependencies] nvidia-cublas-cu12 = "*" -nvidia-cuda-nvrtc-cu12 = "*" [[package]] name = "nvidia-cufft-cu12" -version = "11.0.11.19" +version = "11.0.2.54" description = "CUFFT native runtime libraries" optional = false python-versions = ">=3" files = [ - {file = "nvidia_cufft_cu12-11.0.11.19-py3-none-manylinux1_x86_64.whl", hash = "sha256:4fa118f90ba8e77eb71a51f4d8a3e1db1ae1f966f5087947d0e8438e3da17ad4"}, - {file = "nvidia_cufft_cu12-11.0.11.19-py3-none-win_amd64.whl", hash = "sha256:3e3a65ee5e02f6a811fb449d04b101989877a29c04751c63b3f15a61122b0de1"}, + {file = "nvidia_cufft_cu12-11.0.2.54-py3-none-manylinux1_x86_64.whl", hash = "sha256:794e3948a1aa71fd817c3775866943936774d1c14e7628c74f6f7417224cdf56"}, + {file = "nvidia_cufft_cu12-11.0.2.54-py3-none-win_amd64.whl", hash = "sha256:d9ac353f78ff89951da4af698f80870b1534ed69993f10a4cf1d96f21357e253"}, ] [[package]] name = "nvidia-curand-cu12" -version = "10.3.4.52" +version = "10.3.2.106" description = "CURAND native runtime libraries" optional = false python-versions = ">=3" files = [ - {file = "nvidia_curand_cu12-10.3.4.52-py3-none-manylinux1_x86_64.whl", hash = "sha256:99faaecf1d77a5cfd935ab66d0d36166e0d89fa759ab43811d98ceb85b9635b7"}, - {file = "nvidia_curand_cu12-10.3.4.52-py3-none-win_amd64.whl", hash = "sha256:3d06bacdc0f0475ed83c2b18997815b5c886f0623a2d1069686e010e7a7bd931"}, + {file = "nvidia_curand_cu12-10.3.2.106-py3-none-manylinux1_x86_64.whl", hash = "sha256:9d264c5036dde4e64f1de8c50ae753237c12e0b1348738169cd0f8a536c0e1e0"}, + {file = "nvidia_curand_cu12-10.3.2.106-py3-none-win_amd64.whl", hash = "sha256:75b6b0c574c0037839121317e17fd01f8a69fd2ef8e25853d826fec30bdba74a"}, ] [[package]] name = "nvidia-cusolver-cu12" -version = "11.5.3.52" +version = "11.4.5.107" description = "CUDA solver native runtime libraries" optional = false python-versions = ">=3" files = [ - {file = "nvidia_cusolver_cu12-11.5.3.52-py3-none-manylinux1_x86_64.whl", hash = "sha256:c806e563ece3e8390cc9e582458435068532dc28425f46f2026a2684671f7cd2"}, - {file = "nvidia_cusolver_cu12-11.5.3.52-py3-none-win_amd64.whl", hash = "sha256:ea9a94ae016937e23dd6610493df7239d47d4a6a805c78bbbccbe07cda0a9e17"}, + {file = "nvidia_cusolver_cu12-11.4.5.107-py3-none-manylinux1_x86_64.whl", hash = "sha256:8a7ec542f0412294b15072fa7dab71d31334014a69f953004ea7a118206fe0dd"}, + {file = "nvidia_cusolver_cu12-11.4.5.107-py3-none-win_amd64.whl", hash = "sha256:74e0c3a24c78612192a74fcd90dd117f1cf21dea4822e66d89e8ea80e3cd2da5"}, ] [package.dependencies] @@ -2338,13 +2338,13 @@ nvidia-nvjitlink-cu12 = "*" [[package]] name = "nvidia-cusparse-cu12" -version = "12.1.3.153" +version = "12.1.0.106" description = "CUSPARSE native runtime libraries" optional = false python-versions = ">=3" files = [ - {file = "nvidia_cusparse_cu12-12.1.3.153-py3-none-manylinux1_x86_64.whl", hash = "sha256:592736e39e5ad427ce809bf42e0fd34fa42a8b7591ea792d42b1b321e3b3eae2"}, - {file = "nvidia_cusparse_cu12-12.1.3.153-py3-none-win_amd64.whl", hash = "sha256:7f70c34d7177e1fc0a8cefc51908e88e95414062a19bc0c60b426d722b3add53"}, + {file = "nvidia_cusparse_cu12-12.1.0.106-py3-none-manylinux1_x86_64.whl", hash = "sha256:f3b50f42cf363f86ab21f720998517a659a48131e8d538dc02f8768237bd884c"}, + {file = "nvidia_cusparse_cu12-12.1.0.106-py3-none-win_amd64.whl", hash = "sha256:b798237e81b9719373e8fae8d4f091b70a0cf09d9d85c95a557e11df2d8e9a5a"}, ] [package.dependencies] @@ -2352,34 +2352,34 @@ nvidia-nvjitlink-cu12 = "*" [[package]] name = "nvidia-nccl-cu12" -version = "2.19.3" +version = "2.18.1" description = "NVIDIA Collective Communication Library (NCCL) Runtime" optional = false python-versions = ">=3" files = [ - {file = "nvidia_nccl_cu12-2.19.3-py3-none-manylinux1_x86_64.whl", hash = "sha256:a9734707a2c96443331c1e48c717024aa6678a0e2a4cb66b2c364d18cee6b48d"}, + {file = "nvidia_nccl_cu12-2.18.1-py3-none-manylinux1_x86_64.whl", hash = "sha256:1a6c4acefcbebfa6de320f412bf7866de856e786e0462326ba1bac40de0b5e71"}, ] [[package]] name = "nvidia-nvjitlink-cu12" -version = "12.3.52" +version = "12.3.101" description = "Nvidia JIT LTO Library" optional = false python-versions = ">=3" files = [ - {file = "nvidia_nvjitlink_cu12-12.3.52-py3-none-manylinux1_x86_64.whl", hash = "sha256:93db4dba8cb66fe2a351791e557208345bb9d0ace1bfb9dd05a4812f9a3ac74e"}, - {file = "nvidia_nvjitlink_cu12-12.3.52-py3-none-win_amd64.whl", hash = "sha256:9e403610da6ebceee897371a6982433ec997a9279d2320840413ce82a1d28ddc"}, + {file = "nvidia_nvjitlink_cu12-12.3.101-py3-none-manylinux1_x86_64.whl", hash = "sha256:64335a8088e2b9d196ae8665430bc6a2b7e6ef2eb877a9c735c804bd4ff6467c"}, + {file = "nvidia_nvjitlink_cu12-12.3.101-py3-none-win_amd64.whl", hash = "sha256:1b2e317e437433753530792f13eece58f0aec21a2b05903be7bffe58a606cbd1"}, ] [[package]] name = "nvidia-nvtx-cu12" -version = "12.3.52" +version = "12.1.105" description = "NVIDIA Tools Extension" optional = false python-versions = ">=3" files = [ - {file = "nvidia_nvtx_cu12-12.3.52-py3-none-manylinux1_x86_64.whl", hash = "sha256:9b65ee935766a0ab5de0633a56e00c4225dfbd8c77432329847843405e3bc5a2"}, - {file = "nvidia_nvtx_cu12-12.3.52-py3-none-win_amd64.whl", hash = "sha256:3a80b9beeeeddfdf388252f069afaca692676513504297aa6fc686a48044dfa8"}, + {file = "nvidia_nvtx_cu12-12.1.105-py3-none-manylinux1_x86_64.whl", hash = "sha256:dc21cf308ca5691e7c04d962e213f8a4aa9bbfa23d95412f452254c2caeb09e5"}, + {file = "nvidia_nvtx_cu12-12.1.105-py3-none-win_amd64.whl", hash = "sha256:65f4d98982b31b60026e0e6de73fbdfc09d08a96f4656dd3665ca616a11e1e82"}, ] [[package]] @@ -2630,13 +2630,13 @@ twisted = ["twisted"] [[package]] name = "prompt-toolkit" -version = "3.0.40" +version = "3.0.41" description = "Library for building powerful interactive command lines in Python" optional = false python-versions = ">=3.7.0" files = [ - {file = "prompt_toolkit-3.0.40-py3-none-any.whl", hash = "sha256:99ba3dfb23d5b5af89712f89e60a5f3d9b8b67a9482ca377c5771d0e9047a34b"}, - {file = "prompt_toolkit-3.0.40.tar.gz", hash = "sha256:a371c06bb1d66cd499fecd708e50c0b6ae00acba9822ba33c586e2f16d1b739e"}, + {file = "prompt_toolkit-3.0.41-py3-none-any.whl", hash = "sha256:f36fe301fafb7470e86aaf90f036eef600a3210be4decf461a5b1ca8403d3cb2"}, + {file = "prompt_toolkit-3.0.41.tar.gz", hash = "sha256:941367d97fc815548822aa26c2a269fdc4eb21e9ec05fc5d447cf09bad5d75f0"}, ] [package.dependencies] @@ -2644,22 +2644,22 @@ wcwidth = "*" [[package]] name = "protobuf" -version = "4.25.0" +version = "4.25.1" description = "" optional = false python-versions = ">=3.8" files = [ - {file = "protobuf-4.25.0-cp310-abi3-win32.whl", hash = "sha256:5c1203ac9f50e4853b0a0bfffd32c67118ef552a33942982eeab543f5c634395"}, - {file = "protobuf-4.25.0-cp310-abi3-win_amd64.whl", hash = "sha256:c40ff8f00aa737938c5378d461637d15c442a12275a81019cc2fef06d81c9419"}, - {file = "protobuf-4.25.0-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:cf21faba64cd2c9a3ed92b7a67f226296b10159dbb8fbc5e854fc90657d908e4"}, - {file = "protobuf-4.25.0-cp37-abi3-manylinux2014_aarch64.whl", hash = "sha256:32ac2100b0e23412413d948c03060184d34a7c50b3e5d7524ee96ac2b10acf51"}, - {file = "protobuf-4.25.0-cp37-abi3-manylinux2014_x86_64.whl", hash = "sha256:683dc44c61f2620b32ce4927de2108f3ebe8ccf2fd716e1e684e5a50da154054"}, - {file = "protobuf-4.25.0-cp38-cp38-win32.whl", hash = "sha256:1a3ba712877e6d37013cdc3476040ea1e313a6c2e1580836a94f76b3c176d575"}, - {file = "protobuf-4.25.0-cp38-cp38-win_amd64.whl", hash = "sha256:b2cf8b5d381f9378afe84618288b239e75665fe58d0f3fd5db400959274296e9"}, - {file = "protobuf-4.25.0-cp39-cp39-win32.whl", hash = "sha256:63714e79b761a37048c9701a37438aa29945cd2417a97076048232c1df07b701"}, - {file = "protobuf-4.25.0-cp39-cp39-win_amd64.whl", hash = "sha256:d94a33db8b7ddbd0af7c467475fb9fde0c705fb315a8433c0e2020942b863a1f"}, - {file = "protobuf-4.25.0-py3-none-any.whl", hash = "sha256:1a53d6f64b00eecf53b65ff4a8c23dc95df1fa1e97bb06b8122e5a64f49fc90a"}, - {file = "protobuf-4.25.0.tar.gz", hash = "sha256:68f7caf0d4f012fd194a301420cf6aa258366144d814f358c5b32558228afa7c"}, + {file = "protobuf-4.25.1-cp310-abi3-win32.whl", hash = "sha256:193f50a6ab78a970c9b4f148e7c750cfde64f59815e86f686c22e26b4fe01ce7"}, + {file = "protobuf-4.25.1-cp310-abi3-win_amd64.whl", hash = "sha256:3497c1af9f2526962f09329fd61a36566305e6c72da2590ae0d7d1322818843b"}, + {file = "protobuf-4.25.1-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:0bf384e75b92c42830c0a679b0cd4d6e2b36ae0cf3dbb1e1dfdda48a244f4bcd"}, + {file = "protobuf-4.25.1-cp37-abi3-manylinux2014_aarch64.whl", hash = "sha256:0f881b589ff449bf0b931a711926e9ddaad3b35089cc039ce1af50b21a4ae8cb"}, + {file = "protobuf-4.25.1-cp37-abi3-manylinux2014_x86_64.whl", hash = "sha256:ca37bf6a6d0046272c152eea90d2e4ef34593aaa32e8873fc14c16440f22d4b7"}, + {file = "protobuf-4.25.1-cp38-cp38-win32.whl", hash = "sha256:abc0525ae2689a8000837729eef7883b9391cd6aa7950249dcf5a4ede230d5dd"}, + {file = "protobuf-4.25.1-cp38-cp38-win_amd64.whl", hash = "sha256:1484f9e692091450e7edf418c939e15bfc8fc68856e36ce399aed6889dae8bb0"}, + {file = "protobuf-4.25.1-cp39-cp39-win32.whl", hash = "sha256:8bdbeaddaac52d15c6dce38c71b03038ef7772b977847eb6d374fc86636fa510"}, + {file = "protobuf-4.25.1-cp39-cp39-win_amd64.whl", hash = "sha256:becc576b7e6b553d22cbdf418686ee4daa443d7217999125c045ad56322dda10"}, + {file = "protobuf-4.25.1-py3-none-any.whl", hash = "sha256:a19731d5e83ae4737bb2a089605e636077ac001d18781b3cf489b9546c7c80d6"}, + {file = "protobuf-4.25.1.tar.gz", hash = "sha256:57d65074b4f5baa4ab5da1605c02be90ac20c8b40fb137d6a8df9f416b0d0ce2"}, ] [[package]] @@ -2763,6 +2763,17 @@ files = [ [package.dependencies] numpy = ">=1.16.6" +[[package]] +name = "pyarrow-hotfix" +version = "0.5" +description = "" +optional = false +python-versions = ">=3.5" +files = [ + {file = "pyarrow_hotfix-0.5-py3-none-any.whl", hash = "sha256:7e20a1195f2e0dd7b50dffb9f90699481acfce3176bfbfb53eded04f34c4f7c6"}, + {file = "pyarrow_hotfix-0.5.tar.gz", hash = "sha256:ba697c743d435545e99bfbd89818b284e4404c19119c0ed63380a92998c4d0b1"}, +] + [[package]] name = "pycparser" version = "2.21" @@ -2808,13 +2819,13 @@ extra = ["pygments (>=2.12)"] [[package]] name = "pyright" -version = "1.1.335" +version = "1.1.336" description = "Command line wrapper for pyright" optional = false python-versions = ">=3.7" files = [ - {file = "pyright-1.1.335-py3-none-any.whl", hash = "sha256:1149d99d5cea3997010a5ac39611534e0426125d5090913ae5cb1e0e2c9fbca3"}, - {file = "pyright-1.1.335.tar.gz", hash = "sha256:12c09c1644b223515cc342f7d383e55eefeedd730d7875e39a2cf338c2d99be4"}, + {file = "pyright-1.1.336-py3-none-any.whl", hash = "sha256:8f6a8f365730c8d6c1af840d937371fd5cf0137b6e1827b8b066bc0bb7327aa6"}, + {file = "pyright-1.1.336.tar.gz", hash = "sha256:f92d6d6845e4175833ea60dee5b1ef4d5d66663438fdaedccc1c3ba0f8efa3e3"}, ] [package.dependencies] @@ -3118,13 +3129,13 @@ cffi = {version = "*", markers = "implementation_name == \"pypy\""} [[package]] name = "qtconsole" -version = "5.5.0" +version = "5.5.1" description = "Jupyter Qt console" optional = false python-versions = ">= 3.8" files = [ - {file = "qtconsole-5.5.0-py3-none-any.whl", hash = "sha256:6b6bcf8f834c6df1579a3e6623c8531b85d3e723997cee3a1156296df14716c8"}, - {file = "qtconsole-5.5.0.tar.gz", hash = "sha256:ea8b4a07d7dc915a1b1238fbfe2c9aea570640402557b64615e09a4bc60df47c"}, + {file = "qtconsole-5.5.1-py3-none-any.whl", hash = "sha256:8c75fa3e9b4ed884880ff7cea90a1b67451219279ec33deaee1d59e3df1a5d2b"}, + {file = "qtconsole-5.5.1.tar.gz", hash = "sha256:a0e806c6951db9490628e4df80caec9669b65149c7ba40f9bf033c025a5b56bc"}, ] [package.dependencies] @@ -3160,13 +3171,13 @@ test = ["pytest (>=6,!=7.0.0,!=7.0.1)", "pytest-cov (>=3.0.0)", "pytest-qt"] [[package]] name = "referencing" -version = "0.30.2" +version = "0.31.0" description = "JSON Referencing + Python" optional = false python-versions = ">=3.8" files = [ - {file = "referencing-0.30.2-py3-none-any.whl", hash = "sha256:449b6669b6121a9e96a7f9e410b245d471e8d48964c67113ce9afe50c8dd7bdf"}, - {file = "referencing-0.30.2.tar.gz", hash = "sha256:794ad8003c65938edcdbc027f1933215e0d0ccc0291e3ce20a4d87432b59efc0"}, + {file = "referencing-0.31.0-py3-none-any.whl", hash = "sha256:381b11e53dd93babb55696c71cf42aef2d36b8a150c49bf0bc301e36d536c882"}, + {file = "referencing-0.31.0.tar.gz", hash = "sha256:cc28f2c88fbe7b961a7817a0abc034c09a1e36358f82fedb4ffdf29a25398863"}, ] [package.dependencies] @@ -3318,13 +3329,13 @@ files = [ [[package]] name = "rich" -version = "13.6.0" +version = "13.7.0" description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" optional = false python-versions = ">=3.7.0" files = [ - {file = "rich-13.6.0-py3-none-any.whl", hash = "sha256:2b38e2fe9ca72c9a00170a1a2d20c63c790d0e10ef1fe35eba76e1e7b1d7d245"}, - {file = "rich-13.6.0.tar.gz", hash = "sha256:5c14d22737e6d5084ef4771b62d5d4363165b403455a30a1c8ca39dc7b644bef"}, + {file = "rich-13.7.0-py3-none-any.whl", hash = "sha256:6da14c108c4866ee9520bbffa71f6fe3962e193b7da68720583850cd4548e235"}, + {file = "rich-13.7.0.tar.gz", hash = "sha256:5cb5123b5cf9ee70584244246816e9114227e0b98ad9176eede6ad54bf5403fa"}, ] [package.dependencies] @@ -3336,110 +3347,110 @@ jupyter = ["ipywidgets (>=7.5.1,<9)"] [[package]] name = "rpds-py" -version = "0.12.0" +version = "0.13.0" description = "Python bindings to Rust's persistent data structures (rpds)" optional = false python-versions = ">=3.8" files = [ - {file = "rpds_py-0.12.0-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:c694bee70ece3b232df4678448fdda245fd3b1bb4ba481fb6cd20e13bb784c46"}, - {file = "rpds_py-0.12.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:30e5ce9f501fb1f970e4a59098028cf20676dee64fc496d55c33e04bbbee097d"}, - {file = "rpds_py-0.12.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d72a4315514e5a0b9837a086cb433b004eea630afb0cc129de76d77654a9606f"}, - {file = "rpds_py-0.12.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:eebaf8c76c39604d52852366249ab807fe6f7a3ffb0dd5484b9944917244cdbe"}, - {file = "rpds_py-0.12.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a239303acb0315091d54c7ff36712dba24554993b9a93941cf301391d8a997ee"}, - {file = "rpds_py-0.12.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ced40cdbb6dd47a032725a038896cceae9ce267d340f59508b23537f05455431"}, - {file = "rpds_py-0.12.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3c8c0226c71bd0ce9892eaf6afa77ae8f43a3d9313124a03df0b389c01f832de"}, - {file = "rpds_py-0.12.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b8e11715178f3608874508f08e990d3771e0b8c66c73eb4e183038d600a9b274"}, - {file = "rpds_py-0.12.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:5210a0018c7e09c75fa788648617ebba861ae242944111d3079034e14498223f"}, - {file = "rpds_py-0.12.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:171d9a159f1b2f42a42a64a985e4ba46fc7268c78299272ceba970743a67ee50"}, - {file = "rpds_py-0.12.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:57ec6baec231bb19bb5fd5fc7bae21231860a1605174b11585660236627e390e"}, - {file = "rpds_py-0.12.0-cp310-none-win32.whl", hash = "sha256:7188ddc1a8887194f984fa4110d5a3d5b9b5cd35f6bafdff1b649049cbc0ce29"}, - {file = "rpds_py-0.12.0-cp310-none-win_amd64.whl", hash = "sha256:1e04581c6117ad9479b6cfae313e212fe0dfa226ac727755f0d539cd54792963"}, - {file = "rpds_py-0.12.0-cp311-cp311-macosx_10_7_x86_64.whl", hash = "sha256:0a38612d07a36138507d69646c470aedbfe2b75b43a4643f7bd8e51e52779624"}, - {file = "rpds_py-0.12.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f12d69d568f5647ec503b64932874dade5a20255736c89936bf690951a5e79f5"}, - {file = "rpds_py-0.12.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4f8a1d990dc198a6c68ec3d9a637ba1ce489b38cbfb65440a27901afbc5df575"}, - {file = "rpds_py-0.12.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8c567c664fc2f44130a20edac73e0a867f8e012bf7370276f15c6adc3586c37c"}, - {file = "rpds_py-0.12.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0e9e976e0dbed4f51c56db10831c9623d0fd67aac02853fe5476262e5a22acb7"}, - {file = "rpds_py-0.12.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:efddca2d02254a52078c35cadad34762adbae3ff01c6b0c7787b59d038b63e0d"}, - {file = "rpds_py-0.12.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d9e7f29c00577aff6b318681e730a519b235af292732a149337f6aaa4d1c5e31"}, - {file = "rpds_py-0.12.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:389c0e38358fdc4e38e9995e7291269a3aead7acfcf8942010ee7bc5baee091c"}, - {file = "rpds_py-0.12.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:33ab498f9ac30598b6406e2be1b45fd231195b83d948ebd4bd77f337cb6a2bff"}, - {file = "rpds_py-0.12.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:d56b1cd606ba4cedd64bb43479d56580e147c6ef3f5d1c5e64203a1adab784a2"}, - {file = "rpds_py-0.12.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:1fa73ed22c40a1bec98d7c93b5659cd35abcfa5a0a95ce876b91adbda170537c"}, - {file = "rpds_py-0.12.0-cp311-none-win32.whl", hash = "sha256:dbc25baa6abb205766fb8606f8263b02c3503a55957fcb4576a6bb0a59d37d10"}, - {file = "rpds_py-0.12.0-cp311-none-win_amd64.whl", hash = "sha256:c6b52b7028b547866c2413f614ee306c2d4eafdd444b1ff656bf3295bf1484aa"}, - {file = "rpds_py-0.12.0-cp312-cp312-macosx_10_7_x86_64.whl", hash = "sha256:9620650c364c01ed5b497dcae7c3d4b948daeae6e1883ae185fef1c927b6b534"}, - {file = "rpds_py-0.12.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2124f9e645a94ab7c853bc0a3644e0ca8ffbe5bb2d72db49aef8f9ec1c285733"}, - {file = "rpds_py-0.12.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:281c8b219d4f4b3581b918b816764098d04964915b2f272d1476654143801aa2"}, - {file = "rpds_py-0.12.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:27ccc93c7457ef890b0dd31564d2a05e1aca330623c942b7e818e9e7c2669ee4"}, - {file = "rpds_py-0.12.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d1c562a9bb72244fa767d1c1ab55ca1d92dd5f7c4d77878fee5483a22ffac808"}, - {file = "rpds_py-0.12.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e57919c32ee295a2fca458bb73e4b20b05c115627f96f95a10f9f5acbd61172d"}, - {file = "rpds_py-0.12.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fa35ad36440aaf1ac8332b4a4a433d4acd28f1613f0d480995f5cfd3580e90b7"}, - {file = "rpds_py-0.12.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e6aea5c0eb5b0faf52c7b5c4a47c8bb64437173be97227c819ffa31801fa4e34"}, - {file = "rpds_py-0.12.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:81cf9d306c04df1b45971c13167dc3bad625808aa01281d55f3cf852dde0e206"}, - {file = "rpds_py-0.12.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:08e6e7ff286254016b945e1ab632ee843e43d45e40683b66dd12b73791366dd1"}, - {file = "rpds_py-0.12.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:4d0a675a7acbbc16179188d8c6d0afb8628604fc1241faf41007255957335a0b"}, - {file = "rpds_py-0.12.0-cp312-none-win32.whl", hash = "sha256:b2287c09482949e0ca0c0eb68b2aca6cf57f8af8c6dfd29dcd3bc45f17b57978"}, - {file = "rpds_py-0.12.0-cp312-none-win_amd64.whl", hash = "sha256:8015835494b21aa7abd3b43fdea0614ee35ef6b03db7ecba9beb58eadf01c24f"}, - {file = "rpds_py-0.12.0-cp38-cp38-macosx_10_7_x86_64.whl", hash = "sha256:6174d6ad6b58a6bcf67afbbf1723420a53d06c4b89f4c50763d6fa0a6ac9afd2"}, - {file = "rpds_py-0.12.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:a689e1ded7137552bea36305a7a16ad2b40be511740b80748d3140614993db98"}, - {file = "rpds_py-0.12.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f45321224144c25a62052035ce96cbcf264667bcb0d81823b1bbc22c4addd194"}, - {file = "rpds_py-0.12.0-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:aa32205358a76bf578854bf31698a86dc8b2cb591fd1d79a833283f4a403f04b"}, - {file = "rpds_py-0.12.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:91bd2b7cf0f4d252eec8b7046fa6a43cee17e8acdfc00eaa8b3dbf2f9a59d061"}, - {file = "rpds_py-0.12.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3acadbab8b59f63b87b518e09c4c64b142e7286b9ca7a208107d6f9f4c393c5c"}, - {file = "rpds_py-0.12.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:429349a510da82c85431f0f3e66212d83efe9fd2850f50f339341b6532c62fe4"}, - {file = "rpds_py-0.12.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:05942656cb2cb4989cd50ced52df16be94d344eae5097e8583966a1d27da73a5"}, - {file = "rpds_py-0.12.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:0c5441b7626c29dbd54a3f6f3713ec8e956b009f419ffdaaa3c80eaf98ddb523"}, - {file = "rpds_py-0.12.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:b6b0e17d39d21698185097652c611f9cf30f7c56ccec189789920e3e7f1cee56"}, - {file = "rpds_py-0.12.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:3b7a64d43e2a1fa2dd46b678e00cabd9a49ebb123b339ce799204c44a593ae1c"}, - {file = "rpds_py-0.12.0-cp38-none-win32.whl", hash = "sha256:e5bbe011a2cea9060fef1bb3d668a2fd8432b8888e6d92e74c9c794d3c101595"}, - {file = "rpds_py-0.12.0-cp38-none-win_amd64.whl", hash = "sha256:bec29b801b4adbf388314c0d050e851d53762ab424af22657021ce4b6eb41543"}, - {file = "rpds_py-0.12.0-cp39-cp39-macosx_10_7_x86_64.whl", hash = "sha256:1096ca0bf2d3426cbe79d4ccc91dc5aaa73629b08ea2d8467375fad8447ce11a"}, - {file = "rpds_py-0.12.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:48aa98987d54a46e13e6954880056c204700c65616af4395d1f0639eba11764b"}, - {file = "rpds_py-0.12.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7979d90ee2190d000129598c2b0c82f13053dba432b94e45e68253b09bb1f0f6"}, - {file = "rpds_py-0.12.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:88857060b690a57d2ea8569bca58758143c8faa4639fb17d745ce60ff84c867e"}, - {file = "rpds_py-0.12.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4eb74d44776b0fb0782560ea84d986dffec8ddd94947f383eba2284b0f32e35e"}, - {file = "rpds_py-0.12.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f62581d7e884dd01ee1707b7c21148f61f2febb7de092ae2f108743fcbef5985"}, - {file = "rpds_py-0.12.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6f5dcb658d597410bb7c967c1d24eaf9377b0d621358cbe9d2ff804e5dd12e81"}, - {file = "rpds_py-0.12.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9bf9acce44e967a5103fcd820fc7580c7b0ab8583eec4e2051aec560f7b31a63"}, - {file = "rpds_py-0.12.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:240687b5be0f91fbde4936a329c9b7589d9259742766f74de575e1b2046575e4"}, - {file = "rpds_py-0.12.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:25740fb56e8bd37692ed380e15ec734be44d7c71974d8993f452b4527814601e"}, - {file = "rpds_py-0.12.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:a54917b7e9cd3a67e429a630e237a90b096e0ba18897bfb99ee8bd1068a5fea0"}, - {file = "rpds_py-0.12.0-cp39-none-win32.whl", hash = "sha256:b92aafcfab3d41580d54aca35a8057341f1cfc7c9af9e8bdfc652f83a20ced31"}, - {file = "rpds_py-0.12.0-cp39-none-win_amd64.whl", hash = "sha256:cd316dbcc74c76266ba94eb021b0cc090b97cca122f50bd7a845f587ff4bf03f"}, - {file = "rpds_py-0.12.0-pp310-pypy310_pp73-macosx_10_7_x86_64.whl", hash = "sha256:0853da3d5e9bc6a07b2486054a410b7b03f34046c123c6561b535bb48cc509e1"}, - {file = "rpds_py-0.12.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:cb41ad20064e18a900dd427d7cf41cfaec83bcd1184001f3d91a1f76b3fcea4e"}, - {file = "rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b710bf7e7ae61957d5c4026b486be593ed3ec3dca3e5be15e0f6d8cf5d0a4990"}, - {file = "rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a952ae3eb460c6712388ac2ec706d24b0e651b9396d90c9a9e0a69eb27737fdc"}, - {file = "rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0bedd91ae1dd142a4dc15970ed2c729ff6c73f33a40fa84ed0cdbf55de87c777"}, - {file = "rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:761531076df51309075133a6bc1db02d98ec7f66e22b064b1d513bc909f29743"}, - {file = "rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a2baa6be130e8a00b6cbb9f18a33611ec150b4537f8563bddadb54c1b74b8193"}, - {file = "rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f05450fa1cd7c525c0b9d1a7916e595d3041ac0afbed2ff6926e5afb6a781b7f"}, - {file = "rpds_py-0.12.0-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:81c4d1a3a564775c44732b94135d06e33417e829ff25226c164664f4a1046213"}, - {file = "rpds_py-0.12.0-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:e888be685fa42d8b8a3d3911d5604d14db87538aa7d0b29b1a7ea80d354c732d"}, - {file = "rpds_py-0.12.0-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:6f8d7fe73d1816eeb5378409adc658f9525ecbfaf9e1ede1e2d67a338b0c7348"}, - {file = "rpds_py-0.12.0-pp38-pypy38_pp73-macosx_10_7_x86_64.whl", hash = "sha256:0831d3ecdea22e4559cc1793f22e77067c9d8c451d55ae6a75bf1d116a8e7f42"}, - {file = "rpds_py-0.12.0-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:513ccbf7420c30e283c25c82d5a8f439d625a838d3ba69e79a110c260c46813f"}, - {file = "rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:301bd744a1adaa2f6a5e06c98f1ac2b6f8dc31a5c23b838f862d65e32fca0d4b"}, - {file = "rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f8832a4f83d4782a8f5a7b831c47e8ffe164e43c2c148c8160ed9a6d630bc02a"}, - {file = "rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4b2416ed743ec5debcf61e1242e012652a4348de14ecc7df3512da072b074440"}, - {file = "rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:35585a8cb5917161f42c2104567bb83a1d96194095fc54a543113ed5df9fa436"}, - {file = "rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d389ff1e95b6e46ebedccf7fd1fadd10559add595ac6a7c2ea730268325f832c"}, - {file = "rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9b007c2444705a2dc4a525964fd4dd28c3320b19b3410da6517cab28716f27d3"}, - {file = "rpds_py-0.12.0-pp38-pypy38_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:188912b22b6c8225f4c4ffa020a2baa6ad8fabb3c141a12dbe6edbb34e7f1425"}, - {file = "rpds_py-0.12.0-pp38-pypy38_pp73-musllinux_1_2_i686.whl", hash = "sha256:1b4cf9ab9a0ae0cb122685209806d3f1dcb63b9fccdf1424fb42a129dc8c2faa"}, - {file = "rpds_py-0.12.0-pp38-pypy38_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:2d34a5450a402b00d20aeb7632489ffa2556ca7b26f4a63c35f6fccae1977427"}, - {file = "rpds_py-0.12.0-pp39-pypy39_pp73-macosx_10_7_x86_64.whl", hash = "sha256:466030a42724780794dea71eb32db83cc51214d66ab3fb3156edd88b9c8f0d78"}, - {file = "rpds_py-0.12.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:68172622a5a57deb079a2c78511c40f91193548e8ab342c31e8cb0764d362459"}, - {file = "rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:54cdfcda59251b9c2f87a05d038c2ae02121219a04d4a1e6fc345794295bdc07"}, - {file = "rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6b75b912a0baa033350367a8a07a8b2d44fd5b90c890bfbd063a8a5f945f644b"}, - {file = "rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:47aeceb4363851d17f63069318ba5721ae695d9da55d599b4d6fb31508595278"}, - {file = "rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0525847f83f506aa1e28eb2057b696fe38217e12931c8b1b02198cfe6975e142"}, - {file = "rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:efbe0b5e0fd078ed7b005faa0170da4f72666360f66f0bb2d7f73526ecfd99f9"}, - {file = "rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0fadfdda275c838cba5102c7f90a20f2abd7727bf8f4a2b654a5b617529c5c18"}, - {file = "rpds_py-0.12.0-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:56dd500411d03c5e9927a1eb55621e906837a83b02350a9dc401247d0353717c"}, - {file = "rpds_py-0.12.0-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:6915fc9fa6b3ec3569566832e1bb03bd801c12cea030200e68663b9a87974e76"}, - {file = "rpds_py-0.12.0-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:5f1519b080d8ce0a814f17ad9fb49fb3a1d4d7ce5891f5c85fc38631ca3a8dc4"}, - {file = "rpds_py-0.12.0.tar.gz", hash = "sha256:7036316cc26b93e401cedd781a579be606dad174829e6ad9e9c5a0da6e036f80"}, + {file = "rpds_py-0.13.0-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:1758197cc8d7ff383c07405f188253535b4aa7fa745cbc54d221ae84b18e0702"}, + {file = "rpds_py-0.13.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:715df74cbcef4387d623c917f295352127f4b3e0388038d68fa577b4e4c6e540"}, + {file = "rpds_py-0.13.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c8a9cec0f49df9bac252d92f138c0d7708d98828e21fd57db78087d8f50b5656"}, + {file = "rpds_py-0.13.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5c2545bba02f68abdf398ef4990dc77592cc1e5d29438b35b3a3ca34d171fb4b"}, + {file = "rpds_py-0.13.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:95375c44ffb9ea2bc25d67fb66e726ea266ff1572df50b9556fe28a5f3519cd7"}, + {file = "rpds_py-0.13.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:54e513df45a8a9419e7952ffd26ac9a5b7b1df97fe72530421794b0de29f9d72"}, + {file = "rpds_py-0.13.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a25f514a53927b6b4bd04a9a6a13b55209df54f548660eeed673336c0c946d14"}, + {file = "rpds_py-0.13.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c1a920fa679ec2758411d66bf68840b0a21317b9954ab0e973742d723bb67709"}, + {file = "rpds_py-0.13.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:f9339d1404b87e6d8cb35e485945753be57a99ab9bb389f42629215b2f6bda0f"}, + {file = "rpds_py-0.13.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:c99f9dda2c959f7bb69a7125e192c74fcafb7a534a95ccf49313ae3a04807804"}, + {file = "rpds_py-0.13.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:bad6758df5f1042b35683bd1811d5432ac1b17700a5a2a51fdc293f7df5f7827"}, + {file = "rpds_py-0.13.0-cp310-none-win32.whl", hash = "sha256:2a29ec68fa9655ce9501bc6ae074b166e8b45c2dfcd2d71d90d1a61758ed8c73"}, + {file = "rpds_py-0.13.0-cp310-none-win_amd64.whl", hash = "sha256:244be953f13f148b0071d67a610f89cd72eb5013a147e517d6ca3f3f3b7e0380"}, + {file = "rpds_py-0.13.0-cp311-cp311-macosx_10_7_x86_64.whl", hash = "sha256:240279ca0b2afd6d4710afce1c94bf9e75fc161290bf62c0feba64d64780d80b"}, + {file = "rpds_py-0.13.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:25c9727da2dabc93664a18eda7a70feedf478f0c4c8294e4cdba7f60a479a246"}, + {file = "rpds_py-0.13.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:981e46e1e5064f95460381bff4353783b4b5ce351c930e5b507ebe0278c61dac"}, + {file = "rpds_py-0.13.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6052bb47ea583646b8ff562acacb9a2ec5ec847267049cbae3919671929e94c6"}, + {file = "rpds_py-0.13.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:87f591ff8cc834fa01ca5899ab5edcd7ee590492a9cdcf43424ac142e731ce3e"}, + {file = "rpds_py-0.13.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:62772259b3381e2aabf274c74fd1e1ac03b0524de0a6593900684becfa8cfe4b"}, + {file = "rpds_py-0.13.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b4de9d20fe68c16b4d97f551a09920745add0c86430262230528b83c2ed2fe90"}, + {file = "rpds_py-0.13.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b70a54fb628c1d6400e351674a31ba63d2912b8c5b707f99b408674a5d8b69ab"}, + {file = "rpds_py-0.13.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:2063ab9cd1be7ef6b5ed0f408e2bdf32c060b6f40c097a468f32864731302636"}, + {file = "rpds_py-0.13.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:84f7f3f18d29a1c645729634003d21d84028bd9c2fd78eba9d028998f46fa5aa"}, + {file = "rpds_py-0.13.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f7c7ddc8d1a64623068da5a15e28001fbd0f0aff754aae7a75a4be5042191638"}, + {file = "rpds_py-0.13.0-cp311-none-win32.whl", hash = "sha256:8a33d2b6340261191bb59adb5a453fa6c7d99de85552bd4e8196411f0509c9bf"}, + {file = "rpds_py-0.13.0-cp311-none-win_amd64.whl", hash = "sha256:8b9c1dd90461940315981499df62a627571c4f0992e8bafc5396d33916224cac"}, + {file = "rpds_py-0.13.0-cp312-cp312-macosx_10_7_x86_64.whl", hash = "sha256:15a2d542de5cbfc6abddc4846d9412b59f8ee9c8dfa0b9c92a29321297c91745"}, + {file = "rpds_py-0.13.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8dd69e01b29ff45a0062cad5c480d8aa9301c3ef09da471f86337a78eb2d3405"}, + {file = "rpds_py-0.13.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:efdd02971a02f98492a72b25484f1f6125fb9f2166e48cc4c9bfa563349c851b"}, + {file = "rpds_py-0.13.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:91ca9aaee7ccdfa66d800b5c4ec634fefca947721bab52d6ad2f6350969a3771"}, + {file = "rpds_py-0.13.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:afcec1f5b09d0db70aeb2d90528a9164acb61841a3124e28f6ac0137f4c36cb4"}, + {file = "rpds_py-0.13.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5c6824673f66c47f7ee759c21e973bfce3ceaf2c25cb940cb45b41105dc914e8"}, + {file = "rpds_py-0.13.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:50b6d80925dfeb573fc5e38582fb9517c6912dc462cc858a11c8177b0837127a"}, + {file = "rpds_py-0.13.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3a1a38512925829784b5dc38591c757b80cfce115c72c594dc59567dab62b9c4"}, + {file = "rpds_py-0.13.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:977c6123c359dcc70ce3161b781ab70b0d342de2666944b776617e01a0a7822a"}, + {file = "rpds_py-0.13.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:c472409037e05ed87b99430f97a6b82130328bb977502813547e8ee6a3392502"}, + {file = "rpds_py-0.13.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:28bb22019f4a783ea06a6b81437d5996551869e8a722ee8720b744f7684d97f4"}, + {file = "rpds_py-0.13.0-cp312-none-win32.whl", hash = "sha256:46be9c0685cce2ea02151aa8308f2c1b78581be41a5dd239448a941a210ef5dd"}, + {file = "rpds_py-0.13.0-cp312-none-win_amd64.whl", hash = "sha256:3c5b9ad4d3e05dfcf8629f0d534f92610e9805dbce2fcb9b3c801ddb886431d5"}, + {file = "rpds_py-0.13.0-cp38-cp38-macosx_10_7_x86_64.whl", hash = "sha256:66eb5aa36e857f768c598d2082fafb733eaf53e06e1169c6b4de65636e04ffd0"}, + {file = "rpds_py-0.13.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:c9f4c2b7d989426e9fe9b720211172cf10eb5f7aa16c63de2e5dc61457abcf35"}, + {file = "rpds_py-0.13.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c1e37dfffe8959a492b7b331995f291847a41a035b4aad82d6060f38e8378a2b"}, + {file = "rpds_py-0.13.0-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8220321f2dccd9d66f72639185247cb7bbdd90753bf0b6bfca0fa31dba8af23c"}, + {file = "rpds_py-0.13.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e8f1d466a9747213d3cf7e1afec849cc51edb70d5b4ae9a82eca0f172bfbb6d0"}, + {file = "rpds_py-0.13.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9c4c4b4ff3de834ec5c1c690e5a18233ca78547d003eb83664668ccf09ef1398"}, + {file = "rpds_py-0.13.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:525d19ef0a999229ef0f0a7687ab2c9a00d1b6a47a005006f4d8c4b8975fdcec"}, + {file = "rpds_py-0.13.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0982b59d014efb84a57128e7e69399fb29ad8f2da5b0a5bcbfd12e211c00492e"}, + {file = "rpds_py-0.13.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:f714dd5b705f1c394d1b361d96486c4981055c434a7eafb1a3147ac75e34a3de"}, + {file = "rpds_py-0.13.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:766b573a964389ef0d91a26bb31e1b59dbc5d06eff7707f3dfcec23d93080ba3"}, + {file = "rpds_py-0.13.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:2ed65ad3fc5065d13e31e90794e0b52e405b63ae4fab1080caeaadc10a3439c5"}, + {file = "rpds_py-0.13.0-cp38-none-win32.whl", hash = "sha256:9645f7fe10a68b2396d238250b4b264c2632d2eb6ce2cb90aa0fe08adee194be"}, + {file = "rpds_py-0.13.0-cp38-none-win_amd64.whl", hash = "sha256:42d0ad129c102856a364ccc7d356faec017af86b3543a8539795f22b6cabad11"}, + {file = "rpds_py-0.13.0-cp39-cp39-macosx_10_7_x86_64.whl", hash = "sha256:95c11647fac2a3515ea2614a79e14b7c75025724ad54c91c7db4a6ea5c25ef19"}, + {file = "rpds_py-0.13.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9435bf4832555c4f769c6be9401664357be33d5f5d8dc58f5c20fb8d21e2c45d"}, + {file = "rpds_py-0.13.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:54b1d671a74395344239ee3adbcd8c496525f6a2b2e54c40fec69620a31a8dcb"}, + {file = "rpds_py-0.13.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:13c8061115f1468de6ffdfb1d31b446e1bd814f1ff6e556862169aacb9fbbc5d"}, + {file = "rpds_py-0.13.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a78861123b002725633871a2096c3a4313224aab3d11b953dced87cfba702418"}, + {file = "rpds_py-0.13.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:97c1be5a018cdad54fa7e5f7d36b9ab45ef941a1d185987f18bdab0a42344012"}, + {file = "rpds_py-0.13.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e33b17915c8e4fb2ea8b91bb4c46cba92242c63dd38b87e869ead5ba217e2970"}, + {file = "rpds_py-0.13.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:153b6d8cf7ae4b9ffd09de6abeda661e351e3e06eaafd18a8c104ea00099b131"}, + {file = "rpds_py-0.13.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:da2852201e8e00c86be82c43d6893e6c380ef648ae53f337ffd1eaa35e3dfb8a"}, + {file = "rpds_py-0.13.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:a2383f400691fd7bd63347d4d75eb2fd525de9d901799a33a4e896c9885609f8"}, + {file = "rpds_py-0.13.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:d5bf560634ea6e9a59ceb2181a6cd6195a03f48cef9a400eb15e197e18f14548"}, + {file = "rpds_py-0.13.0-cp39-none-win32.whl", hash = "sha256:fdaef49055cc0c701fb17b9b34a38ef375e5cdb230b3722d4a12baf9b7cbc6d3"}, + {file = "rpds_py-0.13.0-cp39-none-win_amd64.whl", hash = "sha256:26660c74a20fe249fad75ca00bbfcf60e57c3fdbde92971c88a20e07fea1de64"}, + {file = "rpds_py-0.13.0-pp310-pypy310_pp73-macosx_10_7_x86_64.whl", hash = "sha256:28324f2f0247d407daabf7ff357ad9f36126075c92a0cf5319396d96ff4e1248"}, + {file = "rpds_py-0.13.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:b431c2c0ff1ea56048a2b066d99d0c2d151ae7625b20be159b7e699f3e80390b"}, + {file = "rpds_py-0.13.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7472bd60a8293217444bdc6a46e516feb8d168da44d5f3fccea0336e88e3b79a"}, + {file = "rpds_py-0.13.0-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:169063f346b8fd84f47d986c9c48e6094eb38b839c1287e7cb886b8a2b32195d"}, + {file = "rpds_py-0.13.0-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:eef7ee7c70f8b8698be468d54f9f5e01804f3a1dd5657e8a96363dbd52b9b5ec"}, + {file = "rpds_py-0.13.0-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:762013dd59df12380c5444f61ccbf9ae1297027cabbd7aa25891f724ebf8c8f7"}, + {file = "rpds_py-0.13.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:152570689a27ae0be1d5f50b21dad38d450b9227d0974f23bd400400ea087e88"}, + {file = "rpds_py-0.13.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d70a93a40e55da117c511ddc514642bc7d59a95a99137168a5f3f2f876b47962"}, + {file = "rpds_py-0.13.0-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:e6c6fed07d13b9e0fb689356c40c81f1aa92e3c9d91d8fd5816a0348ccd999f7"}, + {file = "rpds_py-0.13.0-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:cdded3cf9e36840b09ccef714d5fa74a03f4eb6cf81e694226ed9cb5e6f90de0"}, + {file = "rpds_py-0.13.0-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:e1f40faf406c52c7ae7d208b9140377c06397248978ccb03fbfbb30a0571e359"}, + {file = "rpds_py-0.13.0-pp38-pypy38_pp73-macosx_10_7_x86_64.whl", hash = "sha256:c10326e30c97a95b7e1d75e5200ef0b9827aa0f861e331e43b15dfdfd63e669b"}, + {file = "rpds_py-0.13.0-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:afde37e3763c602d0385bce5c12f262e7b1dd2a0f323e239fa9d7b2d4d5d8509"}, + {file = "rpds_py-0.13.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4084ab6840bd4d79eff3b5f497add847a7db31ce5a0c2d440c90b2d2b7011857"}, + {file = "rpds_py-0.13.0-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:1c9c9cb48ab77ebfa47db25b753f594d4f44959cfe43b713439ca6e3c9329671"}, + {file = "rpds_py-0.13.0-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:533d728ea5ad5253af3395102723ca8a77b62de47b2295155650c9a88fcdeec8"}, + {file = "rpds_py-0.13.0-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f22cab655b41033d430f20266bf563b35038a7f01c9a099b0ccfd30a7fb9247"}, + {file = "rpds_py-0.13.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b9a0507342c37132813449393e6e6f351bbff376031cfff1ee6e616402ac7908"}, + {file = "rpds_py-0.13.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4eb1faf8e2ee9a2de3cb3ae4c8c355914cdc85f2cd7f27edf76444c9550ce1e7"}, + {file = "rpds_py-0.13.0-pp38-pypy38_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:a61a152d61e3ae26e0bbba7b2f568f6f25ca0abdeb6553eca7e7c45b59d9b1a9"}, + {file = "rpds_py-0.13.0-pp38-pypy38_pp73-musllinux_1_2_i686.whl", hash = "sha256:e499bf2200eb74774a6f85a7465e3bc5273fa8ef0055590d97a88c1e7ea02eea"}, + {file = "rpds_py-0.13.0-pp38-pypy38_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:1e5becd0de924616ca9a12abeb6458568d1dc8fe5c670d5cdb738402a8a8429d"}, + {file = "rpds_py-0.13.0-pp39-pypy39_pp73-macosx_10_7_x86_64.whl", hash = "sha256:70cfe098d915f566eeebcb683f49f9404d2f948432891b6e075354336eda9dfb"}, + {file = "rpds_py-0.13.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:2e73511e88368f93c24efe7c9a20b319eaa828bc7431f8a17713efb9e31a39fa"}, + {file = "rpds_py-0.13.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c07cb9bcccd08f9bc2fd05bf586479df4272ea5a6a70fbcb59b018ed48a5a84d"}, + {file = "rpds_py-0.13.0-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8c4e84016ba225e09df20fed8befe8c68d14fbeff6078f4a0ff907ae2095e17e"}, + {file = "rpds_py-0.13.0-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6ad465e5a70580ca9c1944f43a9a71bca3a7b74554347fc96ca0479eca8981f9"}, + {file = "rpds_py-0.13.0-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:189aebd44a07fa7b7966cf78b85bde8335b0b6c3b1c4ef5589f8c03176830107"}, + {file = "rpds_py-0.13.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9f50ca0460f1f7a89ab9b8355d83ac993d5998ad4218e76654ecf8afe648d8aa"}, + {file = "rpds_py-0.13.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f6c225011467021879c0482316e42d8a28852fc29f0c15d2a435ff457cadccd4"}, + {file = "rpds_py-0.13.0-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:1e63b32b856c0f08a56b76967d61b6ad811d8d330a8aebb9d21afadd82a296f6"}, + {file = "rpds_py-0.13.0-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:7e5fbe9800f09c56967fda88c4d9272955e781699a66102bd098f22511a3f260"}, + {file = "rpds_py-0.13.0-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:fea99967d4a978ce95dd52310bcb4a943b77c61725393bca631b0908047d6e2f"}, + {file = "rpds_py-0.13.0.tar.gz", hash = "sha256:35cc91cbb0b775705e0feb3362490b8418c408e9e3c3b9cb3b02f6e495f03ee7"}, ] [[package]] @@ -3991,31 +4002,31 @@ files = [ [[package]] name = "torch" -version = "2.1.0" +version = "2.1.1" description = "Tensors and Dynamic neural networks in Python with strong GPU acceleration" optional = false python-versions = ">=3.8.0" files = [ - {file = "torch-2.1.0-cp310-cp310-manylinux1_x86_64.whl", hash = "sha256:bf57f8184b2c317ef81fb33dc233ce4d850cd98ef3f4a38be59c7c1572d175db"}, - {file = "torch-2.1.0-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:a04a0296d47f28960f51c18c5489a8c3472f624ec3b5bcc8e2096314df8c3342"}, - {file = "torch-2.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:0bd691efea319b14ef239ede16d8a45c246916456fa3ed4f217d8af679433cc6"}, - {file = "torch-2.1.0-cp310-none-macosx_10_9_x86_64.whl", hash = "sha256:101c139152959cb20ab370fc192672c50093747906ee4ceace44d8dd703f29af"}, - {file = "torch-2.1.0-cp310-none-macosx_11_0_arm64.whl", hash = "sha256:a6b7438a90a870e4cdeb15301519ae6c043c883fcd224d303c5b118082814767"}, - {file = "torch-2.1.0-cp311-cp311-manylinux1_x86_64.whl", hash = "sha256:2224622407ca52611cbc5b628106fde22ed8e679031f5a99ce286629fc696128"}, - {file = "torch-2.1.0-cp311-cp311-manylinux2014_aarch64.whl", hash = "sha256:8132efb782cd181cc2dcca5e58effbe4217cdb2581206ac71466d535bf778867"}, - {file = "torch-2.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:5c3bfa91ce25ba10116c224c59d5b64cdcce07161321d978bd5a1f15e1ebce72"}, - {file = "torch-2.1.0-cp311-none-macosx_10_9_x86_64.whl", hash = "sha256:601b0a2a9d9233fb4b81f7d47dca9680d4f3a78ca3f781078b6ad1ced8a90523"}, - {file = "torch-2.1.0-cp311-none-macosx_11_0_arm64.whl", hash = "sha256:3cd1dedff13884d890f18eea620184fb4cd8fd3c68ce3300498f427ae93aa962"}, - {file = "torch-2.1.0-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:fb7bf0cc1a3db484eb5d713942a93172f3bac026fcb377a0cd107093d2eba777"}, - {file = "torch-2.1.0-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:761822761fffaa1c18a62c5deb13abaa780862577d3eadc428f1daa632536905"}, - {file = "torch-2.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:458a6d6d8f7d2ccc348ac4d62ea661b39a3592ad15be385bebd0a31ced7e00f4"}, - {file = "torch-2.1.0-cp38-none-macosx_10_9_x86_64.whl", hash = "sha256:c8bf7eaf9514465e5d9101e05195183470a6215bb50295c61b52302a04edb690"}, - {file = "torch-2.1.0-cp38-none-macosx_11_0_arm64.whl", hash = "sha256:05661c32ec14bc3a157193d0f19a7b19d8e61eb787b33353cad30202c295e83b"}, - {file = "torch-2.1.0-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:556d8dd3e0c290ed9d4d7de598a213fb9f7c59135b4fee144364a8a887016a55"}, - {file = "torch-2.1.0-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:de7d63c6ecece118684415a3dbd4805af4a4c1ee1490cccf7405d8c240a481b4"}, - {file = "torch-2.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:2419cf49aaf3b2336c7aa7a54a1b949fa295b1ae36f77e2aecb3a74e3a947255"}, - {file = "torch-2.1.0-cp39-none-macosx_10_9_x86_64.whl", hash = "sha256:6ad491e70dbe4288d17fdbfc7fbfa766d66cbe219bc4871c7a8096f4a37c98df"}, - {file = "torch-2.1.0-cp39-none-macosx_11_0_arm64.whl", hash = "sha256:421739685eba5e0beba42cb649740b15d44b0d565c04e6ed667b41148734a75b"}, + {file = "torch-2.1.1-cp310-cp310-manylinux1_x86_64.whl", hash = "sha256:5ebc43f5355a9b7be813392b3fb0133991f0380f6f0fcc8218d5468dc45d1071"}, + {file = "torch-2.1.1-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:84fefd63356416c0cd20578637ccdbb82164993400ed17b57c951dd6376dcee8"}, + {file = "torch-2.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:0a7a9da0c324409bcb5a7bdad1b4e94e936d21c2590aaa7ac2f63968da8c62f7"}, + {file = "torch-2.1.1-cp310-none-macosx_10_9_x86_64.whl", hash = "sha256:1e1e5faddd43a8f2c0e0e22beacd1e235a2e447794d807483c94a9e31b54a758"}, + {file = "torch-2.1.1-cp310-none-macosx_11_0_arm64.whl", hash = "sha256:e76bf3c5c354874f1da465c852a2fb60ee6cbce306e935337885760f080f9baa"}, + {file = "torch-2.1.1-cp311-cp311-manylinux1_x86_64.whl", hash = "sha256:98fea993639b0bb432dfceb7b538f07c0f1c33386d63f635219f49254968c80f"}, + {file = "torch-2.1.1-cp311-cp311-manylinux2014_aarch64.whl", hash = "sha256:61b51b33c61737c287058b0c3061e6a9d3c363863e4a094f804bc486888a188a"}, + {file = "torch-2.1.1-cp311-cp311-win_amd64.whl", hash = "sha256:1d70920da827e2276bf07f7ec46958621cad18d228c97da8f9c19638474dbd52"}, + {file = "torch-2.1.1-cp311-none-macosx_10_9_x86_64.whl", hash = "sha256:a70593806f1d7e6b53657d96810518da0f88ef2608c98a402955765b8c79d52c"}, + {file = "torch-2.1.1-cp311-none-macosx_11_0_arm64.whl", hash = "sha256:e312f7e82e49565f7667b0bbf9559ab0c597063d93044740781c02acd5a87978"}, + {file = "torch-2.1.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:1e3cbecfa5a7314d828f4a37b0c286714dc9aa2e69beb7a22f7aca76567ed9f4"}, + {file = "torch-2.1.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:9ca0fcbf3d5ba644d6a8572c83a9abbdf5f7ff575bc38529ef6c185a3a71bde9"}, + {file = "torch-2.1.1-cp38-cp38-win_amd64.whl", hash = "sha256:2dc9f312fc1fa0d61a565a0292ad73119d4b74c9f8b5031b55f8b4722abca079"}, + {file = "torch-2.1.1-cp38-none-macosx_10_9_x86_64.whl", hash = "sha256:d56b032176458e2af4709627bbd2c20fe2917eff8cd087a7fe313acccf5ce2f1"}, + {file = "torch-2.1.1-cp38-none-macosx_11_0_arm64.whl", hash = "sha256:29e3b90a8c281f6660804a939d1f4218604c80162e521e1e6d8c8557325902a0"}, + {file = "torch-2.1.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:bd95cee8511584b67ddc0ba465c3f1edeb5708d833ee02af1206b4486f1d9096"}, + {file = "torch-2.1.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:b31230bd058424e56dba7f899280dbc6ac8b9948e43902e0c84a44666b1ec151"}, + {file = "torch-2.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:403f1095e665e4f35971b43797a920725b8b205723aa68254a4050c6beca29b6"}, + {file = "torch-2.1.1-cp39-none-macosx_10_9_x86_64.whl", hash = "sha256:715b50d8c1de5da5524a68287eb000f73e026e74d5f6b12bc450ef6995fcf5f9"}, + {file = "torch-2.1.1-cp39-none-macosx_11_0_arm64.whl", hash = "sha256:db67e8725c76f4c7f4f02e7551bb16e81ba1a1912867bc35d7bb96d2be8c78b4"}, ] [package.dependencies] @@ -4023,10 +4034,23 @@ filelock = "*" fsspec = "*" jinja2 = "*" networkx = "*" +nvidia-cublas-cu12 = {version = "12.1.3.1", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} +nvidia-cuda-cupti-cu12 = {version = "12.1.105", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} +nvidia-cuda-nvrtc-cu12 = {version = "12.1.105", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} +nvidia-cuda-runtime-cu12 = {version = "12.1.105", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} +nvidia-cudnn-cu12 = {version = "8.9.2.26", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} +nvidia-cufft-cu12 = {version = "11.0.2.54", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} +nvidia-curand-cu12 = {version = "10.3.2.106", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} +nvidia-cusolver-cu12 = {version = "11.4.5.107", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} +nvidia-cusparse-cu12 = {version = "12.1.0.106", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} +nvidia-nccl-cu12 = {version = "2.18.1", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} +nvidia-nvtx-cu12 = {version = "12.1.105", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} sympy = "*" +triton = {version = "2.1.0", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} typing-extensions = "*" [package.extras] +dynamo = ["jinja2"] opt-einsum = ["opt-einsum (>=3.3)"] [[package]] @@ -4723,4 +4747,4 @@ cffi = ["cffi (>=1.11)"] [metadata] lock-version = "2.0" python-versions = ">=3.10, <3.12" -content-hash = "4d4c458f649e9618b43a794543a00cfafddafc089a4bd68287bc9a769484149e" +content-hash = "071460fdd5dd53916bef9bbcd9ae7be28792281c318c803243d9f204ab30fac5" From 02778f6434c92191c97ed3e81c959bcbff7ef9d3 Mon Sep 17 00:00:00 2001 From: Bryce Meyer Date: Thu, 16 Nov 2023 20:49:30 +0100 Subject: [PATCH 29/29] added init files --- sparse_autoencoder/activation_resampler/__init__.py | 1 + sparse_autoencoder/metrics/__init__.py | 1 + 2 files changed, 2 insertions(+) create mode 100644 sparse_autoencoder/activation_resampler/__init__.py create mode 100644 sparse_autoencoder/metrics/__init__.py diff --git a/sparse_autoencoder/activation_resampler/__init__.py b/sparse_autoencoder/activation_resampler/__init__.py new file mode 100644 index 00000000..82c3b184 --- /dev/null +++ b/sparse_autoencoder/activation_resampler/__init__.py @@ -0,0 +1 @@ +"""Activation Resampler.""" diff --git a/sparse_autoencoder/metrics/__init__.py b/sparse_autoencoder/metrics/__init__.py new file mode 100644 index 00000000..9e178f50 --- /dev/null +++ b/sparse_autoencoder/metrics/__init__.py @@ -0,0 +1 @@ +"""Metrics."""