Skip to main content

A compiler, optimizer and executor for financial expressions and factors

Project description

KunQuant

Kun

KunQuant is a optimizer, code generator and executor for financial expressions and factors, e.g. (close - open) /((high - low) + 0.001). The initial aim of it is to generate efficient implementation code for Alpha101 of WorldQuant and Alpha158 of Qlib. Some existing implementations of Alpha101 is straightforward but too simple. Hence we are developing KunQuant to provide optimizated code on a batch of general customized factors.

This project has mainly two parts: KunQuant and KunRunner. KunQuant is an optimizer & code generator written in Python. It takes a batch of financial expressions as the input and it generates highly optimized C++ code for computing these expressions. KunRunner is a supporting runtime library and Python wrapper to load and run the generated C++ code from KunQuant. Startring from version 0.1.0, KunQuant no longer depends on cmake to run the generated factor code. Users can use pure Python interfaces to build and run factors.

Experiments show that KunQuant-generated code can be more than 170x faster than naive implementation based on Pandas. We ran Alpha001~Alpha101 with Pandas-based code and our optimized code. See results below:

Datatype Pandas-based KunQuant 1-thread KunQuant 4-threads
Single precision (STs layout) 6.138s 0.083s 0.027s
Double precision (TS layout) 6.332s 0.120s 0.031s

The data was collected on 4-core Intel i7-7700HQ CPU, running synthetic data of 64 stocks with 260 rows of data. Environment:

OS=Ubuntu 22.04.3 on WSL2 on Windows 10
python=3.10.2
pandas=2.1.4
numpy=1.26.3
g++=11.4.0

Supported features of KunQuant

  • Batch mode and stream mode for the input
  • Double and single precision float point data type
  • TS or STs memory layout as input/output in batch mode
  • Python/C/C++ interfaces to call the factor computation functions
  • x86 and ARM CPUs are supported. Linux, Windows and macOS are supported.

Important node: For better performance compared with Pandas, KunQuant suggests to use a multiple of {blocking_len} as the number of stocks in inputs. For single-precision float type and AVX2 instruction set, blocking_len=8. That is, you are suggested to input 8, 16, 24, ..., etc. stocks in a batch, if your code is compiled with AVX2 (without AVX512) and float datatype. Other numbers of stocks are supported, with lower execution performance.

The support matrix of KunQuant

OS(CPU) macOS (Apple Silicon) macOS (x86) Windows (x86) Linux (Ubuntu,x86) Linux (Ubuntu,aarch64)
Install via pip install KunQuant
Tested in CI

Why KunQuant is fast

  • KunQuant parallelizes the computation for factors and uses SIMD (AVX2) to vectorize them.
  • Redundant computation among factors are eliminated: Think what we can do with sum(x), avg(x), stddev(x)? The result of sum(x) is needed by all these factors. KunQuant also automatically finds if a internal result of a factor is used by other factors and try to reuse the results.
  • Temp buffers are minimized by operator-fusion. For a factor like (a+b)/2, pandas and numpy will first compute the result of (a+b) and collect all the result in a buffer. Then, /2 opeator is applied on each element of the temp buffer of (a+b). This will result in large memory usage and bandwidth. KunQuant will generate C++ code to compute (a[i]+b[i])/2 in the same loop, to avoid the need to access and allocate temp memory.

Sponsor this project!

Sponsor the author @Menooker

Installing KunQuant

Install a released version:

pip install KunQuant

Or install the latest version on main branch

pip install -i https://testpypi.python.org/pypi KunQuant

KunQuant supports Windows (MSVC needs to be installed) and Linux (g++ or clang needs to be installed). Please make sure a working C++ compiler with C++11 support is properly installed and configured in your system

On x86-64 CPUs, AVX2-FMA is used by default in the installed KunQuant core library. To run on older CPUs with AVX and without AVX2, you need to build and install KunQuant from source and set environment variable KUN_NO_AVX2=1 before building. See Build from source and developing tips below.

Example: Build & Run Alpha101

This section serves as am example for compiling an existing factor library: Alpha101 and running it. Building and running your own factors will be similar. If you are only interested in how you can run Alpha101 factors, this section is all you need.

First, import KunQuant and necessary modules

from KunQuant.jit import cfake
from KunQuant.Driver import KunCompilerConfig
from KunQuant.Op import Builder, Input, Output
from KunQuant.Stage import Function
from KunQuant.predefined import Alpha101
from KunQuant.runner import KunRunner as kr

Then build a Function object and generete predefined factor alpha001 in Alpha101:

builder = Builder()
with builder:
    vclose = Input("close")
    low = Input("low")
    high = Input("high")
    vopen = Input("open")
    amount = Input("amount")
    vol = Input("volume")
    all_data = Alpha101.AllData(low=low,high=high,close=vclose,open=vopen, amount=amount, volume=vol)
    Output(Alpha101.alpha001(all_data), "alpha001")
f = Function(builder.ops)

You can review the alpha001 expression by print(f). And you will get output

v0 = Input@{name:close}()
v2 = Div@(v0,v1)
v3 = SubConst@{value:1.0}(v2)
v4 = LessThanConst@{value:0.0}(v3)
v5 = WindowedStddev@{window:20}(v3)
v6 = Select@(v4,v5,v0)
v7 = Mul@(v6,v6)
v8 = TsArgMax@{window:5}(v7)
v9 = Rank@(v8)
v10 = Output@{name:alpha001}(v9)

Then compile it into an executable object (it may takes a few seconds to compile. If you encounter an subprocess error, please make sure MSVC or g++ is installed).

lib = cfake.compileit([("alpha101", f, KunCompilerConfig(input_layout="TS", output_layout="TS"))], "out_first_lib", cfake.CppCompilerConfig())
modu = lib.getModule("alpha101")

We will explain the function cfake.compileit in Customize.md. Let's continue to see how to use the compiled lib.

Load your stock data. In this example, load from local pandas files. We assume the open, close, high, low, volumn and amount data for different stocks are stored in different files.

import pandas as pd

# we need a multiple of 8 number of stocks
watch_list = ["000002", "000063", ...]
num_stocks = len(watch_list)
df = []

for stockid in watch_list:
    d = pd.read_hdf(f"{stockid}.hdf5")
    df.append(d)

print(df[0])

cols = df[0].columns.values
col2idx = dict(zip(cols, range(len(cols))))
print("columns to index", col2idx)
num_time = len(df[0])
print("dimension in time", num_time)

Here we printed the data frame of the first stock and the column-index mapping, it should look like:

                 open       high        low      close       volume        amount
date                                                                             
2020-01-02  32.799999  33.599998  32.509998  32.560001  101213040.0  3.342374e+09
2020-01-03  32.709999  32.810001  31.780001  32.049999   80553632.0  2.584310e+09
2020-01-06  31.750000  31.760000  31.250000  31.510000   87684056.0  2.761449e+09
...               ...        ...        ...        ...          ...           ...
2024-01-30  10.000000  10.050000   9.790000   9.790000   79792704.0  7.903654e+08
2024-01-31   9.770000   9.850000   9.560000   9.600000   67478864.0  6.527274e+08
2024-02-01   9.530000   9.660000   9.420000   9.440000   62786032.0  5.980486e+08

[993 rows x 6 columns]
columns to index {'open': 0, 'high': 1, 'low': 2, 'close': 3, 'volume': 4, 'amount': 5}
dimension in time 993

Transform your pandas data to numpy array of shape [features, stocks, time]. Feature here means the columns for open, close, high, low, volumn and amount.

import numpy as np

# [features, stocks, time]
collected = np.empty((len(col2idx), num_stocks, len(df[0])), dtype="float32")
for stockidx, data in enumerate(df):
    for colname, colidx in col2idx.items():
        mat = data[colname].to_numpy()
        collected[colidx, stockidx, :] = mat

Transpose the matrix to [features, time, stocks]

# [features, stocks, time] => [features, time, stocks]
transposed = collected.transpose((0, 2, 1))
transposed = np.ascontiguousarray(transposed)

Now fill the input data in a dict of {"open": matrix_open, "close": ...}

input_dict = dict()
for colname, colidx in col2idx.items():
    input_dict[colname] = transposed[colidx]

Create an executor and compute the factors!

# using 4 threads
executor = kr.createMultiThreadExecutor(4)
out = kr.runGraph(executor, modu, input_dict, 0, num_time)
print("Result of alpha101", out["alpha001"])
print("Shape of alpha101", out["alpha001"].shape)

Each output factors are computed in an array of shape [time, stocks]. The output of above code can be:

Result of alpha001 [[   nan    nan    nan ...    nan    nan    nan]
 [   nan    nan    nan ...    nan    nan    nan]
 [   nan    nan    nan ...    nan    nan    nan]
 ...
 [0.6875 0.1875 0.1875 ... 0.6875 0.6875 0.6875]
 [0.6875 0.1875 0.1875 ... 0.6875 0.6875 0.6875]
 [0.4375 1.     0.875  ... 0.4375 0.4375 0.4375]]
Shape of alpha001 (993, 8)

By default, runGraph will allocate an numpy array for each of the output factor. However, you can preallocate a numpy array and tell KunRunner to fill in this array instead of creating new ones.

outnames = modu.getOutputNames()
out_dict = dict()
# [Factors, Time, Stock]
sharedbuf = np.empty((len(outnames), num_time, num_stocks), dtype="float32")
for idx, name in enumerate(outnames):
    out_dict[name] = sharedbuf[idx]
out = kr.runGraph(executor, modu, input_dict, 0, num_time, out_dict)
# results are in "out" and "sharedbuf"

Note that the executors are reusable. A multithread executor is actually a thread pool inside. If you want to run on multiple batches of data, you don’t need to create new executors for each batch.

Customized factors

KunQuant is a tool for general expressions. You can further read Customize.md for how you can compile your own customized factors. This document also provides infomation on

  • building and keeping the compilation result for later use
  • Loading existing compiled factor library
  • enabling AVX512
  • select data types (float/double)
  • Memory layout

Build from source and developing tips

This section is for developer who would like to build KunQuant from source, instead of installing via pip.

Dependency

  • pybind11 (automatically cloned via git as a submodule)
  • Python (3.7+ with f-string and dataclass support)
  • cmake
  • A working C++ compiler with C++11 support (e.g. clang, g++, msvc)
  • x86-64 CPU with at least AVX instruction set (AVX2-FMA is preferred and required by default), or ARM CPU with NEON instruction set.
  • Optionally requires AVX512 on CPU for better performance

Build and install

git clone https://github.com/Menooker/KunQuant --recursive
cd KunQuant
pip install .

Build in develop mode

If you would like to install KunQuant and edit it. You can use editable mode of python library.

Linux:

# export KUN_BUILD_TYPE=Debug    # to build debug version of KunQuant Runtime
# in the root directory of KunQuant
KUN_BUILD_TESTS=1 pip install -e . 

Windows powershell:

# in the root directory of KunQuant
$env:KUN_BUILD_TESTS=1
pip install -e . 

You can also set environment variable KUN_BUILD_TYPE=Debug before pip install -e . to enable debug build of KunQuant. It will provide debug info of the KunQuant runtime but also slow down the execution.

On x86-64 CPUs, AVX2-FMA is used by default in the built KunQuant core library. To run on older CPUs with AVX and without AVX2, you need to export environment variable KUN_NO_AVX2=1 before pip install -e ..

Useful environment variables

  • KUN_DEBUG=1 Print the internal results of each compiler pass
  • KUN_DEBUG_JIT=1 Print the C++ compilation internals, including command lines, temp results and etc.

Streaming mode

KunQuant can be configured to generate factor libraries for streaming, when the data arrive one at a time. See Stream.md

Utility functions

To compute row-to-row correlation (for IC/IR calculation) and aggregrating functions (like pd.groupby(...)), please see Utility.md.

Using C-style APIs

KunQuant provides C-style APIs to call the generated factor code in shared libraries. See CAPI.md

Operator definitions

See Operators.md

To add new operators, see NewOperators.md

Testing and validation

Unit tests for some of the internal IR transformations:

python tests/test.py
python tests/test2.py

Unit tests for C++ runtime:

python tests/test_runtime.py

To run the runtime UTs, you need to make sure you have built the cmake target KunTest by

cmake --build . --target KunTest

Correctness test of Alpha101

# current dir should be at the base directory of KunQuant
python tests/test_alpha101.py

The input data are randomly genereted data and the results are checked against a modified (corrected) version of Pandas-based code. Note that some of the factors like alpha013 are very sensitive to numerical changes in the intermeidate results, because rank operators are used. The result may be very different after rank even if the input is very close. Hence, the tolerance of these factors will be high to avoid false positives.

To test Alpha158, you need first download the input data and reference result files: alpha158.npz and input.npz.

Then run

# current dir should be at the base directory of KunQuant
python tests/test_alpha158.py --inputs /PATH/TO/input.npz --ref /PATH/TO/alpha158.npz 

This script runs alpha158 with double precision mode in KunQuant. It feeds the library with predefined values from input.npz and check against the result with alpha158.npz, which is computed by qlib.

To generate another Alpha158 result with another randomly generated input, you can run

# current dir should be at the base directory of KunQuant
python ./tests/gen_alpha158.py --tmp /tmp/a158 --qlib /path/to/source/of/qlib --out /tmp

It will create the random input at /tmp/input.npz and result at /tmp/alpha158.npz

Acknowledgement

The implementation and testing code for Alpha101 is based on https://github.com/yli188/WorldQuant_alpha101_code

The implementation code for Alpha158 is based on https://github.com/microsoft/qlib/blob/main/qlib/contrib/data/handler.py. Licensed under the MIT License.

The AVX vector operators at cpp/KunSIMD/cpu was developed based on x86simd as a component of GraphCompiler, a backend of oneDNN Graph API. Licensed under the Apache License, Version 2.0 (the "License").

The MSVC environment configuration was originated from cupy, Licensed under the MIT License: https://github.com/cupy/cupy/blob/main/cupy/cuda/compiler.py

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.

kunquant-0.1.9-cp314-cp314-win_amd64.whl (286.9 kB view details)

Uploaded CPython 3.14Windows x86-64

kunquant-0.1.9-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (284.3 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.24+ x86-64manylinux: glibc 2.28+ x86-64

kunquant-0.1.9-cp314-cp314-macosx_14_0_universal2.whl (243.3 kB view details)

Uploaded CPython 3.14macOS 14.0+ universal2 (ARM64, x86-64)

kunquant-0.1.9-cp313-cp313-win_amd64.whl (282.5 kB view details)

Uploaded CPython 3.13Windows x86-64

kunquant-0.1.9-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (284.2 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.24+ x86-64manylinux: glibc 2.28+ x86-64

kunquant-0.1.9-cp313-cp313-macosx_14_0_universal2.whl (243.0 kB view details)

Uploaded CPython 3.13macOS 14.0+ universal2 (ARM64, x86-64)

kunquant-0.1.9-cp312-cp312-win_amd64.whl (282.5 kB view details)

Uploaded CPython 3.12Windows x86-64

kunquant-0.1.9-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (284.2 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.24+ x86-64manylinux: glibc 2.28+ x86-64

kunquant-0.1.9-cp312-cp312-macosx_14_0_universal2.whl (243.0 kB view details)

Uploaded CPython 3.12macOS 14.0+ universal2 (ARM64, x86-64)

kunquant-0.1.9-cp311-cp311-win_amd64.whl (281.7 kB view details)

Uploaded CPython 3.11Windows x86-64

kunquant-0.1.9-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (284.4 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.24+ x86-64manylinux: glibc 2.28+ x86-64

kunquant-0.1.9-cp311-cp311-macosx_14_0_universal2.whl (242.7 kB view details)

Uploaded CPython 3.11macOS 14.0+ universal2 (ARM64, x86-64)

kunquant-0.1.9-cp310-cp310-win_amd64.whl (281.1 kB view details)

Uploaded CPython 3.10Windows x86-64

kunquant-0.1.9-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (283.3 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.24+ x86-64manylinux: glibc 2.28+ x86-64

kunquant-0.1.9-cp310-cp310-macosx_14_0_universal2.whl (241.5 kB view details)

Uploaded CPython 3.10macOS 14.0+ universal2 (ARM64, x86-64)

kunquant-0.1.9-cp39-cp39-win_amd64.whl (280.8 kB view details)

Uploaded CPython 3.9Windows x86-64

kunquant-0.1.9-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (283.1 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.24+ x86-64manylinux: glibc 2.28+ x86-64

kunquant-0.1.9-cp39-cp39-macosx_14_0_universal2.whl (241.6 kB view details)

Uploaded CPython 3.9macOS 14.0+ universal2 (ARM64, x86-64)

File details

Details for the file kunquant-0.1.9-cp314-cp314-win_amd64.whl.

File metadata

  • Download URL: kunquant-0.1.9-cp314-cp314-win_amd64.whl
  • Upload date:
  • Size: 286.9 kB
  • Tags: CPython 3.14, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for kunquant-0.1.9-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 50d3a6b0f6997b09444506ccab726644ccedf01c6a59d5d91144d3cc71f71f25
MD5 67fb11493d987a743496b0f4c1317569
BLAKE2b-256 2041fd12b3350148085b22c18ff8c74703527cb44e3583d9f1e1f19cca6071ac

See more details on using hashes here.

Provenance

The following attestation bundles were made for kunquant-0.1.9-cp314-cp314-win_amd64.whl:

Publisher: publish-to-test-pypi.yml on Menooker/KunQuant

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

File details

Details for the file kunquant-0.1.9-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for kunquant-0.1.9-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 9e94159c2c348bc6cb5f063f4f27aa0d07acdf0df62ec10c0276032598974727
MD5 f28f41f854a7ff22db78980b81c125b1
BLAKE2b-256 25bc6b94860804b4e6f33e379c093589b8763215f5c7f9d3ae59313eb661ec86

See more details on using hashes here.

Provenance

The following attestation bundles were made for kunquant-0.1.9-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl:

Publisher: publish-to-test-pypi.yml on Menooker/KunQuant

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

File details

Details for the file kunquant-0.1.9-cp314-cp314-macosx_14_0_universal2.whl.

File metadata

File hashes

Hashes for kunquant-0.1.9-cp314-cp314-macosx_14_0_universal2.whl
Algorithm Hash digest
SHA256 c282638225dc98079e0c4a656c580e807b59217f63c5a9601a298518b6e8482c
MD5 852a94eeace375aac87dbe8c9babfc09
BLAKE2b-256 5ae8ea1a3e6ab1a1fe158d4f62daf4a98998fb6486aeed0c29fdb9b396181cbc

See more details on using hashes here.

Provenance

The following attestation bundles were made for kunquant-0.1.9-cp314-cp314-macosx_14_0_universal2.whl:

Publisher: publish-to-test-pypi.yml on Menooker/KunQuant

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

File details

Details for the file kunquant-0.1.9-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: kunquant-0.1.9-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 282.5 kB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for kunquant-0.1.9-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 9bea25fd762e13caa1347b1acb0bb4d5a195c788afa6be66961054352a27736c
MD5 67b8eab56be53aa38eebafdff08d1299
BLAKE2b-256 8b470f466dfbfed6fdff488edb936ef66c50ccbc53034cf1154e6b3da4b2a894

See more details on using hashes here.

Provenance

The following attestation bundles were made for kunquant-0.1.9-cp313-cp313-win_amd64.whl:

Publisher: publish-to-test-pypi.yml on Menooker/KunQuant

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

File details

Details for the file kunquant-0.1.9-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for kunquant-0.1.9-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 5ab438a37a4298c257fc356cd989d0c1eb88ae7c499fb9f15a46608a328c2fd5
MD5 c84b360ef6811f8555259f61fd568e0f
BLAKE2b-256 b4e50c8311c01c52380c1cc3677f05fa0124b5c6a10e068122f0998aa549377b

See more details on using hashes here.

Provenance

The following attestation bundles were made for kunquant-0.1.9-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl:

Publisher: publish-to-test-pypi.yml on Menooker/KunQuant

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

File details

Details for the file kunquant-0.1.9-cp313-cp313-macosx_14_0_universal2.whl.

File metadata

File hashes

Hashes for kunquant-0.1.9-cp313-cp313-macosx_14_0_universal2.whl
Algorithm Hash digest
SHA256 0c6bd684c88f6a58bca5c66434cfc00313b7cefc494184c80a6566f21b1fa07e
MD5 6b14418ad3397b4ddd4135bcc6ed5752
BLAKE2b-256 bc935e13f72d75086e3aee9772703a29a876ffa4d2efccae43fa2f64d94971c4

See more details on using hashes here.

Provenance

The following attestation bundles were made for kunquant-0.1.9-cp313-cp313-macosx_14_0_universal2.whl:

Publisher: publish-to-test-pypi.yml on Menooker/KunQuant

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

File details

Details for the file kunquant-0.1.9-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: kunquant-0.1.9-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 282.5 kB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for kunquant-0.1.9-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 fbc9cdaef33b70fcf8a17d418353653ee51fd97f4c51a2f1cb0f36a6e7e0dbaf
MD5 c9484dc2c15c8772121e266ca1b34b9e
BLAKE2b-256 c8e478104687bd9fe0db95717c18d9a69342bc05a9cbff69a1e6dd8080efb29c

See more details on using hashes here.

Provenance

The following attestation bundles were made for kunquant-0.1.9-cp312-cp312-win_amd64.whl:

Publisher: publish-to-test-pypi.yml on Menooker/KunQuant

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

File details

Details for the file kunquant-0.1.9-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for kunquant-0.1.9-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 e738582c9754f7f8fb884b4dc446035f3763b1f76ac0dd1c5d88b3846959ba34
MD5 67757aee658d81b95c38154eabc2bf01
BLAKE2b-256 7cb8881bd6636ecc3f32276c3750f919c71622a9544b4cf666e859ae4332f2f3

See more details on using hashes here.

Provenance

The following attestation bundles were made for kunquant-0.1.9-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl:

Publisher: publish-to-test-pypi.yml on Menooker/KunQuant

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

File details

Details for the file kunquant-0.1.9-cp312-cp312-macosx_14_0_universal2.whl.

File metadata

File hashes

Hashes for kunquant-0.1.9-cp312-cp312-macosx_14_0_universal2.whl
Algorithm Hash digest
SHA256 d00ea90fb36e32dc6471fb25d90c0c6555f367da21e7abe129fa14937085c919
MD5 30dd50326d1e67ea342b39ecb6aae870
BLAKE2b-256 3cdbb0d514aac925532b00ec7a619b216be8e6d1c8737cb9a5bb2f875b465b4a

See more details on using hashes here.

Provenance

The following attestation bundles were made for kunquant-0.1.9-cp312-cp312-macosx_14_0_universal2.whl:

Publisher: publish-to-test-pypi.yml on Menooker/KunQuant

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

File details

Details for the file kunquant-0.1.9-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: kunquant-0.1.9-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 281.7 kB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for kunquant-0.1.9-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 088b4f873470e1a8650cf61cc3c985e9f0601ab57175a7e71431ebc482b9694b
MD5 128e781119ee003df4580a235ba0c7a0
BLAKE2b-256 d673cfe30ecb0f36001f8d57f587eac5b81920c9aeb49c40a9a8f96405548780

See more details on using hashes here.

Provenance

The following attestation bundles were made for kunquant-0.1.9-cp311-cp311-win_amd64.whl:

Publisher: publish-to-test-pypi.yml on Menooker/KunQuant

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

File details

Details for the file kunquant-0.1.9-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for kunquant-0.1.9-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 75047344e9b2fcb513723e3dce12a2885b8ad107d09f3fabf6148277b9d81198
MD5 71c11bc86009f1bf748e487928194c80
BLAKE2b-256 2d499c4e8cd41fc8b5b87a263039d0cd84c44a68e3fa24debc51817e3836097b

See more details on using hashes here.

Provenance

The following attestation bundles were made for kunquant-0.1.9-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl:

Publisher: publish-to-test-pypi.yml on Menooker/KunQuant

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

File details

Details for the file kunquant-0.1.9-cp311-cp311-macosx_14_0_universal2.whl.

File metadata

File hashes

Hashes for kunquant-0.1.9-cp311-cp311-macosx_14_0_universal2.whl
Algorithm Hash digest
SHA256 52f943096a1304dfef354740454a3a739dde15580dc7cf8e4dde40890cdd2d28
MD5 29e515e9727790624b1a7b376e4eb9cf
BLAKE2b-256 c65ef144fe8296df024585932b7cf31d2d6241027a7dfd1ded98281d6b31f406

See more details on using hashes here.

Provenance

The following attestation bundles were made for kunquant-0.1.9-cp311-cp311-macosx_14_0_universal2.whl:

Publisher: publish-to-test-pypi.yml on Menooker/KunQuant

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

File details

Details for the file kunquant-0.1.9-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: kunquant-0.1.9-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 281.1 kB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for kunquant-0.1.9-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 b52231e8d5ad6c20617096b0dd112223839e34523e76766219c12196fb7a2e72
MD5 fb46e5413570a8e92b7baa7790aff937
BLAKE2b-256 2b500128472201df7579e0f009b9abb6db22da23618c4295abea1db3ea06760a

See more details on using hashes here.

Provenance

The following attestation bundles were made for kunquant-0.1.9-cp310-cp310-win_amd64.whl:

Publisher: publish-to-test-pypi.yml on Menooker/KunQuant

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

File details

Details for the file kunquant-0.1.9-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for kunquant-0.1.9-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 a6e6c04d81647f03ba480ec99452da6f9e972b57fa3bacdc97d7eb9ce1deaca3
MD5 33e8709c73e03c34fa95ac4c371ff088
BLAKE2b-256 4979d35a411557e04135e2c9ed0052803a6e958e7133b9b16eed07a80f152734

See more details on using hashes here.

Provenance

The following attestation bundles were made for kunquant-0.1.9-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl:

Publisher: publish-to-test-pypi.yml on Menooker/KunQuant

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

File details

Details for the file kunquant-0.1.9-cp310-cp310-macosx_14_0_universal2.whl.

File metadata

File hashes

Hashes for kunquant-0.1.9-cp310-cp310-macosx_14_0_universal2.whl
Algorithm Hash digest
SHA256 f66a3fdc38dc1845e836846ae4097483e7cd966da3202a2e2ccd4c5f024ac451
MD5 ef9c0cdd13b4b3957a7b9d7fd21fb868
BLAKE2b-256 825cf87cdcff57abb60da6cebacbfc577047cbcbbce77c93eee7526818c9ee83

See more details on using hashes here.

Provenance

The following attestation bundles were made for kunquant-0.1.9-cp310-cp310-macosx_14_0_universal2.whl:

Publisher: publish-to-test-pypi.yml on Menooker/KunQuant

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

File details

Details for the file kunquant-0.1.9-cp39-cp39-win_amd64.whl.

File metadata

  • Download URL: kunquant-0.1.9-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 280.8 kB
  • Tags: CPython 3.9, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for kunquant-0.1.9-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 f34d04941b17ef4c3003569a31c8bf87ccdef7d64c07cebefc389991c9e3f38d
MD5 0376bfaca9731c84bd4e0f051f7f0009
BLAKE2b-256 fcb0bff019729edcdf8431787533b68709663e81a2342470dea236db316bd405

See more details on using hashes here.

Provenance

The following attestation bundles were made for kunquant-0.1.9-cp39-cp39-win_amd64.whl:

Publisher: publish-to-test-pypi.yml on Menooker/KunQuant

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

File details

Details for the file kunquant-0.1.9-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for kunquant-0.1.9-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 a00703dae959ac7bf3652291f225ffc781ccd40231a4d7fd2ac6b3dd32e17d97
MD5 ddd4677f547ab10e1f0c3d9109e07162
BLAKE2b-256 a39d0a160363267d3d9581ce060b726292eafdd14db746147a1686ece127b3dd

See more details on using hashes here.

Provenance

The following attestation bundles were made for kunquant-0.1.9-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl:

Publisher: publish-to-test-pypi.yml on Menooker/KunQuant

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

File details

Details for the file kunquant-0.1.9-cp39-cp39-macosx_14_0_universal2.whl.

File metadata

File hashes

Hashes for kunquant-0.1.9-cp39-cp39-macosx_14_0_universal2.whl
Algorithm Hash digest
SHA256 d63b729e4aa8b35ddcfd4ab49fbed504974c1de96cbd888012d54370fcd3f1e7
MD5 07ad9389ae0ef4c630153049dfa5dc75
BLAKE2b-256 b0c0c2a0e11a0347fdec7cc860fe87bfcce288a00c06418461de9b266b1100af

See more details on using hashes here.

Provenance

The following attestation bundles were made for kunquant-0.1.9-cp39-cp39-macosx_14_0_universal2.whl:

Publisher: publish-to-test-pypi.yml on Menooker/KunQuant

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