Skip to main content

A compiler and bytecode interpreter for the uza programming language

Project description

Table of contents

Uza

Uza is a small statically typed programming language. This repo features an uza compiler/interpreter written in Python in the uzac directory. It also features a garbage collected virtual machine, based on the second part of Bob Nystrom's Crafting Interpreters, in the vm directory.

Here is an example of an uza program:

func fib(n : int) => int {
    if n <= 1 then return n
    return fib(n-1) + fib(n-2)
}

const n = 30
println("The 30th fibonacci number is " + fib(30).toString())

Language Tour

Variables

Variables use the var keyword and take an optional type:

var count: int = 42
var str = "hello world" // 'string' type inferred

Constants are declared using const and cannot be reassigned:

const G = 10.0

G = 9.81 // FAILS: UzaTypeError: cannot reassign const variable 'G'

Blocks

Blocks statements allow for creation of a new scope.

var i = 0
{
  var i = 42
  const foo = "unused"
  println(i) // 42
}
println(i) // 0
println(foo) // UzaNameError: variable `foo` not defined in this scope

Functions

Functions are defined using func and must be typed:

func add(a: int, b: int) => int {
    return a + b
}

Functions that have a void return type always return nil:

func printMessage() => void {
    print("Hello, World!")
}

print(printMessage)//Hello, World!nil

Lists

Lists are dynamic arrays and can take a generic type. A List instead can be constructed with List<type>().

var numbers: List<int> = List<int>()
numbers.append(1)
numbers.append(42)

println(numbers.len()) // 2
println(numbers) // [1, 42]

numbers.set(0, 97)
println(numbers) // [97, 42]

const DESCENDING = false
numbers.sort(DESCENDING)
println(numbers) // [42, 97]

Control Flow

Conditionals

const x = 15
if x > 10 {
  println("Large") // Large
}
else {
  println("Small")
}

println(2 > 1 and true) // true

println(not (false or true)) // false

If statements can also take a single expression/statement instead of a block by using the then keyword:

const x = 7

if x > 10 then println("Large")
else if x > 5 then println("Medium") // Medium
else println("Small")

// identical to:
if x > 10 then
  println("Large")
else if x > 5 then
  println("Medium") // Medium
else
  println("Small")

Loops

For loops are take in three optional statements:

  • A initializer, that is run before the first iteration.
  • A conditional, that is checked every iteration.
  • And a statement that is run after each iteration.
for var i = 0; i < 3; i += 1 {
    println(i)
}

While loops only take a conditional that evaluates to a boolean:

var count = 0
while count < 10 {
  count += 1
}

Like if statments, while and for loops can take in a block, or a single expression or statment using the do keyword:

println("pair numbers in [0, 10]: ")
for var i = 0; i <= 10; i += 2 do println(i)

Unit Conversions

toInt and toFloat

const i: int = 1
const f: float = i + 0.5 // implicit conversion of i to float
println(f) // 1.5


const str = "1.6"
const bigger = str.toFloat()
println(bigger > f) // true

//truncate int
println(bigger.toInt() < f) // true

toString

const number = 42
println(number.toString() + "24") // 4224

Scientific notation

const str = "1.5E9"
const scientific = str.toFloat()
println(scientific)                          // 1500000000.000
println(scientific.toInt() == 1_500_000_000) // true

String Handling

String Concatenation

var message = "Hello, " + "World!"

Substrings

const str = "aldskfjldjaflj Hello, world!"

var i = 0
while str.get(i) != " " do i += 1

println(str.substring(i + 1, str.len())) // Hello world!

f-strings

String interpolations, with a syntax similar to Python:

const name = "Jane"
const age = 33
println(f"{name} is {age.toString()} years old.")

Utils

Other useful functions:

const foo: float = abs(3.14)

print("hi")
flush() // flush stdout

const t: int = timeNs() // nanoseconds counter

const ms: int = timeMs() // milliseconds counter

const n: int = randInt(1000) // random value between 0 and N (excluded)

sleep(1000) // sleep thread for N ms

https://github.com/user-attachments/assets/88df8be4-6310-4c58-9edf-4bcea188dad4

Output of examples/game_of_life.uza, an implementation of Conway's Game of Life. More examples are available in the examples directory.

Usage

Compile and execute.

uza source.uza

Compile and execute from stdin.

echo 'println("hello world!")' | uza

Compile to bytecode. Execute bytecode without compilation step.

uza source.uza -c // Wrote X bytes to code.uzb
uza code.uzb

Interpret without VM installed (slow execution)

uza source.uza -i

For more options:

uza --help

Installation and Build

[!NOTE] Uza is a personal learning project and not meant for production use. Unless you like a challenge :^)

[!WARNING] There are no official prebuilt binaries for Linux and Windows on ARM64 or ARMv7. You will need to build from source for these architectures.

The main way to install uza is through pip, Python's package manager. Installing in a venv removes the need to edit the PATH but requires the venv to be active to use uza.

venv install

The venv environement has to be active to run uza.

UNIX shell

python3 -m venv venv
source ./venv/bin/activate
pip install uza
uza --help

Powershell

python3 -m venv venv
venv\Scripts\activate
pip install uza
uza --help

global pip install

UNIX

pip install uza
uza --help

Windows

pip install uza --force-reinstall --user
uza --help

You might get one of the following warnings when installing uza globally:

WARNING: The script uza is installed in '/opt/homebrew/Cellar/pypy3.10/7.3.17_1/libexec/bin' which is not on PATH.
Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.
NOTE: The current PATH contains path(s) starting with `~`, which may not be expanded by all applications.

------------------

WARNING: The script uza is installed in '/home/smith/.local/bin' which is not on PATH.
Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.

------------------

But still not in path so you have to   WARNING: The script uza.exe is installed in 'C:\Users\doe\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\Scripts' which is not on PATH.
  Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.

To use without adding to path:

python3 -m uzac --help

Build from source

[!NOTE] The python compiler also has a tree-walk interpret, using the -i flag, for which there is no need to compile the VM. To interpret uza in python, prefer using a python interpreter with a JIT such as pypy3 for much better performance.

git clone git@github.com:msanlop/uza.git
cd uza
mkdir build && cd build
cmake ..
make

You can now run uza by executing python uza from root dir of the repo.

Add local installation to path (UNIX)

printf "#!$(which python3)\n$(cat uza)" > uza
export PATH=$(pwd):$PATH
./uza --help

Export in shell config file, e.g. ~/.bashrc, to persist across sessions.

Testing

pip install -r requirements.txt
pytest

Benchmark

This microbenchmark should be taken with a grain of salt. It's not a good representation of the overall speed of each language and interpreter. The only reason I include this is because I like comparing performance and looking at charts :).

This benchmark runs a recursive fibonacci function to compute the 35th fibonacci number. The benchmark code can be found in examples/fibonacci_bench.uza. The following interpreters were tested:

  • uza (pypy): A tree-walk uza interpreter running on PyPy, a JIT implementation of Python. (Running uza with the -i flag)
  • uza: Uza running the bytecode VM in the vm directory
  • clox: A Lox bytecode interpreter. The VM implementation is similar to the VM in this repo
  • python3.12: The reference Python implementation
  • pypy3.10: JIT implementation of Python

A chart showing different languages speeds on a fibonacci benchark, including very slow uza with pypy

The chart above shows just how slow the tree-walk approach is. Running a tree-walk interpreter of uza, inside pypy is orders of magnitude slower than running a C bytecode interpreter, or running a JIT with pypy. Running the same benchmark with a tree-walk interpreter inside of CPython instead of PyPy would probably take minutes!

A chart showing different languages speeds on a fibonacci benchark

Taking a closer look at other values, we notice similar performance for the bytecode interpreters. We might the uza would perform better than Lox and Python, since it is staically typed, but the current VM implementation is still very close to the clox one. There are still quite a few runtime type checks, which could be avoided by emiting more specialized opcodes. For example, instead of having a single OP_ADD for additions, the compiler could emit OP_IADD, OP_FADD, and OP_STRCONCAT to separately handle integer, float and string additions respectively. Implicit integer conversions when adding integers to floats would also have to be handled at compile-time instead of runtime by emitting OP_ITOF for example — analogous to the JVM's i2f instruction — as the current OP_TOINT does runtime checks for the base type. The compiler also does zero optimisations on the AST, so that's anothing thing to explore.

PyPy's JIT shows an incredible, almost 10x improvement over CPython in this benchmark. Note that in real-world cases, the average speedup is closer to 2.9x. It'll be interesting to see how the new CPython JIT will fare in comparaison to PyPy in the coming versions.

TODO

  • Structs
  • Closures, lambda functions
  • Generics and overloading for user functions
  • Iterators
  • Maps
  • Modules, stdlib
  • JIT, add jitting to the VM or try using RPython
  • it never ends...

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

uza-0.0.2-pp310-pypy310_pp73-win_amd64.whl (77.0 kB view details)

Uploaded PyPyWindows x86-64

uza-0.0.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (76.8 kB view details)

Uploaded PyPymanylinux: glibc 2.17+ x86-64

uza-0.0.2-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl (83.7 kB view details)

Uploaded PyPymanylinux: glibc 2.17+ i686

uza-0.0.2-pp310-pypy310_pp73-macosx_11_0_arm64.whl (69.5 kB view details)

Uploaded PyPymacOS 11.0+ ARM64

uza-0.0.2-cp313-cp313-win_amd64.whl (77.0 kB view details)

Uploaded CPython 3.13Windows x86-64

uza-0.0.2-cp313-cp313-win32.whl (74.0 kB view details)

Uploaded CPython 3.13Windows x86

uza-0.0.2-cp313-cp313-musllinux_1_2_x86_64.whl (77.6 kB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ x86-64

uza-0.0.2-cp313-cp313-musllinux_1_2_i686.whl (84.9 kB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ i686

uza-0.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (76.8 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

uza-0.0.2-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl (83.7 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ i686

uza-0.0.2-cp313-cp313-macosx_11_0_arm64.whl (69.5 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

uza-0.0.2-cp312-cp312-win_amd64.whl (77.0 kB view details)

Uploaded CPython 3.12Windows x86-64

uza-0.0.2-cp312-cp312-win32.whl (74.0 kB view details)

Uploaded CPython 3.12Windows x86

uza-0.0.2-cp312-cp312-musllinux_1_2_x86_64.whl (77.6 kB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ x86-64

uza-0.0.2-cp312-cp312-musllinux_1_2_i686.whl (84.9 kB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ i686

uza-0.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (76.8 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

uza-0.0.2-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl (83.7 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ i686

uza-0.0.2-cp312-cp312-macosx_11_0_arm64.whl (69.5 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

uza-0.0.2-cp311-cp311-win_amd64.whl (77.0 kB view details)

Uploaded CPython 3.11Windows x86-64

uza-0.0.2-cp311-cp311-win32.whl (74.0 kB view details)

Uploaded CPython 3.11Windows x86

uza-0.0.2-cp311-cp311-musllinux_1_2_x86_64.whl (77.6 kB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ x86-64

uza-0.0.2-cp311-cp311-musllinux_1_2_i686.whl (84.9 kB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ i686

uza-0.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (76.8 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

uza-0.0.2-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl (83.7 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ i686

uza-0.0.2-cp311-cp311-macosx_11_0_arm64.whl (69.5 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

uza-0.0.2-cp310-cp310-win_amd64.whl (77.0 kB view details)

Uploaded CPython 3.10Windows x86-64

uza-0.0.2-cp310-cp310-win32.whl (74.0 kB view details)

Uploaded CPython 3.10Windows x86

uza-0.0.2-cp310-cp310-musllinux_1_2_x86_64.whl (77.6 kB view details)

Uploaded CPython 3.10musllinux: musl 1.2+ x86-64

uza-0.0.2-cp310-cp310-musllinux_1_2_i686.whl (84.9 kB view details)

Uploaded CPython 3.10musllinux: musl 1.2+ i686

uza-0.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (76.8 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

uza-0.0.2-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl (83.7 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ i686

uza-0.0.2-cp310-cp310-macosx_11_0_arm64.whl (69.5 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

File details

Details for the file uza-0.0.2-pp310-pypy310_pp73-win_amd64.whl.

File metadata

File hashes

Hashes for uza-0.0.2-pp310-pypy310_pp73-win_amd64.whl
Algorithm Hash digest
SHA256 397722bc6df1287d08a30f67746528e837828e5a83de5319acc76079b3a55ebc
MD5 c494a29b15a60c9fee1b38cd72c3bdd6
BLAKE2b-256 a75f420d262b51183ff8f53c9532c3f3da4b0c4ab631c0004ecaf81f89a1370a

See more details on using hashes here.

Provenance

The following attestation bundles were made for uza-0.0.2-pp310-pypy310_pp73-win_amd64.whl:

Publisher: distribute.yml on msanlop/uza

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file uza-0.0.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for uza-0.0.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 ac9c7268278bc94cabf3a74e51c81d7f1055ce82837759620f2bffeb40d60cdb
MD5 6adee5f0ac27295bd7403d83e7d958ec
BLAKE2b-256 8e965f90ac1074758c10d63bb29a08739a618e72a82dbf39e36b7a96219cd571

See more details on using hashes here.

Provenance

The following attestation bundles were made for uza-0.0.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: distribute.yml on msanlop/uza

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file uza-0.0.2-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for uza-0.0.2-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 4b1ccdbbcfdfac730b5894d16318ece3555e0a8b89a47d33a55b422406fdc1d5
MD5 dcfd638caf1014fd5ca7d7ad7ea7d5a0
BLAKE2b-256 9b2a5173aee9d8b23eaa9f00dc0b3e6b8e27bea3385cd46aa361822ebea06695

See more details on using hashes here.

Provenance

The following attestation bundles were made for uza-0.0.2-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl:

Publisher: distribute.yml on msanlop/uza

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file uza-0.0.2-pp310-pypy310_pp73-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for uza-0.0.2-pp310-pypy310_pp73-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 043fbf686f8d808907c56be4ec8eadd1d3c9f5af2d83339cdaff12ea8a477807
MD5 cbaf7b33f3951bbfcdf1621d7e530007
BLAKE2b-256 67f7cc4752f74773c9def380b0e3eae5a7442f57df50d89d9a2ddac77f6629a7

See more details on using hashes here.

Provenance

The following attestation bundles were made for uza-0.0.2-pp310-pypy310_pp73-macosx_11_0_arm64.whl:

Publisher: distribute.yml on msanlop/uza

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file uza-0.0.2-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: uza-0.0.2-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 77.0 kB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for uza-0.0.2-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 57fbf8124d57d2ad7472205a8a3e0b9987adb59558139daf2e1c680c6ac3f3d6
MD5 7f0b6b515ec9dd1d3fcbc38703220e17
BLAKE2b-256 7f20c00094138dce87e50746358a76dd7d6a4eef17541bd6b755efc5427da7f8

See more details on using hashes here.

Provenance

The following attestation bundles were made for uza-0.0.2-cp313-cp313-win_amd64.whl:

Publisher: distribute.yml on msanlop/uza

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file uza-0.0.2-cp313-cp313-win32.whl.

File metadata

  • Download URL: uza-0.0.2-cp313-cp313-win32.whl
  • Upload date:
  • Size: 74.0 kB
  • Tags: CPython 3.13, Windows x86
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for uza-0.0.2-cp313-cp313-win32.whl
Algorithm Hash digest
SHA256 8cc30f3ff135d12c99b1830e816e70fa606afbbdfbd868fbd2c0263eb9dd15fe
MD5 45734be6c545d2ad00888cfacb0c4e56
BLAKE2b-256 53cfcfd4a9cb58fc51cc15aafa042b0dd96522715d581aedd691b78d740c62ed

See more details on using hashes here.

Provenance

The following attestation bundles were made for uza-0.0.2-cp313-cp313-win32.whl:

Publisher: distribute.yml on msanlop/uza

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file uza-0.0.2-cp313-cp313-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for uza-0.0.2-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 4d718c07a52da9109a7a6a5ed9228441645c2f8005e148b62cc90d116f2aa1a0
MD5 3fae8a9246ae5bea098e616789e7b929
BLAKE2b-256 3d6434a653732ccaf219ed6735ab706c0d224e9a586df0f3a69eb736ae7fbea8

See more details on using hashes here.

Provenance

The following attestation bundles were made for uza-0.0.2-cp313-cp313-musllinux_1_2_x86_64.whl:

Publisher: distribute.yml on msanlop/uza

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file uza-0.0.2-cp313-cp313-musllinux_1_2_i686.whl.

File metadata

  • Download URL: uza-0.0.2-cp313-cp313-musllinux_1_2_i686.whl
  • Upload date:
  • Size: 84.9 kB
  • Tags: CPython 3.13, musllinux: musl 1.2+ i686
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for uza-0.0.2-cp313-cp313-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 e208de6cfb0fc5da61932559f05a93e86b14a21ece8ed37fda3b36f87e04e451
MD5 502758f13aecf4e943dd478d9601bbf5
BLAKE2b-256 daf0854d4118c6c22e89532171ce1305a4d271720ff76b77094cc0b78b600a84

See more details on using hashes here.

Provenance

The following attestation bundles were made for uza-0.0.2-cp313-cp313-musllinux_1_2_i686.whl:

Publisher: distribute.yml on msanlop/uza

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file uza-0.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for uza-0.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 a0a65c90b2c681501961c09b707326ed06eb02c11e1d8e60ac7b19947d1af2bc
MD5 3b1032d0ff5c7a552de8151d6612002c
BLAKE2b-256 0679757f9a22b2524c397721af0870000c34b3b52724357f87ec8b47bb777dda

See more details on using hashes here.

Provenance

The following attestation bundles were made for uza-0.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: distribute.yml on msanlop/uza

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file uza-0.0.2-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for uza-0.0.2-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 79d9156b69aa8fbe0ace98caed6bd6fb75c3748220e96180aa83d18eedfaad43
MD5 557cc2a89758b38a8c8b76bd01630970
BLAKE2b-256 9b8cedcfff1138f7ff76c78fab69ab3b5bb201a1bd2c46667831deb53063d21b

See more details on using hashes here.

Provenance

The following attestation bundles were made for uza-0.0.2-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl:

Publisher: distribute.yml on msanlop/uza

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file uza-0.0.2-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

  • Download URL: uza-0.0.2-cp313-cp313-macosx_11_0_arm64.whl
  • Upload date:
  • Size: 69.5 kB
  • Tags: CPython 3.13, macOS 11.0+ ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for uza-0.0.2-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 14e076909432abee465643b54d25181b59000080a187f2832ad7a7bce63f9cd4
MD5 2456b5ead68157207a9e8b2d0375307a
BLAKE2b-256 f81c79a9a5936936858800b0219f212552d3c75465356e8339ce21d92e384495

See more details on using hashes here.

Provenance

The following attestation bundles were made for uza-0.0.2-cp313-cp313-macosx_11_0_arm64.whl:

Publisher: distribute.yml on msanlop/uza

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file uza-0.0.2-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: uza-0.0.2-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 77.0 kB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for uza-0.0.2-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 258612079d192645db0718b6f6736f3a4d93ac56d9b0088a4b405760777ceedc
MD5 9a41a47b554c05c35a52a7190fe2c97a
BLAKE2b-256 ed460e9ed89802b0003b58916ade951ce52fa2e92f87100361511c40d6d9f822

See more details on using hashes here.

Provenance

The following attestation bundles were made for uza-0.0.2-cp312-cp312-win_amd64.whl:

Publisher: distribute.yml on msanlop/uza

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file uza-0.0.2-cp312-cp312-win32.whl.

File metadata

  • Download URL: uza-0.0.2-cp312-cp312-win32.whl
  • Upload date:
  • Size: 74.0 kB
  • Tags: CPython 3.12, Windows x86
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for uza-0.0.2-cp312-cp312-win32.whl
Algorithm Hash digest
SHA256 d8c4a6227696e63ed4e7570a74cc8d26bf84ab0afc29b2c8cbf6b36cd0bfcbe0
MD5 479c803aad18a81ee8d70a1b4fb1b0f0
BLAKE2b-256 059fe13552c9adfb0007207d22f942a2561654ab8f4ad9224604357bb8636a1d

See more details on using hashes here.

Provenance

The following attestation bundles were made for uza-0.0.2-cp312-cp312-win32.whl:

Publisher: distribute.yml on msanlop/uza

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file uza-0.0.2-cp312-cp312-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for uza-0.0.2-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 9b5ec059a6f5d0081aeb7b37387c6eb857548115113ba65bdae4d6495b9c5c84
MD5 4fb61f3411ceb8fe6e7fe8ad9ff89c64
BLAKE2b-256 1430a4a423c38077c8485156e494743abcfe4d26ccc45ecd494f8736fb26c8bd

See more details on using hashes here.

Provenance

The following attestation bundles were made for uza-0.0.2-cp312-cp312-musllinux_1_2_x86_64.whl:

Publisher: distribute.yml on msanlop/uza

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file uza-0.0.2-cp312-cp312-musllinux_1_2_i686.whl.

File metadata

  • Download URL: uza-0.0.2-cp312-cp312-musllinux_1_2_i686.whl
  • Upload date:
  • Size: 84.9 kB
  • Tags: CPython 3.12, musllinux: musl 1.2+ i686
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for uza-0.0.2-cp312-cp312-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 372d87b7826147269346845824918f1fe7d1e297588654002728e8dc3f9a48a4
MD5 7a2c82691101ca218ec2960e1e310c72
BLAKE2b-256 cb4e12cdd036fdb0f9d3d3b50bc4b6f7a8e19bf53b45d00087c353d6b4eb6f86

See more details on using hashes here.

Provenance

The following attestation bundles were made for uza-0.0.2-cp312-cp312-musllinux_1_2_i686.whl:

Publisher: distribute.yml on msanlop/uza

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file uza-0.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for uza-0.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 f5282c31eaedcc9a38a217f5c9c06d81b3fa13e59a98099995bee1d3ae225438
MD5 a43a47d20901ca71bc0cb7d660f4ab38
BLAKE2b-256 609d8afa856097268dc978a09fe49bae8968d7a3c3aefac9d37b9c2229267d77

See more details on using hashes here.

Provenance

The following attestation bundles were made for uza-0.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: distribute.yml on msanlop/uza

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file uza-0.0.2-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for uza-0.0.2-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 494e85ff08ff8adb62a234d241c3fb87276c0c0fae8b21420be330e43d1a819e
MD5 e1fa32656d012020e3be079361fa3b78
BLAKE2b-256 087e41cd59b33fcb3f87bb48262b7bae353d7d1255e2d5f5845e6e9297541ffd

See more details on using hashes here.

Provenance

The following attestation bundles were made for uza-0.0.2-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl:

Publisher: distribute.yml on msanlop/uza

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file uza-0.0.2-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

  • Download URL: uza-0.0.2-cp312-cp312-macosx_11_0_arm64.whl
  • Upload date:
  • Size: 69.5 kB
  • Tags: CPython 3.12, macOS 11.0+ ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for uza-0.0.2-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 4e8dab3a44dc00f9eec7f3f1b0b9754209e4edd1430e064a05c0a0fdf14c7770
MD5 ea7b928f9284805762992b2170a35101
BLAKE2b-256 243e299a43feb7bb773b3059694e044047f36de9fe85a4c218894625e351bd2b

See more details on using hashes here.

Provenance

The following attestation bundles were made for uza-0.0.2-cp312-cp312-macosx_11_0_arm64.whl:

Publisher: distribute.yml on msanlop/uza

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file uza-0.0.2-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: uza-0.0.2-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 77.0 kB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for uza-0.0.2-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 d40ede83f14710523cfb4f52b0efb9f5335eb1bebeb6be3aa4b83afb7a60822a
MD5 7e8d79eb151aac37e0fc0df9002807cb
BLAKE2b-256 738af27a267db7f6ac7f0a2c6ccfe2d1e8528f12097ce62adc7f298fc6868f27

See more details on using hashes here.

Provenance

The following attestation bundles were made for uza-0.0.2-cp311-cp311-win_amd64.whl:

Publisher: distribute.yml on msanlop/uza

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file uza-0.0.2-cp311-cp311-win32.whl.

File metadata

  • Download URL: uza-0.0.2-cp311-cp311-win32.whl
  • Upload date:
  • Size: 74.0 kB
  • Tags: CPython 3.11, Windows x86
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for uza-0.0.2-cp311-cp311-win32.whl
Algorithm Hash digest
SHA256 0c04d71ce6a809ea8f79e00014053bbc9c047e86aaadd4d2e62057aa1f917120
MD5 2c543cf423e1d480227f31ab6d74749c
BLAKE2b-256 50851ca6bf517767a582a4a3ba939fb466573e3f5123f6e7bb486c49157556b1

See more details on using hashes here.

Provenance

The following attestation bundles were made for uza-0.0.2-cp311-cp311-win32.whl:

Publisher: distribute.yml on msanlop/uza

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file uza-0.0.2-cp311-cp311-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for uza-0.0.2-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 69f3e3a5d24bb5abf37b994069fcffc1d5d1949bebe2029a9fe3e94a496278ee
MD5 757dfff5f6161d92299e670ddf3c7066
BLAKE2b-256 da5eaae000d2699ee4bfd60ae2b2e3720370fb064a8d0a1860033a4399cb4a4b

See more details on using hashes here.

Provenance

The following attestation bundles were made for uza-0.0.2-cp311-cp311-musllinux_1_2_x86_64.whl:

Publisher: distribute.yml on msanlop/uza

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file uza-0.0.2-cp311-cp311-musllinux_1_2_i686.whl.

File metadata

  • Download URL: uza-0.0.2-cp311-cp311-musllinux_1_2_i686.whl
  • Upload date:
  • Size: 84.9 kB
  • Tags: CPython 3.11, musllinux: musl 1.2+ i686
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for uza-0.0.2-cp311-cp311-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 1984f0d209454fb3de9c3cc1776fb6b10a651b245efd78b7491292414e2a9b5e
MD5 273fd62d146278d5f8f01886e73bcf63
BLAKE2b-256 7f220e2d42a028ef8f551fb2f75e15efb2e3e241a794f5ec0bcb0cbf8cb248be

See more details on using hashes here.

Provenance

The following attestation bundles were made for uza-0.0.2-cp311-cp311-musllinux_1_2_i686.whl:

Publisher: distribute.yml on msanlop/uza

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file uza-0.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for uza-0.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 84a82f60bab5d962532b79e34f3ce3e66ba9d7d841dfdc9d437af038f9b7086e
MD5 af3242b555278b61a2f763c1f7f54709
BLAKE2b-256 d104702dd2d11d76a8ea95dd85dd330fde0c220e4656235b6322e19ac00ee686

See more details on using hashes here.

Provenance

The following attestation bundles were made for uza-0.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: distribute.yml on msanlop/uza

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file uza-0.0.2-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for uza-0.0.2-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 757e0b3503a2cd2a1e0eed9753957d38f863b93678093e439725fb5766490614
MD5 71e415647c6b2af6c95e72284928a2b2
BLAKE2b-256 8a4874e22e164451aec684f4edc420b85cb66ee3464658655b19b2680b9bd1bd

See more details on using hashes here.

Provenance

The following attestation bundles were made for uza-0.0.2-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl:

Publisher: distribute.yml on msanlop/uza

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file uza-0.0.2-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

  • Download URL: uza-0.0.2-cp311-cp311-macosx_11_0_arm64.whl
  • Upload date:
  • Size: 69.5 kB
  • Tags: CPython 3.11, macOS 11.0+ ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for uza-0.0.2-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 61c53b7c0afcfc5f453f0336d27f3e1a614e197bad0fba003901638ca0aa5731
MD5 b2c0cf52395932bfecb6cb5b487a17ab
BLAKE2b-256 b913206561061125d819f4929478dc105e1c4568ff18df82bb7f9d3b21edcc21

See more details on using hashes here.

Provenance

The following attestation bundles were made for uza-0.0.2-cp311-cp311-macosx_11_0_arm64.whl:

Publisher: distribute.yml on msanlop/uza

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file uza-0.0.2-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: uza-0.0.2-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 77.0 kB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for uza-0.0.2-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 ffe353da0f7370fa35886fb4edc7fa1bb3313b1b83b0c6f11786771e559141ee
MD5 06880d6a75e98d35675692c9e0234044
BLAKE2b-256 c8ff5d58cda3cc56ffbe4d6778855028da8c3ba574e2e746dfc82c602da9fcef

See more details on using hashes here.

Provenance

The following attestation bundles were made for uza-0.0.2-cp310-cp310-win_amd64.whl:

Publisher: distribute.yml on msanlop/uza

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file uza-0.0.2-cp310-cp310-win32.whl.

File metadata

  • Download URL: uza-0.0.2-cp310-cp310-win32.whl
  • Upload date:
  • Size: 74.0 kB
  • Tags: CPython 3.10, Windows x86
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for uza-0.0.2-cp310-cp310-win32.whl
Algorithm Hash digest
SHA256 1b4bb8d6da6d9c17cdef419cbb65f519a7f9a32bef77c3e50fbc8b1cce41fa18
MD5 4961fe9224b931bb36df401999bae2e2
BLAKE2b-256 5e3f8eb54ed247a7d5d91a918a9f535c3392c32d0717ef84fbc4fe39fe57ba0f

See more details on using hashes here.

Provenance

The following attestation bundles were made for uza-0.0.2-cp310-cp310-win32.whl:

Publisher: distribute.yml on msanlop/uza

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file uza-0.0.2-cp310-cp310-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for uza-0.0.2-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 f57aaf7e3c33b342867d3fae1fe9ea8d3e416f91d2858e8e50d8164c6fb1e396
MD5 c779bf5721a92f069d6d7afa4ffdb4ee
BLAKE2b-256 93a028f7c2f0759b9f8a12db6ac27c8f862d2aea11cca7c4839db8d1bbe02357

See more details on using hashes here.

Provenance

The following attestation bundles were made for uza-0.0.2-cp310-cp310-musllinux_1_2_x86_64.whl:

Publisher: distribute.yml on msanlop/uza

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file uza-0.0.2-cp310-cp310-musllinux_1_2_i686.whl.

File metadata

  • Download URL: uza-0.0.2-cp310-cp310-musllinux_1_2_i686.whl
  • Upload date:
  • Size: 84.9 kB
  • Tags: CPython 3.10, musllinux: musl 1.2+ i686
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for uza-0.0.2-cp310-cp310-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 9d037e8acaeef64c4329aec04c15ec26bda7167530eab2105f94af44530d28f2
MD5 7eca562d29691ac037af134937d656c1
BLAKE2b-256 bf18cc9b4e757fca4b0f81d6a80f426c60a43b2a56fe562dac87aae945db8be2

See more details on using hashes here.

Provenance

The following attestation bundles were made for uza-0.0.2-cp310-cp310-musllinux_1_2_i686.whl:

Publisher: distribute.yml on msanlop/uza

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file uza-0.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for uza-0.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 197322165af73ed4d4bec343626b8c1795d8f0b3ca4c8f8a0b2a53d51193d25d
MD5 76e097f9456905e01e148a52d60ae206
BLAKE2b-256 6c4699d0b04eab8b38e60b38d4f9d70d23264b6a2cfea247aced534b67a996da

See more details on using hashes here.

Provenance

The following attestation bundles were made for uza-0.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: distribute.yml on msanlop/uza

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file uza-0.0.2-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for uza-0.0.2-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 484640d603eca74b2e16a856beb9c7b28b4ebf0fb6ddbe7515fe34309ab5d8a6
MD5 ccb6c00b63990363814ed124b3b4d3e0
BLAKE2b-256 0144ecc2295d46176879f16cf05b5fc24a9144fee0374f6dc7c1cc521aba708c

See more details on using hashes here.

Provenance

The following attestation bundles were made for uza-0.0.2-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl:

Publisher: distribute.yml on msanlop/uza

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file uza-0.0.2-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

  • Download URL: uza-0.0.2-cp310-cp310-macosx_11_0_arm64.whl
  • Upload date:
  • Size: 69.5 kB
  • Tags: CPython 3.10, macOS 11.0+ ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for uza-0.0.2-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d47560900ea762ed68f78dd8ed1f107487d1d1357adad789286fe1ad5406f87c
MD5 c6547883a7a522a9c76ffd06e394e02c
BLAKE2b-256 4d366fe79d1194f776d670f048f1f3bf0c65e64580168bee7e2e2d2d55702752

See more details on using hashes here.

Provenance

The following attestation bundles were made for uza-0.0.2-cp310-cp310-macosx_11_0_arm64.whl:

Publisher: distribute.yml on msanlop/uza

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page