diff --git a/.github/workflows/deploy-docs-internal.yml b/.github/workflows/deploy-docs-internal.yml index 1e1d4b6..dc2f270 100644 --- a/.github/workflows/deploy-docs-internal.yml +++ b/.github/workflows/deploy-docs-internal.yml @@ -9,6 +9,7 @@ jobs: deploy-internal: runs-on: ubuntu-latest + needs: build-docs steps: - name: Checkout uses: actions/checkout@v4 diff --git a/.gitignore b/.gitignore index ae51708..bde55a0 100644 --- a/.gitignore +++ b/.gitignore @@ -160,3 +160,6 @@ cython_debug/ # pdm .pdm-python + +**/.claude/settings.local.json +/vendor diff --git a/README.md b/README.md index f3d9a17..9e6c563 100644 --- a/README.md +++ b/README.md @@ -1,16 +1,17 @@ # ChipFlow documentation -ChipFlow documentation repository, publishing to the -[chipflow.github.io repository](https://github.com/ChipFlow/chipflow.github.io/) -via GitHub actions. +ChipFlow documentation repository, publishing to +https://chipflow-docs.docs.chipflow-infra.com via GitHub actions. + +Releases are published to https://docs.chipflow.io ## Build and view docs locally -Install Poetry into your environment if you don't have it already: +Install PDM into your environment if you don't have it already: ```bash -pip3 install pipx +pip3 install pipx pipx install pdm ``` @@ -23,13 +24,13 @@ pdm install Build the documentation locally: ```bash -pdm run build +pdm docs ``` Automatically rebuild the documentation on change and preview them at the same time: ```bash -pdm run autobuild +pdm autodocs ``` In your web browser go to http://localhost:8000 to see the documentation. diff --git a/copy-docs.sh b/copy-docs.sh deleted file mode 100755 index 2aa2545..0000000 --- a/copy-docs.sh +++ /dev/null @@ -1,28 +0,0 @@ -#!/bin/bash - -repos=( -'amaranth-lang/amaranth -- -b v0.5.4' -'chipflow/amaranth-soc -- -b reference-docs-chipflow' -'chipflow/chipflow-lib' -) - -rm -rf vendor/* -for r in "${repos[@]}"; do - repo=${r%% *} - name=${repo##*/} - if [[ "${r}" =~ "--" ]] ;then - opts="-- ${r##* --}" - else - opts="" - fi - echo "Cloning $repo $opts as vendor/$name" - echo "gh repo clone $repo vendor/$name $opts >/dev/null 2>&1 " - gh repo clone $repo vendor/$name $opts - echo "binding in $repo docs as $name" - rm -rf docs/source/$name - cp -a vendor/$name/docs docs/source/$name - grep -lr ':doc:' docs/source/$name/* | xargs sed -i.bak "s/:doc:/:$name:/g" -done - -find docs/source -name "*.bak" -exec rm {} \; - diff --git a/docs/source/amaranth-soc.rst b/docs/source/amaranth-soc.rst deleted file mode 100644 index ffa867b..0000000 --- a/docs/source/amaranth-soc.rst +++ /dev/null @@ -1,14 +0,0 @@ -Amaranth System on Chip toolkit -############################### - -.. warning:: - - This manual is a work in progress and is seriously incomplete! - -.. toctree:: - :maxdepth: 2 - - amaranth-soc/memory - amaranth-soc/wishbone - amaranth-soc/csr - amaranth-soc/gpio diff --git a/docs/source/amaranth.rst b/docs/source/amaranth.rst deleted file mode 100644 index 569d8ca..0000000 --- a/docs/source/amaranth.rst +++ /dev/null @@ -1,20 +0,0 @@ -Amaranth Language and Toolchain -############################### - -.. warning:: - This manual is a work in progress! - -.. toctree:: - :maxdepth: 2 - - amaranth/intro - amaranth/install - amaranth/start - amaranth/tutorial - amaranth/guide - amaranth/reference - amaranth/simulator - amaranth/platform - amaranth/stdlib - amaranth/changes - amaranth/contrib diff --git a/docs/source/conf.py b/docs/source/conf.py index 75c4f31..5a6c30d 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -1,5 +1,28 @@ # Configuration file for the Sphinx documentation builder. +import os +import sys from pathlib import Path +from itertools import starmap + +top_path = Path('../../') +sys.path.append(str((top_path / 'tools').absolute())) + +from tools import copy_docs + +# Repos we will be assembling +repos = [ + ('amaranth-lang/amaranth', 'tags/v0.5.4'), + ('chipflow/amaranth-soc', 'origin/reference-docs-chipflow'), + ('chipflow/chipflow-lib', 'origin/main') +] + +# copy in the doc sources from our repos +repo_list = copy_docs(repos) + +# add our repos to path +for r in repo_list: + sys.path.append(str(r)) + # -- Project information project = 'ChipFlow' @@ -10,27 +33,23 @@ version = '0.1.0' # -- General configuration -top_dir = Path(__file__).parent / ".." / ".." extensions = [ + 'sphinx.ext.autodoc', + 'sphinx.ext.autodoc.typehints', 'sphinx.ext.duration', 'sphinx.ext.doctest', 'sphinx.ext.intersphinx', - 'sphinx.ext.autosummary', 'sphinx_copybutton', 'myst_parser', 'sphinx.ext.todo', - 'sphinx.ext.autodoc', 'sphinx.ext.napoleon', + 'sphinx.ext.autodoc', 'sphinx_rtd_theme', 'sphinxcontrib.platformpicker', 'sphinxcontrib.yowasp_wavedrom', - 'sphinx.ext.autodoc', 'sphinxext.rediraffe', + 'autoapi.extension', ] -""" - "sphinx_design", - "sphinx_design_elements", -""" rst_prolog = """ .. role:: amaranth @@ -43,24 +62,57 @@ :language: python """ +html_theme = 'furo' +html_logo = 'chipflow-lib/_assets/chipflow-logo.svg' +html_title = "ChipFlow Platform Documentation" +html_static_path = ['chipflow-lib/_assets', 'amaranth/_static', 'amaranth-soc/_static'] + +html_theme_options = { + "dark_css_variables": { + "admonition-font-size": "0.9 rem", + }, + "light_css_variables": { + "admonition-font-size": "0.9 rem", + }, +} + +autodoc_typehints = 'description' + +autoapi_dirs = [ + top_path / "vendor/chipflow-lib/chipflow_lib/platforms", + top_path / "vendor/chipflow-lib/chipflow_lib", + ] +autoapi_generate_api_docs = True +autoapi_template_dir = "chipflow-lib/_templates/autoapi" +# autoapi_verbose_visibility = 2 +autoapi_keep_files = True +autoapi_options = [ + 'members', + 'show-inheritance', + 'show-module-summary', + 'imported-members', +] +autoapi_root = "chipflow-lib/autoapi" + +# Exclude autoapi templates and in-progress stuff +exclude_patterns = [ + autoapi_template_dir, + "chipflow-lib/unfinished", + "amaranth/cover.rst", + "amaranth-soc/cover.rst", +] + intersphinx_mapping = { 'python': ('https://docs.python.org/3/', None), } intersphinx_disabled_domains = ['std'] -exclude_patterns = [ - 'amaranth/index.rst', - 'amaranth/cover.rst', - 'amaranth-soc/index.rst', - 'amaranth-soc/cover.rst', - ] - rediraffe_redirects = { "simulator.rst": "amaranth/simulator.rst", } -templates_path = ['_templates'] +templates_path = ['chipflow-lib/_templates'] # -- Options for HTML output @@ -69,11 +121,6 @@ # Favicon is not from `_static`, it gets copied: html_favicon = "favicon.png" -# These folders are copied to the documentation's HTML output -html_static_path = ["_static"] - -html_logo = "_static/logo.png" - # These paths are either relative to html_static_path # or fully qualified paths (eg. https://...) html_js_files = [ @@ -116,6 +163,7 @@ r"^https://github\.com/[^/]+/[^/]+/$", ] +suppress_warnings = [ "ref.python" ] # Silence the warnings globally; otherwise they may fire on object destruction and crash completely # unrelated tests. diff --git a/docs/source/index.rst b/docs/source/index.rst index 7149a59..0bf690b 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -1,14 +1,26 @@ -ChipFlow documentation -====================== +ChipFlow Library Documentation +============================== + +.. image:: chipflow-lib/_assets/chipflow-logo.svg + :width: 200px + :class: sd-m-auto + :name: landing-page-logo + + +ChipFlow IC Design Platform +--------------------------- + +ChipFlow is an open-source platform for designing, testing, and manufacturing custom silicon. +It provides a streamlined workflow from design to fabrication using Python and the Amaranth HDL. -Try our :amaranth:`tutorial-intro-chipflow-platform`. Contents -------- .. toctree:: - amaranth - amaranth-soc - chipflow-lib/index.rst - tutorial-intro-chipflow-platform + :caption: User Guide + + chipflow-lib/index + Amaranth Language and Toolchain + Amaranth System-on-a-Chip toolkit support diff --git a/docs/source/tutorial-intro-chipflow-platform.rst b/docs/source/tutorial-intro-chipflow-platform.rst deleted file mode 100644 index f24bf71..0000000 --- a/docs/source/tutorial-intro-chipflow-platform.rst +++ /dev/null @@ -1,560 +0,0 @@ -.. role:: bash(code) - :language: bash - -Introduction to the ChipFlow platform -===================================== - -This tutorial gives an overview of how we can configure an SoC (system on chip) with the ChipFlow platform: - -* Simulate an example SoC -* Add a peripheral -* Optionally run on an FPGA - -.. important:: - - To test designs on an FPGA, you will need a `ULX3S `_. - Other development boards will be supported in the future. - -.. important:: - - This tutorial assumes you are running on macOS 11 or later or Ubuntu 22.04 or later. - The tutorial will work on other Linux distributions, but instructions are not included here. - - -Preparing your local environment --------------------------------- - -.. admonition:: Installing on macOS - - You will need to install Python3 and git. Use `Brew `_ for this: :: - - /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" - brew install python3 pipx - brew install git - -.. admonition:: Installing on Ubuntu - - You will need to install git: :: - - sudo apt install git pipx - -We use `PDM `_ to manage dependencies and ensure reproduable builds of your design. - -First install PDM: :: - - pipx ensurepath - pipx install pdm - -You may need to restart your shell session for PDM to become available, using: :: - - exec "$SHELL" - -To program the FPGA board we use `openFPGAloader `_. - -.. admonition:: Installing on macOS - - Install using brew: :: - - brew install openfpgaloader - -.. admonition:: Installing on Ubuntu - - Install openFPGAloader using apt: :: - - sudo add-apt-repository ppa:chipflow/ppa - sudo apt update - sudo apt install openfpgaloader - -Getting started ---------------- - -First use `Git `_ to get the example sources. :: - - git clone https://github.com/ChipFlow/example-socs - -Then set up your environment: :: - - cd example-socs - make init - - -The example project -------------------- - -The project contains: - -* ``.github/workflows/*`` - Runs linting and tests in GitHub Actions. -* ``chipflow.toml`` - Configuration telling the ChipFlow library how to load your Python design and allows you to configure the ChipFlow platform. -* ``Makefile`` - Contains helpful shortcuts to the CLI tools used in the project. -* ``my_design/design.py`` - This has the actual chip design. -* ``my_design/steps/*`` - These control how your design will be presented to the ChipFlow build steps, ``sim``(ulation), (FPGA)``board`` and ``silicon``. -* ``my_design/sim/*`` - The C++ and `doit build file `_ which builds the binary which will simulate our design. -* ``my_design/software/*`` - The C++ and `doit build file `_ for the software/BIOS which we will load onto our design when it's running in simulation or on a board. -* ``tests/*`` - This has some pytest integration tests which cover simulation and board/silicon builds. - -The design ----------- - -The chip design is contained within the `MySoC` class in ``my_design/design.py``, and is described -using the `Amaranth hardware definition language `_. -Amaranth is already well-used for FPGA boards, and at ChipFlow we will be using it -to produce silicon chips. - -Something a little unusual about our example Amaranth design is that we change -how the peripherals are physically accessed for use with simulation, a board, or -silicon. - -For example, here's where we add ``QSPIFlash`` to our design: - -.. code-block:: python - - m.submodules.rom_provider = rom_provider = platform.providers.QSPIFlashProvider() - self.rom = SPIMemIO( - flash=rom_provider.pins - ) - -The provider implementations, which are provided by ChipFlow, look a bit different for each context: - -QSPIFlash for a Board -~~~~~~~~~~~~~~~~~~~~~ - -For a board, in our case a ULX3S board, we need a means of accessing the clock pin (``USRMCLK``) and buffer primitives (``OBZ``, ``BB``) to access the other pins: - -.. code-block:: python - - class QSPIFlashProvider(Elaboratable): - def __init__(self): - self.pins = QSPIPins() - - def elaborate(self, platform): - m = Module() - - flash = platform.request("spi_flash", dir=dict(cs='-', copi='-', cipo='-', wp='-', hold='-')) - # Flash clock requires a special primitive to access in ECP5 - m.submodules.usrmclk = Instance( - "USRMCLK", - i_USRMCLKI=self.pins.clk_o, - i_USRMCLKTS=ResetSignal(), # tristate in reset for programmer accesss - a_keep=1, - ) - # IO pins and buffers - m.submodules += Instance( - "OBZ", - o_O=flash.cs.io, - i_I=self.pins.csn_o, - i_T=ResetSignal(), - ) - # Pins in order - data_pins = ["copi", "cipo", "wp", "hold"] - - for i in range(4): - m.submodules += Instance( - "BB", - io_B=getattr(flash, data_pins[i]).io, - i_I=self.pins.d_o[i], - i_T=~self.pins.d_oe[i], - o_O=self.pins.d_i[i] - ) - return m - -This is specific to the ECP5 family of boards, and the code would look different for others. - -QSPIFlash for Simulation -~~~~~~~~~~~~~~~~~~~~~~~~ - -For simulation, we add a C++ model which will mock/simulate the flash: - -.. code-block:: python - - class QSPIFlashProvider(Elaboratable): - def __init__(self): - self.pins = QSPIPins() - - def elaborate(self, platform): - return platform.add_model("spiflash_model", self.pins, edge_det=['clk_o', 'csn_o']) - -QSPIFlash for Silicon -~~~~~~~~~~~~~~~~~~~~~ - -For Silicon we just hook up the IO. - -.. code-block:: python - - class QSPIFlashProvider(Elaboratable): - def __init__(self): - self.pins = QSPIPins() - - def elaborate(self, platform): - m = Module() - m.d.comb += [ - platform.request("flash_clk").eq(self.pins.clk_o), - platform.request("flash_csn").eq(self.pins.csn_o), - ] - for index in range(4): - pin = platform.request(f"flash_d{index}") - m.d.comb += [ - self.pins.d_i[index].eq(pin.i), - pin.o.eq(self.pins.d_o[index]), - pin.oe.eq(self.pins.d_oe[index]) - ] - return m - -Run the design in simulation ----------------------------- - -Running our design and its software in simulation allows us to loosely check -that it's working. - -First we need to build a local simulation binary. The simulation uses -blackbox C++ models of external peripherals, such as the flash, to interact -with: - -.. code-block:: bash - - make sim-build - -After running this, we will have a simulation binary at ``build/sim/sim_soc``. - -We can't run it just yet, as it needs the software/BIOS too. To build the -software we run: - -.. code-block:: bash - - make software-build - -Now that we have our simulation binary, and a BIOS, we can run it: - -.. code-block:: bash - - make sim-run - -You should see console output like this: - -.. code-block:: bash - - 🐱: nyaa~! - SoC type: CA7F100F - SoC version: 2024D6E6 - Flash ID: CA7CA7FF - Entering QSPI mode - Initialised! - -Which means the processor is up and running. You can use Ctrl+C to interrupt it. - -Run the design on a ULX3S board (optional) ------------------------------------------- - -We can also run our design on an FPGA board, although currently only the ULX3S -is supported. If you don't have one, you can -:ref:`skip to the next section `. - -First we need to build the design into a bitstream for the board: - -.. code-block:: bash - - make board-build - -This will write a file ``build/top.bit``. As for the simulation, we need the -software/BIOS too. - -If we haven't already, build the bios: - -.. code-block:: bash - - make software-build - -Now, we load the software/BIOS and design onto board (program its bitstream): - -.. code-block:: bash - - make board-load-software-ulx3s - make board-load-ulx3s - -Your board should now be running. For us to check that it's working, we can -connect to it via its serial port: - -Connecting to your board -~~~~~~~~~~~~~~~~~~~~~~~~ - -First you need to find the serial port for your board, this is a little tricky but you should only need to do this once. - - -.. admonition:: Look for your serial port on macOS - - Run the following command :: - - ls /dev/tty* - - you should see something similar to this: :: - - /dev/tty.Bluetooth-Incoming-Port - /dev/tty.usbserial-K00219 - - In this case for our board its ``/dev/tty.usbserial-K00219``. Your device will likely be named similarly. - - -.. admonition:: Look for your serial port on Ubuntu/WSL2 - - Run the following command :: - - ls /dev/ttyUSB* - - you should see something similar to this: :: - - /dev/ttyUSB0 - - - In this case for our board its ``/dev/ttyUSB0``. Yours will likely be named similarly. - - -Below we will refer to the name of your serial port as ``$TTYUSB``. This is the full path you saw, starting with ``/dev/``. - -For ease you can set this in your terminal using ``export TTYUSB=/dev/``. - -Connect to the port via the screen utility, at baud ``115200``, with the command: - -.. code-block:: bash - - screen $TTYUSB 115200 - -Now, press the ``PWR`` button on your board, which will restart the design, -and give you a chance to see its output. It should look like: - -.. code-block:: bash - - 🐱: nyaa~! - SoC type: CA7F100F - SoC version: 613015FF - Flash ID: EF401800 - Entering QSPI mode - Initialised! - -To exit screen, use ``CTRL-A``, then ``CTRL-\``. - -.. _add-peripheral: - -Add a peripheral to the design ------------------------------- - -We're going to add a very simple peripheral - buttons! This will allow us to press -buttons on our board and see the result, as well as something in simlation. - -Add buttons to the design -~~~~~~~~~~~~~~~~~~~~~~~~~ - -In ``my_design/design.py`` we need to add another GPIO peripheral to read the -button values. - -You can uncomment the following: - -Add an address space: - -.. code-block:: python - - self.uart_base = 0xb2000000 - self.timer_base = 0xb3000000 - self.soc_id_base = 0xb4000000 - self.btn_gpio_base = 0xb5000000 - -Add the button peripheral: - -.. code-block:: python - - soc_type = 0xCA7F100F - self.soc_id = SoCID(type_id=soc_type) - self._decoder.add(self.soc_id.bus, addr=self.soc_id_base) - - m.submodules.gpio_provider = gpio_provider = platform.providers.ButtonGPIOProvider() - self.btn = GPIOPeripheral( - pins=gpio_provider.pins - ) - self._decoder.add(self.btn.bus, addr=self.btn_gpio_base) - - -Link up the button submodule: - -.. code-block:: python - - m.submodules.uart = self.uart - m.submodules.timer = self.timer - m.submodules.soc_id = self.soc_id - m.submodules.btn = self.btn - - -Add the button to our software generator: - -.. code-block:: python - - sw.add_periph("uart", "UART0", self.uart_base) - sw.add_periph("plat_timer", "TIMER0", self.timer_base) - sw.add_periph("soc_id", "SOC_ID", self.soc_id_base) - sw.add_periph("gpio", "BTN_GPIO", self.btn_gpio_base) - - -Update our software -~~~~~~~~~~~~~~~~~~~ - -So far, we have added the buttons to our design, but nothing will happen if we -press them! So we update our software so it reacts to the button presses: - -In ``my_design/software/main.c`` we uncomment the button press listening code: - - -.. code-block:: c - - while (1) { - // Listen for button presses - next_buttons = BTN_GPIO->in; - if ((next_buttons & 1U) && !(last_buttons & 1U)) - puts("button 1 pressed!\n"); - if ((next_buttons & 2U) && !(last_buttons & 2U)) - puts("button 2 pressed!\n"); - last_buttons = next_buttons; - }; - - -Because we called ``sw.add_periph("gpio", "BTN_GPIO", self.btn_gpio_base)`` in our design above, here in our software we'll have a ``BTN_GPIO`` pointer to the peripheral address. - -The pointer will be of a type matching the peripheral fields, and its `in` field contains the input value of the GPIO. - -Using this, we'll now see "button X pressed!" when one of the buttons is pressed. - - -Update our simulation -~~~~~~~~~~~~~~~~~~~~~ - -We're going to simulate the buttons being pressed in the simulation on a timer. - -It is possible to listen for keypresses on the keyboard, but that would introduce -too many dependencies for our simple example. - -So, in ``my_design/sim/main.cc`` we will uncomment the button presses code: - -.. code-block:: cpp - - while (1) { - tick(); - idx = (idx + 1) % 1000000; - - // Simulate button presses - if (idx == 100000) // at t=100000, press button 1 - top.p_buttons.set(0b01U); - else if (idx == 150000) // at t=150000, release button 1 - top.p_buttons.set(0b00U); - else if (idx == 300000) // at t=300000, press button 2 - top.p_buttons.set(0b10U); - else if (idx == 350000) // at t=350000, release button 2 - top.p_buttons.set(0b00U); - } - - -See how we're pressing and releasing button 1, followed by button 2, on a loop, forever. - -See our new peripheral in action --------------------------------- - -See the changes in simulation -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -We can now take a look at our changes in simulation: - -.. code-block:: bash - - # Rebuild our software - make software-build - - # Rebuild our simulation - make sim-build - - # Run our simulation - make sim-run - -We should now see the output with button presses: - -.. code-block:: bash - - 🐱: nyaa~! - SoC type: CA7F100F - SoC version: DCBBADEA - Flash ID: CA7CA7FF - Entering QSPI mode - Initialised! - button 1 pressed! - button 2 pressed! - button 1 pressed! - - -See the changes on our board (optional) -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -To see the changes on our board, we need to load the updated -software and design: - -.. code-block:: bash - - # Rebuild our software - make software-build - - # Rebuild our board - make board-build - - # Load software onto board - make board-load-software-ulx3s - - # Load design onto board - make board-load-ulx3s - -Now, as in our first example, we need to connect to the board and -see its output. - -When we press the physical buttons on the board, we should see it: - -.. code-block:: bash - - 🐱: nyaa~! - SoC type: CA7F100F - SoC version: DCBBADEA - Flash ID: EF401800 - Entering QSPI mode - Initialised! - button 2 pressed! - button 2 pressed! - button 1 pressed! - button 2 pressed! - - - -Building for Silicon --------------------- - -For this first Alpha, we aren't *quite* ready to start accepting designs on our API. This is coming very soon though! - -`Sign up `_ to be notified when the next Alpha release is available. - -If you are using this tutorial to test out new designs, reach out to us on `our Gitter channel `_. We would love to add your designs to our test sets! - - -What's on the roadmap? ----------------------- - -We still have a lot of work to do - some things on our roadmap: - -* Silicon build API -* Integration tests to test your design in Python. -* Improved simulation tooling. -* Many more high-quality Amaranth Peripheral IP modules to include in your designs. - -Join the beta -------------- - -If you're interested in the platform, you can `join the beta `_ -and help us build the future of Python-powered chip design. - - -Troubleshooting ---------------- -* Python version issues: - If you choose to run ``pdm install`` within a venv, PDM will reuse - that venv instead of creating a new one. - Ensure that you use a venv with Python 3.8 or greater. - diff --git a/pdm.lock b/pdm.lock index 3a258df..b60f6c7 100644 --- a/pdm.lock +++ b/pdm.lock @@ -5,10 +5,10 @@ groups = ["default"] strategy = [] lock_version = "4.5.0" -content_hash = "sha256:2f11eda97b66226b91f1e479c272b545df86544fdace88470c6e9b1aec57f96c" +content_hash = "sha256:ef10726a6b092a0b62c2c1ed8f32c1a4e2b7acbc8f0bfb6e3139b15612a4891f" [[metadata.targets]] -requires_python = "~=3.10" +requires_python = "~=3.12" [[package]] name = "alabaster" @@ -36,6 +36,19 @@ files = [ {file = "anyio-4.9.0.tar.gz", hash = "sha256:673c0c244e15788651a4ff38710fea9675823028a6f08a5eda409e0c9840a028"}, ] +[[package]] +name = "astroid" +version = "3.3.9" +requires_python = ">=3.9.0" +summary = "An abstract syntax tree for Python with inference support." +dependencies = [ + "typing-extensions>=4.0.0; python_version < \"3.11\"", +] +files = [ + {file = "astroid-3.3.9-py3-none-any.whl", hash = "sha256:d05bfd0acba96a7bd43e222828b7d9bc1e138aaeb0649707908d3702a9831248"}, + {file = "astroid-3.3.9.tar.gz", hash = "sha256:622cc8e3048684aa42c820d9d218978021c3c3d174fb03a9f0d615921744f550"}, +] + [[package]] name = "babel" version = "2.17.0" @@ -75,64 +88,38 @@ files = [ [[package]] name = "charset-normalizer" -version = "3.4.1" +version = "3.4.2" requires_python = ">=3.7" summary = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." files = [ - {file = "charset_normalizer-3.4.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:91b36a978b5ae0ee86c394f5a54d6ef44db1de0815eb43de826d41d21e4af3de"}, - {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7461baadb4dc00fd9e0acbe254e3d7d2112e7f92ced2adc96e54ef6501c5f176"}, - {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e218488cd232553829be0664c2292d3af2eeeb94b32bea483cf79ac6a694e037"}, - {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:80ed5e856eb7f30115aaf94e4a08114ccc8813e6ed1b5efa74f9f82e8509858f"}, - {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b010a7a4fd316c3c484d482922d13044979e78d1861f0e0650423144c616a46a"}, - {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4532bff1b8421fd0a320463030c7520f56a79c9024a4e88f01c537316019005a"}, - {file = "charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:d973f03c0cb71c5ed99037b870f2be986c3c05e63622c017ea9816881d2dd247"}, - {file = "charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:3a3bd0dcd373514dcec91c411ddb9632c0d7d92aed7093b8c3bbb6d69ca74408"}, - {file = "charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:d9c3cdf5390dcd29aa8056d13e8e99526cda0305acc038b96b30352aff5ff2bb"}, - {file = "charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:2bdfe3ac2e1bbe5b59a1a63721eb3b95fc9b6817ae4a46debbb4e11f6232428d"}, - {file = "charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:eab677309cdb30d047996b36d34caeda1dc91149e4fdca0b1a039b3f79d9a807"}, - {file = "charset_normalizer-3.4.1-cp310-cp310-win32.whl", hash = "sha256:c0429126cf75e16c4f0ad00ee0eae4242dc652290f940152ca8c75c3a4b6ee8f"}, - {file = "charset_normalizer-3.4.1-cp310-cp310-win_amd64.whl", hash = "sha256:9f0b8b1c6d84c8034a44893aba5e767bf9c7a211e313a9605d9c617d7083829f"}, - {file = "charset_normalizer-3.4.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:8bfa33f4f2672964266e940dd22a195989ba31669bd84629f05fab3ef4e2d125"}, - {file = "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:28bf57629c75e810b6ae989f03c0828d64d6b26a5e205535585f96093e405ed1"}, - {file = "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f08ff5e948271dc7e18a35641d2f11a4cd8dfd5634f55228b691e62b37125eb3"}, - {file = "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:234ac59ea147c59ee4da87a0c0f098e9c8d169f4dc2a159ef720f1a61bbe27cd"}, - {file = "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd4ec41f914fa74ad1b8304bbc634b3de73d2a0889bd32076342a573e0779e00"}, - {file = "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eea6ee1db730b3483adf394ea72f808b6e18cf3cb6454b4d86e04fa8c4327a12"}, - {file = "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c96836c97b1238e9c9e3fe90844c947d5afbf4f4c92762679acfe19927d81d77"}, - {file = "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:4d86f7aff21ee58f26dcf5ae81a9addbd914115cdebcbb2217e4f0ed8982e146"}, - {file = "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:09b5e6733cbd160dcc09589227187e242a30a49ca5cefa5a7edd3f9d19ed53fd"}, - {file = "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:5777ee0881f9499ed0f71cc82cf873d9a0ca8af166dfa0af8ec4e675b7df48e6"}, - {file = "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:237bdbe6159cff53b4f24f397d43c6336c6b0b42affbe857970cefbb620911c8"}, - {file = "charset_normalizer-3.4.1-cp311-cp311-win32.whl", hash = "sha256:8417cb1f36cc0bc7eaba8ccb0e04d55f0ee52df06df3ad55259b9a323555fc8b"}, - {file = "charset_normalizer-3.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:d7f50a1f8c450f3925cb367d011448c39239bb3eb4117c36a6d354794de4ce76"}, - {file = "charset_normalizer-3.4.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:73d94b58ec7fecbc7366247d3b0b10a21681004153238750bb67bd9012414545"}, - {file = "charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dad3e487649f498dd991eeb901125411559b22e8d7ab25d3aeb1af367df5efd7"}, - {file = "charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c30197aa96e8eed02200a83fba2657b4c3acd0f0aa4bdc9f6c1af8e8962e0757"}, - {file = "charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2369eea1ee4a7610a860d88f268eb39b95cb588acd7235e02fd5a5601773d4fa"}, - {file = "charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc2722592d8998c870fa4e290c2eec2c1569b87fe58618e67d38b4665dfa680d"}, - {file = "charset_normalizer-3.4.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ffc9202a29ab3920fa812879e95a9e78b2465fd10be7fcbd042899695d75e616"}, - {file = "charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:804a4d582ba6e5b747c625bf1255e6b1507465494a40a2130978bda7b932c90b"}, - {file = "charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:0f55e69f030f7163dffe9fd0752b32f070566451afe180f99dbeeb81f511ad8d"}, - {file = "charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:c4c3e6da02df6fa1410a7680bd3f63d4f710232d3139089536310d027950696a"}, - {file = "charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:5df196eb874dae23dcfb968c83d4f8fdccb333330fe1fc278ac5ceeb101003a9"}, - {file = "charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e358e64305fe12299a08e08978f51fc21fac060dcfcddd95453eabe5b93ed0e1"}, - {file = "charset_normalizer-3.4.1-cp312-cp312-win32.whl", hash = "sha256:9b23ca7ef998bc739bf6ffc077c2116917eabcc901f88da1b9856b210ef63f35"}, - {file = "charset_normalizer-3.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:6ff8a4a60c227ad87030d76e99cd1698345d4491638dfa6673027c48b3cd395f"}, - {file = "charset_normalizer-3.4.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:aabfa34badd18f1da5ec1bc2715cadc8dca465868a4e73a0173466b688f29dda"}, - {file = "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22e14b5d70560b8dd51ec22863f370d1e595ac3d024cb8ad7d308b4cd95f8313"}, - {file = "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8436c508b408b82d87dc5f62496973a1805cd46727c34440b0d29d8a2f50a6c9"}, - {file = "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2d074908e1aecee37a7635990b2c6d504cd4766c7bc9fc86d63f9c09af3fa11b"}, - {file = "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:955f8851919303c92343d2f66165294848d57e9bba6cf6e3625485a70a038d11"}, - {file = "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:44ecbf16649486d4aebafeaa7ec4c9fed8b88101f4dd612dcaf65d5e815f837f"}, - {file = "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:0924e81d3d5e70f8126529951dac65c1010cdf117bb75eb02dd12339b57749dd"}, - {file = "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:2967f74ad52c3b98de4c3b32e1a44e32975e008a9cd2a8cc8966d6a5218c5cb2"}, - {file = "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:c75cb2a3e389853835e84a2d8fb2b81a10645b503eca9bcb98df6b5a43eb8886"}, - {file = "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:09b26ae6b1abf0d27570633b2b078a2a20419c99d66fb2823173d73f188ce601"}, - {file = "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:fa88b843d6e211393a37219e6a1c1df99d35e8fd90446f1118f4216e307e48cd"}, - {file = "charset_normalizer-3.4.1-cp313-cp313-win32.whl", hash = "sha256:eb8178fe3dba6450a3e024e95ac49ed3400e506fd4e9e5c32d30adda88cbd407"}, - {file = "charset_normalizer-3.4.1-cp313-cp313-win_amd64.whl", hash = "sha256:b1ac5992a838106edb89654e0aebfc24f5848ae2547d22c2c3f66454daa11971"}, - {file = "charset_normalizer-3.4.1-py3-none-any.whl", hash = "sha256:d98b1668f06378c6dbefec3b92299716b931cd4e6061f3c875a71ced1780ab85"}, - {file = "charset_normalizer-3.4.1.tar.gz", hash = "sha256:44251f18cd68a75b56585dd00dae26183e102cd5e0f9f1466e6df5da2ed64ea3"}, + {file = "charset_normalizer-3.4.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:0c29de6a1a95f24b9a1aa7aefd27d2487263f00dfd55a77719b530788f75cff7"}, + {file = "charset_normalizer-3.4.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cddf7bd982eaa998934a91f69d182aec997c6c468898efe6679af88283b498d3"}, + {file = "charset_normalizer-3.4.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fcbe676a55d7445b22c10967bceaaf0ee69407fbe0ece4d032b6eb8d4565982a"}, + {file = "charset_normalizer-3.4.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d41c4d287cfc69060fa91cae9683eacffad989f1a10811995fa309df656ec214"}, + {file = "charset_normalizer-3.4.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4e594135de17ab3866138f496755f302b72157d115086d100c3f19370839dd3a"}, + {file = "charset_normalizer-3.4.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cf713fe9a71ef6fd5adf7a79670135081cd4431c2943864757f0fa3a65b1fafd"}, + {file = "charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a370b3e078e418187da8c3674eddb9d983ec09445c99a3a263c2011993522981"}, + {file = "charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:a955b438e62efdf7e0b7b52a64dc5c3396e2634baa62471768a64bc2adb73d5c"}, + {file = "charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:7222ffd5e4de8e57e03ce2cef95a4c43c98fcb72ad86909abdfc2c17d227fc1b"}, + {file = "charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:bee093bf902e1d8fc0ac143c88902c3dfc8941f7ea1d6a8dd2bcb786d33db03d"}, + {file = "charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:dedb8adb91d11846ee08bec4c8236c8549ac721c245678282dcb06b221aab59f"}, + {file = "charset_normalizer-3.4.2-cp312-cp312-win32.whl", hash = "sha256:db4c7bf0e07fc3b7d89ac2a5880a6a8062056801b83ff56d8464b70f65482b6c"}, + {file = "charset_normalizer-3.4.2-cp312-cp312-win_amd64.whl", hash = "sha256:5a9979887252a82fefd3d3ed2a8e3b937a7a809f65dcb1e068b090e165bbe99e"}, + {file = "charset_normalizer-3.4.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:926ca93accd5d36ccdabd803392ddc3e03e6d4cd1cf17deff3b989ab8e9dbcf0"}, + {file = "charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eba9904b0f38a143592d9fc0e19e2df0fa2e41c3c3745554761c5f6447eedabf"}, + {file = "charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3fddb7e2c84ac87ac3a947cb4e66d143ca5863ef48e4a5ecb83bd48619e4634e"}, + {file = "charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:98f862da73774290f251b9df8d11161b6cf25b599a66baf087c1ffe340e9bfd1"}, + {file = "charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c9379d65defcab82d07b2a9dfbfc2e95bc8fe0ebb1b176a3190230a3ef0e07c"}, + {file = "charset_normalizer-3.4.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e635b87f01ebc977342e2697d05b56632f5f879a4f15955dfe8cef2448b51691"}, + {file = "charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:1c95a1e2902a8b722868587c0e1184ad5c55631de5afc0eb96bc4b0d738092c0"}, + {file = "charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:ef8de666d6179b009dce7bcb2ad4c4a779f113f12caf8dc77f0162c29d20490b"}, + {file = "charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:32fc0341d72e0f73f80acb0a2c94216bd704f4f0bce10aedea38f30502b271ff"}, + {file = "charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:289200a18fa698949d2b39c671c2cc7a24d44096784e76614899a7ccf2574b7b"}, + {file = "charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4a476b06fbcf359ad25d34a057b7219281286ae2477cc5ff5e3f70a246971148"}, + {file = "charset_normalizer-3.4.2-cp313-cp313-win32.whl", hash = "sha256:aaeeb6a479c7667fbe1099af9617c83aaca22182d6cf8c53966491a0f1b7ffb7"}, + {file = "charset_normalizer-3.4.2-cp313-cp313-win_amd64.whl", hash = "sha256:aa6af9e7d59f9c12b33ae4e9450619cf2488e2bbe9b44030905877f0b2324980"}, + {file = "charset_normalizer-3.4.2-py3-none-any.whl", hash = "sha256:7f56930ab0abd1c45cd15be65cc741c28b1c9a34876ce8c17a2fa107810c0af0"}, + {file = "charset_normalizer-3.4.2.tar.gz", hash = "sha256:5baececa9ecba31eff645232d59845c07aa030f0c81ee70184a90d35099a0e63"}, ] [[package]] @@ -169,16 +156,6 @@ files = [ {file = "docutils-0.21.2.tar.gz", hash = "sha256:3a6b18732edf182daa3cd12775bbb338cf5691468f91eeeb109deff6ebfa986f"}, ] -[[package]] -name = "exceptiongroup" -version = "1.2.2" -requires_python = ">=3.7" -summary = "Backport of PEP 654 (exception groups)" -files = [ - {file = "exceptiongroup-1.2.2-py3-none-any.whl", hash = "sha256:3111b9d131c238bec2f8f516e123e14ba243563fb135d3fe885990585aa7795b"}, - {file = "exceptiongroup-1.2.2.tar.gz", hash = "sha256:47c2edf7c6738fafb49fd34290706d1a1a2f4d1c6df275526b62cbb4aa5393cc"}, -] - [[package]] name = "furo" version = "2024.8.6" @@ -238,6 +215,19 @@ files = [ {file = "jinja2-3.1.6.tar.gz", hash = "sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d"}, ] +[[package]] +name = "jschon" +version = "0.11.1" +requires_python = "~=3.8" +summary = "A JSON toolkit for Python developers." +dependencies = [ + "rfc3986", +] +files = [ + {file = "jschon-0.11.1-py3-none-any.whl", hash = "sha256:2350e8b6747b17358022960f91208bea70de448b914827af3184d30e20500f0f"}, + {file = "jschon-0.11.1.tar.gz", hash = "sha256:c0ca0beab1f1694a03d726b91ed75ec604a7787af3ae91ead765f78215bf149f"}, +] + [[package]] name = "json5" version = "0.12.0" @@ -267,26 +257,6 @@ version = "3.0.2" requires_python = ">=3.9" summary = "Safely add untrusted strings to HTML/XML markup." files = [ - {file = "MarkupSafe-3.0.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7e94c425039cde14257288fd61dcfb01963e658efbc0ff54f5306b06054700f8"}, - {file = "MarkupSafe-3.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9e2d922824181480953426608b81967de705c3cef4d1af983af849d7bd619158"}, - {file = "MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:38a9ef736c01fccdd6600705b09dc574584b89bea478200c5fbf112a6b0d5579"}, - {file = "MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bbcb445fa71794da8f178f0f6d66789a28d7319071af7a496d4d507ed566270d"}, - {file = "MarkupSafe-3.0.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:57cb5a3cf367aeb1d316576250f65edec5bb3be939e9247ae594b4bcbc317dfb"}, - {file = "MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:3809ede931876f5b2ec92eef964286840ed3540dadf803dd570c3b7e13141a3b"}, - {file = "MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e07c3764494e3776c602c1e78e298937c3315ccc9043ead7e685b7f2b8d47b3c"}, - {file = "MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:b424c77b206d63d500bcb69fa55ed8d0e6a3774056bdc4839fc9298a7edca171"}, - {file = "MarkupSafe-3.0.2-cp310-cp310-win32.whl", hash = "sha256:fcabf5ff6eea076f859677f5f0b6b5c1a51e70a376b0579e0eadef8db48c6b50"}, - {file = "MarkupSafe-3.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:6af100e168aa82a50e186c82875a5893c5597a0c1ccdb0d8b40240b1f28b969a"}, - {file = "MarkupSafe-3.0.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9025b4018f3a1314059769c7bf15441064b2207cb3f065e6ea1e7359cb46db9d"}, - {file = "MarkupSafe-3.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:93335ca3812df2f366e80509ae119189886b0f3c2b81325d39efdb84a1e2ae93"}, - {file = "MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2cb8438c3cbb25e220c2ab33bb226559e7afb3baec11c4f218ffa7308603c832"}, - {file = "MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a123e330ef0853c6e822384873bef7507557d8e4a082961e1defa947aa59ba84"}, - {file = "MarkupSafe-3.0.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e084f686b92e5b83186b07e8a17fc09e38fff551f3602b249881fec658d3eca"}, - {file = "MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d8213e09c917a951de9d09ecee036d5c7d36cb6cb7dbaece4c71a60d79fb9798"}, - {file = "MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:5b02fb34468b6aaa40dfc198d813a641e3a63b98c2b05a16b9f80b7ec314185e"}, - {file = "MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:0bff5e0ae4ef2e1ae4fdf2dfd5b76c75e5c2fa4132d05fc1b0dabcd20c7e28c4"}, - {file = "MarkupSafe-3.0.2-cp311-cp311-win32.whl", hash = "sha256:6c89876f41da747c8d3677a2b540fb32ef5715f97b66eeb0c6b66f5e3ef6f59d"}, - {file = "MarkupSafe-3.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:70a87b411535ccad5ef2f1df5136506a10775d267e197e4cf531ced10537bd6b"}, {file = "MarkupSafe-3.0.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:9778bd8ab0a994ebf6f84c2b949e65736d5575320a17ae8984a77fab08db94cf"}, {file = "MarkupSafe-3.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:846ade7b71e3536c4e56b386c2a47adf5741d2d8b94ec9dc3e92e5e1ee1e2225"}, {file = "MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1c99d261bd2d5f6b59325c92c73df481e05e57f19837bdca8413b9eac4bd8028"}, @@ -387,24 +357,6 @@ version = "6.0.2" requires_python = ">=3.8" summary = "YAML parser and emitter for Python" files = [ - {file = "PyYAML-6.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0a9a2848a5b7feac301353437eb7d5957887edbf81d56e903999a75a3d743086"}, - {file = "PyYAML-6.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:29717114e51c84ddfba879543fb232a6ed60086602313ca38cce623c1d62cfbf"}, - {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8824b5a04a04a047e72eea5cec3bc266db09e35de6bdfe34c9436ac5ee27d237"}, - {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7c36280e6fb8385e520936c3cb3b8042851904eba0e58d277dca80a5cfed590b"}, - {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ec031d5d2feb36d1d1a24380e4db6d43695f3748343d99434e6f5f9156aaa2ed"}, - {file = "PyYAML-6.0.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:936d68689298c36b53b29f23c6dbb74de12b4ac12ca6cfe0e047bedceea56180"}, - {file = "PyYAML-6.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:23502f431948090f597378482b4812b0caae32c22213aecf3b55325e049a6c68"}, - {file = "PyYAML-6.0.2-cp310-cp310-win32.whl", hash = "sha256:2e99c6826ffa974fe6e27cdb5ed0021786b03fc98e5ee3c5bfe1fd5015f42b99"}, - {file = "PyYAML-6.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:a4d3091415f010369ae4ed1fc6b79def9416358877534caf6a0fdd2146c87a3e"}, - {file = "PyYAML-6.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cc1c1159b3d456576af7a3e4d1ba7e6924cb39de8f67111c735f6fc832082774"}, - {file = "PyYAML-6.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1e2120ef853f59c7419231f3bf4e7021f1b936f6ebd222406c3b60212205d2ee"}, - {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d225db5a45f21e78dd9358e58a98702a0302f2659a3c6cd320564b75b86f47c"}, - {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5ac9328ec4831237bec75defaf839f7d4564be1e6b25ac710bd1a96321cc8317"}, - {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ad2a3decf9aaba3d29c8f537ac4b243e36bef957511b4766cb0057d32b0be85"}, - {file = "PyYAML-6.0.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ff3824dc5261f50c9b0dfb3be22b4567a6f938ccce4587b38952d85fd9e9afe4"}, - {file = "PyYAML-6.0.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:797b4f722ffa07cc8d62053e4cff1486fa6dc094105d13fea7b1de7d8bf71c9e"}, - {file = "PyYAML-6.0.2-cp311-cp311-win32.whl", hash = "sha256:11d8f3dd2b9c1207dcaf2ee0bbbfd5991f571186ec9cc78427ba5bd32afae4b5"}, - {file = "PyYAML-6.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:e10ce637b18caea04431ce14fabcf5c64a1c61ec9c56b071a4b7ca131ca52d44"}, {file = "PyYAML-6.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c70c95198c015b85feafc136515252a261a84561b7b1d51e3384e0655ddf25ab"}, {file = "PyYAML-6.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725"}, {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f71ea527786de97d1a0cc0eacd1defc0985dcf6b3f17bb77dcfc8c34bec4dc5"}, @@ -431,14 +383,6 @@ name = "quickjs" version = "1.19.4" summary = "Wrapping the quickjs C library." files = [ - {file = "quickjs-1.19.4-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:19520c326e840ef4aa72298e49f60c8feffeaf33ac62fac74ed9130ed46e7cb6"}, - {file = "quickjs-1.19.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:be7424b9af7853aaff930e3af2d1f2ebd83241cd2764abcea66247476a6d56d5"}, - {file = "quickjs-1.19.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9d579851d2a34be57b8adcc48e2b30d3f2e8b87a30898c90ebad440cefbda6f1"}, - {file = "quickjs-1.19.4-cp310-cp310-win_amd64.whl", hash = "sha256:4bf4a6596dbc49dfc79ab15ca38bf2c300fbde7e45f5f63ba836d841e79df3e9"}, - {file = "quickjs-1.19.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:2272597b5fbe468a11803a700b1fc345df65d1bdba27dcde929c7d905e67e1e8"}, - {file = "quickjs-1.19.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:845d0635f86b6168d819ef13d820dec07453e07b1ac735e0738d889c66762788"}, - {file = "quickjs-1.19.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:93c32e0f55c9871beff92a020b852e9addc59480b596955a9d1d40f5cbde8c5a"}, - {file = "quickjs-1.19.4-cp311-cp311-win_amd64.whl", hash = "sha256:d730ccbf65040a246105cceaafff7da9c67fe7c4a0832489c0982c153161b83c"}, {file = "quickjs-1.19.4-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:1bc38a840144a54e90668fb1f99441148429ab1d1b1355ecafbbe656eaeff788"}, {file = "quickjs-1.19.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:45d0e68570425d8322c48fb8989865df9b8c3e3ad3a01726151e0451d3c637eb"}, {file = "quickjs-1.19.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ac4b6d40b90553e9b135b35b3eaca264d10cdf92bfafce36ed9fb9acfdc5b420"}, @@ -462,6 +406,16 @@ files = [ {file = "requests-2.32.3.tar.gz", hash = "sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760"}, ] +[[package]] +name = "rfc3986" +version = "2.0.0" +requires_python = ">=3.7" +summary = "Validating URI References per RFC 3986" +files = [ + {file = "rfc3986-2.0.0-py2.py3-none-any.whl", hash = "sha256:50b1502b60e289cb37883f3dfd34532b8873c7de9f49bb546641ce9cbd256ebd"}, + {file = "rfc3986-2.0.0.tar.gz", hash = "sha256:97aacf9dbd4bfd829baad6e6309fa6573aaf1be3f6fa735c8ab05e46cecb261c"}, +] + [[package]] name = "sniffio" version = "1.3.1" @@ -474,11 +428,12 @@ files = [ [[package]] name = "snowballstemmer" -version = "2.2.0" -summary = "This package provides 29 stemmers for 28 languages generated from Snowball algorithms." +version = "3.0.0.1" +requires_python = "!=3.0.*,!=3.1.*,!=3.2.*" +summary = "This package provides 32 stemmers for 30 languages generated from Snowball algorithms." files = [ - {file = "snowballstemmer-2.2.0-py2.py3-none-any.whl", hash = "sha256:c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a"}, - {file = "snowballstemmer-2.2.0.tar.gz", hash = "sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1"}, + {file = "snowballstemmer-3.0.0.1-py3-none-any.whl", hash = "sha256:d1cdabc06fb492e80620d9e2c44d39e67cfda290b2aaef8718b0691079443b10"}, + {file = "snowballstemmer-3.0.0.1.tar.gz", hash = "sha256:1d09493a5ecc85fb5b433674e9c83fcd41c6739b6979ce4b54e81a40ec078342"}, ] [[package]] @@ -521,6 +476,24 @@ files = [ {file = "sphinx-7.4.7.tar.gz", hash = "sha256:242f92a7ea7e6c5b406fdc2615413890ba9f699114a9c09192d7dfead2ee9cfe"}, ] +[[package]] +name = "sphinx-autoapi" +version = "3.6.0" +requires_python = ">=3.9" +summary = "Sphinx API documentation generator" +dependencies = [ + "Jinja2", + "PyYAML", + "astroid>=2.7; python_version < \"3.12\"", + "astroid>=3; python_version >= \"3.12\"", + "sphinx>=7.4.0", + "stdlib-list; python_version < \"3.10\"", +] +files = [ + {file = "sphinx_autoapi-3.6.0-py3-none-any.whl", hash = "sha256:f3b66714493cab140b0e896d33ce7137654a16ac1edb6563edcbd47bf975f711"}, + {file = "sphinx_autoapi-3.6.0.tar.gz", hash = "sha256:c685f274e41d0842ae7e199460c322c4bd7fec816ccc2da8d806094b4f64af06"}, +] + [[package]] name = "sphinx-autobuild" version = "2024.10.3" @@ -741,46 +714,6 @@ files = [ {file = "starlette-0.46.2.tar.gz", hash = "sha256:7f7361f34eed179294600af672f565727419830b54b7b084efe44bb82d2fccd5"}, ] -[[package]] -name = "tomli" -version = "2.2.1" -requires_python = ">=3.8" -summary = "A lil' TOML parser" -files = [ - {file = "tomli-2.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:678e4fa69e4575eb77d103de3df8a895e1591b48e740211bd1067378c69e8249"}, - {file = "tomli-2.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:023aa114dd824ade0100497eb2318602af309e5a55595f76b626d6d9f3b7b0a6"}, - {file = "tomli-2.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ece47d672db52ac607a3d9599a9d48dcb2f2f735c6c2d1f34130085bb12b112a"}, - {file = "tomli-2.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6972ca9c9cc9f0acaa56a8ca1ff51e7af152a9f87fb64623e31d5c83700080ee"}, - {file = "tomli-2.2.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c954d2250168d28797dd4e3ac5cf812a406cd5a92674ee4c8f123c889786aa8e"}, - {file = "tomli-2.2.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8dd28b3e155b80f4d54beb40a441d366adcfe740969820caf156c019fb5c7ec4"}, - {file = "tomli-2.2.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:e59e304978767a54663af13c07b3d1af22ddee3bb2fb0618ca1593e4f593a106"}, - {file = "tomli-2.2.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:33580bccab0338d00994d7f16f4c4ec25b776af3ffaac1ed74e0b3fc95e885a8"}, - {file = "tomli-2.2.1-cp311-cp311-win32.whl", hash = "sha256:465af0e0875402f1d226519c9904f37254b3045fc5084697cefb9bdde1ff99ff"}, - {file = "tomli-2.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:2d0f2fdd22b02c6d81637a3c95f8cd77f995846af7414c5c4b8d0545afa1bc4b"}, - {file = "tomli-2.2.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:4a8f6e44de52d5e6c657c9fe83b562f5f4256d8ebbfe4ff922c495620a7f6cea"}, - {file = "tomli-2.2.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8d57ca8095a641b8237d5b079147646153d22552f1c637fd3ba7f4b0b29167a8"}, - {file = "tomli-2.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e340144ad7ae1533cb897d406382b4b6fede8890a03738ff1683af800d54192"}, - {file = "tomli-2.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db2b95f9de79181805df90bedc5a5ab4c165e6ec3fe99f970d0e302f384ad222"}, - {file = "tomli-2.2.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:40741994320b232529c802f8bc86da4e1aa9f413db394617b9a256ae0f9a7f77"}, - {file = "tomli-2.2.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:400e720fe168c0f8521520190686ef8ef033fb19fc493da09779e592861b78c6"}, - {file = "tomli-2.2.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:02abe224de6ae62c19f090f68da4e27b10af2b93213d36cf44e6e1c5abd19fdd"}, - {file = "tomli-2.2.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b82ebccc8c8a36f2094e969560a1b836758481f3dc360ce9a3277c65f374285e"}, - {file = "tomli-2.2.1-cp312-cp312-win32.whl", hash = "sha256:889f80ef92701b9dbb224e49ec87c645ce5df3fa2cc548664eb8a25e03127a98"}, - {file = "tomli-2.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:7fc04e92e1d624a4a63c76474610238576942d6b8950a2d7f908a340494e67e4"}, - {file = "tomli-2.2.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f4039b9cbc3048b2416cc57ab3bda989a6fcf9b36cf8937f01a6e731b64f80d7"}, - {file = "tomli-2.2.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:286f0ca2ffeeb5b9bd4fcc8d6c330534323ec51b2f52da063b11c502da16f30c"}, - {file = "tomli-2.2.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a92ef1a44547e894e2a17d24e7557a5e85a9e1d0048b0b5e7541f76c5032cb13"}, - {file = "tomli-2.2.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9316dc65bed1684c9a98ee68759ceaed29d229e985297003e494aa825ebb0281"}, - {file = "tomli-2.2.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e85e99945e688e32d5a35c1ff38ed0b3f41f43fad8df0bdf79f72b2ba7bc5272"}, - {file = "tomli-2.2.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ac065718db92ca818f8d6141b5f66369833d4a80a9d74435a268c52bdfa73140"}, - {file = "tomli-2.2.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:d920f33822747519673ee656a4b6ac33e382eca9d331c87770faa3eef562aeb2"}, - {file = "tomli-2.2.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a198f10c4d1b1375d7687bc25294306e551bf1abfa4eace6650070a5c1ae2744"}, - {file = "tomli-2.2.1-cp313-cp313-win32.whl", hash = "sha256:d3f5614314d758649ab2ab3a62d4f2004c825922f9e370b29416484086b264ec"}, - {file = "tomli-2.2.1-cp313-cp313-win_amd64.whl", hash = "sha256:a38aa0308e754b0e3c67e344754dff64999ff9b513e691d0e786265c93583c69"}, - {file = "tomli-2.2.1-py3-none-any.whl", hash = "sha256:cb55c73c5f4408779d0cf3eef9f762b9c9f147a77de7b258bef0a5628adc85cc"}, - {file = "tomli-2.2.1.tar.gz", hash = "sha256:cd45e1dc79c835ce60f7404ec8119f2eb06d38b1deba146f07ced3bbc44505ff"}, -] - [[package]] name = "typing-extensions" version = "4.13.2" @@ -825,31 +758,6 @@ dependencies = [ "anyio>=3.0.0", ] files = [ - {file = "watchfiles-1.0.5-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:5c40fe7dd9e5f81e0847b1ea64e1f5dd79dd61afbedb57759df06767ac719b40"}, - {file = "watchfiles-1.0.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8c0db396e6003d99bb2d7232c957b5f0b5634bbd1b24e381a5afcc880f7373fb"}, - {file = "watchfiles-1.0.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b551d4fb482fc57d852b4541f911ba28957d051c8776e79c3b4a51eb5e2a1b11"}, - {file = "watchfiles-1.0.5-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:830aa432ba5c491d52a15b51526c29e4a4b92bf4f92253787f9726fe01519487"}, - {file = "watchfiles-1.0.5-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a16512051a822a416b0d477d5f8c0e67b67c1a20d9acecb0aafa3aa4d6e7d256"}, - {file = "watchfiles-1.0.5-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bfe0cbc787770e52a96c6fda6726ace75be7f840cb327e1b08d7d54eadc3bc85"}, - {file = "watchfiles-1.0.5-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d363152c5e16b29d66cbde8fa614f9e313e6f94a8204eaab268db52231fe5358"}, - {file = "watchfiles-1.0.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7ee32c9a9bee4d0b7bd7cbeb53cb185cf0b622ac761efaa2eba84006c3b3a614"}, - {file = "watchfiles-1.0.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:29c7fd632ccaf5517c16a5188e36f6612d6472ccf55382db6c7fe3fcccb7f59f"}, - {file = "watchfiles-1.0.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8e637810586e6fe380c8bc1b3910accd7f1d3a9a7262c8a78d4c8fb3ba6a2b3d"}, - {file = "watchfiles-1.0.5-cp310-cp310-win32.whl", hash = "sha256:cd47d063fbeabd4c6cae1d4bcaa38f0902f8dc5ed168072874ea11d0c7afc1ff"}, - {file = "watchfiles-1.0.5-cp310-cp310-win_amd64.whl", hash = "sha256:86c0df05b47a79d80351cd179893f2f9c1b1cae49d96e8b3290c7f4bd0ca0a92"}, - {file = "watchfiles-1.0.5-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:237f9be419e977a0f8f6b2e7b0475ababe78ff1ab06822df95d914a945eac827"}, - {file = "watchfiles-1.0.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e0da39ff917af8b27a4bdc5a97ac577552a38aac0d260a859c1517ea3dc1a7c4"}, - {file = "watchfiles-1.0.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2cfcb3952350e95603f232a7a15f6c5f86c5375e46f0bd4ae70d43e3e063c13d"}, - {file = "watchfiles-1.0.5-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:68b2dddba7a4e6151384e252a5632efcaa9bc5d1c4b567f3cb621306b2ca9f63"}, - {file = "watchfiles-1.0.5-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:95cf944fcfc394c5f9de794ce581914900f82ff1f855326f25ebcf24d5397418"}, - {file = "watchfiles-1.0.5-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ecf6cd9f83d7c023b1aba15d13f705ca7b7d38675c121f3cc4a6e25bd0857ee9"}, - {file = "watchfiles-1.0.5-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:852de68acd6212cd6d33edf21e6f9e56e5d98c6add46f48244bd479d97c967c6"}, - {file = "watchfiles-1.0.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d5730f3aa35e646103b53389d5bc77edfbf578ab6dab2e005142b5b80a35ef25"}, - {file = "watchfiles-1.0.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:18b3bd29954bc4abeeb4e9d9cf0b30227f0f206c86657674f544cb032296acd5"}, - {file = "watchfiles-1.0.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:ba5552a1b07c8edbf197055bc9d518b8f0d98a1c6a73a293bc0726dce068ed01"}, - {file = "watchfiles-1.0.5-cp311-cp311-win32.whl", hash = "sha256:2f1fefb2e90e89959447bc0420fddd1e76f625784340d64a2f7d5983ef9ad246"}, - {file = "watchfiles-1.0.5-cp311-cp311-win_amd64.whl", hash = "sha256:b6e76ceb1dd18c8e29c73f47d41866972e891fc4cc7ba014f487def72c1cf096"}, - {file = "watchfiles-1.0.5-cp311-cp311-win_arm64.whl", hash = "sha256:266710eb6fddc1f5e51843c70e3bebfb0f5e77cf4f27129278c70554104d19ed"}, {file = "watchfiles-1.0.5-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:b5eb568c2aa6018e26da9e6c86f3ec3fd958cee7f0311b35c2630fa4217d17f2"}, {file = "watchfiles-1.0.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0a04059f4923ce4e856b4b4e5e783a70f49d9663d22a4c3b3298165996d1377f"}, {file = "watchfiles-1.0.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e380c89983ce6e6fe2dd1e1921b9952fb4e6da882931abd1824c092ed495dec"}, @@ -875,10 +783,6 @@ files = [ {file = "watchfiles-1.0.5-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:839ebd0df4a18c5b3c1b890145b5a3f5f64063c2a0d02b13c76d78fe5de34936"}, {file = "watchfiles-1.0.5-cp313-cp313-win32.whl", hash = "sha256:4a8ec1e4e16e2d5bafc9ba82f7aaecfeec990ca7cd27e84fb6f191804ed2fcfc"}, {file = "watchfiles-1.0.5-cp313-cp313-win_amd64.whl", hash = "sha256:f436601594f15bf406518af922a89dcaab416568edb6f65c4e5bbbad1ea45c11"}, - {file = "watchfiles-1.0.5-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:f59b870db1f1ae5a9ac28245707d955c8721dd6565e7f411024fa374b5362d1d"}, - {file = "watchfiles-1.0.5-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:9475b0093767e1475095f2aeb1d219fb9664081d403d1dff81342df8cd707034"}, - {file = "watchfiles-1.0.5-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fc533aa50664ebd6c628b2f30591956519462f5d27f951ed03d6c82b2dfd9965"}, - {file = "watchfiles-1.0.5-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fed1cd825158dcaae36acce7b2db33dcbfd12b30c34317a88b8ed80f0541cc57"}, {file = "watchfiles-1.0.5.tar.gz", hash = "sha256:b7529b5dcc114679d43827d8c35a07c493ad6f083633d573d81c660abc5979e9"}, ] @@ -888,28 +792,6 @@ version = "15.0.1" requires_python = ">=3.9" summary = "An implementation of the WebSocket Protocol (RFC 6455 & 7692)" files = [ - {file = "websockets-15.0.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d63efaa0cd96cf0c5fe4d581521d9fa87744540d4bc999ae6e08595a1014b45b"}, - {file = "websockets-15.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ac60e3b188ec7574cb761b08d50fcedf9d77f1530352db4eef1707fe9dee7205"}, - {file = "websockets-15.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5756779642579d902eed757b21b0164cd6fe338506a8083eb58af5c372e39d9a"}, - {file = "websockets-15.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0fdfe3e2a29e4db3659dbd5bbf04560cea53dd9610273917799f1cde46aa725e"}, - {file = "websockets-15.0.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4c2529b320eb9e35af0fa3016c187dffb84a3ecc572bcee7c3ce302bfeba52bf"}, - {file = "websockets-15.0.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ac1e5c9054fe23226fb11e05a6e630837f074174c4c2f0fe442996112a6de4fb"}, - {file = "websockets-15.0.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:5df592cd503496351d6dc14f7cdad49f268d8e618f80dce0cd5a36b93c3fc08d"}, - {file = "websockets-15.0.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:0a34631031a8f05657e8e90903e656959234f3a04552259458aac0b0f9ae6fd9"}, - {file = "websockets-15.0.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:3d00075aa65772e7ce9e990cab3ff1de702aa09be3940d1dc88d5abf1ab8a09c"}, - {file = "websockets-15.0.1-cp310-cp310-win32.whl", hash = "sha256:1234d4ef35db82f5446dca8e35a7da7964d02c127b095e172e54397fb6a6c256"}, - {file = "websockets-15.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:39c1fec2c11dc8d89bba6b2bf1556af381611a173ac2b511cf7231622058af41"}, - {file = "websockets-15.0.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:823c248b690b2fd9303ba00c4f66cd5e2d8c3ba4aa968b2779be9532a4dad431"}, - {file = "websockets-15.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:678999709e68425ae2593acf2e3ebcbcf2e69885a5ee78f9eb80e6e371f1bf57"}, - {file = "websockets-15.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d50fd1ee42388dcfb2b3676132c78116490976f1300da28eb629272d5d93e905"}, - {file = "websockets-15.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d99e5546bf73dbad5bf3547174cd6cb8ba7273062a23808ffea025ecb1cf8562"}, - {file = "websockets-15.0.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:66dd88c918e3287efc22409d426c8f729688d89a0c587c88971a0faa2c2f3792"}, - {file = "websockets-15.0.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8dd8327c795b3e3f219760fa603dcae1dcc148172290a8ab15158cf85a953413"}, - {file = "websockets-15.0.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8fdc51055e6ff4adeb88d58a11042ec9a5eae317a0a53d12c062c8a8865909e8"}, - {file = "websockets-15.0.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:693f0192126df6c2327cce3baa7c06f2a117575e32ab2308f7f8216c29d9e2e3"}, - {file = "websockets-15.0.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:54479983bd5fb469c38f2f5c7e3a24f9a4e70594cd68cd1fa6b9340dadaff7cf"}, - {file = "websockets-15.0.1-cp311-cp311-win32.whl", hash = "sha256:16b6c1b3e57799b9d38427dda63edcbe4926352c47cf88588c0be4ace18dac85"}, - {file = "websockets-15.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:27ccee0071a0e75d22cb35849b1db43f2ecd3e161041ac1ee9d2352ddf72f065"}, {file = "websockets-15.0.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:3e90baa811a5d73f3ca0bcbf32064d663ed81318ab225ee4f427ad4e26e5aff3"}, {file = "websockets-15.0.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:592f1a9fe869c778694f0aa806ba0374e97648ab57936f092fd9d87f8bc03665"}, {file = "websockets-15.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0701bc3cfcb9164d04a14b149fd74be7347a530ad3bbf15ab2c678a2cd3dd9a2"}, @@ -932,12 +814,6 @@ files = [ {file = "websockets-15.0.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:558d023b3df0bffe50a04e710bc87742de35060580a293c2a984299ed83bc4e4"}, {file = "websockets-15.0.1-cp313-cp313-win32.whl", hash = "sha256:ba9e56e8ceeeedb2e080147ba85ffcd5cd0711b89576b83784d8605a7df455fa"}, {file = "websockets-15.0.1-cp313-cp313-win_amd64.whl", hash = "sha256:e09473f095a819042ecb2ab9465aee615bd9c2028e4ef7d933600a8401c79561"}, - {file = "websockets-15.0.1-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:0c9e74d766f2818bb95f84c25be4dea09841ac0f734d1966f415e4edfc4ef1c3"}, - {file = "websockets-15.0.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:1009ee0c7739c08a0cd59de430d6de452a55e42d6b522de7aa15e6f67db0b8e1"}, - {file = "websockets-15.0.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76d1f20b1c7a2fa82367e04982e708723ba0e7b8d43aa643d3dcd404d74f1475"}, - {file = "websockets-15.0.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f29d80eb9a9263b8d109135351caf568cc3f80b9928bccde535c235de55c22d9"}, - {file = "websockets-15.0.1-pp310-pypy310_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b359ed09954d7c18bbc1680f380c7301f92c60bf924171629c5db97febb12f04"}, - {file = "websockets-15.0.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:cad21560da69f4ce7658ca2cb83138fb4cf695a2ba3e475e0559e05991aa8122"}, {file = "websockets-15.0.1-py3-none-any.whl", hash = "sha256:f7a866fbc1e97b5c617ee4116daaa09b722101d4a3c170c787450ba409f9736f"}, {file = "websockets-15.0.1.tar.gz", hash = "sha256:82544de02076bafba038ce055ee6412d68da13ab47f0c60cab827346de828dee"}, ] diff --git a/pyproject.toml b/pyproject.toml index 192bbf0..1f584d0 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,12 +1,12 @@ [project] name = "chipflow-docs" -version = "0.0.0" +version = "0.2" authors = [ - {name = "Ross Motley", email = "ross.motley@chipflow.io"} + {name = "Rob Taylor", email = "rob.tayloe@chipflow.io"} ] readme = "README.md" -requires-python = "~=3.10" +requires-python = "~=3.12" dependencies = [ "sphinx>=7.1", "sphinxcontrib-platformpicker~=1.4", @@ -21,15 +21,15 @@ dependencies = [ "sphinx-design>=0.6.0", "sphinx_design_elements @ git+https://github.com/panodata/sphinx-design-elements@linktree", "sphinxext-rediraffe>=0.2.7", + "sphinx-autoapi>=3.6.0", + "jschon>=0.11.1", ] - -[dependency-groups] -dev = [ - "-e amaranth@file:///${PROJECT_ROOT}/vendor/amaranth", - "-e amaranth_soc@file:///${PROJECT_ROOT}/vendor/amaranth-soc", -] +[build-system] +requires = ["pdm-backend"] +build-backend = "pdm.backend" [tool.pdm.scripts] -docs.composite = ["./copy-docs.sh", "{pdm} lock --dev", "{pdm} install --dev", "sphinx-build docs/source/ docs/build/"] -autodocs.cmd = "sphinx-autobuild docs/source/ docs/build/" +docs.cmd= "sphinx-build docs/source/ docs/build/" +autodocs.cmd= "sphinx-autobuild docs/source/ docs/build/" + diff --git a/tools/__init__.py b/tools/__init__.py new file mode 100644 index 0000000..39d2184 --- /dev/null +++ b/tools/__init__.py @@ -0,0 +1,2 @@ +from .copy_docs import copy_docs +__all__=['copy_docs'] diff --git a/tools/copy_docs.py b/tools/copy_docs.py new file mode 100755 index 0000000..b4aeaa1 --- /dev/null +++ b/tools/copy_docs.py @@ -0,0 +1,87 @@ +#!/usr/bin/env python3 +""" +Clones repositories and copies their documentation into the docs/source directory. +""" +import os +import subprocess +import re +import glob +import shutil +from pathlib import Path +from typing import List, Tuple + +def copy_docs(repos: List[Tuple[str, str]]) -> List[Path]: + """" + Pull in docs from other repos. + + Clones the repos at the given refs in $PDM_PROJECT_ROOT/vendor + Then copies the doc dirs into this one, tranforming `:role:` references appropriatly + + Args: + repos: List of tuples containing git repo and ref + + Returns: + A list of the repo locations + """ + + # Ensure vendor directory exists + root_path = Path(os.environ['PDM_PROJECT_ROOT']) + vendor = root_path / 'vendor' + vendor.mkdir(exist_ok=True) + + repo_list = [] + + for repo_info in repos: + repo_path = Path(repo_info[0]) + ref = repo_info[1] + + # Extract repo name from path (equivalent to ${repo##*/} in bash) + name = repo_path.name + + repodir = vendor / name + docs_dest_path = root_path /'docs/source' / name + + # Check if repo already exists + if repodir.exists(): + print(f"{repo_path} already there, updating") + # Git fetch + subprocess.run(['git', '-C', repodir, 'fetch'], check=True) + # Checkout ref + subprocess.run(['git', '-C', repodir, 'checkout', '-f', '--detach', ref], check=True) + else: + print(f"Cloning {repo_path} {ref} as {repodir}") + # Clone the repository with gh + subprocess.run(['gh', 'repo', 'clone', repo_path, repodir], check=True) + # Checkout ref + subprocess.run(['git', '-C', repodir, 'checkout', '-f', '--detach', ref], check=True) + + repo_list.append(repodir) + + print(f"Binding in {repo_path} docs as {name}") + + if docs_dest_path.exists(): + shutil.rmtree(docs_dest_path) + + shutil.copytree(repodir / 'docs', docs_dest_path) + + # Replace :doc: references with :{name}: in all rst files + doc_files = [] + for root, _, files in docs_dest_path.walk(on_error=print): + rst_files = filter(lambda f: (root / f).suffix == '.rst' , files) + for file in (root/f for f in rst_files): + try: + content = file.read_text(encoding='utf-8') + + if ':doc:' in content: + # Replace :doc: with :name: + new_content = content.replace(':doc:', f':{name}:') + file.write_text(new_content, encoding='utf-8') + print(f"Updated references in {file}") + except (UnicodeDecodeError, IsADirectoryError): + # Skip binary files or directories + pass + + # assemble a + print("Documentation copy completed successfully") + + return repo_list