Skip to main content

The Blis BLAS-like linear algebra library, as a self-contained C-extension.

Project description

Cython BLIS: Fast BLAS-like operations from Python and Cython, without the tears

This repository provides the Blis linear algebra routines as a self-contained Python C-extension.

Currently, we only supports single-threaded execution, as this is actually best for our workloads (ML inference).

Travis Appveyor pypi Version conda Python wheels

Installation

You can install the package via pip:

pip install blis

Wheels should be available, so installation should be fast. If you want to install from source and you're on Windows, you'll need to install LLVM.

Building BLIS for alternative architectures

The provided wheels should work on x86_86 architectures. Unfortunately we do not currently know a way to provide different wheels for alternative architectures, and we cannot provide a single binary that works everywhere. So if the wheel doesn't work for your CPU, you'll need to specify source distribution, and tell Blis your CPU architecture using the BLIS_ARCH environment variable.

a) Installing with generic arch support

BLIS_ARCH="generic" pip install spacy --no-binary blis

b) Building specific support

In order to compile Blis, cython-blis bundles makefile scripts for specific architectures, that are compiled by running the Blis build system and logging the commands. We do not yet have logs for every architecture, as there are some architectures we have not had access to.

See here for list of architectures. For example, here's how to build support for the ARM architecture cortexa57:

git clone https://github.com/explosion/cython-blis && cd cython-blis
git pull && git submodule init && git submodule update && git submodule status
python3 -m venv env3.6
source env3.6/bin/activate
pip install -r requirements.txt
./bin/generate-make-jsonl linux cortexa57
BLIS_ARCH="cortexa57" python setup.py build_ext --inplace
BLIS_ARCH="cortexa57" python setup.py bdist_wheel

Fingers crossed, this will build you a wheel that supports your platform. You could then submit a PR with the blis/_src/make/linux-cortexa57.jsonl and blis/_src/include/linux-cortexa57/blis.h files so that you can run:

BLIS_ARCH=cortexa57 pip install spacy --no-binary=blis

Running the benchmark

After installation, run a small matrix multiplication benchmark:

$ export OMP_NUM_THREADS=1 # Tell Numpy to only use one thread.
$ python -m blis.benchmark
Setting up data nO=384 nI=384 batch_size=2000. Running 1000 iterations
Blis...
Total: 11032014.6484
7.35 seconds
Numpy (Openblas)...
Total: 11032016.6016
16.81 seconds
Blis einsum ab,cb->ca
8.10 seconds
Numpy einsum ab,cb->ca
Total: 5510596.19141
83.18 seconds

The low numpy.einsum performance is expected, but the low numpy.dot performance is surprising. Linking numpy against MKL gives better performance:

Numpy (mkl_rt) gemm...
Total: 11032011.71875
5.21 seconds

These figures refer to performance on a Dell XPS 13 i7-7500U. Running the same benchmark on a 2015 MacBook Air gives:

Blis...
Total: 11032014.6484
8.89 seconds
Numpy (Accelerate)...
Total: 11032012.6953
6.68 seconds

Clearly the Dell's numpy+OpenBLAS performance is the outlier, so it's likely something has gone wrong in the compilation and architecture detection.

Usage

Two APIs are provided: a high-level Python API, and direct Cython access. The best part of the Python API is the einsum function, which works like numpy's, but with some restrictions that allow a direct mapping to Blis routines. Example usage:

from blis.py import einsum
from numpy import ndarray, zeros

dim_a = 500
dim_b = 128
dim_c = 300
arr1 = ndarray((dim_a, dim_b))
arr2 = ndarray((dim_b, dim_c))
out = zeros((dim_a, dim_c))

einsum('ab,bc->ac', arr1, arr2, out=out)
# Change dimension order of output
out = einsum('ab,bc->ca', arr1, arr2)
assert out.shape == (dim_a, dim_c)
# Matrix vector product, with transposed output
arr2 = ndarray((dim_b,))
out = einsum('ab,b->ba', arr1, arr2)
assert out.shape == (dim_b, dim_a)

The Einstein summation format is really awesome, so it's always been disappointing that it's so much slower than equivalent calls to tensordot in numpy. The blis.einsum function gives up the numpy version's generality, so that calls can be easily mapped to Blis:

  • Only two input tensors
  • Maximum two dimensions
  • Dimensions must be labelled a, b and c
  • The first argument's dimensions must be 'a' (for 1d inputs) or 'ab' (for 2d inputs).

With these restrictions, there are ony 15 valid combinations – which correspond to all the things you would otherwise do with the gemm, gemv, ger and axpy functions. You can therefore forget about all the other functions and just use the einsum. Here are the valid einsum strings, the calls they correspond to, and the numpy equivalents:

Equation Maps to Numpy
'a,a->a' axpy(A, B) A+B
'a,b->ab' ger(A, B) outer(A, B)
'a,b->ba' ger(B, A) outer(B, A)
'ab,a->ab' batch_axpy(A, B) A*B
'ab,a->ba' batch_axpy(A, B, trans1=True) (A*B).T
'ab,b->a' gemv(A, B) A*B
'ab,a->b' gemv(A, B, trans1=True) A.T*B
'ab,ac->cb' gemm(B, A, trans1=True, trans2=True) dot(B.T, A)
'ab,ac->bc' gemm(A, B, trans1=True, trans2=False) dot(A.T, B)
'ab,bc->ac' gemm(A, B, trans1=False, trans2=False) dot(A, B)
'ab,bc->ca' gemm(B, A, trans1=False, trans2=True) dot(B.T, A.T)
'ab,ca->bc' gemm(A, B, trans1=True, trans2=True) dot(B, A.T)
'ab,ca->cb' gemm(B, A, trans1=False, trans2=False) dot(B, A)
'ab,cb->ac' gemm(A, B, trans1=False, trans2=True) dot(A.T, B.T)
'ab,cb->ca' gemm(B, A, trans1=False, trans2=True) dot(B, A.T)

We also provide fused-type, nogil Cython bindings to the underlying Blis linear algebra library. Fused types are a simple template mechanism, allowing just a touch of compile-time generic programming:

cimport blis.cy
A = <float*>calloc(nN * nI, sizeof(float))
B = <float*>calloc(nO * nI, sizeof(float))
C = <float*>calloc(nr_b0 * nr_b1, sizeof(float))
blis.cy.gemm(blis.cy.NO_TRANSPOSE, blis.cy.NO_TRANSPOSE,
             nO, nI, nN,
             1.0, A, nI, 1, B, nO, 1,
             1.0, C, nO, 1)

Bindings have been added as we've needed them. Please submit pull requests if the library is missing some functions you require.

Development

To build the source package, you should run the following command:

./bin/copy-source-files.sh

This populates the blis/_src folder for the various architectures, using the flame-blis submodule.

Updating the build files

In order to compile the Blis sources, we use jsonl files that provide the explicit compiler flags. We build these jsonl files by running Blis's build system, and then converting the log. This avoids us having to replicate the build system within Python: we just use the jsonl to make a bunch of subprocess calls. To support a new OS/architecture combination, we have to provide the jsonl file and the header.

Linux

The Linux build files need to be produced from within the manylinux1 docker container, so that they will be compatible with the wheel building process.

First, install docker. Then do the following to start the container:

sudo docker run -it quay.io/pypa/manylinux1_x86_64:latest

Once within the container, the following commands should check out the repo and build the jsonl files for the generic arch:

mkdir /usr/local/repos
cd /usr/local/repos
git clone https://github.com/explosion/cython-blis && cd cython-blis
git pull && git submodule init && git submodule update && git submodule
status
/opt/python/cp36-cp36m/bin/python -m venv env3.6
source env3.6/bin/activate
pip install -r requirements.txt
./bin/generate-make-jsonl linux generic --export
BLIS_ARCH=generic python setup.py build_ext --inplace
# N.B.: don't copy to /tmp, docker cp doesn't work from there.
cp blis/_src/include/linux-generic/blis.h /linux-generic-blis.h
cp blis/_src/make/linux-generic.jsonl /

Then from a new terminal, retrieve the two files we need out of the container:

sudo docker ps -l # Get the container ID
# When I'm in Vagrant, I need to go via cat -- but then I end up with dummy
# lines at the top and bottom. Sigh. If you don't have that problem and
# sudo docker cp just works, just copy the file.
sudo docker cp aa9d42588791:/linux-generic-blis.h - | cat > linux-generic-blis.h
sudo docker cp aa9d42588791:/linux-generic.jsonl - | cat > linux-generic.jsonl

Project details


Download files

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

Source Distribution

blis-0.4.1.tar.gz (1.8 MB view details)

Uploaded Source

Built Distributions

blis-0.4.1-cp38-cp38-win_amd64.whl (5.0 MB view details)

Uploaded CPython 3.8 Windows x86-64

blis-0.4.1-cp38-cp38-manylinux1_x86_64.whl (3.7 MB view details)

Uploaded CPython 3.8

blis-0.4.1-cp38-cp38-macosx_10_9_x86_64.whl (3.7 MB view details)

Uploaded CPython 3.8 macOS 10.9+ x86-64

blis-0.4.1-cp37-cp37m-win_amd64.whl (5.0 MB view details)

Uploaded CPython 3.7m Windows x86-64

blis-0.4.1-cp37-cp37m-manylinux1_x86_64.whl (3.7 MB view details)

Uploaded CPython 3.7m

blis-0.4.1-cp37-cp37m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl (4.0 MB view details)

Uploaded CPython 3.7m macOS 10.10+ Intel (x86-64, i386) macOS 10.10+ x86-64 macOS 10.6+ Intel (x86-64, i386) macOS 10.9+ Intel (x86-64, i386) macOS 10.9+ x86-64

blis-0.4.1-cp36-cp36m-win_amd64.whl (5.0 MB view details)

Uploaded CPython 3.6m Windows x86-64

blis-0.4.1-cp36-cp36m-manylinux1_x86_64.whl (3.7 MB view details)

Uploaded CPython 3.6m

blis-0.4.1-cp36-cp36m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl (4.0 MB view details)

Uploaded CPython 3.6m macOS 10.10+ Intel (x86-64, i386) macOS 10.10+ x86-64 macOS 10.6+ Intel (x86-64, i386) macOS 10.9+ Intel (x86-64, i386) macOS 10.9+ x86-64

blis-0.4.1-cp35-cp35m-win_amd64.whl (5.0 MB view details)

Uploaded CPython 3.5m Windows x86-64

blis-0.4.1-cp35-cp35m-manylinux1_x86_64.whl (3.7 MB view details)

Uploaded CPython 3.5m

blis-0.4.1-cp35-cp35m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl (4.0 MB view details)

Uploaded CPython 3.5m macOS 10.10+ Intel (x86-64, i386) macOS 10.10+ x86-64 macOS 10.6+ Intel (x86-64, i386) macOS 10.9+ Intel (x86-64, i386) macOS 10.9+ x86-64

blis-0.4.1-cp27-cp27mu-manylinux1_x86_64.whl (3.7 MB view details)

Uploaded CPython 2.7mu

blis-0.4.1-cp27-cp27m-manylinux1_x86_64.whl (3.7 MB view details)

Uploaded CPython 2.7m

blis-0.4.1-cp27-cp27m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl (4.0 MB view details)

Uploaded CPython 2.7m macOS 10.10+ Intel (x86-64, i386) macOS 10.10+ x86-64 macOS 10.6+ Intel (x86-64, i386) macOS 10.9+ Intel (x86-64, i386) macOS 10.9+ x86-64

File details

Details for the file blis-0.4.1.tar.gz.

File metadata

  • Download URL: blis-0.4.1.tar.gz
  • Upload date:
  • Size: 1.8 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/39.0.1 requests-toolbelt/0.9.1 tqdm/4.33.0 CPython/3.6.6

File hashes

Hashes for blis-0.4.1.tar.gz
Algorithm Hash digest
SHA256 d69257d317e86f34a7f230a2fd1f021fd2a1b944137f40d8cdbb23bd334cd0c4
MD5 5855f98fbdd8df0285c3866a25070846
BLAKE2b-256 985af9b8a78e3d1fdde1b0215413d88ab55d907ab81f95b62418a6e9cda30dec

See more details on using hashes here.

File details

Details for the file blis-0.4.1-cp38-cp38-win_amd64.whl.

File metadata

  • Download URL: blis-0.4.1-cp38-cp38-win_amd64.whl
  • Upload date:
  • Size: 5.0 MB
  • Tags: CPython 3.8, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/2.0.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.6.0 requests-toolbelt/0.9.1 tqdm/4.38.0 CPython/3.7.0

File hashes

Hashes for blis-0.4.1-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 856142a11e37fd2c47c5006a3197e157bb8469a491a73d2d442223dd3279df84
MD5 ca3e3858c13c4551fe346e7d8fe12016
BLAKE2b-256 599ba8ac963648401fe80334f852581ac16e2340aac4a8efee32bdd58a38f9b7

See more details on using hashes here.

File details

Details for the file blis-0.4.1-cp38-cp38-manylinux1_x86_64.whl.

File metadata

  • Download URL: blis-0.4.1-cp38-cp38-manylinux1_x86_64.whl
  • Upload date:
  • Size: 3.7 MB
  • Tags: CPython 3.8
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/2.0.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.6.0 requests-toolbelt/0.9.1 tqdm/4.38.0 CPython/3.7.0

File hashes

Hashes for blis-0.4.1-cp38-cp38-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 00473602629ba69fe6565108e21957e918cb48b59f5bf2f6bfb6e04de42500cb
MD5 141b8862510e8f7f7601f481e570d515
BLAKE2b-256 926e7191dafd1f5dca140e9a61a387c114e14fd730dc5953ee1aca8b5ac5600d

See more details on using hashes here.

File details

Details for the file blis-0.4.1-cp38-cp38-macosx_10_9_x86_64.whl.

File metadata

  • Download URL: blis-0.4.1-cp38-cp38-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 3.7 MB
  • Tags: CPython 3.8, macOS 10.9+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/2.0.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.6.0 requests-toolbelt/0.9.1 tqdm/4.38.0 CPython/3.7.0

File hashes

Hashes for blis-0.4.1-cp38-cp38-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 9ede123065f3cacb109967755b3d83d4ca0de90643a9058129a6ab2d4051954f
MD5 0d1f486b1640a68df9848ac87543562b
BLAKE2b-256 c744b050194c243fcc4ac4e120f7546d11450906a920ca9feacff2add4c6d334

See more details on using hashes here.

File details

Details for the file blis-0.4.1-cp37-cp37m-win_amd64.whl.

File metadata

  • Download URL: blis-0.4.1-cp37-cp37m-win_amd64.whl
  • Upload date:
  • Size: 5.0 MB
  • Tags: CPython 3.7m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.20.1 setuptools/39.0.1 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.6.6

File hashes

Hashes for blis-0.4.1-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 ddd732c5274d1082fa92e2c42317587d5ebabce7741ca98120f69bd45d004b99
MD5 5fe1787df00a37f997595cd4e4c85eb6
BLAKE2b-256 d57e1981d5389b75543f950026de40a9d346e2aec7e860b2800e54e65bd46c06

See more details on using hashes here.

File details

Details for the file blis-0.4.1-cp37-cp37m-manylinux1_x86_64.whl.

File metadata

  • Download URL: blis-0.4.1-cp37-cp37m-manylinux1_x86_64.whl
  • Upload date:
  • Size: 3.7 MB
  • Tags: CPython 3.7m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.20.1 setuptools/39.0.1 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.6.6

File hashes

Hashes for blis-0.4.1-cp37-cp37m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 03c368c9716ca814c436550a5f1e02ccf74850e613602519e3941d212e5aa177
MD5 f6aef2bb1729aaa033db5b1dc499a59a
BLAKE2b-256 0a8cf1b2aad385de78db151a6e9728026f311dee8bd480f2edc28a0175a543b6

See more details on using hashes here.

File details

Details for the file blis-0.4.1-cp37-cp37m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl.

File metadata

File hashes

Hashes for blis-0.4.1-cp37-cp37m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl
Algorithm Hash digest
SHA256 4fb89c47ee06b58a4410a16fd5794847517262c9d2a342643475b477dfeff0a4
MD5 51789cbf6ae7afe9142cb8c4c660ffb8
BLAKE2b-256 85d8f0be9d8ebec9cbeea1427de6ac0ecc919c0bfe881eff2d2965dbc310ca8b

See more details on using hashes here.

File details

Details for the file blis-0.4.1-cp36-cp36m-win_amd64.whl.

File metadata

  • Download URL: blis-0.4.1-cp36-cp36m-win_amd64.whl
  • Upload date:
  • Size: 5.0 MB
  • Tags: CPython 3.6m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.20.1 setuptools/39.0.1 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.6.6

File hashes

Hashes for blis-0.4.1-cp36-cp36m-win_amd64.whl
Algorithm Hash digest
SHA256 f0b0dad4d6268d9dba0a65a9db12dd7a2d8686b648399e4aa1aec7550697e99e
MD5 7ecd63ad03c8ae1ae1c428f17953d4d0
BLAKE2b-256 7b9800e345edf2ef6d66a8c3cd08779a9829f13c76b37bf3c2445e9965881c2f

See more details on using hashes here.

File details

Details for the file blis-0.4.1-cp36-cp36m-manylinux1_x86_64.whl.

File metadata

  • Download URL: blis-0.4.1-cp36-cp36m-manylinux1_x86_64.whl
  • Upload date:
  • Size: 3.7 MB
  • Tags: CPython 3.6m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.20.1 setuptools/39.0.1 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.6.6

File hashes

Hashes for blis-0.4.1-cp36-cp36m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 77a6486b9794af01bcdfd1bc6e067c93add4b93292e6f95bf6e5ce7f98bf0163
MD5 ab6b8259d76e82c4c8243d2a34e74b8f
BLAKE2b-256 4119f95c75562d18eb27219df3a3590b911e78d131b68466ad79fdf5847eaac4

See more details on using hashes here.

File details

Details for the file blis-0.4.1-cp36-cp36m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl.

File metadata

File hashes

Hashes for blis-0.4.1-cp36-cp36m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl
Algorithm Hash digest
SHA256 3347a4b1b7d3ae14476aac9a6f7bf8ebf464863f4ebf4aea228874a7694ea240
MD5 aab6f11afc30a6085f5a2490f32dd383
BLAKE2b-256 a5499f442d0c0e3d2881b30f1489141746d10ca9b9b042f5da9b602a57829c1f

See more details on using hashes here.

File details

Details for the file blis-0.4.1-cp35-cp35m-win_amd64.whl.

File metadata

  • Download URL: blis-0.4.1-cp35-cp35m-win_amd64.whl
  • Upload date:
  • Size: 5.0 MB
  • Tags: CPython 3.5m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.20.1 setuptools/39.0.1 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.6.6

File hashes

Hashes for blis-0.4.1-cp35-cp35m-win_amd64.whl
Algorithm Hash digest
SHA256 8aeaf6954351593a1e412f80e398aa51df588d3c0de74b9f3323b694c603381b
MD5 edba23ed1bd49e77adf613ee708cffd2
BLAKE2b-256 b4ec3fa1769f65c9f7e24ada59fc1128e808942c652d94b449948b069f5fe5e0

See more details on using hashes here.

File details

Details for the file blis-0.4.1-cp35-cp35m-manylinux1_x86_64.whl.

File metadata

  • Download URL: blis-0.4.1-cp35-cp35m-manylinux1_x86_64.whl
  • Upload date:
  • Size: 3.7 MB
  • Tags: CPython 3.5m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.20.1 setuptools/39.0.1 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.6.6

File hashes

Hashes for blis-0.4.1-cp35-cp35m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 1402d9cbb0fbc21b749dd5b87d7ee14249e74a0ca38be6ecc56b3b356fca2f21
MD5 73c74d3c842194be282a6683e7f8187e
BLAKE2b-256 11618ba646a4a06b858c631d459111f13efc8bd367a20e08ad3b8f3cbcd61318

See more details on using hashes here.

File details

Details for the file blis-0.4.1-cp35-cp35m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl.

File metadata

File hashes

Hashes for blis-0.4.1-cp35-cp35m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl
Algorithm Hash digest
SHA256 38fe877a4b52e762f5e137a412e3c256545a696a12ae8c40d67b8815d2bb5097
MD5 b3edc4e1ee5939d378303b0c87616992
BLAKE2b-256 5b0d768a2a382d926dbf57f9aac17c69c867cd7e20504476bb954af9ac4867e4

See more details on using hashes here.

File details

Details for the file blis-0.4.1-cp27-cp27mu-manylinux1_x86_64.whl.

File metadata

  • Download URL: blis-0.4.1-cp27-cp27mu-manylinux1_x86_64.whl
  • Upload date:
  • Size: 3.7 MB
  • Tags: CPython 2.7mu
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.20.1 setuptools/39.0.1 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.6.6

File hashes

Hashes for blis-0.4.1-cp27-cp27mu-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 d1d59faebc1c94f8f4f77154ef4b9d6d40364b111cf8fde48ee3b524c85f1075
MD5 7fd64fbaf3311af1bae255871d5f7652
BLAKE2b-256 dbdbbfae863870f79260e57e293dd835e848e8450d2a2c9e273795b13060ff86

See more details on using hashes here.

File details

Details for the file blis-0.4.1-cp27-cp27m-manylinux1_x86_64.whl.

File metadata

  • Download URL: blis-0.4.1-cp27-cp27m-manylinux1_x86_64.whl
  • Upload date:
  • Size: 3.7 MB
  • Tags: CPython 2.7m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.20.1 setuptools/39.0.1 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.6.6

File hashes

Hashes for blis-0.4.1-cp27-cp27m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 26b16d6005bb2671699831b5cc699905215d1abde1ec5c1d04de7dcd9eb29f75
MD5 726a47bede23dc271abbc479a468c273
BLAKE2b-256 f518f22474681816de0c8947fcfbf198b2228763f80473dbeb69aa418887c345

See more details on using hashes here.

File details

Details for the file blis-0.4.1-cp27-cp27m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl.

File metadata

File hashes

Hashes for blis-0.4.1-cp27-cp27m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl
Algorithm Hash digest
SHA256 135450caabc8aea9bb9250329ebdf7189982d9b57d5c92789b2ba2fe52c247a7
MD5 f1fd6817132712d1de3aa0e3c387d20d
BLAKE2b-256 09e07f618f18497135cc98f0a09ccaaad795efe044b7e2cfd3f4251acb2a9d0a

See more details on using hashes here.

Supported by

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