diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml new file mode 100644 index 000000000..27850a2e1 --- /dev/null +++ b/.github/workflows/docs.yml @@ -0,0 +1,47 @@ +name: Publish Sphinx Documentation + +on: + push: + branches: + - haoti/doc_update + +jobs: + publish_sphinx_docs: + runs-on: ubuntu-latest + permissions: + contents: write + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + - name: Install uv + uses: astral-sh/setup-uv@v5 + with: + version: "0.5.1" + enable-cache: true + cache-dependency-glob: "uv.lock" + - name: Install dependencies + working-directory: docs + run: | + uv sync --python 3.10 + sudo apt-get update && sudo apt-get install -y doxygen graphviz + - name: Build api documentation + working-directory: docs + run: | + uv run bash api_doc_script.sh + - name: Sphinx build + working-directory: docs + run: | + uv run just doc + - name: Create index.html + working-directory: docs + run: | + uv run python redirect.py ${{ github.ref_name }} > build/index.html + - name: Deploy + uses: peaceiris/actions-gh-pages@v3 + with: + publish_branch: gh-pages + personal_token: ${{ secrets.PAGES_PAT }} + external_repository: Cytnx-dev/Cytnx_doc + publish_dir: docs/build/ + force_orphan: true diff --git a/DoxygenLayout.xml b/DoxygenLayout.xml index 8ceeb6b50..5d1f5c9c3 100644 --- a/DoxygenLayout.xml +++ b/DoxygenLayout.xml @@ -37,7 +37,7 @@ - + diff --git a/Readme.md b/Readme.md index 07aeee09c..2ddb48d75 100644 --- a/Readme.md +++ b/Readme.md @@ -22,14 +22,14 @@ Cytnx is a tensor network library designed for quantum physics simulations using **See also** [Release Note](misc_doc/version.log). -## API Documentation: - -[https://kaihsinwu.gitlab.io/cytnx_api/](https://kaihsinwu.gitlab.io/cytnx_api/) ## User Guide [under construction]: -[Cytnx User Guide](https://kaihsinwu.gitlab.io/Cytnx_doc/) +[Cytnx User Guide](https://cytnx-dev.github.io/Cytnx_doc) + +## API Documentation: +[API Documentation](https://cytnx-dev.github.io/Cytnx_doc/api_build/html) ## Objects: @@ -243,17 +243,18 @@ You can contact us by: * Email, see below ## Developers & Maintainers -Creator and Project manager | Affiliation | Email -----------------------------|-----------------|--------- -Kai-Hsin Wu |Boston Univ., USA|kaihsinwu@gmail.com +Creator | Affiliation | Email +------------|--------------------|-------------------- +Kai-Hsin Wu | QuEra, Boston, USA | kaihsinwu@gmail.com Developers | Affiliation | Roles ----------------|-----------------|--------- -Chang-Teng Lin |NTU, Taiwan |major maintainer and developer -Ke Hsu |NTU, Taiwan |major maintainer and developer -Ivana Gyro |NTU, Taiwan |major maintainer and developer -Hao-Ti Hung |NTU, Taiwan |documentation and linalg -Ying-Jer Kao |NTU, Taiwan |setuptool, cmake +Chang-Teng Lin | NTU, Taiwan | major maintainer and developer +Ke Hsu | NTU, Taiwan | major maintainer and developer +Ivana Gyro | NTU, Taiwan | major maintainer and developer +Hao-Ti Hung | NTU, Taiwan | documentation and linalg +Manuel Schneider| NYCU, Taiwan | developer, fermions, documentation +Ying-Jer Kao | NTU, Taiwan | project manager, setuptool, cmake ## Contributors Contributors | Affiliation @@ -261,7 +262,6 @@ Contributors | Affiliation PoChung Chen | NTHU, Taiwan Chia-Min Chung | NSYSU, Taiwan Ian McCulloch | NTHU, Taiwan -Manuel Schneider| NYCU, Taiwan Yen-Hsin Wu | NTU, Taiwan Po-Kwan Wu | OSU, USA Wen-Han Kao | UMN, USA @@ -271,10 +271,10 @@ Yu-Cheng Lin | NTU, Taiwan ## References * Paper: -[https://arxiv.org/abs/2401.01921](https://arxiv.org/abs/2401.01921) +https://scipost.org/10.21468/SciPostPhysCodeb.53 * Example/DMRG: -[https://www.tensors.net/dmrg](https://www.tensors.net/dmrg) +https://www.tensors.net/dmrg * hptt library: -[https://github.com/springer13/hptt](https://github.com/springer13/hptt) +https://github.com/springer13/hptt diff --git a/docs/.gitignore b/docs/.gitignore index 42a6755df..79c0e8371 100644 --- a/docs/.gitignore +++ b/docs/.gitignore @@ -6,5 +6,4 @@ source/__pycache__/* tests/__pycache__/* tests/build/* -build/ *.swp diff --git a/docs/api_doc_script.sh b/docs/api_doc_script.sh new file mode 100644 index 000000000..71730cc93 --- /dev/null +++ b/docs/api_doc_script.sh @@ -0,0 +1,75 @@ +#!/usr/bin/bash + +doxygen_build() +{ + VTAG=$1 + echo $VTAG + git checkout $VTAG || { + echo "Failed to checkout tag $VTAG"; + exit 1; + } + doxygen docs.doxygen > /dev/null 2>&1 + if [ "$VTAG" = master ]; then + mkdir -p docs/api_docs/versions + VTAG=latest + fi + mv docs/html docs/api_docs/versions/$VTAG +} + +# get current branch +branch=$(git rev-parse --abbrev-ref HEAD) + +mkdir build +cd ../ + +# Build latest version +doxygen_build master + +smallest_ver=0.7.3 +# Get all version latest than smallest_ver +versions=($(git tag \ + | sed 's/^v//' \ + | sed 's/[A-Za-z].*$//' \ + | sort -V \ + | awk -F. -v cv="$smallest_ver" ' + BEGIN { split(cv,c,"."); min=c[1]*10000+c[2]*100+c[3] } + { val=$1*10000+$2*100+$3; if(val>=min) print } + ')) + +# Build older version latest from smallest_ver +for i in "${!versions[@]}"; do + ver="v${versions[i]}" + doxygen_build $ver +done + +# checkout original version +git checkout $branch + +# Create index.rst +cd ./docs/api_docs/home_source +cat > index.rst <<'EOF' +.. image:: Icon_small.png + :width: 350 + +Cytnx API +================================= + Cytnx is a library design for Quantum physics simulation using GPUs and CPUs. + +* `Latest version `__. + +Older versions: + +EOF + +for ((i=${#versions[@]}-1; i>=0; i--)); do + ver="v${versions[i]}" + echo ' * `'$ver' `__.' >> index.rst +done + +# build API documentation index. +cd ../ +make html + +# move the api_build under build +mv versions ./build_home/html/ +mv build_home ../build/api_build diff --git a/docs/api_docs/.gitignore b/docs/api_docs/.gitignore new file mode 100644 index 000000000..aecdda506 --- /dev/null +++ b/docs/api_docs/.gitignore @@ -0,0 +1,3 @@ +build_home/* +home_source/index.rst +*.swp diff --git a/docs/api_docs/Makefile b/docs/api_docs/Makefile new file mode 100644 index 000000000..935f763e6 --- /dev/null +++ b/docs/api_docs/Makefile @@ -0,0 +1,22 @@ +# 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 = home_source +BUILDDIR = build_home + +# 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/api_docs/home_source/Icon_i.png b/docs/api_docs/home_source/Icon_i.png new file mode 100644 index 000000000..52ca03d5a Binary files /dev/null and b/docs/api_docs/home_source/Icon_i.png differ diff --git a/docs/api_docs/home_source/Icon_small.png b/docs/api_docs/home_source/Icon_small.png new file mode 100644 index 000000000..bd53b7bc5 Binary files /dev/null and b/docs/api_docs/home_source/Icon_small.png differ diff --git a/docs/api_docs/home_source/conf.py b/docs/api_docs/home_source/conf.py new file mode 100644 index 000000000..ef1fad647 --- /dev/null +++ b/docs/api_docs/home_source/conf.py @@ -0,0 +1,127 @@ +import os,sys +sys.path.append('.') + + + +html_theme = 'sphinxbootstrap4theme' +import sphinxbootstrap4theme +html_theme_path = [sphinxbootstrap4theme.get_path()] + +# Configuration file for the Sphinx documentation builder. +# +# This file only contains a selection of the most common options. For a full +# list see the documentation: +# https://www.sphinx-doc.org/en/master/usage/configuration.html + +# -- Path setup -------------------------------------------------------------- + +# If extensions (or modules to document with autodoc) are in another directory, +# add these directories to sys.path here. If the directory is relative to the +# documentation root, use os.path.abspath to make it absolute, like shown here. +# +# import os +# import sys +# sys.path.insert(0, os.path.abspath('.')) + + +# -- Project information ----------------------------------------------------- + +project = 'Cytnx API' +copyright = '2019-, Kai-Hsin Wu' +author = 'Kai-Hsin Wu' + +# -- General configuration --------------------------------------------------- + +# Add any Sphinx extension module names here, as strings. They can be +# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom +# ones. +# https://sublime-and-sphinx-guide.readthedocs.io/en/latest/references.html +extensions = ['sphinx.ext.autosectionlabel'] +extensions.append('sphinx.ext.extlinks') +extensions.append('sphinxcontrib.jquery') +#extensions.append('sphinx.ext.imgmath') +#extensions.append('ablog') +extensions.append('sphinx.ext.mathjax') + +# Add any paths that contain templates here, relative to this directory. +templates_path = ['_templates'] + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +# This pattern also affects html_static_path and html_extra_path. +exclude_patterns = [] + + +# -- Options for HTML output ------------------------------------------------- + +html_logo = 'Icon_i.png' + +# The theme to use for HTML and HTML Help pages. See the documentation for +# a list of builtin themes. +# +#html_theme = 'pyramid' +#html_theme = 'sphinx' + +# Add any paths that contain custom static files (such as style sheets) here, +# relative to this directory. They are copied after the builtin static files, +# so a file named "default.css" will overwrite the builtin "default.css". +#html_static_path = ['_static'] + + + + +html_theme_options = { + # Navbar style. + # Values: 'fixed-top', 'full' (Default: 'fixed-top') + 'navbar_style' : 'fixed-top', + + # Navbar link color modifier class. + # Values: 'dark', 'light' (Default: 'dark') + 'navbar_color_class' : 'dark', + + # Navbar background color class. + # Values: 'inverse', 'primary', 'faded', 'success', + # 'info', 'warning', 'danger' (Default: 'inverse') + #'navbar_bg_class' : 'inverse', + + # Show global TOC in navbar. + # To display up to 4 tier in the drop-down menu. + # Values: True, False (Default: True) + 'navbar_show_pages' : False, + + # Link name for global TOC in navbar. + # (Default: 'Pages') + #'navbar_pages_title' : 'Pages', + + # Specify a list of menu in navbar. + # Tuples forms: + # ('Name', 'external url or path of pages in the document', boolean) + # Third argument: + # True indicates an external link. + # False indicates path of pages in the document. + 'navbar_links' : [ + ("User Guide", "../../html/index.html", True), + ("Github", "https://github.com/Cytnx-dev/Cytnx", True) + ], + + # Total width(%) of the document and the sidebar. + # (Default: 80%) + 'main_width' : '80%', + + # Render sidebar. + # Values: True, False (Default: True) + 'show_sidebar' : False, + + # Render sidebar in the right of the document. + # Values:True, False (Default: False) + 'sidebar_right': False, + + # Fix sidebar. + # Values: True, False (Default: True) + 'sidebar_fixed': False, + + # Html table header class. + # Values: 'inverse', 'light' (Deafult: 'inverse') + 'table_thead_class' : 'inverse', + +} diff --git a/docs/code/CytnxGuide_PythonCodeExamples_2023_06_30.ipynb b/docs/code/CytnxGuide_PythonCodeExamples_2023_06_30.ipynb index 92976fc2b..811f188ef 100644 --- a/docs/code/CytnxGuide_PythonCodeExamples_2023_06_30.ipynb +++ b/docs/code/CytnxGuide_PythonCodeExamples_2023_06_30.ipynb @@ -1751,7 +1751,7 @@ "metadata": {}, "outputs": [], "source": [ - "Tsymm_diff=T-cytnx.Contracts([U,S,Vt]);\n", + "Tsymm_diff=T-cytnx.Contract([U,S,Vt]);\n", "\n", "Tsymm_diff.Norm()/T.Norm()" ] @@ -1937,7 +1937,7 @@ "id": "be4e27d5", "metadata": {}, "source": [ - "8.2. Contract(s)" + "8.2. Contract" ] }, { @@ -2025,9 +2025,9 @@ "A2.relabels_([\"phy2\",\"v5\",\"v6\"])\n", "\n", "\n", - "# Use Contracts\n", + "# Use Contract\n", "\n", - "res = cytnx.Contracts(TNs = [A1,M,A2], order = \"(M,(A1,A2))\", optimal = False)\n", + "res = cytnx.Contract(TNs = [A1,M,A2], order = \"(M,(A1,A2))\", optimal = False)\n", "\n", "res.print_diagram()" ] diff --git a/docs/code/cplusplus/doc_codes/guide_basic_obj_Storage_5_io_Save.cpp b/docs/code/cplusplus/doc_codes/guide_basic_obj_Storage_5_io_Save.cpp index 1d6de205d..4eb2b6690 100644 --- a/docs/code/cplusplus/doc_codes/guide_basic_obj_Storage_5_io_Save.cpp +++ b/docs/code/cplusplus/doc_codes/guide_basic_obj_Storage_5_io_Save.cpp @@ -1,3 +1,3 @@ auto A = cytnx::Storage(4); A.fill(6); -A.Save("S1"); +A.Save("S1.cyst"); diff --git a/docs/code/python/doc_codes/guide_basic_obj_Storage_5_io_Save.py b/docs/code/python/doc_codes/guide_basic_obj_Storage_5_io_Save.py index 40c1df9f6..5fdce1f51 100644 --- a/docs/code/python/doc_codes/guide_basic_obj_Storage_5_io_Save.py +++ b/docs/code/python/doc_codes/guide_basic_obj_Storage_5_io_Save.py @@ -1,3 +1,3 @@ A = cytnx.Storage(4) A.fill(6) -A.Save("S1") +A.Save("S1.cyst") diff --git a/docs/code/python/doc_codes/guide_basic_obj_Tensor_7_io_Save.py b/docs/code/python/doc_codes/guide_basic_obj_Tensor_7_io_Save.py index 6715145cd..ad2766f21 100644 --- a/docs/code/python/doc_codes/guide_basic_obj_Tensor_7_io_Save.py +++ b/docs/code/python/doc_codes/guide_basic_obj_Tensor_7_io_Save.py @@ -1,2 +1,2 @@ A = cytnx.arange(12).reshape(3,4) -A.Save("T1") +A.Save("T1.cytn") diff --git a/docs/code/python/doc_codes/guide_contraction_contract_Contract.py b/docs/code/python/doc_codes/guide_contraction_contract_Contract.py index 4056ab462..925c183e4 100644 --- a/docs/code/python/doc_codes/guide_contraction_contract_Contract.py +++ b/docs/code/python/doc_codes/guide_contraction_contract_Contract.py @@ -1,12 +1,14 @@ -A = cytnx.UniTensor(cytnx.ones([2,3,4]), - rowrank=1, - labels=["i","j","l"]) -Are = A.relabels(["i","j","lA"]) +A = cytnx.UniTensor.ones([2,3,4]) \ + .set_rowrank(1) \ + .relabel(["i","j","l"]) \ + .set_name("A") +Are = A.relabel(["i","j","lA"]).set_name("Are") -B = cytnx.UniTensor(cytnx.ones([3,2,4,5]), - rowrank=2, - labels=["j","k","l","m"]) -Bre = B.relabels(["j","k","lB","m"]) +B = cytnx.UniTensor.ones([3,2,4,5]) \ + .set_rowrank(2) \ + .relabel(["j","k","l","m"]) \ + .set_name("B") +Bre = B.relabel(["j","k","lB","m"]).set_name("Bre") C = cytnx.Contract(Are, Bre) diff --git a/docs/code/python/doc_codes/guide_contraction_contract_Contracts.py b/docs/code/python/doc_codes/guide_contraction_contract_Contracts.py index e7f7fc7a3..b10cbe522 100644 --- a/docs/code/python/doc_codes/guide_contraction_contract_Contracts.py +++ b/docs/code/python/doc_codes/guide_contraction_contract_Contracts.py @@ -1,22 +1,16 @@ # Create A1, A2, M -A1 = cytnx.UniTensor( - cytnx.random.normal( - [2,8,8], mean=0., std=1., - dtype=cytnx.Type.ComplexDouble), - name = "A1"); +A1 = cytnx.UniTensor.normal([2,8,8], mean=0., std=1., dtype=cytnx.Type.ComplexDouble) \ + .set_name("A1") -A2 = A1.Conj(); -A2.set_name("A2"); -M = cytnx.UniTensor(cytnx.ones([2,2,4,4]), - name = "M") +A2 = A1.Conj().set_name("A2") +M = cytnx.UniTensor.ones([2,2,4,4]).set_name("M") # Assign labels -A1.relabels_(["phy1","v1","v2"]) -M.relabels_(["phy1","phy2","v3","v4"]) -A2.relabels_(["phy2","v5","v6"]) +A1.relabel_(["phy1","v1","v2"]) +M.relabel_(["phy1","phy2","v3","v4"]) +A2.relabel_(["phy2","v5","v6"]) -# Use Contracts -Res = cytnx.Contracts(TNs = [A1,M,A2], - order = "(M,(A1,A2))", - optimal = False) +# Use Contract +Res = cytnx.Contract([A1,M,A2], order = "(M,(A1,A2))", optimal = False) \ + .set_name("Res") Res.print_diagram() diff --git a/docs/code/python/doc_codes/guide_contraction_contract_relabel.py b/docs/code/python/doc_codes/guide_contraction_contract_relabel.py new file mode 100644 index 000000000..0dc0ec765 --- /dev/null +++ b/docs/code/python/doc_codes/guide_contraction_contract_relabel.py @@ -0,0 +1,17 @@ +A = cytnx.UniTensor.ones([2,3,4]) \ + .set_rowrank(1) \ + .relabel(["i","j","l"]) \ + .set_name("A") +Are = A.relabel(["i","j","lA"]).set_name("Are") + +B = cytnx.UniTensor.ones([3,2,4,5]) \ + .set_rowrank(2) \ + .relabel(["j","k","l","m"]) \ + .set_name("B") +Bre = B.relabel(["j","k","lB","m"]).set_name("Bre") + +C = cytnx.Contract(Are, Bre).set_name("C") + +A.print_diagram() +B.print_diagram() +C.print_diagram() diff --git a/docs/code/python/doc_codes/guide_contraction_contract_relabels.py b/docs/code/python/doc_codes/guide_contraction_contract_relabels.py deleted file mode 100644 index 4056ab462..000000000 --- a/docs/code/python/doc_codes/guide_contraction_contract_relabels.py +++ /dev/null @@ -1,15 +0,0 @@ -A = cytnx.UniTensor(cytnx.ones([2,3,4]), - rowrank=1, - labels=["i","j","l"]) -Are = A.relabels(["i","j","lA"]) - -B = cytnx.UniTensor(cytnx.ones([3,2,4,5]), - rowrank=2, - labels=["j","k","l","m"]) -Bre = B.relabels(["j","k","lB","m"]) - -C = cytnx.Contract(Are, Bre) - -A.print_diagram() -B.print_diagram() -C.print_diagram() diff --git a/docs/code/python/doc_codes/guide_contraction_ncon_ncon.py b/docs/code/python/doc_codes/guide_contraction_ncon_ncon.py index 5aae7d6eb..97a25646b 100644 --- a/docs/code/python/doc_codes/guide_contraction_ncon_ncon.py +++ b/docs/code/python/doc_codes/guide_contraction_ncon_ncon.py @@ -1,11 +1,10 @@ # Creating A1, A2, M -A1 = cytnx.UniTensor( - cytnx.random.normal( - [2,8,8], mean=0., std=1., - dtype=cytnx.Type.ComplexDouble)) +A1 = cytnx.UniTensor.normal( + [2,8,8], mean=0., std=1., + dtype=cytnx.Type.ComplexDouble) A2 = A1.Conj() -M = cytnx.UniTensor(cytnx.ones([2,2,4,4])) +M = cytnx.UniTensor.ones([2,2,4,4]) # Calling ncon Res = cytnx.ncon([A1,M,A2], diff --git a/docs/code/python/doc_codes/guide_contraction_network_PutUniTensor.py b/docs/code/python/doc_codes/guide_contraction_network_PutUniTensor.py index be1ae0b36..bdab8be74 100644 --- a/docs/code/python/doc_codes/guide_contraction_network_PutUniTensor.py +++ b/docs/code/python/doc_codes/guide_contraction_network_PutUniTensor.py @@ -1,13 +1,13 @@ # initialize tensors -w = cytnx.UniTensor(cytnx.random.normal([2,2,2,2], mean=0., std=1.)) -c0 = cytnx.UniTensor(cytnx.random.normal([8,8], mean=0., std=1.)) -c1 = cytnx.UniTensor(cytnx.random.normal([8,8], mean=0., std=1.)) -c2 = cytnx.UniTensor(cytnx.random.normal([8,8], mean=0., std=1.)) -c3 = cytnx.UniTensor(cytnx.random.normal([8,8], mean=0., std=1.)) -t0 = cytnx.UniTensor(cytnx.random.normal([8,2,8], mean=0., std=1.)) -t1 = cytnx.UniTensor(cytnx.random.normal([8,2,8], mean=0., std=1.)) -t2 = cytnx.UniTensor(cytnx.random.normal([8,2,8], mean=0., std=1.)) -t3 = cytnx.UniTensor(cytnx.random.normal([8,2,8], mean=0., std=1.)) +w = cytnx.UniTensor.normal([2,2,2,2], mean=0., std=1.) +c0 = cytnx.UniTensor.normal([8,8], mean=0., std=1.) +c1 = cytnx.UniTensor.normal([8,8], mean=0., std=1.) +c2 = cytnx.UniTensor.normal([8,8], mean=0., std=1.) +c3 = cytnx.UniTensor.normal([8,8], mean=0., std=1.) +t0 = cytnx.UniTensor.normal([8,2,8], mean=0., std=1.) +t1 = cytnx.UniTensor.normal([8,2,8], mean=0., std=1.) +t2 = cytnx.UniTensor.normal([8,2,8], mean=0., std=1.) +t3 = cytnx.UniTensor.normal([8,2,8], mean=0., std=1.) # initialize network object from ctm.net file net = cytnx.Network("ctm.net") diff --git a/docs/code/python/doc_codes/guide_contraction_network_label_ord-1.py b/docs/code/python/doc_codes/guide_contraction_network_label_ord-1.py index 7c5e43845..94f689ca5 100644 --- a/docs/code/python/doc_codes/guide_contraction_network_label_ord-1.py +++ b/docs/code/python/doc_codes/guide_contraction_network_label_ord-1.py @@ -3,6 +3,6 @@ [2,8,8], mean=0., std=1., dtype=cytnx.Type.ComplexDouble)); -A1.relabels_(["phy","v1","v2"]); +A1.relabel_(["phy","v1","v2"]); A2 = A1.Conj(); -A2.relabels_(["phy*","v1*","v2*"]); +A2.relabel_(["phy*","v1*","v2*"]); diff --git a/docs/code/python/doc_codes/guide_uniten_blocks_get_block.py b/docs/code/python/doc_codes/guide_uniten_blocks_get_block.py index d6cf9e256..031bdd810 100644 --- a/docs/code/python/doc_codes/guide_uniten_blocks_get_block.py +++ b/docs/code/python/doc_codes/guide_uniten_blocks_get_block.py @@ -1,3 +1,2 @@ -# Create an UniTensor from Tensor -T = cytnx.UniTensor(cytnx.ones([3,3])) -print(T.get_block()) +uT = cytnx.UniTensor.ones([3,3]).set_name("uT").relabel(["a","b"]) +print(uT.get_block()) diff --git a/docs/code/python/doc_codes/guide_uniten_create_astype.py b/docs/code/python/doc_codes/guide_uniten_create_astype.py index 24f877999..4b7d85b56 100644 --- a/docs/code/python/doc_codes/guide_uniten_create_astype.py +++ b/docs/code/python/doc_codes/guide_uniten_create_astype.py @@ -1,4 +1,4 @@ -A = cytnx.UniTensor(cytnx.ones([3,4],dtype=cytnx.Type.Int64)) +A = cytnx.UniTensor.ones([3,4],dtype=cytnx.Type.Int64) B = A.astype(cytnx.Type.Double) print(A.dtype_str()) print(B.dtype_str()) diff --git a/docs/code/python/doc_codes/guide_uniten_create_complex.py b/docs/code/python/doc_codes/guide_uniten_create_complex.py index 7d868dcf6..fe60b2faa 100644 --- a/docs/code/python/doc_codes/guide_uniten_create_complex.py +++ b/docs/code/python/doc_codes/guide_uniten_create_complex.py @@ -1,6 +1,7 @@ -# initialize a tensor with complex data type -T = cytnx.zeros([2,3,4], dtype=cytnx.Type.ComplexDouble) -# convert to UniTensor -uT = cytnx.UniTensor(T) +# initialize a UniTensor with complex data type +uT = cytnx.UniTensor.zeros([2,3,4], dtype=cytnx.Type.ComplexDouble) \ + .set_name("uT").relabel(["a", "b", "c"]) # randomize the elements with a uniform distribution in the range [low, high] cytnx.random.uniform_(uT, low = -1., high = 1.) +# visualize UniTensor +uT.print_diagram() diff --git a/docs/code/python/doc_codes/guide_uniten_create_from_generator.py b/docs/code/python/doc_codes/guide_uniten_create_from_generator.py new file mode 100644 index 000000000..4aa6b9942 --- /dev/null +++ b/docs/code/python/doc_codes/guide_uniten_create_from_generator.py @@ -0,0 +1,23 @@ +# Create a rank-3 UniTensor with shape [2,3,4] +# 1) initialized by zeros, using method chaining (preferred) +uT0 = cytnx.UniTensor.zeros([2,3,4]).relabel(["a","b","c"]).set_name("all zeros") + +# 2) initialized by ones, using initializer arguments +uT1 = cytnx.UniTensor.ones([2,3,4], ["a","b","c"], name="all ones") + +# 3) initialize by normally distributed elements with mean value 0 and standard deviation 1 +uTg = cytnx.UniTensor.normal([2,3,4],0,1).relabel(["a","b","c"]).set_name("Gaussian") + +# 4) initialize by uniformly distributed elements between 0 and 100 +uTu = cytnx.UniTensor.uniform([2,3,4],0,100).relabel(["a","b","c"]).set_name("random uniform") + +# 5) initialize with subsequent numbers from 0 to 2*3*4 - 1 = 23 +uTarr0 = cytnx.UniTensor.arange(2*3*4).reshape(2,3,4).set_rowrank(1) \ + .relabel(["a","b","c"]).set_name("range 0, 1, ..., 23") + +# 6) initialize with subsequent numbers from starting from 5 to 53 with a stepwidth of 2 +uTarr5 = cytnx.UniTensor.arange(5, 53, 2).reshape(2,3,4).set_rowrank(1) \ + .relabel(["a","b","c"]).set_name("range 5, 7, ...., 53") + +# Create a 4x4 identity matrix +uTe = cytnx.UniTensor.eye(4, ["left","right"], name="identity") diff --git a/docs/code/python/doc_codes/guide_uniten_create_from_generators_print_diagram.py b/docs/code/python/doc_codes/guide_uniten_create_from_generators_print_diagram.py new file mode 100644 index 000000000..834d736fd --- /dev/null +++ b/docs/code/python/doc_codes/guide_uniten_create_from_generators_print_diagram.py @@ -0,0 +1,2 @@ +uT0.print_diagram() +uTe.print_diagram() diff --git a/docs/code/python/doc_codes/guide_uniten_create_print_diagram.py b/docs/code/python/doc_codes/guide_uniten_create_print_diagram.py deleted file mode 100644 index 7596fb3a2..000000000 --- a/docs/code/python/doc_codes/guide_uniten_create_print_diagram.py +++ /dev/null @@ -1 +0,0 @@ -uT.print_diagram() diff --git a/docs/code/python/doc_codes/guide_uniten_create_to.py b/docs/code/python/doc_codes/guide_uniten_create_to.py index 65dbf6c20..2db39a7af 100644 --- a/docs/code/python/doc_codes/guide_uniten_create_to.py +++ b/docs/code/python/doc_codes/guide_uniten_create_to.py @@ -1,4 +1,4 @@ -A = cytnx.UniTensor(cytnx.ones([2,2])) #on CPU +A = cytnx.UniTensor.ones([2,2]) #on CPU B = A.to(cytnx.Device.cuda+0) print(A) # on CPU print(B) # on GPU diff --git a/docs/code/python/doc_codes/guide_uniten_elements_at_get.py b/docs/code/python/doc_codes/guide_uniten_elements_at_get.py index e399a1a2a..266cd29f3 100644 --- a/docs/code/python/doc_codes/guide_uniten_elements_at_get.py +++ b/docs/code/python/doc_codes/guide_uniten_elements_at_get.py @@ -1,2 +1,2 @@ -T = cytnx.UniTensor(cytnx.arange(9).reshape(3,3)) +T = cytnx.UniTensor.arange(9).reshape(3,3) print(T.at([0,2]).value) diff --git a/docs/code/python/doc_codes/guide_uniten_elements_at_set.py b/docs/code/python/doc_codes/guide_uniten_elements_at_set.py index 05ecb4582..71d49328d 100644 --- a/docs/code/python/doc_codes/guide_uniten_elements_at_set.py +++ b/docs/code/python/doc_codes/guide_uniten_elements_at_set.py @@ -1,4 +1,4 @@ -T = cytnx.UniTensor(cytnx.arange(9).reshape(3,3)) +T = cytnx.UniTensor.arange(9).reshape(3,3) print(T.at([0,2]).value) T.at([0,2]).value = 7 print(T.at([0,2]).value) diff --git a/docs/code/python/doc_codes/guide_uniten_io_Save.py b/docs/code/python/doc_codes/guide_uniten_io_Save.py index a04a1507e..51b759b2c 100644 --- a/docs/code/python/doc_codes/guide_uniten_io_Save.py +++ b/docs/code/python/doc_codes/guide_uniten_io_Save.py @@ -1,9 +1,9 @@ # Create an untagged unitensor and save -T1 = cytnx.UniTensor(cytnx.zeros([4,4]), +T1 = cytnx.UniTensor.zeros([4,4], rowrank=1, labels=["a","b"], name="Untagged_Unitensor") -T1.Save("Untagged_ut") +T1.Save("Untagged_ut.cytnx") # Create an unitensor with symmetry and save bd = cytnx.Bond(cytnx.BD_IN,[[1],[0],[-1]],[1,2,1]) @@ -12,4 +12,4 @@ labels=["a","b"], name="symmetric_Unitensor") T2.put_block(cytnx.ones([2,2]),1) -T2.Save("sym_ut") +T2.Save("sym_ut.cytnx") diff --git a/docs/code/python/doc_codes/guide_uniten_labels_relabel_.py b/docs/code/python/doc_codes/guide_uniten_labels_relabel_.py index a222a2de4..1e36067b8 100644 --- a/docs/code/python/doc_codes/guide_uniten_labels_relabel_.py +++ b/docs/code/python/doc_codes/guide_uniten_labels_relabel_.py @@ -1,8 +1,8 @@ -T = cytnx.arange(2*3*4).reshape(2,3,4) -uT = cytnx.UniTensor(T) +uT = cytnx.UniTensor.arange(2*3*4).reshape(2,3,4) \ + .set_rowrank(1).set_name("uT") uT.relabel_(1,"xx") uT.print_diagram() -uT.relabels_(["a","b","c"]) +uT.relabel_(["a","b","c"]) uT.print_diagram() diff --git a/docs/code/python/doc_codes/guide_uniten_manipulation_Transpose.py b/docs/code/python/doc_codes/guide_uniten_manipulation_Transpose.py index 3ac88ef68..347b44b77 100644 --- a/docs/code/python/doc_codes/guide_uniten_manipulation_Transpose.py +++ b/docs/code/python/doc_codes/guide_uniten_manipulation_Transpose.py @@ -1,4 +1,4 @@ -T = cytnx.UniTensor(cytnx.ones([5,5,5]), rowrank = 2, labels = ["a","b","c"]) +T = cytnx.UniTensor.ones([5,5,5], rowrank = 2, labels = ["a","b","c"]) T.print_diagram() print("Rowrank of T = ", T.rowrank()) T.Transpose().print_diagram() # print the transposed T diff --git a/docs/code/python/doc_codes/guide_uniten_manipulation_Transpose_tagged.py b/docs/code/python/doc_codes/guide_uniten_manipulation_Transpose_tagged.py index 67210098f..f7545e395 100644 --- a/docs/code/python/doc_codes/guide_uniten_manipulation_Transpose_tagged.py +++ b/docs/code/python/doc_codes/guide_uniten_manipulation_Transpose_tagged.py @@ -1,9 +1,10 @@ bd1 = cytnx.Bond(cytnx.BD_IN,[[1],[-1]],[1,1]) -bd2 = cytnx.Bond(cytnx.BD_IN,[[1],[-1]],[1,1]) +bd2 = cytnx.Bond(cytnx.BD_OUT,[[1],[-1]],[1,1]) bd3 = cytnx.Bond(cytnx.BD_OUT,[[2],[0],[0],[-2]],[1,1,1,1]) - -T = cytnx.UniTensor([bd1,bd2,bd3], rowrank = 2, labels = ["a","b","c"]) -T.print_diagram() -print("Rowrank of T = ", T.rowrank()) -T.Transpose().print_diagram() # print the transposed T -print("Rowrank of transposed T = ", T.Transpose().rowrank()) +uT = cytnx.UniTensor([bd1,bd2,bd3]).set_rowrank(2) \ + .relabel(["a","b","c"]).set_name("uT") +uT.print_diagram() +print("Rowrank of T = ", uT.rowrank()) +uTt = uT.Transpose().set_name("uT transposed") +uTt.print_diagram() # print the transposed uT +print("Rowrank of transposed T = ", uTt.rowrank()) diff --git a/docs/code/python/doc_codes/guide_uniten_manipulation_combine.py b/docs/code/python/doc_codes/guide_uniten_manipulation_combine.py index 597f09d66..9a7e72892 100644 --- a/docs/code/python/doc_codes/guide_uniten_manipulation_combine.py +++ b/docs/code/python/doc_codes/guide_uniten_manipulation_combine.py @@ -1,12 +1,10 @@ -from cytnx import Bond, BD_IN, BD_OUT, Qs, Symmetry -# bond1 = Bond(BD_IN,[[2,0], [4,1]],[3,5],[Symmetry.U1(), Symmetry.Zn(2)]) -# bond2 = Bond(BD_IN,[Qs(2,0)>>3, Qs(4,1)>>5],[Symmetry.U1(), Symmetry.Zn(2)]) bd1 = cytnx.Bond(cytnx.BD_IN,[[1],[-1]],[1,1]) bd2 = cytnx.Bond(cytnx.BD_IN,[[1],[-1]],[1,1]) bd3 = cytnx.Bond(cytnx.BD_OUT,[[2],[0],[0],[-2]],[1,1,1,1]) -ut = cytnx.UniTensor([bd1,bd2,bd3],rowrank=2) -print(ut) +ut = cytnx.UniTensor([bd1,bd2,bd3],rowrank=2) \ + .relabel(["a", "b", "c"]).set_name("uT") -ut.combineBonds([0,1]) +print(ut) +ut.combineBonds([0,1], True) print(ut) diff --git a/docs/code/python/doc_codes/guide_uniten_manipulation_reshape.py b/docs/code/python/doc_codes/guide_uniten_manipulation_reshape.py index bf8858a5e..b3c8947b1 100644 --- a/docs/code/python/doc_codes/guide_uniten_manipulation_reshape.py +++ b/docs/code/python/doc_codes/guide_uniten_manipulation_reshape.py @@ -1,3 +1,4 @@ -T = cytnx.UniTensor(cytnx.arange(12).reshape(4,3)) +T = cytnx.UniTensor.arange(12).reshape(4,3) \ + .relabel(["a", "b"]).set_name("T") T.reshape_(2,3,2) T.print_diagram() diff --git a/docs/code/python/doc_codes/guide_uniten_manipulation_rowrank.py b/docs/code/python/doc_codes/guide_uniten_manipulation_rowrank.py index f8a67960b..d23b3c7b6 100644 --- a/docs/code/python/doc_codes/guide_uniten_manipulation_rowrank.py +++ b/docs/code/python/doc_codes/guide_uniten_manipulation_rowrank.py @@ -1,6 +1,8 @@ # set the rowrank to be 2. -T = cytnx.UniTensor(cytnx.ones([5,5,5,5,5]), rowrank = 2) -T.print_diagram() +uT = cytnx.UniTensor.ones([5,5,5,5,5]).set_rowrank(2) \ + .relabel(["a", "b", "c", "d", "e"]) \ + .set_name("uT") +uT.print_diagram() -T.set_rowrank(3) # modify the rowrank. -T.print_diagram() +uT.set_rowrank_(3) # modify the rowrank. +uT.print_diagram() diff --git a/docs/code/python/doc_codes/guide_uniten_print_init.py b/docs/code/python/doc_codes/guide_uniten_print_init.py index 73bcbcf9a..f58318591 100644 --- a/docs/code/python/doc_codes/guide_uniten_print_init.py +++ b/docs/code/python/doc_codes/guide_uniten_print_init.py @@ -1,6 +1,6 @@ -uT = cytnx.UniTensor(cytnx.ones([2,3,4]), - name="untagged tensor", - labels=["a","b","c"]) +uT = cytnx.UniTensor.ones([2,3,4]) \ + .relabel(["a","b","c"]) \ + .set_name("untagged tensor") bond_d = cytnx.Bond( cytnx.BD_IN, [cytnx.Qs(1)>>1, cytnx.Qs(-1)>>1], @@ -19,10 +19,10 @@ bond_g = cytnx.Bond(2,cytnx.BD_OUT) bond_h = cytnx.Bond(2,cytnx.BD_IN) -Tsymm = cytnx.UniTensor( - [bond_d, bond_e, bond_f], - name="symm. tensor", labels=["d","e","f"]) +Tsymm = cytnx.UniTensor([bond_d, bond_e, bond_f]) \ + .relabel(["d","e","f"]) \ + .set_name("symm. tensor") -Tdiag = cytnx.UniTensor( - [bond_g, bond_h], is_diag=True, - name="diag tensor", labels=["g","h"]) +Tdiag = cytnx.UniTensor([bond_g, bond_h], is_diag=True) \ + .relabel(["g","h"]) \ + .set_name("diag tensor") diff --git a/docs/code/python/doc_codes/guide_xlinalg_Eig.py b/docs/code/python/doc_codes/guide_xlinalg_Eig.py index 3d776e693..71bb53dc2 100644 --- a/docs/code/python/doc_codes/guide_xlinalg_Eig.py +++ b/docs/code/python/doc_codes/guide_xlinalg_Eig.py @@ -1,12 +1,18 @@ -# Create a rank-2 Tensor which represents a square matrix -T = cytnx.arange(4*4).reshape(4,4) +# Create a rank-2 UniTensor which represents a square matrix +uT = cytnx.UniTensor.arange(4*4).reshape(4,4) \ + .set_rowrank(1) \ + .relabel(["in","out"]) \ + .set_name("initial tensor") # Eigenvalue decomposition -eigvals, V = cytnx.linalg.Eig(T) -# Create UniTensors corresponding to V, D, Inv(V), T -uV=cytnx.UniTensor(V, labels=["a","b"], name="uV") -uD=cytnx.UniTensor(eigvals, is_diag=True, labels=["b","c"], name="uD") -uV_inv=cytnx.UniTensor(cytnx.linalg.InvM(V), labels=["c","d"], name="Inv(uV)") -uT=cytnx.UniTensor(T, labels=["a","d"], name="uT") +uD, uV = cytnx.linalg.Eig(uT) +# Create uV, uD, uV_inv = Inv(V) with names and labels +uV.relabel_(["in","a"]).set_name("eigenvectors") +uD.relabel_(["a","b"]).set_name("eigenvalues") +uV_inv = cytnx.linalg.InvM(uV).relabel_(["b","out"]) \ + .set_name("inverted eigenvectors") # Compare uT with Uv * uD * uV_inv -diff = cytnx.Contracts([uV,uD,uV_inv]) - uT -print(diff.Norm()) # 1.71516e-14 +uT_new = cytnx.Contract([uV,uD,uV_inv]) \ + .permute(uT.labels()) \ + .set_name("reconstruction from eigenvalues") +diff = uT_new - uT +print(diff.Norm()) # 1.53421e-14 diff --git a/docs/code/python/doc_codes/guide_xlinalg_Qr.py b/docs/code/python/doc_codes/guide_xlinalg_Qr.py index b03d8c320..8afb68953 100644 --- a/docs/code/python/doc_codes/guide_xlinalg_Qr.py +++ b/docs/code/python/doc_codes/guide_xlinalg_Qr.py @@ -1,4 +1,4 @@ -uT = cytnx.UniTensor(cytnx.ones([5,5,5,5,5]), rowrank = 3, name="uT") +uT = cytnx.UniTensor.ones([5,5,5,5,5], rowrank = 3, name="uT") Q, R = cytnx.linalg.Qr(uT) Q.set_name("Q") R.set_name("R") diff --git a/docs/code/python/doc_codes/guide_xlinalg_Svd.py b/docs/code/python/doc_codes/guide_xlinalg_Svd.py index 2d12f2cec..70818ff03 100644 --- a/docs/code/python/doc_codes/guide_xlinalg_Svd.py +++ b/docs/code/python/doc_codes/guide_xlinalg_Svd.py @@ -1,10 +1,9 @@ -T = cytnx.UniTensor(cytnx.ones([5,5,5,5,5]), rowrank = 3) +T = cytnx.UniTensor.ones([5,5,5,5,5], rowrank = 3) S, U, Vt = cytnx.linalg.Svd(T) U.set_name('U') S.set_name('S') Vt.set_name('Vt') - T.print_diagram() S.print_diagram() U.print_diagram() diff --git a/docs/code/python/doc_codes/guide_xlinalg_Svd_truncate.py b/docs/code/python/doc_codes/guide_xlinalg_Svd_truncate.py index b03d45c35..809e6f1bf 100644 --- a/docs/code/python/doc_codes/guide_xlinalg_Svd_truncate.py +++ b/docs/code/python/doc_codes/guide_xlinalg_Svd_truncate.py @@ -1,4 +1,4 @@ -T = cytnx.UniTensor(cytnx.ones([5,5,5,5,5]), rowrank = 3) +T = cytnx.UniTensor.ones([5,5,5,5,5], rowrank = 3) S1, _, _ = cytnx.linalg.Svd(Tin = T) print(S1) S2, _, _, err = cytnx.linalg.Svd_truncate(Tin = T, keepdim = 10, err = 1e-12, is_UvT = True, return_err = 1) diff --git a/docs/code/python/doc_codes/guide_xlinalg_Svd_verify.py b/docs/code/python/doc_codes/guide_xlinalg_Svd_verify.py index 6364f0219..d97845b59 100644 --- a/docs/code/python/doc_codes/guide_xlinalg_Svd_verify.py +++ b/docs/code/python/doc_codes/guide_xlinalg_Svd_verify.py @@ -1,2 +1,2 @@ -Tsymm_diff=T-cytnx.Contracts([U,S,Vt]) +Tsymm_diff=T-cytnx.Contract([U,S,Vt]) print(Tsymm_diff.Norm()/T.Norm()) diff --git a/docs/code/python/outputs/guide_contraction_contract_Contract.out b/docs/code/python/outputs/guide_contraction_contract_Contract.out index fca2ca674..ce6c0fae0 100644 --- a/docs/code/python/outputs/guide_contraction_contract_Contract.out +++ b/docs/code/python/outputs/guide_contraction_contract_Contract.out @@ -1,5 +1,5 @@ ----------------------- -tensor Name : +tensor Name : A tensor Rank : 3 block_form : False is_diag : False @@ -12,7 +12,7 @@ on device : cytnx device: CPU \ / --------- ----------------------- -tensor Name : +tensor Name : B tensor Rank : 4 block_form : False is_diag : False diff --git a/docs/code/python/outputs/guide_contraction_contract_Contracts.out b/docs/code/python/outputs/guide_contraction_contract_Contracts.out index 0801534f3..02dfa9ae8 100644 --- a/docs/code/python/outputs/guide_contraction_contract_Contracts.out +++ b/docs/code/python/outputs/guide_contraction_contract_Contracts.out @@ -1,5 +1,5 @@ ----------------------- -tensor Name : +tensor Name : Res tensor Rank : 6 block_form : False is_diag : False diff --git a/docs/code/python/outputs/guide_contraction_contract_relabels.out b/docs/code/python/outputs/guide_contraction_contract_relabel.out similarity index 94% rename from docs/code/python/outputs/guide_contraction_contract_relabels.out rename to docs/code/python/outputs/guide_contraction_contract_relabel.out index fca2ca674..22f4579e4 100644 --- a/docs/code/python/outputs/guide_contraction_contract_relabels.out +++ b/docs/code/python/outputs/guide_contraction_contract_relabel.out @@ -1,5 +1,5 @@ ----------------------- -tensor Name : +tensor Name : A tensor Rank : 3 block_form : False is_diag : False @@ -12,7 +12,7 @@ on device : cytnx device: CPU \ / --------- ----------------------- -tensor Name : +tensor Name : B tensor Rank : 4 block_form : False is_diag : False @@ -25,7 +25,7 @@ on device : cytnx device: CPU \ / --------- ----------------------- -tensor Name : +tensor Name : C tensor Rank : 5 block_form : False is_diag : False diff --git a/docs/code/python/outputs/guide_uniten_create_from_generators_print_diagram.out b/docs/code/python/outputs/guide_uniten_create_from_generators_print_diagram.out new file mode 100644 index 000000000..d89a2428b --- /dev/null +++ b/docs/code/python/outputs/guide_uniten_create_from_generators_print_diagram.out @@ -0,0 +1,24 @@ +----------------------- +tensor Name : all zeros +tensor Rank : 3 +block_form : False +is_diag : False +on device : cytnx device: CPU + --------- + / \ + a ____| 2 3 |____ b + | | + | 4 |____ c + \ / + --------- +----------------------- +tensor Name : identity +tensor Rank : 2 +block_form : False +is_diag : False +on device : cytnx device: CPU + --------- + / \ + left ____| 4 4 |____ right + \ / + --------- diff --git a/docs/code/python/outputs/guide_uniten_create_from_tensor.out b/docs/code/python/outputs/guide_uniten_create_from_tensor.out deleted file mode 100644 index e69de29bb..000000000 diff --git a/docs/code/python/outputs/guide_uniten_create_print_diagram.out b/docs/code/python/outputs/guide_uniten_create_print_diagram.out index a52b837a0..cd2af62ca 100644 --- a/docs/code/python/outputs/guide_uniten_create_print_diagram.out +++ b/docs/code/python/outputs/guide_uniten_create_print_diagram.out @@ -1,5 +1,5 @@ ----------------------- -tensor Name : +tensor Name : zeros tensor Rank : 3 block_form : False is_diag : False diff --git a/docs/code/python/outputs/guide_uniten_labels_relabel.out b/docs/code/python/outputs/guide_uniten_labels_relabel.out index 7d4a23b27..a065c7a1b 100644 --- a/docs/code/python/outputs/guide_uniten_labels_relabel.out +++ b/docs/code/python/outputs/guide_uniten_labels_relabel.out @@ -1,5 +1,5 @@ ----------------------- -tensor Name : +tensor Name : uT tensor Rank : 3 block_form : False is_diag : False @@ -12,7 +12,7 @@ on device : cytnx device: CPU \ / --------- ----------------------- -tensor Name : +tensor Name : uT tensor Rank : 3 block_form : False is_diag : False diff --git a/docs/code/python/outputs/guide_uniten_labels_relabel_.out b/docs/code/python/outputs/guide_uniten_labels_relabel_.out index fb0f00dce..181da2ae0 100644 --- a/docs/code/python/outputs/guide_uniten_labels_relabel_.out +++ b/docs/code/python/outputs/guide_uniten_labels_relabel_.out @@ -1,5 +1,5 @@ ----------------------- -tensor Name : +tensor Name : uT tensor Rank : 3 block_form : False is_diag : False @@ -12,7 +12,7 @@ on device : cytnx device: CPU \ / --------- ----------------------- -tensor Name : +tensor Name : uT tensor Rank : 3 block_form : False is_diag : False diff --git a/docs/code/python/outputs/guide_uniten_manipulation_Transpose_tagged.out b/docs/code/python/outputs/guide_uniten_manipulation_Transpose_tagged.out index 04c3b1a1e..5f805efb4 100644 --- a/docs/code/python/outputs/guide_uniten_manipulation_Transpose_tagged.out +++ b/docs/code/python/outputs/guide_uniten_manipulation_Transpose_tagged.out @@ -1,34 +1,34 @@ ----------------------- -tensor Name : +tensor Name : uT tensor Rank : 3 contiguous : True -valid blocks : 6 -is diag : False +valid blocks: 6 +is diag : False on device : cytnx device: CPU row col ----------- | | a -->| 2 4 |--> c | | - b -->| 2 | + b <--| 2 | | | ----------- Rowrank of T = 2 ----------------------- -tensor Name : +tensor Name : uT transposed tensor Rank : 3 -contiguous : True -valid blocks : 6 -is diag : False +contiguous : False +valid blocks: 6 +is diag : False on device : cytnx device: CPU row col ----------- | | - a *<--| 2 4 |<--* c + c -->| 4 2 |--> a | | - b *<--| 2 | + | 2 |<-- b | | ----------- -Rowrank of transposed T = 2 +Rowrank of transposed T = 1 diff --git a/docs/code/python/outputs/guide_uniten_manipulation_combine.out b/docs/code/python/outputs/guide_uniten_manipulation_combine.out index b9ea43b83..df85973ba 100644 --- a/docs/code/python/outputs/guide_uniten_manipulation_combine.out +++ b/docs/code/python/outputs/guide_uniten_manipulation_combine.out @@ -1,5 +1,6 @@ -------- start of print --------- -Tensor name: +Tensor name: uT +Tensor type: Block braket_form : True is_diag : False [OVERALL] contiguous : True @@ -114,7 +115,8 @@ Shape : (1,1,1) -------- start of print --------- -Tensor name: +Tensor name: uT +Tensor type: Block braket_form : False is_diag : False [OVERALL] contiguous : True diff --git a/docs/code/python/outputs/guide_uniten_manipulation_reshape.out b/docs/code/python/outputs/guide_uniten_manipulation_reshape.out index cdbb762cb..add2bba5d 100644 --- a/docs/code/python/outputs/guide_uniten_manipulation_reshape.out +++ b/docs/code/python/outputs/guide_uniten_manipulation_reshape.out @@ -1,5 +1,5 @@ ----------------------- -tensor Name : +tensor Name : T tensor Rank : 3 block_form : False is_diag : False diff --git a/docs/code/python/outputs/guide_uniten_manipulation_rowrank.out b/docs/code/python/outputs/guide_uniten_manipulation_rowrank.out index 763f3dac4..be120b597 100644 --- a/docs/code/python/outputs/guide_uniten_manipulation_rowrank.out +++ b/docs/code/python/outputs/guide_uniten_manipulation_rowrank.out @@ -1,30 +1,30 @@ ----------------------- -tensor Name : +tensor Name : uT tensor Rank : 5 block_form : False is_diag : False on device : cytnx device: CPU --------- / \ - 0 ____| 5 5 |____ 2 + a ____| 5 5 |____ c | | - 1 ____| 5 5 |____ 3 + b ____| 5 5 |____ d | | - | 5 |____ 4 + | 5 |____ e \ / --------- ----------------------- -tensor Name : +tensor Name : uT tensor Rank : 5 block_form : False is_diag : False on device : cytnx device: CPU --------- / \ - 0 ____| 5 5 |____ 2 + a ____| 5 5 |____ d | | - 1 ____| 5 5 |____ 3 + b ____| 5 5 |____ e | | - | 5 |____ 4 + c ____| 5 | \ / --------- diff --git a/docs/justfile b/docs/justfile index 4d6d5da5c..663f6cfc8 100644 --- a/docs/justfile +++ b/docs/justfile @@ -3,3 +3,6 @@ doc: doc-vers: sphinx-multiversion source/ build + +latex_doc: + sphinx-build -M latexpdf source/ build diff --git a/docs/pyproject.toml b/docs/pyproject.toml index 7e95bf87a..09af9565e 100644 --- a/docs/pyproject.toml +++ b/docs/pyproject.toml @@ -10,7 +10,7 @@ dependencies = [ "sphinxcontrib-bibtex>=2.6.2", "breathe>=4.35.0", "sphinxcontrib-jquery>=4.1", - #"sphinxbootstrap4theme>=0.6.0", + "sphinxbootstrap4theme>=0.6.0", "setuptools>=72.1.0", "sphinx-multiversion>=0.2.4", "furo>=2024.8.6", diff --git a/docs/redirect.py b/docs/redirect.py index b05905ae0..d424c3fb7 100644 --- a/docs/redirect.py +++ b/docs/redirect.py @@ -8,7 +8,7 @@ """ -line1 = r' ' + "\n" +line1 = r' ' + "\n" line2 = r' ' + "\n" end = """ diff --git a/docs/source/Developer.rst b/docs/source/Developer.rst index 902dcfb6b..8a398ea46 100644 --- a/docs/source/Developer.rst +++ b/docs/source/Developer.rst @@ -1,8 +1,44 @@ Developer ================= -**Kai-Hsin Wu, Ph.D.** ++-------------+--------------------+---------------------+ +| Creator | Affiliation | Email | ++-------------+--------------------+---------------------+ +| Kai-Hsin Wu | QuEra, Boston, USA | kaihsinwu@gmail.com | ++-------------+--------------------+---------------------+ -Contact: ++-----------------+-----------------+------------------------------------+ +| Developers | Affiliation | Roles | ++-----------------+-----------------+------------------------------------+ +| Chang-Teng Lin | NTU, Taiwan | major maintainer and developer | ++-----------------+-----------------+------------------------------------+ +| Ke Hsu | NTU, Taiwan | major maintainer and developer | ++-----------------+-----------------+------------------------------------+ +| Ivana Gyro | NTU, Taiwan | major maintainer and developer | ++-----------------+-----------------+------------------------------------+ +| Hao-Ti Hung | NTU, Taiwan | documentation and linalg | ++-----------------+-----------------+------------------------------------+ +| Manuel Schneider| NYCU, Taiwan | developer, fermions, documentation | ++-----------------+-----------------+------------------------------------+ +| Ying-Jer Kao | NTU, Taiwan | project manager, setuptool, cmake | ++-----------------+-----------------+------------------------------------+ -* email: kaihsinwu@gmail.com ++-----------------+---------------+ +| Contributors | Affiliation | ++-----------------+---------------+ +| PoChung Chen | NTHU, Taiwan | ++-----------------+---------------+ +| Chia-Min Chung | NSYSU, Taiwan | ++-----------------+---------------+ +| Ian McCulloch | NTHU, Taiwan | ++-----------------+---------------+ +| Yen-Hsin Wu | NTU, Taiwan | ++-----------------+---------------+ +| Po-Kwan Wu | OSU, USA | ++-----------------+---------------+ +| Wen-Han Kao | UMN, USA | ++-----------------+---------------+ +| Yu-Hsueh Chen | NTU, Taiwan | ++-----------------+---------------+ +| Yu-Cheng Lin | NTU, Taiwan | ++-----------------+---------------+ diff --git a/docs/source/Guide.rst b/docs/source/Guide.rst index 779d81bee..23b8e9b4b 100644 --- a/docs/source/Guide.rst +++ b/docs/source/Guide.rst @@ -42,13 +42,53 @@ This is equivalent in C++ to: **Now we are ready to start using cytnx!** -Continue reading: +Overview +************************ + +This is a comprehensive guide to explain the usage and features of Cytnx. It covers fundamental concepts, basic structures, and high-level objects. While this guide can be read from start to end for a comprehensive understanding, most users will be interested in specific topics to start with: + +Start reading +--------------- + +**Beginners** are advised to start with the following chapters: + +:ref:`Conventions` explains the basic concepts of the library such as naming conventions and the unified C++/Python framework. This chapter is therefore essential for all users. + +:ref:`Tensor notation` introduces the abstract objects that Cytnx builds on, tensors. A graphical notation is introduced for convenience. + +:ref:`UniTensor` concerns the object that users will most frequently use: a 'UniTensor', which contains not only the tensor elements but also further metadata and methods to characterize and manipulate the tensor. Typical tensor network implementations will be based on this object. + +:ref:`Tensor decomposition` explains how a tensor can be split into a product of several tensors by a singular value decompositon, eigenvalue decomposition, or QR decomposition. + +:ref:`Iterative solver` concerns efficient iterative methods, for example for obtaining the smallest eigenvalue. + +:ref:`Linear algebra` contains a list of further linear algebra functions that can be applied to a tensor. + +Advanced topics +---------------- + +The remaining sections cover **specific topics** or the **backend** of Cytnx: + +:ref:`Device` is the object that defines where the data is stored, and is important for parallel and distributed computing on GPUs and CPUs. + +:ref:`Tensor` contains the data together with basic information about the indices, such as the shape of the tensor. This object is similar to numpy.arrays or torch.Tensor. + +:ref:`Storage` concerns the basic memory access. + +:ref:`Scalar` is an elementary object that refers to a number, which can have different data types. + +:ref:`Common APIs` lists methods that several objects in Cytnx have in common. + + + +Contents +************************ .. toctree:: :maxdepth: 3 :numbered: - guide/behavior.rst + guide/conventions.rst guide/Device.rst guide/basic_obj/Tensor.rst guide/basic_obj/Storage.rst @@ -56,7 +96,7 @@ Continue reading: guide/TNotation.rst guide/uniten.rst guide/contraction.rst - guide/linalg.rst + guide/decomposition.rst guide/itersol.rst - guide/xlinalg.rst + guide/linalg.rst guide/common.rst diff --git a/docs/source/Intro.rst b/docs/source/Intro.rst index 6fba4860b..0f71b4c79 100644 --- a/docs/source/Intro.rst +++ b/docs/source/Intro.rst @@ -25,7 +25,10 @@ Features Further references ---------------------------- The source code can be found on github: - https://github.com/kaihsin/Cytnx + https://github.com/Cytnx-dev/Cytnx A technical documentation of the namespaces and classes is available here: - https://kaihsin.github.io/Cytnx/docs/html/index.html + https://cytnx-dev.github.io/Cytnx_doc/api_build/html/index.html + + This user guide is available online: + https://cytnx-dev.github.io/Cytnx_doc/html/index.html diff --git a/docs/source/adv_install.rst b/docs/source/adv_install.rst index 971927bab..6bf0177a0 100644 --- a/docs/source/adv_install.rst +++ b/docs/source/adv_install.rst @@ -34,15 +34,11 @@ In addition, you might want to install the following optional dependencies if yo * Nvidia cuTensor library * Nvidia cuQuantum library -[MAGMA] - -* MAGMA 2.7 currently required strict cuda version v11.8 - [Python API] -* python >= 3.6 -* pybind11 +* python >= 3.9 +* pybind11 >= 3.0.0 * python-graphviz * graphviz * numpy @@ -73,7 +69,7 @@ There are two methods how you can set-up all the dependencies before starting th .. code-block:: shell $conda config --add channels conda-forge - $conda create --name cytnx python=3.8 _openmp_mutex=*=*_llvm + $conda create --name cytnx python=3.9 _openmp_mutex=*=*_llvm $conda activate cytnx $conda upgrade --all @@ -83,13 +79,13 @@ There are two methods how you can set-up all the dependencies before starting th .. code-block:: shell $conda config --add channels conda-forge - $conda create --name cytnx python=3.8 llvm-openmp + $conda create --name cytnx python=3.9 llvm-openmp $conda activate cytnx $conda upgrade --all .. Note:: - 1. The python=3.8 indicates the Python version you want to use. Generally, Cytnx is tested with 3.7/3.8/3.9. You can replace this with the version you want to use. + 1. The python=3.9 indicates the Python version you want to use. Generally, Cytnx is tested with 3.9+. You can replace this with the version you want to use. 2. The last line is updating all the libraries such that they are all dependent on the conda-forge channel. @@ -97,7 +93,7 @@ There are two methods how you can set-up all the dependencies before starting th .. code-block:: shell - $conda install cmake make boost libboost git compilers numpy openblas arpack pybind11 beartype + $conda install cmake make boost libboost git compilers numpy openblas arpack pybind11 beartype arpack .. Note:: @@ -107,7 +103,7 @@ There are two methods how you can set-up all the dependencies before starting th .. code-block:: shell - $conda install cmake make boost libboost git compilers numpy mkl mkl-include mkl-service arpack pybind11 libblas=*=*mkl beartype + $conda install cmake make boost libboost git compilers numpy mkl mkl-include mkl-service arpack pybind11 libblas=*=*mkl beartype arpack 3. After the installation, an automated test based on gtest and benchmark can be run. This option needs to be activated in the install script. In this case, gtest needs to be installed as well: @@ -167,13 +163,22 @@ Compiling process ------------------- Once you installed all the dependencies, it is time to start building the Cytnx source code. -**Option A. Compiling with script** +**Option A. Using cmake preset** + +We support the ``cmake-presets`` tool for building the library starting from version +v1.1.0. You can find the configuration file in ``CMakePresets.json``. For example, +if you choose the ``openblas-cpu`` preset, use the following command to build: -Starting from v0.7.6a, Cytnx provides a shell script **Install.sh**, which contains all the cmake arguments as a check list. To install, edit the script, un-comment and modify custom parameters in the corresponding lines. Then, simply execute this script: .. code-block:: shell - $sh Install.sh + $cmake --preset openblas-cpu + $cmake --build --preset openblas-cpu +.. note:: + + If you are using Visual Studio Code, you can also take advantage of the + *CMake Tools* extension, which provides built-in support for selecting and + running CMake presets directly from the editor. **Option B. Using cmake install** @@ -185,7 +190,7 @@ Please see the following steps for the standard cmake compiling process and all .. code-block:: shell - $make build + $mkdir build $cd build 2. Use cmake to automatically generate compiling files: @@ -199,7 +204,7 @@ The following are the available compiling option flags that you can specify in * +------------------------+-------------------+------------------------------------+ | options | default | description | +------------------------+-------------------+------------------------------------+ -| -DCMAME_INSTALL_PREFIX | /usr/local/cytnx | Install destination of the library | +| -DCMAKE_INSTALL_PREFIX | /usr/local/cytnx | Install destination of the library | +------------------------+-------------------+------------------------------------+ | -DBUILD_PYTHON | ON | Compile and install Python API | +------------------------+-------------------+------------------------------------+ @@ -290,7 +295,7 @@ In the case that Cytnx is installed locally from binary build, not from anaconda Generate API documentation ************************************* -An API documentation can be generated from the source code of Cytnx by using doxygen. The documentation is accessible online at . To create it locally, make sure that doxygen is installed: +An API documentation can be generated from the source code of Cytnx by using doxygen. The documentation is accessible online at `here <../api_build/html/index.html>`__. To create it locally, make sure that doxygen is installed: .. code-block:: shell diff --git a/docs/source/apidoc_redirect.rst b/docs/source/apidoc_redirect.rst new file mode 100644 index 000000000..70817b849 --- /dev/null +++ b/docs/source/apidoc_redirect.rst @@ -0,0 +1,6 @@ +API Documentation +================= + +.. raw:: html + + diff --git a/docs/source/conf.py b/docs/source/conf.py index c6e89abc9..194eb2953 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -29,8 +29,6 @@ project = 'Cytnx' copyright = '2019-, Kai-Hsin Wu' author = 'Kai-Hsin Wu' -#_version = 'v0.9.7' -#version = 'v0.5.5a' # -- General configuration --------------------------------------------------- @@ -91,76 +89,3 @@ # relative to this directory. They are copied after the builtin static files, # so a file named "default.css" will overwrite the builtin "default.css". html_static_path = ['_static'] - - - -html_theme_options = { - # Navbar style. - # Values: 'fixed-top', 'full' (Default: 'fixed-top') - 'navbar_style' : 'fixed-top', - - # Navbar link color modifier class. - # Values: 'dark', 'light' (Default: 'dark') - 'navbar_color_class' : 'dark', - - # Navbar background color class. - # Values: 'inverse', 'primary', 'faded', 'success', - # 'info', 'warning', 'danger' (Default: 'inverse') - #'navbar_bg_class' : 'inverse', - - # Show global TOC in navbar. - # To display up to 4 tier in the drop-down menu. - # Values: True, False (Default: True) - 'navbar_show_pages' : True, - - # Link name for global TOC in navbar. - # (Default: 'Pages') - 'navbar_pages_title' : 'Pages', - - # Specify a list of menu in navbar. - # Tuples forms: - # ('Name', 'external url or path of pages in the document', boolean) - # Third argument: - # True indicates an external link. - # False indicates path of pages in the document. - 'navbar_links' : [ - ('API Doc', 'https://kaihsinwu.gitlab.io/cytnx_api', True), - ("Github", "https://github.com/Cytnx-dev/Cytnx", True), - ], - - # Total width(%) of the document and the sidebar. - # (Default: 80%) - 'main_width' : '80%', - - # Render sidebar. - # Values: True, False (Default: True) - 'show_sidebar' : True, - - # Render sidebar in the right of the document. - # Values:True, False (Default: False) - 'sidebar_right': False, - - # Fix sidebar. - # Values: True, False (Default: True) - 'sidebar_fixed': False, - - # Html table header class. - # Values: 'inverse', 'light' (Deafult: 'inverse') - 'table_thead_class' : 'inverse', - -} -""" -# -- Breathe configuration ------------------------------------------------- - -breathe_projects = { - "Cyc": "/home/kaihsinwu/Dropbox/Cytnx/docs/xml/" -} - -breathe_default_project = "Cyc" -breathe_default_members = ('members', 'undoc-members') -#breathe_default_members = ('members') -""" -## ablog -#import ablog -#templates_path.append(ablog.get_html_templates_path()) -#disqus_shortname='kaihsinwu' diff --git a/docs/source/convention.rst b/docs/source/convention.rst deleted file mode 100644 index 515bf4259..000000000 --- a/docs/source/convention.rst +++ /dev/null @@ -1,62 +0,0 @@ -Function Naming convention -============================ -Generally, the function naming scheme in Cytnx follows the rules: - - -1. If the function is **acting on objects** (taking object as arguments), they will start with the first letter being **capical**. Examples are the linalg functions, Contract etc... - - .. code-block:: python - - cytnx.linalg.Svd(A) - cytnx.linalg.Qr(A) - cytnx.linalg.Sum(A) - - cytnx.Contract(A,B) - - -2. If a function is a **member function**, or a **generating function** (such as zeros(), ones() ...), then they usually start with a **lower** case letter, for example: - - .. code-block:: python - - A = cytnx.zeros([2,3,4]) - - A.permute(0,2,1) - B = A.contiguous() - - -3. **Objects** in Cytnx always start with **capical** letters, for example: - - .. code-block:: python - - A = cytnx.Tensor() - B = cytnx.Bond() - C = cytnx.Network() - C = cytnx.UniTensor() - - -4. Functions end with **underscore** indicate that the *input* will be changed. For member functions, this is an inplace operation - - - .. code-block:: python - - A = cytnx.zeros([2,3,4]) - - A.contiguous_() # A gets changed - B = A.contiguous() # A is not changed, but return a copy B (see Tensor for further info) - - A.permute_(0,2,1) # A gets changed - C = A.permute(0,2,1) # A is not changed but return a new B as A's permute - - - - - - - - - - - - - -.. toctree:: diff --git a/docs/source/example/DMRG.rst b/docs/source/example/DMRG.rst index 9b48c6a37..7355b83b7 100644 --- a/docs/source/example/DMRG.rst +++ b/docs/source/example/DMRG.rst @@ -105,8 +105,8 @@ Now, let's first prepare the MPO, **M**. Here, the **d** is the physical bond di M[0,2] = M[1,3] = 2**0.5*sm.real() M = cytnx.UniTensor(M,0) - L0 = cytnx.UniTensor(cytnx.zeros([4,1,1]), rowrank = 0) #Left boundary - R0 = cytnx.UniTensor(cytnx.zeros([4,1,1]), rowrank = 0) #Right boundary + L0 = cytnx.UniTensor.zeros([4,1,1]).set_rowrank_(0) #Left boundary + R0 = cytnx.UniTensor.zeros([4,1,1]).set_rowrank_(0) #Right boundary L0[0,0,0] = 1.; R0[3,0,0] = 1. .. Note:: @@ -194,17 +194,17 @@ Next, we are going to prepare our variational ansatz (MPS). Here, **chi** is the Nsites = 20 lbls = [] # List for storing the MPS labels A = [None for i in range(Nsites)] - A[0] = cytnx.UniTensor(cytnx.random.normal([1, d, min(chi, d)], 0., 1.), rowrank = 2) - A[0].relabels_(["0","1","2"]) + A[0] = cytnx.UniTensor.normal([1, d, min(chi, d)], 0., 1., rowrank = 2) + A[0].relabel_(["0","1","2"]) lbls.append(["0","1","2"]) # store the labels for later convinience. for k in range(1,Nsites): dim1 = A[k-1].shape()[2]; dim2 = d dim3 = min(min(chi, A[k-1].shape()[2] * d), d ** (Nsites - k - 1)) - A[k] = cytnx.UniTensor(cytnx.random.normal([dim1, dim2, dim3],0.,1.), rowrank = 2) + A[k] = cytnx.UniTensor.normal([dim1, dim2, dim3],0.,1.).set_rowrank_(2) lbl = [str(2*k),str(2*k+1),str(2*k+2)] - A[k].relabels_(lbl) + A[k].relabel_(lbl) lbls.append(lbl) # store the labels for later convinience. @@ -281,11 +281,11 @@ The full implementation looks like: LR[p+1] = anet.Launch() # Recover the original MPS labels - A[p].relabels_(lbls[p]) - A[p+1].relabels_(lbls[p+1]) + A[p].relabel_(lbls[p]) + A[p+1].relabel_(lbls[p+1]) _,A[-1] = cytnx.linalg.Gesvd(A[-1],is_U=True,is_vT=False) ## last one. - A[-1].relabels_(lbls[-1]) # Recover the original MPS labels + A[-1].relabel_(lbls[-1]) # Recover the original MPS labels @@ -319,12 +319,12 @@ Now we are ready for describing the main DMRG algorithm that optimize our MPS, t psi.set_rowrank_(2) # maintain rowrank to perform the svd s,A[p],A[p+1] = cytnx.linalg.Svd_truncate(psi,new_dim) - A[p+1].relabels_(lbls[p+1]); # set the label back to be consistent + A[p+1].relabel_(lbls[p+1]); # set the label back to be consistent s = s/s.Norm().item() # normalize s A[p] = cytnx.Contract(A[p],s) # absorb s into next neighbor - A[p].relabels_(lbls[p]); # set the label back to be consistent + A[p].relabel_(lbls[p]); # set the label back to be consistent # update LR from right to left: anet = cytnx.Network("R_AMAH.net") @@ -335,7 +335,7 @@ Now we are ready for describing the main DMRG algorithm that optimize our MPS, t A[0].set_rowrank_(1) # maintain rowrank to perform the svd _,A[0] = cytnx.linalg.Gesvd(A[0],is_U=False, is_vT=True) - A[0].relabels_(lbls[0]); # set the label back to be consistent + A[0].relabel_(lbls[0]); # set the label back to be consistent There are lots of things happening here, let's break it up a bit, from right to left, the first thing we do is to contract two tensors A[p] and A[p+1]: @@ -389,7 +389,7 @@ To ultilize the Lanczos function, the opertion of acting Hamitonian (which invol lbl = v.labels() self.anet.PutUniTensor("psi",v) out = self.anet.Launch() - out.relabels_(lbl) + out.relabel_(lbl) return out .. Hint:: @@ -429,12 +429,12 @@ we have to make our psi into the canonical form, for which we do the SVD for the psi.set_rowrank_(2) # maintain rowrank to perform the svd s,A[p],A[p+1] = cytnx.linalg.Svd_truncate(psi,new_dim) - A[p+1].relabels_(lbls[p+1]); # set the label back to be consistent + A[p+1].relabel_(lbls[p+1]); # set the label back to be consistent s = s/s.Norm().item() # normalize s A[p] = cytnx.Contract(A[p],s) # absorb s into next neighbor - A[p].relabels_(lbls[p]); # set the label back to be consistent + A[p].relabel_(lbls[p]); # set the label back to be consistent @@ -482,7 +482,7 @@ The for loop is finished, now we arrived at the left end of the system, with the A[0].set_rowrank_(1) _,A[0] = cytnx.linalg.Gesvd(A[0],is_U=False, is_vT=True) - A[0].relabels_(lbls[0]); #set the label back to be consistent + A[0].relabel_(lbls[0]); #set the label back to be consistent looks like the same as we did for the right-end site in the beginning, this time we saves the vT, the purpose of the set_rowrank_(1) is only for the convenience of calling Svd/Svd_truncate in the next sweeping procedure from left to right. @@ -514,12 +514,12 @@ So we are done! With the other loop to control the number of times we sweep, we psi.set_rowrank_(2) # maintain rowrank to perform the svd s,A[p],A[p+1] = cytnx.linalg.Svd_truncate(psi,new_dim) - A[p+1].relabels_(lbls[p+1]); # set the label back to be consistent + A[p+1].relabel_(lbls[p+1]); # set the label back to be consistent s = s/s.Norm().item() # normalize s A[p] = cytnx.Contract(A[p],s) # absorb s into next neighbor - A[p].relabels_(lbls[p]); # set the label back to be consistent + A[p].relabel_(lbls[p]); # set the label back to be consistent # update LR from right to left: anet = cytnx.Network("R_AMAH.net") @@ -530,7 +530,7 @@ So we are done! With the other loop to control the number of times we sweep, we A[0].set_rowrank_(1) _,A[0] = cytnx.linalg.Gesvd(A[0],is_U=False, is_vT=True) - A[0].relabels_(lbls[0]); #set the label back to be consistent + A[0].relabel_(lbls[0]); #set the label back to be consistent for p in range(Nsites-1): dim_l = A[p].shape()[0] @@ -543,12 +543,12 @@ So we are done! With the other loop to control the number of times we sweep, we psi.set_rowrank_(2) # maintain rowrank to perform the svd s,A[p],A[p+1] = cytnx.linalg.Svd_truncate(psi,new_dim) - A[p].relabels_(lbls[p]); #set the label back to be consistent + A[p].relabel_(lbls[p]); #set the label back to be consistent s = s/s.Norm().item() # normalize s A[p+1] = cytnx.Contract(s,A[p+1]) ## absorb s into next neighbor. - A[p+1].relabels_(lbls[p+1]); #set the label back to be consistent + A[p+1].relabel_(lbls[p+1]); #set the label back to be consistent # update LR from left to right: anet = cytnx.Network("L_AMAH.net") @@ -559,7 +559,7 @@ So we are done! With the other loop to control the number of times we sweep, we A[-1].set_rowrank_(2) _,A[-1] = cytnx.linalg.Gesvd(A[-1],is_U=True,is_vT=False) ## last one. - A[-1].relabels_(lbls[-1]); #set the label back to be consistent + A[-1].relabel_(lbls[-1]); #set the label back to be consistent Compare DMRG Results ************************************ diff --git a/docs/source/example/iDMRG.rst b/docs/source/example/iDMRG.rst index 6b696ae92..ba6b4426f 100644 --- a/docs/source/example/iDMRG.rst +++ b/docs/source/example/iDMRG.rst @@ -60,8 +60,8 @@ The initailzation of MPO is much the same as we did in the previous DMRG example M[0,2] = 2*Hx*sx M = cytnx.UniTensor(M,rowrank=0) - L0 = cytnx.UniTensor(cytnx.zeros([3,1,1]),rowrank=0) #Left boundary - R0 = cytnx.UniTensor(cytnx.zeros([3,1,1]),rowrank=0) #Right boundary + L0 = cytnx.UniTensor.zeros([3,1,1],rowrank=0) #Left boundary + R0 = cytnx.UniTensor.zeros([3,1,1],rowrank=0) #Right boundary L0.get_block_()[0,0,0] = 1.; R0.get_block_()[2,0,0] = 1.; L = L0 @@ -124,7 +124,7 @@ Now do the optimization and SVD task: .. code-block:: python :linenos: - psi = cytnx.UniTensor(cytnx.random.normal([1,d,d,1],1,2),rowrank=2) + psi = cytnx.UniTensor.normal([1,d,d,1], 1., 2., rowrank=2) shp = psi.shape() psi_T = psi.get_block_(); psi_T.flatten_() ## flatten to 1d psi_T, Entemp = eig_Lanczos(psi_T, (L,M,M,R), maxit=maxit); @@ -168,7 +168,7 @@ we then solve the eigenvalue problem again and do SVD for the new effective hami :linenos: ## Construct n = 1 - psi = cytnx.UniTensor(cytnx.random.normal([d,d,d,d],0,2),rowrank=2) + psi = cytnx.UniTensor.normal([d,d,d,d], 0. ,2., rowrank=2) shp = psi.shape() psi_T = psi.get_block_(); psi_T.flatten_() ## flatten to 1d psi_T, Entemp = eig_Lanczos(psi_T, (L,M,M,R), maxit=maxit); @@ -252,10 +252,10 @@ The construction of trial state and optimization is done as follows: sR.relabel_(0,"1") sL.relabel_(1,"0") s0 = 1./s0 - s0.relabels_(["0","1"]) + s0.relabel_(["0","1"]) s2 = cytnx.Contract(cytnx.Contract(sL,s0),sR) - s2.relabels_(["-10","-11"]) + s2.relabel_(["-10","-11"]) A.relabel_(2,"-10") B.relabel_(0,"-11") psi = cytnx.Contract(cytnx.Contract(A,s2),B) diff --git a/docs/source/example/iTEBD.rst b/docs/source/example/iTEBD.rst index d4a987d7b..3c34d1a8f 100644 --- a/docs/source/example/iTEBD.rst +++ b/docs/source/example/iTEBD.rst @@ -304,10 +304,10 @@ At the beginning of each iteration, we evaluate the energy expectation value :ma .. code-block:: python :linenos: - A.relabels_(["a","0","b"]) - B.relabels_(["c","1","d"]) - la.relabels_(["b","c"]) - lb.relabels_(["d","e"]) + A.relabel_(["a","0","b"]) + B.relabel_(["c","1","d"]) + la.relabel_(["b","c"]) + lb.relabel_(["d","e"]) ## contract all @@ -329,7 +329,7 @@ At the beginning of each iteration, we evaluate the energy expectation value :ma # Note that X,Xt contract will result a rank-0 tensor, which can use item() toget element XNorm = cytnx.Contract(X,Xt).item() XH = cytnx.Contract(X,H) - XH.relabels_(["d","e","0","1"]) + XH.relabel_(["d","e","0","1"]) XHX = cytnx.Contract(Xt,XH).item() ## rank-0 @@ -348,10 +348,10 @@ At the beginning of each iteration, we evaluate the energy expectation value :ma .. .. code-block:: c++ .. :linenos: -.. A.relabels_({"a","0","b"}); -.. B.relabels_({"c","1","d"}); -.. la.relabels_({"b","c"}); -.. lb.relabels_({"d","e"}); +.. A.relabel_({"a","0","b"}); +.. B.relabel_({"c","1","d"}); +.. la.relabel_({"b","c"}); +.. lb.relabel_({"d","e"}); .. // contract all @@ -366,7 +366,7 @@ At the beginning of each iteration, we evaluate the energy expectation value :ma .. Scalar XNorm = cyx::Contract(X,Xt).item(); .. UniTensor XH = cyx::Contract(X,H); -.. XH.relabels_({"d","e","0","1"}); +.. XH.relabel_({"d","e","0","1"}); .. Scalar XHX = cyx::Contract(Xt,XH).item(); .. double E = double(XHX/XNorm); @@ -439,7 +439,7 @@ Now we have the envolved :math:`\Gamma_A`, :math:`\Gamma_B` and :math:`\lambda_A :linenos: lb_inv = 1./lb - lb_inv.relabels_(["e","d"]) + lb_inv.relabel_(["e","d"]) A = cytnx.Contract(lb_inv,A) B = cytnx.Contract(B,lb_inv) # translation symmetry, exchange A and B site @@ -453,7 +453,7 @@ Now we have the envolved :math:`\Gamma_A`, :math:`\Gamma_B` and :math:`\lambda_A .. UniTensor lb_inv = 1./lb; -.. lb_inv.relabels_({"e","d"}); +.. lb_inv.relabel_({"e","d"}); .. A = cyx.Contract(lb_inv,A); .. B = cyx.Contract(B,lb_inv); @@ -473,10 +473,10 @@ Let's put everything together in a loop for iteration: for i in range(10000): - A.relabels_(["a","0","b"]) - B.relabels_(["c","1","d"]) - la.relabels_(["b","c"]) - lb.relabels_(["d","e"]) + A.relabel_(["a","0","b"]) + B.relabel_(["c","1","d"]) + la.relabel_(["b","c"]) + lb.relabel_(["d","e"]) ## contract all X = cytnx.Contract(cytnx.Contract(A,la),cytnx.Contract(B,lb)) @@ -488,7 +488,7 @@ Let's put everything together in a loop for iteration: # Note that X,Xt contract will result a rank-0 tensor, which can use item() toget element XNorm = cytnx.Contract(X,Xt).item() XH = cytnx.Contract(X,H) - XH.relabels_(["d","e","0","1"]) + XH.relabel_(["d","e","0","1"]) XHX = cytnx.Contract(Xt,XH).item() ## rank-0 E = XHX/XNorm @@ -512,7 +512,7 @@ Let's put everything together in a loop for iteration: la.normalize_() lb_inv = 1./lb - lb_inv.relabels_(["e","d"]) + lb_inv.relabel_(["e","d"]) A = cytnx.Contract(lb_inv,A) B = cytnx.Contract(B,lb_inv) @@ -532,10 +532,10 @@ Let's put everything together in a loop for iteration: .. for(unsigned int i=0;i<10000;i++){ -.. A.relabels_({"a","0","b"}); -.. B.relabels_({"c","1","d"}); -.. la.relabels_({"b","c"}); -.. lb.relabels_({"d","e"}); +.. A.relabel_({"a","0","b"}); +.. B.relabel_({"c","1","d"}); +.. la.relabel_({"b","c"}); +.. lb.relabel_({"d","e"}); .. // contract all @@ -550,7 +550,7 @@ Let's put everything together in a loop for iteration: .. Scalar XNorm = cyx::Contract(X,Xt).item(); .. UniTensor XH = cyx::Contract(X,H); -.. XH.relabels_({"d","e","0","1"}); +.. XH.relabel_({"d","e","0","1"}); .. Scalar XHX = cyx::Contract(Xt,XH).item(); .. double E = double(XHX/XNorm); @@ -582,7 +582,7 @@ Let's put everything together in a loop for iteration: .. // again, but A' and B' are updated .. UniTensor lb_inv = 1./lb; -.. lb_inv.relabels_({"e","d"}); +.. lb_inv.relabel_({"e","d"}); .. A = cyx::Contract(lb_inv,A); .. B = cyx::Contract(B,lb_inv); diff --git a/docs/source/guide/basic_obj/Storage_5_io.rst b/docs/source/guide/basic_obj/Storage_5_io.rst index 34d07c69d..c6e72b041 100644 --- a/docs/source/guide/basic_obj/Storage_5_io.rst +++ b/docs/source/guide/basic_obj/Storage_5_io.rst @@ -1,5 +1,5 @@ Save/Load a storage ------------------ +-------------------- We can save/read a Storage instance to/from a file. Save a Storage @@ -18,8 +18,15 @@ To save a Storage to file, simply call **Storage.Save(filepath)**. :language: c++ :linenos: -This will save Storage *A* to the current directory as **T1.cyst**, with extension *.cyst* +This will save Storage *A* to the current directory as **S1.cyst**. +.. Tip:: + + The common file extension for a Storage is *.cyst*. + +.. warning:: + + The file extension should be explicitly added. The previous behavior of attaching the extension *.cyst* automatically will be deprecated. Load a Storage ****************** diff --git a/docs/source/guide/basic_obj/Tensor_7_io.rst b/docs/source/guide/basic_obj/Tensor_7_io.rst index bcc1a23fc..17fc896c4 100644 --- a/docs/source/guide/basic_obj/Tensor_7_io.rst +++ b/docs/source/guide/basic_obj/Tensor_7_io.rst @@ -1,5 +1,5 @@ Save/Load a Tensor ------------------ +------------------- Cyntx provides a way to save/read Tensors to/from a file. Save a Tensor @@ -18,7 +18,17 @@ To save a Tensor to a file, simply call **Tensor.Save(filepath)**. :language: c++ :linenos: -This will save Tensor *A* to the current directory as **T1.cytn**, with *.cytn* as file extension. +This will save Tensor *A* to the current directory as **T1.cytn**. + + +.. Tip:: + + The common file extension for a Tensor is *.cytn*. + +.. warning:: + + The file extension should be explicitly added. The previous behavior of attaching the extension *.cytn* automatically will be deprecated. + Load a Tensor diff --git a/docs/source/guide/contraction.rst b/docs/source/guide/contraction.rst index 9bf4d3edc..3bd6e6829 100644 --- a/docs/source/guide/contraction.rst +++ b/docs/source/guide/contraction.rst @@ -1,18 +1,18 @@ Contraction ============= -All Tensor Network algorithms include Tensor contractions, where we multiply tensors and sum over shared indices. Cytnx provides three different ways to do these contractions. +Tensor contractions are the basis of tensor network algorithms: tensors are multiplied and indices shared by two tensors are summed over. Cytnx provides three different ways to do these contractions. -The most advanced method for tensor contractions is a **Network** object. It allows to define a Tensor Network and its connectivity. This provides an abstract description of the tensor content and the open and contracted bonds. One can apply this mask to a concrete set of tensors and let Cytnx calculate the contractions. It is possible to define the index order of the contractions, or to let Cytnx find the optimal sequence. The network can be reused for a different set of tensors, and also the optimized contraction order can be reused once calculated. The bonds of the tensors to be loaded can either be called by their labels or indices. A network is most conveniently defined in a file which can be read by Cytnx. +The most advanced method for tensor contractions is a **Network** object. It allows to define a tensor network and its connectivity. This provides an abstract description of the tensor content and the open and contracted bonds. One can apply this mask to a concrete set of tensors and let Cytnx perform the contractions. It is possible to define the index order of the contractions, or to let Cytnx automatically find an optimal sequence. The network can be reused for a different set of tensors, and also the optimized contraction order can be reused once calculated. The bonds of the tensors to be loaded can either be called by their labels or index order. A network is most conveniently defined in a file which can be read by Cytnx. -A simple way to contract indices is provided by **Contract()** and **Contracts()**. These functions contract all indices with the same labels on two or more tensors. +A simple way to contract indices is provided by **Contract()**. This functions contract all indices with the same labels on two or more tensors. Finally, the function **ncon()** allows to contract tensors by defining the connectivity and contraction order of the bonds. The user needs to specify the bonds by their indices instead of their labels, so the index order matters. .. Tip:: - We encourage users to use **Network** contractions or **Contract(s)** together with meaningful label names, which are easier to understand than integer values as required by **ncon**. The latter routine is provided for advanced users who carefully track the index order themselves. + We encourage users to use **Network** contractions or **Contract** together with meaningful label names, which are easier to understand than integer values as required by **ncon**. The latter routine is provided for advanced users who carefully track the index order themselves. diff --git a/docs/source/guide/contraction/contract.rst b/docs/source/guide/contraction/contract.rst index 7d153b28f..37a19f1e9 100644 --- a/docs/source/guide/contraction/contract.rst +++ b/docs/source/guide/contraction/contract.rst @@ -1,9 +1,9 @@ -Contract(s) +Contract ============= -Contractions of two tensors can be done with **Contract()**. Using this function, indices with the same labels on the two tensors are contracted. **Contracts()** provides the same functionality for more than two tensors. In this case, the contraction order can additionally be specified. +Two UniTensors can be contracted with the function **Contract()**. Indices with the same labels on two of the input tensors are summed over. The contraction order can additionally be specified. -Contract ------------------- +Contracting two UniTensors +------------------------------------ The function **cytnx.Contract()** contracts all common labels of two UniTensors. For example: @@ -21,28 +21,28 @@ Output >> Here we see that the labels **j** and **l** appear on both input tensors. Thus, they are contracted. Note that the bond dimensions of the contracted tensors must agree on both tensors. -In order to define which indices shall be contracted without changing the labels on the initial tensors, Cyntx provides the method **.relabels()**. It allows to set common labels on the indices to be contracted and distinct labels on the others. Also, the labels on the resulting tensor can be defined this way. See :ref:`Changing labels` for further details. Suppose that we only want to contract the index *j* in the previous example, but not sum over *l*. We can use **.relabels()** for this task: +In order to define which indices shall be contracted without changing the labels on the initial tensors, Cyntx provides the method **.relabel()**. It allows to set common labels on the indices to be contracted and distinct labels on the others. Also, the labels on the resulting tensor can be defined this way. See :ref:`Changing labels` for further details. Suppose that we only want to contract the index *j* in the previous example, but not sum over *l*. We can use **.relabel()** for this task: * In Python: -.. literalinclude:: ../../../code/python/doc_codes/guide_contraction_contract_relabels.py +.. literalinclude:: ../../../code/python/doc_codes/guide_contraction_contract_relabel.py :language: python :linenos: Output >> -.. literalinclude:: ../../../code/python/outputs/guide_contraction_contract_relabels.out +.. literalinclude:: ../../../code/python/outputs/guide_contraction_contract_relabel.out :language: text -The function **.relabels()** creates a copy of the initial UniTensor and changes the labels, while keeping the labels on the initial tensor unchanged. The actual data is shared between the old and new tensor, only the meta is independent. +The function **.relabel()** creates a copy of the initial UniTensor and changes the labels, while keeping the labels on the initial tensor unchanged. The actual data is shared between the old and new tensor, only the metadata is independent. -Contracts ------------------- -The function **Contracts** allows us to contract multiple UniTensors. +Contracting multiple UniTensors +------------------------------------ +The function **Contract** also allows one to contract multiple UniTensors. -The first argument of this function is **TNs**, which is a list containing all UniTensors to be contracted. Contracts also provides the argument **order** to specify a desired contraction order, or the **optimal** option to use an auto-optimized contraction order. +The first argument in this case is **TNs**, which is a list containing all UniTensors to be contracted. Contract also provides the argument **order** to specify a desired contraction order, or the **optimal** option to use an automatically optimized contraction order. Consider the following contraction task consisting of UniTensors **A1**, **A2** and **M**: @@ -63,7 +63,11 @@ Output >> .. literalinclude:: ../../../code/python/outputs/guide_contraction_contract_Contracts.out :language: text -Note that the UniTensors' names have to be specified for an explicitly given contraction order. In this case we specified them in the constructor argument. The order *(M,(A1,A2))* indicates that first all common indices of *A1* and *A2* are contracted, then all common indices of the resulting tensor and *M*. +Note that the UniTensors' names have to be specified for an explicitly given contraction order. In this case, we specified them by the method set_name. The order *(M,(A1,A2))* indicates that first all common indices of *A1* and *A2* are contracted, then all common indices of the resulting tensor and *M*. .. Note:: - All tensors contracted with `Contracts()` need to have unique tensor names. Use `UniTensor.set_name()` to specify the name of a tensor. + All tensors contracted with `Contract()` need to have unique tensor names. Use `UniTensor.set_name()` to specify the name of a tensor. + +.. warning:: + + The function *Contracts()* is deprecated. Use *Contract()* instead with a list of input tensors. diff --git a/docs/source/guide/contraction/ncon.rst b/docs/source/guide/contraction/ncon.rst index ddb07e561..2701e09a5 100644 --- a/docs/source/guide/contraction/ncon.rst +++ b/docs/source/guide/contraction/ncon.rst @@ -15,7 +15,7 @@ Following this, the **ncon** routine is called as: :param list connect_list_in: 1D array of vectors. The kth element contains the integer index labels of the kth tensor in tensor_list_in. These integers are defined by the diagram. Their order must correspond to the ordering of indices on the corresponding tensor. :param list cont_order: a vector containing the positive integer labels of the diagram. It is used to specify the order in which **ncon** contracts the indices. Note that cont_order is an optional input that can be omitted if desired, in which case ncon will contract in ascending order of the integer values. -For example, we want to contract the following tensor network (as before with *Contracts()*) consisting of tensors **A1**, **A2** and **M**: +For example, we want to contract the following tensor network (as before with *Contract()*) consisting of tensors **A1**, **A2** and **M**: .. image:: image/ncon.png :width: 300 @@ -32,7 +32,7 @@ In the figure we labelled the internal bonds using unique positive numbers. Exte .. literalinclude:: ../../../code/python/outputs/guide_contraction_ncon_ncon.out :language: text -We see that **ncon** accomplishes contractions similar to **Contracts** or a contraction **Network**. While the code becomes very compact with *ncon*, the user must take care of the correct index order of all tensors. +We see that **ncon** accomplishes contractions similar to **Contract** or a contraction **Network**. While the code becomes very compact with *ncon*, the user must take care of the correct index order of all tensors. .. bibliography:: ref.ncon.bib :cited: diff --git a/docs/source/guide/behavior.rst b/docs/source/guide/conventions.rst similarity index 50% rename from docs/source/guide/behavior.rst rename to docs/source/guide/conventions.rst index 9b2373952..c52cbb97e 100644 --- a/docs/source/guide/behavior.rst +++ b/docs/source/guide/conventions.rst @@ -1,8 +1,60 @@ -Objects behavior +Conventions ------------------ -Everything is reference -************************ +These are general conventions that hold for all parts of Cytnx. + +Function naming conventions +**************************** +Generally, the function naming scheme in Cytnx follows the rules: + + +1. If the function is **acting on objects** (taking object as arguments), they will start with the first letter being **capical**. Examples are the linalg functions, Contract etc... + + .. code-block:: python + + cytnx.linalg.Svd(A) + cytnx.linalg.Qr(A) + cytnx.linalg.Sum(A) + + cytnx.Contract(A,B) + + +2. If a function is a **member function**, or a **generating function** (such as zeros(), ones() ...), then they usually start with a **lower** case letter, for example: + + .. code-block:: python + + A = cytnx.UniTensor.zeros([2,3,4]) + + A.permute(0,2,1) + B = A.contiguous() + + +3. **Objects** in Cytnx always start with **capical** letters, for example: + + .. code-block:: python + + A = cytnx.UniTensor() + B = cytnx.Bond() + C = cytnx.Network() + D = cytnx.Tensor() + + +4. Functions end with **underscore** indicate that the *input* will be changed. For member functions, this is an inplace operation + + + .. code-block:: python + + A = cytnx.zeros([2,3,4]) + + A.contiguous_() # A gets changed + B = A.contiguous() # A is not changed, but return a copy B (see Tensor for further info) + + A.permute_(0,2,1) # A gets changed + C = A.permute(0,2,1) # A is not changed but return a new B as A's permute + + +Everything is a reference +************************** To provide a direct translation between the C++ API and Python, as well as to reduce the redundant memory allocation, all the objects (except Accessor and LinOp) in Cytnx are **references**, also in C++, just like in Python. Let's look at the following example. Consider the **Tensor** object in Cytnx diff --git a/docs/source/guide/xlinalg.rst b/docs/source/guide/decomposition.rst similarity index 87% rename from docs/source/guide/xlinalg.rst rename to docs/source/guide/decomposition.rst index 5403a82ae..315e4c1b8 100644 --- a/docs/source/guide/xlinalg.rst +++ b/docs/source/guide/decomposition.rst @@ -1,19 +1,14 @@ -linalg extension -================== +Tensor decomposition +===================== .. .. toctree:: .. :maxdepth: 3 -Tensor decomposition -************************** - - - -As mention in the **Manipulate UniTensor**, the specification of **rowrank** makes it convinient to apply linear algebra operations on UniTensors. +As mention in the :ref:`Manipulating a UniTensor`, the specification of **rowrank** makes it convinient to apply linear algebra operations on UniTensors. Singular value decomposition -------------------------------- +***************************** Here is an example where a **singular value decomposition (SVD)** is performed on a UniTensor: @@ -47,7 +42,7 @@ Output >> If we contract :math:`U \cdot S \cdot Vt`, we get a tensor of the same shape as **T** and we can subtract the two tensors. The error :math:`\frac{|T-U \cdot S \cdot Vt|}{|T|}` is of the order of machine precision, as expected. -Here we demonstrate the usage of a more important function **Svd_truncate()** which appears frequently in the tensor network algorithm for truncatiing the bond dimension. In this example we print the singular values from doing **Svd()** and compare it to the result of **Svd_truncate()**: +Here we demonstrate the usage of a more important function **Svd_truncate()** which appears frequently in the tensor network algorithm for truncating the bond dimension. In this example we print the singular values from doing **Svd()** and compare it to the result of **Svd_truncate()**: * In Python: @@ -70,7 +65,7 @@ We note that the singular values obtained by doing **Svd_truncate()** is truncat Eigenvalue decomposition -------------------------------- +***************************** * In Python: @@ -79,7 +74,7 @@ Eigenvalue decomposition :linenos: QR decomposition -------------------------------- +***************************** The **QR decomposition** decomposes a matrix *M* to the form *M = QR*, where *Q* is an orthogonal matrix (*Q Q^T = I*), and *R* is a upper-right triangular matrix. One can perform a QR decomposition by using **Qr()**. diff --git a/docs/source/guide/linalg.rst b/docs/source/guide/linalg.rst index c6f4a2e5d..eaeda0474 100644 --- a/docs/source/guide/linalg.rst +++ b/docs/source/guide/linalg.rst @@ -1,7 +1,7 @@ Linear algebra =============== -Currently, Cytnx supports the following linear algebra functions. See https://kaihsin.github.io/Cytnx/docs/html/index.html for further documentation. +Currently, Cytnx supports the following linear algebra functions. See A for further documentation. +-----------------------------------------------------------------------+---------+-----+------+-------------+----+----------------+ | func | Inplace | CPU | GPU | Called by Tn| Tn | CyTn (xlinalg) | diff --git a/docs/source/guide/uniten.rst b/docs/source/guide/uniten.rst index abf2ecae5..a479bba78 100644 --- a/docs/source/guide/uniten.rst +++ b/docs/source/guide/uniten.rst @@ -37,3 +37,4 @@ In the following, let's look into these objects: uniten/elements.rst uniten/manipulation.rst uniten/io.rst + uniten/fermions.rst diff --git a/docs/source/guide/uniten/blocks.rst b/docs/source/guide/uniten/blocks.rst index 4f7d92db0..3c4e315e5 100644 --- a/docs/source/guide/uniten/blocks.rst +++ b/docs/source/guide/uniten/blocks.rst @@ -1,10 +1,10 @@ -Accessing the block(s) +Accessing blocks ------------------------ The data in a UniTensor is stored in blocks. We introduce how to access and manipulate these. This way, the data of a UniTensor can be accessed and manipulated. Each block is a **Tensor**. -UniTensor without symmetries -***************************** +Block of UniTensor without symmetries +**************************************** A UniTensor without symmetries is simply a Tensor with labeled bonds. In this case, the methods **.get_block()** and **.get_block_()** return the Tensor object of the UniTensor for us to manipulate. @@ -24,8 +24,8 @@ Output >> While **.get_block_()** returns a reference to the Tensor which corresponds to the data in a UniTensor, **.get_block()** makes a copy of the data. Therefore, changes to a Tensor returned from **.get_block_()** will also change the UniTesor data, while changes after a **.get_block()** do not affect the UniTensor. -UniTensor with symmetries -***************************** +Blocks of UniTensor with symmetries +**************************************** Let's use the same example of a UniTensor with *U1* symmetry that we introduced in the previous section :ref:`UniTensor with Symmetries` to demonstrate how to get block(s) from a block structured UniTensor: @@ -52,6 +52,7 @@ The quantum number indices (*qindices*) need to be given in the same order as th * 0 for *U1(2)* * 1 for *U1(0)* * 2 for *U1(-2)* + because the quantum numbers were created in this order. Similarly for *bond\_d* and *bond\_e: *U1(1)* has quantum number index 0 and *U1(-1)* has quantum number index 2. diff --git a/docs/source/guide/uniten/bond.rst b/docs/source/guide/uniten/bond.rst index 99ed861a7..9e7bcfcf3 100644 --- a/docs/source/guide/uniten/bond.rst +++ b/docs/source/guide/uniten/bond.rst @@ -1,5 +1,6 @@ Bond -======= +------------------------- + A **Bond** is an object that represents the legs or indices of a tensor. It carries information such as the direction, dimension and quantum numbers (if symmetries given). There are in general two types of Bonds: **directional** and **undirectional**, depending on whether the bond has a direction (pointing inward or outward with respect to the tensor) or not. The inward Bond is also defined as **Ket**/**In** type, while the outward Bond is defined as **Bra**/**Out** type as in the *Braket* notation in the quantum mechanics: @@ -59,6 +60,7 @@ In Cytnx, the symmetry type is defined by a Symmetry object. It contains the nam :linenos: * In C++: + .. literalinclude:: ../../../code/cplusplus/doc_codes/guide_uniten_bond_symobj.cpp :language: c++ :linenos: @@ -104,6 +106,7 @@ For example: :linenos: * In C++: + .. literalinclude:: ../../../code/cplusplus/doc_codes/guide_uniten_bond_sym_bond.cpp :language: c++ :linenos: @@ -117,6 +120,7 @@ Output >> :linenos: * In C++: + .. literalinclude:: ../../../code/cplusplus/doc_codes/guide_uniten_bond_multi_sym_bond.cpp :language: c++ :linenos: diff --git a/docs/source/guide/uniten/create.rst b/docs/source/guide/uniten/create.rst index f882ea1d7..31c984aa4 100644 --- a/docs/source/guide/uniten/create.rst +++ b/docs/source/guide/uniten/create.rst @@ -1,5 +1,6 @@ Creating a UniTensor -------------------- + As mentioned in the introduction, a **UniTensor** consists of Block(s), Bond(s) and label(s). The Block(s) contain the data, while Bond(s) and label(s) are the meta data that describe the properties of the UniTensor. .. image:: image/utcomp.png @@ -22,11 +23,45 @@ Generally, there are two types of UniTensor types: **un-tagged** and **tagged**, In the following, we will explain how to construct a UniTensor. +Using generators +************************ +Similar to the initialization of a Tensor, one can create a UniTensor through generators such as zero, ones, normal, uniform, arange and eye. The first argument provides shape information, which is used to construct the Bond objects and to determine the rank -- the number of tensor indices. Labels can be specified when creating a UniTensor, otherwise they are set to be "0", "1", "2", ... by default. + +This gives us the first type of a UniTensor: an **untagged** UniTensor. + +* In Python: + +.. literalinclude:: ../../../code/python/doc_codes/guide_uniten_create_from_generator.py + :language: python + :linenos: + +.. note:: + + The generator **eye** expects the number of diagonal elements as a first argument instead of the shape of the resulting UniTensor. + +.. note:: + + The generator **arange** creates a one-dimensional UniTensor. In order to obtain a desired shape, use **reshape** and **set_rowrank** (see :ref:`reshape` and :ref:`rowrank`). If arange receives one argument, it is the number of elements. If three arguments are given, these correspond to start, stop, and stepsize. This syntax is similar to numpy.arange(). + +We can use **print_diagram()** to visualize a UniTensors in a more straightforward way as a diagram: + +* In Python: + +.. literalinclude:: ../../../code/python/doc_codes/guide_uniten_create_from_generators_print_diagram.py + :language: python + :linenos: + +Output >> + +.. literalinclude:: ../../../code/python/outputs/guide_uniten_create_from_generators_print_diagram.out + :language: text + +The information provided by this output is explained in detail in :ref:`print_diagram()`. Constructing from Tensor ************************ -Before going into more complicated UniTensor structures, let's start with the most simple example. For this, we convert a **cytnx.Tensor** into a UniTensor. This gives us the first type of a UniTensor: an **untagged** UniTensor. +We can also convert a **cytnx.Tensor** into a UniTensor to create an **untagged** UniTensor. In the following, we consider a simple rank-3 tensor as an example. The tensor diagram looks like: @@ -51,22 +86,12 @@ If we want to create a UniTensor with different dtype, for example, a complex Un :language: python :linenos: -We can use **print_diagram()** to visualize a UniTensor in a more straightforward way as a diagram: - -* In Python: - -.. literalinclude:: ../../../code/python/doc_codes/guide_uniten_create_print_diagram.py - :language: python - :linenos: - Output >> .. literalinclude:: ../../../code/python/outputs/guide_uniten_create_print_diagram.out :language: text - -The information provided by this output is explained in detail in :ref:`print_diagram()`. We see that a UniTensor with the same shape as *T* was created. The bond labels are set to the default values "0", "1" and "2". - +We see that a UniTensor with the same shape as *T* was created. The bond labels are set to the default values "0", "1" and "2". From scratch ************** @@ -149,52 +174,10 @@ For example, let's create a UniTensor in the memory accessible by the CPU and tr :language: python :linenos: ->> Output: - -.. code-block:: text - - -------- start of print --------- - Tensor name: - is_diag : False - contiguous : True - - Total elem: 4 - type : Double (Float64) - cytnx device: CPU - Shape : (2,2) - [[1.00000e+00 1.00000e+00 ] - [1.00000e+00 1.00000e+00 ]] - - - - - -------- start of print --------- - Tensor name: - is_diag : False - contiguous : True - - Total elem: 4 - type : Double (Float64) - cytnx device: CUDA/GPU-id:0 - Shape : (2,2) - [[1.00000e+00 1.00000e+00 ] - [1.00000e+00 1.00000e+00 ]] - - - - - -------- start of print --------- - Tensor name: - is_diag : False - contiguous : True - - Total elem: 4 - type : Double (Float64) - cytnx device: CUDA/GPU-id:0 - Shape : (2,2) - [[1.00000e+00 1.00000e+00 ] - [1.00000e+00 1.00000e+00 ]] +Output >> +.. literalinclude:: ../../../code/python/outputs/guide_uniten_create_to.out + :language: text .. Note:: diff --git a/docs/source/guide/uniten/elements.rst b/docs/source/guide/uniten/elements.rst index a317b320e..ab406e653 100644 --- a/docs/source/guide/uniten/elements.rst +++ b/docs/source/guide/uniten/elements.rst @@ -1,4 +1,4 @@ -Get/set UniTensor element +Get/set UniTensor elements -------------------------- In this section, we discuss how to get an element directly from a UniTensor and how to set an element. Generally, elements can be accessed by first getting the corresponding block, and then accessing the correct element from that block. However, it is also possible to directly access an element from a UniTensor. @@ -6,8 +6,8 @@ In this section, we discuss how to get an element directly from a UniTensor and To get an element, one can call **UniTensor.at()**. It returns a *proxy* which contains a reference to the element. Furthermore, the proxy can be used to check whether an element corresponds to a valid block in a UniTensor with symmetries. -UniTensor without symmetries -***************************** +Elements of UniTensor without symmetries +********************************************* Accessing an element in a UniTensor without symmetries is straightforward by using *at* @@ -53,8 +53,8 @@ Output >> :language: text -UniTensor with symmetries -***************************** +Elements of UniTensor with symmetries +*************************************** When a UniTensor has block structure, not all possible elements correspond to a valid block. Invalid elements do not fulfill the symmetries. Therefore, these invalid elements should not be accessed. diff --git a/docs/source/guide/uniten/fermions.rst b/docs/source/guide/uniten/fermions.rst new file mode 100644 index 000000000..71230c10a --- /dev/null +++ b/docs/source/guide/uniten/fermions.rst @@ -0,0 +1,8 @@ +Fermionic UniTensor +--------------------------- + +Cytnx supports fermionic symmetries in a resource-efficient way that creates no significant overhead. The anti-commutation relations between fermionic degrees of freedom are automatically respected. + +This part of the library is currently under development. Please contact Manuel Schneider (FIRSTNAME.SECONDNAME (at) nycu.edu.tw) for inquiries. + +.. toctree:: diff --git a/docs/source/guide/uniten/io.rst b/docs/source/guide/uniten/io.rst index c4d0510c4..b6e966175 100644 --- a/docs/source/guide/uniten/io.rst +++ b/docs/source/guide/uniten/io.rst @@ -1,10 +1,11 @@ Save/Load a UniTensor ------------------ -Cyntx provides a way to save/read UniTensors to/from a file. +------------------------- + +A UniTensor can be saved to and loaded from a file. Save a UniTensor ***************** -To save a Tensor to a file, simply call **UniTensor.Save(filepath)**. +To save a UniTensor to a file, simply call **UniTensor.Save(filepath)**. * In Python: @@ -12,12 +13,20 @@ To save a Tensor to a file, simply call **UniTensor.Save(filepath)**. :language: python :linenos: -This will save UniTensors *T1* and *T2* to the current directory as **Untagged_ut.cytnx** and **sym_ut.cytnx**, with *.cytnx* as file extension. +This saves UniTensors *T1* and *T2* in the current directory as **Untagged_ut.cytnx** and **sym_ut.cytnx**. + +.. Tip:: + + The common file extension for a UniTensor is *.cytnx*. + +.. warning:: + + The file extension should be explicitly added. The previous behavior of attaching the extension *.cytnx* automatically will be deprecated. Load a UniTensor ****************** -Now, let's load the UniTensor from the file. +Similarly, a UniTensor can be loaded from a file: .. literalinclude:: ../../../code/python/doc_codes/guide_uniten_io_Load.py :language: python @@ -28,6 +37,6 @@ Output >> .. literalinclude:: ../../../code/python/outputs/guide_uniten_io_Load.out :language: text -In this example we see how the block date and meta information (name, bonds, labels ... ) are kept when we save the UniTensor. +In this example we see how the block data and meta information (name, bonds, labels ... ) are restored when saving and loading UniTensor. .. toctree:: diff --git a/docs/source/guide/uniten/labels.rst b/docs/source/guide/uniten/labels.rst index f5d1b6160..d58851c21 100644 --- a/docs/source/guide/uniten/labels.rst +++ b/docs/source/guide/uniten/labels.rst @@ -1,6 +1,7 @@ Changing labels ------------------ -We can set and change the labels of the Bonds in a UniTensor as desired. This is particularly helpful for contractions with *cytnx.Contract()* and *cytnx.Contracts()*. As will be explained in :ref:`Contract(s)`, these functions contract bonds with the same name on different UniTensors. Therefore, we might need to change the labels for some bond(s) to initiate the correct tensor contraction. + +We can set and change the labels of the Bonds in a UniTensor as desired. This is particularly helpful for contractions with *cytnx.Contract()*. As will be explained in :ref:`Contract`, these functions contract bonds with the same name on different UniTensors. Therefore, we might need to change the labels for some bond(s) to initiate the correct tensor contraction. To change the label associated to a certain leg of a UniTensor, one can use: @@ -20,13 +21,13 @@ Alternatively, if we don't know the index of the target bond in the current orde If we wish to change the labels of all legs, we can use: -.. py:function:: UniTensor.relabels_( new_labels) +.. py:function:: UniTensor.relabel_( new_labels) :param List[string] new_labels: a list of new labels or -.. py:function:: UniTensor.relabels_(old_labels, new_labels) +.. py:function:: UniTensor.relabel_(old_labels, new_labels) :param List[string] old_labels: a list of current labels :param List[string] new_labels: a list of the corresponding new labels @@ -52,13 +53,13 @@ Output >> .. warning:: - The previously provided method set_label(s) is deprecated and should be replaced by relabel(s)_. + The previously provided methods *set_label*, *set_labels* and *relabels_* are deprecated and should all be replaced by *relabel_*. -Creating UniTensors with different labels that share data -********************************************************* +Creating UniTensors with different labels that share the same data +******************************************************************* -In some scenarios, especially in contractions with *cytnx.Contract()* and *cytnx.Contracts()*, we want to create a UniTensor with changed labels. However, we might not want to modify the original tensor. Creating a copy of the tensor data is also not desired, since it would double the memory usage. In such a case one can use the function **relabel(s)** without underscore. This returns a new UniTensor with different meta (in this case only the labels are changed), but the actual memory block(s) are still referring to the old ones. The arguments of **relabel(s)** are similar to **relabel(s)_**, see above. For example: +In some scenarios, especially in contractions with *cytnx.Contract()*, we want to create a UniTensor with changed labels. However, we might not want to modify the original tensor. Creating a copy of the tensor data is also not desired, since it would double the memory usage. In such a case one can use the function **relabel** without underscore. This returns a new UniTensor with different meta (in this case only the labels are changed), but the actual memory block(s) are still referring to the old ones. The arguments of **relabel** are similar to **relabel_**, see above. For example: * In Python: @@ -73,3 +74,7 @@ Output >> .. toctree:: + +.. warning:: + + The previously provided method *relabels* is deprecated and should all be replaced by *relabel*. diff --git a/docs/source/guide/uniten/manipulation.rst b/docs/source/guide/uniten/manipulation.rst index 0d59982d1..42eb6586d 100644 --- a/docs/source/guide/uniten/manipulation.rst +++ b/docs/source/guide/uniten/manipulation.rst @@ -1,15 +1,14 @@ -Manipulate UniTensor --------------------- +Manipulating a UniTensor +------------------------- -After having introduced the initialization and structure of the three UniTensor types (un-tagged, tagged and tagged with symmetries), -we show the basic functionalities to manipulate UniTensors. +After having introduced the initialization and structure of the three UniTensor types (un-tagged, tagged, and tagged with symmetries), we show basic functionalities to manipulate UniTensors. -Permutation, reshaping and arithmetic operations are accessed similarly to **Tensor** objects as introduced before, with slight modifications for symmetric UniTensors. +Permutation, reshaping and arithmetic operations are accessed similarly to :ref:`Tensor` objects as introduced before, with slight modifications for symmetric UniTensors. Permute ************************************ -The bond order can be changed with *permute* for all kinds of UniTensors. The order can either be defined by the index order as for the permute method of a *Tensor*, or by specifying the label order after the permutation. +The bond order can be changed with *permute* for all UniTensor types. The order can either be defined by the index order as for the permute method of a *Tensor*, or by specifying the label order after the permutation. For example, we permute the indices of the symmetric tensor that we introduced before: @@ -50,19 +49,19 @@ Output >> Combine bonds ************************************ -The tagged UniTensors include symmetric UniTensors cannot be reshaped, since the bonds to be combinded or splited now includes the direction and quantum number infomation, -the reshape process involves the fusion or split of the qunatum basis, we provide combindBonds API for the tagged UniTensor as an alternative to the usual reshape function. -Note that currently there is no API for splitting a bond, since the way to split the quantum basis will be ambiguous. -Let's see the complete function usage for combining bonds: +Tagged UniTensors, including symmetric UniTensors, cannot be reshaped. The reason for this is that the bonds to be combined or split include the direction and quantum number information. +A reshape is therefore replaced by the fusion or splitting of indices, which takes into account the transformation of the quantum numbers for the given symmetries. For this, Cytnx provides the combineBonds API for tagged UniTensors as an alternative to the usual reshape. +Note that there is currently no API for splitting bonds, since the way to split the quantum basis is ambiguous. +The method to combine bonds can be used as follows: .. py:function:: UniTensor.combineBonds(indicators, force) - :param list indicators: A list of **integer** indicating the indices of bonds to be combined. If a list of **string** is passed the bonds with those string labels will be combined. + :param list indicators: A list of **integer** indicating the indices of bonds to be combined. If a list of **string** is passed, the bonds with those string labels will be combined. :param bool force: If set to **True** the bonds will be combined regardless the direction or type of the bonds, otherwise the bond types will be checked. The default is **False**. -Consider a specific example: +The use of combineBonds is demonstrated in the following example: * In Python: @@ -79,17 +78,16 @@ Output >> Arithmetic ************************************ - -Arithmetic operations for un-tagged UniTensors can be done exactly the same as with Tensors, see :ref:`Tensor arithmetic`. The supported arithmetic operations and further linear algebra functions are listed in :ref:`Linear algebra`. +Arithmetic operations for un-tagged UniTensors can be done in the exact same way as for Tensors, see :ref:`Tensor arithmetic`. The supported arithmetic operations and further linear algebra functions are listed in :ref:`Linear algebra`. Rowrank ********* -Another property that we may want to maintain in UniTensor is its rowrank. It tells us how the legs of the a UniTensor are split into two halves, one part belongs to the rowspace and the other to the column space. A UniTensor can then be seen as a linear operator between these two spaces, or as a matrix. The matrix results in having the first *rowrank* indices combined to the first (row-)index and the other indices combined to the second (column-)index. +Another property of a UniTensor that we need to control is its rowrank. It defines how the legs of the a UniTensor are split into two groups, one part belonging to the rowspace (left indices) and the other to the column space (right indices). A UniTensor can then be seen as a linear operator between these two spaces, or as a matrix. The matrix form corresponds to combining the first *rowrank* indices to a single (row-)index and the remaining indices to a second (column-)index. -Most of the linear algebra algorithms take a matrix as an input. We thus use rowrank to specify how to cast the input UniTensor into a matrix. In Cytnx, this specification makes it easy to use linear algebra operations on UniTensors. +Most of the linear algebra algorithms assume this matrix form as an input. We thus use rowrank to specify how to interpret the input UniTensor as a matrix. This specification makes it easy to use linear algebra operations on UniTensors, even if they have more than two indices. -The rowrank can be specified when initializing the UniTenosr, one can also use **.set_rowrank()** to modify the rowrank of a UniTensor: +The rowrank can either be specified when initializing the UniTensor, or the **.set_rowrank()** method can be used to modify the rowrank of a UniTensor: * In Python: @@ -103,13 +101,14 @@ Output >> :language: text -We leave the examples of linalg algebra operations incoporating the rowrank concept such as **singular value decomposition (SVD)** to the chapter :ref:`linalg extension`. +How linear algebra functions such as the **singular value decomposition (SVD)** make use of the rowrank is described in chapter :ref:`Tensor decomposition`. Transpose ********************** -One common operation that is sensitive to the **rowrank** of a UniTensor is the tranpose, one can transpose a UniTensor using **.Transpose()** (or the in-placed method **.Transpose_()**), let's see the behavior of this operation, first consider the transpose of a **non-tagged** UniTensor: +One common operation that is sensitive to the **rowrank** is transposing a tensor. This is possible for a UniTensor by the method **.Transpose()** (or the in-placed method **.Transpose_()**). +We first show the behavior for a **non-tagged** UniTensor: * In Python: @@ -123,9 +122,9 @@ Output >> :language: text -We see that .Transpose() swap the legs in the row space and column space, also the *rowrank* itself is modified. +We see that .Transpose() swaps the legs in the row space and the column space, with the *rowrank* itself also being modified. -Next we consider the tranposition of a tagged UniTensor: +Next we consider the transposition of a tagged UniTensor: * In Python: @@ -139,8 +138,15 @@ Output >> :language: text -We see that for the tagged UniTensor the rowrank (and the row/column space the legs belong to) is not changed, instead the .Transpose() **inverted the direction of each bond**. +In addition to exchanging the roles of row- and column-space as before, **the direction of each bond is inverted**: incoming indices become outgoing indices and vice versa. .. Note:: - The operation **.Dagger()** (which is the transposition plus a conjugation) shows same behavior as transpose discussed above. + 1. The method **Transpose_()** works similarly, but changes the UniTensor directly instead of generating a new UniTensor. + 2. For a :ref:`Fermionic UniTensor`, the order of the indices after transposing the tensor is inverted. + + +Dagger +********************** + +The methods **.Dagger()** and **.Dagger_()** correspond to the conjugate-transpose of a tensor, similar to applying .Conj() and .Transpose(). See the previous section :ref:`Transpose` for the behavior. diff --git a/docs/source/guide/uniten/print.rst b/docs/source/guide/uniten/print.rst index a8c8e8e28..57cef00e0 100644 --- a/docs/source/guide/uniten/print.rst +++ b/docs/source/guide/uniten/print.rst @@ -1,5 +1,6 @@ Print and display -------------------- + Cytnx provides several ways to display the data stored in a UniTensor. This can be helpful to check the implementation. diff --git a/docs/source/guide/uniten/symmetric.rst b/docs/source/guide/uniten/symmetric.rst index 07bb3102e..28cadc4cc 100644 --- a/docs/source/guide/uniten/symmetric.rst +++ b/docs/source/guide/uniten/symmetric.rst @@ -1,5 +1,5 @@ UniTensor with Symmetries ---------------------------- +---------------------------- Physical systems are often symmetric under certain transformations. Exploiting such symmetries can be advantageous in many cases. Cytnx allows to incorporate the symmetries on the level of the tensors directly. diff --git a/docs/source/index.rst b/docs/source/index.rst index d370369b9..4938f6514 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -20,15 +20,15 @@ Cytnx user guide and examples install.rst adv_install.rst - convention.rst Guide.rst Examples.rst CommApp.rst Perf_tune.rst .. toctree:: - API Documentation - Github + API Documentation + Paper + Github 5-mins Blitz intro slide .. toctree:: diff --git a/docs/source/install.rst b/docs/source/install.rst index ef2245b94..90fab6382 100644 --- a/docs/source/install.rst +++ b/docs/source/install.rst @@ -24,7 +24,7 @@ In the following we show how to install Cytnx with conda. .. Note:: 1. We do not support a native Windows package at this stage. If you are using Windows OS, please use WSL. - 2. [0.9] Currently, the supported Python versions are updated to: linux -- 3.8/3.9/3.10; MacOS-osx64 -- 3.7+ (no conda support). You can change the python=* argument to the version you like. + 2. Currently, the supported Python versions are updated to: linux -- 3.9+; MacOS-osx64 -- 3.9+ (no conda support). You can change the python=* argument to the version you like. * For MacOS: @@ -37,7 +37,7 @@ In the following we show how to install Cytnx with conda. :linenos: $conda config --add channels conda-forge - $conda create --channel conda-forge --name cytnx python=3.8 llvm-openmp + $conda create --channel conda-forge --name cytnx python=3.9 llvm-openmp .. note:: @@ -124,6 +124,7 @@ Let us consider the same example as before for Python. Here, we want to compile #include "cytnx.hpp" #include using namespace std; + using namespace cytnx; int main(){ auto A = zeros(4); diff --git a/docs/source/link.py b/docs/source/link.py index 149f59f54..01477e11a 100644 --- a/docs/source/link.py +++ b/docs/source/link.py @@ -12,6 +12,6 @@ 'virtualenv':("https://docs.conda.io/projects/conda/en/latest/user-guide/tasks/manage-environments.html#%s",None),\ 'mkl-mac':("https://software.intel.com/content/www/us/en/develop/tools/math-kernel-library/choose-download/macos.html%s",None),\ 'wsl':("https://docs.microsoft.com/en-us/windows/wsl/install-win10%s",None),\ - #'cytnx_namespace':("https://kaihsinwu.gitlab.io/cytnx_api/"+ _version + "/namespacecytnx.html%s",None),\ - #'cytnx_linalg':("https://kaihsinwu.gitlab.io/cytnx_api/" + _version + "/namespacecytnx_1_1linalg.html%s",None)\ + 'cytnx_namespace':("../../api_build/html/versions/latest/namespacecytnx.html%s",None),\ + 'cytnx_linalg':("../../api_build/html/versions/latest/namespacecytnx_1_1linalg.html%s",None)\ } diff --git a/docs/tests/test_doc.py b/docs/tests/test_doc.py index 979f73b41..9a54d07c8 100644 --- a/docs/tests/test_doc.py +++ b/docs/tests/test_doc.py @@ -346,8 +346,8 @@ def test_guide_contraction_network_label_ord(capsys): def test_guide_contraction_contract_Contract(capsys): excute_and_output('guide_contraction_contract_Contract', capsys) -def test_guide_contraction_contract_relabes(capsys): - excute_and_output('guide_contraction_contract_relabels', capsys) +def test_guide_contraction_contract_relabel(capsys): + excute_and_output('guide_contraction_contract_relabel', capsys) def test_guide_contraction_contract_Contracts(capsys): excute_and_output('guide_contraction_contract_Contracts', capsys) diff --git a/docs/uv.lock b/docs/uv.lock index 031dfa49f..0159ac7c4 100644 --- a/docs/uv.lock +++ b/docs/uv.lock @@ -1,5 +1,5 @@ version = 1 -revision = 1 +revision = 2 requires-python = ">=3.10" resolution-markers = [ "python_full_version >= '3.12'", @@ -11,18 +11,18 @@ resolution-markers = [ name = "alabaster" version = "1.0.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/a6/f8/d9c74d0daf3f742840fd818d69cfae176fa332022fd44e3469487d5a9420/alabaster-1.0.0.tar.gz", hash = "sha256:c00dca57bca26fa62a6d7d0a9fcce65f3e026e9bfe33e9c538fd3fbb2144fd9e", size = 24210 } +sdist = { url = "https://files.pythonhosted.org/packages/a6/f8/d9c74d0daf3f742840fd818d69cfae176fa332022fd44e3469487d5a9420/alabaster-1.0.0.tar.gz", hash = "sha256:c00dca57bca26fa62a6d7d0a9fcce65f3e026e9bfe33e9c538fd3fbb2144fd9e", size = 24210, upload-time = "2024-07-26T18:15:03.762Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/7e/b3/6b4067be973ae96ba0d615946e314c5ae35f9f993eca561b356540bb0c2b/alabaster-1.0.0-py3-none-any.whl", hash = "sha256:fc6786402dc3fcb2de3cabd5fe455a2db534b371124f1f21de8731783dec828b", size = 13929 }, + { url = "https://files.pythonhosted.org/packages/7e/b3/6b4067be973ae96ba0d615946e314c5ae35f9f993eca561b356540bb0c2b/alabaster-1.0.0-py3-none-any.whl", hash = "sha256:fc6786402dc3fcb2de3cabd5fe455a2db534b371124f1f21de8731783dec828b", size = 13929, upload-time = "2024-07-26T18:15:02.05Z" }, ] [[package]] name = "babel" version = "2.17.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/7d/6b/d52e42361e1aa00709585ecc30b3f9684b3ab62530771402248b1b1d6240/babel-2.17.0.tar.gz", hash = "sha256:0c54cffb19f690cdcc52a3b50bcbf71e07a808d1c80d549f2459b9d2cf0afb9d", size = 9951852 } +sdist = { url = "https://files.pythonhosted.org/packages/7d/6b/d52e42361e1aa00709585ecc30b3f9684b3ab62530771402248b1b1d6240/babel-2.17.0.tar.gz", hash = "sha256:0c54cffb19f690cdcc52a3b50bcbf71e07a808d1c80d549f2459b9d2cf0afb9d", size = 9951852, upload-time = "2025-02-01T15:17:41.026Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/b7/b8/3fe70c75fe32afc4bb507f75563d39bc5642255d1d94f1f23604725780bf/babel-2.17.0-py3-none-any.whl", hash = "sha256:4d0b53093fdfb4b21c92b5213dba5a1b23885afa8383709427046b21c366e5f2", size = 10182537 }, + { url = "https://files.pythonhosted.org/packages/b7/b8/3fe70c75fe32afc4bb507f75563d39bc5642255d1d94f1f23604725780bf/babel-2.17.0-py3-none-any.whl", hash = "sha256:4d0b53093fdfb4b21c92b5213dba5a1b23885afa8383709427046b21c366e5f2", size = 10182537, upload-time = "2025-02-01T15:17:37.39Z" }, ] [[package]] @@ -33,9 +33,9 @@ dependencies = [ { name = "soupsieve" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/f0/3c/adaf39ce1fb4afdd21b611e3d530b183bb7759c9b673d60db0e347fd4439/beautifulsoup4-4.13.3.tar.gz", hash = "sha256:1bd32405dacc920b42b83ba01644747ed77456a65760e285fbc47633ceddaf8b", size = 619516 } +sdist = { url = "https://files.pythonhosted.org/packages/f0/3c/adaf39ce1fb4afdd21b611e3d530b183bb7759c9b673d60db0e347fd4439/beautifulsoup4-4.13.3.tar.gz", hash = "sha256:1bd32405dacc920b42b83ba01644747ed77456a65760e285fbc47633ceddaf8b", size = 619516, upload-time = "2025-02-04T20:05:01.681Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/f9/49/6abb616eb3cbab6a7cca303dc02fdf3836de2e0b834bf966a7f5271a34d8/beautifulsoup4-4.13.3-py3-none-any.whl", hash = "sha256:99045d7d3f08f91f0d656bc9b7efbae189426cd913d830294a15eefa0ea4df16", size = 186015 }, + { url = "https://files.pythonhosted.org/packages/f9/49/6abb616eb3cbab6a7cca303dc02fdf3836de2e0b834bf966a7f5271a34d8/beautifulsoup4-4.13.3-py3-none-any.whl", hash = "sha256:99045d7d3f08f91f0d656bc9b7efbae189426cd913d830294a15eefa0ea4df16", size = 186015, upload-time = "2025-02-04T20:05:03.729Z" }, ] [[package]] @@ -46,88 +46,88 @@ dependencies = [ { name = "sphinx", version = "8.1.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, { name = "sphinx", version = "8.2.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/01/56/99bf7d0799d95ad485d95596dc01c2a5b3dda58ebf50a94f6f73b33bacdf/breathe-4.36.0.tar.gz", hash = "sha256:14860b73118ac140b7a3f55446890c777d1b67149cb024279fe3710dad7f535c", size = 154842 } +sdist = { url = "https://files.pythonhosted.org/packages/01/56/99bf7d0799d95ad485d95596dc01c2a5b3dda58ebf50a94f6f73b33bacdf/breathe-4.36.0.tar.gz", hash = "sha256:14860b73118ac140b7a3f55446890c777d1b67149cb024279fe3710dad7f535c", size = 154842, upload-time = "2025-02-22T18:36:03.36Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/2c/bc/d67ef1e11ed6e6343c135bf605aa9d5734ff0cc77eb42a2a41f182abc9d9/breathe-4.36.0-py3-none-any.whl", hash = "sha256:af85436f1f09e842bd1fd95617281211c635f8768d245ff830c59b979888d1d5", size = 97231 }, + { url = "https://files.pythonhosted.org/packages/2c/bc/d67ef1e11ed6e6343c135bf605aa9d5734ff0cc77eb42a2a41f182abc9d9/breathe-4.36.0-py3-none-any.whl", hash = "sha256:af85436f1f09e842bd1fd95617281211c635f8768d245ff830c59b979888d1d5", size = 97231, upload-time = "2025-02-22T18:36:01.087Z" }, ] [[package]] name = "certifi" version = "2025.1.31" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/1c/ab/c9f1e32b7b1bf505bf26f0ef697775960db7932abeb7b516de930ba2705f/certifi-2025.1.31.tar.gz", hash = "sha256:3d5da6925056f6f18f119200434a4780a94263f10d1c21d032a6f6b2baa20651", size = 167577 } +sdist = { url = "https://files.pythonhosted.org/packages/1c/ab/c9f1e32b7b1bf505bf26f0ef697775960db7932abeb7b516de930ba2705f/certifi-2025.1.31.tar.gz", hash = "sha256:3d5da6925056f6f18f119200434a4780a94263f10d1c21d032a6f6b2baa20651", size = 167577, upload-time = "2025-01-31T02:16:47.166Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/38/fc/bce832fd4fd99766c04d1ee0eead6b0ec6486fb100ae5e74c1d91292b982/certifi-2025.1.31-py3-none-any.whl", hash = "sha256:ca78db4565a652026a4db2bcdf68f2fb589ea80d0be70e03929ed730746b84fe", size = 166393 }, + { url = "https://files.pythonhosted.org/packages/38/fc/bce832fd4fd99766c04d1ee0eead6b0ec6486fb100ae5e74c1d91292b982/certifi-2025.1.31-py3-none-any.whl", hash = "sha256:ca78db4565a652026a4db2bcdf68f2fb589ea80d0be70e03929ed730746b84fe", size = 166393, upload-time = "2025-01-31T02:16:45.015Z" }, ] [[package]] name = "charset-normalizer" version = "3.4.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/16/b0/572805e227f01586461c80e0fd25d65a2115599cc9dad142fee4b747c357/charset_normalizer-3.4.1.tar.gz", hash = "sha256:44251f18cd68a75b56585dd00dae26183e102cd5e0f9f1466e6df5da2ed64ea3", size = 123188 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/0d/58/5580c1716040bc89206c77d8f74418caf82ce519aae06450393ca73475d1/charset_normalizer-3.4.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:91b36a978b5ae0ee86c394f5a54d6ef44db1de0815eb43de826d41d21e4af3de", size = 198013 }, - { url = "https://files.pythonhosted.org/packages/d0/11/00341177ae71c6f5159a08168bcb98c6e6d196d372c94511f9f6c9afe0c6/charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7461baadb4dc00fd9e0acbe254e3d7d2112e7f92ced2adc96e54ef6501c5f176", size = 141285 }, - { url = "https://files.pythonhosted.org/packages/01/09/11d684ea5819e5a8f5100fb0b38cf8d02b514746607934134d31233e02c8/charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e218488cd232553829be0664c2292d3af2eeeb94b32bea483cf79ac6a694e037", size = 151449 }, - { url = "https://files.pythonhosted.org/packages/08/06/9f5a12939db324d905dc1f70591ae7d7898d030d7662f0d426e2286f68c9/charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:80ed5e856eb7f30115aaf94e4a08114ccc8813e6ed1b5efa74f9f82e8509858f", size = 143892 }, - { url = "https://files.pythonhosted.org/packages/93/62/5e89cdfe04584cb7f4d36003ffa2936681b03ecc0754f8e969c2becb7e24/charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b010a7a4fd316c3c484d482922d13044979e78d1861f0e0650423144c616a46a", size = 146123 }, - { url = "https://files.pythonhosted.org/packages/a9/ac/ab729a15c516da2ab70a05f8722ecfccc3f04ed7a18e45c75bbbaa347d61/charset_normalizer-3.4.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4532bff1b8421fd0a320463030c7520f56a79c9024a4e88f01c537316019005a", size = 147943 }, - { url = "https://files.pythonhosted.org/packages/03/d2/3f392f23f042615689456e9a274640c1d2e5dd1d52de36ab8f7955f8f050/charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:d973f03c0cb71c5ed99037b870f2be986c3c05e63622c017ea9816881d2dd247", size = 142063 }, - { url = "https://files.pythonhosted.org/packages/f2/e3/e20aae5e1039a2cd9b08d9205f52142329f887f8cf70da3650326670bddf/charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:3a3bd0dcd373514dcec91c411ddb9632c0d7d92aed7093b8c3bbb6d69ca74408", size = 150578 }, - { url = "https://files.pythonhosted.org/packages/8d/af/779ad72a4da0aed925e1139d458adc486e61076d7ecdcc09e610ea8678db/charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:d9c3cdf5390dcd29aa8056d13e8e99526cda0305acc038b96b30352aff5ff2bb", size = 153629 }, - { url = "https://files.pythonhosted.org/packages/c2/b6/7aa450b278e7aa92cf7732140bfd8be21f5f29d5bf334ae987c945276639/charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:2bdfe3ac2e1bbe5b59a1a63721eb3b95fc9b6817ae4a46debbb4e11f6232428d", size = 150778 }, - { url = "https://files.pythonhosted.org/packages/39/f4/d9f4f712d0951dcbfd42920d3db81b00dd23b6ab520419626f4023334056/charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:eab677309cdb30d047996b36d34caeda1dc91149e4fdca0b1a039b3f79d9a807", size = 146453 }, - { url = "https://files.pythonhosted.org/packages/49/2b/999d0314e4ee0cff3cb83e6bc9aeddd397eeed693edb4facb901eb8fbb69/charset_normalizer-3.4.1-cp310-cp310-win32.whl", hash = "sha256:c0429126cf75e16c4f0ad00ee0eae4242dc652290f940152ca8c75c3a4b6ee8f", size = 95479 }, - { url = "https://files.pythonhosted.org/packages/2d/ce/3cbed41cff67e455a386fb5e5dd8906cdda2ed92fbc6297921f2e4419309/charset_normalizer-3.4.1-cp310-cp310-win_amd64.whl", hash = "sha256:9f0b8b1c6d84c8034a44893aba5e767bf9c7a211e313a9605d9c617d7083829f", size = 102790 }, - { url = "https://files.pythonhosted.org/packages/72/80/41ef5d5a7935d2d3a773e3eaebf0a9350542f2cab4eac59a7a4741fbbbbe/charset_normalizer-3.4.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:8bfa33f4f2672964266e940dd22a195989ba31669bd84629f05fab3ef4e2d125", size = 194995 }, - { url = "https://files.pythonhosted.org/packages/7a/28/0b9fefa7b8b080ec492110af6d88aa3dea91c464b17d53474b6e9ba5d2c5/charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:28bf57629c75e810b6ae989f03c0828d64d6b26a5e205535585f96093e405ed1", size = 139471 }, - { url = "https://files.pythonhosted.org/packages/71/64/d24ab1a997efb06402e3fc07317e94da358e2585165930d9d59ad45fcae2/charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f08ff5e948271dc7e18a35641d2f11a4cd8dfd5634f55228b691e62b37125eb3", size = 149831 }, - { url = "https://files.pythonhosted.org/packages/37/ed/be39e5258e198655240db5e19e0b11379163ad7070962d6b0c87ed2c4d39/charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:234ac59ea147c59ee4da87a0c0f098e9c8d169f4dc2a159ef720f1a61bbe27cd", size = 142335 }, - { url = "https://files.pythonhosted.org/packages/88/83/489e9504711fa05d8dde1574996408026bdbdbd938f23be67deebb5eca92/charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd4ec41f914fa74ad1b8304bbc634b3de73d2a0889bd32076342a573e0779e00", size = 143862 }, - { url = "https://files.pythonhosted.org/packages/c6/c7/32da20821cf387b759ad24627a9aca289d2822de929b8a41b6241767b461/charset_normalizer-3.4.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eea6ee1db730b3483adf394ea72f808b6e18cf3cb6454b4d86e04fa8c4327a12", size = 145673 }, - { url = "https://files.pythonhosted.org/packages/68/85/f4288e96039abdd5aeb5c546fa20a37b50da71b5cf01e75e87f16cd43304/charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c96836c97b1238e9c9e3fe90844c947d5afbf4f4c92762679acfe19927d81d77", size = 140211 }, - { url = "https://files.pythonhosted.org/packages/28/a3/a42e70d03cbdabc18997baf4f0227c73591a08041c149e710045c281f97b/charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:4d86f7aff21ee58f26dcf5ae81a9addbd914115cdebcbb2217e4f0ed8982e146", size = 148039 }, - { url = "https://files.pythonhosted.org/packages/85/e4/65699e8ab3014ecbe6f5c71d1a55d810fb716bbfd74f6283d5c2aa87febf/charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:09b5e6733cbd160dcc09589227187e242a30a49ca5cefa5a7edd3f9d19ed53fd", size = 151939 }, - { url = "https://files.pythonhosted.org/packages/b1/82/8e9fe624cc5374193de6860aba3ea8070f584c8565ee77c168ec13274bd2/charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:5777ee0881f9499ed0f71cc82cf873d9a0ca8af166dfa0af8ec4e675b7df48e6", size = 149075 }, - { url = "https://files.pythonhosted.org/packages/3d/7b/82865ba54c765560c8433f65e8acb9217cb839a9e32b42af4aa8e945870f/charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:237bdbe6159cff53b4f24f397d43c6336c6b0b42affbe857970cefbb620911c8", size = 144340 }, - { url = "https://files.pythonhosted.org/packages/b5/b6/9674a4b7d4d99a0d2df9b215da766ee682718f88055751e1e5e753c82db0/charset_normalizer-3.4.1-cp311-cp311-win32.whl", hash = "sha256:8417cb1f36cc0bc7eaba8ccb0e04d55f0ee52df06df3ad55259b9a323555fc8b", size = 95205 }, - { url = "https://files.pythonhosted.org/packages/1e/ab/45b180e175de4402dcf7547e4fb617283bae54ce35c27930a6f35b6bef15/charset_normalizer-3.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:d7f50a1f8c450f3925cb367d011448c39239bb3eb4117c36a6d354794de4ce76", size = 102441 }, - { url = "https://files.pythonhosted.org/packages/0a/9a/dd1e1cdceb841925b7798369a09279bd1cf183cef0f9ddf15a3a6502ee45/charset_normalizer-3.4.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:73d94b58ec7fecbc7366247d3b0b10a21681004153238750bb67bd9012414545", size = 196105 }, - { url = "https://files.pythonhosted.org/packages/d3/8c/90bfabf8c4809ecb648f39794cf2a84ff2e7d2a6cf159fe68d9a26160467/charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dad3e487649f498dd991eeb901125411559b22e8d7ab25d3aeb1af367df5efd7", size = 140404 }, - { url = "https://files.pythonhosted.org/packages/ad/8f/e410d57c721945ea3b4f1a04b74f70ce8fa800d393d72899f0a40526401f/charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c30197aa96e8eed02200a83fba2657b4c3acd0f0aa4bdc9f6c1af8e8962e0757", size = 150423 }, - { url = "https://files.pythonhosted.org/packages/f0/b8/e6825e25deb691ff98cf5c9072ee0605dc2acfca98af70c2d1b1bc75190d/charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2369eea1ee4a7610a860d88f268eb39b95cb588acd7235e02fd5a5601773d4fa", size = 143184 }, - { url = "https://files.pythonhosted.org/packages/3e/a2/513f6cbe752421f16d969e32f3583762bfd583848b763913ddab8d9bfd4f/charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc2722592d8998c870fa4e290c2eec2c1569b87fe58618e67d38b4665dfa680d", size = 145268 }, - { url = "https://files.pythonhosted.org/packages/74/94/8a5277664f27c3c438546f3eb53b33f5b19568eb7424736bdc440a88a31f/charset_normalizer-3.4.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ffc9202a29ab3920fa812879e95a9e78b2465fd10be7fcbd042899695d75e616", size = 147601 }, - { url = "https://files.pythonhosted.org/packages/7c/5f/6d352c51ee763623a98e31194823518e09bfa48be2a7e8383cf691bbb3d0/charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:804a4d582ba6e5b747c625bf1255e6b1507465494a40a2130978bda7b932c90b", size = 141098 }, - { url = "https://files.pythonhosted.org/packages/78/d4/f5704cb629ba5ab16d1d3d741396aec6dc3ca2b67757c45b0599bb010478/charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:0f55e69f030f7163dffe9fd0752b32f070566451afe180f99dbeeb81f511ad8d", size = 149520 }, - { url = "https://files.pythonhosted.org/packages/c5/96/64120b1d02b81785f222b976c0fb79a35875457fa9bb40827678e54d1bc8/charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:c4c3e6da02df6fa1410a7680bd3f63d4f710232d3139089536310d027950696a", size = 152852 }, - { url = "https://files.pythonhosted.org/packages/84/c9/98e3732278a99f47d487fd3468bc60b882920cef29d1fa6ca460a1fdf4e6/charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:5df196eb874dae23dcfb968c83d4f8fdccb333330fe1fc278ac5ceeb101003a9", size = 150488 }, - { url = "https://files.pythonhosted.org/packages/13/0e/9c8d4cb99c98c1007cc11eda969ebfe837bbbd0acdb4736d228ccaabcd22/charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e358e64305fe12299a08e08978f51fc21fac060dcfcddd95453eabe5b93ed0e1", size = 146192 }, - { url = "https://files.pythonhosted.org/packages/b2/21/2b6b5b860781a0b49427309cb8670785aa543fb2178de875b87b9cc97746/charset_normalizer-3.4.1-cp312-cp312-win32.whl", hash = "sha256:9b23ca7ef998bc739bf6ffc077c2116917eabcc901f88da1b9856b210ef63f35", size = 95550 }, - { url = "https://files.pythonhosted.org/packages/21/5b/1b390b03b1d16c7e382b561c5329f83cc06623916aab983e8ab9239c7d5c/charset_normalizer-3.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:6ff8a4a60c227ad87030d76e99cd1698345d4491638dfa6673027c48b3cd395f", size = 102785 }, - { url = "https://files.pythonhosted.org/packages/38/94/ce8e6f63d18049672c76d07d119304e1e2d7c6098f0841b51c666e9f44a0/charset_normalizer-3.4.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:aabfa34badd18f1da5ec1bc2715cadc8dca465868a4e73a0173466b688f29dda", size = 195698 }, - { url = "https://files.pythonhosted.org/packages/24/2e/dfdd9770664aae179a96561cc6952ff08f9a8cd09a908f259a9dfa063568/charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22e14b5d70560b8dd51ec22863f370d1e595ac3d024cb8ad7d308b4cd95f8313", size = 140162 }, - { url = "https://files.pythonhosted.org/packages/24/4e/f646b9093cff8fc86f2d60af2de4dc17c759de9d554f130b140ea4738ca6/charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8436c508b408b82d87dc5f62496973a1805cd46727c34440b0d29d8a2f50a6c9", size = 150263 }, - { url = "https://files.pythonhosted.org/packages/5e/67/2937f8d548c3ef6e2f9aab0f6e21001056f692d43282b165e7c56023e6dd/charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2d074908e1aecee37a7635990b2c6d504cd4766c7bc9fc86d63f9c09af3fa11b", size = 142966 }, - { url = "https://files.pythonhosted.org/packages/52/ed/b7f4f07de100bdb95c1756d3a4d17b90c1a3c53715c1a476f8738058e0fa/charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:955f8851919303c92343d2f66165294848d57e9bba6cf6e3625485a70a038d11", size = 144992 }, - { url = "https://files.pythonhosted.org/packages/96/2c/d49710a6dbcd3776265f4c923bb73ebe83933dfbaa841c5da850fe0fd20b/charset_normalizer-3.4.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:44ecbf16649486d4aebafeaa7ec4c9fed8b88101f4dd612dcaf65d5e815f837f", size = 147162 }, - { url = "https://files.pythonhosted.org/packages/b4/41/35ff1f9a6bd380303dea55e44c4933b4cc3c4850988927d4082ada230273/charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:0924e81d3d5e70f8126529951dac65c1010cdf117bb75eb02dd12339b57749dd", size = 140972 }, - { url = "https://files.pythonhosted.org/packages/fb/43/c6a0b685fe6910d08ba971f62cd9c3e862a85770395ba5d9cad4fede33ab/charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:2967f74ad52c3b98de4c3b32e1a44e32975e008a9cd2a8cc8966d6a5218c5cb2", size = 149095 }, - { url = "https://files.pythonhosted.org/packages/4c/ff/a9a504662452e2d2878512115638966e75633519ec11f25fca3d2049a94a/charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:c75cb2a3e389853835e84a2d8fb2b81a10645b503eca9bcb98df6b5a43eb8886", size = 152668 }, - { url = "https://files.pythonhosted.org/packages/6c/71/189996b6d9a4b932564701628af5cee6716733e9165af1d5e1b285c530ed/charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:09b26ae6b1abf0d27570633b2b078a2a20419c99d66fb2823173d73f188ce601", size = 150073 }, - { url = "https://files.pythonhosted.org/packages/e4/93/946a86ce20790e11312c87c75ba68d5f6ad2208cfb52b2d6a2c32840d922/charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:fa88b843d6e211393a37219e6a1c1df99d35e8fd90446f1118f4216e307e48cd", size = 145732 }, - { url = "https://files.pythonhosted.org/packages/cd/e5/131d2fb1b0dddafc37be4f3a2fa79aa4c037368be9423061dccadfd90091/charset_normalizer-3.4.1-cp313-cp313-win32.whl", hash = "sha256:eb8178fe3dba6450a3e024e95ac49ed3400e506fd4e9e5c32d30adda88cbd407", size = 95391 }, - { url = "https://files.pythonhosted.org/packages/27/f2/4f9a69cc7712b9b5ad8fdb87039fd89abba997ad5cbe690d1835d40405b0/charset_normalizer-3.4.1-cp313-cp313-win_amd64.whl", hash = "sha256:b1ac5992a838106edb89654e0aebfc24f5848ae2547d22c2c3f66454daa11971", size = 102702 }, - { url = "https://files.pythonhosted.org/packages/0e/f6/65ecc6878a89bb1c23a086ea335ad4bf21a588990c3f535a227b9eea9108/charset_normalizer-3.4.1-py3-none-any.whl", hash = "sha256:d98b1668f06378c6dbefec3b92299716b931cd4e6061f3c875a71ced1780ab85", size = 49767 }, +sdist = { url = "https://files.pythonhosted.org/packages/16/b0/572805e227f01586461c80e0fd25d65a2115599cc9dad142fee4b747c357/charset_normalizer-3.4.1.tar.gz", hash = "sha256:44251f18cd68a75b56585dd00dae26183e102cd5e0f9f1466e6df5da2ed64ea3", size = 123188, upload-time = "2024-12-24T18:12:35.43Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0d/58/5580c1716040bc89206c77d8f74418caf82ce519aae06450393ca73475d1/charset_normalizer-3.4.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:91b36a978b5ae0ee86c394f5a54d6ef44db1de0815eb43de826d41d21e4af3de", size = 198013, upload-time = "2024-12-24T18:09:43.671Z" }, + { url = "https://files.pythonhosted.org/packages/d0/11/00341177ae71c6f5159a08168bcb98c6e6d196d372c94511f9f6c9afe0c6/charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7461baadb4dc00fd9e0acbe254e3d7d2112e7f92ced2adc96e54ef6501c5f176", size = 141285, upload-time = "2024-12-24T18:09:48.113Z" }, + { url = "https://files.pythonhosted.org/packages/01/09/11d684ea5819e5a8f5100fb0b38cf8d02b514746607934134d31233e02c8/charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e218488cd232553829be0664c2292d3af2eeeb94b32bea483cf79ac6a694e037", size = 151449, upload-time = "2024-12-24T18:09:50.845Z" }, + { url = "https://files.pythonhosted.org/packages/08/06/9f5a12939db324d905dc1f70591ae7d7898d030d7662f0d426e2286f68c9/charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:80ed5e856eb7f30115aaf94e4a08114ccc8813e6ed1b5efa74f9f82e8509858f", size = 143892, upload-time = "2024-12-24T18:09:52.078Z" }, + { url = "https://files.pythonhosted.org/packages/93/62/5e89cdfe04584cb7f4d36003ffa2936681b03ecc0754f8e969c2becb7e24/charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b010a7a4fd316c3c484d482922d13044979e78d1861f0e0650423144c616a46a", size = 146123, upload-time = "2024-12-24T18:09:54.575Z" }, + { url = "https://files.pythonhosted.org/packages/a9/ac/ab729a15c516da2ab70a05f8722ecfccc3f04ed7a18e45c75bbbaa347d61/charset_normalizer-3.4.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4532bff1b8421fd0a320463030c7520f56a79c9024a4e88f01c537316019005a", size = 147943, upload-time = "2024-12-24T18:09:57.324Z" }, + { url = "https://files.pythonhosted.org/packages/03/d2/3f392f23f042615689456e9a274640c1d2e5dd1d52de36ab8f7955f8f050/charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:d973f03c0cb71c5ed99037b870f2be986c3c05e63622c017ea9816881d2dd247", size = 142063, upload-time = "2024-12-24T18:09:59.794Z" }, + { url = "https://files.pythonhosted.org/packages/f2/e3/e20aae5e1039a2cd9b08d9205f52142329f887f8cf70da3650326670bddf/charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:3a3bd0dcd373514dcec91c411ddb9632c0d7d92aed7093b8c3bbb6d69ca74408", size = 150578, upload-time = "2024-12-24T18:10:02.357Z" }, + { url = "https://files.pythonhosted.org/packages/8d/af/779ad72a4da0aed925e1139d458adc486e61076d7ecdcc09e610ea8678db/charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:d9c3cdf5390dcd29aa8056d13e8e99526cda0305acc038b96b30352aff5ff2bb", size = 153629, upload-time = "2024-12-24T18:10:03.678Z" }, + { url = "https://files.pythonhosted.org/packages/c2/b6/7aa450b278e7aa92cf7732140bfd8be21f5f29d5bf334ae987c945276639/charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:2bdfe3ac2e1bbe5b59a1a63721eb3b95fc9b6817ae4a46debbb4e11f6232428d", size = 150778, upload-time = "2024-12-24T18:10:06.197Z" }, + { url = "https://files.pythonhosted.org/packages/39/f4/d9f4f712d0951dcbfd42920d3db81b00dd23b6ab520419626f4023334056/charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:eab677309cdb30d047996b36d34caeda1dc91149e4fdca0b1a039b3f79d9a807", size = 146453, upload-time = "2024-12-24T18:10:08.848Z" }, + { url = "https://files.pythonhosted.org/packages/49/2b/999d0314e4ee0cff3cb83e6bc9aeddd397eeed693edb4facb901eb8fbb69/charset_normalizer-3.4.1-cp310-cp310-win32.whl", hash = "sha256:c0429126cf75e16c4f0ad00ee0eae4242dc652290f940152ca8c75c3a4b6ee8f", size = 95479, upload-time = "2024-12-24T18:10:10.044Z" }, + { url = "https://files.pythonhosted.org/packages/2d/ce/3cbed41cff67e455a386fb5e5dd8906cdda2ed92fbc6297921f2e4419309/charset_normalizer-3.4.1-cp310-cp310-win_amd64.whl", hash = "sha256:9f0b8b1c6d84c8034a44893aba5e767bf9c7a211e313a9605d9c617d7083829f", size = 102790, upload-time = "2024-12-24T18:10:11.323Z" }, + { url = "https://files.pythonhosted.org/packages/72/80/41ef5d5a7935d2d3a773e3eaebf0a9350542f2cab4eac59a7a4741fbbbbe/charset_normalizer-3.4.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:8bfa33f4f2672964266e940dd22a195989ba31669bd84629f05fab3ef4e2d125", size = 194995, upload-time = "2024-12-24T18:10:12.838Z" }, + { url = "https://files.pythonhosted.org/packages/7a/28/0b9fefa7b8b080ec492110af6d88aa3dea91c464b17d53474b6e9ba5d2c5/charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:28bf57629c75e810b6ae989f03c0828d64d6b26a5e205535585f96093e405ed1", size = 139471, upload-time = "2024-12-24T18:10:14.101Z" }, + { url = "https://files.pythonhosted.org/packages/71/64/d24ab1a997efb06402e3fc07317e94da358e2585165930d9d59ad45fcae2/charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f08ff5e948271dc7e18a35641d2f11a4cd8dfd5634f55228b691e62b37125eb3", size = 149831, upload-time = "2024-12-24T18:10:15.512Z" }, + { url = "https://files.pythonhosted.org/packages/37/ed/be39e5258e198655240db5e19e0b11379163ad7070962d6b0c87ed2c4d39/charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:234ac59ea147c59ee4da87a0c0f098e9c8d169f4dc2a159ef720f1a61bbe27cd", size = 142335, upload-time = "2024-12-24T18:10:18.369Z" }, + { url = "https://files.pythonhosted.org/packages/88/83/489e9504711fa05d8dde1574996408026bdbdbd938f23be67deebb5eca92/charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd4ec41f914fa74ad1b8304bbc634b3de73d2a0889bd32076342a573e0779e00", size = 143862, upload-time = "2024-12-24T18:10:19.743Z" }, + { url = "https://files.pythonhosted.org/packages/c6/c7/32da20821cf387b759ad24627a9aca289d2822de929b8a41b6241767b461/charset_normalizer-3.4.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eea6ee1db730b3483adf394ea72f808b6e18cf3cb6454b4d86e04fa8c4327a12", size = 145673, upload-time = "2024-12-24T18:10:21.139Z" }, + { url = "https://files.pythonhosted.org/packages/68/85/f4288e96039abdd5aeb5c546fa20a37b50da71b5cf01e75e87f16cd43304/charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c96836c97b1238e9c9e3fe90844c947d5afbf4f4c92762679acfe19927d81d77", size = 140211, upload-time = "2024-12-24T18:10:22.382Z" }, + { url = "https://files.pythonhosted.org/packages/28/a3/a42e70d03cbdabc18997baf4f0227c73591a08041c149e710045c281f97b/charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:4d86f7aff21ee58f26dcf5ae81a9addbd914115cdebcbb2217e4f0ed8982e146", size = 148039, upload-time = "2024-12-24T18:10:24.802Z" }, + { url = "https://files.pythonhosted.org/packages/85/e4/65699e8ab3014ecbe6f5c71d1a55d810fb716bbfd74f6283d5c2aa87febf/charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:09b5e6733cbd160dcc09589227187e242a30a49ca5cefa5a7edd3f9d19ed53fd", size = 151939, upload-time = "2024-12-24T18:10:26.124Z" }, + { url = "https://files.pythonhosted.org/packages/b1/82/8e9fe624cc5374193de6860aba3ea8070f584c8565ee77c168ec13274bd2/charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:5777ee0881f9499ed0f71cc82cf873d9a0ca8af166dfa0af8ec4e675b7df48e6", size = 149075, upload-time = "2024-12-24T18:10:30.027Z" }, + { url = "https://files.pythonhosted.org/packages/3d/7b/82865ba54c765560c8433f65e8acb9217cb839a9e32b42af4aa8e945870f/charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:237bdbe6159cff53b4f24f397d43c6336c6b0b42affbe857970cefbb620911c8", size = 144340, upload-time = "2024-12-24T18:10:32.679Z" }, + { url = "https://files.pythonhosted.org/packages/b5/b6/9674a4b7d4d99a0d2df9b215da766ee682718f88055751e1e5e753c82db0/charset_normalizer-3.4.1-cp311-cp311-win32.whl", hash = "sha256:8417cb1f36cc0bc7eaba8ccb0e04d55f0ee52df06df3ad55259b9a323555fc8b", size = 95205, upload-time = "2024-12-24T18:10:34.724Z" }, + { url = "https://files.pythonhosted.org/packages/1e/ab/45b180e175de4402dcf7547e4fb617283bae54ce35c27930a6f35b6bef15/charset_normalizer-3.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:d7f50a1f8c450f3925cb367d011448c39239bb3eb4117c36a6d354794de4ce76", size = 102441, upload-time = "2024-12-24T18:10:37.574Z" }, + { url = "https://files.pythonhosted.org/packages/0a/9a/dd1e1cdceb841925b7798369a09279bd1cf183cef0f9ddf15a3a6502ee45/charset_normalizer-3.4.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:73d94b58ec7fecbc7366247d3b0b10a21681004153238750bb67bd9012414545", size = 196105, upload-time = "2024-12-24T18:10:38.83Z" }, + { url = "https://files.pythonhosted.org/packages/d3/8c/90bfabf8c4809ecb648f39794cf2a84ff2e7d2a6cf159fe68d9a26160467/charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dad3e487649f498dd991eeb901125411559b22e8d7ab25d3aeb1af367df5efd7", size = 140404, upload-time = "2024-12-24T18:10:44.272Z" }, + { url = "https://files.pythonhosted.org/packages/ad/8f/e410d57c721945ea3b4f1a04b74f70ce8fa800d393d72899f0a40526401f/charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c30197aa96e8eed02200a83fba2657b4c3acd0f0aa4bdc9f6c1af8e8962e0757", size = 150423, upload-time = "2024-12-24T18:10:45.492Z" }, + { url = "https://files.pythonhosted.org/packages/f0/b8/e6825e25deb691ff98cf5c9072ee0605dc2acfca98af70c2d1b1bc75190d/charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2369eea1ee4a7610a860d88f268eb39b95cb588acd7235e02fd5a5601773d4fa", size = 143184, upload-time = "2024-12-24T18:10:47.898Z" }, + { url = "https://files.pythonhosted.org/packages/3e/a2/513f6cbe752421f16d969e32f3583762bfd583848b763913ddab8d9bfd4f/charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc2722592d8998c870fa4e290c2eec2c1569b87fe58618e67d38b4665dfa680d", size = 145268, upload-time = "2024-12-24T18:10:50.589Z" }, + { url = "https://files.pythonhosted.org/packages/74/94/8a5277664f27c3c438546f3eb53b33f5b19568eb7424736bdc440a88a31f/charset_normalizer-3.4.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ffc9202a29ab3920fa812879e95a9e78b2465fd10be7fcbd042899695d75e616", size = 147601, upload-time = "2024-12-24T18:10:52.541Z" }, + { url = "https://files.pythonhosted.org/packages/7c/5f/6d352c51ee763623a98e31194823518e09bfa48be2a7e8383cf691bbb3d0/charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:804a4d582ba6e5b747c625bf1255e6b1507465494a40a2130978bda7b932c90b", size = 141098, upload-time = "2024-12-24T18:10:53.789Z" }, + { url = "https://files.pythonhosted.org/packages/78/d4/f5704cb629ba5ab16d1d3d741396aec6dc3ca2b67757c45b0599bb010478/charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:0f55e69f030f7163dffe9fd0752b32f070566451afe180f99dbeeb81f511ad8d", size = 149520, upload-time = "2024-12-24T18:10:55.048Z" }, + { url = "https://files.pythonhosted.org/packages/c5/96/64120b1d02b81785f222b976c0fb79a35875457fa9bb40827678e54d1bc8/charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:c4c3e6da02df6fa1410a7680bd3f63d4f710232d3139089536310d027950696a", size = 152852, upload-time = "2024-12-24T18:10:57.647Z" }, + { url = "https://files.pythonhosted.org/packages/84/c9/98e3732278a99f47d487fd3468bc60b882920cef29d1fa6ca460a1fdf4e6/charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:5df196eb874dae23dcfb968c83d4f8fdccb333330fe1fc278ac5ceeb101003a9", size = 150488, upload-time = "2024-12-24T18:10:59.43Z" }, + { url = "https://files.pythonhosted.org/packages/13/0e/9c8d4cb99c98c1007cc11eda969ebfe837bbbd0acdb4736d228ccaabcd22/charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e358e64305fe12299a08e08978f51fc21fac060dcfcddd95453eabe5b93ed0e1", size = 146192, upload-time = "2024-12-24T18:11:00.676Z" }, + { url = "https://files.pythonhosted.org/packages/b2/21/2b6b5b860781a0b49427309cb8670785aa543fb2178de875b87b9cc97746/charset_normalizer-3.4.1-cp312-cp312-win32.whl", hash = "sha256:9b23ca7ef998bc739bf6ffc077c2116917eabcc901f88da1b9856b210ef63f35", size = 95550, upload-time = "2024-12-24T18:11:01.952Z" }, + { url = "https://files.pythonhosted.org/packages/21/5b/1b390b03b1d16c7e382b561c5329f83cc06623916aab983e8ab9239c7d5c/charset_normalizer-3.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:6ff8a4a60c227ad87030d76e99cd1698345d4491638dfa6673027c48b3cd395f", size = 102785, upload-time = "2024-12-24T18:11:03.142Z" }, + { url = "https://files.pythonhosted.org/packages/38/94/ce8e6f63d18049672c76d07d119304e1e2d7c6098f0841b51c666e9f44a0/charset_normalizer-3.4.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:aabfa34badd18f1da5ec1bc2715cadc8dca465868a4e73a0173466b688f29dda", size = 195698, upload-time = "2024-12-24T18:11:05.834Z" }, + { url = "https://files.pythonhosted.org/packages/24/2e/dfdd9770664aae179a96561cc6952ff08f9a8cd09a908f259a9dfa063568/charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22e14b5d70560b8dd51ec22863f370d1e595ac3d024cb8ad7d308b4cd95f8313", size = 140162, upload-time = "2024-12-24T18:11:07.064Z" }, + { url = "https://files.pythonhosted.org/packages/24/4e/f646b9093cff8fc86f2d60af2de4dc17c759de9d554f130b140ea4738ca6/charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8436c508b408b82d87dc5f62496973a1805cd46727c34440b0d29d8a2f50a6c9", size = 150263, upload-time = "2024-12-24T18:11:08.374Z" }, + { url = "https://files.pythonhosted.org/packages/5e/67/2937f8d548c3ef6e2f9aab0f6e21001056f692d43282b165e7c56023e6dd/charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2d074908e1aecee37a7635990b2c6d504cd4766c7bc9fc86d63f9c09af3fa11b", size = 142966, upload-time = "2024-12-24T18:11:09.831Z" }, + { url = "https://files.pythonhosted.org/packages/52/ed/b7f4f07de100bdb95c1756d3a4d17b90c1a3c53715c1a476f8738058e0fa/charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:955f8851919303c92343d2f66165294848d57e9bba6cf6e3625485a70a038d11", size = 144992, upload-time = "2024-12-24T18:11:12.03Z" }, + { url = "https://files.pythonhosted.org/packages/96/2c/d49710a6dbcd3776265f4c923bb73ebe83933dfbaa841c5da850fe0fd20b/charset_normalizer-3.4.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:44ecbf16649486d4aebafeaa7ec4c9fed8b88101f4dd612dcaf65d5e815f837f", size = 147162, upload-time = "2024-12-24T18:11:13.372Z" }, + { url = "https://files.pythonhosted.org/packages/b4/41/35ff1f9a6bd380303dea55e44c4933b4cc3c4850988927d4082ada230273/charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:0924e81d3d5e70f8126529951dac65c1010cdf117bb75eb02dd12339b57749dd", size = 140972, upload-time = "2024-12-24T18:11:14.628Z" }, + { url = "https://files.pythonhosted.org/packages/fb/43/c6a0b685fe6910d08ba971f62cd9c3e862a85770395ba5d9cad4fede33ab/charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:2967f74ad52c3b98de4c3b32e1a44e32975e008a9cd2a8cc8966d6a5218c5cb2", size = 149095, upload-time = "2024-12-24T18:11:17.672Z" }, + { url = "https://files.pythonhosted.org/packages/4c/ff/a9a504662452e2d2878512115638966e75633519ec11f25fca3d2049a94a/charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:c75cb2a3e389853835e84a2d8fb2b81a10645b503eca9bcb98df6b5a43eb8886", size = 152668, upload-time = "2024-12-24T18:11:18.989Z" }, + { url = "https://files.pythonhosted.org/packages/6c/71/189996b6d9a4b932564701628af5cee6716733e9165af1d5e1b285c530ed/charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:09b26ae6b1abf0d27570633b2b078a2a20419c99d66fb2823173d73f188ce601", size = 150073, upload-time = "2024-12-24T18:11:21.507Z" }, + { url = "https://files.pythonhosted.org/packages/e4/93/946a86ce20790e11312c87c75ba68d5f6ad2208cfb52b2d6a2c32840d922/charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:fa88b843d6e211393a37219e6a1c1df99d35e8fd90446f1118f4216e307e48cd", size = 145732, upload-time = "2024-12-24T18:11:22.774Z" }, + { url = "https://files.pythonhosted.org/packages/cd/e5/131d2fb1b0dddafc37be4f3a2fa79aa4c037368be9423061dccadfd90091/charset_normalizer-3.4.1-cp313-cp313-win32.whl", hash = "sha256:eb8178fe3dba6450a3e024e95ac49ed3400e506fd4e9e5c32d30adda88cbd407", size = 95391, upload-time = "2024-12-24T18:11:24.139Z" }, + { url = "https://files.pythonhosted.org/packages/27/f2/4f9a69cc7712b9b5ad8fdb87039fd89abba997ad5cbe690d1835d40405b0/charset_normalizer-3.4.1-cp313-cp313-win_amd64.whl", hash = "sha256:b1ac5992a838106edb89654e0aebfc24f5848ae2547d22c2c3f66454daa11971", size = 102702, upload-time = "2024-12-24T18:11:26.535Z" }, + { url = "https://files.pythonhosted.org/packages/0e/f6/65ecc6878a89bb1c23a086ea335ad4bf21a588990c3f535a227b9eea9108/charset_normalizer-3.4.1-py3-none-any.whl", hash = "sha256:d98b1668f06378c6dbefec3b92299716b931cd4e6061f3c875a71ced1780ab85", size = 49767, upload-time = "2024-12-24T18:12:32.852Z" }, ] [[package]] name = "colorama" version = "0.4.6" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697 } +sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697, upload-time = "2022-10-25T02:36:22.414Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335 }, + { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335, upload-time = "2022-10-25T02:36:20.889Z" }, ] [[package]] @@ -141,6 +141,7 @@ dependencies = [ { name = "sphinx", version = "8.1.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, { name = "sphinx", version = "8.2.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, { name = "sphinx-multiversion" }, + { name = "sphinxbootstrap4theme" }, { name = "sphinxcontrib-bibtex" }, { name = "sphinxcontrib-jquery" }, ] @@ -157,6 +158,7 @@ requires-dist = [ { name = "setuptools", specifier = ">=72.1.0" }, { name = "sphinx", specifier = ">=8.0.2" }, { name = "sphinx-multiversion", specifier = ">=0.2.4" }, + { name = "sphinxbootstrap4theme", specifier = ">=0.6.0" }, { name = "sphinxcontrib-bibtex", specifier = ">=2.6.2" }, { name = "sphinxcontrib-jquery", specifier = ">=4.1" }, ] @@ -168,9 +170,9 @@ dev = [{ name = "rust-just", specifier = ">=1.36.0" }] name = "docutils" version = "0.21.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ae/ed/aefcc8cd0ba62a0560c3c18c33925362d46c6075480bfa4df87b28e169a9/docutils-0.21.2.tar.gz", hash = "sha256:3a6b18732edf182daa3cd12775bbb338cf5691468f91eeeb109deff6ebfa986f", size = 2204444 } +sdist = { url = "https://files.pythonhosted.org/packages/ae/ed/aefcc8cd0ba62a0560c3c18c33925362d46c6075480bfa4df87b28e169a9/docutils-0.21.2.tar.gz", hash = "sha256:3a6b18732edf182daa3cd12775bbb338cf5691468f91eeeb109deff6ebfa986f", size = 2204444, upload-time = "2024-04-23T18:57:18.24Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/8f/d7/9322c609343d929e75e7e5e6255e614fcc67572cfd083959cdef3b7aad79/docutils-0.21.2-py3-none-any.whl", hash = "sha256:dafca5b9e384f0e419294eb4d2ff9fa826435bf15f15b7bd45723e8ad76811b2", size = 587408 }, + { url = "https://files.pythonhosted.org/packages/8f/d7/9322c609343d929e75e7e5e6255e614fcc67572cfd083959cdef3b7aad79/docutils-0.21.2-py3-none-any.whl", hash = "sha256:dafca5b9e384f0e419294eb4d2ff9fa826435bf15f15b7bd45723e8ad76811b2", size = 587408, upload-time = "2024-04-23T18:57:14.835Z" }, ] [[package]] @@ -184,27 +186,27 @@ dependencies = [ { name = "sphinx", version = "8.2.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, { name = "sphinx-basic-ng" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/a0/e2/d351d69a9a9e4badb4a5be062c2d0e87bd9e6c23b5e57337fef14bef34c8/furo-2024.8.6.tar.gz", hash = "sha256:b63e4cee8abfc3136d3bc03a3d45a76a850bada4d6374d24c1716b0e01394a01", size = 1661506 } +sdist = { url = "https://files.pythonhosted.org/packages/a0/e2/d351d69a9a9e4badb4a5be062c2d0e87bd9e6c23b5e57337fef14bef34c8/furo-2024.8.6.tar.gz", hash = "sha256:b63e4cee8abfc3136d3bc03a3d45a76a850bada4d6374d24c1716b0e01394a01", size = 1661506, upload-time = "2024-08-06T08:07:57.567Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/27/48/e791a7ed487dbb9729ef32bb5d1af16693d8925f4366befef54119b2e576/furo-2024.8.6-py3-none-any.whl", hash = "sha256:6cd97c58b47813d3619e63e9081169880fbe331f0ca883c871ff1f3f11814f5c", size = 341333 }, + { url = "https://files.pythonhosted.org/packages/27/48/e791a7ed487dbb9729ef32bb5d1af16693d8925f4366befef54119b2e576/furo-2024.8.6-py3-none-any.whl", hash = "sha256:6cd97c58b47813d3619e63e9081169880fbe331f0ca883c871ff1f3f11814f5c", size = 341333, upload-time = "2024-08-06T08:07:54.44Z" }, ] [[package]] name = "idna" version = "3.10" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f1/70/7703c29685631f5a7590aa73f1f1d3fa9a380e654b86af429e0934a32f7d/idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9", size = 190490 } +sdist = { url = "https://files.pythonhosted.org/packages/f1/70/7703c29685631f5a7590aa73f1f1d3fa9a380e654b86af429e0934a32f7d/idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9", size = 190490, upload-time = "2024-09-15T18:07:39.745Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3", size = 70442 }, + { url = "https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3", size = 70442, upload-time = "2024-09-15T18:07:37.964Z" }, ] [[package]] name = "imagesize" version = "1.4.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/a7/84/62473fb57d61e31fef6e36d64a179c8781605429fd927b5dd608c997be31/imagesize-1.4.1.tar.gz", hash = "sha256:69150444affb9cb0d5cc5a92b3676f0b2fb7cd9ae39e947a5e11a36b4497cd4a", size = 1280026 } +sdist = { url = "https://files.pythonhosted.org/packages/a7/84/62473fb57d61e31fef6e36d64a179c8781605429fd927b5dd608c997be31/imagesize-1.4.1.tar.gz", hash = "sha256:69150444affb9cb0d5cc5a92b3676f0b2fb7cd9ae39e947a5e11a36b4497cd4a", size = 1280026, upload-time = "2022-07-01T12:21:05.687Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/ff/62/85c4c919272577931d407be5ba5d71c20f0b616d31a0befe0ae45bb79abd/imagesize-1.4.1-py2.py3-none-any.whl", hash = "sha256:0d8d18d08f840c19d0ee7ca1fd82490fdc3729b7ac93f49870406ddde8ef8d8b", size = 8769 }, + { url = "https://files.pythonhosted.org/packages/ff/62/85c4c919272577931d407be5ba5d71c20f0b616d31a0befe0ae45bb79abd/imagesize-1.4.1-py2.py3-none-any.whl", hash = "sha256:0d8d18d08f840c19d0ee7ca1fd82490fdc3729b7ac93f49870406ddde8ef8d8b", size = 8769, upload-time = "2022-07-01T12:21:02.467Z" }, ] [[package]] @@ -214,85 +216,85 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "markupsafe" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/df/bf/f7da0350254c0ed7c72f3e33cef02e048281fec7ecec5f032d4aac52226b/jinja2-3.1.6.tar.gz", hash = "sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d", size = 245115 } +sdist = { url = "https://files.pythonhosted.org/packages/df/bf/f7da0350254c0ed7c72f3e33cef02e048281fec7ecec5f032d4aac52226b/jinja2-3.1.6.tar.gz", hash = "sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d", size = 245115, upload-time = "2025-03-05T20:05:02.478Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67", size = 134899 }, + { url = "https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67", size = 134899, upload-time = "2025-03-05T20:05:00.369Z" }, ] [[package]] name = "latexcodec" version = "3.0.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/98/e7/ed339caf3662976949e4fdbfdf4a6db818b8d2aa1cf2b5f73af89e936bba/latexcodec-3.0.0.tar.gz", hash = "sha256:917dc5fe242762cc19d963e6548b42d63a118028cdd3361d62397e3b638b6bc5", size = 31023 } +sdist = { url = "https://files.pythonhosted.org/packages/98/e7/ed339caf3662976949e4fdbfdf4a6db818b8d2aa1cf2b5f73af89e936bba/latexcodec-3.0.0.tar.gz", hash = "sha256:917dc5fe242762cc19d963e6548b42d63a118028cdd3361d62397e3b638b6bc5", size = 31023, upload-time = "2024-03-06T14:51:39.283Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/b0/bf/ea8887e9f31a8f93ca306699d11909c6140151393a4216f0d9f85a004077/latexcodec-3.0.0-py3-none-any.whl", hash = "sha256:6f3477ad5e61a0a99bd31a6a370c34e88733a6bad9c921a3ffcfacada12f41a7", size = 18150 }, + { url = "https://files.pythonhosted.org/packages/b0/bf/ea8887e9f31a8f93ca306699d11909c6140151393a4216f0d9f85a004077/latexcodec-3.0.0-py3-none-any.whl", hash = "sha256:6f3477ad5e61a0a99bd31a6a370c34e88733a6bad9c921a3ffcfacada12f41a7", size = 18150, upload-time = "2024-03-06T14:51:37.872Z" }, ] [[package]] name = "markupsafe" version = "3.0.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/b2/97/5d42485e71dfc078108a86d6de8fa46db44a1a9295e89c5d6d4a06e23a62/markupsafe-3.0.2.tar.gz", hash = "sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0", size = 20537 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/04/90/d08277ce111dd22f77149fd1a5d4653eeb3b3eaacbdfcbae5afb2600eebd/MarkupSafe-3.0.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7e94c425039cde14257288fd61dcfb01963e658efbc0ff54f5306b06054700f8", size = 14357 }, - { url = "https://files.pythonhosted.org/packages/04/e1/6e2194baeae0bca1fae6629dc0cbbb968d4d941469cbab11a3872edff374/MarkupSafe-3.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9e2d922824181480953426608b81967de705c3cef4d1af983af849d7bd619158", size = 12393 }, - { url = "https://files.pythonhosted.org/packages/1d/69/35fa85a8ece0a437493dc61ce0bb6d459dcba482c34197e3efc829aa357f/MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:38a9ef736c01fccdd6600705b09dc574584b89bea478200c5fbf112a6b0d5579", size = 21732 }, - { url = "https://files.pythonhosted.org/packages/22/35/137da042dfb4720b638d2937c38a9c2df83fe32d20e8c8f3185dbfef05f7/MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bbcb445fa71794da8f178f0f6d66789a28d7319071af7a496d4d507ed566270d", size = 20866 }, - { url = "https://files.pythonhosted.org/packages/29/28/6d029a903727a1b62edb51863232152fd335d602def598dade38996887f0/MarkupSafe-3.0.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:57cb5a3cf367aeb1d316576250f65edec5bb3be939e9247ae594b4bcbc317dfb", size = 20964 }, - { url = "https://files.pythonhosted.org/packages/cc/cd/07438f95f83e8bc028279909d9c9bd39e24149b0d60053a97b2bc4f8aa51/MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:3809ede931876f5b2ec92eef964286840ed3540dadf803dd570c3b7e13141a3b", size = 21977 }, - { url = "https://files.pythonhosted.org/packages/29/01/84b57395b4cc062f9c4c55ce0df7d3108ca32397299d9df00fedd9117d3d/MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e07c3764494e3776c602c1e78e298937c3315ccc9043ead7e685b7f2b8d47b3c", size = 21366 }, - { url = "https://files.pythonhosted.org/packages/bd/6e/61ebf08d8940553afff20d1fb1ba7294b6f8d279df9fd0c0db911b4bbcfd/MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:b424c77b206d63d500bcb69fa55ed8d0e6a3774056bdc4839fc9298a7edca171", size = 21091 }, - { url = "https://files.pythonhosted.org/packages/11/23/ffbf53694e8c94ebd1e7e491de185124277964344733c45481f32ede2499/MarkupSafe-3.0.2-cp310-cp310-win32.whl", hash = "sha256:fcabf5ff6eea076f859677f5f0b6b5c1a51e70a376b0579e0eadef8db48c6b50", size = 15065 }, - { url = "https://files.pythonhosted.org/packages/44/06/e7175d06dd6e9172d4a69a72592cb3f7a996a9c396eee29082826449bbc3/MarkupSafe-3.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:6af100e168aa82a50e186c82875a5893c5597a0c1ccdb0d8b40240b1f28b969a", size = 15514 }, - { url = "https://files.pythonhosted.org/packages/6b/28/bbf83e3f76936960b850435576dd5e67034e200469571be53f69174a2dfd/MarkupSafe-3.0.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9025b4018f3a1314059769c7bf15441064b2207cb3f065e6ea1e7359cb46db9d", size = 14353 }, - { url = "https://files.pythonhosted.org/packages/6c/30/316d194b093cde57d448a4c3209f22e3046c5bb2fb0820b118292b334be7/MarkupSafe-3.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:93335ca3812df2f366e80509ae119189886b0f3c2b81325d39efdb84a1e2ae93", size = 12392 }, - { url = "https://files.pythonhosted.org/packages/f2/96/9cdafba8445d3a53cae530aaf83c38ec64c4d5427d975c974084af5bc5d2/MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2cb8438c3cbb25e220c2ab33bb226559e7afb3baec11c4f218ffa7308603c832", size = 23984 }, - { url = "https://files.pythonhosted.org/packages/f1/a4/aefb044a2cd8d7334c8a47d3fb2c9f328ac48cb349468cc31c20b539305f/MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a123e330ef0853c6e822384873bef7507557d8e4a082961e1defa947aa59ba84", size = 23120 }, - { url = "https://files.pythonhosted.org/packages/8d/21/5e4851379f88f3fad1de30361db501300d4f07bcad047d3cb0449fc51f8c/MarkupSafe-3.0.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e084f686b92e5b83186b07e8a17fc09e38fff551f3602b249881fec658d3eca", size = 23032 }, - { url = "https://files.pythonhosted.org/packages/00/7b/e92c64e079b2d0d7ddf69899c98842f3f9a60a1ae72657c89ce2655c999d/MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d8213e09c917a951de9d09ecee036d5c7d36cb6cb7dbaece4c71a60d79fb9798", size = 24057 }, - { url = "https://files.pythonhosted.org/packages/f9/ac/46f960ca323037caa0a10662ef97d0a4728e890334fc156b9f9e52bcc4ca/MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:5b02fb34468b6aaa40dfc198d813a641e3a63b98c2b05a16b9f80b7ec314185e", size = 23359 }, - { url = "https://files.pythonhosted.org/packages/69/84/83439e16197337b8b14b6a5b9c2105fff81d42c2a7c5b58ac7b62ee2c3b1/MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:0bff5e0ae4ef2e1ae4fdf2dfd5b76c75e5c2fa4132d05fc1b0dabcd20c7e28c4", size = 23306 }, - { url = "https://files.pythonhosted.org/packages/9a/34/a15aa69f01e2181ed8d2b685c0d2f6655d5cca2c4db0ddea775e631918cd/MarkupSafe-3.0.2-cp311-cp311-win32.whl", hash = "sha256:6c89876f41da747c8d3677a2b540fb32ef5715f97b66eeb0c6b66f5e3ef6f59d", size = 15094 }, - { url = "https://files.pythonhosted.org/packages/da/b8/3a3bd761922d416f3dc5d00bfbed11f66b1ab89a0c2b6e887240a30b0f6b/MarkupSafe-3.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:70a87b411535ccad5ef2f1df5136506a10775d267e197e4cf531ced10537bd6b", size = 15521 }, - { url = "https://files.pythonhosted.org/packages/22/09/d1f21434c97fc42f09d290cbb6350d44eb12f09cc62c9476effdb33a18aa/MarkupSafe-3.0.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:9778bd8ab0a994ebf6f84c2b949e65736d5575320a17ae8984a77fab08db94cf", size = 14274 }, - { url = "https://files.pythonhosted.org/packages/6b/b0/18f76bba336fa5aecf79d45dcd6c806c280ec44538b3c13671d49099fdd0/MarkupSafe-3.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:846ade7b71e3536c4e56b386c2a47adf5741d2d8b94ec9dc3e92e5e1ee1e2225", size = 12348 }, - { url = "https://files.pythonhosted.org/packages/e0/25/dd5c0f6ac1311e9b40f4af06c78efde0f3b5cbf02502f8ef9501294c425b/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1c99d261bd2d5f6b59325c92c73df481e05e57f19837bdca8413b9eac4bd8028", size = 24149 }, - { url = "https://files.pythonhosted.org/packages/f3/f0/89e7aadfb3749d0f52234a0c8c7867877876e0a20b60e2188e9850794c17/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e17c96c14e19278594aa4841ec148115f9c7615a47382ecb6b82bd8fea3ab0c8", size = 23118 }, - { url = "https://files.pythonhosted.org/packages/d5/da/f2eeb64c723f5e3777bc081da884b414671982008c47dcc1873d81f625b6/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:88416bd1e65dcea10bc7569faacb2c20ce071dd1f87539ca2ab364bf6231393c", size = 22993 }, - { url = "https://files.pythonhosted.org/packages/da/0e/1f32af846df486dce7c227fe0f2398dc7e2e51d4a370508281f3c1c5cddc/MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2181e67807fc2fa785d0592dc2d6206c019b9502410671cc905d132a92866557", size = 24178 }, - { url = "https://files.pythonhosted.org/packages/c4/f6/bb3ca0532de8086cbff5f06d137064c8410d10779c4c127e0e47d17c0b71/MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:52305740fe773d09cffb16f8ed0427942901f00adedac82ec8b67752f58a1b22", size = 23319 }, - { url = "https://files.pythonhosted.org/packages/a2/82/8be4c96ffee03c5b4a034e60a31294daf481e12c7c43ab8e34a1453ee48b/MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ad10d3ded218f1039f11a75f8091880239651b52e9bb592ca27de44eed242a48", size = 23352 }, - { url = "https://files.pythonhosted.org/packages/51/ae/97827349d3fcffee7e184bdf7f41cd6b88d9919c80f0263ba7acd1bbcb18/MarkupSafe-3.0.2-cp312-cp312-win32.whl", hash = "sha256:0f4ca02bea9a23221c0182836703cbf8930c5e9454bacce27e767509fa286a30", size = 15097 }, - { url = "https://files.pythonhosted.org/packages/c1/80/a61f99dc3a936413c3ee4e1eecac96c0da5ed07ad56fd975f1a9da5bc630/MarkupSafe-3.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:8e06879fc22a25ca47312fbe7c8264eb0b662f6db27cb2d3bbbc74b1df4b9b87", size = 15601 }, - { url = "https://files.pythonhosted.org/packages/83/0e/67eb10a7ecc77a0c2bbe2b0235765b98d164d81600746914bebada795e97/MarkupSafe-3.0.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ba9527cdd4c926ed0760bc301f6728ef34d841f405abf9d4f959c478421e4efd", size = 14274 }, - { url = "https://files.pythonhosted.org/packages/2b/6d/9409f3684d3335375d04e5f05744dfe7e9f120062c9857df4ab490a1031a/MarkupSafe-3.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f8b3d067f2e40fe93e1ccdd6b2e1d16c43140e76f02fb1319a05cf2b79d99430", size = 12352 }, - { url = "https://files.pythonhosted.org/packages/d2/f5/6eadfcd3885ea85fe2a7c128315cc1bb7241e1987443d78c8fe712d03091/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:569511d3b58c8791ab4c2e1285575265991e6d8f8700c7be0e88f86cb0672094", size = 24122 }, - { url = "https://files.pythonhosted.org/packages/0c/91/96cf928db8236f1bfab6ce15ad070dfdd02ed88261c2afafd4b43575e9e9/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15ab75ef81add55874e7ab7055e9c397312385bd9ced94920f2802310c930396", size = 23085 }, - { url = "https://files.pythonhosted.org/packages/c2/cf/c9d56af24d56ea04daae7ac0940232d31d5a8354f2b457c6d856b2057d69/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f3818cb119498c0678015754eba762e0d61e5b52d34c8b13d770f0719f7b1d79", size = 22978 }, - { url = "https://files.pythonhosted.org/packages/2a/9f/8619835cd6a711d6272d62abb78c033bda638fdc54c4e7f4272cf1c0962b/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:cdb82a876c47801bb54a690c5ae105a46b392ac6099881cdfb9f6e95e4014c6a", size = 24208 }, - { url = "https://files.pythonhosted.org/packages/f9/bf/176950a1792b2cd2102b8ffeb5133e1ed984547b75db47c25a67d3359f77/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:cabc348d87e913db6ab4aa100f01b08f481097838bdddf7c7a84b7575b7309ca", size = 23357 }, - { url = "https://files.pythonhosted.org/packages/ce/4f/9a02c1d335caabe5c4efb90e1b6e8ee944aa245c1aaaab8e8a618987d816/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:444dcda765c8a838eaae23112db52f1efaf750daddb2d9ca300bcae1039adc5c", size = 23344 }, - { url = "https://files.pythonhosted.org/packages/ee/55/c271b57db36f748f0e04a759ace9f8f759ccf22b4960c270c78a394f58be/MarkupSafe-3.0.2-cp313-cp313-win32.whl", hash = "sha256:bcf3e58998965654fdaff38e58584d8937aa3096ab5354d493c77d1fdd66d7a1", size = 15101 }, - { url = "https://files.pythonhosted.org/packages/29/88/07df22d2dd4df40aba9f3e402e6dc1b8ee86297dddbad4872bd5e7b0094f/MarkupSafe-3.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:e6a2a455bd412959b57a172ce6328d2dd1f01cb2135efda2e4576e8a23fa3b0f", size = 15603 }, - { url = "https://files.pythonhosted.org/packages/62/6a/8b89d24db2d32d433dffcd6a8779159da109842434f1dd2f6e71f32f738c/MarkupSafe-3.0.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:b5a6b3ada725cea8a5e634536b1b01c30bcdcd7f9c6fff4151548d5bf6b3a36c", size = 14510 }, - { url = "https://files.pythonhosted.org/packages/7a/06/a10f955f70a2e5a9bf78d11a161029d278eeacbd35ef806c3fd17b13060d/MarkupSafe-3.0.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:a904af0a6162c73e3edcb969eeeb53a63ceeb5d8cf642fade7d39e7963a22ddb", size = 12486 }, - { url = "https://files.pythonhosted.org/packages/34/cf/65d4a571869a1a9078198ca28f39fba5fbb910f952f9dbc5220afff9f5e6/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4aa4e5faecf353ed117801a068ebab7b7e09ffb6e1d5e412dc852e0da018126c", size = 25480 }, - { url = "https://files.pythonhosted.org/packages/0c/e3/90e9651924c430b885468b56b3d597cabf6d72be4b24a0acd1fa0e12af67/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0ef13eaeee5b615fb07c9a7dadb38eac06a0608b41570d8ade51c56539e509d", size = 23914 }, - { url = "https://files.pythonhosted.org/packages/66/8c/6c7cf61f95d63bb866db39085150df1f2a5bd3335298f14a66b48e92659c/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d16a81a06776313e817c951135cf7340a3e91e8c1ff2fac444cfd75fffa04afe", size = 23796 }, - { url = "https://files.pythonhosted.org/packages/bb/35/cbe9238ec3f47ac9a7c8b3df7a808e7cb50fe149dc7039f5f454b3fba218/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:6381026f158fdb7c72a168278597a5e3a5222e83ea18f543112b2662a9b699c5", size = 25473 }, - { url = "https://files.pythonhosted.org/packages/e6/32/7621a4382488aa283cc05e8984a9c219abad3bca087be9ec77e89939ded9/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:3d79d162e7be8f996986c064d1c7c817f6df3a77fe3d6859f6f9e7be4b8c213a", size = 24114 }, - { url = "https://files.pythonhosted.org/packages/0d/80/0985960e4b89922cb5a0bac0ed39c5b96cbc1a536a99f30e8c220a996ed9/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:131a3c7689c85f5ad20f9f6fb1b866f402c445b220c19fe4308c0b147ccd2ad9", size = 24098 }, - { url = "https://files.pythonhosted.org/packages/82/78/fedb03c7d5380df2427038ec8d973587e90561b2d90cd472ce9254cf348b/MarkupSafe-3.0.2-cp313-cp313t-win32.whl", hash = "sha256:ba8062ed2cf21c07a9e295d5b8a2a5ce678b913b45fdf68c32d95d6c1291e0b6", size = 15208 }, - { url = "https://files.pythonhosted.org/packages/4f/65/6079a46068dfceaeabb5dcad6d674f5f5c61a6fa5673746f42a9f4c233b3/MarkupSafe-3.0.2-cp313-cp313t-win_amd64.whl", hash = "sha256:e444a31f8db13eb18ada366ab3cf45fd4b31e4db1236a4448f68778c1d1a5a2f", size = 15739 }, +sdist = { url = "https://files.pythonhosted.org/packages/b2/97/5d42485e71dfc078108a86d6de8fa46db44a1a9295e89c5d6d4a06e23a62/markupsafe-3.0.2.tar.gz", hash = "sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0", size = 20537, upload-time = "2024-10-18T15:21:54.129Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/04/90/d08277ce111dd22f77149fd1a5d4653eeb3b3eaacbdfcbae5afb2600eebd/MarkupSafe-3.0.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7e94c425039cde14257288fd61dcfb01963e658efbc0ff54f5306b06054700f8", size = 14357, upload-time = "2024-10-18T15:20:51.44Z" }, + { url = "https://files.pythonhosted.org/packages/04/e1/6e2194baeae0bca1fae6629dc0cbbb968d4d941469cbab11a3872edff374/MarkupSafe-3.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9e2d922824181480953426608b81967de705c3cef4d1af983af849d7bd619158", size = 12393, upload-time = "2024-10-18T15:20:52.426Z" }, + { url = "https://files.pythonhosted.org/packages/1d/69/35fa85a8ece0a437493dc61ce0bb6d459dcba482c34197e3efc829aa357f/MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:38a9ef736c01fccdd6600705b09dc574584b89bea478200c5fbf112a6b0d5579", size = 21732, upload-time = "2024-10-18T15:20:53.578Z" }, + { url = "https://files.pythonhosted.org/packages/22/35/137da042dfb4720b638d2937c38a9c2df83fe32d20e8c8f3185dbfef05f7/MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bbcb445fa71794da8f178f0f6d66789a28d7319071af7a496d4d507ed566270d", size = 20866, upload-time = "2024-10-18T15:20:55.06Z" }, + { url = "https://files.pythonhosted.org/packages/29/28/6d029a903727a1b62edb51863232152fd335d602def598dade38996887f0/MarkupSafe-3.0.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:57cb5a3cf367aeb1d316576250f65edec5bb3be939e9247ae594b4bcbc317dfb", size = 20964, upload-time = "2024-10-18T15:20:55.906Z" }, + { url = "https://files.pythonhosted.org/packages/cc/cd/07438f95f83e8bc028279909d9c9bd39e24149b0d60053a97b2bc4f8aa51/MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:3809ede931876f5b2ec92eef964286840ed3540dadf803dd570c3b7e13141a3b", size = 21977, upload-time = "2024-10-18T15:20:57.189Z" }, + { url = "https://files.pythonhosted.org/packages/29/01/84b57395b4cc062f9c4c55ce0df7d3108ca32397299d9df00fedd9117d3d/MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e07c3764494e3776c602c1e78e298937c3315ccc9043ead7e685b7f2b8d47b3c", size = 21366, upload-time = "2024-10-18T15:20:58.235Z" }, + { url = "https://files.pythonhosted.org/packages/bd/6e/61ebf08d8940553afff20d1fb1ba7294b6f8d279df9fd0c0db911b4bbcfd/MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:b424c77b206d63d500bcb69fa55ed8d0e6a3774056bdc4839fc9298a7edca171", size = 21091, upload-time = "2024-10-18T15:20:59.235Z" }, + { url = "https://files.pythonhosted.org/packages/11/23/ffbf53694e8c94ebd1e7e491de185124277964344733c45481f32ede2499/MarkupSafe-3.0.2-cp310-cp310-win32.whl", hash = "sha256:fcabf5ff6eea076f859677f5f0b6b5c1a51e70a376b0579e0eadef8db48c6b50", size = 15065, upload-time = "2024-10-18T15:21:00.307Z" }, + { url = "https://files.pythonhosted.org/packages/44/06/e7175d06dd6e9172d4a69a72592cb3f7a996a9c396eee29082826449bbc3/MarkupSafe-3.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:6af100e168aa82a50e186c82875a5893c5597a0c1ccdb0d8b40240b1f28b969a", size = 15514, upload-time = "2024-10-18T15:21:01.122Z" }, + { url = "https://files.pythonhosted.org/packages/6b/28/bbf83e3f76936960b850435576dd5e67034e200469571be53f69174a2dfd/MarkupSafe-3.0.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9025b4018f3a1314059769c7bf15441064b2207cb3f065e6ea1e7359cb46db9d", size = 14353, upload-time = "2024-10-18T15:21:02.187Z" }, + { url = "https://files.pythonhosted.org/packages/6c/30/316d194b093cde57d448a4c3209f22e3046c5bb2fb0820b118292b334be7/MarkupSafe-3.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:93335ca3812df2f366e80509ae119189886b0f3c2b81325d39efdb84a1e2ae93", size = 12392, upload-time = "2024-10-18T15:21:02.941Z" }, + { url = "https://files.pythonhosted.org/packages/f2/96/9cdafba8445d3a53cae530aaf83c38ec64c4d5427d975c974084af5bc5d2/MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2cb8438c3cbb25e220c2ab33bb226559e7afb3baec11c4f218ffa7308603c832", size = 23984, upload-time = "2024-10-18T15:21:03.953Z" }, + { url = "https://files.pythonhosted.org/packages/f1/a4/aefb044a2cd8d7334c8a47d3fb2c9f328ac48cb349468cc31c20b539305f/MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a123e330ef0853c6e822384873bef7507557d8e4a082961e1defa947aa59ba84", size = 23120, upload-time = "2024-10-18T15:21:06.495Z" }, + { url = "https://files.pythonhosted.org/packages/8d/21/5e4851379f88f3fad1de30361db501300d4f07bcad047d3cb0449fc51f8c/MarkupSafe-3.0.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e084f686b92e5b83186b07e8a17fc09e38fff551f3602b249881fec658d3eca", size = 23032, upload-time = "2024-10-18T15:21:07.295Z" }, + { url = "https://files.pythonhosted.org/packages/00/7b/e92c64e079b2d0d7ddf69899c98842f3f9a60a1ae72657c89ce2655c999d/MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d8213e09c917a951de9d09ecee036d5c7d36cb6cb7dbaece4c71a60d79fb9798", size = 24057, upload-time = "2024-10-18T15:21:08.073Z" }, + { url = "https://files.pythonhosted.org/packages/f9/ac/46f960ca323037caa0a10662ef97d0a4728e890334fc156b9f9e52bcc4ca/MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:5b02fb34468b6aaa40dfc198d813a641e3a63b98c2b05a16b9f80b7ec314185e", size = 23359, upload-time = "2024-10-18T15:21:09.318Z" }, + { url = "https://files.pythonhosted.org/packages/69/84/83439e16197337b8b14b6a5b9c2105fff81d42c2a7c5b58ac7b62ee2c3b1/MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:0bff5e0ae4ef2e1ae4fdf2dfd5b76c75e5c2fa4132d05fc1b0dabcd20c7e28c4", size = 23306, upload-time = "2024-10-18T15:21:10.185Z" }, + { url = "https://files.pythonhosted.org/packages/9a/34/a15aa69f01e2181ed8d2b685c0d2f6655d5cca2c4db0ddea775e631918cd/MarkupSafe-3.0.2-cp311-cp311-win32.whl", hash = "sha256:6c89876f41da747c8d3677a2b540fb32ef5715f97b66eeb0c6b66f5e3ef6f59d", size = 15094, upload-time = "2024-10-18T15:21:11.005Z" }, + { url = "https://files.pythonhosted.org/packages/da/b8/3a3bd761922d416f3dc5d00bfbed11f66b1ab89a0c2b6e887240a30b0f6b/MarkupSafe-3.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:70a87b411535ccad5ef2f1df5136506a10775d267e197e4cf531ced10537bd6b", size = 15521, upload-time = "2024-10-18T15:21:12.911Z" }, + { url = "https://files.pythonhosted.org/packages/22/09/d1f21434c97fc42f09d290cbb6350d44eb12f09cc62c9476effdb33a18aa/MarkupSafe-3.0.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:9778bd8ab0a994ebf6f84c2b949e65736d5575320a17ae8984a77fab08db94cf", size = 14274, upload-time = "2024-10-18T15:21:13.777Z" }, + { url = "https://files.pythonhosted.org/packages/6b/b0/18f76bba336fa5aecf79d45dcd6c806c280ec44538b3c13671d49099fdd0/MarkupSafe-3.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:846ade7b71e3536c4e56b386c2a47adf5741d2d8b94ec9dc3e92e5e1ee1e2225", size = 12348, upload-time = "2024-10-18T15:21:14.822Z" }, + { url = "https://files.pythonhosted.org/packages/e0/25/dd5c0f6ac1311e9b40f4af06c78efde0f3b5cbf02502f8ef9501294c425b/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1c99d261bd2d5f6b59325c92c73df481e05e57f19837bdca8413b9eac4bd8028", size = 24149, upload-time = "2024-10-18T15:21:15.642Z" }, + { url = "https://files.pythonhosted.org/packages/f3/f0/89e7aadfb3749d0f52234a0c8c7867877876e0a20b60e2188e9850794c17/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e17c96c14e19278594aa4841ec148115f9c7615a47382ecb6b82bd8fea3ab0c8", size = 23118, upload-time = "2024-10-18T15:21:17.133Z" }, + { url = "https://files.pythonhosted.org/packages/d5/da/f2eeb64c723f5e3777bc081da884b414671982008c47dcc1873d81f625b6/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:88416bd1e65dcea10bc7569faacb2c20ce071dd1f87539ca2ab364bf6231393c", size = 22993, upload-time = "2024-10-18T15:21:18.064Z" }, + { url = "https://files.pythonhosted.org/packages/da/0e/1f32af846df486dce7c227fe0f2398dc7e2e51d4a370508281f3c1c5cddc/MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2181e67807fc2fa785d0592dc2d6206c019b9502410671cc905d132a92866557", size = 24178, upload-time = "2024-10-18T15:21:18.859Z" }, + { url = "https://files.pythonhosted.org/packages/c4/f6/bb3ca0532de8086cbff5f06d137064c8410d10779c4c127e0e47d17c0b71/MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:52305740fe773d09cffb16f8ed0427942901f00adedac82ec8b67752f58a1b22", size = 23319, upload-time = "2024-10-18T15:21:19.671Z" }, + { url = "https://files.pythonhosted.org/packages/a2/82/8be4c96ffee03c5b4a034e60a31294daf481e12c7c43ab8e34a1453ee48b/MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ad10d3ded218f1039f11a75f8091880239651b52e9bb592ca27de44eed242a48", size = 23352, upload-time = "2024-10-18T15:21:20.971Z" }, + { url = "https://files.pythonhosted.org/packages/51/ae/97827349d3fcffee7e184bdf7f41cd6b88d9919c80f0263ba7acd1bbcb18/MarkupSafe-3.0.2-cp312-cp312-win32.whl", hash = "sha256:0f4ca02bea9a23221c0182836703cbf8930c5e9454bacce27e767509fa286a30", size = 15097, upload-time = "2024-10-18T15:21:22.646Z" }, + { url = "https://files.pythonhosted.org/packages/c1/80/a61f99dc3a936413c3ee4e1eecac96c0da5ed07ad56fd975f1a9da5bc630/MarkupSafe-3.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:8e06879fc22a25ca47312fbe7c8264eb0b662f6db27cb2d3bbbc74b1df4b9b87", size = 15601, upload-time = "2024-10-18T15:21:23.499Z" }, + { url = "https://files.pythonhosted.org/packages/83/0e/67eb10a7ecc77a0c2bbe2b0235765b98d164d81600746914bebada795e97/MarkupSafe-3.0.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ba9527cdd4c926ed0760bc301f6728ef34d841f405abf9d4f959c478421e4efd", size = 14274, upload-time = "2024-10-18T15:21:24.577Z" }, + { url = "https://files.pythonhosted.org/packages/2b/6d/9409f3684d3335375d04e5f05744dfe7e9f120062c9857df4ab490a1031a/MarkupSafe-3.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f8b3d067f2e40fe93e1ccdd6b2e1d16c43140e76f02fb1319a05cf2b79d99430", size = 12352, upload-time = "2024-10-18T15:21:25.382Z" }, + { url = "https://files.pythonhosted.org/packages/d2/f5/6eadfcd3885ea85fe2a7c128315cc1bb7241e1987443d78c8fe712d03091/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:569511d3b58c8791ab4c2e1285575265991e6d8f8700c7be0e88f86cb0672094", size = 24122, upload-time = "2024-10-18T15:21:26.199Z" }, + { url = "https://files.pythonhosted.org/packages/0c/91/96cf928db8236f1bfab6ce15ad070dfdd02ed88261c2afafd4b43575e9e9/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15ab75ef81add55874e7ab7055e9c397312385bd9ced94920f2802310c930396", size = 23085, upload-time = "2024-10-18T15:21:27.029Z" }, + { url = "https://files.pythonhosted.org/packages/c2/cf/c9d56af24d56ea04daae7ac0940232d31d5a8354f2b457c6d856b2057d69/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f3818cb119498c0678015754eba762e0d61e5b52d34c8b13d770f0719f7b1d79", size = 22978, upload-time = "2024-10-18T15:21:27.846Z" }, + { url = "https://files.pythonhosted.org/packages/2a/9f/8619835cd6a711d6272d62abb78c033bda638fdc54c4e7f4272cf1c0962b/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:cdb82a876c47801bb54a690c5ae105a46b392ac6099881cdfb9f6e95e4014c6a", size = 24208, upload-time = "2024-10-18T15:21:28.744Z" }, + { url = "https://files.pythonhosted.org/packages/f9/bf/176950a1792b2cd2102b8ffeb5133e1ed984547b75db47c25a67d3359f77/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:cabc348d87e913db6ab4aa100f01b08f481097838bdddf7c7a84b7575b7309ca", size = 23357, upload-time = "2024-10-18T15:21:29.545Z" }, + { url = "https://files.pythonhosted.org/packages/ce/4f/9a02c1d335caabe5c4efb90e1b6e8ee944aa245c1aaaab8e8a618987d816/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:444dcda765c8a838eaae23112db52f1efaf750daddb2d9ca300bcae1039adc5c", size = 23344, upload-time = "2024-10-18T15:21:30.366Z" }, + { url = "https://files.pythonhosted.org/packages/ee/55/c271b57db36f748f0e04a759ace9f8f759ccf22b4960c270c78a394f58be/MarkupSafe-3.0.2-cp313-cp313-win32.whl", hash = "sha256:bcf3e58998965654fdaff38e58584d8937aa3096ab5354d493c77d1fdd66d7a1", size = 15101, upload-time = "2024-10-18T15:21:31.207Z" }, + { url = "https://files.pythonhosted.org/packages/29/88/07df22d2dd4df40aba9f3e402e6dc1b8ee86297dddbad4872bd5e7b0094f/MarkupSafe-3.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:e6a2a455bd412959b57a172ce6328d2dd1f01cb2135efda2e4576e8a23fa3b0f", size = 15603, upload-time = "2024-10-18T15:21:32.032Z" }, + { url = "https://files.pythonhosted.org/packages/62/6a/8b89d24db2d32d433dffcd6a8779159da109842434f1dd2f6e71f32f738c/MarkupSafe-3.0.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:b5a6b3ada725cea8a5e634536b1b01c30bcdcd7f9c6fff4151548d5bf6b3a36c", size = 14510, upload-time = "2024-10-18T15:21:33.625Z" }, + { url = "https://files.pythonhosted.org/packages/7a/06/a10f955f70a2e5a9bf78d11a161029d278eeacbd35ef806c3fd17b13060d/MarkupSafe-3.0.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:a904af0a6162c73e3edcb969eeeb53a63ceeb5d8cf642fade7d39e7963a22ddb", size = 12486, upload-time = "2024-10-18T15:21:34.611Z" }, + { url = "https://files.pythonhosted.org/packages/34/cf/65d4a571869a1a9078198ca28f39fba5fbb910f952f9dbc5220afff9f5e6/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4aa4e5faecf353ed117801a068ebab7b7e09ffb6e1d5e412dc852e0da018126c", size = 25480, upload-time = "2024-10-18T15:21:35.398Z" }, + { url = "https://files.pythonhosted.org/packages/0c/e3/90e9651924c430b885468b56b3d597cabf6d72be4b24a0acd1fa0e12af67/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0ef13eaeee5b615fb07c9a7dadb38eac06a0608b41570d8ade51c56539e509d", size = 23914, upload-time = "2024-10-18T15:21:36.231Z" }, + { url = "https://files.pythonhosted.org/packages/66/8c/6c7cf61f95d63bb866db39085150df1f2a5bd3335298f14a66b48e92659c/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d16a81a06776313e817c951135cf7340a3e91e8c1ff2fac444cfd75fffa04afe", size = 23796, upload-time = "2024-10-18T15:21:37.073Z" }, + { url = "https://files.pythonhosted.org/packages/bb/35/cbe9238ec3f47ac9a7c8b3df7a808e7cb50fe149dc7039f5f454b3fba218/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:6381026f158fdb7c72a168278597a5e3a5222e83ea18f543112b2662a9b699c5", size = 25473, upload-time = "2024-10-18T15:21:37.932Z" }, + { url = "https://files.pythonhosted.org/packages/e6/32/7621a4382488aa283cc05e8984a9c219abad3bca087be9ec77e89939ded9/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:3d79d162e7be8f996986c064d1c7c817f6df3a77fe3d6859f6f9e7be4b8c213a", size = 24114, upload-time = "2024-10-18T15:21:39.799Z" }, + { url = "https://files.pythonhosted.org/packages/0d/80/0985960e4b89922cb5a0bac0ed39c5b96cbc1a536a99f30e8c220a996ed9/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:131a3c7689c85f5ad20f9f6fb1b866f402c445b220c19fe4308c0b147ccd2ad9", size = 24098, upload-time = "2024-10-18T15:21:40.813Z" }, + { url = "https://files.pythonhosted.org/packages/82/78/fedb03c7d5380df2427038ec8d973587e90561b2d90cd472ce9254cf348b/MarkupSafe-3.0.2-cp313-cp313t-win32.whl", hash = "sha256:ba8062ed2cf21c07a9e295d5b8a2a5ce678b913b45fdf68c32d95d6c1291e0b6", size = 15208, upload-time = "2024-10-18T15:21:41.814Z" }, + { url = "https://files.pythonhosted.org/packages/4f/65/6079a46068dfceaeabb5dcad6d674f5f5c61a6fa5673746f42a9f4c233b3/MarkupSafe-3.0.2-cp313-cp313t-win_amd64.whl", hash = "sha256:e444a31f8db13eb18ada366ab3cf45fd4b31e4db1236a4448f68778c1d1a5a2f", size = 15739, upload-time = "2024-10-18T15:21:42.784Z" }, ] [[package]] name = "packaging" version = "24.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d0/63/68dbb6eb2de9cb10ee4c9c14a0148804425e13c4fb20d61cce69f53106da/packaging-24.2.tar.gz", hash = "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f", size = 163950 } +sdist = { url = "https://files.pythonhosted.org/packages/d0/63/68dbb6eb2de9cb10ee4c9c14a0148804425e13c4fb20d61cce69f53106da/packaging-24.2.tar.gz", hash = "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f", size = 163950, upload-time = "2024-11-08T09:47:47.202Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/88/ef/eb23f262cca3c0c4eb7ab1933c3b1f03d021f2c48f54763065b6f0e321be/packaging-24.2-py3-none-any.whl", hash = "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759", size = 65451 }, + { url = "https://files.pythonhosted.org/packages/88/ef/eb23f262cca3c0c4eb7ab1933c3b1f03d021f2c48f54763065b6f0e321be/packaging-24.2-py3-none-any.whl", hash = "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759", size = 65451, upload-time = "2024-11-08T09:47:44.722Z" }, ] [[package]] @@ -304,9 +306,9 @@ dependencies = [ { name = "pyyaml" }, { name = "six" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/46/9b/fd39836a6397fb363446d83075a7b9c2cc562f4c449292e039ed36084376/pybtex-0.24.0.tar.gz", hash = "sha256:818eae35b61733e5c007c3fcd2cfb75ed1bc8b4173c1f70b56cc4c0802d34755", size = 402879 } +sdist = { url = "https://files.pythonhosted.org/packages/46/9b/fd39836a6397fb363446d83075a7b9c2cc562f4c449292e039ed36084376/pybtex-0.24.0.tar.gz", hash = "sha256:818eae35b61733e5c007c3fcd2cfb75ed1bc8b4173c1f70b56cc4c0802d34755", size = 402879, upload-time = "2021-01-17T20:02:27.328Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/ad/5f/40d8e90f985a05133a8895fc454c6127ecec3de8b095dd35bba91382f803/pybtex-0.24.0-py2.py3-none-any.whl", hash = "sha256:e1e0c8c69998452fea90e9179aa2a98ab103f3eed894405b7264e517cc2fcc0f", size = 561354 }, + { url = "https://files.pythonhosted.org/packages/ad/5f/40d8e90f985a05133a8895fc454c6127ecec3de8b095dd35bba91382f803/pybtex-0.24.0-py2.py3-none-any.whl", hash = "sha256:e1e0c8c69998452fea90e9179aa2a98ab103f3eed894405b7264e517cc2fcc0f", size = 561354, upload-time = "2021-01-17T20:02:23.696Z" }, ] [[package]] @@ -317,62 +319,62 @@ dependencies = [ { name = "docutils" }, { name = "pybtex" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/7e/84/796ea94d26188a853660f81bded39f8de4cfe595130aef0dea1088705a11/pybtex-docutils-1.0.3.tar.gz", hash = "sha256:3a7ebdf92b593e00e8c1c538aa9a20bca5d92d84231124715acc964d51d93c6b", size = 18348 } +sdist = { url = "https://files.pythonhosted.org/packages/7e/84/796ea94d26188a853660f81bded39f8de4cfe595130aef0dea1088705a11/pybtex-docutils-1.0.3.tar.gz", hash = "sha256:3a7ebdf92b593e00e8c1c538aa9a20bca5d92d84231124715acc964d51d93c6b", size = 18348, upload-time = "2023-08-22T18:47:54.833Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/11/b1/ce1f4596211efb5410e178a803f08e59b20bedb66837dcf41e21c54f9ec1/pybtex_docutils-1.0.3-py3-none-any.whl", hash = "sha256:8fd290d2ae48e32fcb54d86b0efb8d573198653c7e2447d5bec5847095f430b9", size = 6385 }, + { url = "https://files.pythonhosted.org/packages/11/b1/ce1f4596211efb5410e178a803f08e59b20bedb66837dcf41e21c54f9ec1/pybtex_docutils-1.0.3-py3-none-any.whl", hash = "sha256:8fd290d2ae48e32fcb54d86b0efb8d573198653c7e2447d5bec5847095f430b9", size = 6385, upload-time = "2023-08-22T06:43:20.513Z" }, ] [[package]] name = "pygments" version = "2.19.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/7c/2d/c3338d48ea6cc0feb8446d8e6937e1408088a72a39937982cc6111d17f84/pygments-2.19.1.tar.gz", hash = "sha256:61c16d2a8576dc0649d9f39e089b5f02bcd27fba10d8fb4dcc28173f7a45151f", size = 4968581 } +sdist = { url = "https://files.pythonhosted.org/packages/7c/2d/c3338d48ea6cc0feb8446d8e6937e1408088a72a39937982cc6111d17f84/pygments-2.19.1.tar.gz", hash = "sha256:61c16d2a8576dc0649d9f39e089b5f02bcd27fba10d8fb4dcc28173f7a45151f", size = 4968581, upload-time = "2025-01-06T17:26:30.443Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/8a/0b/9fcc47d19c48b59121088dd6da2488a49d5f72dacf8262e2790a1d2c7d15/pygments-2.19.1-py3-none-any.whl", hash = "sha256:9ea1544ad55cecf4b8242fab6dd35a93bbce657034b0611ee383099054ab6d8c", size = 1225293 }, + { url = "https://files.pythonhosted.org/packages/8a/0b/9fcc47d19c48b59121088dd6da2488a49d5f72dacf8262e2790a1d2c7d15/pygments-2.19.1-py3-none-any.whl", hash = "sha256:9ea1544ad55cecf4b8242fab6dd35a93bbce657034b0611ee383099054ab6d8c", size = 1225293, upload-time = "2025-01-06T17:26:25.553Z" }, ] [[package]] name = "pyyaml" version = "6.0.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/54/ed/79a089b6be93607fa5cdaedf301d7dfb23af5f25c398d5ead2525b063e17/pyyaml-6.0.2.tar.gz", hash = "sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e", size = 130631 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/9b/95/a3fac87cb7158e231b5a6012e438c647e1a87f09f8e0d123acec8ab8bf71/PyYAML-6.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0a9a2848a5b7feac301353437eb7d5957887edbf81d56e903999a75a3d743086", size = 184199 }, - { url = "https://files.pythonhosted.org/packages/c7/7a/68bd47624dab8fd4afbfd3c48e3b79efe09098ae941de5b58abcbadff5cb/PyYAML-6.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:29717114e51c84ddfba879543fb232a6ed60086602313ca38cce623c1d62cfbf", size = 171758 }, - { url = "https://files.pythonhosted.org/packages/49/ee/14c54df452143b9ee9f0f29074d7ca5516a36edb0b4cc40c3f280131656f/PyYAML-6.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8824b5a04a04a047e72eea5cec3bc266db09e35de6bdfe34c9436ac5ee27d237", size = 718463 }, - { url = "https://files.pythonhosted.org/packages/4d/61/de363a97476e766574650d742205be468921a7b532aa2499fcd886b62530/PyYAML-6.0.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7c36280e6fb8385e520936c3cb3b8042851904eba0e58d277dca80a5cfed590b", size = 719280 }, - { url = "https://files.pythonhosted.org/packages/6b/4e/1523cb902fd98355e2e9ea5e5eb237cbc5f3ad5f3075fa65087aa0ecb669/PyYAML-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ec031d5d2feb36d1d1a24380e4db6d43695f3748343d99434e6f5f9156aaa2ed", size = 751239 }, - { url = "https://files.pythonhosted.org/packages/b7/33/5504b3a9a4464893c32f118a9cc045190a91637b119a9c881da1cf6b7a72/PyYAML-6.0.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:936d68689298c36b53b29f23c6dbb74de12b4ac12ca6cfe0e047bedceea56180", size = 695802 }, - { url = "https://files.pythonhosted.org/packages/5c/20/8347dcabd41ef3a3cdc4f7b7a2aff3d06598c8779faa189cdbf878b626a4/PyYAML-6.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:23502f431948090f597378482b4812b0caae32c22213aecf3b55325e049a6c68", size = 720527 }, - { url = "https://files.pythonhosted.org/packages/be/aa/5afe99233fb360d0ff37377145a949ae258aaab831bde4792b32650a4378/PyYAML-6.0.2-cp310-cp310-win32.whl", hash = "sha256:2e99c6826ffa974fe6e27cdb5ed0021786b03fc98e5ee3c5bfe1fd5015f42b99", size = 144052 }, - { url = "https://files.pythonhosted.org/packages/b5/84/0fa4b06f6d6c958d207620fc60005e241ecedceee58931bb20138e1e5776/PyYAML-6.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:a4d3091415f010369ae4ed1fc6b79def9416358877534caf6a0fdd2146c87a3e", size = 161774 }, - { url = "https://files.pythonhosted.org/packages/f8/aa/7af4e81f7acba21a4c6be026da38fd2b872ca46226673c89a758ebdc4fd2/PyYAML-6.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cc1c1159b3d456576af7a3e4d1ba7e6924cb39de8f67111c735f6fc832082774", size = 184612 }, - { url = "https://files.pythonhosted.org/packages/8b/62/b9faa998fd185f65c1371643678e4d58254add437edb764a08c5a98fb986/PyYAML-6.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1e2120ef853f59c7419231f3bf4e7021f1b936f6ebd222406c3b60212205d2ee", size = 172040 }, - { url = "https://files.pythonhosted.org/packages/ad/0c/c804f5f922a9a6563bab712d8dcc70251e8af811fce4524d57c2c0fd49a4/PyYAML-6.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d225db5a45f21e78dd9358e58a98702a0302f2659a3c6cd320564b75b86f47c", size = 736829 }, - { url = "https://files.pythonhosted.org/packages/51/16/6af8d6a6b210c8e54f1406a6b9481febf9c64a3109c541567e35a49aa2e7/PyYAML-6.0.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5ac9328ec4831237bec75defaf839f7d4564be1e6b25ac710bd1a96321cc8317", size = 764167 }, - { url = "https://files.pythonhosted.org/packages/75/e4/2c27590dfc9992f73aabbeb9241ae20220bd9452df27483b6e56d3975cc5/PyYAML-6.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ad2a3decf9aaba3d29c8f537ac4b243e36bef957511b4766cb0057d32b0be85", size = 762952 }, - { url = "https://files.pythonhosted.org/packages/9b/97/ecc1abf4a823f5ac61941a9c00fe501b02ac3ab0e373c3857f7d4b83e2b6/PyYAML-6.0.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ff3824dc5261f50c9b0dfb3be22b4567a6f938ccce4587b38952d85fd9e9afe4", size = 735301 }, - { url = "https://files.pythonhosted.org/packages/45/73/0f49dacd6e82c9430e46f4a027baa4ca205e8b0a9dce1397f44edc23559d/PyYAML-6.0.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:797b4f722ffa07cc8d62053e4cff1486fa6dc094105d13fea7b1de7d8bf71c9e", size = 756638 }, - { url = "https://files.pythonhosted.org/packages/22/5f/956f0f9fc65223a58fbc14459bf34b4cc48dec52e00535c79b8db361aabd/PyYAML-6.0.2-cp311-cp311-win32.whl", hash = "sha256:11d8f3dd2b9c1207dcaf2ee0bbbfd5991f571186ec9cc78427ba5bd32afae4b5", size = 143850 }, - { url = "https://files.pythonhosted.org/packages/ed/23/8da0bbe2ab9dcdd11f4f4557ccaf95c10b9811b13ecced089d43ce59c3c8/PyYAML-6.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:e10ce637b18caea04431ce14fabcf5c64a1c61ec9c56b071a4b7ca131ca52d44", size = 161980 }, - { url = "https://files.pythonhosted.org/packages/86/0c/c581167fc46d6d6d7ddcfb8c843a4de25bdd27e4466938109ca68492292c/PyYAML-6.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c70c95198c015b85feafc136515252a261a84561b7b1d51e3384e0655ddf25ab", size = 183873 }, - { url = "https://files.pythonhosted.org/packages/a8/0c/38374f5bb272c051e2a69281d71cba6fdb983413e6758b84482905e29a5d/PyYAML-6.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725", size = 173302 }, - { url = "https://files.pythonhosted.org/packages/c3/93/9916574aa8c00aa06bbac729972eb1071d002b8e158bd0e83a3b9a20a1f7/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f71ea527786de97d1a0cc0eacd1defc0985dcf6b3f17bb77dcfc8c34bec4dc5", size = 739154 }, - { url = "https://files.pythonhosted.org/packages/95/0f/b8938f1cbd09739c6da569d172531567dbcc9789e0029aa070856f123984/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9b22676e8097e9e22e36d6b7bda33190d0d400f345f23d4065d48f4ca7ae0425", size = 766223 }, - { url = "https://files.pythonhosted.org/packages/b9/2b/614b4752f2e127db5cc206abc23a8c19678e92b23c3db30fc86ab731d3bd/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80bab7bfc629882493af4aa31a4cfa43a4c57c83813253626916b8c7ada83476", size = 767542 }, - { url = "https://files.pythonhosted.org/packages/d4/00/dd137d5bcc7efea1836d6264f049359861cf548469d18da90cd8216cf05f/PyYAML-6.0.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48", size = 731164 }, - { url = "https://files.pythonhosted.org/packages/c9/1f/4f998c900485e5c0ef43838363ba4a9723ac0ad73a9dc42068b12aaba4e4/PyYAML-6.0.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b", size = 756611 }, - { url = "https://files.pythonhosted.org/packages/df/d1/f5a275fdb252768b7a11ec63585bc38d0e87c9e05668a139fea92b80634c/PyYAML-6.0.2-cp312-cp312-win32.whl", hash = "sha256:ef6107725bd54b262d6dedcc2af448a266975032bc85ef0172c5f059da6325b4", size = 140591 }, - { url = "https://files.pythonhosted.org/packages/0c/e8/4f648c598b17c3d06e8753d7d13d57542b30d56e6c2dedf9c331ae56312e/PyYAML-6.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8", size = 156338 }, - { url = "https://files.pythonhosted.org/packages/ef/e3/3af305b830494fa85d95f6d95ef7fa73f2ee1cc8ef5b495c7c3269fb835f/PyYAML-6.0.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba", size = 181309 }, - { url = "https://files.pythonhosted.org/packages/45/9f/3b1c20a0b7a3200524eb0076cc027a970d320bd3a6592873c85c92a08731/PyYAML-6.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1", size = 171679 }, - { url = "https://files.pythonhosted.org/packages/7c/9a/337322f27005c33bcb656c655fa78325b730324c78620e8328ae28b64d0c/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133", size = 733428 }, - { url = "https://files.pythonhosted.org/packages/a3/69/864fbe19e6c18ea3cc196cbe5d392175b4cf3d5d0ac1403ec3f2d237ebb5/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484", size = 763361 }, - { url = "https://files.pythonhosted.org/packages/04/24/b7721e4845c2f162d26f50521b825fb061bc0a5afcf9a386840f23ea19fa/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5", size = 759523 }, - { url = "https://files.pythonhosted.org/packages/2b/b2/e3234f59ba06559c6ff63c4e10baea10e5e7df868092bf9ab40e5b9c56b6/PyYAML-6.0.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc", size = 726660 }, - { url = "https://files.pythonhosted.org/packages/fe/0f/25911a9f080464c59fab9027482f822b86bf0608957a5fcc6eaac85aa515/PyYAML-6.0.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652", size = 751597 }, - { url = "https://files.pythonhosted.org/packages/14/0d/e2c3b43bbce3cf6bd97c840b46088a3031085179e596d4929729d8d68270/PyYAML-6.0.2-cp313-cp313-win32.whl", hash = "sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183", size = 140527 }, - { url = "https://files.pythonhosted.org/packages/fa/de/02b54f42487e3d3c6efb3f89428677074ca7bf43aae402517bc7cca949f3/PyYAML-6.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563", size = 156446 }, +sdist = { url = "https://files.pythonhosted.org/packages/54/ed/79a089b6be93607fa5cdaedf301d7dfb23af5f25c398d5ead2525b063e17/pyyaml-6.0.2.tar.gz", hash = "sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e", size = 130631, upload-time = "2024-08-06T20:33:50.674Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9b/95/a3fac87cb7158e231b5a6012e438c647e1a87f09f8e0d123acec8ab8bf71/PyYAML-6.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0a9a2848a5b7feac301353437eb7d5957887edbf81d56e903999a75a3d743086", size = 184199, upload-time = "2024-08-06T20:31:40.178Z" }, + { url = "https://files.pythonhosted.org/packages/c7/7a/68bd47624dab8fd4afbfd3c48e3b79efe09098ae941de5b58abcbadff5cb/PyYAML-6.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:29717114e51c84ddfba879543fb232a6ed60086602313ca38cce623c1d62cfbf", size = 171758, upload-time = "2024-08-06T20:31:42.173Z" }, + { url = "https://files.pythonhosted.org/packages/49/ee/14c54df452143b9ee9f0f29074d7ca5516a36edb0b4cc40c3f280131656f/PyYAML-6.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8824b5a04a04a047e72eea5cec3bc266db09e35de6bdfe34c9436ac5ee27d237", size = 718463, upload-time = "2024-08-06T20:31:44.263Z" }, + { url = "https://files.pythonhosted.org/packages/4d/61/de363a97476e766574650d742205be468921a7b532aa2499fcd886b62530/PyYAML-6.0.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7c36280e6fb8385e520936c3cb3b8042851904eba0e58d277dca80a5cfed590b", size = 719280, upload-time = "2024-08-06T20:31:50.199Z" }, + { url = "https://files.pythonhosted.org/packages/6b/4e/1523cb902fd98355e2e9ea5e5eb237cbc5f3ad5f3075fa65087aa0ecb669/PyYAML-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ec031d5d2feb36d1d1a24380e4db6d43695f3748343d99434e6f5f9156aaa2ed", size = 751239, upload-time = "2024-08-06T20:31:52.292Z" }, + { url = "https://files.pythonhosted.org/packages/b7/33/5504b3a9a4464893c32f118a9cc045190a91637b119a9c881da1cf6b7a72/PyYAML-6.0.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:936d68689298c36b53b29f23c6dbb74de12b4ac12ca6cfe0e047bedceea56180", size = 695802, upload-time = "2024-08-06T20:31:53.836Z" }, + { url = "https://files.pythonhosted.org/packages/5c/20/8347dcabd41ef3a3cdc4f7b7a2aff3d06598c8779faa189cdbf878b626a4/PyYAML-6.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:23502f431948090f597378482b4812b0caae32c22213aecf3b55325e049a6c68", size = 720527, upload-time = "2024-08-06T20:31:55.565Z" }, + { url = "https://files.pythonhosted.org/packages/be/aa/5afe99233fb360d0ff37377145a949ae258aaab831bde4792b32650a4378/PyYAML-6.0.2-cp310-cp310-win32.whl", hash = "sha256:2e99c6826ffa974fe6e27cdb5ed0021786b03fc98e5ee3c5bfe1fd5015f42b99", size = 144052, upload-time = "2024-08-06T20:31:56.914Z" }, + { url = "https://files.pythonhosted.org/packages/b5/84/0fa4b06f6d6c958d207620fc60005e241ecedceee58931bb20138e1e5776/PyYAML-6.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:a4d3091415f010369ae4ed1fc6b79def9416358877534caf6a0fdd2146c87a3e", size = 161774, upload-time = "2024-08-06T20:31:58.304Z" }, + { url = "https://files.pythonhosted.org/packages/f8/aa/7af4e81f7acba21a4c6be026da38fd2b872ca46226673c89a758ebdc4fd2/PyYAML-6.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cc1c1159b3d456576af7a3e4d1ba7e6924cb39de8f67111c735f6fc832082774", size = 184612, upload-time = "2024-08-06T20:32:03.408Z" }, + { url = "https://files.pythonhosted.org/packages/8b/62/b9faa998fd185f65c1371643678e4d58254add437edb764a08c5a98fb986/PyYAML-6.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1e2120ef853f59c7419231f3bf4e7021f1b936f6ebd222406c3b60212205d2ee", size = 172040, upload-time = "2024-08-06T20:32:04.926Z" }, + { url = "https://files.pythonhosted.org/packages/ad/0c/c804f5f922a9a6563bab712d8dcc70251e8af811fce4524d57c2c0fd49a4/PyYAML-6.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d225db5a45f21e78dd9358e58a98702a0302f2659a3c6cd320564b75b86f47c", size = 736829, upload-time = "2024-08-06T20:32:06.459Z" }, + { url = "https://files.pythonhosted.org/packages/51/16/6af8d6a6b210c8e54f1406a6b9481febf9c64a3109c541567e35a49aa2e7/PyYAML-6.0.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5ac9328ec4831237bec75defaf839f7d4564be1e6b25ac710bd1a96321cc8317", size = 764167, upload-time = "2024-08-06T20:32:08.338Z" }, + { url = "https://files.pythonhosted.org/packages/75/e4/2c27590dfc9992f73aabbeb9241ae20220bd9452df27483b6e56d3975cc5/PyYAML-6.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ad2a3decf9aaba3d29c8f537ac4b243e36bef957511b4766cb0057d32b0be85", size = 762952, upload-time = "2024-08-06T20:32:14.124Z" }, + { url = "https://files.pythonhosted.org/packages/9b/97/ecc1abf4a823f5ac61941a9c00fe501b02ac3ab0e373c3857f7d4b83e2b6/PyYAML-6.0.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ff3824dc5261f50c9b0dfb3be22b4567a6f938ccce4587b38952d85fd9e9afe4", size = 735301, upload-time = "2024-08-06T20:32:16.17Z" }, + { url = "https://files.pythonhosted.org/packages/45/73/0f49dacd6e82c9430e46f4a027baa4ca205e8b0a9dce1397f44edc23559d/PyYAML-6.0.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:797b4f722ffa07cc8d62053e4cff1486fa6dc094105d13fea7b1de7d8bf71c9e", size = 756638, upload-time = "2024-08-06T20:32:18.555Z" }, + { url = "https://files.pythonhosted.org/packages/22/5f/956f0f9fc65223a58fbc14459bf34b4cc48dec52e00535c79b8db361aabd/PyYAML-6.0.2-cp311-cp311-win32.whl", hash = "sha256:11d8f3dd2b9c1207dcaf2ee0bbbfd5991f571186ec9cc78427ba5bd32afae4b5", size = 143850, upload-time = "2024-08-06T20:32:19.889Z" }, + { url = "https://files.pythonhosted.org/packages/ed/23/8da0bbe2ab9dcdd11f4f4557ccaf95c10b9811b13ecced089d43ce59c3c8/PyYAML-6.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:e10ce637b18caea04431ce14fabcf5c64a1c61ec9c56b071a4b7ca131ca52d44", size = 161980, upload-time = "2024-08-06T20:32:21.273Z" }, + { url = "https://files.pythonhosted.org/packages/86/0c/c581167fc46d6d6d7ddcfb8c843a4de25bdd27e4466938109ca68492292c/PyYAML-6.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c70c95198c015b85feafc136515252a261a84561b7b1d51e3384e0655ddf25ab", size = 183873, upload-time = "2024-08-06T20:32:25.131Z" }, + { url = "https://files.pythonhosted.org/packages/a8/0c/38374f5bb272c051e2a69281d71cba6fdb983413e6758b84482905e29a5d/PyYAML-6.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725", size = 173302, upload-time = "2024-08-06T20:32:26.511Z" }, + { url = "https://files.pythonhosted.org/packages/c3/93/9916574aa8c00aa06bbac729972eb1071d002b8e158bd0e83a3b9a20a1f7/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f71ea527786de97d1a0cc0eacd1defc0985dcf6b3f17bb77dcfc8c34bec4dc5", size = 739154, upload-time = "2024-08-06T20:32:28.363Z" }, + { url = "https://files.pythonhosted.org/packages/95/0f/b8938f1cbd09739c6da569d172531567dbcc9789e0029aa070856f123984/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9b22676e8097e9e22e36d6b7bda33190d0d400f345f23d4065d48f4ca7ae0425", size = 766223, upload-time = "2024-08-06T20:32:30.058Z" }, + { url = "https://files.pythonhosted.org/packages/b9/2b/614b4752f2e127db5cc206abc23a8c19678e92b23c3db30fc86ab731d3bd/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80bab7bfc629882493af4aa31a4cfa43a4c57c83813253626916b8c7ada83476", size = 767542, upload-time = "2024-08-06T20:32:31.881Z" }, + { url = "https://files.pythonhosted.org/packages/d4/00/dd137d5bcc7efea1836d6264f049359861cf548469d18da90cd8216cf05f/PyYAML-6.0.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48", size = 731164, upload-time = "2024-08-06T20:32:37.083Z" }, + { url = "https://files.pythonhosted.org/packages/c9/1f/4f998c900485e5c0ef43838363ba4a9723ac0ad73a9dc42068b12aaba4e4/PyYAML-6.0.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b", size = 756611, upload-time = "2024-08-06T20:32:38.898Z" }, + { url = "https://files.pythonhosted.org/packages/df/d1/f5a275fdb252768b7a11ec63585bc38d0e87c9e05668a139fea92b80634c/PyYAML-6.0.2-cp312-cp312-win32.whl", hash = "sha256:ef6107725bd54b262d6dedcc2af448a266975032bc85ef0172c5f059da6325b4", size = 140591, upload-time = "2024-08-06T20:32:40.241Z" }, + { url = "https://files.pythonhosted.org/packages/0c/e8/4f648c598b17c3d06e8753d7d13d57542b30d56e6c2dedf9c331ae56312e/PyYAML-6.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8", size = 156338, upload-time = "2024-08-06T20:32:41.93Z" }, + { url = "https://files.pythonhosted.org/packages/ef/e3/3af305b830494fa85d95f6d95ef7fa73f2ee1cc8ef5b495c7c3269fb835f/PyYAML-6.0.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba", size = 181309, upload-time = "2024-08-06T20:32:43.4Z" }, + { url = "https://files.pythonhosted.org/packages/45/9f/3b1c20a0b7a3200524eb0076cc027a970d320bd3a6592873c85c92a08731/PyYAML-6.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1", size = 171679, upload-time = "2024-08-06T20:32:44.801Z" }, + { url = "https://files.pythonhosted.org/packages/7c/9a/337322f27005c33bcb656c655fa78325b730324c78620e8328ae28b64d0c/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133", size = 733428, upload-time = "2024-08-06T20:32:46.432Z" }, + { url = "https://files.pythonhosted.org/packages/a3/69/864fbe19e6c18ea3cc196cbe5d392175b4cf3d5d0ac1403ec3f2d237ebb5/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484", size = 763361, upload-time = "2024-08-06T20:32:51.188Z" }, + { url = "https://files.pythonhosted.org/packages/04/24/b7721e4845c2f162d26f50521b825fb061bc0a5afcf9a386840f23ea19fa/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5", size = 759523, upload-time = "2024-08-06T20:32:53.019Z" }, + { url = "https://files.pythonhosted.org/packages/2b/b2/e3234f59ba06559c6ff63c4e10baea10e5e7df868092bf9ab40e5b9c56b6/PyYAML-6.0.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc", size = 726660, upload-time = "2024-08-06T20:32:54.708Z" }, + { url = "https://files.pythonhosted.org/packages/fe/0f/25911a9f080464c59fab9027482f822b86bf0608957a5fcc6eaac85aa515/PyYAML-6.0.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652", size = 751597, upload-time = "2024-08-06T20:32:56.985Z" }, + { url = "https://files.pythonhosted.org/packages/14/0d/e2c3b43bbce3cf6bd97c840b46088a3031085179e596d4929729d8d68270/PyYAML-6.0.2-cp313-cp313-win32.whl", hash = "sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183", size = 140527, upload-time = "2024-08-06T20:33:03.001Z" }, + { url = "https://files.pythonhosted.org/packages/fa/de/02b54f42487e3d3c6efb3f89428677074ca7bf43aae402517bc7cca949f3/PyYAML-6.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563", size = 156446, upload-time = "2024-08-06T20:33:04.33Z" }, ] [[package]] @@ -385,76 +387,76 @@ dependencies = [ { name = "idna" }, { name = "urllib3" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/63/70/2bf7780ad2d390a8d301ad0b550f1581eadbd9a20f896afe06353c2a2913/requests-2.32.3.tar.gz", hash = "sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760", size = 131218 } +sdist = { url = "https://files.pythonhosted.org/packages/63/70/2bf7780ad2d390a8d301ad0b550f1581eadbd9a20f896afe06353c2a2913/requests-2.32.3.tar.gz", hash = "sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760", size = 131218, upload-time = "2024-05-29T15:37:49.536Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/f9/9b/335f9764261e915ed497fcdeb11df5dfd6f7bf257d4a6a2a686d80da4d54/requests-2.32.3-py3-none-any.whl", hash = "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6", size = 64928 }, + { url = "https://files.pythonhosted.org/packages/f9/9b/335f9764261e915ed497fcdeb11df5dfd6f7bf257d4a6a2a686d80da4d54/requests-2.32.3-py3-none-any.whl", hash = "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6", size = 64928, upload-time = "2024-05-29T15:37:47.027Z" }, ] [[package]] name = "roman-numerals-py" version = "3.1.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/30/76/48fd56d17c5bdbdf65609abbc67288728a98ed4c02919428d4f52d23b24b/roman_numerals_py-3.1.0.tar.gz", hash = "sha256:be4bf804f083a4ce001b5eb7e3c0862479d10f94c936f6c4e5f250aa5ff5bd2d", size = 9017 } +sdist = { url = "https://files.pythonhosted.org/packages/30/76/48fd56d17c5bdbdf65609abbc67288728a98ed4c02919428d4f52d23b24b/roman_numerals_py-3.1.0.tar.gz", hash = "sha256:be4bf804f083a4ce001b5eb7e3c0862479d10f94c936f6c4e5f250aa5ff5bd2d", size = 9017, upload-time = "2025-02-22T07:34:54.333Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/53/97/d2cbbaa10c9b826af0e10fdf836e1bf344d9f0abb873ebc34d1f49642d3f/roman_numerals_py-3.1.0-py3-none-any.whl", hash = "sha256:9da2ad2fb670bcf24e81070ceb3be72f6c11c440d73bd579fbeca1e9f330954c", size = 7742 }, + { url = "https://files.pythonhosted.org/packages/53/97/d2cbbaa10c9b826af0e10fdf836e1bf344d9f0abb873ebc34d1f49642d3f/roman_numerals_py-3.1.0-py3-none-any.whl", hash = "sha256:9da2ad2fb670bcf24e81070ceb3be72f6c11c440d73bd579fbeca1e9f330954c", size = 7742, upload-time = "2025-02-22T07:34:52.422Z" }, ] [[package]] name = "rust-just" version = "1.39.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/a3/e5/37254d353a23f567ac218ddd2c461337fafe3a43d44dcd6f0c8e72d096f4/rust_just-1.39.0.tar.gz", hash = "sha256:247d0b293924cc8089a73428c9c03a3c2c0627bb8f205addb976ded0681f0dac", size = 1395439 } +sdist = { url = "https://files.pythonhosted.org/packages/a3/e5/37254d353a23f567ac218ddd2c461337fafe3a43d44dcd6f0c8e72d096f4/rust_just-1.39.0.tar.gz", hash = "sha256:247d0b293924cc8089a73428c9c03a3c2c0627bb8f205addb976ded0681f0dac", size = 1395439, upload-time = "2025-01-23T03:59:04.917Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/c9/9e/c7151bfa84c1cd3ac4c11a60d1a2f074b7a244ae96959d968e8b9e8e3f29/rust_just-1.39.0-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:3845ab10254c994ddebcf489b30c53a24c1d11585c9e0eeaf1cb0da422bee87f", size = 1781993 }, - { url = "https://files.pythonhosted.org/packages/e4/0f/c93ef08567835356033bee162c2e5e06b018811f5188b94ef3e74dafe7eb/rust_just-1.39.0-py3-none-macosx_11_0_arm64.whl", hash = "sha256:fd5c12118a8d65266ccdacfbc24bab26f77d509caaf263095cb96611ea6ce7e8", size = 1652880 }, - { url = "https://files.pythonhosted.org/packages/f3/e7/22647f9c18537046940b3b4159377665912acccbacedd775917610c0390d/rust_just-1.39.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:428d07b1e798777c4e9a8c245539d72743be095558010f0a86823e1c442930f9", size = 1771788 }, - { url = "https://files.pythonhosted.org/packages/d5/1f/2a36afad5eeca6756fc8c87e08d102cdadf8e4b31c5f8bcb6f12c109b5b4/rust_just-1.39.0-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:135a7a65a8641b00a2fe7f3156a97ab7052e4830a922a71e67ca4e38ccd54cd2", size = 1778377 }, - { url = "https://files.pythonhosted.org/packages/97/5b/45effb44bbfab892774a239446920cfb9b3d999921fe7cff3d99b36394a7/rust_just-1.39.0-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:94eb45e585fda019f7f9cbac198e10e31f81c704371887cbdec9b7a1ae2e0d29", size = 1896235 }, - { url = "https://files.pythonhosted.org/packages/b5/12/7e88a7e917c2e933846a32a2f537786829b48c827a6029e85943d5eeadc0/rust_just-1.39.0-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de4a8566ca1eb87b5ff2669a6dd9474b16977c5d712534a5a9c7a950271da2d0", size = 1954347 }, - { url = "https://files.pythonhosted.org/packages/9a/36/5dc917a2c0a0b66f0cc4bb0be4985090deefa33433dd869649a4ce2bc8f3/rust_just-1.39.0-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4e7ecd8fd862729c243498951caa54d778ff480c2524039280ff3ebb9a64299f", size = 2450909 }, - { url = "https://files.pythonhosted.org/packages/da/fc/b9224b354da8a89b38cd4145ec0e9e089635a45c1459231e349647cdad64/rust_just-1.39.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:576229024d2ef8fc696d5a049ecd0d8f3d9b920a32e76f65e95840d24d804101", size = 1895058 }, - { url = "https://files.pythonhosted.org/packages/0b/ef/985cb93c9dd36f9bc41f26b3ce6d420c69fb18166ac61783bced2c328f75/rust_just-1.39.0-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:c1cd9240e2c1b352d7ccc6b89ce84fcc0352f15bb9660cdc6bc34802b36251b6", size = 1767816 }, - { url = "https://files.pythonhosted.org/packages/50/43/fc644746a7479fadbe6878ae9fa1da83860104d1e64a49de47306fa1a591/rust_just-1.39.0-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:d6eff0461df7e36eba6e7f0addf16ef98563cf8cb483e4c8393be5456d6af5c6", size = 1791992 }, - { url = "https://files.pythonhosted.org/packages/32/d9/6924547c02afba3a49b14f53bed09b54d4292016b830f366d7ed1f80288a/rust_just-1.39.0-py3-none-musllinux_1_2_i686.whl", hash = "sha256:0dfcc49a5fa126ba923b58e48921fd117e429660495577a854494c6ced3134c9", size = 1884357 }, - { url = "https://files.pythonhosted.org/packages/15/96/7e8d3795588c2e8e629f9f0d9cdd0cf1ba1bef5bf9c8b64aae33c78f1993/rust_just-1.39.0-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:826203ad02c869ad8621993a608adb01394ef9c9c9ca6aa7dd7875b1f272aa46", size = 1936706 }, - { url = "https://files.pythonhosted.org/packages/23/28/2492c4b7c8f0e526f52a263f20b951880387f992151bbc46c6c8914786a8/rust_just-1.39.0-py3-none-win32.whl", hash = "sha256:dcef0926b287449e853b878f6f34759a797d017cefb83afbcd74820d37259b78", size = 1577519 }, - { url = "https://files.pythonhosted.org/packages/6f/c2/1d576be1ca714df4a90255cfbcb4ec06d9aafbf7b14924c2881a8596a68e/rust_just-1.39.0-py3-none-win_amd64.whl", hash = "sha256:3139f3f76434a8ebbf35b213d149e647c4d9546312b438e262df7ec41e7ef7bc", size = 1705761 }, + { url = "https://files.pythonhosted.org/packages/c9/9e/c7151bfa84c1cd3ac4c11a60d1a2f074b7a244ae96959d968e8b9e8e3f29/rust_just-1.39.0-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:3845ab10254c994ddebcf489b30c53a24c1d11585c9e0eeaf1cb0da422bee87f", size = 1781993, upload-time = "2025-01-23T03:57:47.874Z" }, + { url = "https://files.pythonhosted.org/packages/e4/0f/c93ef08567835356033bee162c2e5e06b018811f5188b94ef3e74dafe7eb/rust_just-1.39.0-py3-none-macosx_11_0_arm64.whl", hash = "sha256:fd5c12118a8d65266ccdacfbc24bab26f77d509caaf263095cb96611ea6ce7e8", size = 1652880, upload-time = "2025-01-23T03:57:52.783Z" }, + { url = "https://files.pythonhosted.org/packages/f3/e7/22647f9c18537046940b3b4159377665912acccbacedd775917610c0390d/rust_just-1.39.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:428d07b1e798777c4e9a8c245539d72743be095558010f0a86823e1c442930f9", size = 1771788, upload-time = "2025-01-23T03:57:59.092Z" }, + { url = "https://files.pythonhosted.org/packages/d5/1f/2a36afad5eeca6756fc8c87e08d102cdadf8e4b31c5f8bcb6f12c109b5b4/rust_just-1.39.0-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:135a7a65a8641b00a2fe7f3156a97ab7052e4830a922a71e67ca4e38ccd54cd2", size = 1778377, upload-time = "2025-01-23T03:58:04.584Z" }, + { url = "https://files.pythonhosted.org/packages/97/5b/45effb44bbfab892774a239446920cfb9b3d999921fe7cff3d99b36394a7/rust_just-1.39.0-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:94eb45e585fda019f7f9cbac198e10e31f81c704371887cbdec9b7a1ae2e0d29", size = 1896235, upload-time = "2025-01-23T03:58:10.805Z" }, + { url = "https://files.pythonhosted.org/packages/b5/12/7e88a7e917c2e933846a32a2f537786829b48c827a6029e85943d5eeadc0/rust_just-1.39.0-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de4a8566ca1eb87b5ff2669a6dd9474b16977c5d712534a5a9c7a950271da2d0", size = 1954347, upload-time = "2025-01-23T03:58:17.657Z" }, + { url = "https://files.pythonhosted.org/packages/9a/36/5dc917a2c0a0b66f0cc4bb0be4985090deefa33433dd869649a4ce2bc8f3/rust_just-1.39.0-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4e7ecd8fd862729c243498951caa54d778ff480c2524039280ff3ebb9a64299f", size = 2450909, upload-time = "2025-01-23T03:58:22.94Z" }, + { url = "https://files.pythonhosted.org/packages/da/fc/b9224b354da8a89b38cd4145ec0e9e089635a45c1459231e349647cdad64/rust_just-1.39.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:576229024d2ef8fc696d5a049ecd0d8f3d9b920a32e76f65e95840d24d804101", size = 1895058, upload-time = "2025-01-23T03:58:27.946Z" }, + { url = "https://files.pythonhosted.org/packages/0b/ef/985cb93c9dd36f9bc41f26b3ce6d420c69fb18166ac61783bced2c328f75/rust_just-1.39.0-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:c1cd9240e2c1b352d7ccc6b89ce84fcc0352f15bb9660cdc6bc34802b36251b6", size = 1767816, upload-time = "2025-01-23T03:58:36.139Z" }, + { url = "https://files.pythonhosted.org/packages/50/43/fc644746a7479fadbe6878ae9fa1da83860104d1e64a49de47306fa1a591/rust_just-1.39.0-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:d6eff0461df7e36eba6e7f0addf16ef98563cf8cb483e4c8393be5456d6af5c6", size = 1791992, upload-time = "2025-01-23T03:58:40.456Z" }, + { url = "https://files.pythonhosted.org/packages/32/d9/6924547c02afba3a49b14f53bed09b54d4292016b830f366d7ed1f80288a/rust_just-1.39.0-py3-none-musllinux_1_2_i686.whl", hash = "sha256:0dfcc49a5fa126ba923b58e48921fd117e429660495577a854494c6ced3134c9", size = 1884357, upload-time = "2025-01-23T03:58:45.482Z" }, + { url = "https://files.pythonhosted.org/packages/15/96/7e8d3795588c2e8e629f9f0d9cdd0cf1ba1bef5bf9c8b64aae33c78f1993/rust_just-1.39.0-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:826203ad02c869ad8621993a608adb01394ef9c9c9ca6aa7dd7875b1f272aa46", size = 1936706, upload-time = "2025-01-23T03:58:50.499Z" }, + { url = "https://files.pythonhosted.org/packages/23/28/2492c4b7c8f0e526f52a263f20b951880387f992151bbc46c6c8914786a8/rust_just-1.39.0-py3-none-win32.whl", hash = "sha256:dcef0926b287449e853b878f6f34759a797d017cefb83afbcd74820d37259b78", size = 1577519, upload-time = "2025-01-23T03:58:56.184Z" }, + { url = "https://files.pythonhosted.org/packages/6f/c2/1d576be1ca714df4a90255cfbcb4ec06d9aafbf7b14924c2881a8596a68e/rust_just-1.39.0-py3-none-win_amd64.whl", hash = "sha256:3139f3f76434a8ebbf35b213d149e647c4d9546312b438e262df7ec41e7ef7bc", size = 1705761, upload-time = "2025-01-23T03:59:00.659Z" }, ] [[package]] name = "setuptools" version = "75.8.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d1/53/43d99d7687e8cdef5ab5f9ec5eaf2c0423c2b35133a2b7e7bc276fc32b21/setuptools-75.8.2.tar.gz", hash = "sha256:4880473a969e5f23f2a2be3646b2dfd84af9028716d398e46192f84bc36900d2", size = 1344083 } +sdist = { url = "https://files.pythonhosted.org/packages/d1/53/43d99d7687e8cdef5ab5f9ec5eaf2c0423c2b35133a2b7e7bc276fc32b21/setuptools-75.8.2.tar.gz", hash = "sha256:4880473a969e5f23f2a2be3646b2dfd84af9028716d398e46192f84bc36900d2", size = 1344083, upload-time = "2025-02-26T20:45:19.103Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/a9/38/7d7362e031bd6dc121e5081d8cb6aa6f6fedf2b67bf889962134c6da4705/setuptools-75.8.2-py3-none-any.whl", hash = "sha256:558e47c15f1811c1fa7adbd0096669bf76c1d3f433f58324df69f3f5ecac4e8f", size = 1229385 }, + { url = "https://files.pythonhosted.org/packages/a9/38/7d7362e031bd6dc121e5081d8cb6aa6f6fedf2b67bf889962134c6da4705/setuptools-75.8.2-py3-none-any.whl", hash = "sha256:558e47c15f1811c1fa7adbd0096669bf76c1d3f433f58324df69f3f5ecac4e8f", size = 1229385, upload-time = "2025-02-26T20:45:17.259Z" }, ] [[package]] name = "six" version = "1.17.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/94/e7/b2c673351809dca68a0e064b6af791aa332cf192da575fd474ed7d6f16a2/six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81", size = 34031 } +sdist = { url = "https://files.pythonhosted.org/packages/94/e7/b2c673351809dca68a0e064b6af791aa332cf192da575fd474ed7d6f16a2/six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81", size = 34031, upload-time = "2024-12-04T17:35:28.174Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", size = 11050 }, + { url = "https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", size = 11050, upload-time = "2024-12-04T17:35:26.475Z" }, ] [[package]] name = "snowballstemmer" version = "2.2.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/44/7b/af302bebf22c749c56c9c3e8ae13190b5b5db37a33d9068652e8f73b7089/snowballstemmer-2.2.0.tar.gz", hash = "sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1", size = 86699 } +sdist = { url = "https://files.pythonhosted.org/packages/44/7b/af302bebf22c749c56c9c3e8ae13190b5b5db37a33d9068652e8f73b7089/snowballstemmer-2.2.0.tar.gz", hash = "sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1", size = 86699, upload-time = "2021-11-16T18:38:38.009Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/ed/dc/c02e01294f7265e63a7315fe086dd1df7dacb9f840a804da846b96d01b96/snowballstemmer-2.2.0-py2.py3-none-any.whl", hash = "sha256:c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a", size = 93002 }, + { url = "https://files.pythonhosted.org/packages/ed/dc/c02e01294f7265e63a7315fe086dd1df7dacb9f840a804da846b96d01b96/snowballstemmer-2.2.0-py2.py3-none-any.whl", hash = "sha256:c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a", size = 93002, upload-time = "2021-11-16T18:38:34.792Z" }, ] [[package]] name = "soupsieve" version = "2.6" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d7/ce/fbaeed4f9fb8b2daa961f90591662df6a86c1abf25c548329a86920aedfb/soupsieve-2.6.tar.gz", hash = "sha256:e2e68417777af359ec65daac1057404a3c8a5455bb8abc36f1a9866ab1a51abb", size = 101569 } +sdist = { url = "https://files.pythonhosted.org/packages/d7/ce/fbaeed4f9fb8b2daa961f90591662df6a86c1abf25c548329a86920aedfb/soupsieve-2.6.tar.gz", hash = "sha256:e2e68417777af359ec65daac1057404a3c8a5455bb8abc36f1a9866ab1a51abb", size = 101569, upload-time = "2024-08-13T13:39:12.166Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/d1/c2/fe97d779f3ef3b15f05c94a2f1e3d21732574ed441687474db9d342a7315/soupsieve-2.6-py3-none-any.whl", hash = "sha256:e72c4ff06e4fb6e4b5a9f0f55fe6e81514581fca1515028625d0f299c602ccc9", size = 36186 }, + { url = "https://files.pythonhosted.org/packages/d1/c2/fe97d779f3ef3b15f05c94a2f1e3d21732574ed441687474db9d342a7315/soupsieve-2.6-py3-none-any.whl", hash = "sha256:e72c4ff06e4fb6e4b5a9f0f55fe6e81514581fca1515028625d0f299c602ccc9", size = 36186, upload-time = "2024-08-13T13:39:10.986Z" }, ] [[package]] @@ -483,9 +485,9 @@ dependencies = [ { name = "sphinxcontrib-serializinghtml", marker = "python_full_version < '3.11'" }, { name = "tomli", marker = "python_full_version < '3.11'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/6f/6d/be0b61178fe2cdcb67e2a92fc9ebb488e3c51c4f74a36a7824c0adf23425/sphinx-8.1.3.tar.gz", hash = "sha256:43c1911eecb0d3e161ad78611bc905d1ad0e523e4ddc202a58a821773dc4c927", size = 8184611 } +sdist = { url = "https://files.pythonhosted.org/packages/6f/6d/be0b61178fe2cdcb67e2a92fc9ebb488e3c51c4f74a36a7824c0adf23425/sphinx-8.1.3.tar.gz", hash = "sha256:43c1911eecb0d3e161ad78611bc905d1ad0e523e4ddc202a58a821773dc4c927", size = 8184611, upload-time = "2024-10-13T20:27:13.93Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/26/60/1ddff83a56d33aaf6f10ec8ce84b4c007d9368b21008876fceda7e7381ef/sphinx-8.1.3-py3-none-any.whl", hash = "sha256:09719015511837b76bf6e03e42eb7595ac8c2e41eeb9c29c5b755c6b677992a2", size = 3487125 }, + { url = "https://files.pythonhosted.org/packages/26/60/1ddff83a56d33aaf6f10ec8ce84b4c007d9368b21008876fceda7e7381ef/sphinx-8.1.3-py3-none-any.whl", hash = "sha256:09719015511837b76bf6e03e42eb7595ac8c2e41eeb9c29c5b755c6b677992a2", size = 3487125, upload-time = "2024-10-13T20:27:10.448Z" }, ] [[package]] @@ -515,9 +517,9 @@ dependencies = [ { name = "sphinxcontrib-qthelp", marker = "python_full_version >= '3.11'" }, { name = "sphinxcontrib-serializinghtml", marker = "python_full_version >= '3.11'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/38/ad/4360e50ed56cb483667b8e6dadf2d3fda62359593faabbe749a27c4eaca6/sphinx-8.2.3.tar.gz", hash = "sha256:398ad29dee7f63a75888314e9424d40f52ce5a6a87ae88e7071e80af296ec348", size = 8321876 } +sdist = { url = "https://files.pythonhosted.org/packages/38/ad/4360e50ed56cb483667b8e6dadf2d3fda62359593faabbe749a27c4eaca6/sphinx-8.2.3.tar.gz", hash = "sha256:398ad29dee7f63a75888314e9424d40f52ce5a6a87ae88e7071e80af296ec348", size = 8321876, upload-time = "2025-03-02T22:31:59.658Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/31/53/136e9eca6e0b9dc0e1962e2c908fbea2e5ac000c2a2fbd9a35797958c48b/sphinx-8.2.3-py3-none-any.whl", hash = "sha256:4405915165f13521d875a8c29c8970800a0141c14cc5416a38feca4ea5d9b9c3", size = 3589741 }, + { url = "https://files.pythonhosted.org/packages/31/53/136e9eca6e0b9dc0e1962e2c908fbea2e5ac000c2a2fbd9a35797958c48b/sphinx-8.2.3-py3-none-any.whl", hash = "sha256:4405915165f13521d875a8c29c8970800a0141c14cc5416a38feca4ea5d9b9c3", size = 3589741, upload-time = "2025-03-02T22:31:56.836Z" }, ] [[package]] @@ -528,9 +530,9 @@ dependencies = [ { name = "sphinx", version = "8.1.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, { name = "sphinx", version = "8.2.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/98/0b/a866924ded68efec7a1759587a4e478aec7559d8165fac8b2ad1c0e774d6/sphinx_basic_ng-1.0.0b2.tar.gz", hash = "sha256:9ec55a47c90c8c002b5960c57492ec3021f5193cb26cebc2dc4ea226848651c9", size = 20736 } +sdist = { url = "https://files.pythonhosted.org/packages/98/0b/a866924ded68efec7a1759587a4e478aec7559d8165fac8b2ad1c0e774d6/sphinx_basic_ng-1.0.0b2.tar.gz", hash = "sha256:9ec55a47c90c8c002b5960c57492ec3021f5193cb26cebc2dc4ea226848651c9", size = 20736, upload-time = "2023-07-08T18:40:54.166Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/3c/dd/018ce05c532a22007ac58d4f45232514cd9d6dd0ee1dc374e309db830983/sphinx_basic_ng-1.0.0b2-py3-none-any.whl", hash = "sha256:eb09aedbabfb650607e9b4b68c9d240b90b1e1be221d6ad71d61c52e29f7932b", size = 22496 }, + { url = "https://files.pythonhosted.org/packages/3c/dd/018ce05c532a22007ac58d4f45232514cd9d6dd0ee1dc374e309db830983/sphinx_basic_ng-1.0.0b2-py3-none-any.whl", hash = "sha256:eb09aedbabfb650607e9b4b68c9d240b90b1e1be221d6ad71d61c52e29f7932b", size = 22496, upload-time = "2023-07-08T18:40:52.659Z" }, ] [[package]] @@ -541,19 +543,25 @@ dependencies = [ { name = "sphinx", version = "8.1.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, { name = "sphinx", version = "8.2.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/9a/10/25231164a97a9016bdc73a3530af8f4a6846bdc564af1460af2ff3e59a50/sphinx-multiversion-0.2.4.tar.gz", hash = "sha256:5cd1ca9ecb5eed63cb8d6ce5e9c438ca13af4fa98e7eb6f376be541dd4990bcb", size = 7024 } +sdist = { url = "https://files.pythonhosted.org/packages/9a/10/25231164a97a9016bdc73a3530af8f4a6846bdc564af1460af2ff3e59a50/sphinx-multiversion-0.2.4.tar.gz", hash = "sha256:5cd1ca9ecb5eed63cb8d6ce5e9c438ca13af4fa98e7eb6f376be541dd4990bcb", size = 7024, upload-time = "2020-08-12T15:48:20.566Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/19/51/203bb30b3ce76373237288e92cb71fb66f80ee380473f36bfe8a9d299c5d/sphinx_multiversion-0.2.4-py2.py3-none-any.whl", hash = "sha256:5c38d5ce785a335d8c8d768b46509bd66bfb9c6252b93b700ca8c05317f207d6", size = 9597 }, - { url = "https://files.pythonhosted.org/packages/05/ad/4989e6be165805694e93d09bc57425aa1368273b7de4fe3083fe4310803a/sphinx_multiversion-0.2.4-py3-none-any.whl", hash = "sha256:dec29f2a5890ad68157a790112edc0eb63140e70f9df0a363743c6258fbeb478", size = 9642 }, + { url = "https://files.pythonhosted.org/packages/19/51/203bb30b3ce76373237288e92cb71fb66f80ee380473f36bfe8a9d299c5d/sphinx_multiversion-0.2.4-py2.py3-none-any.whl", hash = "sha256:5c38d5ce785a335d8c8d768b46509bd66bfb9c6252b93b700ca8c05317f207d6", size = 9597, upload-time = "2024-10-03T21:45:52.754Z" }, + { url = "https://files.pythonhosted.org/packages/05/ad/4989e6be165805694e93d09bc57425aa1368273b7de4fe3083fe4310803a/sphinx_multiversion-0.2.4-py3-none-any.whl", hash = "sha256:dec29f2a5890ad68157a790112edc0eb63140e70f9df0a363743c6258fbeb478", size = 9642, upload-time = "2020-08-12T15:48:19.649Z" }, ] +[[package]] +name = "sphinxbootstrap4theme" +version = "0.6.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/39/6a/0734ab646a0ca96f82be187e90a080bcaab56f95e78f13ed01474163f1bf/sphinxbootstrap4theme-0.6.0.tar.gz", hash = "sha256:d3b2e413785afc74aa178872aa553d7b4156206037fdb39b7ff1490c7926d138", size = 327777, upload-time = "2019-04-10T23:57:29.626Z" } + [[package]] name = "sphinxcontrib-applehelp" version = "2.0.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ba/6e/b837e84a1a704953c62ef8776d45c3e8d759876b4a84fe14eba2859106fe/sphinxcontrib_applehelp-2.0.0.tar.gz", hash = "sha256:2f29ef331735ce958efa4734873f084941970894c6090408b079c61b2e1c06d1", size = 20053 } +sdist = { url = "https://files.pythonhosted.org/packages/ba/6e/b837e84a1a704953c62ef8776d45c3e8d759876b4a84fe14eba2859106fe/sphinxcontrib_applehelp-2.0.0.tar.gz", hash = "sha256:2f29ef331735ce958efa4734873f084941970894c6090408b079c61b2e1c06d1", size = 20053, upload-time = "2024-07-29T01:09:00.465Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/5d/85/9ebeae2f76e9e77b952f4b274c27238156eae7979c5421fba91a28f4970d/sphinxcontrib_applehelp-2.0.0-py3-none-any.whl", hash = "sha256:4cd3f0ec4ac5dd9c17ec65e9ab272c9b867ea77425228e68ecf08d6b28ddbdb5", size = 119300 }, + { url = "https://files.pythonhosted.org/packages/5d/85/9ebeae2f76e9e77b952f4b274c27238156eae7979c5421fba91a28f4970d/sphinxcontrib_applehelp-2.0.0-py3-none-any.whl", hash = "sha256:4cd3f0ec4ac5dd9c17ec65e9ab272c9b867ea77425228e68ecf08d6b28ddbdb5", size = 119300, upload-time = "2024-07-29T01:08:58.99Z" }, ] [[package]] @@ -568,27 +576,27 @@ dependencies = [ { name = "sphinx", version = "8.1.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, { name = "sphinx", version = "8.2.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/c1/ce/054a8ec04063f9a27772fea7188f796edbfa382e656d3b76428323861f0e/sphinxcontrib_bibtex-2.6.3.tar.gz", hash = "sha256:7c790347ef1cb0edf30de55fc324d9782d085e89c52c2b8faafa082e08e23946", size = 117177 } +sdist = { url = "https://files.pythonhosted.org/packages/c1/ce/054a8ec04063f9a27772fea7188f796edbfa382e656d3b76428323861f0e/sphinxcontrib_bibtex-2.6.3.tar.gz", hash = "sha256:7c790347ef1cb0edf30de55fc324d9782d085e89c52c2b8faafa082e08e23946", size = 117177, upload-time = "2024-09-12T14:23:44.662Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/8e/49/c23f9493c0a5d5881fb7ed3002e87708454fef860aa96a48e755d27bf6f0/sphinxcontrib_bibtex-2.6.3-py3-none-any.whl", hash = "sha256:ff016b738fcc867df0f75c29e139b3b2158d26a2c802db27963cb128be3b75fb", size = 40340 }, + { url = "https://files.pythonhosted.org/packages/8e/49/c23f9493c0a5d5881fb7ed3002e87708454fef860aa96a48e755d27bf6f0/sphinxcontrib_bibtex-2.6.3-py3-none-any.whl", hash = "sha256:ff016b738fcc867df0f75c29e139b3b2158d26a2c802db27963cb128be3b75fb", size = 40340, upload-time = "2024-09-12T14:23:43.593Z" }, ] [[package]] name = "sphinxcontrib-devhelp" version = "2.0.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f6/d2/5beee64d3e4e747f316bae86b55943f51e82bb86ecd325883ef65741e7da/sphinxcontrib_devhelp-2.0.0.tar.gz", hash = "sha256:411f5d96d445d1d73bb5d52133377b4248ec79db5c793ce7dbe59e074b4dd1ad", size = 12967 } +sdist = { url = "https://files.pythonhosted.org/packages/f6/d2/5beee64d3e4e747f316bae86b55943f51e82bb86ecd325883ef65741e7da/sphinxcontrib_devhelp-2.0.0.tar.gz", hash = "sha256:411f5d96d445d1d73bb5d52133377b4248ec79db5c793ce7dbe59e074b4dd1ad", size = 12967, upload-time = "2024-07-29T01:09:23.417Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/35/7a/987e583882f985fe4d7323774889ec58049171828b58c2217e7f79cdf44e/sphinxcontrib_devhelp-2.0.0-py3-none-any.whl", hash = "sha256:aefb8b83854e4b0998877524d1029fd3e6879210422ee3780459e28a1f03a8a2", size = 82530 }, + { url = "https://files.pythonhosted.org/packages/35/7a/987e583882f985fe4d7323774889ec58049171828b58c2217e7f79cdf44e/sphinxcontrib_devhelp-2.0.0-py3-none-any.whl", hash = "sha256:aefb8b83854e4b0998877524d1029fd3e6879210422ee3780459e28a1f03a8a2", size = 82530, upload-time = "2024-07-29T01:09:21.945Z" }, ] [[package]] name = "sphinxcontrib-htmlhelp" version = "2.1.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/43/93/983afd9aa001e5201eab16b5a444ed5b9b0a7a010541e0ddfbbfd0b2470c/sphinxcontrib_htmlhelp-2.1.0.tar.gz", hash = "sha256:c9e2916ace8aad64cc13a0d233ee22317f2b9025b9cf3295249fa985cc7082e9", size = 22617 } +sdist = { url = "https://files.pythonhosted.org/packages/43/93/983afd9aa001e5201eab16b5a444ed5b9b0a7a010541e0ddfbbfd0b2470c/sphinxcontrib_htmlhelp-2.1.0.tar.gz", hash = "sha256:c9e2916ace8aad64cc13a0d233ee22317f2b9025b9cf3295249fa985cc7082e9", size = 22617, upload-time = "2024-07-29T01:09:37.889Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/0a/7b/18a8c0bcec9182c05a0b3ec2a776bba4ead82750a55ff798e8d406dae604/sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl", hash = "sha256:166759820b47002d22914d64a075ce08f4c46818e17cfc9470a9786b759b19f8", size = 98705 }, + { url = "https://files.pythonhosted.org/packages/0a/7b/18a8c0bcec9182c05a0b3ec2a776bba4ead82750a55ff798e8d406dae604/sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl", hash = "sha256:166759820b47002d22914d64a075ce08f4c46818e17cfc9470a9786b759b19f8", size = 98705, upload-time = "2024-07-29T01:09:36.407Z" }, ] [[package]] @@ -599,91 +607,91 @@ dependencies = [ { name = "sphinx", version = "8.1.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, { name = "sphinx", version = "8.2.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/de/f3/aa67467e051df70a6330fe7770894b3e4f09436dea6881ae0b4f3d87cad8/sphinxcontrib-jquery-4.1.tar.gz", hash = "sha256:1620739f04e36a2c779f1a131a2dfd49b2fd07351bf1968ced074365933abc7a", size = 122331 } +sdist = { url = "https://files.pythonhosted.org/packages/de/f3/aa67467e051df70a6330fe7770894b3e4f09436dea6881ae0b4f3d87cad8/sphinxcontrib-jquery-4.1.tar.gz", hash = "sha256:1620739f04e36a2c779f1a131a2dfd49b2fd07351bf1968ced074365933abc7a", size = 122331, upload-time = "2023-03-14T15:01:01.944Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/76/85/749bd22d1a68db7291c89e2ebca53f4306c3f205853cf31e9de279034c3c/sphinxcontrib_jquery-4.1-py2.py3-none-any.whl", hash = "sha256:f936030d7d0147dd026a4f2b5a57343d233f1fc7b363f68b3d4f1cb0993878ae", size = 121104 }, + { url = "https://files.pythonhosted.org/packages/76/85/749bd22d1a68db7291c89e2ebca53f4306c3f205853cf31e9de279034c3c/sphinxcontrib_jquery-4.1-py2.py3-none-any.whl", hash = "sha256:f936030d7d0147dd026a4f2b5a57343d233f1fc7b363f68b3d4f1cb0993878ae", size = 121104, upload-time = "2023-03-14T15:01:00.356Z" }, ] [[package]] name = "sphinxcontrib-jsmath" version = "1.0.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/b2/e8/9ed3830aeed71f17c026a07a5097edcf44b692850ef215b161b8ad875729/sphinxcontrib-jsmath-1.0.1.tar.gz", hash = "sha256:a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8", size = 5787 } +sdist = { url = "https://files.pythonhosted.org/packages/b2/e8/9ed3830aeed71f17c026a07a5097edcf44b692850ef215b161b8ad875729/sphinxcontrib-jsmath-1.0.1.tar.gz", hash = "sha256:a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8", size = 5787, upload-time = "2019-01-21T16:10:16.347Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/c2/42/4c8646762ee83602e3fb3fbe774c2fac12f317deb0b5dbeeedd2d3ba4b77/sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl", hash = "sha256:2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178", size = 5071 }, + { url = "https://files.pythonhosted.org/packages/c2/42/4c8646762ee83602e3fb3fbe774c2fac12f317deb0b5dbeeedd2d3ba4b77/sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl", hash = "sha256:2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178", size = 5071, upload-time = "2019-01-21T16:10:14.333Z" }, ] [[package]] name = "sphinxcontrib-qthelp" version = "2.0.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/68/bc/9104308fc285eb3e0b31b67688235db556cd5b0ef31d96f30e45f2e51cae/sphinxcontrib_qthelp-2.0.0.tar.gz", hash = "sha256:4fe7d0ac8fc171045be623aba3e2a8f613f8682731f9153bb2e40ece16b9bbab", size = 17165 } +sdist = { url = "https://files.pythonhosted.org/packages/68/bc/9104308fc285eb3e0b31b67688235db556cd5b0ef31d96f30e45f2e51cae/sphinxcontrib_qthelp-2.0.0.tar.gz", hash = "sha256:4fe7d0ac8fc171045be623aba3e2a8f613f8682731f9153bb2e40ece16b9bbab", size = 17165, upload-time = "2024-07-29T01:09:56.435Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/27/83/859ecdd180cacc13b1f7e857abf8582a64552ea7a061057a6c716e790fce/sphinxcontrib_qthelp-2.0.0-py3-none-any.whl", hash = "sha256:b18a828cdba941ccd6ee8445dbe72ffa3ef8cbe7505d8cd1fa0d42d3f2d5f3eb", size = 88743 }, + { url = "https://files.pythonhosted.org/packages/27/83/859ecdd180cacc13b1f7e857abf8582a64552ea7a061057a6c716e790fce/sphinxcontrib_qthelp-2.0.0-py3-none-any.whl", hash = "sha256:b18a828cdba941ccd6ee8445dbe72ffa3ef8cbe7505d8cd1fa0d42d3f2d5f3eb", size = 88743, upload-time = "2024-07-29T01:09:54.885Z" }, ] [[package]] name = "sphinxcontrib-serializinghtml" version = "2.0.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/3b/44/6716b257b0aa6bfd51a1b31665d1c205fb12cb5ad56de752dfa15657de2f/sphinxcontrib_serializinghtml-2.0.0.tar.gz", hash = "sha256:e9d912827f872c029017a53f0ef2180b327c3f7fd23c87229f7a8e8b70031d4d", size = 16080 } +sdist = { url = "https://files.pythonhosted.org/packages/3b/44/6716b257b0aa6bfd51a1b31665d1c205fb12cb5ad56de752dfa15657de2f/sphinxcontrib_serializinghtml-2.0.0.tar.gz", hash = "sha256:e9d912827f872c029017a53f0ef2180b327c3f7fd23c87229f7a8e8b70031d4d", size = 16080, upload-time = "2024-07-29T01:10:09.332Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/52/a7/d2782e4e3f77c8450f727ba74a8f12756d5ba823d81b941f1b04da9d033a/sphinxcontrib_serializinghtml-2.0.0-py3-none-any.whl", hash = "sha256:6e2cb0eef194e10c27ec0023bfeb25badbbb5868244cf5bc5bdc04e4464bf331", size = 92072 }, + { url = "https://files.pythonhosted.org/packages/52/a7/d2782e4e3f77c8450f727ba74a8f12756d5ba823d81b941f1b04da9d033a/sphinxcontrib_serializinghtml-2.0.0-py3-none-any.whl", hash = "sha256:6e2cb0eef194e10c27ec0023bfeb25badbbb5868244cf5bc5bdc04e4464bf331", size = 92072, upload-time = "2024-07-29T01:10:08.203Z" }, ] [[package]] name = "tomli" version = "2.2.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/18/87/302344fed471e44a87289cf4967697d07e532f2421fdaf868a303cbae4ff/tomli-2.2.1.tar.gz", hash = "sha256:cd45e1dc79c835ce60f7404ec8119f2eb06d38b1deba146f07ced3bbc44505ff", size = 17175 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/43/ca/75707e6efa2b37c77dadb324ae7d9571cb424e61ea73fad7c56c2d14527f/tomli-2.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:678e4fa69e4575eb77d103de3df8a895e1591b48e740211bd1067378c69e8249", size = 131077 }, - { url = "https://files.pythonhosted.org/packages/c7/16/51ae563a8615d472fdbffc43a3f3d46588c264ac4f024f63f01283becfbb/tomli-2.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:023aa114dd824ade0100497eb2318602af309e5a55595f76b626d6d9f3b7b0a6", size = 123429 }, - { url = "https://files.pythonhosted.org/packages/f1/dd/4f6cd1e7b160041db83c694abc78e100473c15d54620083dbd5aae7b990e/tomli-2.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ece47d672db52ac607a3d9599a9d48dcb2f2f735c6c2d1f34130085bb12b112a", size = 226067 }, - { url = "https://files.pythonhosted.org/packages/a9/6b/c54ede5dc70d648cc6361eaf429304b02f2871a345bbdd51e993d6cdf550/tomli-2.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6972ca9c9cc9f0acaa56a8ca1ff51e7af152a9f87fb64623e31d5c83700080ee", size = 236030 }, - { url = "https://files.pythonhosted.org/packages/1f/47/999514fa49cfaf7a92c805a86c3c43f4215621855d151b61c602abb38091/tomli-2.2.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c954d2250168d28797dd4e3ac5cf812a406cd5a92674ee4c8f123c889786aa8e", size = 240898 }, - { url = "https://files.pythonhosted.org/packages/73/41/0a01279a7ae09ee1573b423318e7934674ce06eb33f50936655071d81a24/tomli-2.2.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8dd28b3e155b80f4d54beb40a441d366adcfe740969820caf156c019fb5c7ec4", size = 229894 }, - { url = "https://files.pythonhosted.org/packages/55/18/5d8bc5b0a0362311ce4d18830a5d28943667599a60d20118074ea1b01bb7/tomli-2.2.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:e59e304978767a54663af13c07b3d1af22ddee3bb2fb0618ca1593e4f593a106", size = 245319 }, - { url = "https://files.pythonhosted.org/packages/92/a3/7ade0576d17f3cdf5ff44d61390d4b3febb8a9fc2b480c75c47ea048c646/tomli-2.2.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:33580bccab0338d00994d7f16f4c4ec25b776af3ffaac1ed74e0b3fc95e885a8", size = 238273 }, - { url = "https://files.pythonhosted.org/packages/72/6f/fa64ef058ac1446a1e51110c375339b3ec6be245af9d14c87c4a6412dd32/tomli-2.2.1-cp311-cp311-win32.whl", hash = "sha256:465af0e0875402f1d226519c9904f37254b3045fc5084697cefb9bdde1ff99ff", size = 98310 }, - { url = "https://files.pythonhosted.org/packages/6a/1c/4a2dcde4a51b81be3530565e92eda625d94dafb46dbeb15069df4caffc34/tomli-2.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:2d0f2fdd22b02c6d81637a3c95f8cd77f995846af7414c5c4b8d0545afa1bc4b", size = 108309 }, - { url = "https://files.pythonhosted.org/packages/52/e1/f8af4c2fcde17500422858155aeb0d7e93477a0d59a98e56cbfe75070fd0/tomli-2.2.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:4a8f6e44de52d5e6c657c9fe83b562f5f4256d8ebbfe4ff922c495620a7f6cea", size = 132762 }, - { url = "https://files.pythonhosted.org/packages/03/b8/152c68bb84fc00396b83e7bbddd5ec0bd3dd409db4195e2a9b3e398ad2e3/tomli-2.2.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8d57ca8095a641b8237d5b079147646153d22552f1c637fd3ba7f4b0b29167a8", size = 123453 }, - { url = "https://files.pythonhosted.org/packages/c8/d6/fc9267af9166f79ac528ff7e8c55c8181ded34eb4b0e93daa767b8841573/tomli-2.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e340144ad7ae1533cb897d406382b4b6fede8890a03738ff1683af800d54192", size = 233486 }, - { url = "https://files.pythonhosted.org/packages/5c/51/51c3f2884d7bab89af25f678447ea7d297b53b5a3b5730a7cb2ef6069f07/tomli-2.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db2b95f9de79181805df90bedc5a5ab4c165e6ec3fe99f970d0e302f384ad222", size = 242349 }, - { url = "https://files.pythonhosted.org/packages/ab/df/bfa89627d13a5cc22402e441e8a931ef2108403db390ff3345c05253935e/tomli-2.2.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:40741994320b232529c802f8bc86da4e1aa9f413db394617b9a256ae0f9a7f77", size = 252159 }, - { url = "https://files.pythonhosted.org/packages/9e/6e/fa2b916dced65763a5168c6ccb91066f7639bdc88b48adda990db10c8c0b/tomli-2.2.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:400e720fe168c0f8521520190686ef8ef033fb19fc493da09779e592861b78c6", size = 237243 }, - { url = "https://files.pythonhosted.org/packages/b4/04/885d3b1f650e1153cbb93a6a9782c58a972b94ea4483ae4ac5cedd5e4a09/tomli-2.2.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:02abe224de6ae62c19f090f68da4e27b10af2b93213d36cf44e6e1c5abd19fdd", size = 259645 }, - { url = "https://files.pythonhosted.org/packages/9c/de/6b432d66e986e501586da298e28ebeefd3edc2c780f3ad73d22566034239/tomli-2.2.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b82ebccc8c8a36f2094e969560a1b836758481f3dc360ce9a3277c65f374285e", size = 244584 }, - { url = "https://files.pythonhosted.org/packages/1c/9a/47c0449b98e6e7d1be6cbac02f93dd79003234ddc4aaab6ba07a9a7482e2/tomli-2.2.1-cp312-cp312-win32.whl", hash = "sha256:889f80ef92701b9dbb224e49ec87c645ce5df3fa2cc548664eb8a25e03127a98", size = 98875 }, - { url = "https://files.pythonhosted.org/packages/ef/60/9b9638f081c6f1261e2688bd487625cd1e660d0a85bd469e91d8db969734/tomli-2.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:7fc04e92e1d624a4a63c76474610238576942d6b8950a2d7f908a340494e67e4", size = 109418 }, - { url = "https://files.pythonhosted.org/packages/04/90/2ee5f2e0362cb8a0b6499dc44f4d7d48f8fff06d28ba46e6f1eaa61a1388/tomli-2.2.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f4039b9cbc3048b2416cc57ab3bda989a6fcf9b36cf8937f01a6e731b64f80d7", size = 132708 }, - { url = "https://files.pythonhosted.org/packages/c0/ec/46b4108816de6b385141f082ba99e315501ccd0a2ea23db4a100dd3990ea/tomli-2.2.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:286f0ca2ffeeb5b9bd4fcc8d6c330534323ec51b2f52da063b11c502da16f30c", size = 123582 }, - { url = "https://files.pythonhosted.org/packages/a0/bd/b470466d0137b37b68d24556c38a0cc819e8febe392d5b199dcd7f578365/tomli-2.2.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a92ef1a44547e894e2a17d24e7557a5e85a9e1d0048b0b5e7541f76c5032cb13", size = 232543 }, - { url = "https://files.pythonhosted.org/packages/d9/e5/82e80ff3b751373f7cead2815bcbe2d51c895b3c990686741a8e56ec42ab/tomli-2.2.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9316dc65bed1684c9a98ee68759ceaed29d229e985297003e494aa825ebb0281", size = 241691 }, - { url = "https://files.pythonhosted.org/packages/05/7e/2a110bc2713557d6a1bfb06af23dd01e7dde52b6ee7dadc589868f9abfac/tomli-2.2.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e85e99945e688e32d5a35c1ff38ed0b3f41f43fad8df0bdf79f72b2ba7bc5272", size = 251170 }, - { url = "https://files.pythonhosted.org/packages/64/7b/22d713946efe00e0adbcdfd6d1aa119ae03fd0b60ebed51ebb3fa9f5a2e5/tomli-2.2.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ac065718db92ca818f8d6141b5f66369833d4a80a9d74435a268c52bdfa73140", size = 236530 }, - { url = "https://files.pythonhosted.org/packages/38/31/3a76f67da4b0cf37b742ca76beaf819dca0ebef26d78fc794a576e08accf/tomli-2.2.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:d920f33822747519673ee656a4b6ac33e382eca9d331c87770faa3eef562aeb2", size = 258666 }, - { url = "https://files.pythonhosted.org/packages/07/10/5af1293da642aded87e8a988753945d0cf7e00a9452d3911dd3bb354c9e2/tomli-2.2.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a198f10c4d1b1375d7687bc25294306e551bf1abfa4eace6650070a5c1ae2744", size = 243954 }, - { url = "https://files.pythonhosted.org/packages/5b/b9/1ed31d167be802da0fc95020d04cd27b7d7065cc6fbefdd2f9186f60d7bd/tomli-2.2.1-cp313-cp313-win32.whl", hash = "sha256:d3f5614314d758649ab2ab3a62d4f2004c825922f9e370b29416484086b264ec", size = 98724 }, - { url = "https://files.pythonhosted.org/packages/c7/32/b0963458706accd9afcfeb867c0f9175a741bf7b19cd424230714d722198/tomli-2.2.1-cp313-cp313-win_amd64.whl", hash = "sha256:a38aa0308e754b0e3c67e344754dff64999ff9b513e691d0e786265c93583c69", size = 109383 }, - { url = "https://files.pythonhosted.org/packages/6e/c2/61d3e0f47e2b74ef40a68b9e6ad5984f6241a942f7cd3bbfbdbd03861ea9/tomli-2.2.1-py3-none-any.whl", hash = "sha256:cb55c73c5f4408779d0cf3eef9f762b9c9f147a77de7b258bef0a5628adc85cc", size = 14257 }, +sdist = { url = "https://files.pythonhosted.org/packages/18/87/302344fed471e44a87289cf4967697d07e532f2421fdaf868a303cbae4ff/tomli-2.2.1.tar.gz", hash = "sha256:cd45e1dc79c835ce60f7404ec8119f2eb06d38b1deba146f07ced3bbc44505ff", size = 17175, upload-time = "2024-11-27T22:38:36.873Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/43/ca/75707e6efa2b37c77dadb324ae7d9571cb424e61ea73fad7c56c2d14527f/tomli-2.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:678e4fa69e4575eb77d103de3df8a895e1591b48e740211bd1067378c69e8249", size = 131077, upload-time = "2024-11-27T22:37:54.956Z" }, + { url = "https://files.pythonhosted.org/packages/c7/16/51ae563a8615d472fdbffc43a3f3d46588c264ac4f024f63f01283becfbb/tomli-2.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:023aa114dd824ade0100497eb2318602af309e5a55595f76b626d6d9f3b7b0a6", size = 123429, upload-time = "2024-11-27T22:37:56.698Z" }, + { url = "https://files.pythonhosted.org/packages/f1/dd/4f6cd1e7b160041db83c694abc78e100473c15d54620083dbd5aae7b990e/tomli-2.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ece47d672db52ac607a3d9599a9d48dcb2f2f735c6c2d1f34130085bb12b112a", size = 226067, upload-time = "2024-11-27T22:37:57.63Z" }, + { url = "https://files.pythonhosted.org/packages/a9/6b/c54ede5dc70d648cc6361eaf429304b02f2871a345bbdd51e993d6cdf550/tomli-2.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6972ca9c9cc9f0acaa56a8ca1ff51e7af152a9f87fb64623e31d5c83700080ee", size = 236030, upload-time = "2024-11-27T22:37:59.344Z" }, + { url = "https://files.pythonhosted.org/packages/1f/47/999514fa49cfaf7a92c805a86c3c43f4215621855d151b61c602abb38091/tomli-2.2.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c954d2250168d28797dd4e3ac5cf812a406cd5a92674ee4c8f123c889786aa8e", size = 240898, upload-time = "2024-11-27T22:38:00.429Z" }, + { url = "https://files.pythonhosted.org/packages/73/41/0a01279a7ae09ee1573b423318e7934674ce06eb33f50936655071d81a24/tomli-2.2.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8dd28b3e155b80f4d54beb40a441d366adcfe740969820caf156c019fb5c7ec4", size = 229894, upload-time = "2024-11-27T22:38:02.094Z" }, + { url = "https://files.pythonhosted.org/packages/55/18/5d8bc5b0a0362311ce4d18830a5d28943667599a60d20118074ea1b01bb7/tomli-2.2.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:e59e304978767a54663af13c07b3d1af22ddee3bb2fb0618ca1593e4f593a106", size = 245319, upload-time = "2024-11-27T22:38:03.206Z" }, + { url = "https://files.pythonhosted.org/packages/92/a3/7ade0576d17f3cdf5ff44d61390d4b3febb8a9fc2b480c75c47ea048c646/tomli-2.2.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:33580bccab0338d00994d7f16f4c4ec25b776af3ffaac1ed74e0b3fc95e885a8", size = 238273, upload-time = "2024-11-27T22:38:04.217Z" }, + { url = "https://files.pythonhosted.org/packages/72/6f/fa64ef058ac1446a1e51110c375339b3ec6be245af9d14c87c4a6412dd32/tomli-2.2.1-cp311-cp311-win32.whl", hash = "sha256:465af0e0875402f1d226519c9904f37254b3045fc5084697cefb9bdde1ff99ff", size = 98310, upload-time = "2024-11-27T22:38:05.908Z" }, + { url = "https://files.pythonhosted.org/packages/6a/1c/4a2dcde4a51b81be3530565e92eda625d94dafb46dbeb15069df4caffc34/tomli-2.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:2d0f2fdd22b02c6d81637a3c95f8cd77f995846af7414c5c4b8d0545afa1bc4b", size = 108309, upload-time = "2024-11-27T22:38:06.812Z" }, + { url = "https://files.pythonhosted.org/packages/52/e1/f8af4c2fcde17500422858155aeb0d7e93477a0d59a98e56cbfe75070fd0/tomli-2.2.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:4a8f6e44de52d5e6c657c9fe83b562f5f4256d8ebbfe4ff922c495620a7f6cea", size = 132762, upload-time = "2024-11-27T22:38:07.731Z" }, + { url = "https://files.pythonhosted.org/packages/03/b8/152c68bb84fc00396b83e7bbddd5ec0bd3dd409db4195e2a9b3e398ad2e3/tomli-2.2.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8d57ca8095a641b8237d5b079147646153d22552f1c637fd3ba7f4b0b29167a8", size = 123453, upload-time = "2024-11-27T22:38:09.384Z" }, + { url = "https://files.pythonhosted.org/packages/c8/d6/fc9267af9166f79ac528ff7e8c55c8181ded34eb4b0e93daa767b8841573/tomli-2.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e340144ad7ae1533cb897d406382b4b6fede8890a03738ff1683af800d54192", size = 233486, upload-time = "2024-11-27T22:38:10.329Z" }, + { url = "https://files.pythonhosted.org/packages/5c/51/51c3f2884d7bab89af25f678447ea7d297b53b5a3b5730a7cb2ef6069f07/tomli-2.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db2b95f9de79181805df90bedc5a5ab4c165e6ec3fe99f970d0e302f384ad222", size = 242349, upload-time = "2024-11-27T22:38:11.443Z" }, + { url = "https://files.pythonhosted.org/packages/ab/df/bfa89627d13a5cc22402e441e8a931ef2108403db390ff3345c05253935e/tomli-2.2.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:40741994320b232529c802f8bc86da4e1aa9f413db394617b9a256ae0f9a7f77", size = 252159, upload-time = "2024-11-27T22:38:13.099Z" }, + { url = "https://files.pythonhosted.org/packages/9e/6e/fa2b916dced65763a5168c6ccb91066f7639bdc88b48adda990db10c8c0b/tomli-2.2.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:400e720fe168c0f8521520190686ef8ef033fb19fc493da09779e592861b78c6", size = 237243, upload-time = "2024-11-27T22:38:14.766Z" }, + { url = "https://files.pythonhosted.org/packages/b4/04/885d3b1f650e1153cbb93a6a9782c58a972b94ea4483ae4ac5cedd5e4a09/tomli-2.2.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:02abe224de6ae62c19f090f68da4e27b10af2b93213d36cf44e6e1c5abd19fdd", size = 259645, upload-time = "2024-11-27T22:38:15.843Z" }, + { url = "https://files.pythonhosted.org/packages/9c/de/6b432d66e986e501586da298e28ebeefd3edc2c780f3ad73d22566034239/tomli-2.2.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b82ebccc8c8a36f2094e969560a1b836758481f3dc360ce9a3277c65f374285e", size = 244584, upload-time = "2024-11-27T22:38:17.645Z" }, + { url = "https://files.pythonhosted.org/packages/1c/9a/47c0449b98e6e7d1be6cbac02f93dd79003234ddc4aaab6ba07a9a7482e2/tomli-2.2.1-cp312-cp312-win32.whl", hash = "sha256:889f80ef92701b9dbb224e49ec87c645ce5df3fa2cc548664eb8a25e03127a98", size = 98875, upload-time = "2024-11-27T22:38:19.159Z" }, + { url = "https://files.pythonhosted.org/packages/ef/60/9b9638f081c6f1261e2688bd487625cd1e660d0a85bd469e91d8db969734/tomli-2.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:7fc04e92e1d624a4a63c76474610238576942d6b8950a2d7f908a340494e67e4", size = 109418, upload-time = "2024-11-27T22:38:20.064Z" }, + { url = "https://files.pythonhosted.org/packages/04/90/2ee5f2e0362cb8a0b6499dc44f4d7d48f8fff06d28ba46e6f1eaa61a1388/tomli-2.2.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f4039b9cbc3048b2416cc57ab3bda989a6fcf9b36cf8937f01a6e731b64f80d7", size = 132708, upload-time = "2024-11-27T22:38:21.659Z" }, + { url = "https://files.pythonhosted.org/packages/c0/ec/46b4108816de6b385141f082ba99e315501ccd0a2ea23db4a100dd3990ea/tomli-2.2.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:286f0ca2ffeeb5b9bd4fcc8d6c330534323ec51b2f52da063b11c502da16f30c", size = 123582, upload-time = "2024-11-27T22:38:22.693Z" }, + { url = "https://files.pythonhosted.org/packages/a0/bd/b470466d0137b37b68d24556c38a0cc819e8febe392d5b199dcd7f578365/tomli-2.2.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a92ef1a44547e894e2a17d24e7557a5e85a9e1d0048b0b5e7541f76c5032cb13", size = 232543, upload-time = "2024-11-27T22:38:24.367Z" }, + { url = "https://files.pythonhosted.org/packages/d9/e5/82e80ff3b751373f7cead2815bcbe2d51c895b3c990686741a8e56ec42ab/tomli-2.2.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9316dc65bed1684c9a98ee68759ceaed29d229e985297003e494aa825ebb0281", size = 241691, upload-time = "2024-11-27T22:38:26.081Z" }, + { url = "https://files.pythonhosted.org/packages/05/7e/2a110bc2713557d6a1bfb06af23dd01e7dde52b6ee7dadc589868f9abfac/tomli-2.2.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e85e99945e688e32d5a35c1ff38ed0b3f41f43fad8df0bdf79f72b2ba7bc5272", size = 251170, upload-time = "2024-11-27T22:38:27.921Z" }, + { url = "https://files.pythonhosted.org/packages/64/7b/22d713946efe00e0adbcdfd6d1aa119ae03fd0b60ebed51ebb3fa9f5a2e5/tomli-2.2.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ac065718db92ca818f8d6141b5f66369833d4a80a9d74435a268c52bdfa73140", size = 236530, upload-time = "2024-11-27T22:38:29.591Z" }, + { url = "https://files.pythonhosted.org/packages/38/31/3a76f67da4b0cf37b742ca76beaf819dca0ebef26d78fc794a576e08accf/tomli-2.2.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:d920f33822747519673ee656a4b6ac33e382eca9d331c87770faa3eef562aeb2", size = 258666, upload-time = "2024-11-27T22:38:30.639Z" }, + { url = "https://files.pythonhosted.org/packages/07/10/5af1293da642aded87e8a988753945d0cf7e00a9452d3911dd3bb354c9e2/tomli-2.2.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a198f10c4d1b1375d7687bc25294306e551bf1abfa4eace6650070a5c1ae2744", size = 243954, upload-time = "2024-11-27T22:38:31.702Z" }, + { url = "https://files.pythonhosted.org/packages/5b/b9/1ed31d167be802da0fc95020d04cd27b7d7065cc6fbefdd2f9186f60d7bd/tomli-2.2.1-cp313-cp313-win32.whl", hash = "sha256:d3f5614314d758649ab2ab3a62d4f2004c825922f9e370b29416484086b264ec", size = 98724, upload-time = "2024-11-27T22:38:32.837Z" }, + { url = "https://files.pythonhosted.org/packages/c7/32/b0963458706accd9afcfeb867c0f9175a741bf7b19cd424230714d722198/tomli-2.2.1-cp313-cp313-win_amd64.whl", hash = "sha256:a38aa0308e754b0e3c67e344754dff64999ff9b513e691d0e786265c93583c69", size = 109383, upload-time = "2024-11-27T22:38:34.455Z" }, + { url = "https://files.pythonhosted.org/packages/6e/c2/61d3e0f47e2b74ef40a68b9e6ad5984f6241a942f7cd3bbfbdbd03861ea9/tomli-2.2.1-py3-none-any.whl", hash = "sha256:cb55c73c5f4408779d0cf3eef9f762b9c9f147a77de7b258bef0a5628adc85cc", size = 14257, upload-time = "2024-11-27T22:38:35.385Z" }, ] [[package]] name = "typing-extensions" version = "4.12.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/df/db/f35a00659bc03fec321ba8bce9420de607a1d37f8342eee1863174c69557/typing_extensions-4.12.2.tar.gz", hash = "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8", size = 85321 } +sdist = { url = "https://files.pythonhosted.org/packages/df/db/f35a00659bc03fec321ba8bce9420de607a1d37f8342eee1863174c69557/typing_extensions-4.12.2.tar.gz", hash = "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8", size = 85321, upload-time = "2024-06-07T18:52:15.995Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/26/9f/ad63fc0248c5379346306f8668cda6e2e2e9c95e01216d2b8ffd9ff037d0/typing_extensions-4.12.2-py3-none-any.whl", hash = "sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d", size = 37438 }, + { url = "https://files.pythonhosted.org/packages/26/9f/ad63fc0248c5379346306f8668cda6e2e2e9c95e01216d2b8ffd9ff037d0/typing_extensions-4.12.2-py3-none-any.whl", hash = "sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d", size = 37438, upload-time = "2024-06-07T18:52:13.582Z" }, ] [[package]] name = "urllib3" version = "2.3.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/aa/63/e53da845320b757bf29ef6a9062f5c669fe997973f966045cb019c3f4b66/urllib3-2.3.0.tar.gz", hash = "sha256:f8c5449b3cf0861679ce7e0503c7b44b5ec981bec0d1d3795a07f1ba96f0204d", size = 307268 } +sdist = { url = "https://files.pythonhosted.org/packages/aa/63/e53da845320b757bf29ef6a9062f5c669fe997973f966045cb019c3f4b66/urllib3-2.3.0.tar.gz", hash = "sha256:f8c5449b3cf0861679ce7e0503c7b44b5ec981bec0d1d3795a07f1ba96f0204d", size = 307268, upload-time = "2024-12-22T07:47:30.032Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/c8/19/4ec628951a74043532ca2cf5d97b7b14863931476d117c471e8e2b1eb39f/urllib3-2.3.0-py3-none-any.whl", hash = "sha256:1cee9ad369867bfdbbb48b7dd50374c0967a0bb7710050facf0dd6911440e3df", size = 128369 }, + { url = "https://files.pythonhosted.org/packages/c8/19/4ec628951a74043532ca2cf5d97b7b14863931476d117c471e8e2b1eb39f/urllib3-2.3.0-py3-none-any.whl", hash = "sha256:1cee9ad369867bfdbbb48b7dd50374c0967a0bb7710050facf0dd6911440e3df", size = 128369, upload-time = "2024-12-22T07:47:28.074Z" }, ] diff --git a/example/DMRG/dmrg_two_sites_U1.py b/example/DMRG/dmrg_two_sites_U1.py index 2a4e5fbc1..66d5df4cb 100644 --- a/example/DMRG/dmrg_two_sites_U1.py +++ b/example/DMRG/dmrg_two_sites_U1.py @@ -48,28 +48,28 @@ def optimize_psi(psi, functArgs, maxit=2, krydim=4): bd_inner = cytnx.Bond(cytnx.BD_KET,[[0],[-2],[2],[0]],[1,1,1,1]) bd_phys = cytnx.Bond(cytnx.BD_KET,[[1],[-1]],[1,1]) - M = cytnx.UniTensor([bd_inner,bd_inner.redirect(),bd_phys, bd_phys.redirect()],rowrank=2) + M = cytnx.UniTensor([bd_inner,bd_inner.redirect(),bd_phys, bd_phys.redirect()]).set_rowrank_(2) # I - M.set_elem([0,0,0,0],1); - M.set_elem([0,0,1,1],1); - M.set_elem([3,3,0,0],1); - M.set_elem([3,3,1,1],1); + M.set_elem([0,0,0,0],1) + M.set_elem([0,0,1,1],1) + M.set_elem([3,3,0,0],1) + M.set_elem([3,3,1,1],1) # S- - M.set_elem([0,1,1,0],2**0.5); + M.set_elem([0,1,1,0],2**0.5) # S+ - M.set_elem([0,2,0,1],2**0.5); + M.set_elem([0,2,0,1],2**0.5) # S+ - M.set_elem([1,3,0,1],2**0.5); + M.set_elem([1,3,0,1],2**0.5) # S- - M.set_elem([2,3,1,0],2**0.5); + M.set_elem([2,3,1,0],2**0.5) q = 0 # conserving glb Qn VbdL = cytnx.Bond(cytnx.BD_KET,[[0]],[1]) VbdR = cytnx.Bond(cytnx.BD_KET,[[q]],[1]) - L0 = cytnx.UniTensor([bd_inner.redirect(),VbdL.redirect(),VbdL],rowrank=1) #Left boundary - R0 = cytnx.UniTensor([bd_inner,VbdR,VbdR.redirect()],rowrank=1) #Right boundary + L0 = cytnx.UniTensor([bd_inner.redirect(),VbdL.redirect(),VbdL]).set_rowrank_(1) #Left boundary + R0 = cytnx.UniTensor([bd_inner,VbdR,VbdR.redirect()]).set_rowrank_(1) #Right boundary L0.set_elem([0,0,0],1) R0.set_elem([3,0,0],1) @@ -81,13 +81,14 @@ def optimize_psi(psi, functArgs, maxit=2, krydim=4): cq = -1 qcntr+=cq - A[0] = cytnx.UniTensor([VbdL,bd_phys.redirect(),cytnx.Bond(cytnx.BD_BRA,[[qcntr]],[1])],rowrank=2) + A[0] = cytnx.UniTensor([VbdL,bd_phys.redirect(),cytnx.Bond(cytnx.BD_BRA,[[qcntr]],[1])]).set_rowrank_(2) A[0].get_block_()[0] = 1 lbls = [] lbls.append(["0","1","2"]) # store the labels for later convinience. for k in range(1,Nsites): - B1 = A[k-1].bonds()[2].redirect(); B2 = A[k-1].bonds()[1]; + B1 = A[k-1].bonds()[2].redirect() + B2 = A[k-1].bonds()[1] if qcntr <= q: cq = 1 else: @@ -95,7 +96,7 @@ def optimize_psi(psi, functArgs, maxit=2, krydim=4): qcntr+=cq B3 = cytnx.Bond(cytnx.BD_BRA,[[qcntr]],[1]) - A[k] = cytnx.UniTensor([B1,B2,B3],rowrank=2) + A[k] = cytnx.UniTensor([B1,B2,B3]).set_rowrank_(2) lbl = [str(2*k),str(2*k+1),str(2*k+2)] A[k].set_labels(lbl) @@ -131,12 +132,12 @@ def optimize_psi(psi, functArgs, maxit=2, krydim=4): psi.set_rowrank_(2) # maintain rowrank to perform the svd s,A[p],A[p+1] = cytnx.linalg.Svd_truncate(psi,new_dim) - A[p+1].relabels_(lbls[p+1]); # set the label back to be consistent + A[p+1].relabels_(lbls[p+1]) # set the label back to be consistent s = s/s.Norm().item() # normalize s A[p] = cytnx.Contract(A[p],s) # absorb s into next neighbor - A[p].relabels_(lbls[p]); # set the label back to be consistent + A[p].relabels_(lbls[p]) # set the label back to be consistent # update LR from right to left: anet = cytnx.Network() @@ -152,7 +153,7 @@ def optimize_psi(psi, functArgs, maxit=2, krydim=4): A[0].set_rowrank_(1) _,A[0] = cytnx.linalg.Gesvd(A[0],is_U=False, is_vT=True) - A[0].relabels_(lbls[0]); #set the label back to be consistent + A[0].relabels_(lbls[0]) #set the label back to be consistent for p in range(Nsites-1): dim_l = A[p].shape()[0] @@ -165,12 +166,12 @@ def optimize_psi(psi, functArgs, maxit=2, krydim=4): psi.set_rowrank_(2) # maintain rowrank to perform the svd s,A[p],A[p+1] = cytnx.linalg.Svd_truncate(psi,new_dim) - A[p].relabels_(lbls[p]); #set the label back to be consistent + A[p].relabels_(lbls[p]) #set the label back to be consistent s = s/s.Norm().item() # normalize s A[p+1] = cytnx.Contract(s,A[p+1]) ## absorb s into next neighbor. - A[p+1].relabels_(lbls[p+1]); #set the label back to be consistent + A[p+1].relabels_(lbls[p+1]) #set the label back to be consistent # update LR from left to right: anet = cytnx.Network() @@ -186,7 +187,7 @@ def optimize_psi(psi, functArgs, maxit=2, krydim=4): A[-1].set_rowrank_(2) _,A[-1] = cytnx.linalg.Gesvd(A[-1],is_U=True,is_vT=False) ## last one. - A[-1].relabels_(lbls[-1]); #set the label back to be consistent + A[-1].relabels_(lbls[-1]) #set the label back to be consistent return Ekeep diff --git a/example/DMRG/dmrg_two_sites_dense.py b/example/DMRG/dmrg_two_sites_dense.py index 72a6775e9..f3f074e4b 100644 --- a/example/DMRG/dmrg_two_sites_dense.py +++ b/example/DMRG/dmrg_two_sites_dense.py @@ -54,20 +54,20 @@ def optimize_psi(psi, functArgs, maxit=2, krydim=4): M[0,2] = M[1,3] = 2**0.5*sm.real() M = cytnx.UniTensor(M,0) - L0 = cytnx.UniTensor(cytnx.zeros([4,1,1]), rowrank = 0) #Left boundary - R0 = cytnx.UniTensor(cytnx.zeros([4,1,1]), rowrank = 0) #Right boundary + L0 = cytnx.UniTensor.zeros([4,1,1]).set_rowrank_(0) #Left boundary + R0 = cytnx.UniTensor.zeros([4,1,1]).set_rowrank_(0) #Right boundary L0[0,0,0] = 1.; R0[3,0,0] = 1. lbls = [] # List for storing the MPS labels A = [None for i in range(Nsites)] - A[0] = cytnx.UniTensor(cytnx.random.normal([1, d, min(chi, d)], 0., 1.), rowrank = 2) + A[0] = cytnx.UniTensor.normal([1, d, min(chi, d)], 0., 1.).set_rowrank_(2) A[0].relabels_(["0","1","2"]) lbls.append(["0","1","2"]) # store the labels for later convinience. for k in range(1,Nsites): dim1 = A[k-1].shape()[2]; dim2 = d dim3 = min(min(chi, A[k-1].shape()[2] * d), d ** (Nsites - k - 1)) - A[k] = cytnx.UniTensor(cytnx.random.normal([dim1, dim2, dim3],0.,1.), rowrank = 2) + A[k] = cytnx.UniTensor.normal([dim1, dim2, dim3],0.,1.).set_rowrank_(2) lbl = [str(2*k),str(2*k+1),str(2*k+2)] A[k].relabels_(lbl) diff --git a/example/TDVP/tdvp1_dense.py b/example/TDVP/tdvp1_dense.py index 7a55e3968..95743610e 100644 --- a/example/TDVP/tdvp1_dense.py +++ b/example/TDVP/tdvp1_dense.py @@ -68,9 +68,10 @@ def time_evolve_Lan_b(psi, functArgs, delta): def get_energy(A, M): N = len(A) - L0 = cytnx.UniTensor(cytnx.zeros([5,1,1]), rowrank = 0) #Left boundary - R0 = cytnx.UniTensor(cytnx.zeros([5,1,1]), rowrank = 0) #Right boundary - L0[0,0,0] = 1.; R0[4,0,0] = 1. + L0 = cytnx.UniTensor.zeros([5,1,1]).set_rowrank_(0) #Left boundary + R0 = cytnx.UniTensor.zeros([5,1,1]).set_rowrank_(0) #Right boundary + L0[0,0,0] = 1. + R0[4,0,0] = 1. L = L0 anet = cytnx.Network() anet.FromString(["L: -2,-1,-3",\ @@ -106,9 +107,10 @@ def get_energy(A, M): M[0,3] = Jz*sz M = cytnx.UniTensor(M,0) - L0 = cytnx.UniTensor(cytnx.zeros([5,1,1]), rowrank = 0) #Left boundary - R0 = cytnx.UniTensor(cytnx.zeros([5,1,1]), rowrank = 0) #Right boundary - L0[0,0,0] = 1.; R0[4,0,0] = 1. + L0 = cytnx.UniTensor.zeros([5,1,1]).set_rowrank_(0) #Left boundary + R0 = cytnx.UniTensor.zeros([5,1,1]).set_rowrank_(0) #Right boundary + L0[0,0,0] = 1. + R0[4,0,0] = 1. lbls = [] # List for storing the MPS labels Nsites = len(A) @@ -166,7 +168,7 @@ def get_energy(A, M): psi.set_rowrank_(1) # maintain rowrank to perform the svd s,_,A[p] = cytnx.linalg.Svd_truncate(psi,new_dim) - A[p].relabels_(lbls[p]); # set the label back to be consistent + A[p].relabels_(lbls[p]) # set the label back to be consistent # update LR from right to left: anet = cytnx.Network() anet.FromString(["R: -2,-1,-3",\ @@ -193,7 +195,7 @@ def get_energy(A, M): A[0].set_rowrank_(1) _,A[0] = cytnx.linalg.Gesvd(A[0],is_U=False, is_vT=True) - A[0].relabels_(lbls[0]); #set the label back to be consistent + A[0].relabels_(lbls[0]) #set the label back to be consistent for p in range(Nsites): @@ -206,7 +208,7 @@ def get_energy(A, M): psi.set_rowrank_(2) # maintain rowrank to perform the svd s,A[p],_ = cytnx.linalg.Svd_truncate(psi,new_dim) - A[p].relabels_(lbls[p]); #set the label back to be consistent + A[p].relabels_(lbls[p]) #set the label back to be consistent # update LR from left to right: anet = cytnx.Network() anet.FromString(["L: -2,-1,-3",\ @@ -232,13 +234,13 @@ def get_energy(A, M): A[-1].set_rowrank_(2) _,A[-1] = cytnx.linalg.Gesvd(A[-1],is_U=True,is_vT=False) ## last one. - A[-1].relabels_(lbls[-1]); #set the label back to be consistent + A[-1].relabels_(lbls[-1]) #set the label back to be consistent As.append(A.copy()) return As, Es # all time step states def Local_meas(A, B, Op, site): N = len(A) - l = cytnx.UniTensor(cytnx.eye(1), rowrank = 1) + l = cytnx.UniTensor.eye(1).set_rowrank_(1) anet = cytnx.Network() anet.FromString(["l: 0,3",\ "A: 0,1,2",\ @@ -263,14 +265,15 @@ def Local_meas(A, B, Op, site): def prepare_rand_init_MPS(Nsites, chi, d): lbls = [] A = [None for i in range(Nsites)] - A[0] = cytnx.UniTensor(cytnx.random.normal([1, d, min(chi, d)], 0., 1., seed=0), rowrank = 2) + A[0] = cytnx.UniTensor.normal([1, d, min(chi, d)], 0., 1., seed=0).set_rowrank_(2) A[0].relabels_(["0","1","2"]) lbls.append(["0","1","2"]) # store the labels for later convinience. for k in range(1,Nsites): - dim1 = A[k-1].shape()[2]; dim2 = d + dim1 = A[k-1].shape()[2] + dim2 = d dim3 = min(min(chi, A[k-1].shape()[2] * d), d ** (Nsites - k - 1)) - A[k] = cytnx.UniTensor(cytnx.random.normal([dim1, dim2, dim3],0.,1., seed=0), rowrank = 2) + A[k] = cytnx.UniTensor.normal([dim1, dim2, dim3],0.,1., seed=0).set_rowrank(2) lbl = [str(2*k),str(2*k+1),str(2*k+2)] A[k].relabels_(lbl) @@ -306,7 +309,7 @@ def prepare_rand_init_MPS(Nsites, chi, d): As, Es = tdvp1_XXZmodel_dense(J, Jz, hx, hz, GS, chi, dt, time_step) # measure middle site - Sz = cytnx.UniTensor(cytnx.physics.pauli('z').real(), rowrank = 1) + Sz = cytnx.UniTensor(cytnx.physics.pauli('z').real()).set_rowrank(1) Szs = [] mid_site = int(Nsites/2) for i in range(0, len(As)): diff --git a/example/UniTensor/fromTensor.py b/example/UniTensor/fromTensor.py index c1fc9b627..21c846706 100644 --- a/example/UniTensor/fromTensor.py +++ b/example/UniTensor/fromTensor.py @@ -6,7 +6,7 @@ T = zeros([4,4]) -CyT = UniTensor(T,rowrank=2) #create un-tagged UniTensor from Tensor +CyT = UniTensor(T).set_rowrank_(2) #create un-tagged UniTensor from Tensor CyT.print_diagram() print("before:") @@ -22,13 +22,13 @@ #If we want a new instance of memery, use clone at initialize: print("[non-share example]") -CyT_nonshare = UniTensor(T.clone(),rowrank=2); +CyT_nonshare = UniTensor(T.clone()).set_rowrank_(2) print("before:") print(T) print(CyT_nonshare) -CyT_nonshare.set_elem([1,1],2.345); +CyT_nonshare.set_elem([1,1],2.345) print("after") print(T) # T is unchanged! diff --git a/example/iTEBD/iTEBD.py b/example/iTEBD/iTEBD.py index 73a7e4226..f3bda6510 100644 --- a/example/iTEBD/iTEBD.py +++ b/example/iTEBD/iTEBD.py @@ -42,10 +42,10 @@ def itebd_tfim(chi = 20, J = 1.0, Hx = 1.0, dt = 0.1, CvgCrit = 1.0e-10): # | | # --A-la-B-lb-- # - A = cytnx.UniTensor([cytnx.Bond(chi),cytnx.Bond(2),cytnx.Bond(chi)],labels=['a','0','b']); - B = cytnx.UniTensor(A.bonds(),rowrank=1,labels=['c','1','d']); - cytnx.random.normal_(B.get_block_(), mean=0, std=0.2, seed=0); - cytnx.random.normal_(A.get_block_(),mean=0, std=0.2, seed=0); + A = cytnx.UniTensor([cytnx.Bond(chi),cytnx.Bond(2),cytnx.Bond(chi)],labels=['a','0','b']) + B = cytnx.UniTensor(A.bonds(),labels=['c','1','d']).set_rowrank_(1) + cytnx.random.normal_(B.get_block_(), mean=0, std=0.2, seed=0) + cytnx.random.normal_(A.get_block_(),mean=0, std=0.2, seed=0) A.print_diagram() B.print_diagram() #print(A) @@ -53,8 +53,8 @@ def itebd_tfim(chi = 20, J = 1.0, Hx = 1.0, dt = 0.1, CvgCrit = 1.0e-10): la = cytnx.UniTensor([cytnx.Bond(chi),cytnx.Bond(chi)],labels=['b','c'],is_diag=True) lb = cytnx.UniTensor([cytnx.Bond(chi),cytnx.Bond(chi)],labels=['d','e'],is_diag=True) - la.put_block(cytnx.ones(chi)); - lb.put_block(cytnx.ones(chi)); + la.put_block(cytnx.ones(chi)) + lb.put_block(cytnx.ones(chi)) la.print_diagram() lb.print_diagram() #print(la) @@ -132,7 +132,7 @@ def itebd_tfim(chi = 20, J = 1.0, Hx = 1.0, dt = 0.1, CvgCrit = 1.0e-10): # # again, but A' and B' are updated lb_inv = 1./lb - # lb_inv.print_diagram(); + # lb_inv.print_diagram() lb_inv.set_labels(['e','d']) A = cytnx.Contract(lb_inv,A) diff --git a/example/iTEBD/iTEBD_tag.py b/example/iTEBD/iTEBD_tag.py index eaaad42e9..37ffd0f10 100644 --- a/example/iTEBD/iTEBD_tag.py +++ b/example/iTEBD/iTEBD_tag.py @@ -27,11 +27,11 @@ def itebd_tfim_tag(chi = 20, J = 1.0, Hx = 1.0, dt = 0.1, CvgCrit = 1.0e-10): print(eH) H.reshape_(2,2,2,2) - eH = cytnx.UniTensor(eH,rowrank=2) + eH = cytnx.UniTensor(eH).set_rowrank_(2) eH.tag() # this will tag with in/out(ket/bra) on each bond. eH.print_diagram() - H = cytnx.UniTensor(H,rowrank=2) + H = cytnx.UniTensor(H).set_rowrank_(2) H.tag() H.print_diagram() @@ -43,11 +43,11 @@ def itebd_tfim_tag(chi = 20, J = 1.0, Hx = 1.0, dt = 0.1, CvgCrit = 1.0e-10): # A = cytnx.UniTensor([cytnx.Bond(chi,BD_IN), cytnx.Bond(2 ,BD_OUT), - cytnx.Bond(chi,BD_OUT)],labels=['a','0','b']); - B = cytnx.UniTensor(A.bonds(),rowrank=1,labels=['c','1','d']); + cytnx.Bond(chi,BD_OUT)],labels=['a','0','b']) + B = cytnx.UniTensor(A.bonds(),labels=['c','1','d']).set_rowrank_(1) - cytnx.random.normal_(B.get_block_(), mean=0, std=0.2, seed=0); - cytnx.random.normal_(A.get_block_(), mean=0, std=0.2, seed=0); + cytnx.random.normal_(B.get_block_(), mean=0, std=0.2, seed=0) + cytnx.random.normal_(A.get_block_(), mean=0, std=0.2, seed=0) A.print_diagram() B.print_diagram() #print(A) @@ -55,8 +55,8 @@ def itebd_tfim_tag(chi = 20, J = 1.0, Hx = 1.0, dt = 0.1, CvgCrit = 1.0e-10): la = cytnx.UniTensor([cytnx.Bond(chi,BD_IN),cytnx.Bond(chi,BD_OUT)],labels=['b','c'],is_diag=True) lb = cytnx.UniTensor(la.bonds(),labels=['d','e'],is_diag=True) - la.put_block(cytnx.ones(chi)); - lb.put_block(cytnx.ones(chi)); + la.put_block(cytnx.ones(chi)) + lb.put_block(cytnx.ones(chi)) la.print_diagram() lb.print_diagram() #print(la) diff --git a/include/Generator.hpp b/include/Generator.hpp index 66b0a68aa..11f78f3db 100644 --- a/include/Generator.hpp +++ b/include/Generator.hpp @@ -14,7 +14,7 @@ namespace cytnx { //@{ /** - @brief create an rank-1 Tensor with all the elements are initialized with zero. + @brief Create a rank-1 Tensor with all elements initialized to zero. @param Nelem the number of elements @param dtype the dtype of the Tensor. It can be any type defined in \link cytnx::Type cytnx::Type \endlink @@ -28,7 +28,7 @@ namespace cytnx { Tensor zeros(const cytnx_uint64 &Nelem, const unsigned int &dtype = Type.Double, const int &device = Device.cpu); /** - @brief create an Tensor with all the elements are initialized with zero. + @brief Create a Tensor with all elements initialized to zero. @param Nelem the shape of the Tensor @param dtype the dtype of the Tensor. It can be any type defined in \link cytnx::Type cytnx::Type \endlink @@ -44,7 +44,8 @@ namespace cytnx { //@} /** - @brief create an square rank-2 Tensor with all diagonal to be one. + @brief Create a square rank-2 Tensor with the diagonal initialized to one and all other elements + set to zero. @param Dim the dimension of diagonal. @param dtype the dtype of the Tensor. It can be any type defined in \link cytnx::Type cytnx::Type \endlink @@ -59,7 +60,8 @@ namespace cytnx { const int &device = Device.cpu); /** - @brief create a square rank-2 Tensor with all diagonal to be one. + @brief Create a square rank-2 Tensor with the diagonal initialized to one and all other elements + set to zero @param Dim the dimension of diagonal. @param dtype the dtype of the Tensor. It can be any type defined in \link cytnx::Type cytnx::Type \endlink @@ -78,7 +80,7 @@ namespace cytnx { //@{ /** - @brief create an rank-1 Tensor with all the elements are initialized with one. + @brief Create a rank-1 Tensor with all elements initialized to one. @param Nelem the number of elements @param dtype the dtype of the Tensor. It can be any type defined in \link cytnx::Type cytnx::Type \endlink @@ -92,7 +94,7 @@ namespace cytnx { Tensor ones(const cytnx_uint64 &Nelem, const unsigned int &dtype = Type.Double, const int &device = Device.cpu); /** - @brief create an Tensor with all the elements are initialized with one. + @brief Create a Tensor with all elements initialized to one. @param Nelem the shape of the Tensor @param dtype the dtype of the Tensor. It can be any type defined in \link cytnx::Type cytnx::Type \endlink @@ -109,7 +111,7 @@ namespace cytnx { //@{ /** - @brief create an rank-1 Tensor with incremental unsigned integer elements start with [0,Nelem) + @brief Create a rank-1 Tensor with incremental unsigned integer elements in the range [0,Nelem) @param Nelem the number of incremental elements to create. @return @@ -118,7 +120,7 @@ namespace cytnx { */ Tensor arange(const cytnx_int64 &Nelem); /** - @brief create an rank-1 Tensor with elements defined in range [start,end) with assigned step-size + @brief Create an rank-1 Tensor with elements defined in range [start,end) with assigned step-size @param start the start value of the range @param end the end value of the range @param step the step-size of the range diff --git a/include/UniTensor.hpp b/include/UniTensor.hpp index f67b97cd2..8cf8f7e08 100644 --- a/include/UniTensor.hpp +++ b/include/UniTensor.hpp @@ -5391,16 +5391,17 @@ namespace cytnx { } /** - @brief Generate a identity UniTensor. + @brief Generate a 2-bond identity UniTensor. @param[in] dim the dimension of the diagnal. - @param[in] in_labels the labels of the UniTensor. + @param[in] in_labels the two labels of the UniTensor. @param[in] is_diag determine if the UniTensor is diagonal or not. Default is false. @param[in] dtype the data type of the UniTensor, see cytnx::Type for more information. @param[in] device the device type of the UniTensor, see cytnx::Device for more information. @param[in] name the name of the UniTensor. @return [UniTensor] - @note 2-bond if not diagonal. 1-bond if diagonal. + @note The resulting UniTensor has two bonds. The data is one-dimensional (two-dimensional) if + is_diag is true (false). */ static UniTensor identity(const cytnx_uint64 &dim, const std::vector &in_labels = {}, @@ -5417,17 +5418,17 @@ namespace cytnx { /** @brief Generate a 2-bond identity UniTensor @param[in] dim the dimension of the diagnal. - @param[in] in_labels the labels of the UniTensor. + @param[in] in_labels the two labels of the UniTensor. @param[in] is_diag determine if the UniTensor is diagonal or not. Default is false. @param[in] dtype the data type of the UniTensor, see cytnx::Type for more information. @param[in] device the device type of the UniTensor, see cytnx::Device for more information. @param[in] name the name of the UniTensor. @return [UniTensor] - @note 2-bond if not diagonal. 1-bond if diagonal. - @see identity(Nelem, in_labels, is_diag, dtype, device, name) - Note: - This function is a alias of cytnx::UniTensor::identity(). + @note The resulting UniTensor has two bonds. The data is one-dimensional (two-dimensional) if + is_diag is true (false). + @see cytnx::UniTensor::identity + @note This function is a alias of cytnx::UniTensor::identity(). */ static UniTensor eye(const cytnx_uint64 &dim, const std::vector &in_labels = {}, const cytnx_bool &is_diag = false, const unsigned int &dtype = Type.Double,