diff --git a/.github/workflows/make.yml b/.github/workflows/make.yml index 29c02f2..77d5f9b 100644 --- a/.github/workflows/make.yml +++ b/.github/workflows/make.yml @@ -19,5 +19,8 @@ jobs: run: sudo apt -y install shfmt shellcheck devscripts - name: Install markdownlint run: npm install markdownlint-cli2 --global + - name: Install Python `uv` + run: curl -LsSf https://astral.sh/uv/install.sh | sh - name: style check - run: make style-check + run: | + make style-check diff --git a/.gitignore b/.gitignore index 79ed698..5ce4d04 100644 --- a/.gitignore +++ b/.gitignore @@ -16,7 +16,13 @@ Thumbs.db # subdirectory with source repositories tests/src -subject-programs/src +subject-programs/src-grt/ +subject-programs/src-upstream/ +# temporary +subject-programs/src-upstream-OLD/ +subject-programs/src-upstream-GOOD/ +subject-programs/src-grt-SAVE/ +subject-programs/files.diff # subdirectory created by scripts/mutation-randoop.sh and scripts/mutation-evosuite.sh scripts/jarfiles @@ -25,11 +31,8 @@ scripts/build/ scripts/results/ checkbashisms -# output from runnin jacoco +# output from running jacoco jacoco.exec -# For code formatting +# Obtained via Git .plume-scripts -.markdownlint-cli2.yaml -.pymarkdown -.ruff.toml diff --git a/.markdownlint-cli2.yaml b/.markdownlint-cli2.yaml deleted file mode 100644 index f665c80..0000000 --- a/.markdownlint-cli2.yaml +++ /dev/null @@ -1,71 +0,0 @@ -# -# Markdownlint configuration -# - -# Disable some built-in rules -config: - no-multiple-blanks: false - line-length: false - no-trailing-punctuation: - punctuation: ".,;:" - ## TODO: replace by the below - no-inline-html: false - # no-inline-html: - # allowed_elements: - # - details - # - kbd - # - sub - # - span - # - summary - single-title: - front_matter_title: "" - table-pipe-style: false - # I can't get this style setting to be respected. Bug in markdownlint?? - # style: "leading_and_trailing" - -# # Include a custom rule package -# customRules: -# - markdownlint-rule-extended-ascii - -# Fix any fixable errors -fix: true - -# # Define a custom front matter pattern -# frontMatter: "[^]*<\/head>" - -# Ignore files referenced by .gitignore (only valid at root) -gitignore: true - -# # Define glob expressions to use (only valid at root) -# globs: -# - "!*bout.md" - -# # Define glob expressions to ignore -# ignores: -# - "ignore*.md" - -# # Use a plugin to recognize math -# markdownItPlugins: -# - -# - "markdown-it-emoji/dist/light.cjs.js" - -# Additional paths to resolve module locations from -modulePaths: - - "./modules" - -# Disable banner message on stdout (only valid at root) -noBanner: true - -# # Disable inline config comments -# noInlineConfig: true - -# Disable progress on stdout (only valid at root) -noProgress: true - -# Use a specific formatter (only valid at root) -outputFormatters: - - - - markdownlint-cli2-formatter-default - -# # Show found files on stdout (only valid at root) -# showFound: true diff --git a/.python-version b/.python-version index 6324d40..c8cfe39 100644 --- a/.python-version +++ b/.python-version @@ -1 +1 @@ -3.14 +3.10 diff --git a/.ruff.toml b/.ruff.toml deleted file mode 100644 index 2024869..0000000 --- a/.ruff.toml +++ /dev/null @@ -1,13 +0,0 @@ -line-length = 100 -output-format = "concise" - -[lint] -preview = true -extend-select = ["I", "D", "DOC", "B", "A", "COM", "C4", "DTZ", "EM", "EXE", "FA", "INT", "ISC", "ICN", "PIE", "PYI", "Q", "RET", "SLF", "SIM", "SLOT", "TID", "TC", "ARG", "PTH", "FLY", "NPY", "PD", "N", "PERF", "E", "W", "F", "PLC", "PLE", "UP", "FURB", "RUF", "TRY"] -extend-ignore = ["COM812", "D203", "D213", "D400", "D413", "DOC501", "E266", "EM101", "PLC1901", "RET504", "SIM102", "SIM108", "TRY002", "TRY003", "TRY300"] - -[lint.pycodestyle] -max-line-length = 100 - -[format] -docstring-code-format = false diff --git a/pyproject.toml b/pyproject.toml index 724b0fe..b52f56c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,3 +1,7 @@ +[build-system] +requires = ["uv_build >= 0.9.11, <0.10.0"] +build-backend = "uv_build" + [project] name = "grt-testing" version = "0.1.0" @@ -13,5 +17,7 @@ dependencies = [ [dependency-groups] dev = [ "pymarkdownlnt>=0.9.33", + "pyyaml>=6.0.3", "ty>=0.0.1a31", ] +# dynamic = ["version"] diff --git a/scripts/Makefile b/scripts/Makefile index 03ede47..e548ab1 100644 --- a/scripts/Makefile +++ b/scripts/Makefile @@ -1,6 +1,7 @@ MAKEFILE_DIR := $(dir $(realpath $(lastword $(MAKEFILE_LIST)))) all: \ + build/checker-framework/checker/dist/checker-qual.jar \ build/evosuite-1.2.0.jar \ build/evosuite-standalone-runtime-1.2.0.jar \ build/hamcrest-core-1.3.jar \ @@ -64,13 +65,21 @@ build/junit-4.12.jar: build/hamcrest-core-1.3.jar: mkdir -p build - cp ../subject-programs/hamcrest-core-1.3.jar build/ + cp ../subject-programs/jars/hamcrest-core-1.3.jar build/ build/major/bin/ant-replacecall: LATEST_RELEASE=$$(curl -s https://api.github.com/repos/randoop/grt-replacecall/releases/latest | grep -o '"tag_name": "[^"]*' | cut -d'"' -f4) && \ wget "https://github.com/randoop/grt-replacecall/releases/download/$${LATEST_RELEASE}/ant-replacecall" && \ mv ant-replacecall build/major/bin/ +build/checker-framework/checker/dist/checker-qual.jar: + mkdir -p build + CFVER=3.50.0 && \ + cd build && wget "https://github.com/typetools/checker-framework/releases/download/checker-framework-$${CFVER}/checker-framework-$${CFVER}.zip" && \ + unzip -o checker-framework-$${CFVER}.zip && \ + rm -rf checker-framework && \ + mv checker-framework-$${CFVER} checker-framework + build/defects4j: mkdir -p build cd build && git clone https://github.com/rjust/defects4j && cd defects4j && cpanm --installdeps . && ./init.sh diff --git a/scripts/get-all-subject-src.sh b/scripts/get-all-subject-src.sh deleted file mode 100755 index e308588..0000000 --- a/scripts/get-all-subject-src.sh +++ /dev/null @@ -1,54 +0,0 @@ -#!/bin/sh - -# This script clones the repositories for each subject program, in -# subject-programs/src/. If the repository already exists, it pulls the -# latest changes. - -SCRIPT_DIR="$(CDPATH='' cd -- "$(dirname -- "$0")" && pwd -P)" -SCRIPT_NAME=$(basename -- "$0") - -SUBJECT_SRC_DIR="${SCRIPT_DIR}/../subject-programs/src" -mkdir -p "${SUBJECT_SRC_DIR}" -cd "${SUBJECT_SRC_DIR}" || (echo "${SCRIPT_NAME}: error: directory does not exist: ${SUBJECT_SRC_DIR}" && exit 2) - -grt_clone() { - printf '%s:' "$1" - if [ -d "$1" ]; then - echo " updating." - (cd "$1" && git pull -q) - else - echo " cloning." - git clone -q git@github.com:randoop/grt-"$1" "$1" - fi -} - -grt_clone a4j-1.0b -grt_clone asm-5.0.1 -grt_clone bcel-5.2 -grt_clone ClassViewer-5.0.5b -grt_clone commons-cli-1.2 -grt_clone commons-codec-1.9 -grt_clone commons-collections4-4.0 -grt_clone commons-compress-1.8 -grt_clone commons-lang3-3.0 -grt_clone commons-math3-3.2 -grt_clone commons-primitives-1.0 -grt_clone dcParseArgs-10.2008 -grt_clone easymock-3.2 -grt_clone fixsuite-r48 -grt_clone guava-16.0.1 -grt_clone hamcrest-core-1.3 -grt_clone javassist-3.19 -grt_clone javax.mail-1.5.1 -grt_clone jaxen-1.1.6 -grt_clone jcommander-1.35 -grt_clone jdom-1.0 -grt_clone joda-time-2.3 -grt_clone JSAP-2.1 -grt_clone jvc-1.1 -grt_clone nekomud-r16 -grt_clone pmd-core-5.2.2 -grt_clone sat4j-core-2.3.5 -grt_clone shiro-core-1.2.3 -grt_clone slf4j-api-1.7.12 -grt_clone tiny-sql-2.26 diff --git a/scripts/mutation-evosuite.sh b/scripts/mutation-evosuite.sh index 51e3a71..1ff2ee4 100755 --- a/scripts/mutation-evosuite.sh +++ b/scripts/mutation-evosuite.sh @@ -172,7 +172,7 @@ echo SRC_BASE_DIR="$(realpath "$SCRIPT_DIR/../subject-programs/src/$SUBJECT_PROGRAM")" # Path to the jar file of the subject program. -SRC_JAR=$(realpath "$SCRIPT_DIR/../subject-programs/$SUBJECT_PROGRAM.jar") +SRC_JAR=$(realpath "$SCRIPT_DIR/../subject-programs/jars/$SUBJECT_PROGRAM.jar") # Number of classes in given jar file. NUM_CLASSES=$(jar -tf "$SRC_JAR" | grep -c '.class') @@ -318,7 +318,7 @@ case "$SUBJECT_PROGRAM" in "$SRC_BASE_DIR/lib/jaxen-core.jar" \ "$SRC_BASE_DIR/lib/jaxen-jdom.jar" \ "$SRC_BASE_DIR/lib/saxpath.jar" \ - "$SCRIPT_DIR/../subject-programs/jaxen-1.1.6.jar" + "$SCRIPT_DIR/../subject-programs/jars/jaxen-1.1.6.jar" ;; "joda-time-2.3") diff --git a/scripts/mutation-randoop.sh b/scripts/mutation-randoop.sh index e6801c0..5df97f8 100755 --- a/scripts/mutation-randoop.sh +++ b/scripts/mutation-randoop.sh @@ -56,12 +56,12 @@ set -o pipefail Generator=Randoop generator=randoop SCRIPT_DIR="$(CDPATH='' cd -- "$(dirname -- "$0")" && pwd -P)" -SCRIPT_NAME=$(basename -- "$0") -MAJOR_HOME=$(realpath "${SCRIPT_DIR}/build/major/") # Major home directory, for mutation testing -RANDOOP_JAR=$(realpath "${SCRIPT_DIR}/build/randoop-all-4.3.4.jar") # Randoop jar file -JACOCO_AGENT_JAR=$(realpath "${SCRIPT_DIR}/build/jacocoagent.jar") # For Bloodhound -JACOCO_CLI_JAR=$(realpath "${SCRIPT_DIR}/build/jacococli.jar") # For coverage report generation -REPLACECALL_JAR=$(realpath "${SCRIPT_DIR}/build/replacecall-4.3.4.jar") # For replacing undesired method calls +MAJOR_HOME=$(realpath "${SCRIPT_DIR}/build/major/") # Major home directory, for mutation testing +RANDOOP_JAR=$(realpath "${SCRIPT_DIR}/build/randoop-all-4.3.4.jar") # Randoop jar file +JACOCO_AGENT_JAR=$(realpath "${SCRIPT_DIR}/build/jacocoagent.jar") # For Bloodhound +JACOCO_CLI_JAR=$(realpath "${SCRIPT_DIR}/build/jacococli.jar") # For coverage report generation +REPLACECALL_JAR=$(realpath "${SCRIPT_DIR}/build/replacecall-4.3.4.jar") # For replacing undesired method calls +CHECKER_QUAL_JAR=$(realpath "${SCRIPT_DIR}/build/checker-framework/checker/dist/checker-qual.jar") # For Randoop Impurity . "$SCRIPT_DIR/defs.sh" # Define shell functions. @@ -70,6 +70,7 @@ require_file "$RANDOOP_JAR" require_file "$JACOCO_AGENT_JAR" require_file "$JACOCO_CLI_JAR" require_file "$REPLACECALL_JAR" +require_file "$CHECKER_QUAL_JAR" usejdk8 JAVA_VER=$(java -version 2>&1 | awk -F '"' '/version/ {print $2}' | awk -F '.' '{sub("^$", "0", $2); print ($1=="1")?$2:$1}') @@ -219,8 +220,18 @@ echo # Path to the base directory of the source code. SRC_BASE_DIR="$(realpath "$SCRIPT_DIR/../subject-programs/src/$SUBJECT_PROGRAM")" -# Path to the jar file of the subject program. -SRC_JAR=$(realpath "$SCRIPT_DIR/../subject-programs/$SUBJECT_PROGRAM.jar") +if [[ " ${RANDOOP_FEATURES[*]} " =~ " GRT_FUZZING " ]]; then + # If randoop features contain "GRT_FUZZING", use annotated subject program jar. + ANNOTATED_JAR="$SCRIPT_DIR/../subject-programs/annotated-jars/$SUBJECT_PROGRAM.jar" + if [ ! -f "$ANNOTATED_JAR" ]; then + echo "${SCRIPT_NAME}: error: GRT_FUZZING enabled but annotated JAR not found: $ANNOTATED_JAR" >&2 + exit 2 + fi + SRC_JAR=$(realpath "$ANNOTATED_JAR") +else + # Else, use the original subject program jar. + SRC_JAR=$(realpath "$SCRIPT_DIR/../subject-programs/jars/$SUBJECT_PROGRAM.jar") +fi # Number of classes in given jar file. NUM_CLASSES=$(jar -tf "$SRC_JAR" | grep -c '.class') @@ -353,7 +364,7 @@ case "$SUBJECT_PROGRAM" in "$SRC_BASE_DIR/lib/jaxen-core.jar" \ "$SRC_BASE_DIR/lib/jaxen-jdom.jar" \ "$SRC_BASE_DIR/lib/saxpath.jar" \ - "$SCRIPT_DIR/../subject-programs/jaxen-1.1.6.jar" + "$SCRIPT_DIR/../subject-programs/jars/jaxen-1.1.6.jar" ;; "joda-time-2.3") @@ -456,7 +467,7 @@ RANDOOP_BASE_COMMAND=( -Xbootclasspath/a:"$JACOCO_AGENT_JAR:$REPLACECALL_JAR" -javaagent:"$JACOCO_AGENT_JAR" -javaagent:"$REPLACECALL_COMMAND" - -classpath "$RANDOOP_CLASSPATH:$RANDOOP_JAR" + -classpath "$RANDOOP_CLASSPATH:$RANDOOP_JAR:$CHECKER_QUAL_JAR" randoop.main.Main gentests --testjar="$TARGET_JAR" diff --git a/src/grt_testing/__init__.py b/src/grt_testing/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/subject-programs/README b/subject-programs/README index bb58366..7ecc43e 100644 --- a/subject-programs/README +++ b/subject-programs/README @@ -1,3 +1,8 @@ +Run Python scripts in this directory via: + +uv run SCRIPTNAME + + This directory contains compiled versions (jar files) of projects that the GRT paper used as subject programs. The paper's Table II lists 32 projects. We have located 30 of them. diff --git a/subject-programs/README.build b/subject-programs/README.build index 3cd6ce2..ecfc320 100644 --- a/subject-programs/README.build +++ b/subject-programs/README.build @@ -12,8 +12,8 @@ Maven (mvn) builds ------------------ If the project uses Maven to build, usually indicated by a pom.xml file in the root, a useful build command is: -``` - mvn -B clean package -Dmaven.test.failure.ignore -Dmaven.javadoc.skip |& tee mvn-output.txt +```sh + mvn -B clean package -Dmaven.test.failure.ignore -Dmaven.javadoc.skip 2>&1 | tee mvn-output.txt ``` The failure.ignore option allows the .jar file to be built even if there are @@ -24,67 +24,67 @@ The resulting .jar file will be in the target subdirectory. Test directory Build instructions ------------------------------------------------------------ -a4j-1.0b: ant createJar (result is in dist subdir) -asm-5.0.1: (uses mvn) -bcel-5.2: ant jar (result is in target subdir) -ClassViewer-5.0.5b: ant build (result is in root directory) -commons-cli-1.2: (uses mvn) -commons-codec-1.9: (uses mvn) -commons-collections4-4.0: (uses mvn) -commons-compress-1.8: (uses mvn) -commons-lang3-3.0: (uses mvn) -commons-math3-3.2: (uses mvn) -commons-primitives-1.0: ant jar (result is in target subdir) +a4j-1.0b ant createJar (result is in dist subdir) +asm-5.0.1 (uses mvn) +bcel-5.2 ant jar (result is in target subdir) +ClassViewer-5.0.5b ant build (result is in root directory) +commons-cli-1.2 (uses mvn) +commons-codec-1.9 (uses mvn) +commons-collections4-4.0 (uses mvn) +commons-compress-1.8 (uses mvn) +commons-lang3-3.0 (uses mvn) +commons-math3-3.2 (uses mvn) +commons-primitives-1.0 ant jar (result is in target subdir) dcParseArgs-10.2008 ant createJar (result is in dist subdir) easymock-3.2 (uses mvn) (result is in easymock/target subdir) fixsuite-r48 ant jar (result is in jar subdir) guava-16.0.1 (uses mvn) hamcrest-core-1.3 ant core (result is in build subdir) javassist-3.19 ant jar (result is in root directory) -jaxax.mail-1.5.1: (uses mvn) -jaxen-1.1.6: (uses mvn) -jcommander-1.35: (uses mvn) -jdom-1.0: ./build.sh (result is in build subdir) -joda-time-2.3: (uses mvn) -JSAP-2.1: ant jar (result is in dist subdir) -jvc-1.1: ant tools (result is in dist subdir) -nekomud-r16: ant (result is in dist subdir) -pmd-core-5.2.2: cd pmd-core; mvn -B clean package -Dmaven.test.skip -Dmaven.javadoc.skip -DjavaccBuildNotRequired -sat4j.core-2.3.5: (uses mvn) (result is in org.sat4j.core/target) -shiro-core-1.2.3: (uses mvn - but 'cd core' first) -slf4j-api-1.7.12: (uses mvn - but 'cd slf4j-api' first) -tiny-sql-2.26: ./build.sh (result is in classes subdir) +jaxax.mail-1.5.1 (uses mvn) +jaxen-1.1.6 (uses mvn) +jcommander-1.35 (uses mvn) +jdom-1.0 ./build.sh (result is in build subdir) +joda-time-2.3 (uses mvn) +JSAP-2.1 ant jar (result is in dist subdir) +jvc-1.1 ant tools (result is in dist subdir) +nekomud-r16 ant (result is in dist subdir) +pmd-core-5.2.2 cd pmd-core; mvn -B clean package -Dmaven.test.skip -Dmaven.javadoc.skip -DjavaccBuildNotRequired +sat4j.core-2.3.5 (uses mvn) (result is in org.sat4j.core/target) +shiro-core-1.2.3 (uses mvn - but 'cd core' first) +slf4j-api-1.7.12 (uses mvn - but 'cd slf4j-api' first) +tiny-sql-2.26 ./build.sh (result is in classes subdir) software (version) original source ------------------------------------------------------------------------------------------------------------------------ -Amazon AWS 4 Java (1.0b) //sourceforge.net/projects/a4j/files/latest/download/a4j-1.0b1.zip -ASM (5.0.1) //repo1.maven.org/maven2/org/ow2/asm/asm/5.0.1/asm-5.0.1-sources.jar -Apache BCEL (5.2) //github.com/apache/commons-bcel/archive/refs/tags/BCEL_5_2.zip +Amazon AWS 4 Java (1.0b) https://sourceforge.net/projects/a4j/files/latest/download/a4j-1.0b1.zip +ASM (5.0.1) https://repo1.maven.org/maven2/org/ow2/asm/asm/5.0.1/asm-5.0.1-sources.jar +Apache BCEL (5.2) https://github.com/apache/commons-bcel/archive/refs/tags/BCEL_5_2.zip ClassViewer (5.0.5b) svn checkout -r 28 https://svn.code.sf.net/p/classviewer/code/trunk ClassViewer -Apache Commons Cli (1.2) //archive.apache.org/dist/commons/cli/source/commons-cli-1.2-src.zip -Apache C. Codec (1.9) //archive.apache.org/dist/commons/codec/source/commons-codec-1.9-src.zip -Apache C. Collection (4.0) //archive.apache.org/dist/commons/collections/source/commons-collections4-4.0-src.zip -Apache C. Compress (1.8) //archive.apache.org/dist/commons/compress/source/commons-compress-1.8-src.zip -Apache C. Lang (3.0) //archive.apache.org/dist/commons/lang/source/commons-lang3-3.0-src.zip -Apache C. Math (3.2) //archive.apache.org/dist/commons/math/source/commons-math3-3.2-src.zip -Apache C. Primitive (1.0) //archive.apache.org/dist/commons/primitives/source/commons-primitives-1.0-src.zip -Dcparseargs (10/2008) //sourceforge.net/projects/dcparseargs/files/Source/First%20upload/dcParseArgs_src.tar.bz2 -Easymock (3.2) //github.com/easymock/easymock/archive/refs/tags/easymock-3.2.zip +Apache Commons Cli (1.2) https://archive.apache.org/dist/commons/cli/source/commons-cli-1.2-src.zip +Apache C. Codec (1.9) https://archive.apache.org/dist/commons/codec/source/commons-codec-1.9-src.zip +Apache C. Collection (4.0) https://archive.apache.org/dist/commons/collections/source/commons-collections4-4.0-src.zip +Apache C. Compress (1.8) https://archive.apache.org/dist/commons/compress/source/commons-compress-1.8-src.zip +Apache C. Lang (3.0) https://archive.apache.org/dist/commons/lang/source/commons-lang3-3.0-src.zip +Apache C. Math (3.2) https://archive.apache.org/dist/commons/math/source/commons-math3-3.2-src.zip +Apache C. Primitive (1.0) https://archive.apache.org/dist/commons/primitives/source/commons-primitives-1.0-src.zip +Dcparseargs (10/2008) https://sourceforge.net/projects/dcparseargs/files/Source/First%20upload/dcParseArgs_src.tar.bz2 +Easymock (3.2) https://github.com/easymock/easymock/archive/refs/tags/easymock-3.2.zip Fixsuite (R48) svn checkout https://svn.code.sf.net/p/fixsuite/code/trunk fixsuite-r48 -Guava (16.0.1) //repo1.maven.org/maven2/com/google/guava/guava/16.0.1/guava-16.0.1-sources.jar -Hamcrest-core (1.3) //github.com/hamcrest/JavaHamcrest/archive/refs/tags/hamcrest-java-1.3.zip -Javassit (3.19) //github.com/jboss-javassist/javassist/archive/refs/tags/rel_3_19_0_ga.zip -Javax Mail (1.5.1) //repo1.maven.org/maven2/com/sun/mail/javax.mail/1.5.1/javax.mail-1.5.1-sources.jar -Jaxen (1.1.6) //repo1.maven.org/maven2/jaxen/jaxen/1.1.6/jaxen-1.1.6-sources.jar +Guava (16.0.1) https://repo1.maven.org/maven2/com/google/guava/guava/16.0.1/guava-16.0.1-sources.jar +Hamcrest-core (1.3) https://github.com/hamcrest/JavaHamcrest/archive/refs/tags/hamcrest-java-1.3.zip +Javassit (3.19) https://github.com/jboss-javassist/javassist/archive/refs/tags/rel_3_19_0_ga.zip +Javax Mail (1.5.1) https://repo1.maven.org/maven2/com/sun/mail/javax.mail/1.5.1/javax.mail-1.5.1-sources.jar +Jaxen (1.1.6) https://repo1.maven.org/maven2/jaxen/jaxen/1.1.6/jaxen-1.1.6-sources.jar Jcommander (1.35) git@github.com:cbeust/jcommander.git (git co jcommander-1.35) -Jdom (1.0) //www.jdom.org/dist/binary/archive/jdom-1.0.zip -Joda Time (2.3) //github.com/JodaOrg/joda-time/archive/refs/tags/v2.3.zip -Java Simple Arg. Parser (2.1) //sourceforge.net/projects/jsap/files/jsap/2.1/JSAP-2.1-src.zip -Java View Control (1.1) //sourceforge.net/projects/javaviewcontrol/files/javaviewcontrol/jvc-1.1.tar.gz -Multi-User Dungeon server R16 svn checkout https://svn.code.sf.net/p/nekomud/code/trunk nekomud-r16 -Pmd DCD 5.2.2 git@github.com:pmd/pmd.git (git co pmd_releases/5.2.2) +Jdom (1.0) https://www.jdom.org/dist/binary/archive/jdom-1.0.zip +Joda Time (2.3) https://github.com/JodaOrg/joda-time/archive/refs/tags/v2.3.zip +Java Simple Arg. Parser (2.1) https://sourceforge.net/projects/jsap/files/jsap/2.1/JSAP-2.1-src.zip +Java View Control (1.1) https://sourceforge.net/projects/javaviewcontrol/files/javaviewcontrol/jvc-1.1.tar.gz +Multi-User Dungeon server (R16) svn checkout https://svn.code.sf.net/p/nekomud/code/trunk nekomud-r16 +Pmd DCD (5.2.2) git@github.com:pmd/pmd.git (git co pmd_releases/5.2.2) SAT4J Core (2.3.5) https://gitlab.ow2.org/sat4j/sat4j.git (git co 2_3_5) -Apache Shiro-core (1.2.6) //archive.apache.org/dist/shiro/1.2.3/shiro-root-1.2.3-source-release.zip -Slf4j-api (1.7.12) //github.com/qos-ch/slf4j/releases/tag/v_1.7.12/slf4j-v_1.7.12.zip -Tiny Sql (2.26) //sourceforge.net/projects/tinysql/files/tinySQL2.26/V2.26/tinySQL-2.26.zip +Apache Shiro-core (1.2.6) https://archive.apache.org/dist/shiro/1.2.3/shiro-root-1.2.3-source-release.zip +Slf4j-api (1.7.12) https://github.com/qos-ch/slf4j/releases/tag/v_1.7.12/slf4j-v_1.7.12.zip +Tiny Sql (2.26) https://sourceforge.net/projects/tinysql/files/tinySQL2.26/V2.26/tinySQL-2.26.zip diff --git a/subject-programs/annotated-jars/ClassViewer-5.0.5b.jar b/subject-programs/annotated-jars/ClassViewer-5.0.5b.jar new file mode 100644 index 0000000..62f0506 Binary files /dev/null and b/subject-programs/annotated-jars/ClassViewer-5.0.5b.jar differ diff --git a/subject-programs/annotated-jars/JSAP-2.1.jar b/subject-programs/annotated-jars/JSAP-2.1.jar new file mode 100644 index 0000000..4199347 Binary files /dev/null and b/subject-programs/annotated-jars/JSAP-2.1.jar differ diff --git a/subject-programs/annotated-jars/README.md b/subject-programs/annotated-jars/README.md new file mode 100644 index 0000000..f922f25 --- /dev/null +++ b/subject-programs/annotated-jars/README.md @@ -0,0 +1,80 @@ +# Annotated Subject Program JARs + +This folder holds subject `.jar` files with purity annotations: `@Pure`, +`@SideEffectFree`, `@Impure`, and related qualifiers from +`org.checkerframework.framework.qual` Compared to `subject-programs/jars/`, the +compiled bytecode here is the same, but the class files have purity +annotations. No other code or resources are altered. + +The annotations are produced by the Checker Framework whole-program inference. + +## Why the annotations matter + +The `GRT_FUZZING` feature in `scripts/mutation-randoop.sh` prioritizes impure +calls to mutate an object's state before exercising additional API entry points. +The annotations provide the information it needs. + +## Rebuilding an annotated JAR + +### Setup + +1. **Fetch sources**: From the top level (`../../`), run + `scripts/get-all-subject-src.sh` to populate + `subject-programs/src//`. + +2. **Set up inference tooling**: Point your environment at the local Checker + Framework build: + + ```sh + export CHECKERFRAMEWORK=/path/to/grt-testing/scripts/build/checker-framework + export PATH="$CHECKERFRAMEWORK/annotation-file-utilities/bin:$PATH" + ``` + +3. **Build the plain JAR**: Run `subject-programs/buildall.sh`. + The resulting jar appears in `subject-programs/jars/` + or the subject's usual build folder. + +### Do the following per project + +1. **Create the classpath**: Create a file `wpi-classpath.txt` with the + project's dependencies, one per line. + + This command tries `mvn`; if that doesn't work, assume that the Ant ships + extra JARs in a local `jars/` or `lib/` folder. + + ```sh + if ! mvn -q dependency:build-classpath -Dmdep.outputFile=wpi-classpath.txt; then + find jars -name '*.jar' > wpi-classpath.txt + find lib -name '*.jar' >> wpi-classpath.txt + ``` + +2. **Run inference**: From the subject directory, execute: + + ```sh + $CHECKERFRAMEWORK/checker/bin/infer-and-annotate.sh \ + "org.checkerframework.framework.util.PurityChecker" \ + "$RUNTIME_CLASSPATH" \ + $(find src -name "*.java") + ``` + + The script rewrites the sources in place with the inferred annotations. + +3. **Rebuild**: Repeat the command from step 2 to produce an annotated JAR. + Copy it to this folder. + +### Worked example (a4j-1.0b) + +```sh +cd subject-programs/src/a4j-1.0b +ant createJar # build the baseline JAR +export CHECKERFRAMEWORK=... # reuse the env vars above +export PATH="$CHECKERFRAMEWORK/annotation-file-utilities/bin:$PATH" +export JAVAC_JAR="$CHECKERFRAMEWORK/checker/dist/javac.jar" +RUNTIME_CLASSPATH="../../jars/a4j-1.0b.jar:jars/jox116.jar:jars/log4j-1.2.4.jar" +$CHECKERFRAMEWORK/checker/bin/infer-and-annotate.sh \ + "org.checkerframework.framework.util.PurityChecker" \ + "$RUNTIME_CLASSPATH" \ + $(find src -name "*.java") +ant createJar # rebuild with annotations +cp dist/a4j.jar ../../annotated-jars/a4j-1.0b.jar +``` diff --git a/subject-programs/annotated-jars/a4j-1.0b.jar b/subject-programs/annotated-jars/a4j-1.0b.jar new file mode 100644 index 0000000..932d79b Binary files /dev/null and b/subject-programs/annotated-jars/a4j-1.0b.jar differ diff --git a/subject-programs/annotated-jars/asm-5.0.1.jar b/subject-programs/annotated-jars/asm-5.0.1.jar new file mode 100644 index 0000000..7619c3f Binary files /dev/null and b/subject-programs/annotated-jars/asm-5.0.1.jar differ diff --git a/subject-programs/annotated-jars/bcel-5.2.jar b/subject-programs/annotated-jars/bcel-5.2.jar new file mode 100644 index 0000000..4227144 Binary files /dev/null and b/subject-programs/annotated-jars/bcel-5.2.jar differ diff --git a/subject-programs/annotated-jars/commons-cli-1.2.jar b/subject-programs/annotated-jars/commons-cli-1.2.jar new file mode 100644 index 0000000..200e307 Binary files /dev/null and b/subject-programs/annotated-jars/commons-cli-1.2.jar differ diff --git a/subject-programs/annotated-jars/commons-codec-1.9.jar b/subject-programs/annotated-jars/commons-codec-1.9.jar new file mode 100644 index 0000000..296670c Binary files /dev/null and b/subject-programs/annotated-jars/commons-codec-1.9.jar differ diff --git a/subject-programs/annotated-jars/commons-collections4-4.0.jar b/subject-programs/annotated-jars/commons-collections4-4.0.jar new file mode 100644 index 0000000..69679fe Binary files /dev/null and b/subject-programs/annotated-jars/commons-collections4-4.0.jar differ diff --git a/subject-programs/annotated-jars/commons-compress-1.8.jar b/subject-programs/annotated-jars/commons-compress-1.8.jar new file mode 100644 index 0000000..2bd4ac4 Binary files /dev/null and b/subject-programs/annotated-jars/commons-compress-1.8.jar differ diff --git a/subject-programs/annotated-jars/commons-lang3-3.0.jar b/subject-programs/annotated-jars/commons-lang3-3.0.jar new file mode 100644 index 0000000..f367f4b Binary files /dev/null and b/subject-programs/annotated-jars/commons-lang3-3.0.jar differ diff --git a/subject-programs/annotated-jars/commons-math3-3.2.jar b/subject-programs/annotated-jars/commons-math3-3.2.jar new file mode 100644 index 0000000..0443cd9 Binary files /dev/null and b/subject-programs/annotated-jars/commons-math3-3.2.jar differ diff --git a/subject-programs/annotated-jars/commons-primitives-1.0.jar b/subject-programs/annotated-jars/commons-primitives-1.0.jar new file mode 100644 index 0000000..ccf0d0a Binary files /dev/null and b/subject-programs/annotated-jars/commons-primitives-1.0.jar differ diff --git a/subject-programs/annotated-jars/dcParseArgs-10.2008.jar b/subject-programs/annotated-jars/dcParseArgs-10.2008.jar new file mode 100644 index 0000000..f864f55 Binary files /dev/null and b/subject-programs/annotated-jars/dcParseArgs-10.2008.jar differ diff --git a/subject-programs/annotated-jars/easymock-3.2.jar b/subject-programs/annotated-jars/easymock-3.2.jar new file mode 100644 index 0000000..d38fe25 Binary files /dev/null and b/subject-programs/annotated-jars/easymock-3.2.jar differ diff --git a/subject-programs/annotated-jars/fixsuite-r48.jar b/subject-programs/annotated-jars/fixsuite-r48.jar new file mode 100644 index 0000000..c3e1ccc Binary files /dev/null and b/subject-programs/annotated-jars/fixsuite-r48.jar differ diff --git a/subject-programs/annotated-jars/guava-16.0.1.jar b/subject-programs/annotated-jars/guava-16.0.1.jar new file mode 100644 index 0000000..442f21f Binary files /dev/null and b/subject-programs/annotated-jars/guava-16.0.1.jar differ diff --git a/subject-programs/annotated-jars/hamcrest-core-1.3.jar b/subject-programs/annotated-jars/hamcrest-core-1.3.jar new file mode 100644 index 0000000..5b01097 Binary files /dev/null and b/subject-programs/annotated-jars/hamcrest-core-1.3.jar differ diff --git a/subject-programs/annotated-jars/javassist-3.19.jar b/subject-programs/annotated-jars/javassist-3.19.jar new file mode 100644 index 0000000..d2918c1 Binary files /dev/null and b/subject-programs/annotated-jars/javassist-3.19.jar differ diff --git a/subject-programs/annotated-jars/javax.mail-1.5.1.jar b/subject-programs/annotated-jars/javax.mail-1.5.1.jar new file mode 100644 index 0000000..e80d440 Binary files /dev/null and b/subject-programs/annotated-jars/javax.mail-1.5.1.jar differ diff --git a/subject-programs/annotated-jars/jaxen-1.1.6.jar b/subject-programs/annotated-jars/jaxen-1.1.6.jar new file mode 100644 index 0000000..96f17eb Binary files /dev/null and b/subject-programs/annotated-jars/jaxen-1.1.6.jar differ diff --git a/subject-programs/annotated-jars/jcommander-1.35.jar b/subject-programs/annotated-jars/jcommander-1.35.jar new file mode 100644 index 0000000..09062ae Binary files /dev/null and b/subject-programs/annotated-jars/jcommander-1.35.jar differ diff --git a/subject-programs/annotated-jars/jdom-1.0.jar b/subject-programs/annotated-jars/jdom-1.0.jar new file mode 100644 index 0000000..987c406 Binary files /dev/null and b/subject-programs/annotated-jars/jdom-1.0.jar differ diff --git a/subject-programs/annotated-jars/joda-time-2.3.jar b/subject-programs/annotated-jars/joda-time-2.3.jar new file mode 100644 index 0000000..dca3b3c Binary files /dev/null and b/subject-programs/annotated-jars/joda-time-2.3.jar differ diff --git a/subject-programs/annotated-jars/jvc-1.1.jar b/subject-programs/annotated-jars/jvc-1.1.jar new file mode 100644 index 0000000..a85f496 Binary files /dev/null and b/subject-programs/annotated-jars/jvc-1.1.jar differ diff --git a/subject-programs/annotated-jars/nekomud-r16.jar b/subject-programs/annotated-jars/nekomud-r16.jar new file mode 100644 index 0000000..51e6e8e Binary files /dev/null and b/subject-programs/annotated-jars/nekomud-r16.jar differ diff --git a/subject-programs/annotated-jars/pmd-core-5.2.2.jar b/subject-programs/annotated-jars/pmd-core-5.2.2.jar new file mode 100644 index 0000000..a8a71e1 Binary files /dev/null and b/subject-programs/annotated-jars/pmd-core-5.2.2.jar differ diff --git a/subject-programs/annotated-jars/sat4j-core-2.3.5.jar b/subject-programs/annotated-jars/sat4j-core-2.3.5.jar new file mode 100644 index 0000000..7fae405 Binary files /dev/null and b/subject-programs/annotated-jars/sat4j-core-2.3.5.jar differ diff --git a/subject-programs/annotated-jars/shiro-core-1.2.3.jar b/subject-programs/annotated-jars/shiro-core-1.2.3.jar new file mode 100644 index 0000000..edac48c Binary files /dev/null and b/subject-programs/annotated-jars/shiro-core-1.2.3.jar differ diff --git a/subject-programs/annotated-jars/slf4j-api-1.7.12.jar b/subject-programs/annotated-jars/slf4j-api-1.7.12.jar new file mode 100644 index 0000000..acc368f Binary files /dev/null and b/subject-programs/annotated-jars/slf4j-api-1.7.12.jar differ diff --git a/subject-programs/annotated-jars/tiny-sql-2.26.jar b/subject-programs/annotated-jars/tiny-sql-2.26.jar new file mode 100644 index 0000000..a995ac9 Binary files /dev/null and b/subject-programs/annotated-jars/tiny-sql-2.26.jar differ diff --git a/subject-programs/build-info.yaml b/subject-programs/build-info.yaml new file mode 100644 index 0000000..97553ff --- /dev/null +++ b/subject-programs/build-info.yaml @@ -0,0 +1,275 @@ +# Fields: +# * extraction-dir is relative to subject-programs/src-upstream/. +# It is optional. +# * post-extract-command is run in subject-programs/src-upstream/ +# -- that is, in the parent directory of the code itself. +--- +project: Amazon AWS 4 Java +version: 1.0b +dir: a4j-1.0b +source: https://sourceforge.net/projects/a4j/files/latest/download/a4j-1.0b1.zip +post-extract-command: mv a4j a4j-1.0b && rm -rf a4j-1.0b/src/net/kencochrane/a4j/file/CVS a4j-1.0b/src/net/kencochrane/a4j/beans/CVS a4j-1.0b/src/net/kencochrane/a4j/util/CVS a4j-1.0b/src/net/kencochrane/a4j/data/CVS a4j-1.0b/src/net/kencochrane/a4j/CVS a4j-1.0b/src/net/kencochrane/a4j/DAO/CVS a4j-1.0b/src/net/kencochrane/CVS a4j-1.0b/src/net/CVS a4j-1.0b/src/CVS a4j-1.0b/docs/javadocs/net/kencochrane/a4j/file/CVS a4j-1.0b/docs/javadocs/net/kencochrane/a4j/beans/CVS a4j-1.0b/docs/javadocs/net/kencochrane/a4j/util/CVS a4j-1.0b/docs/javadocs/net/kencochrane/a4j/data/CVS a4j-1.0b/docs/javadocs/net/kencochrane/a4j/CVS a4j-1.0b/docs/javadocs/net/kencochrane/a4j/DAO/CVS a4j-1.0b/docs/javadocs/net/kencochrane/CVS a4j-1.0b/docs/javadocs/net/CVS a4j-1.0b/docs/javadocs/CVS a4j-1.0b/docs/javadocs/index-files/CVS a4j-1.0b/docs/CVS a4j-1.0b/config/CVS a4j-1.0b/examples/src/CVS a4j-1.0b/examples/CVS a4j-1.0b/jars/CVS a4j-1.0b/CVS +# && /home/mernst/bin/src/plume-scripts/preplace seller.s\b sellers a4j-1.0b +build-dir: . +build-command: ant createJar +jar-dir: dist +--- +project: ASM +version: 5.0.1 +dir: asm-5.0.1 +source: https://repo1.maven.org/maven2/org/ow2/asm/asm/5.0.1/asm-5.0.1-sources.jar +extraction-dir: asm-5.0.1 +post-extract-command: mkdir -p asm-5.0.1/src/main/java && mv asm-5.0.1/org asm-5.0.1/src/main/java/ && ../.plume-scripts/preplace org\.objectweb\.asm org1.objectweb.asm asm-5.0.1 && ../.plume-scripts/preplace org\.apache\.xalan org1.apache.xalan asm-5.0.1 && ../.plume-scripts/preplace ยง Section asm-5.0.1 +build-dir: . +build-command: mvn -B clean package -Dmaven.test.failure.ignore -Dmaven.javadoc.skip 2>&1 | tee mvn-output.txt +jar-dir: target +--- +project: Apache BCEL +version: 5.2 +dir: bcel-5.2 +source: https://github.com/apache/commons-bcel/archive/refs/tags/BCEL_5_2.zip +post-extract-command: mv commons-bcel-BCEL_5_2 bcel-5.2 +build-dir: . +build-command: ant jar +jar-dir: target +--- +project: ClassViewer +version: 5.0.5b +dir: ClassViewer-5.0.5b +source: svn checkout -r 28 --quiet https://svn.code.sf.net/p/classviewer/code/trunk ClassViewer-5.0.5b +post-extract-command: rm -rf ClassViewer-5.0.5b/.svn +build-dir: . +build-command: ant build +jar-dir: . +--- +project: Apache Commons Cli +version: 1.2 +dir: commons-cli-1.2 +source: https://archive.apache.org/dist/commons/cli/source/commons-cli-1.2-src.zip +post-extract-command: mv commons-cli-1.2-src commons-cli-1.2 +build-dir: . +build-command: mvn -B clean package -Dmaven.test.failure.ignore -Dmaven.javadoc.skip 2>&1 | tee mvn-output.txt +jar-dir: target +--- +project: Apache C. Codec +version: 1.9 +dir: commons-codec-1.9 +source: https://archive.apache.org/dist/commons/codec/source/commons-codec-1.9-src.zip +post-extract-command: mv commons-codec-1.9-src commons-codec-1.9 +build-dir: . +build-command: mvn -B clean package -Dmaven.test.failure.ignore -Dmaven.javadoc.skip 2>&1 | tee mvn-output.txt +jar-dir: target +--- +project: Apache C. Collection +version: 4.0 +dir: commons-collections4-4.0 +source: https://archive.apache.org/dist/commons/collections/source/commons-collections4-4.0-src.zip +post-extract-command: mv commons-collections4-4.0-src commons-collections4-4.0 +build-dir: . +build-command: mvn -B clean package -Dmaven.test.failure.ignore -Dmaven.javadoc.skip 2>&1 | tee mvn-output.txt +jar-dir: target +--- +project: Apache C. Compress +version: 1.8 +dir: commons-compress-1.8 +source: https://archive.apache.org/dist/commons/compress/source/commons-compress-1.8-src.zip +post-extract-command: mv commons-compress-1.8-src commons-compress-1.8 +build-dir: . +build-command: mvn -B clean package -Dmaven.test.failure.ignore -Dmaven.javadoc.skip 2>&1 | tee mvn-output.txt +jar-dir: target +--- +project: Apache C. Lang +version: 3.0 +dir: commons-lang3-3.0 +source: https://archive.apache.org/dist/commons/lang/source/commons-lang3-3.0-src.zip +post-extract-command: mv commons-lang3-3.0-src commons-lang3-3.0 +build-dir: . +build-command: mvn -B clean package -Dmaven.test.failure.ignore -Dmaven.javadoc.skip 2>&1 | tee mvn-output.txt +jar-dir: target +--- +project: Apache C. Math +version: 3.2 +dir: commons-math3-3.2 +source: https://archive.apache.org/dist/commons/math/source/commons-math3-3.2-src.zip +post-extract-command: mv commons-math3-3.2-src commons-math3-3.2 && rm -rf commons-math3-3.2/src/main/resources/data commons-math3-3.2/src/main/resources/META-INF commons-math3-3.2/src/main/resources/templates commons-math3-3.2/src/site/resources/userguide +build-dir: . +build-command: mvn -B clean package -Dmaven.test.failure.ignore -Dmaven.javadoc.skip 2>&1 | tee mvn-output.txt +jar-dir: target +--- +project: Apache C. Primitive +version: 1.0 +dir: commons-primitives-1.0 +source: https://archive.apache.org/dist/commons/primitives/source/commons-primitives-1.0-src.zip +build-dir: . +build-command: ant jar +jar-dir: target +--- +project: Dcparseargs +version: 10/2008 +dir: dcParseArgs-10.2008 +source: https://sourceforge.net/projects/dcparseargs/files/Source/First%20upload/dcParseArgs_src.tar.bz2 +post-extract-command: mv dcParseArgs dcParseArgs-10.2008 && rm -rf dcParseArgs-10.2008/src/de/devcity/.svn dcParseArgs-10.2008/src/de/devcity/parseargs/arguments/.svn dcParseArgs-10.2008/src/de/devcity/parseargs/.svn dcParseArgs-10.2008/src/de/.svn dcParseArgs-10.2008/src/.svn dcParseArgs-10.2008/testsrc/de/devcity/.svn dcParseArgs-10.2008/testsrc/de/devcity/parseargs/.svn dcParseArgs-10.2008/testsrc/de/.svn dcParseArgs-10.2008/testsrc/.svn dcParseArgs-10.2008/.svn dcParseArgs-10.2008/.settings/.svn +build-dir: . +build-command: ant createJar +jar-dir: dist +--- +project: Easymock +version: 3.2 +dir: easymock-3.2 +source: https://github.com/easymock/easymock/archive/refs/tags/easymock-3.2.zip +post-extract-command: mv easymock-easymock-3.2 easymock-3.2 +build-dir: . +build-command: mvn -B clean package -Dmaven.test.failure.ignore -Dmaven.javadoc.skip 2>&1 | tee mvn-output.txt +jar-dir: easymock/target +--- +project: Fixsuite +version: R48 +dir: fixsuite-r48 +source: svn checkout --quiet https://svn.code.sf.net/p/fixsuite/code/trunk fixsuite-r48 +post-extract-command: rm -rf fixsuite-r48/.svn fixsuite-r48/model +build-dir: . +build-command: ant jar +jar-dir: jar +--- +project: Guava +version: 16.0.1 +dir: guava-16.0.1 +source: https://repo1.maven.org/maven2/com/google/guava/guava/16.0.1/guava-16.0.1-sources.jar +extraction-dir: guava-16.0.1 +post-extract-command: mkdir guava-16.0.1/src && mv guava-16.0.1/com guava-16.0.1/src/com +build-dir: . +build-command: mvn -B clean package -Dmaven.test.failure.ignore -Dmaven.javadoc.skip 2>&1 | tee mvn-output.txt +jar-dir: target +--- +project: Hamcrest-core +version: 1.3 +dir: hamcrest-core-1.3 +source: https://github.com/hamcrest/JavaHamcrest/archive/refs/tags/hamcrest-java-1.3.zip +post-extract-command: mv JavaHamcrest-hamcrest-java-1.3 hamcrest-core-1.3 +build-dir: . +build-command: ant core +jar-dir: build +--- +project: Javassit +version: 3.19 +dir: javassist-3.19 +source: https://github.com/jboss-javassist/javassist/archive/refs/tags/rel_3_19_0_ga.zip +post-extract-command: mv javassist-rel_3_19_0_ga javassist-3.19 +build-dir: . +build-command: ant jar +jar-dir: . +--- +project: Javax Mail +version: 1.5.1 +dir: javax.mail-1.5.1 +source: https://repo1.maven.org/maven2/com/sun/mail/javax.mail/1.5.1/javax.mail-1.5.1-sources.jar +extraction-dir: javax.mail-1.5.1 +post-extract-command: mkdir -p javax.mail-1.5.1/src/main/java && mv javax.mail-1.5.1/com javax.mail-1.5.1/javax javax.mail-1.5.1/src/main/java/ && ../.plume-scripts/preplace com\.sun\.mail com.sun1.mail javax.mail-1.5.1 && ../.plume-scripts/preplace javax\.mail javax1.mail javax.mail-1.5.1 +build-dir: . +build-command: mvn -B clean package -Dmaven.test.failure.ignore -Dmaven.javadoc.skip 2>&1 | tee mvn-output.txt +jar-dir: target +--- +project: Jaxen +version: 1.1.6 +dir: jaxen-1.1.6 +source: https://repo1.maven.org/maven2/jaxen/jaxen/1.1.6/jaxen-1.1.6-sources.jar +extraction-dir: jaxen-1.1.6 +post-extract-command: mkdir -p jaxen-1.1.6/src/java/main && mv jaxen-1.1.6/org jaxen-1.1.6/src/java/main/ +build-dir: . +build-command: mvn -B clean package -Dmaven.test.failure.ignore -Dmaven.javadoc.skip 2>&1 | tee mvn-output.txt +jar-dir: target +--- +project: Jcommander +version: 1.35 +dir: jcommander-1.35 +source: git clone --depth 1 --branch jcommander-1.35 -c advice.detachedHead=false git@github.com:cbeust/jcommander.git jcommander-1.35 +post-extract-command: rm -rf jcommander-1.35/.git +build-dir: . +build-command: mvn -B clean package -Dmaven.test.failure.ignore -Dmaven.javadoc.skip 2>&1 | tee mvn-output.txt +jar-dir: target +--- +project: Jdom +version: 1.0 +dir: jdom-1.0 +source: https://www.jdom.org/dist/binary/archive/jdom-1.0.zip +build-dir: . +build-command: ./build.sh +jar-dir: build +--- +project: Joda Time +version: 2.3 +dir: joda-time-2.3 +source: https://github.com/JodaOrg/joda-time/archive/refs/tags/v2.3.zip +build-dir: . +build-command: mvn -B clean package -Dmaven.test.failure.ignore -Dmaven.javadoc.skip 2>&1 | tee mvn-output.txt +jar-dir: target +--- +project: Java Simple Arg. Parser +version: 2.1 +dir: JSAP-2.1 +source: https://sourceforge.net/projects/jsap/files/jsap/2.1/JSAP-2.1-src.zip +build-dir: . +build-command: ant jar +jar-dir: dist +--- +project: Java View Control +version: 1.1 +dir: jvc-1.1 +source: https://sourceforge.net/projects/javaviewcontrol/files/javaviewcontrol/jvc-1.1/jvc-1.1.tar.gz +build-dir: . +build-command: ant tools +jar-dir: dist +--- +project: Multi-User Dungeon server +version: R16 +dir: nekomud-r16 +source: svn checkout --quiet https://svn.code.sf.net/p/nekomud/code/trunk nekomud-r16 +post-extract-command: rm -rf $(findfile .svn ClassViewer-5.0.5b) +build-dir: . +build-command: ant +jar-dir: dist +--- +project: Pmd DCD +version: 5.2.2 +dir: pmd-core-5.2.2 +source: git clone --depth 1 --branch pmd_releases/5.2.2 -c advice.detachedHead=false https://github.com/pmd/pmd.git pmd-core-5.2.2 +post-extract-command: rm -rf pmd-core-5.2.2/.git pmd-core-5.2.2/maven-plugin-pmd-build pmd-core-5.2.2/pmd-cpp pmd-core-5.2.2/pmd-cs pmd-core-5.2.2/pmd-dist pmd-core-5.2.2/pmd-fortran pmd-core-5.2.2/pmd-go pmd-core-5.2.2/pmd-java pmd-core-5.2.2/pmd-javascript pmd-core-5.2.2/pmd-jsp pmd-core-5.2.2/pmd-php pmd-core-5.2.2/pmd-plsql pmd-core-5.2.2/pmd-ruby pmd-core-5.2.2/pmd-test pmd-core-5.2.2/pmd-vm pmd-core-5.2.2/pmd-xml +build-dir: pmd-core +build-command: mvn -B clean package -Dmaven.test.skip -Dmaven.javadoc.skip -DjavaccBuildNotRequired +jar-dir: . +--- +project: SAT4J Core +version: 2.3.5 +dir: sat4j-core-2.3.5 +source: git clone --depth 1 --branch 2_3_5 -c advice.detachedHead=false https://gitlab.ow2.org/sat4j/sat4j.git sat4j-core-2.3.5 +post-extract-command: rm -rf sat4j-core-2.3.5/.git sat4j-core-2.3.5/org.sat4j.br4cp sat4j-core-2.3.5/org.sat4j.csp sat4j-core-2.3.5/org.sat4j.csp.xmlparser sat4j-core-2.3.5/org.sat4j.intervalorders sat4j-core-2.3.5/org.sat4j.maxsat sat4j-core-2.3.5/org.sat4j.pb sat4j-core-2.3.5/org.sat4j.sat sat4j-core-2.3.5/org.sat4j.scala sat4j-core-2.3.5/org.sat4j.sudoku +build-dir: . +build-command: mvn -B clean package -Dmaven.test.failure.ignore -Dmaven.javadoc.skip 2>&1 | tee mvn-output.txt +jar-dir: org.sat4j.core/target +--- +project: Apache Shiro-core +version: 1.2.6 +dir: shiro-core-1.2.3 +source: https://archive.apache.org/dist/shiro/1.2.3/shiro-root-1.2.3-source-release.zip +post-extract-command: mv shiro-root-1.2.3 shiro-core-1.2.3 +build-dir: core +build-command: mvn -B clean package -Dmaven.test.failure.ignore -Dmaven.javadoc.skip 2>&1 | tee mvn-output.txt +jar-dir: target +--- +project: Slf4j-api +version: 1.7.12 +dir: slf4j-api-1.7.12 +source: https://github.com/qos-ch/slf4j/archive/refs/tags/v_1.7.12.zip +post-extract-command: mv slf4j-v_1.7.12 slf4j-api-1.7.12 && rm -rf slf4j-api-1.7.12/integration slf4j-api-1.7.12/jcl-over-slf4j slf4j-api-1.7.12/jul-to-slf4j slf4j-api-1.7.12/log4j-over-slf4j slf4j-api-1.7.12/osgi-over-slf4j slf4j-api-1.7.12/slf4j-android slf4j-api-1.7.12/slf4j-ext slf4j-api-1.7.12/slf4j-jcl slf4j-api-1.7.12/slf4j-jdk14 slf4j-api-1.7.12/slf4j-log4j12 slf4j-api-1.7.12/slf4j-migrator slf4j-api-1.7.12/slf4j-nop slf4j-api-1.7.12/slf4j-simple slf4j-api-1.7.12/slf4j-site slf4j-api-1.7.12/src && ../.plume-scripts/preplace org\.slf4j\. org1.slf4j. slf4j-api-1.7.12 && ../.plume-scripts/preplace org\.slf4j; org1.slf4j; slf4j-api-1.7.12 +build-dir: slf4j-api +build-command: mvn -B clean package -Dmaven.test.failure.ignore -Dmaven.javadoc.skip 2>&1 | tee mvn-output.txt +jar-dir: target +--- +project: Tiny Sql +version: 2.26 +dir: tiny-sql-2.26 +source: https://sourceforge.net/projects/tinysql/files/tinySQL2.26/V2.26/tinySQL-2.26.zip +post-extract-command: mv tinySQL-2 tiny-sql-2.26 && rm -f tiny-sql-2.26/src/com/sqlmagic/tinysql/junk +build-dir: . +build-command: ./build.sh +jar-dir: classes diff --git a/subject-programs/buildall.py b/subject-programs/buildall.py new file mode 100755 index 0000000..56b70ac --- /dev/null +++ b/subject-programs/buildall.py @@ -0,0 +1,3 @@ +#!/usr/bin/env python3 + +"""TODO.""" diff --git a/subject-programs/buildall.sh b/subject-programs/buildall.sh new file mode 100755 index 0000000..4528b0c --- /dev/null +++ b/subject-programs/buildall.sh @@ -0,0 +1,109 @@ +#!/bin/sh + +set -e + +JAVA_VER=$(java -version 2>&1 | head -1 | cut -d'"' -f2 | sed '/^1\./s///' | cut -d'.' -f1 | sed 's/-ea//') +if [ "$JAVA_VER" != "8" ]; then + echo "Use Java 8" + exit 2 +fi + +# The commands are taken from file `README.build`. + +SCRIPT_DIR="$(CDPATH='' cd -- "$(dirname -- "$0")" && pwd -P)" +# SCRIPT_NAME=$(basename -- "$0") + +"${SCRIPT_DIR}"/../scripts/get-all-subject-src.sh + +cd "${SCRIPT_DIR}"/src || exit 2 + +(cd a4j-1.0b \ + && ant createJar) + +(cd asm-5.0.1 \ + && mvn -B clean package -Dmaven.test.failure.ignore -Dmaven.javadoc.skip 2>&1 | tee mvn-output.txt) + +(cd bcel-5.2 \ + && ant jar) + +(cd ClassViewer-5.0.5b \ + && ant build) + +(cd commons-cli-1.2 \ + && mvn -B clean package -Dmaven.test.failure.ignore -Dmaven.javadoc.skip 2>&1 | tee mvn-output.txt) + +(cd commons-codec-1.9 \ + && mvn -B clean package -Dmaven.test.failure.ignore -Dmaven.javadoc.skip 2>&1 | tee mvn-output.txt) + +(cd commons-collections4-4.0 \ + && mvn -B clean package -Dmaven.test.failure.ignore -Dmaven.javadoc.skip 2>&1 | tee mvn-output.txt) + +(cd commons-compress-1.8 \ + && mvn -B clean package -Dmaven.test.failure.ignore -Dmaven.javadoc.skip 2>&1 | tee mvn-output.txt) + +(cd commons-lang3-3.0 \ + && mvn -B clean package -Dmaven.test.failure.ignore -Dmaven.javadoc.skip 2>&1 | tee mvn-output.txt) + +(cd commons-math3-3.2 \ + && mvn -B clean package -Dmaven.test.failure.ignore -Dmaven.javadoc.skip 2>&1 | tee mvn-output.txt) + +(cd commons-primitives-1.0 \ + && ant jar) + +(cd dcParseArgs-10.2008 \ + && ant createJar) + +(cd easymock-3.2 \ + && mvn -B clean package -Dmaven.test.failure.ignore -Dmaven.javadoc.skip 2>&1 | tee mvn-output.txt) + +(cd fixsuite-r48 \ + && ant jar) + +(cd guava-16.0.1 \ + && mvn -B clean package -Dmaven.test.failure.ignore -Dmaven.javadoc.skip 2>&1 | tee mvn-output.txt) + +(cd hamcrest-core-1.3 \ + && ant core) + +(cd javassist-3.19 \ + && ant jar) + +(cd jaxax.mail-1.5.1 \ + && mvn -B clean package -Dmaven.test.failure.ignore -Dmaven.javadoc.skip 2>&1 | tee mvn-output.txt) + +(cd jaxen-1.1.6 \ + && mvn -B clean package -Dmaven.test.failure.ignore -Dmaven.javadoc.skip 2>&1 | tee mvn-output.txt) + +(cd jcommander-1.35 \ + && mvn -B clean package -Dmaven.test.failure.ignore -Dmaven.javadoc.skip 2>&1 | tee mvn-output.txt) + +(cd jdom-1.0 \ + && ./build.sh) + +(cd joda-time-2.3 \ + && mvn -B clean package -Dmaven.test.failure.ignore -Dmaven.javadoc.skip 2>&1 | tee mvn-output.txt) + +(cd JSAP-2.1 \ + && ant jar) + +(cd jvc-1.1 \ + && ant tools) + +(cd nekomud-r16 \ + && ant) + +(cd pmd-core-5.2.2/pmd-core \ + && mvn -B clean package -Dmaven.test.skip -Dmaven.javadoc.skip -DjavaccBuildNotRequired) + +(cd sat4j.core-2.3.5 \ + && mvn -B clean package -Dmaven.test.failure.ignore -Dmaven.javadoc.skip 2>&1 | tee mvn-output.txt) + +(cd shiro-core-1.2.3/core \ + && mvn -B clean package -Dmaven.test.failure.ignore -Dmaven.javadoc.skip 2>&1 | tee mvn-output.txt) + +(cd slf4j-api-1.7.12/slf4j-api \ + && mvn -B clean package -Dmaven.test.failure.ignore -Dmaven.javadoc.skip 2>&1 | tee mvn-output.txt) + +usejdk8 +(cd tiny-sql-2.26 \ + && ./build.sh) diff --git a/subject-programs/get-grt-source.sh b/subject-programs/get-grt-source.sh new file mode 100755 index 0000000..c8f43e0 --- /dev/null +++ b/subject-programs/get-grt-source.sh @@ -0,0 +1,31 @@ +#!/bin/sh + +# This script clones the repositories for each subject program, in +# subject-programs/src/. If the repository already exists, it pulls the +# latest changes. + +SCRIPT_DIR="$(CDPATH='' cd -- "$(dirname -- "$0")" && pwd -P)" + +set -e + +SUBJECT_GRT_SRC_DIR="${SCRIPT_DIR}/../subject-programs/src-grt" +mkdir -p "${SUBJECT_GRT_SRC_DIR}" +cd "${SUBJECT_GRT_SRC_DIR}" + +grt_clone() { + printf '%s:' "$1" + if [ -d "$1" ]; then + echo " updating." + (cd "$1" && git pull -q) + else + echo " cloning." + git clone -q https://github.com/randoop/grt-"$1" "$1" \ + || { echo "Error: Failed to clone grt-$1. Retrying without -q..." >&2; \ + git clone https://github.com/randoop/grt-"$1" "$1"; } + fi +} + +# shellcheck disable=SC2013 +for dir in $(grep "^dir:" ../build-info.yaml | sed 's/^dir: //'); do + grt_clone "$dir" +done diff --git a/subject-programs/get-upstream-source.py b/subject-programs/get-upstream-source.py new file mode 100755 index 0000000..f215225 --- /dev/null +++ b/subject-programs/get-upstream-source.py @@ -0,0 +1,74 @@ +#!/usr/bin/env python3 + +"""Obtains the upstream sources and leaves them in `subject-programs/src-upstream`.""" + +import pathlib +import shlex +import subprocess +import tarfile +import zipfile +from urllib.request import urlretrieve + +import yaml +from yaml.loader import SafeLoader + +script_directory = pathlib.Path(__file__).parent.resolve() + +with pathlib.Path(script_directory / "build-info.yaml").open() as f: + yaml_data = list(yaml.load_all(f, Loader=SafeLoader)) + +src_upstream_dir = script_directory / "src-upstream" +src_upstream_dir.mkdir(exist_ok=True) + +for project in yaml_data: + source = project["source"] + proj_dir = project["dir"] + project_dir = src_upstream_dir / proj_dir + if project_dir.is_dir(): + print("Skipping", proj_dir, "because it exists.") + continue + print("About to get", source) + if source.startswith("http"): + basename = source.name + archive_path = src_upstream_dir / basename + dest_dir = src_upstream_dir + key = "extraction-dir" + if key in project: + dest_dir = src_upstream_dir / project[key] + urlretrieve(source, archive_path) + if source.endswith((".zip", ".jar")): + with zipfile.ZipFile(archive_path, "r") as zf: + zf.extractall(dest_dir) + elif source.endswith(".tar.bz2"): + with tarfile.open(archive_path, "r:bz2") as tar: + tar.extractall(path=dest_dir) + elif source.endswith(".tar.gz"): + with tarfile.open(archive_path, "r:gz") as tar: + tar.extractall(path=dest_dir) + else: + raise Exception("Unknown archive type: " + source) + else: + command = shlex.split(source) + print("command = ", command) + completed_process = subprocess.run( + command, cwd=src_upstream_dir, capture_output=True, text=True + ) + if completed_process.returncode != 0: + print("stdout", completed_process.stdout) + print("stderr", completed_process.stderr) + msg = f"Command failed: {' '.join(command)}" + raise Exception(msg) + key = "post-extract-command" + if key in project: + commands = project[key].split(" && ") + for command_unsplit in commands: + command = shlex.split(command_unsplit) + print("dir =", src_upstream_dir) + print("command =", command) + completed_process = subprocess.run(command, cwd=src_upstream_dir) + if completed_process.returncode != 0: + print("stdout", completed_process.stdout) + print("stderr", completed_process.stderr) + raise Exception("command failed: ", command) + if source.startswith("http"): + pathlib.Path(archive_path).rename(src_upstream_dir / proj_dir / basename) diff --git a/subject-programs/ClassViewer-5.0.5b.jar b/subject-programs/jars/ClassViewer-5.0.5b.jar similarity index 100% rename from subject-programs/ClassViewer-5.0.5b.jar rename to subject-programs/jars/ClassViewer-5.0.5b.jar diff --git a/subject-programs/JSAP-2.1.jar b/subject-programs/jars/JSAP-2.1.jar similarity index 100% rename from subject-programs/JSAP-2.1.jar rename to subject-programs/jars/JSAP-2.1.jar diff --git a/subject-programs/a4j-1.0b.jar b/subject-programs/jars/a4j-1.0b.jar similarity index 100% rename from subject-programs/a4j-1.0b.jar rename to subject-programs/jars/a4j-1.0b.jar diff --git a/subject-programs/asm-5.0.1.jar b/subject-programs/jars/asm-5.0.1.jar similarity index 100% rename from subject-programs/asm-5.0.1.jar rename to subject-programs/jars/asm-5.0.1.jar diff --git a/subject-programs/bcel-5.2.jar b/subject-programs/jars/bcel-5.2.jar similarity index 100% rename from subject-programs/bcel-5.2.jar rename to subject-programs/jars/bcel-5.2.jar diff --git a/subject-programs/commons-cli-1.2.jar b/subject-programs/jars/commons-cli-1.2.jar similarity index 100% rename from subject-programs/commons-cli-1.2.jar rename to subject-programs/jars/commons-cli-1.2.jar diff --git a/subject-programs/commons-codec-1.9.jar b/subject-programs/jars/commons-codec-1.9.jar similarity index 100% rename from subject-programs/commons-codec-1.9.jar rename to subject-programs/jars/commons-codec-1.9.jar diff --git a/subject-programs/commons-collections4-4.0.jar b/subject-programs/jars/commons-collections4-4.0.jar similarity index 100% rename from subject-programs/commons-collections4-4.0.jar rename to subject-programs/jars/commons-collections4-4.0.jar diff --git a/subject-programs/commons-compress-1.8.jar b/subject-programs/jars/commons-compress-1.8.jar similarity index 100% rename from subject-programs/commons-compress-1.8.jar rename to subject-programs/jars/commons-compress-1.8.jar diff --git a/subject-programs/commons-lang3-3.0.jar b/subject-programs/jars/commons-lang3-3.0.jar similarity index 100% rename from subject-programs/commons-lang3-3.0.jar rename to subject-programs/jars/commons-lang3-3.0.jar diff --git a/subject-programs/commons-math3-3.2.jar b/subject-programs/jars/commons-math3-3.2.jar similarity index 100% rename from subject-programs/commons-math3-3.2.jar rename to subject-programs/jars/commons-math3-3.2.jar diff --git a/subject-programs/commons-primitives-1.0.jar b/subject-programs/jars/commons-primitives-1.0.jar similarity index 100% rename from subject-programs/commons-primitives-1.0.jar rename to subject-programs/jars/commons-primitives-1.0.jar diff --git a/subject-programs/dcParseArgs-10.2008.jar b/subject-programs/jars/dcParseArgs-10.2008.jar similarity index 100% rename from subject-programs/dcParseArgs-10.2008.jar rename to subject-programs/jars/dcParseArgs-10.2008.jar diff --git a/subject-programs/easymock-3.2.jar b/subject-programs/jars/easymock-3.2.jar similarity index 100% rename from subject-programs/easymock-3.2.jar rename to subject-programs/jars/easymock-3.2.jar diff --git a/subject-programs/fixsuite-r48.jar b/subject-programs/jars/fixsuite-r48.jar similarity index 100% rename from subject-programs/fixsuite-r48.jar rename to subject-programs/jars/fixsuite-r48.jar diff --git a/subject-programs/guava-16.0.1.jar b/subject-programs/jars/guava-16.0.1.jar similarity index 100% rename from subject-programs/guava-16.0.1.jar rename to subject-programs/jars/guava-16.0.1.jar diff --git a/subject-programs/hamcrest-core-1.3.jar b/subject-programs/jars/hamcrest-core-1.3.jar similarity index 100% rename from subject-programs/hamcrest-core-1.3.jar rename to subject-programs/jars/hamcrest-core-1.3.jar diff --git a/subject-programs/javassist-3.19.jar b/subject-programs/jars/javassist-3.19.jar similarity index 100% rename from subject-programs/javassist-3.19.jar rename to subject-programs/jars/javassist-3.19.jar diff --git a/subject-programs/javax.mail-1.5.1.jar b/subject-programs/jars/javax.mail-1.5.1.jar similarity index 100% rename from subject-programs/javax.mail-1.5.1.jar rename to subject-programs/jars/javax.mail-1.5.1.jar diff --git a/subject-programs/jaxen-1.1.6.jar b/subject-programs/jars/jaxen-1.1.6.jar similarity index 100% rename from subject-programs/jaxen-1.1.6.jar rename to subject-programs/jars/jaxen-1.1.6.jar diff --git a/subject-programs/jcommander-1.35.jar b/subject-programs/jars/jcommander-1.35.jar similarity index 100% rename from subject-programs/jcommander-1.35.jar rename to subject-programs/jars/jcommander-1.35.jar diff --git a/subject-programs/jdom-1.0.jar b/subject-programs/jars/jdom-1.0.jar similarity index 100% rename from subject-programs/jdom-1.0.jar rename to subject-programs/jars/jdom-1.0.jar diff --git a/subject-programs/joda-time-2.3.jar b/subject-programs/jars/joda-time-2.3.jar similarity index 100% rename from subject-programs/joda-time-2.3.jar rename to subject-programs/jars/joda-time-2.3.jar diff --git a/subject-programs/jvc-1.1.jar b/subject-programs/jars/jvc-1.1.jar similarity index 100% rename from subject-programs/jvc-1.1.jar rename to subject-programs/jars/jvc-1.1.jar diff --git a/subject-programs/nekomud-r16.jar b/subject-programs/jars/nekomud-r16.jar similarity index 100% rename from subject-programs/nekomud-r16.jar rename to subject-programs/jars/nekomud-r16.jar diff --git a/subject-programs/pmd-core-5.2.2.jar b/subject-programs/jars/pmd-core-5.2.2.jar similarity index 100% rename from subject-programs/pmd-core-5.2.2.jar rename to subject-programs/jars/pmd-core-5.2.2.jar diff --git a/subject-programs/sat4j-core-2.3.5.jar b/subject-programs/jars/sat4j-core-2.3.5.jar similarity index 100% rename from subject-programs/sat4j-core-2.3.5.jar rename to subject-programs/jars/sat4j-core-2.3.5.jar diff --git a/subject-programs/shiro-core-1.2.3.jar b/subject-programs/jars/shiro-core-1.2.3.jar similarity index 100% rename from subject-programs/shiro-core-1.2.3.jar rename to subject-programs/jars/shiro-core-1.2.3.jar diff --git a/subject-programs/slf4j-api-1.7.12.jar b/subject-programs/jars/slf4j-api-1.7.12.jar similarity index 100% rename from subject-programs/slf4j-api-1.7.12.jar rename to subject-programs/jars/slf4j-api-1.7.12.jar diff --git a/subject-programs/tiny-sql-2.26.jar b/subject-programs/jars/tiny-sql-2.26.jar similarity index 100% rename from subject-programs/tiny-sql-2.26.jar rename to subject-programs/jars/tiny-sql-2.26.jar diff --git a/uv.lock b/uv.lock index 8f811db..ebccb50 100644 --- a/uv.lock +++ b/uv.lock @@ -202,65 +202,65 @@ wheels = [ [[package]] name = "fonttools" -version = "4.61.0" +version = "4.61.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/33/f9/0e84d593c0e12244150280a630999835a64f2852276161b62a0f98318de0/fonttools-4.61.0.tar.gz", hash = "sha256:ec520a1f0c7758d7a858a00f090c1745f6cde6a7c5e76fb70ea4044a15f712e7", size = 3561884, upload-time = "2025-11-28T17:05:49.491Z" } +sdist = { url = "https://files.pythonhosted.org/packages/ec/ca/cf17b88a8df95691275a3d77dc0a5ad9907f328ae53acbe6795da1b2f5ed/fonttools-4.61.1.tar.gz", hash = "sha256:6675329885c44657f826ef01d9e4fb33b9158e9d93c537d84ad8399539bc6f69", size = 3565756, upload-time = "2025-12-12T17:31:24.246Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/29/f3/91bba2721fb173fc68e09d15b6ccf3ad4f83d127fbff579be7e5984888a6/fonttools-4.61.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:dc25a4a9c1225653e4431a9413d0381b1c62317b0f543bdcec24e1991f612f33", size = 2850151, upload-time = "2025-11-28T17:04:14.214Z" }, - { url = "https://files.pythonhosted.org/packages/f5/8c/a1691dec01038ac7e7bb3ab83300dcc5087b11d8f48640928c02a873eb92/fonttools-4.61.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6b493c32d2555e9944ec1b911ea649ff8f01a649ad9cba6c118d6798e932b3f0", size = 2389769, upload-time = "2025-11-28T17:04:16.443Z" }, - { url = "https://files.pythonhosted.org/packages/2d/dd/5bb369a44319d92ba25612511eb8ed2a6fa75239979e0388907525626902/fonttools-4.61.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ad751319dc532a79bdf628b8439af167181b4210a0cd28a8935ca615d9fdd727", size = 4893189, upload-time = "2025-11-28T17:04:18.398Z" }, - { url = "https://files.pythonhosted.org/packages/5e/02/51373fa8846bd22bb54e5efb30a824b417b058083f775a194a432f21a45f/fonttools-4.61.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:2de14557d113faa5fb519f7f29c3abe4d69c17fe6a5a2595cc8cda7338029219", size = 4854415, upload-time = "2025-11-28T17:04:20.421Z" }, - { url = "https://files.pythonhosted.org/packages/8b/64/9cdbbb804577a7e6191448851c57e6a36eb02aa4bf6a9668b528c968e44e/fonttools-4.61.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:59587bbe455dbdf75354a9dbca1697a35a8903e01fab4248d6b98a17032cee52", size = 4870927, upload-time = "2025-11-28T17:04:22.625Z" }, - { url = "https://files.pythonhosted.org/packages/92/68/e40b22919dc96dc30a70b58fec609ab85112de950bdecfadf8dd478c5a88/fonttools-4.61.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:46cb3d9279f758ac0cf671dc3482da877104b65682679f01b246515db03dbb72", size = 4988674, upload-time = "2025-11-28T17:04:24.675Z" }, - { url = "https://files.pythonhosted.org/packages/9b/5c/e857349ce8aedb2451b9448282e86544b2b7f1c8b10ea0fe49b7cb369b72/fonttools-4.61.0-cp310-cp310-win32.whl", hash = "sha256:58b4f1b78dfbfe855bb8a6801b31b8cdcca0e2847ec769ad8e0b0b692832dd3b", size = 1497663, upload-time = "2025-11-28T17:04:26.598Z" }, - { url = "https://files.pythonhosted.org/packages/f9/0c/62961d5fe6f764d6cbc387ef2c001f5f610808c7aded837409836c0b3e7c/fonttools-4.61.0-cp310-cp310-win_amd64.whl", hash = "sha256:68704a8bbe0b61976262b255e90cde593dc0fe3676542d9b4d846bad2a890a76", size = 1546143, upload-time = "2025-11-28T17:04:28.432Z" }, - { url = "https://files.pythonhosted.org/packages/fd/be/5aa89cdddf2863d8afbdc19eb8ec5d8d35d40eeeb8e6cf52c5ff1c2dbd33/fonttools-4.61.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:a32a16951cbf113d38f1dd8551b277b6e06e0f6f776fece0f99f746d739e1be3", size = 2847553, upload-time = "2025-11-28T17:04:30.539Z" }, - { url = "https://files.pythonhosted.org/packages/0d/3e/6ff643b07cead1236a534f51291ae2981721cf419135af5b740c002a66dd/fonttools-4.61.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:328a9c227984bebaf69f3ac9062265f8f6acc7ddf2e4e344c63358579af0aa3d", size = 2388298, upload-time = "2025-11-28T17:04:32.161Z" }, - { url = "https://files.pythonhosted.org/packages/c3/15/fca8dfbe7b482e6f240b1aad0ed7c6e2e75e7a28efa3d3a03b570617b5e5/fonttools-4.61.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2f0bafc8a3b3749c69cc610e5aa3da832d39c2a37a68f03d18ec9a02ecaac04a", size = 5054133, upload-time = "2025-11-28T17:04:34.035Z" }, - { url = "https://files.pythonhosted.org/packages/6a/a2/821c61c691b21fd09e07528a9a499cc2b075ac83ddb644aa16c9875a64bc/fonttools-4.61.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:b5ca59b7417d149cf24e4c1933c9f44b2957424fc03536f132346d5242e0ebe5", size = 5031410, upload-time = "2025-11-28T17:04:36.141Z" }, - { url = "https://files.pythonhosted.org/packages/e8/f6/8b16339e93d03c732c8a23edefe3061b17a5f9107ddc47a3215ecd054cac/fonttools-4.61.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:df8cbce85cf482eb01f4551edca978c719f099c623277bda8332e5dbe7dba09d", size = 5030005, upload-time = "2025-11-28T17:04:38.314Z" }, - { url = "https://files.pythonhosted.org/packages/ac/eb/d4e150427bdaa147755239c931bbce829a88149ade5bfd8a327afe565567/fonttools-4.61.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:7fb5b84f48a6a733ca3d7f41aa9551908ccabe8669ffe79586560abcc00a9cfd", size = 5154026, upload-time = "2025-11-28T17:04:40.34Z" }, - { url = "https://files.pythonhosted.org/packages/7f/5f/3dd00ce0dba6759943c707b1830af8c0bcf6f8f1a9fe46cb82e7ac2aaa74/fonttools-4.61.0-cp311-cp311-win32.whl", hash = "sha256:787ef9dfd1ea9fe49573c272412ae5f479d78e671981819538143bec65863865", size = 2276035, upload-time = "2025-11-28T17:04:42.59Z" }, - { url = "https://files.pythonhosted.org/packages/4e/44/798c472f096ddf12955eddb98f4f7c906e7497695d04ce073ddf7161d134/fonttools-4.61.0-cp311-cp311-win_amd64.whl", hash = "sha256:14fafda386377b6131d9e448af42d0926bad47e038de0e5ba1d58c25d621f028", size = 2327290, upload-time = "2025-11-28T17:04:44.57Z" }, - { url = "https://files.pythonhosted.org/packages/00/5d/19e5939f773c7cb05480fe2e881d63870b63ee2b4bdb9a77d55b1d36c7b9/fonttools-4.61.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:e24a1565c4e57111ec7f4915f8981ecbb61adf66a55f378fdc00e206059fcfef", size = 2846930, upload-time = "2025-11-28T17:04:46.639Z" }, - { url = "https://files.pythonhosted.org/packages/25/b2/0658faf66f705293bd7e739a4f038302d188d424926be9c59bdad945664b/fonttools-4.61.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:e2bfacb5351303cae9f072ccf3fc6ecb437a6f359c0606bae4b1ab6715201d87", size = 2383016, upload-time = "2025-11-28T17:04:48.525Z" }, - { url = "https://files.pythonhosted.org/packages/29/a3/1fa90b95b690f0d7541f48850adc40e9019374d896c1b8148d15012b2458/fonttools-4.61.0-cp312-cp312-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:0bdcf2e29d65c26299cc3d502f4612365e8b90a939f46cd92d037b6cb7bb544a", size = 4949425, upload-time = "2025-11-28T17:04:50.482Z" }, - { url = "https://files.pythonhosted.org/packages/af/00/acf18c00f6c501bd6e05ee930f926186f8a8e268265407065688820f1c94/fonttools-4.61.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e6cd0d9051b8ddaf7385f99dd82ec2a058e2b46cf1f1961e68e1ff20fcbb61af", size = 4999632, upload-time = "2025-11-28T17:04:52.508Z" }, - { url = "https://files.pythonhosted.org/packages/5f/e0/19a2b86e54109b1d2ee8743c96a1d297238ae03243897bc5345c0365f34d/fonttools-4.61.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e074bc07c31406f45c418e17c1722e83560f181d122c412fa9e815df0ff74810", size = 4939438, upload-time = "2025-11-28T17:04:54.437Z" }, - { url = "https://files.pythonhosted.org/packages/04/35/7b57a5f57d46286360355eff8d6b88c64ab6331107f37a273a71c803798d/fonttools-4.61.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:5a9b78da5d5faa17e63b2404b77feeae105c1b7e75f26020ab7a27b76e02039f", size = 5088960, upload-time = "2025-11-28T17:04:56.348Z" }, - { url = "https://files.pythonhosted.org/packages/3e/0e/6c5023eb2e0fe5d1ababc7e221e44acd3ff668781489cc1937a6f83d620a/fonttools-4.61.0-cp312-cp312-win32.whl", hash = "sha256:9821ed77bb676736b88fa87a737c97b6af06e8109667e625a4f00158540ce044", size = 2264404, upload-time = "2025-11-28T17:04:58.149Z" }, - { url = "https://files.pythonhosted.org/packages/36/0b/63273128c7c5df19b1e4cd92e0a1e6ea5bb74a400c4905054c96ad60a675/fonttools-4.61.0-cp312-cp312-win_amd64.whl", hash = "sha256:0011d640afa61053bc6590f9a3394bd222de7cfde19346588beabac374e9d8ac", size = 2314427, upload-time = "2025-11-28T17:04:59.812Z" }, - { url = "https://files.pythonhosted.org/packages/17/45/334f0d7f181e5473cfb757e1b60f4e60e7fc64f28d406e5d364a952718c0/fonttools-4.61.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ba774b8cbd8754f54b8eb58124e8bd45f736b2743325ab1a5229698942b9b433", size = 2841801, upload-time = "2025-11-28T17:05:01.621Z" }, - { url = "https://files.pythonhosted.org/packages/cc/63/97b9c78e1f79bc741d4efe6e51f13872d8edb2b36e1b9fb2bab0d4491bb7/fonttools-4.61.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:c84b430616ed73ce46e9cafd0bf0800e366a3e02fb7e1ad7c1e214dbe3862b1f", size = 2379024, upload-time = "2025-11-28T17:05:03.668Z" }, - { url = "https://files.pythonhosted.org/packages/4e/80/c87bc524a90dbeb2a390eea23eae448286983da59b7e02c67fa0ca96a8c5/fonttools-4.61.0-cp313-cp313-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:b2b734d8391afe3c682320840c8191de9bd24e7eb85768dd4dc06ed1b63dbb1b", size = 4923706, upload-time = "2025-11-28T17:05:05.494Z" }, - { url = "https://files.pythonhosted.org/packages/6d/f6/a3b0374811a1de8c3f9207ec88f61ad1bb96f938ed89babae26c065c2e46/fonttools-4.61.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a5c5fff72bf31b0e558ed085e4fd7ed96eb85881404ecc39ed2a779e7cf724eb", size = 4979751, upload-time = "2025-11-28T17:05:07.665Z" }, - { url = "https://files.pythonhosted.org/packages/a5/3b/30f63b4308b449091573285f9d27619563a84f399946bca3eadc9554afbe/fonttools-4.61.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:14a290c5c93fcab76b7f451e6a4b7721b712d90b3b5ed6908f1abcf794e90d6d", size = 4921113, upload-time = "2025-11-28T17:05:09.551Z" }, - { url = "https://files.pythonhosted.org/packages/41/6c/58e6e9b7d9d8bf2d7010bd7bb493060b39b02a12d1cda64a8bfb116ce760/fonttools-4.61.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:13e3e20a5463bfeb77b3557d04b30bd6a96a6bb5c15c7b2e7908903e69d437a0", size = 5063183, upload-time = "2025-11-28T17:05:11.677Z" }, - { url = "https://files.pythonhosted.org/packages/3f/e3/52c790ab2b07492df059947a1fd7778e105aac5848c0473029a4d20481a2/fonttools-4.61.0-cp313-cp313-win32.whl", hash = "sha256:6781e7a4bb010be1cd69a29927b0305c86b843395f2613bdabe115f7d6ea7f34", size = 2263159, upload-time = "2025-11-28T17:05:13.292Z" }, - { url = "https://files.pythonhosted.org/packages/e9/1f/116013b200fbeba871046554d5d2a45fefa69a05c40e9cdfd0d4fff53edc/fonttools-4.61.0-cp313-cp313-win_amd64.whl", hash = "sha256:c53b47834ae41e8e4829171cc44fec0fdf125545a15f6da41776b926b9645a9a", size = 2313530, upload-time = "2025-11-28T17:05:14.848Z" }, - { url = "https://files.pythonhosted.org/packages/d3/99/59b1e25987787cb714aa9457cee4c9301b7c2153f0b673e2b8679d37669d/fonttools-4.61.0-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:96dfc9bc1f2302224e48e6ee37e656eddbab810b724b52e9d9c13a57a6abad01", size = 2841429, upload-time = "2025-11-28T17:05:16.671Z" }, - { url = "https://files.pythonhosted.org/packages/2b/b2/4c1911d4332c8a144bb3b44416e274ccca0e297157c971ea1b3fbb855590/fonttools-4.61.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:3b2065d94e5d63aafc2591c8b6ccbdb511001d9619f1bca8ad39b745ebeb5efa", size = 2378987, upload-time = "2025-11-28T17:05:18.69Z" }, - { url = "https://files.pythonhosted.org/packages/24/b0/f442e90fde5d2af2ae0cb54008ab6411edc557ee33b824e13e1d04925ac9/fonttools-4.61.0-cp314-cp314-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:e0d87e81e4d869549585ba0beb3f033718501c1095004f5e6aef598d13ebc216", size = 4873270, upload-time = "2025-11-28T17:05:20.625Z" }, - { url = "https://files.pythonhosted.org/packages/bb/04/f5d5990e33053c8a59b90b1d7e10ad9b97a73f42c745304da0e709635fab/fonttools-4.61.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1cfa2eb9bae650e58f0e8ad53c49d19a844d6034d6b259f30f197238abc1ccee", size = 4968270, upload-time = "2025-11-28T17:05:22.515Z" }, - { url = "https://files.pythonhosted.org/packages/94/9f/2091402e0d27c9c8c4bab5de0e5cd146d9609a2d7d1c666bbb75c0011c1a/fonttools-4.61.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:4238120002e68296d55e091411c09eab94e111c8ce64716d17df53fd0eb3bb3d", size = 4919799, upload-time = "2025-11-28T17:05:24.437Z" }, - { url = "https://files.pythonhosted.org/packages/a8/72/86adab22fde710b829f8ffbc8f264df01928e5b7a8f6177fa29979ebf256/fonttools-4.61.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:b6ceac262cc62bec01b3bb59abccf41b24ef6580869e306a4e88b7e56bb4bdda", size = 5030966, upload-time = "2025-11-28T17:05:26.115Z" }, - { url = "https://files.pythonhosted.org/packages/e8/a7/7c8e31b003349e845b853f5e0a67b95ff6b052fa4f5224f8b72624f5ac69/fonttools-4.61.0-cp314-cp314-win32.whl", hash = "sha256:adbb4ecee1a779469a77377bbe490565effe8fce6fb2e6f95f064de58f8bac85", size = 2267243, upload-time = "2025-11-28T17:05:27.807Z" }, - { url = "https://files.pythonhosted.org/packages/20/ee/f434fe7749360497c52b7dcbcfdbccdaab0a71c59f19d572576066717122/fonttools-4.61.0-cp314-cp314-win_amd64.whl", hash = "sha256:02bdf8e04d1a70476564b8640380f04bb4ac74edc1fc71f1bacb840b3e398ee9", size = 2318822, upload-time = "2025-11-28T17:05:29.882Z" }, - { url = "https://files.pythonhosted.org/packages/33/b3/c16255320255e5c1863ca2b2599bb61a46e2f566db0bbb9948615a8fe692/fonttools-4.61.0-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:627216062d90ab0d98215176d8b9562c4dd5b61271d35f130bcd30f6a8aaa33a", size = 2924917, upload-time = "2025-11-28T17:05:31.46Z" }, - { url = "https://files.pythonhosted.org/packages/e2/b8/08067ae21de705a817777c02ef36ab0b953cbe91d8adf134f9c2da75ed6d/fonttools-4.61.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:7b446623c9cd5f14a59493818eaa80255eec2468c27d2c01b56e05357c263195", size = 2413576, upload-time = "2025-11-28T17:05:33.343Z" }, - { url = "https://files.pythonhosted.org/packages/42/f1/96ff43f92addce2356780fdc203f2966206f3d22ea20e242c27826fd7442/fonttools-4.61.0-cp314-cp314t-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:70e2a0c0182ee75e493ef33061bfebf140ea57e035481d2f95aa03b66c7a0e05", size = 4877447, upload-time = "2025-11-28T17:05:35.278Z" }, - { url = "https://files.pythonhosted.org/packages/d0/1e/a3d8e51ed9ccfd7385e239ae374b78d258a0fb82d82cab99160a014a45d1/fonttools-4.61.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9064b0f55b947e929ac669af5311ab1f26f750214db6dd9a0c97e091e918f486", size = 5095681, upload-time = "2025-11-28T17:05:37.142Z" }, - { url = "https://files.pythonhosted.org/packages/eb/f6/d256bd6c1065c146a0bdddf1c62f542e08ae5b3405dbf3fcc52be272f674/fonttools-4.61.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:2cb5e45a824ce14b90510024d0d39dae51bd4fbb54c42a9334ea8c8cf4d95cbe", size = 4974140, upload-time = "2025-11-28T17:05:39.5Z" }, - { url = "https://files.pythonhosted.org/packages/5d/0c/96633eb4b26f138cc48561c6e0c44b4ea48acea56b20b507d6b14f8e80ce/fonttools-4.61.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:6e5ca8c62efdec7972dfdfd454415c4db49b89aeaefaaacada432f3b7eea9866", size = 5001741, upload-time = "2025-11-28T17:05:41.424Z" }, - { url = "https://files.pythonhosted.org/packages/6f/9a/3b536bad3be4f26186f296e749ff17bad3e6d57232c104d752d24b2e265b/fonttools-4.61.0-cp314-cp314t-win32.whl", hash = "sha256:63c7125d31abe3e61d7bb917329b5543c5b3448db95f24081a13aaf064360fc8", size = 2330707, upload-time = "2025-11-28T17:05:43.548Z" }, - { url = "https://files.pythonhosted.org/packages/18/ea/e6b9ac610451ee9f04477c311ad126de971f6112cb579fa391d2a8edb00b/fonttools-4.61.0-cp314-cp314t-win_amd64.whl", hash = "sha256:67d841aa272be5500de7f447c40d1d8452783af33b4c3599899319f6ef9ad3c1", size = 2395950, upload-time = "2025-11-28T17:05:45.638Z" }, - { url = "https://files.pythonhosted.org/packages/0c/14/634f7daea5ffe6a5f7a0322ba8e1a0e23c9257b80aa91458107896d1dfc7/fonttools-4.61.0-py3-none-any.whl", hash = "sha256:276f14c560e6f98d24ef7f5f44438e55ff5a67f78fa85236b218462c9f5d0635", size = 1144485, upload-time = "2025-11-28T17:05:47.573Z" }, + { url = "https://files.pythonhosted.org/packages/5b/94/8a28707adb00bed1bf22dac16ccafe60faf2ade353dcb32c3617ee917307/fonttools-4.61.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7c7db70d57e5e1089a274cbb2b1fd635c9a24de809a231b154965d415d6c6d24", size = 2854799, upload-time = "2025-12-12T17:29:27.5Z" }, + { url = "https://files.pythonhosted.org/packages/94/93/c2e682faaa5ee92034818d8f8a8145ae73eb83619600495dcf8503fa7771/fonttools-4.61.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5fe9fd43882620017add5eabb781ebfbc6998ee49b35bd7f8f79af1f9f99a958", size = 2403032, upload-time = "2025-12-12T17:29:30.115Z" }, + { url = "https://files.pythonhosted.org/packages/f1/62/1748f7e7e1ee41aa52279fd2e3a6d0733dc42a673b16932bad8e5d0c8b28/fonttools-4.61.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d8db08051fc9e7d8bc622f2112511b8107d8f27cd89e2f64ec45e9825e8288da", size = 4897863, upload-time = "2025-12-12T17:29:32.535Z" }, + { url = "https://files.pythonhosted.org/packages/69/69/4ca02ee367d2c98edcaeb83fc278d20972502ee071214ad9d8ca85e06080/fonttools-4.61.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:a76d4cb80f41ba94a6691264be76435e5f72f2cb3cab0b092a6212855f71c2f6", size = 4859076, upload-time = "2025-12-12T17:29:34.907Z" }, + { url = "https://files.pythonhosted.org/packages/8c/f5/660f9e3cefa078861a7f099107c6d203b568a6227eef163dd173bfc56bdc/fonttools-4.61.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:a13fc8aeb24bad755eea8f7f9d409438eb94e82cf86b08fe77a03fbc8f6a96b1", size = 4875623, upload-time = "2025-12-12T17:29:37.33Z" }, + { url = "https://files.pythonhosted.org/packages/63/d1/9d7c5091d2276ed47795c131c1bf9316c3c1ab2789c22e2f59e0572ccd38/fonttools-4.61.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:b846a1fcf8beadeb9ea4f44ec5bdde393e2f1569e17d700bfc49cd69bde75881", size = 4993327, upload-time = "2025-12-12T17:29:39.781Z" }, + { url = "https://files.pythonhosted.org/packages/6f/2d/28def73837885ae32260d07660a052b99f0aa00454867d33745dfe49dbf0/fonttools-4.61.1-cp310-cp310-win32.whl", hash = "sha256:78a7d3ab09dc47ac1a363a493e6112d8cabed7ba7caad5f54dbe2f08676d1b47", size = 1502180, upload-time = "2025-12-12T17:29:42.217Z" }, + { url = "https://files.pythonhosted.org/packages/63/fa/bfdc98abb4dd2bd491033e85e3ba69a2313c850e759a6daa014bc9433b0f/fonttools-4.61.1-cp310-cp310-win_amd64.whl", hash = "sha256:eff1ac3cc66c2ac7cda1e64b4e2f3ffef474b7335f92fc3833fc632d595fcee6", size = 1550654, upload-time = "2025-12-12T17:29:44.564Z" }, + { url = "https://files.pythonhosted.org/packages/69/12/bf9f4eaa2fad039356cc627587e30ed008c03f1cebd3034376b5ee8d1d44/fonttools-4.61.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:c6604b735bb12fef8e0efd5578c9fb5d3d8532d5001ea13a19cddf295673ee09", size = 2852213, upload-time = "2025-12-12T17:29:46.675Z" }, + { url = "https://files.pythonhosted.org/packages/ac/49/4138d1acb6261499bedde1c07f8c2605d1d8f9d77a151e5507fd3ef084b6/fonttools-4.61.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:5ce02f38a754f207f2f06557523cd39a06438ba3aafc0639c477ac409fc64e37", size = 2401689, upload-time = "2025-12-12T17:29:48.769Z" }, + { url = "https://files.pythonhosted.org/packages/e5/fe/e6ce0fe20a40e03aef906af60aa87668696f9e4802fa283627d0b5ed777f/fonttools-4.61.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:77efb033d8d7ff233385f30c62c7c79271c8885d5c9657d967ede124671bbdfb", size = 5058809, upload-time = "2025-12-12T17:29:51.701Z" }, + { url = "https://files.pythonhosted.org/packages/79/61/1ca198af22f7dd22c17ab86e9024ed3c06299cfdb08170640e9996d501a0/fonttools-4.61.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:75c1a6dfac6abd407634420c93864a1e274ebc1c7531346d9254c0d8f6ca00f9", size = 5036039, upload-time = "2025-12-12T17:29:53.659Z" }, + { url = "https://files.pythonhosted.org/packages/99/cc/fa1801e408586b5fce4da9f5455af8d770f4fc57391cd5da7256bb364d38/fonttools-4.61.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:0de30bfe7745c0d1ffa2b0b7048fb7123ad0d71107e10ee090fa0b16b9452e87", size = 5034714, upload-time = "2025-12-12T17:29:55.592Z" }, + { url = "https://files.pythonhosted.org/packages/bf/aa/b7aeafe65adb1b0a925f8f25725e09f078c635bc22754f3fecb7456955b0/fonttools-4.61.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:58b0ee0ab5b1fc9921eccfe11d1435added19d6494dde14e323f25ad2bc30c56", size = 5158648, upload-time = "2025-12-12T17:29:57.861Z" }, + { url = "https://files.pythonhosted.org/packages/99/f9/08ea7a38663328881384c6e7777bbefc46fd7d282adfd87a7d2b84ec9d50/fonttools-4.61.1-cp311-cp311-win32.whl", hash = "sha256:f79b168428351d11e10c5aeb61a74e1851ec221081299f4cf56036a95431c43a", size = 2280681, upload-time = "2025-12-12T17:29:59.943Z" }, + { url = "https://files.pythonhosted.org/packages/07/ad/37dd1ae5fa6e01612a1fbb954f0927681f282925a86e86198ccd7b15d515/fonttools-4.61.1-cp311-cp311-win_amd64.whl", hash = "sha256:fe2efccb324948a11dd09d22136fe2ac8a97d6c1347cf0b58a911dcd529f66b7", size = 2331951, upload-time = "2025-12-12T17:30:02.254Z" }, + { url = "https://files.pythonhosted.org/packages/6f/16/7decaa24a1bd3a70c607b2e29f0adc6159f36a7e40eaba59846414765fd4/fonttools-4.61.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:f3cb4a569029b9f291f88aafc927dd53683757e640081ca8c412781ea144565e", size = 2851593, upload-time = "2025-12-12T17:30:04.225Z" }, + { url = "https://files.pythonhosted.org/packages/94/98/3c4cb97c64713a8cf499b3245c3bf9a2b8fd16a3e375feff2aed78f96259/fonttools-4.61.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:41a7170d042e8c0024703ed13b71893519a1a6d6e18e933e3ec7507a2c26a4b2", size = 2400231, upload-time = "2025-12-12T17:30:06.47Z" }, + { url = "https://files.pythonhosted.org/packages/b7/37/82dbef0f6342eb01f54bca073ac1498433d6ce71e50c3c3282b655733b31/fonttools-4.61.1-cp312-cp312-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:10d88e55330e092940584774ee5e8a6971b01fc2f4d3466a1d6c158230880796", size = 4954103, upload-time = "2025-12-12T17:30:08.432Z" }, + { url = "https://files.pythonhosted.org/packages/6c/44/f3aeac0fa98e7ad527f479e161aca6c3a1e47bb6996b053d45226fe37bf2/fonttools-4.61.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:15acc09befd16a0fb8a8f62bc147e1a82817542d72184acca9ce6e0aeda9fa6d", size = 5004295, upload-time = "2025-12-12T17:30:10.56Z" }, + { url = "https://files.pythonhosted.org/packages/14/e8/7424ced75473983b964d09f6747fa09f054a6d656f60e9ac9324cf40c743/fonttools-4.61.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e6bcdf33aec38d16508ce61fd81838f24c83c90a1d1b8c68982857038673d6b8", size = 4944109, upload-time = "2025-12-12T17:30:12.874Z" }, + { url = "https://files.pythonhosted.org/packages/c8/8b/6391b257fa3d0b553d73e778f953a2f0154292a7a7a085e2374b111e5410/fonttools-4.61.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:5fade934607a523614726119164ff621e8c30e8fa1ffffbbd358662056ba69f0", size = 5093598, upload-time = "2025-12-12T17:30:15.79Z" }, + { url = "https://files.pythonhosted.org/packages/d9/71/fd2ea96cdc512d92da5678a1c98c267ddd4d8c5130b76d0f7a80f9a9fde8/fonttools-4.61.1-cp312-cp312-win32.whl", hash = "sha256:75da8f28eff26defba42c52986de97b22106cb8f26515b7c22443ebc9c2d3261", size = 2269060, upload-time = "2025-12-12T17:30:18.058Z" }, + { url = "https://files.pythonhosted.org/packages/80/3b/a3e81b71aed5a688e89dfe0e2694b26b78c7d7f39a5ffd8a7d75f54a12a8/fonttools-4.61.1-cp312-cp312-win_amd64.whl", hash = "sha256:497c31ce314219888c0e2fce5ad9178ca83fe5230b01a5006726cdf3ac9f24d9", size = 2319078, upload-time = "2025-12-12T17:30:22.862Z" }, + { url = "https://files.pythonhosted.org/packages/4b/cf/00ba28b0990982530addb8dc3e9e6f2fa9cb5c20df2abdda7baa755e8fe1/fonttools-4.61.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:8c56c488ab471628ff3bfa80964372fc13504ece601e0d97a78ee74126b2045c", size = 2846454, upload-time = "2025-12-12T17:30:24.938Z" }, + { url = "https://files.pythonhosted.org/packages/5a/ca/468c9a8446a2103ae645d14fee3f610567b7042aba85031c1c65e3ef7471/fonttools-4.61.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:dc492779501fa723b04d0ab1f5be046797fee17d27700476edc7ee9ae535a61e", size = 2398191, upload-time = "2025-12-12T17:30:27.343Z" }, + { url = "https://files.pythonhosted.org/packages/a3/4b/d67eedaed19def5967fade3297fed8161b25ba94699efc124b14fb68cdbc/fonttools-4.61.1-cp313-cp313-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:64102ca87e84261419c3747a0d20f396eb024bdbeb04c2bfb37e2891f5fadcb5", size = 4928410, upload-time = "2025-12-12T17:30:29.771Z" }, + { url = "https://files.pythonhosted.org/packages/b0/8d/6fb3494dfe61a46258cd93d979cf4725ded4eb46c2a4ca35e4490d84daea/fonttools-4.61.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4c1b526c8d3f615a7b1867f38a9410849c8f4aef078535742198e942fba0e9bd", size = 4984460, upload-time = "2025-12-12T17:30:32.073Z" }, + { url = "https://files.pythonhosted.org/packages/f7/f1/a47f1d30b3dc00d75e7af762652d4cbc3dff5c2697a0dbd5203c81afd9c3/fonttools-4.61.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:41ed4b5ec103bd306bb68f81dc166e77409e5209443e5773cb4ed837bcc9b0d3", size = 4925800, upload-time = "2025-12-12T17:30:34.339Z" }, + { url = "https://files.pythonhosted.org/packages/a7/01/e6ae64a0981076e8a66906fab01539799546181e32a37a0257b77e4aa88b/fonttools-4.61.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:b501c862d4901792adaec7c25b1ecc749e2662543f68bb194c42ba18d6eec98d", size = 5067859, upload-time = "2025-12-12T17:30:36.593Z" }, + { url = "https://files.pythonhosted.org/packages/73/aa/28e40b8d6809a9b5075350a86779163f074d2b617c15d22343fce81918db/fonttools-4.61.1-cp313-cp313-win32.whl", hash = "sha256:4d7092bb38c53bbc78e9255a59158b150bcdc115a1e3b3ce0b5f267dc35dd63c", size = 2267821, upload-time = "2025-12-12T17:30:38.478Z" }, + { url = "https://files.pythonhosted.org/packages/1a/59/453c06d1d83dc0951b69ef692d6b9f1846680342927df54e9a1ca91c6f90/fonttools-4.61.1-cp313-cp313-win_amd64.whl", hash = "sha256:21e7c8d76f62ab13c9472ccf74515ca5b9a761d1bde3265152a6dc58700d895b", size = 2318169, upload-time = "2025-12-12T17:30:40.951Z" }, + { url = "https://files.pythonhosted.org/packages/32/8f/4e7bf82c0cbb738d3c2206c920ca34ca74ef9dabde779030145d28665104/fonttools-4.61.1-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:fff4f534200a04b4a36e7ae3cb74493afe807b517a09e99cb4faa89a34ed6ecd", size = 2846094, upload-time = "2025-12-12T17:30:43.511Z" }, + { url = "https://files.pythonhosted.org/packages/71/09/d44e45d0a4f3a651f23a1e9d42de43bc643cce2971b19e784cc67d823676/fonttools-4.61.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:d9203500f7c63545b4ce3799319fe4d9feb1a1b89b28d3cb5abd11b9dd64147e", size = 2396589, upload-time = "2025-12-12T17:30:45.681Z" }, + { url = "https://files.pythonhosted.org/packages/89/18/58c64cafcf8eb677a99ef593121f719e6dcbdb7d1c594ae5a10d4997ca8a/fonttools-4.61.1-cp314-cp314-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:fa646ecec9528bef693415c79a86e733c70a4965dd938e9a226b0fc64c9d2e6c", size = 4877892, upload-time = "2025-12-12T17:30:47.709Z" }, + { url = "https://files.pythonhosted.org/packages/8a/ec/9e6b38c7ba1e09eb51db849d5450f4c05b7e78481f662c3b79dbde6f3d04/fonttools-4.61.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:11f35ad7805edba3aac1a3710d104592df59f4b957e30108ae0ba6c10b11dd75", size = 4972884, upload-time = "2025-12-12T17:30:49.656Z" }, + { url = "https://files.pythonhosted.org/packages/5e/87/b5339da8e0256734ba0dbbf5b6cdebb1dd79b01dc8c270989b7bcd465541/fonttools-4.61.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:b931ae8f62db78861b0ff1ac017851764602288575d65b8e8ff1963fed419063", size = 4924405, upload-time = "2025-12-12T17:30:51.735Z" }, + { url = "https://files.pythonhosted.org/packages/0b/47/e3409f1e1e69c073a3a6fd8cb886eb18c0bae0ee13db2c8d5e7f8495e8b7/fonttools-4.61.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:b148b56f5de675ee16d45e769e69f87623a4944f7443850bf9a9376e628a89d2", size = 5035553, upload-time = "2025-12-12T17:30:54.823Z" }, + { url = "https://files.pythonhosted.org/packages/bf/b6/1f6600161b1073a984294c6c031e1a56ebf95b6164249eecf30012bb2e38/fonttools-4.61.1-cp314-cp314-win32.whl", hash = "sha256:9b666a475a65f4e839d3d10473fad6d47e0a9db14a2f4a224029c5bfde58ad2c", size = 2271915, upload-time = "2025-12-12T17:30:57.913Z" }, + { url = "https://files.pythonhosted.org/packages/52/7b/91e7b01e37cc8eb0e1f770d08305b3655e4f002fc160fb82b3390eabacf5/fonttools-4.61.1-cp314-cp314-win_amd64.whl", hash = "sha256:4f5686e1fe5fce75d82d93c47a438a25bf0d1319d2843a926f741140b2b16e0c", size = 2323487, upload-time = "2025-12-12T17:30:59.804Z" }, + { url = "https://files.pythonhosted.org/packages/39/5c/908ad78e46c61c3e3ed70c3b58ff82ab48437faf84ec84f109592cabbd9f/fonttools-4.61.1-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:e76ce097e3c57c4bcb67c5aa24a0ecdbd9f74ea9219997a707a4061fbe2707aa", size = 2929571, upload-time = "2025-12-12T17:31:02.574Z" }, + { url = "https://files.pythonhosted.org/packages/bd/41/975804132c6dea64cdbfbaa59f3518a21c137a10cccf962805b301ac6ab2/fonttools-4.61.1-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:9cfef3ab326780c04d6646f68d4b4742aae222e8b8ea1d627c74e38afcbc9d91", size = 2435317, upload-time = "2025-12-12T17:31:04.974Z" }, + { url = "https://files.pythonhosted.org/packages/b0/5a/aef2a0a8daf1ebaae4cfd83f84186d4a72ee08fd6a8451289fcd03ffa8a4/fonttools-4.61.1-cp314-cp314t-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:a75c301f96db737e1c5ed5fd7d77d9c34466de16095a266509e13da09751bd19", size = 4882124, upload-time = "2025-12-12T17:31:07.456Z" }, + { url = "https://files.pythonhosted.org/packages/80/33/d6db3485b645b81cea538c9d1c9219d5805f0877fda18777add4671c5240/fonttools-4.61.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:91669ccac46bbc1d09e9273546181919064e8df73488ea087dcac3e2968df9ba", size = 5100391, upload-time = "2025-12-12T17:31:09.732Z" }, + { url = "https://files.pythonhosted.org/packages/6c/d6/675ba631454043c75fcf76f0ca5463eac8eb0666ea1d7badae5fea001155/fonttools-4.61.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:c33ab3ca9d3ccd581d58e989d67554e42d8d4ded94ab3ade3508455fe70e65f7", size = 4978800, upload-time = "2025-12-12T17:31:11.681Z" }, + { url = "https://files.pythonhosted.org/packages/7f/33/d3ec753d547a8d2bdaedd390d4a814e8d5b45a093d558f025c6b990b554c/fonttools-4.61.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:664c5a68ec406f6b1547946683008576ef8b38275608e1cee6c061828171c118", size = 5006426, upload-time = "2025-12-12T17:31:13.764Z" }, + { url = "https://files.pythonhosted.org/packages/b4/40/cc11f378b561a67bea850ab50063366a0d1dd3f6d0a30ce0f874b0ad5664/fonttools-4.61.1-cp314-cp314t-win32.whl", hash = "sha256:aed04cabe26f30c1647ef0e8fbb207516fd40fe9472e9439695f5c6998e60ac5", size = 2335377, upload-time = "2025-12-12T17:31:16.49Z" }, + { url = "https://files.pythonhosted.org/packages/e4/ff/c9a2b66b39f8628531ea58b320d66d951267c98c6a38684daa8f50fb02f8/fonttools-4.61.1-cp314-cp314t-win_amd64.whl", hash = "sha256:2180f14c141d2f0f3da43f3a81bc8aa4684860f6b0e6f9e165a4831f24e6a23b", size = 2400613, upload-time = "2025-12-12T17:31:18.769Z" }, + { url = "https://files.pythonhosted.org/packages/c7/4e/ce75a57ff3aebf6fc1f4e9d508b8e5810618a33d900ad6c19eb30b290b97/fonttools-4.61.1-py3-none-any.whl", hash = "sha256:17d2bf5d541add43822bcf0c43d7d847b160c9bb01d15d5007d84e2217aaa371", size = 1148996, upload-time = "2025-12-12T17:31:21.03Z" }, ] [[package]] name = "grt-testing" version = "0.1.0" -source = { virtual = "." } +source = { editable = "." } dependencies = [ { name = "matplotlib" }, { name = "pandas" }, @@ -270,6 +270,7 @@ dependencies = [ [package.dev-dependencies] dev = [ { name = "pymarkdownlnt" }, + { name = "pyyaml" }, { name = "ty" }, ] @@ -283,6 +284,7 @@ requires-dist = [ [package.metadata.requires-dev] dev = [ { name = "pymarkdownlnt", specifier = ">=0.9.33" }, + { name = "pyyaml", specifier = ">=6.0.3" }, { name = "ty", specifier = ">=0.0.1a31" }, ] @@ -396,7 +398,7 @@ wheels = [ [[package]] name = "matplotlib" -version = "3.10.7" +version = "3.10.8" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "contourpy", version = "1.3.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, @@ -411,62 +413,62 @@ dependencies = [ { name = "pyparsing" }, { name = "python-dateutil" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/ae/e2/d2d5295be2f44c678ebaf3544ba32d20c1f9ef08c49fe47f496180e1db15/matplotlib-3.10.7.tar.gz", hash = "sha256:a06ba7e2a2ef9131c79c49e63dad355d2d878413a0376c1727c8b9335ff731c7", size = 34804865, upload-time = "2025-10-09T00:28:00.669Z" } +sdist = { url = "https://files.pythonhosted.org/packages/8a/76/d3c6e3a13fe484ebe7718d14e269c9569c4eb0020a968a327acb3b9a8fe6/matplotlib-3.10.8.tar.gz", hash = "sha256:2299372c19d56bcd35cf05a2738308758d32b9eaed2371898d8f5bd33f084aa3", size = 34806269, upload-time = "2025-12-10T22:56:51.155Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/6c/87/3932d5778ab4c025db22710b61f49ccaed3956c5cf46ffb2ffa7492b06d9/matplotlib-3.10.7-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:7ac81eee3b7c266dd92cee1cd658407b16c57eed08c7421fa354ed68234de380", size = 8247141, upload-time = "2025-10-09T00:26:06.023Z" }, - { url = "https://files.pythonhosted.org/packages/45/a8/bfed45339160102bce21a44e38a358a1134a5f84c26166de03fb4a53208f/matplotlib-3.10.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:667ecd5d8d37813a845053d8f5bf110b534c3c9f30e69ebd25d4701385935a6d", size = 8107995, upload-time = "2025-10-09T00:26:08.669Z" }, - { url = "https://files.pythonhosted.org/packages/e2/3c/5692a2d9a5ba848fda3f48d2b607037df96460b941a59ef236404b39776b/matplotlib-3.10.7-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:cc1c51b846aca49a5a8b44fbba6a92d583a35c64590ad9e1e950dc88940a4297", size = 8680503, upload-time = "2025-10-09T00:26:10.607Z" }, - { url = "https://files.pythonhosted.org/packages/ab/a0/86ace53c48b05d0e6e9c127b2ace097434901f3e7b93f050791c8243201a/matplotlib-3.10.7-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4a11c2e9e72e7de09b7b72e62f3df23317c888299c875e2b778abf1eda8c0a42", size = 9514982, upload-time = "2025-10-09T00:26:12.594Z" }, - { url = "https://files.pythonhosted.org/packages/a6/81/ead71e2824da8f72640a64166d10e62300df4ae4db01a0bac56c5b39fa51/matplotlib-3.10.7-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:f19410b486fdd139885ace124e57f938c1e6a3210ea13dd29cab58f5d4bc12c7", size = 9566429, upload-time = "2025-10-09T00:26:14.758Z" }, - { url = "https://files.pythonhosted.org/packages/65/7d/954b3067120456f472cce8fdcacaf4a5fcd522478db0c37bb243c7cb59dd/matplotlib-3.10.7-cp310-cp310-win_amd64.whl", hash = "sha256:b498e9e4022f93de2d5a37615200ca01297ceebbb56fe4c833f46862a490f9e3", size = 8108174, upload-time = "2025-10-09T00:26:17.015Z" }, - { url = "https://files.pythonhosted.org/packages/fc/bc/0fb489005669127ec13f51be0c6adc074d7cf191075dab1da9fe3b7a3cfc/matplotlib-3.10.7-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:53b492410a6cd66c7a471de6c924f6ede976e963c0f3097a3b7abfadddc67d0a", size = 8257507, upload-time = "2025-10-09T00:26:19.073Z" }, - { url = "https://files.pythonhosted.org/packages/e2/6a/d42588ad895279ff6708924645b5d2ed54a7fb2dc045c8a804e955aeace1/matplotlib-3.10.7-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d9749313deb729f08207718d29c86246beb2ea3fdba753595b55901dee5d2fd6", size = 8119565, upload-time = "2025-10-09T00:26:21.023Z" }, - { url = "https://files.pythonhosted.org/packages/10/b7/4aa196155b4d846bd749cf82aa5a4c300cf55a8b5e0dfa5b722a63c0f8a0/matplotlib-3.10.7-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:2222c7ba2cbde7fe63032769f6eb7e83ab3227f47d997a8453377709b7fe3a5a", size = 8692668, upload-time = "2025-10-09T00:26:22.967Z" }, - { url = "https://files.pythonhosted.org/packages/e6/e7/664d2b97016f46683a02d854d730cfcf54ff92c1dafa424beebef50f831d/matplotlib-3.10.7-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e91f61a064c92c307c5a9dc8c05dc9f8a68f0a3be199d9a002a0622e13f874a1", size = 9521051, upload-time = "2025-10-09T00:26:25.041Z" }, - { url = "https://files.pythonhosted.org/packages/a8/a3/37aef1404efa615f49b5758a5e0261c16dd88f389bc1861e722620e4a754/matplotlib-3.10.7-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:6f1851eab59ca082c95df5a500106bad73672645625e04538b3ad0f69471ffcc", size = 9576878, upload-time = "2025-10-09T00:26:27.478Z" }, - { url = "https://files.pythonhosted.org/packages/33/cd/b145f9797126f3f809d177ca378de57c45413c5099c5990de2658760594a/matplotlib-3.10.7-cp311-cp311-win_amd64.whl", hash = "sha256:6516ce375109c60ceec579e699524e9d504cd7578506f01150f7a6bc174a775e", size = 8115142, upload-time = "2025-10-09T00:26:29.774Z" }, - { url = "https://files.pythonhosted.org/packages/2e/39/63bca9d2b78455ed497fcf51a9c71df200a11048f48249038f06447fa947/matplotlib-3.10.7-cp311-cp311-win_arm64.whl", hash = "sha256:b172db79759f5f9bc13ef1c3ef8b9ee7b37b0247f987fbbbdaa15e4f87fd46a9", size = 7992439, upload-time = "2025-10-09T00:26:40.32Z" }, - { url = "https://files.pythonhosted.org/packages/be/b3/09eb0f7796932826ec20c25b517d568627754f6c6462fca19e12c02f2e12/matplotlib-3.10.7-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7a0edb7209e21840e8361e91ea84ea676658aa93edd5f8762793dec77a4a6748", size = 8272389, upload-time = "2025-10-09T00:26:42.474Z" }, - { url = "https://files.pythonhosted.org/packages/11/0b/1ae80ddafb8652fd8046cb5c8460ecc8d4afccb89e2c6d6bec61e04e1eaf/matplotlib-3.10.7-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c380371d3c23e0eadf8ebff114445b9f970aff2010198d498d4ab4c3b41eea4f", size = 8128247, upload-time = "2025-10-09T00:26:44.77Z" }, - { url = "https://files.pythonhosted.org/packages/7d/18/95ae2e242d4a5c98bd6e90e36e128d71cf1c7e39b0874feaed3ef782e789/matplotlib-3.10.7-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:d5f256d49fea31f40f166a5e3131235a5d2f4b7f44520b1cf0baf1ce568ccff0", size = 8696996, upload-time = "2025-10-09T00:26:46.792Z" }, - { url = "https://files.pythonhosted.org/packages/7e/3d/5b559efc800bd05cb2033aa85f7e13af51958136a48327f7c261801ff90a/matplotlib-3.10.7-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:11ae579ac83cdf3fb72573bb89f70e0534de05266728740d478f0f818983c695", size = 9530153, upload-time = "2025-10-09T00:26:49.07Z" }, - { url = "https://files.pythonhosted.org/packages/88/57/eab4a719fd110312d3c220595d63a3c85ec2a39723f0f4e7fa7e6e3f74ba/matplotlib-3.10.7-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:4c14b6acd16cddc3569a2d515cfdd81c7a68ac5639b76548cfc1a9e48b20eb65", size = 9593093, upload-time = "2025-10-09T00:26:51.067Z" }, - { url = "https://files.pythonhosted.org/packages/31/3c/80816f027b3a4a28cd2a0a6ef7f89a2db22310e945cd886ec25bfb399221/matplotlib-3.10.7-cp312-cp312-win_amd64.whl", hash = "sha256:0d8c32b7ea6fb80b1aeff5a2ceb3fb9778e2759e899d9beff75584714afcc5ee", size = 8122771, upload-time = "2025-10-09T00:26:53.296Z" }, - { url = "https://files.pythonhosted.org/packages/de/77/ef1fc78bfe99999b2675435cc52120887191c566b25017d78beaabef7f2d/matplotlib-3.10.7-cp312-cp312-win_arm64.whl", hash = "sha256:5f3f6d315dcc176ba7ca6e74c7768fb7e4cf566c49cb143f6bc257b62e634ed8", size = 7992812, upload-time = "2025-10-09T00:26:54.882Z" }, - { url = "https://files.pythonhosted.org/packages/02/9c/207547916a02c78f6bdd83448d9b21afbc42f6379ed887ecf610984f3b4e/matplotlib-3.10.7-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:1d9d3713a237970569156cfb4de7533b7c4eacdd61789726f444f96a0d28f57f", size = 8273212, upload-time = "2025-10-09T00:26:56.752Z" }, - { url = "https://files.pythonhosted.org/packages/bc/d0/b3d3338d467d3fc937f0bb7f256711395cae6f78e22cef0656159950adf0/matplotlib-3.10.7-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:37a1fea41153dd6ee061d21ab69c9cf2cf543160b1b85d89cd3d2e2a7902ca4c", size = 8128713, upload-time = "2025-10-09T00:26:59.001Z" }, - { url = "https://files.pythonhosted.org/packages/22/ff/6425bf5c20d79aa5b959d1ce9e65f599632345391381c9a104133fe0b171/matplotlib-3.10.7-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:b3c4ea4948d93c9c29dc01c0c23eef66f2101bf75158c291b88de6525c55c3d1", size = 8698527, upload-time = "2025-10-09T00:27:00.69Z" }, - { url = "https://files.pythonhosted.org/packages/d0/7f/ccdca06f4c2e6c7989270ed7829b8679466682f4cfc0f8c9986241c023b6/matplotlib-3.10.7-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:22df30ffaa89f6643206cf13877191c63a50e8f800b038bc39bee9d2d4957632", size = 9529690, upload-time = "2025-10-09T00:27:02.664Z" }, - { url = "https://files.pythonhosted.org/packages/b8/95/b80fc2c1f269f21ff3d193ca697358e24408c33ce2b106a7438a45407b63/matplotlib-3.10.7-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:b69676845a0a66f9da30e87f48be36734d6748024b525ec4710be40194282c84", size = 9593732, upload-time = "2025-10-09T00:27:04.653Z" }, - { url = "https://files.pythonhosted.org/packages/e1/b6/23064a96308b9aeceeffa65e96bcde459a2ea4934d311dee20afde7407a0/matplotlib-3.10.7-cp313-cp313-win_amd64.whl", hash = "sha256:744991e0cc863dd669c8dc9136ca4e6e0082be2070b9d793cbd64bec872a6815", size = 8122727, upload-time = "2025-10-09T00:27:06.814Z" }, - { url = "https://files.pythonhosted.org/packages/b3/a6/2faaf48133b82cf3607759027f82b5c702aa99cdfcefb7f93d6ccf26a424/matplotlib-3.10.7-cp313-cp313-win_arm64.whl", hash = "sha256:fba2974df0bf8ce3c995fa84b79cde38326e0f7b5409e7a3a481c1141340bcf7", size = 7992958, upload-time = "2025-10-09T00:27:08.567Z" }, - { url = "https://files.pythonhosted.org/packages/4a/f0/b018fed0b599bd48d84c08794cb242227fe3341952da102ee9d9682db574/matplotlib-3.10.7-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:932c55d1fa7af4423422cb6a492a31cbcbdbe68fd1a9a3f545aa5e7a143b5355", size = 8316849, upload-time = "2025-10-09T00:27:10.254Z" }, - { url = "https://files.pythonhosted.org/packages/b0/b7/bb4f23856197659f275e11a2a164e36e65e9b48ea3e93c4ec25b4f163198/matplotlib-3.10.7-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:5e38c2d581d62ee729a6e144c47a71b3f42fb4187508dbbf4fe71d5612c3433b", size = 8178225, upload-time = "2025-10-09T00:27:12.241Z" }, - { url = "https://files.pythonhosted.org/packages/62/56/0600609893ff277e6f3ab3c0cef4eafa6e61006c058e84286c467223d4d5/matplotlib-3.10.7-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:786656bb13c237bbcebcd402f65f44dd61ead60ee3deb045af429d889c8dbc67", size = 8711708, upload-time = "2025-10-09T00:27:13.879Z" }, - { url = "https://files.pythonhosted.org/packages/d8/1a/6bfecb0cafe94d6658f2f1af22c43b76cf7a1c2f0dc34ef84cbb6809617e/matplotlib-3.10.7-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:09d7945a70ea43bf9248f4b6582734c2fe726723204a76eca233f24cffc7ef67", size = 9541409, upload-time = "2025-10-09T00:27:15.684Z" }, - { url = "https://files.pythonhosted.org/packages/08/50/95122a407d7f2e446fd865e2388a232a23f2b81934960ea802f3171518e4/matplotlib-3.10.7-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:d0b181e9fa8daf1d9f2d4c547527b167cb8838fc587deabca7b5c01f97199e84", size = 9594054, upload-time = "2025-10-09T00:27:17.547Z" }, - { url = "https://files.pythonhosted.org/packages/13/76/75b194a43b81583478a81e78a07da8d9ca6ddf50dd0a2ccabf258059481d/matplotlib-3.10.7-cp313-cp313t-win_amd64.whl", hash = "sha256:31963603041634ce1a96053047b40961f7a29eb8f9a62e80cc2c0427aa1d22a2", size = 8200100, upload-time = "2025-10-09T00:27:20.039Z" }, - { url = "https://files.pythonhosted.org/packages/f5/9e/6aefebdc9f8235c12bdeeda44cc0383d89c1e41da2c400caf3ee2073a3ce/matplotlib-3.10.7-cp313-cp313t-win_arm64.whl", hash = "sha256:aebed7b50aa6ac698c90f60f854b47e48cd2252b30510e7a1feddaf5a3f72cbf", size = 8042131, upload-time = "2025-10-09T00:27:21.608Z" }, - { url = "https://files.pythonhosted.org/packages/0d/4b/e5bc2c321b6a7e3a75638d937d19ea267c34bd5a90e12bee76c4d7c7a0d9/matplotlib-3.10.7-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:d883460c43e8c6b173fef244a2341f7f7c0e9725c7fe68306e8e44ed9c8fb100", size = 8273787, upload-time = "2025-10-09T00:27:23.27Z" }, - { url = "https://files.pythonhosted.org/packages/86/ad/6efae459c56c2fbc404da154e13e3a6039129f3c942b0152624f1c621f05/matplotlib-3.10.7-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:07124afcf7a6504eafcb8ce94091c5898bbdd351519a1beb5c45f7a38c67e77f", size = 8131348, upload-time = "2025-10-09T00:27:24.926Z" }, - { url = "https://files.pythonhosted.org/packages/a6/5a/a4284d2958dee4116359cc05d7e19c057e64ece1b4ac986ab0f2f4d52d5a/matplotlib-3.10.7-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c17398b709a6cce3d9fdb1595c33e356d91c098cd9486cb2cc21ea2ea418e715", size = 9533949, upload-time = "2025-10-09T00:27:26.704Z" }, - { url = "https://files.pythonhosted.org/packages/de/ff/f3781b5057fa3786623ad8976fc9f7b0d02b2f28534751fd5a44240de4cf/matplotlib-3.10.7-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7146d64f561498764561e9cd0ed64fcf582e570fc519e6f521e2d0cfd43365e1", size = 9804247, upload-time = "2025-10-09T00:27:28.514Z" }, - { url = "https://files.pythonhosted.org/packages/47/5a/993a59facb8444efb0e197bf55f545ee449902dcee86a4dfc580c3b61314/matplotlib-3.10.7-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:90ad854c0a435da3104c01e2c6f0028d7e719b690998a2333d7218db80950722", size = 9595497, upload-time = "2025-10-09T00:27:30.418Z" }, - { url = "https://files.pythonhosted.org/packages/0d/a5/77c95aaa9bb32c345cbb49626ad8eb15550cba2e6d4c88081a6c2ac7b08d/matplotlib-3.10.7-cp314-cp314-win_amd64.whl", hash = "sha256:4645fc5d9d20ffa3a39361fcdbcec731382763b623b72627806bf251b6388866", size = 8252732, upload-time = "2025-10-09T00:27:32.332Z" }, - { url = "https://files.pythonhosted.org/packages/74/04/45d269b4268d222390d7817dae77b159651909669a34ee9fdee336db5883/matplotlib-3.10.7-cp314-cp314-win_arm64.whl", hash = "sha256:9257be2f2a03415f9105c486d304a321168e61ad450f6153d77c69504ad764bb", size = 8124240, upload-time = "2025-10-09T00:27:33.94Z" }, - { url = "https://files.pythonhosted.org/packages/4b/c7/ca01c607bb827158b439208c153d6f14ddb9fb640768f06f7ca3488ae67b/matplotlib-3.10.7-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:1e4bbad66c177a8fdfa53972e5ef8be72a5f27e6a607cec0d8579abd0f3102b1", size = 8316938, upload-time = "2025-10-09T00:27:35.534Z" }, - { url = "https://files.pythonhosted.org/packages/84/d2/5539e66e9f56d2fdec94bb8436f5e449683b4e199bcc897c44fbe3c99e28/matplotlib-3.10.7-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:d8eb7194b084b12feb19142262165832fc6ee879b945491d1c3d4660748020c4", size = 8178245, upload-time = "2025-10-09T00:27:37.334Z" }, - { url = "https://files.pythonhosted.org/packages/77/b5/e6ca22901fd3e4fe433a82e583436dd872f6c966fca7e63cf806b40356f8/matplotlib-3.10.7-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b4d41379b05528091f00e1728004f9a8d7191260f3862178b88e8fd770206318", size = 9541411, upload-time = "2025-10-09T00:27:39.387Z" }, - { url = "https://files.pythonhosted.org/packages/9e/99/a4524db57cad8fee54b7237239a8f8360bfcfa3170d37c9e71c090c0f409/matplotlib-3.10.7-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4a74f79fafb2e177f240579bc83f0b60f82cc47d2f1d260f422a0627207008ca", size = 9803664, upload-time = "2025-10-09T00:27:41.492Z" }, - { url = "https://files.pythonhosted.org/packages/e6/a5/85e2edf76ea0ad4288d174926d9454ea85f3ce5390cc4e6fab196cbf250b/matplotlib-3.10.7-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:702590829c30aada1e8cef0568ddbffa77ca747b4d6e36c6d173f66e301f89cc", size = 9594066, upload-time = "2025-10-09T00:27:43.694Z" }, - { url = "https://files.pythonhosted.org/packages/39/69/9684368a314f6d83fe5c5ad2a4121a3a8e03723d2e5c8ea17b66c1bad0e7/matplotlib-3.10.7-cp314-cp314t-win_amd64.whl", hash = "sha256:f79d5de970fc90cd5591f60053aecfce1fcd736e0303d9f0bf86be649fa68fb8", size = 8342832, upload-time = "2025-10-09T00:27:45.543Z" }, - { url = "https://files.pythonhosted.org/packages/04/5f/e22e08da14bc1a0894184640d47819d2338b792732e20d292bf86e5ab785/matplotlib-3.10.7-cp314-cp314t-win_arm64.whl", hash = "sha256:cb783436e47fcf82064baca52ce748af71725d0352e1d31564cbe9c95df92b9c", size = 8172585, upload-time = "2025-10-09T00:27:47.185Z" }, - { url = "https://files.pythonhosted.org/packages/1e/6c/a9bcf03e9afb2a873e0a5855f79bce476d1023f26f8212969f2b7504756c/matplotlib-3.10.7-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:5c09cf8f2793f81368f49f118b6f9f937456362bee282eac575cca7f84cda537", size = 8241204, upload-time = "2025-10-09T00:27:48.806Z" }, - { url = "https://files.pythonhosted.org/packages/5b/fd/0e6f5aa762ed689d9fa8750b08f1932628ffa7ed30e76423c399d19407d2/matplotlib-3.10.7-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:de66744b2bb88d5cd27e80dfc2ec9f0517d0a46d204ff98fe9e5f2864eb67657", size = 8104607, upload-time = "2025-10-09T00:27:50.876Z" }, - { url = "https://files.pythonhosted.org/packages/b9/a9/21c9439d698fac5f0de8fc68b2405b738ed1f00e1279c76f2d9aa5521ead/matplotlib-3.10.7-pp310-pypy310_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:53cc80662dd197ece414dd5b66e07370201515a3eaf52e7c518c68c16814773b", size = 8682257, upload-time = "2025-10-09T00:27:52.597Z" }, - { url = "https://files.pythonhosted.org/packages/58/8f/76d5dc21ac64a49e5498d7f0472c0781dae442dd266a67458baec38288ec/matplotlib-3.10.7-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:15112bcbaef211bd663fa935ec33313b948e214454d949b723998a43357b17b0", size = 8252283, upload-time = "2025-10-09T00:27:54.739Z" }, - { url = "https://files.pythonhosted.org/packages/27/0d/9c5d4c2317feb31d819e38c9f947c942f42ebd4eb935fc6fd3518a11eaa7/matplotlib-3.10.7-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:d2a959c640cdeecdd2ec3136e8ea0441da59bcaf58d67e9c590740addba2cb68", size = 8116733, upload-time = "2025-10-09T00:27:56.406Z" }, - { url = "https://files.pythonhosted.org/packages/9a/cc/3fe688ff1355010937713164caacf9ed443675ac48a997bab6ed23b3f7c0/matplotlib-3.10.7-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:3886e47f64611046bc1db523a09dd0a0a6bed6081e6f90e13806dd1d1d1b5e91", size = 8693919, upload-time = "2025-10-09T00:27:58.41Z" }, + { url = "https://files.pythonhosted.org/packages/58/be/a30bd917018ad220c400169fba298f2bb7003c8ccbc0c3e24ae2aacad1e8/matplotlib-3.10.8-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:00270d217d6b20d14b584c521f810d60c5c78406dc289859776550df837dcda7", size = 8239828, upload-time = "2025-12-10T22:55:02.313Z" }, + { url = "https://files.pythonhosted.org/packages/58/27/ca01e043c4841078e82cf6e80a6993dfecd315c3d79f5f3153afbb8e1ec6/matplotlib-3.10.8-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:37b3c1cc42aa184b3f738cfa18c1c1d72fd496d85467a6cf7b807936d39aa656", size = 8128050, upload-time = "2025-12-10T22:55:04.997Z" }, + { url = "https://files.pythonhosted.org/packages/cb/aa/7ab67f2b729ae6a91bcf9dcac0affb95fb8c56f7fd2b2af894ae0b0cf6fa/matplotlib-3.10.8-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:ee40c27c795bda6a5292e9cff9890189d32f7e3a0bf04e0e3c9430c4a00c37df", size = 8700452, upload-time = "2025-12-10T22:55:07.47Z" }, + { url = "https://files.pythonhosted.org/packages/73/ae/2d5817b0acee3c49b7e7ccfbf5b273f284957cc8e270adf36375db353190/matplotlib-3.10.8-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a48f2b74020919552ea25d222d5cc6af9ca3f4eb43a93e14d068457f545c2a17", size = 9534928, upload-time = "2025-12-10T22:55:10.566Z" }, + { url = "https://files.pythonhosted.org/packages/c9/5b/8e66653e9f7c39cb2e5cab25fce4810daffa2bff02cbf5f3077cea9e942c/matplotlib-3.10.8-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:f254d118d14a7f99d616271d6c3c27922c092dac11112670b157798b89bf4933", size = 9586377, upload-time = "2025-12-10T22:55:12.362Z" }, + { url = "https://files.pythonhosted.org/packages/e2/e2/fd0bbadf837f81edb0d208ba8f8cb552874c3b16e27cb91a31977d90875d/matplotlib-3.10.8-cp310-cp310-win_amd64.whl", hash = "sha256:f9b587c9c7274c1613a30afabf65a272114cd6cdbe67b3406f818c79d7ab2e2a", size = 8128127, upload-time = "2025-12-10T22:55:14.436Z" }, + { url = "https://files.pythonhosted.org/packages/f8/86/de7e3a1cdcfc941483af70609edc06b83e7c8a0e0dc9ac325200a3f4d220/matplotlib-3.10.8-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:6be43b667360fef5c754dda5d25a32e6307a03c204f3c0fc5468b78fa87b4160", size = 8251215, upload-time = "2025-12-10T22:55:16.175Z" }, + { url = "https://files.pythonhosted.org/packages/fd/14/baad3222f424b19ce6ad243c71de1ad9ec6b2e4eb1e458a48fdc6d120401/matplotlib-3.10.8-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a2b336e2d91a3d7006864e0990c83b216fcdca64b5a6484912902cef87313d78", size = 8139625, upload-time = "2025-12-10T22:55:17.712Z" }, + { url = "https://files.pythonhosted.org/packages/8f/a0/7024215e95d456de5883e6732e708d8187d9753a21d32f8ddb3befc0c445/matplotlib-3.10.8-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:efb30e3baaea72ce5928e32bab719ab4770099079d66726a62b11b1ef7273be4", size = 8712614, upload-time = "2025-12-10T22:55:20.8Z" }, + { url = "https://files.pythonhosted.org/packages/5a/f4/b8347351da9a5b3f41e26cf547252d861f685c6867d179a7c9d60ad50189/matplotlib-3.10.8-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d56a1efd5bfd61486c8bc968fa18734464556f0fb8e51690f4ac25d85cbbbbc2", size = 9540997, upload-time = "2025-12-10T22:55:23.258Z" }, + { url = "https://files.pythonhosted.org/packages/9e/c0/c7b914e297efe0bc36917bf216b2acb91044b91e930e878ae12981e461e5/matplotlib-3.10.8-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:238b7ce5717600615c895050239ec955d91f321c209dd110db988500558e70d6", size = 9596825, upload-time = "2025-12-10T22:55:25.217Z" }, + { url = "https://files.pythonhosted.org/packages/6f/d3/a4bbc01c237ab710a1f22b4da72f4ff6d77eb4c7735ea9811a94ae239067/matplotlib-3.10.8-cp311-cp311-win_amd64.whl", hash = "sha256:18821ace09c763ec93aef5eeff087ee493a24051936d7b9ebcad9662f66501f9", size = 8135090, upload-time = "2025-12-10T22:55:27.162Z" }, + { url = "https://files.pythonhosted.org/packages/89/dd/a0b6588f102beab33ca6f5218b31725216577b2a24172f327eaf6417d5c9/matplotlib-3.10.8-cp311-cp311-win_arm64.whl", hash = "sha256:bab485bcf8b1c7d2060b4fcb6fc368a9e6f4cd754c9c2fea281f4be21df394a2", size = 8012377, upload-time = "2025-12-10T22:55:29.185Z" }, + { url = "https://files.pythonhosted.org/packages/9e/67/f997cdcbb514012eb0d10cd2b4b332667997fb5ebe26b8d41d04962fa0e6/matplotlib-3.10.8-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:64fcc24778ca0404ce0cb7b6b77ae1f4c7231cdd60e6778f999ee05cbd581b9a", size = 8260453, upload-time = "2025-12-10T22:55:30.709Z" }, + { url = "https://files.pythonhosted.org/packages/7e/65/07d5f5c7f7c994f12c768708bd2e17a4f01a2b0f44a1c9eccad872433e2e/matplotlib-3.10.8-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b9a5ca4ac220a0cdd1ba6bcba3608547117d30468fefce49bb26f55c1a3d5c58", size = 8148321, upload-time = "2025-12-10T22:55:33.265Z" }, + { url = "https://files.pythonhosted.org/packages/3e/f3/c5195b1ae57ef85339fd7285dfb603b22c8b4e79114bae5f4f0fcf688677/matplotlib-3.10.8-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:3ab4aabc72de4ff77b3ec33a6d78a68227bf1123465887f9905ba79184a1cc04", size = 8716944, upload-time = "2025-12-10T22:55:34.922Z" }, + { url = "https://files.pythonhosted.org/packages/00/f9/7638f5cc82ec8a7aa005de48622eecc3ed7c9854b96ba15bd76b7fd27574/matplotlib-3.10.8-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:24d50994d8c5816ddc35411e50a86ab05f575e2530c02752e02538122613371f", size = 9550099, upload-time = "2025-12-10T22:55:36.789Z" }, + { url = "https://files.pythonhosted.org/packages/57/61/78cd5920d35b29fd2a0fe894de8adf672ff52939d2e9b43cb83cd5ce1bc7/matplotlib-3.10.8-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:99eefd13c0dc3b3c1b4d561c1169e65fe47aab7b8158754d7c084088e2329466", size = 9613040, upload-time = "2025-12-10T22:55:38.715Z" }, + { url = "https://files.pythonhosted.org/packages/30/4e/c10f171b6e2f44d9e3a2b96efa38b1677439d79c99357600a62cc1e9594e/matplotlib-3.10.8-cp312-cp312-win_amd64.whl", hash = "sha256:dd80ecb295460a5d9d260df63c43f4afbdd832d725a531f008dad1664f458adf", size = 8142717, upload-time = "2025-12-10T22:55:41.103Z" }, + { url = "https://files.pythonhosted.org/packages/f1/76/934db220026b5fef85f45d51a738b91dea7d70207581063cd9bd8fafcf74/matplotlib-3.10.8-cp312-cp312-win_arm64.whl", hash = "sha256:3c624e43ed56313651bc18a47f838b60d7b8032ed348911c54906b130b20071b", size = 8012751, upload-time = "2025-12-10T22:55:42.684Z" }, + { url = "https://files.pythonhosted.org/packages/3d/b9/15fd5541ef4f5b9a17eefd379356cf12175fe577424e7b1d80676516031a/matplotlib-3.10.8-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:3f2e409836d7f5ac2f1c013110a4d50b9f7edc26328c108915f9075d7d7a91b6", size = 8261076, upload-time = "2025-12-10T22:55:44.648Z" }, + { url = "https://files.pythonhosted.org/packages/8d/a0/2ba3473c1b66b9c74dc7107c67e9008cb1782edbe896d4c899d39ae9cf78/matplotlib-3.10.8-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:56271f3dac49a88d7fca5060f004d9d22b865f743a12a23b1e937a0be4818ee1", size = 8148794, upload-time = "2025-12-10T22:55:46.252Z" }, + { url = "https://files.pythonhosted.org/packages/75/97/a471f1c3eb1fd6f6c24a31a5858f443891d5127e63a7788678d14e249aea/matplotlib-3.10.8-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:a0a7f52498f72f13d4a25ea70f35f4cb60642b466cbb0a9be951b5bc3f45a486", size = 8718474, upload-time = "2025-12-10T22:55:47.864Z" }, + { url = "https://files.pythonhosted.org/packages/01/be/cd478f4b66f48256f42927d0acbcd63a26a893136456cd079c0cc24fbabf/matplotlib-3.10.8-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:646d95230efb9ca614a7a594d4fcacde0ac61d25e37dd51710b36477594963ce", size = 9549637, upload-time = "2025-12-10T22:55:50.048Z" }, + { url = "https://files.pythonhosted.org/packages/5d/7c/8dc289776eae5109e268c4fb92baf870678dc048a25d4ac903683b86d5bf/matplotlib-3.10.8-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:f89c151aab2e2e23cb3fe0acad1e8b82841fd265379c4cecd0f3fcb34c15e0f6", size = 9613678, upload-time = "2025-12-10T22:55:52.21Z" }, + { url = "https://files.pythonhosted.org/packages/64/40/37612487cc8a437d4dd261b32ca21fe2d79510fe74af74e1f42becb1bdb8/matplotlib-3.10.8-cp313-cp313-win_amd64.whl", hash = "sha256:e8ea3e2d4066083e264e75c829078f9e149fa119d27e19acd503de65e0b13149", size = 8142686, upload-time = "2025-12-10T22:55:54.253Z" }, + { url = "https://files.pythonhosted.org/packages/66/52/8d8a8730e968185514680c2a6625943f70269509c3dcfc0dcf7d75928cb8/matplotlib-3.10.8-cp313-cp313-win_arm64.whl", hash = "sha256:c108a1d6fa78a50646029cb6d49808ff0fc1330fda87fa6f6250c6b5369b6645", size = 8012917, upload-time = "2025-12-10T22:55:56.268Z" }, + { url = "https://files.pythonhosted.org/packages/b5/27/51fe26e1062f298af5ef66343d8ef460e090a27fea73036c76c35821df04/matplotlib-3.10.8-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:ad3d9833a64cf48cc4300f2b406c3d0f4f4724a91c0bd5640678a6ba7c102077", size = 8305679, upload-time = "2025-12-10T22:55:57.856Z" }, + { url = "https://files.pythonhosted.org/packages/2c/1e/4de865bc591ac8e3062e835f42dd7fe7a93168d519557837f0e37513f629/matplotlib-3.10.8-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:eb3823f11823deade26ce3b9f40dcb4a213da7a670013929f31d5f5ed1055b22", size = 8198336, upload-time = "2025-12-10T22:55:59.371Z" }, + { url = "https://files.pythonhosted.org/packages/c6/cb/2f7b6e75fb4dce87ef91f60cac4f6e34f4c145ab036a22318ec837971300/matplotlib-3.10.8-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:d9050fee89a89ed57b4fb2c1bfac9a3d0c57a0d55aed95949eedbc42070fea39", size = 8731653, upload-time = "2025-12-10T22:56:01.032Z" }, + { url = "https://files.pythonhosted.org/packages/46/b3/bd9c57d6ba670a37ab31fb87ec3e8691b947134b201f881665b28cc039ff/matplotlib-3.10.8-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b44d07310e404ba95f8c25aa5536f154c0a8ec473303535949e52eb71d0a1565", size = 9561356, upload-time = "2025-12-10T22:56:02.95Z" }, + { url = "https://files.pythonhosted.org/packages/c0/3d/8b94a481456dfc9dfe6e39e93b5ab376e50998cddfd23f4ae3b431708f16/matplotlib-3.10.8-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:0a33deb84c15ede243aead39f77e990469fff93ad1521163305095b77b72ce4a", size = 9614000, upload-time = "2025-12-10T22:56:05.411Z" }, + { url = "https://files.pythonhosted.org/packages/bd/cd/bc06149fe5585ba800b189a6a654a75f1f127e8aab02fd2be10df7fa500c/matplotlib-3.10.8-cp313-cp313t-win_amd64.whl", hash = "sha256:3a48a78d2786784cc2413e57397981fb45c79e968d99656706018d6e62e57958", size = 8220043, upload-time = "2025-12-10T22:56:07.551Z" }, + { url = "https://files.pythonhosted.org/packages/e3/de/b22cf255abec916562cc04eef457c13e58a1990048de0c0c3604d082355e/matplotlib-3.10.8-cp313-cp313t-win_arm64.whl", hash = "sha256:15d30132718972c2c074cd14638c7f4592bd98719e2308bccea40e0538bc0cb5", size = 8062075, upload-time = "2025-12-10T22:56:09.178Z" }, + { url = "https://files.pythonhosted.org/packages/3c/43/9c0ff7a2f11615e516c3b058e1e6e8f9614ddeca53faca06da267c48345d/matplotlib-3.10.8-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:b53285e65d4fa4c86399979e956235deb900be5baa7fc1218ea67fbfaeaadd6f", size = 8262481, upload-time = "2025-12-10T22:56:10.885Z" }, + { url = "https://files.pythonhosted.org/packages/6f/ca/e8ae28649fcdf039fda5ef554b40a95f50592a3c47e6f7270c9561c12b07/matplotlib-3.10.8-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:32f8dce744be5569bebe789e46727946041199030db8aeb2954d26013a0eb26b", size = 8151473, upload-time = "2025-12-10T22:56:12.377Z" }, + { url = "https://files.pythonhosted.org/packages/f1/6f/009d129ae70b75e88cbe7e503a12a4c0670e08ed748a902c2568909e9eb5/matplotlib-3.10.8-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4cf267add95b1c88300d96ca837833d4112756045364f5c734a2276038dae27d", size = 9553896, upload-time = "2025-12-10T22:56:14.432Z" }, + { url = "https://files.pythonhosted.org/packages/f5/26/4221a741eb97967bc1fd5e4c52b9aa5a91b2f4ec05b59f6def4d820f9df9/matplotlib-3.10.8-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2cf5bd12cecf46908f286d7838b2abc6c91cda506c0445b8223a7c19a00df008", size = 9824193, upload-time = "2025-12-10T22:56:16.29Z" }, + { url = "https://files.pythonhosted.org/packages/1f/f3/3abf75f38605772cf48a9daf5821cd4f563472f38b4b828c6fba6fa6d06e/matplotlib-3.10.8-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:41703cc95688f2516b480f7f339d8851a6035f18e100ee6a32bc0b8536a12a9c", size = 9615444, upload-time = "2025-12-10T22:56:18.155Z" }, + { url = "https://files.pythonhosted.org/packages/93/a5/de89ac80f10b8dc615807ee1133cd99ac74082581196d4d9590bea10690d/matplotlib-3.10.8-cp314-cp314-win_amd64.whl", hash = "sha256:83d282364ea9f3e52363da262ce32a09dfe241e4080dcedda3c0db059d3c1f11", size = 8272719, upload-time = "2025-12-10T22:56:20.366Z" }, + { url = "https://files.pythonhosted.org/packages/69/ce/b006495c19ccc0a137b48083168a37bd056392dee02f87dba0472f2797fe/matplotlib-3.10.8-cp314-cp314-win_arm64.whl", hash = "sha256:2c1998e92cd5999e295a731bcb2911c75f597d937341f3030cc24ef2733d78a8", size = 8144205, upload-time = "2025-12-10T22:56:22.239Z" }, + { url = "https://files.pythonhosted.org/packages/68/d9/b31116a3a855bd313c6fcdb7226926d59b041f26061c6c5b1be66a08c826/matplotlib-3.10.8-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:b5a2b97dbdc7d4f353ebf343744f1d1f1cca8aa8bfddb4262fcf4306c3761d50", size = 8305785, upload-time = "2025-12-10T22:56:24.218Z" }, + { url = "https://files.pythonhosted.org/packages/1e/90/6effe8103f0272685767ba5f094f453784057072f49b393e3ea178fe70a5/matplotlib-3.10.8-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:3f5c3e4da343bba819f0234186b9004faba952cc420fbc522dc4e103c1985908", size = 8198361, upload-time = "2025-12-10T22:56:26.787Z" }, + { url = "https://files.pythonhosted.org/packages/d7/65/a73188711bea603615fc0baecca1061429ac16940e2385433cc778a9d8e7/matplotlib-3.10.8-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5f62550b9a30afde8c1c3ae450e5eb547d579dd69b25c2fc7a1c67f934c1717a", size = 9561357, upload-time = "2025-12-10T22:56:28.953Z" }, + { url = "https://files.pythonhosted.org/packages/f4/3d/b5c5d5d5be8ce63292567f0e2c43dde9953d3ed86ac2de0a72e93c8f07a1/matplotlib-3.10.8-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:495672de149445ec1b772ff2c9ede9b769e3cb4f0d0aa7fa730d7f59e2d4e1c1", size = 9823610, upload-time = "2025-12-10T22:56:31.455Z" }, + { url = "https://files.pythonhosted.org/packages/4d/4b/e7beb6bbd49f6bae727a12b270a2654d13c397576d25bd6786e47033300f/matplotlib-3.10.8-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:595ba4d8fe983b88f0eec8c26a241e16d6376fe1979086232f481f8f3f67494c", size = 9614011, upload-time = "2025-12-10T22:56:33.85Z" }, + { url = "https://files.pythonhosted.org/packages/7c/e6/76f2813d31f032e65f6f797e3f2f6e4aab95b65015924b1c51370395c28a/matplotlib-3.10.8-cp314-cp314t-win_amd64.whl", hash = "sha256:25d380fe8b1dc32cf8f0b1b448470a77afb195438bafdf1d858bfb876f3edf7b", size = 8362801, upload-time = "2025-12-10T22:56:36.107Z" }, + { url = "https://files.pythonhosted.org/packages/5d/49/d651878698a0b67f23aa28e17f45a6d6dd3d3f933fa29087fa4ce5947b5a/matplotlib-3.10.8-cp314-cp314t-win_arm64.whl", hash = "sha256:113bb52413ea508ce954a02c10ffd0d565f9c3bc7f2eddc27dfe1731e71c7b5f", size = 8192560, upload-time = "2025-12-10T22:56:38.008Z" }, + { url = "https://files.pythonhosted.org/packages/f5/43/31d59500bb950b0d188e149a2e552040528c13d6e3d6e84d0cccac593dcd/matplotlib-3.10.8-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:f97aeb209c3d2511443f8797e3e5a569aebb040d4f8bc79aa3ee78a8fb9e3dd8", size = 8237252, upload-time = "2025-12-10T22:56:39.529Z" }, + { url = "https://files.pythonhosted.org/packages/0c/2c/615c09984f3c5f907f51c886538ad785cf72e0e11a3225de2c0f9442aecc/matplotlib-3.10.8-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:fb061f596dad3a0f52b60dc6a5dec4a0c300dec41e058a7efe09256188d170b7", size = 8124693, upload-time = "2025-12-10T22:56:41.758Z" }, + { url = "https://files.pythonhosted.org/packages/91/e1/2757277a1c56041e1fc104b51a0f7b9a4afc8eb737865d63cababe30bc61/matplotlib-3.10.8-pp310-pypy310_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:12d90df9183093fcd479f4172ac26b322b1248b15729cb57f42f71f24c7e37a3", size = 8702205, upload-time = "2025-12-10T22:56:43.415Z" }, + { url = "https://files.pythonhosted.org/packages/04/30/3afaa31c757f34b7725ab9d2ba8b48b5e89c2019c003e7d0ead143aabc5a/matplotlib-3.10.8-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:6da7c2ce169267d0d066adcf63758f0604aa6c3eebf67458930f9d9b79ad1db1", size = 8249198, upload-time = "2025-12-10T22:56:45.584Z" }, + { url = "https://files.pythonhosted.org/packages/48/2f/6334aec331f57485a642a7c8be03cb286f29111ae71c46c38b363230063c/matplotlib-3.10.8-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:9153c3292705be9f9c64498a8872118540c3f4123d1a1c840172edf262c8be4a", size = 8136817, upload-time = "2025-12-10T22:56:47.339Z" }, + { url = "https://files.pythonhosted.org/packages/73/e4/6d6f14b2a759c622f191b2d67e9075a3f56aaccb3be4bb9bb6890030d0a0/matplotlib-3.10.8-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:1ae029229a57cd1e8fe542485f27e7ca7b23aa9e8944ddb4985d0bc444f1eca2", size = 8713867, upload-time = "2025-12-10T22:56:48.954Z" }, ] [[package]] @@ -1108,27 +1110,27 @@ wheels = [ [[package]] name = "ty" -version = "0.0.1a31" +version = "0.0.1a34" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/30/78/daa1e70377b8127e06db63063b7dd9694cb2bb611b4e3c2182b9ec5a02a1/ty-0.0.1a31.tar.gz", hash = "sha256:b878b04af63b1e716436897838ca6a107a672539155b6fc2051268cd85da9cd6", size = 4656004, upload-time = "2025-12-04T09:01:47.147Z" } +sdist = { url = "https://files.pythonhosted.org/packages/f5/f9/f467d2fbf02a37af5d779eb21c59c7d5c9ce8c48f620d590d361f5220208/ty-0.0.1a34.tar.gz", hash = "sha256:659e409cc3b5c9fb99a453d256402a4e3bd95b1dbcc477b55c039697c807ab79", size = 4735988, upload-time = "2025-12-12T18:29:23.204Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/08/4c/1e91d6b22dee1435db1cdf55e54ec601497dba650684517b1cd5b4345e80/ty-0.0.1a31-py3-none-linux_armv6l.whl", hash = "sha256:662b9a3a3497da12416789e21fda9eb4e1ac66c5233867d89953916099ee44f5", size = 9620261, upload-time = "2025-12-04T09:01:35.001Z" }, - { url = "https://files.pythonhosted.org/packages/94/8f/eb6ac56cc03a00d3258c3362c4fb5a58152d03e9fa207db0465e2dc717e2/ty-0.0.1a31-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:da05f73df587ff1362d487681370db47541123c005a0d1a60a5a048039e309cc", size = 9411370, upload-time = "2025-12-04T09:01:23.903Z" }, - { url = "https://files.pythonhosted.org/packages/d6/72/2cdbef5bd7ee7a58e71e67e845ae3f99dca695d0bca7561a3294fb8d723e/ty-0.0.1a31-py3-none-macosx_11_0_arm64.whl", hash = "sha256:74032bf207ce1eddc042f26aa9b6e0713373cf2c502174a53a41f9c469f02adb", size = 8925400, upload-time = "2025-12-04T09:01:59.074Z" }, - { url = "https://files.pythonhosted.org/packages/f4/4d/a10c3f2e8969e9e1efe3179d2c961236413c9765c9f95e84e8f515fb9b02/ty-0.0.1a31-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cd383fd54872df15816a7853a8c824400c85f850916bad2052564bad8462f4f2", size = 9201615, upload-time = "2025-12-04T09:01:21.085Z" }, - { url = "https://files.pythonhosted.org/packages/47/e5/bd26f0fc432459718b72a0bb41bd222fd1fad81c1d5f645a7eba94e14be6/ty-0.0.1a31-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c6defaf175bce7c91cea9a168a1c30bb523269ed174941cd31f8edc2d77f8ec7", size = 9401110, upload-time = "2025-12-04T09:01:32.241Z" }, - { url = "https://files.pythonhosted.org/packages/ca/63/cbb3419f74ce38c0a2affbc269d4d27ec032cfbc3b011a8db5815c89f540/ty-0.0.1a31-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2d41f7e68f05517177ef82d89bfe0bf8e787a6b72ad396c1e44a16ef353b95e2", size = 9779837, upload-time = "2025-12-04T09:01:37.55Z" }, - { url = "https://files.pythonhosted.org/packages/69/fb/1d99243a0e005fe8d53671d4a25d5ddcf345a12fb3c683726bd597e42f23/ty-0.0.1a31-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:22f2298a0de1a8af24f50e498023770b05ea4fc0ccebb2c53deb40ff73dc76fc", size = 10444412, upload-time = "2025-12-04T09:01:56.888Z" }, - { url = "https://files.pythonhosted.org/packages/65/7f/95242feb774356b7a93beb5278cd8c8bbb6a8b12d94977ff954929ed257e/ty-0.0.1a31-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:38669b9aa53bd87160a2ee8447a3bf8d91dd14b7462f8aa98f1d2740b609589a", size = 10171070, upload-time = "2025-12-04T09:01:44.917Z" }, - { url = "https://files.pythonhosted.org/packages/78/fa/4d8adeb9ff7fd32efcb9ebb05d5f61cd9ad4b4030390c76cd771fb38ac33/ty-0.0.1a31-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5fbc75e8e848929155b7ba0e9a222b2561222a1135bb492a9c5b9ad945c80b18", size = 10188190, upload-time = "2025-12-04T09:01:42.577Z" }, - { url = "https://files.pythonhosted.org/packages/f6/40/295903716cc2e4fdb88d8cf8b974f0936e6c021f35d5a7f78b769c746bcc/ty-0.0.1a31-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:915c0639dfb73f5f19cd69bbe89036ef18b8066ba88ce38d3e3cc0f39b32f99a", size = 9713419, upload-time = "2025-12-04T09:01:26.633Z" }, - { url = "https://files.pythonhosted.org/packages/f0/93/b622782ce78f0cbacf167c617b41f45e76de02e3d5d5898fc78ad7a47de7/ty-0.0.1a31-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:28d23f4e58e9b08fc8966ad8dac754b4cd5ccafed711e2a32a62f3d2cb6f44cb", size = 9170660, upload-time = "2025-12-04T09:02:01.556Z" }, - { url = "https://files.pythonhosted.org/packages/d9/5d/2a04dfd412c87d1da220260a5cf8444d36fa356d1f993ee1db5ad820df93/ty-0.0.1a31-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:cb2ebbc8065f4dd09e4b82f492becc55cad39068e842f82bfa1c9f7b9864b034", size = 9443773, upload-time = "2025-12-04T09:01:39.958Z" }, - { url = "https://files.pythonhosted.org/packages/1f/5e/18c0123b8dcd6a7e7f4a35d3eed127c6c0140377f5986df6bd01c9df5eb1/ty-0.0.1a31-py3-none-musllinux_1_2_i686.whl", hash = "sha256:966984a8a0e4f99d133e9b73bc778d4861b58467bdb85950805d67ff90e73e3e", size = 9532255, upload-time = "2025-12-04T09:01:29.243Z" }, - { url = "https://files.pythonhosted.org/packages/8a/c0/2570e4f891f33c3f9160f052d3759e9c7a3dee29bac5b93ad1f29ed42526/ty-0.0.1a31-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:bc4fe23fddaa78c0b11637a1eff152b95988960e5d240d282b41f827d13b28f0", size = 9837753, upload-time = "2025-12-04T09:02:04.361Z" }, - { url = "https://files.pythonhosted.org/packages/58/ad/6a231c11b95d3aa3f54824edfb7ab13ae13eea405bbcc6c80090551bd1b2/ty-0.0.1a31-py3-none-win32.whl", hash = "sha256:f82f4e051c40033ca9f10cffafc346fd86ea6541e786c2b1fcffa08c661efbaa", size = 9011568, upload-time = "2025-12-04T09:01:54.033Z" }, - { url = "https://files.pythonhosted.org/packages/f7/8b/c07438de84e3e9cbecedd2e8895dc25ca1b110847dd95b5e9f50124eb8d5/ty-0.0.1a31-py3-none-win_amd64.whl", hash = "sha256:12fae6138c4cbd143fe4b5c616056535353a2d0821062d8750132d3ea022fa8f", size = 9880831, upload-time = "2025-12-04T09:01:18.284Z" }, - { url = "https://files.pythonhosted.org/packages/a3/9c/ad589282e76e185eb54c3ce212182f7a28547ed20a5a08b51f9684dc2849/ty-0.0.1a31-py3-none-win_arm64.whl", hash = "sha256:4cc339de4dd4b8dd7167cfd1f826a25e303b3dec27da74596a0ce3ed83bcd293", size = 9380327, upload-time = "2025-12-04T09:01:49.651Z" }, + { url = "https://files.pythonhosted.org/packages/fc/b7/d5a5c611baaa20e85971a7c9a527aaf3e8fb47e15de88d1db39c64ee3638/ty-0.0.1a34-py3-none-linux_armv6l.whl", hash = "sha256:00c138e28b12a80577ee3e15fc638eb1e35cf5aa75f5967bf2d1893916ce571c", size = 9708675, upload-time = "2025-12-12T18:29:06.571Z" }, + { url = "https://files.pythonhosted.org/packages/cb/62/0b78976c8da58b90a86d1a1b8816ff4a6e8437f6e52bb6800c4483242e7f/ty-0.0.1a34-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:cbb9c187164675647143ecb56e684d6766f7d5ba7f6874a369fe7c3d380a6c92", size = 9515760, upload-time = "2025-12-12T18:28:56.901Z" }, + { url = "https://files.pythonhosted.org/packages/39/1f/4e3d286b37aab3428a30b8f5db5533b8ce6e23b1bd84f77a137bd782b418/ty-0.0.1a34-py3-none-macosx_11_0_arm64.whl", hash = "sha256:68b2375b366ee799a896594cde393a1b60414efdfd31399c326bfc136bfc41f3", size = 9064633, upload-time = "2025-12-12T18:29:10.211Z" }, + { url = "https://files.pythonhosted.org/packages/5d/31/e17049b868f5cac7590c000f31ff9453e4360125416da4e8195e82b5409a/ty-0.0.1a34-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f6b68d9673e43bdd5bdcaa6b5db50e873431fc44dde5e25e253e8226ec93ac1", size = 9310295, upload-time = "2025-12-12T18:29:21.635Z" }, + { url = "https://files.pythonhosted.org/packages/77/1d/7a89b3032e84a01223d0c33e47f33eef436ca36949b28600554a2a4da1f8/ty-0.0.1a34-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:832b360fd397c076e294c252db52581b9ecb38d8063d6262ac927610540702be", size = 9498451, upload-time = "2025-12-12T18:29:24.955Z" }, + { url = "https://files.pythonhosted.org/packages/fa/5e/e782c4367d14b965b1ee9bddc3f3102982ff1cc2dae699c201ecd655e389/ty-0.0.1a34-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0cb6fc497f1feb67e299fd3507ed30498c7e15b31099b3dcdbeca6b7ac2d3129", size = 9912522, upload-time = "2025-12-12T18:29:00.252Z" }, + { url = "https://files.pythonhosted.org/packages/9c/25/4d72d7174b60adeb9df6e4c5d8552161da2b84ddcebed8ab37d0f7f266ab/ty-0.0.1a34-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:284c8cfd64f255d942ef21953e3d40d087c74dec27e16495bd656decdd208f59", size = 10518743, upload-time = "2025-12-12T18:28:54.944Z" }, + { url = "https://files.pythonhosted.org/packages/05/c5/30a6e377bcab7d5b65d5c78740635b23ecee647bf268c9dc82a91d41c9ba/ty-0.0.1a34-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c34b028305642fd3a9076d4b07d651a819c61a65371ef38cde60f0b54dce6180", size = 10285473, upload-time = "2025-12-12T18:29:08.432Z" }, + { url = "https://files.pythonhosted.org/packages/97/aa/d2cd564ee37a587c8311383a5687584c9aed241a9e67301ee0280301eef3/ty-0.0.1a34-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ad997a21648dc64017f11a96b7bb44f088ab0fd589decadc2d686fc97b102f4e", size = 10298873, upload-time = "2025-12-12T18:29:12.38Z" }, + { url = "https://files.pythonhosted.org/packages/2e/80/c427dabd51b5d8b50fc375e18674c098877a9d6545af810ccff4e40ff74a/ty-0.0.1a34-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c1afe9798f94c0fbb9e42ff003dfcb4df982f97763d93e5b1d53f9da865a53af", size = 9851399, upload-time = "2025-12-12T18:29:02.231Z" }, + { url = "https://files.pythonhosted.org/packages/cc/d8/7240c0e13bc3405b190b4437fbc67c86aa70e349b282e5fa79282181532b/ty-0.0.1a34-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:bd335010aa211fbf8149d3507d6331bdb947d5328ca31388cecdbd2eb49275c3", size = 9261475, upload-time = "2025-12-12T18:29:04.638Z" }, + { url = "https://files.pythonhosted.org/packages/6b/a1/6538f8fe7a5b1a71b20461d905969b7f62574cf9c8c6af580b765a647289/ty-0.0.1a34-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:29ebcc56aabaf6aa85c3baf788e211455ffc9935b807ddc9693954b6990e9a3c", size = 9554878, upload-time = "2025-12-12T18:29:16.349Z" }, + { url = "https://files.pythonhosted.org/packages/3d/f2/b8ab163b928de329d88a5f04a5c399a40c1c099b827c70e569e539f9a755/ty-0.0.1a34-py3-none-musllinux_1_2_i686.whl", hash = "sha256:0cbb5a68fddec83c39db6b5f0a5c5da5a3f7d7620e4bcb4ad5bf3a0c7f89ab45", size = 9651340, upload-time = "2025-12-12T18:29:19.92Z" }, + { url = "https://files.pythonhosted.org/packages/dc/1b/1e4e24b684ee5f22dda18d86846430b123fb2e985f0c0eb986e6eccec1b9/ty-0.0.1a34-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:f9b3fd934982a9497237bf39fa472f6d201260ac95b3dc75ba9444d05ec01654", size = 9944488, upload-time = "2025-12-12T18:28:58.544Z" }, + { url = "https://files.pythonhosted.org/packages/80/b0/6435f1795f76c57598933624af58bf67385c96b8fa3252f5f9087173e21a/ty-0.0.1a34-py3-none-win32.whl", hash = "sha256:bdabc3f1a048bc2891d4184b818a7ee855c681dd011d00ee672a05bfe6451156", size = 9151401, upload-time = "2025-12-12T18:28:53.028Z" }, + { url = "https://files.pythonhosted.org/packages/73/2e/adce0d7c07f6de30c7f3c125744ec818c7f04b14622a739fe17d4d0bdb93/ty-0.0.1a34-py3-none-win_amd64.whl", hash = "sha256:a4caa2e58685d6801719becbd0504fe61e3ab94f2509e84759f755a0ca480ada", size = 10031079, upload-time = "2025-12-12T18:29:14.556Z" }, + { url = "https://files.pythonhosted.org/packages/23/0d/1f123c69ce121dcabf5449a456a9a37c3bbad396e9e7484514f1fe568f96/ty-0.0.1a34-py3-none-win_arm64.whl", hash = "sha256:dd02c22b538657b042d154fe2d5e250dfb20c862b32e6036a6ffce2fd1ebca9d", size = 9534879, upload-time = "2025-12-12T18:29:18.187Z" }, ] [[package]]