Skip to main content

Fast CPU-only graph embedding library with Rust core. Supports Cleora, DeepWalk, Node2Vec, ProNE, MLP, and more.

Project description

Cleora logo

Graph Embeddings. Blazing Fast.

The only graph embedding library that performs all possible random walks in a single matrix multiplication.
No negative sampling. No GPU. No noise. Just fast, deterministic, production-grade embeddings.

240x Faster Than GraphSAGE  ·  8 Embedding Algorithms + MLP Classifier  ·  ~5 MB Total Install Size

Website  ·  Documentation  ·  API Reference  ·  Benchmarks


Achievements

:one:st place at SIGIR eCom Challenge 2020

:two:nd place and Best Paper Award at WSDM Booking.com Challenge 2021

:two:nd place at Twitter Recsys Challenge 2021

:three:rd place at KDD Cup 2021


Installation

pip install pycleora

Optional extras:

pip install pycleora[viz]       # matplotlib for visualization
pip install pycleora[full]      # matplotlib + networkx + tqdm

Quick Start

from pycleora import SparseMatrix, embed, find_most_similar

edges = ["alice item_laptop", "alice item_mouse", "bob item_keyboard"]
graph = SparseMatrix.from_iterator(iter(edges), "complex::reflexive::product")

embeddings = embed(graph, feature_dim=256, num_iterations=40)

similar = find_most_similar(graph, embeddings, "alice", top_k=5)
for r in similar:
    print(f"{r['entity_id']}: {r['similarity']:.4f}")

Step-by-Step Example

The high-level embed() function wraps the Markov propagation loop for convenience. Here's the full manual version, which gives you complete control over the process:

from pycleora import SparseMatrix
import numpy as np
import pandas as pd
import random

customers = [f"Customer_{i}" for i in range(1, 20)]
products = [f"Product_{j}" for j in range(1, 20)]

data = {
    "customer": random.choices(customers, k=100),
    "product": random.choices(products, k=100),
}

df = pd.DataFrame(data)
customer_products = df.groupby('customer')['product'].apply(list).values
cleora_input = map(lambda x: ' '.join(x), customer_products)

mat = SparseMatrix.from_iterator(cleora_input, columns='complex::reflexive::product')

print(mat.entity_ids)

embeddings = mat.initialize_deterministically(256)

NUM_ITERATIONS = 40

for i in range(NUM_ITERATIONS):
    embeddings = mat.left_markov_propagate(embeddings)
    embeddings /= np.linalg.norm(embeddings, ord=2, axis=-1, keepdims=True)

for entity, embedding in zip(mat.entity_ids, embeddings):
    print(entity, embedding)

print(np.dot(embeddings[0], embeddings[1]))

CLI

pycleora embed --input graph.tsv --output embeddings.npz --dim 256 --iterations 40
pycleora info --input graph.tsv
pycleora similar --input graph.tsv --entity alice --top-k 10
pycleora benchmark --dataset karate_club

Key Advantages

No Negative Sampling

Unlike DeepWalk, Node2Vec, and LINE, Cleora doesn't approximate random walks with negative sampling. It computes all walks exactly via matrix multiplication. Less noise, higher accuracy, perfect reproducibility.

240x Faster Than GraphSAGE

Zomato reported embedding generation in under 5 minutes with Cleora, compared to 20 hours with GraphSAGE on the same dataset. Rust core with adaptive parallelism makes every CPU cycle count.

Deterministic Embeddings

Same input always produces the same output. No random seeds, no stochastic variation, no "run it 5 times and average" workflows. Critical for reproducible research and production ML pipelines.

Heterogeneous Hypergraphs

Natively handles multi-type nodes and edges, bipartite graphs, and hypergraphs. TSV input with typed columns like complex::reflexive::product. No graph preprocessing needed.

~5 MB, Zero Dependencies

The entire library is ~5 MB. Compare: PyTorch Geometric is 500 MB+, DGL is 400 MB+. Cleora ships as a single compiled Rust extension. No CUDA, no cuDNN, no GPU driver headaches.

Stable & Inductive

Embeddings are stable across runs and support inductive learning: new nodes can be embedded without retraining the entire graph. Production-ready from day one.


Supported Algorithms

Algorithm Type Description
Cleora Spectral / Random Walk Iterative Markov propagation with L2 normalization — all random walks in one matrix multiplication
ProNE Spectral Fast spectral propagation with Chebyshev polynomial approximation
RandNE Random Projection Gaussian random projection for very fast, approximate embeddings
NetMF Matrix Factorization Network Matrix Factorization — factorizes the DeepWalk matrix explicitly
DeepWalk Random Walk Classic random walk + skip-gram approach
Node2Vec Random Walk Biased random walks with tunable BFS/DFS exploration
HOPE Matrix Factorization High-Order Proximity preserved Embedding
GraRep Matrix Factorization Graph Representations with Global Structural Information
MLP Neural Classifier 2-layer MLP classifier in pure numpy/scipy — no PyTorch needed

All algorithms are unified under a single API. Switch between methods by changing one parameter:

pycleora embed --input graph.tsv --output out.npz --algorithm cleora
pycleora embed --input graph.tsv --output out.npz --algorithm prone
pycleora embed --input graph.tsv --output out.npz --algorithm node2vec

Advanced Embedding Modes

Beyond the standard algorithms, Cleora supports several advanced embedding strategies:

  • Multiscale embeddings — concatenates embeddings from different iteration depths (e.g. scales [1, 2, 4, 8]) to capture both local and global graph structure simultaneously
  • Attention-weighted propagation — uses softmax-normalized dot-product attention during propagation, dynamically weighting neighbor contributions
  • Supervised refinement — fine-tunes unsupervised embeddings using positive/negative entity pairs with a triplet margin loss
  • Directed graph embeddings — handles asymmetric relationships where edge direction matters
  • Weighted graph embeddings — incorporates edge weights into the propagation step
  • Node feature integration — initializes embeddings with external features (text, image, numeric) before propagation
  • PCA whitening — built-in ZCA whitening to decorrelate embedding dimensions and improve downstream task performance

Batteries Included

pycleora ships with a comprehensive set of built-in modules:

Module What it does
pycleora.community Community detection (Louvain)
pycleora.classify MLP and Label Propagation classifiers — no PyTorch needed
pycleora.sampling 6 graph sampling methods
pycleora.tuning Grid search and random search for hyperparameter tuning
pycleora.compress Embedding compression (PQ, scalar quantization)
pycleora.io_utils Save/load embeddings (NPZ, CSV, TSV), NetworkX conversion
pycleora.viz Embedding visualization (UMAP, t-SNE projections)
pycleora.metrics Evaluation metrics for embeddings
pycleora.benchmark Compare algorithms with time, memory, and accuracy metrics
pycleora.ensemble Combine embeddings from multiple algorithms
pycleora.align Embedding alignment across graphs
pycleora.search Nearest-neighbor entity search
pycleora.stats Graph statistics and degree analysis
pycleora.preprocess Graph preprocessing and filtering
pycleora.hetero Heterogeneous graph utilities
pycleora.generators Synthetic graph generators for testing
pycleora.datasets Real-world benchmark datasets (Facebook, Cora, CiteSeer, PubMed, PPI, roadNet-CA, and more)

See the full API reference for details on every function and parameter.


Case Study: Zomato

From 20 hours to under 5 minutes — powering recommendations for 80M+ users across 500+ cities.

Zomato's ML team needed graph embeddings to power "People Like You" restaurant recommendations. Their initial approach with GraphSAGE took ~20 hours just to process customer-restaurant interaction data for a single city region — making it impossible to scale across 500+ cities.

Pipeline:

  1. Customer-Restaurant Graph — Bipartite graph of customer orders and restaurant interactions
  2. Cleora Embeddings (< 5 minutes) — 197x faster than DeepWalk, no sampling of positive/negative examples
  3. EMDE Density Estimation — Customer preferences modeled as probability density functions
  4. Production Recommendations — Restaurant recommendations, search ranking, dish suggestions, and "People Like You" lookalikes

Results:

Metric Value
Speed vs DeepWalk 197x faster
Embedding generation < 5 min
Cities scaled to 500+
GPUs required 0

Read the full Zomato blog post →


Benchmarks

Benchmarked against 7 competing algorithms on 5 real-world datasets (ego-Facebook, Cora, CiteSeer, PubMed, PPI) plus a 2M-node scale test. All datasets are genuine academic benchmarks from SNAP, Planetoid, and DGL. Cleora wins on accuracy on every single dataset.

Full interactive benchmark results at cleora.ai/benchmarks.

Classification Accuracy

Dataset Nodes Cleora NetMF DeepWalk Node2Vec HOPE GraRep ProNE RandNE
ego-Facebook 4K 0.990 0.957 0.958 0.958 0.890 T/O 0.075 0.212
Cora 2.7K 0.861 0.839 0.835 0.835 0.821 0.809 0.179 0.247
CiteSeer 3.3K 0.824 0.810 0.806 0.806 0.740 0.756 0.189 0.244
PubMed 19.7K 0.879 OOM T/O T/O T/O OOM 0.339 0.351
PPI 3.9K 1.000 OOM T/O T/O T/O OOM 0.023 0.073

Only 3 of 8 algorithms survive at 19.7K nodes. HOPE, NetMF, GraRep, DeepWalk, and Node2Vec all crash or time out. Cleora achieves perfect accuracy on PPI (50 classes).

Memory Efficiency

Dataset Cleora Best Competitor Factor
ego-Facebook (4K) 22 MB 572 MB 26x less
Cora (2.7K) 14 MB 227 MB 16x less
CiteSeer (3.3K) 16 MB 294 MB 18x less
PubMed (19.7K) 97 MB 175 MB Only 3 survived
roadNet-CA (2M) 4.1 GB Only Cleora finished

Scale Test: roadNet-CA (2 Million Nodes)

2 million nodes. 31 seconds. Every other algorithm crashes with out-of-memory. Cleora is the only library that survives at this scale on a single CPU.


Library Comparison

Feature pycleora 3.2 PyG KarateClub DGL Node2Vec StellarGraph
CPU-only (no GPU needed) Yes Optional Yes Optional Yes Optional
Rust-powered core Yes No (C++) No No (C++) No No (TF)
No negative sampling needed Yes No No No No No
Deterministic output Yes No No No No No
Node2Vec / DeepWalk Built-in Yes Yes Yes Yes Yes
MLP classifier (no PyTorch) MLP Requires PyTorch No Requires PyTorch No Requires TF
Graph sampling 6 methods Yes No Yes No Yes
Hyperparameter tuning Grid + Random Manual No Manual No Manual
Install size ~5 MB ~500 MB+ ~15 MB ~400 MB+ ~2 MB ~600 MB+
Actively maintained Yes Yes Yes Yes Yes Archived

Use Cases

  • Recommendation Systems — Products, content, restaurants, videos
  • Knowledge Graphs — Entity and relation embeddings
  • Customer Lookalikes — Find users with similar behavior patterns
  • Entity Resolution — Match entities across data sources
  • Fraud Detection — Detect anomalous patterns in transaction graphs
  • Social Networks — Community detection and link prediction
  • Drug Discovery — Molecule and protein interaction networks
  • Supply Chain — Supplier and logistics graph analysis

See cleora.ai/use-cases for detailed walkthroughs with code examples.


How It Works

  1. Input Data — Feed edge lists, interaction logs, or knowledge triples. Cleora accepts any TSV with typed columns.
  2. Hypergraph Construction — Builds a heterogeneous hypergraph where a single edge can connect multiple entities of different types.
  3. Sparse Markov Matrix — Constructs a sparse transition matrix (99%+ sparse). Rows normalized so each row sums to 1.
  4. Single Matrix Multiplication = All Walks — One sparse matrix multiplication captures every possible random walk of a given length. No sampling, no noise.
  5. L2-Normalized Propagation — Each iteration replaces every node's embedding with the L2-normalized average of its neighbors. 3-4 iterations for co-occurrence similarity, 7+ for contextual similarity.
  6. Embeddings Ready — Dense, deterministic embedding vectors for every entity. Same input always yields same output.

Also Used By

Synerise — AI/ML platform processing billions of e-commerce events daily. Cleora powers core recommendation and personalization: product embeddings from terabytes of transactions, substitute vs. complement detection, customer segmentation, cold-start solving — all on CPU in minutes.

Dailymotion — Video platform with 350M+ monthly visitors. Personalized video recommendations with improved relevance and catalog coverage.

ML Competitions — Cleora-powered solutions achieved top placements in KDD Cup 2021, WSDM WebTour 2021, and SIGIR eCom 2020 — beating deep learning approaches on travel, e-commerce, and web recommendation benchmarks.


FAQ

Q: What should I embed?

A: Any entities that interact with each other, co-occur or can be said to be present together in a given context. Examples can include: products in a shopping basket, locations frequented by the same people at similar times, employees collaborating together, chemical molecules being present in specific circumstances, proteins produced by the same bacteria, drug interactions, co-authors of the same academic papers, companies occurring together in the same LinkedIn profiles.

Q: How should I construct the input?

A: What works best is grouping entities co-occurring in a similar context, and feeding them in whitespace-separated lines using complex::reflexive modifier is a good idea. E.g. if you have product data, you can group the products by shopping baskets or by users. If you have urls, you can group them by browser sessions, or by (user, time window) pairs. Check out the usage example above. Grouping products by customers is just one possibility.

Q: Can I embed users and products simultaneously, to compare them with cosine similarity?

A: No, this is a methodologically wrong approach, stemming from outdated matrix factorization approaches. What you should do is come up with good product embeddings first, then create user embeddings from them. Feeding two columns e.g. user product into cleora will result in a bipartite graph. Similar products will be close to each other, similar users will be close to each other, but users and products will not necessarily be similar to each other.

Q: What embedding dimensionality to use?

A: The more, the better, but we typically work from 1024 to 4096. Memory is cheap and machines are powerful, so don't skimp on embedding size.

Q: How many iterations of Markov propagation should I use?

A: Depends on what you want to achieve. Low iterations (3) tend to approximate the co-occurrence matrix, while high iterations (7+) tend to give contextual similarity (think skip-gram but much more accurate and faster).

Q: How do I incorporate external information, e.g. entity metadata, images, texts into the embeddings?

A: Just initialize the embedding matrix with your own vectors coming from a VIT, sentence-transformers, or a random projection of your numeric features. In that scenario low numbers of Markov iterations (1 to 3) tend to work best.

Q: My embeddings don't fit in memory, what do I do?

A: Cleora operates on dimensions independently. Initialize your embeddings with a smaller number of dimensions, run Cleora, persist to disk, then repeat. You can concatenate your resulting embedding vectors afterwards, but remember to normalize them afterwards!

Q: Is there a minimum number of entity occurrences?

A: No, an entity A co-occurring just 1 time with some other entity B will get a proper embedding, i.e. B will be the most similar to A. The other way around, A will be highly ranked among nearest neighbors of B, which may or may not be desirable, depending on your use case. Feel free to prune your input to Cleora to eliminate low-frequency items.

Q: Are there any edge cases where Cleora can fail?

A: Cleora works best for relatively sparse hypergraphs. If all your hyperedges contain some very common entity X, e.g. a shopping bag, then it will degrade the quality of embeddings by degenerating shortest paths in the random walk. It is a good practice to remove such entities from the hypergraph.

Q: How can Cleora be so fast and accurate at the same time?

A: Not using negative sampling is a great boon. By constructing the (sparse) Markov transition matrix, Cleora explicitly performs all possible random walks in a hypergraph in one big step (a single matrix multiplication). That's what we call a single iteration. We perform 3+ such iterations. Thanks to a highly efficient implementation in Rust, with special care for concurrency, memory layout and cache coherence, it is blazingly fast. Negative sampling or randomly selecting random walks tend to introduce a lot of noise - Cleora is free of those burdens.


Resources

Cite

Please cite our paper (and the respective papers of the methods used) if you use this code in your own work:

@article{DBLP:journals/corr/abs-2102-02302,
  author    = {Barbara Rychalska, Piotr Babel, Konrad Goluchowski, Andrzej Michalowski, Jacek Dabrowski},
  title     = {Cleora: {A} Simple, Strong and Scalable Graph Embedding Scheme},
  journal   = {CoRR},
  year      = {2021}
}

License

MIT licensed. See LICENSE for details.

Contributing

Pull requests are welcome. For major changes, please open an issue first. Contact: cleora@synerise.com

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

pycleora-3.2.0.tar.gz (1.5 MB view details)

Uploaded Source

Built Distributions

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

pycleora-3.2.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (548.9 kB view details)

Uploaded PyPymanylinux: glibc 2.17+ x86-64

pycleora-3.2.0-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (536.7 kB view details)

Uploaded PyPymanylinux: glibc 2.17+ ARM64

pycleora-3.2.0-pp311-pypy311_pp73-manylinux_2_12_i686.manylinux2010_i686.whl (588.3 kB view details)

Uploaded PyPymanylinux: glibc 2.12+ i686

pycleora-3.2.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (536.7 kB view details)

Uploaded PyPymanylinux: glibc 2.17+ ARM64

pycleora-3.2.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (536.6 kB view details)

Uploaded PyPymanylinux: glibc 2.17+ ARM64

pycleora-3.2.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (537.4 kB view details)

Uploaded PyPymanylinux: glibc 2.17+ ARM64

pycleora-3.2.0-cp314-cp314-win_amd64.whl (418.3 kB view details)

Uploaded CPython 3.14Windows x86-64

pycleora-3.2.0-cp314-cp314-win32.whl (396.1 kB view details)

Uploaded CPython 3.14Windows x86

pycleora-3.2.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (548.4 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ x86-64

pycleora-3.2.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (536.3 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ ARM64

pycleora-3.2.0-cp314-cp314-manylinux_2_12_i686.manylinux2010_i686.whl (587.9 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.12+ i686

pycleora-3.2.0-cp314-cp314-macosx_11_0_arm64.whl (492.8 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

pycleora-3.2.0-cp313-cp313-win_amd64.whl (418.3 kB view details)

Uploaded CPython 3.13Windows x86-64

pycleora-3.2.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (548.4 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

pycleora-3.2.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (536.3 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ ARM64

pycleora-3.2.0-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.whl (587.9 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.12+ i686

pycleora-3.2.0-cp313-cp313-macosx_11_0_arm64.whl (492.8 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

pycleora-3.2.0-cp312-cp312-win_amd64.whl (418.3 kB view details)

Uploaded CPython 3.12Windows x86-64

pycleora-3.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (548.4 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

pycleora-3.2.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (536.3 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ARM64

pycleora-3.2.0-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.whl (587.9 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.12+ i686

pycleora-3.2.0-cp312-cp312-macosx_11_0_arm64.whl (492.8 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

pycleora-3.2.0-cp311-cp311-win_amd64.whl (418.3 kB view details)

Uploaded CPython 3.11Windows x86-64

pycleora-3.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (548.4 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

pycleora-3.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (536.3 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ARM64

pycleora-3.2.0-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.whl (587.9 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.12+ i686

pycleora-3.2.0-cp311-cp311-macosx_11_0_arm64.whl (492.8 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

pycleora-3.2.0-cp310-cp310-win_amd64.whl (418.3 kB view details)

Uploaded CPython 3.10Windows x86-64

pycleora-3.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (548.5 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

pycleora-3.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (536.3 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ ARM64

pycleora-3.2.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl (587.9 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.12+ i686

pycleora-3.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (548.4 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ x86-64

pycleora-3.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (536.6 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ ARM64

pycleora-3.2.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl (587.8 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.12+ i686

pycleora-3.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (549.0 kB view details)

Uploaded CPython 3.8manylinux: glibc 2.17+ x86-64

pycleora-3.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (537.0 kB view details)

Uploaded CPython 3.8manylinux: glibc 2.17+ ARM64

pycleora-3.2.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl (588.3 kB view details)

Uploaded CPython 3.8manylinux: glibc 2.12+ i686

pycleora-3.2.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (537.1 kB view details)

Uploaded CPython 3.7mmanylinux: glibc 2.17+ ARM64

File details

Details for the file pycleora-3.2.0.tar.gz.

File metadata

  • Download URL: pycleora-3.2.0.tar.gz
  • Upload date:
  • Size: 1.5 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: maturin/1.12.6

File hashes

Hashes for pycleora-3.2.0.tar.gz
Algorithm Hash digest
SHA256 14a900c819ebd2ef0104bd8a962b5ef0465fd1e84f42c10b4bbe1e92c615ba49
MD5 6a6ef3fdc5ccb898b128cca418c992f0
BLAKE2b-256 47e1f220d5ca7f9883c85b92a5925caf5a2d73a267b76f9818629ffc556164bf

See more details on using hashes here.

File details

Details for the file pycleora-3.2.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pycleora-3.2.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 779fec2e2955659d54b32ea71d83ba06166fe71711f3855e75998b588eee72eb
MD5 17d2bf1f48b1c4976fac9cf214197188
BLAKE2b-256 6a9b0ec29c27f4e5e4d3be0acb55da23d76a2bcd815b29695de9bf34572fc852

See more details on using hashes here.

File details

Details for the file pycleora-3.2.0-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for pycleora-3.2.0-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 4e32cafa2a0d1d36281093c1afa4db4be44698e01fd185dae2820a4a73515a0b
MD5 12dec70ad01a79708f9d9f8e24aa913e
BLAKE2b-256 230d8b026a5cb05ddf68a234a987b43ac4e08370ec0fb35de22b4648ec24fa98

See more details on using hashes here.

File details

Details for the file pycleora-3.2.0-pp311-pypy311_pp73-manylinux_2_12_i686.manylinux2010_i686.whl.

File metadata

File hashes

Hashes for pycleora-3.2.0-pp311-pypy311_pp73-manylinux_2_12_i686.manylinux2010_i686.whl
Algorithm Hash digest
SHA256 88c10d0e81a3431971b33e265b48d3674147aa9bee5c21cf7c9aa230e47bd3b2
MD5 df8da12a5c35164e43965b5f17e6c6d7
BLAKE2b-256 6d00ad862442f064a7b12431c18cb998a72cd027ff9cce93ec65d20201fa724e

See more details on using hashes here.

File details

Details for the file pycleora-3.2.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for pycleora-3.2.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 2e33ff3e700e1d2a5ee27f0119f89394b89439130b4b7c9d7bb7f7f4d97debd2
MD5 d0e41ebeccf266693a774e99ddfa78c8
BLAKE2b-256 90fd2e3fa10fb144d9d06fddc6ac2dec0d0ae65386986f86699c1aad233989c6

See more details on using hashes here.

File details

Details for the file pycleora-3.2.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for pycleora-3.2.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 3b6708d8155d7155c033815e708a0aa632c576abc11c58325a300785b54c642d
MD5 491bba97a32af16334ea9760f2ce8718
BLAKE2b-256 a250f757777fa73e851d8b44dc911826d1b8b7cf359cdca92d5ddfc6464c543e

See more details on using hashes here.

File details

Details for the file pycleora-3.2.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for pycleora-3.2.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 b7af993c08111e7c6490c6e134a45dedc9da63357b45e5b4cdea66bb09735fca
MD5 fb1fc7faf230aa228a2014f7c69640f0
BLAKE2b-256 9c127b17bc79f0f566e35ba6fef665d98ee30896cafdc2bac444a953c7396f8d

See more details on using hashes here.

File details

Details for the file pycleora-3.2.0-cp314-cp314-win_amd64.whl.

File metadata

File hashes

Hashes for pycleora-3.2.0-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 5981b9c5700b21eca2def8d29c170f8a2214fd87a101f53c4b80f5203712b7d1
MD5 640a7f7ec7dfa4fd8153d1ed3cb451cd
BLAKE2b-256 9b01b1371dc1d3edcfecebb4f8c250122b23419ce1a397ededbd3ea3e949c636

See more details on using hashes here.

File details

Details for the file pycleora-3.2.0-cp314-cp314-win32.whl.

File metadata

  • Download URL: pycleora-3.2.0-cp314-cp314-win32.whl
  • Upload date:
  • Size: 396.1 kB
  • Tags: CPython 3.14, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: maturin/1.12.6

File hashes

Hashes for pycleora-3.2.0-cp314-cp314-win32.whl
Algorithm Hash digest
SHA256 b77477a802c78f27c558c09acef532b8b2b010083a0b8e93db484764cf11b11b
MD5 b485f4e638c8d48d22a206f5fe63da2a
BLAKE2b-256 ddcc7c67b9dc9dd3251df1f7ca03d23d8f363127bec17d12b5b1749123ad2f0b

See more details on using hashes here.

File details

Details for the file pycleora-3.2.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pycleora-3.2.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 8bf9b8c339c94abc53c794ba53f2fc351e435fbfbde9b4c3d34f0308ea1fcc37
MD5 1828ac9a61528db7d13025703b659210
BLAKE2b-256 9482022b526aa82731497b7d8c772e37d4d5b665c966b991917fde84abfbfba4

See more details on using hashes here.

File details

Details for the file pycleora-3.2.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for pycleora-3.2.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 3399851f6cd97fff1ed215ebee8233da1b531ce3912b07ba183d35824895693c
MD5 de9d64a8b9917a7cb1cce6dee6c2ff69
BLAKE2b-256 01d4a701cd91ea29d4f864d8dedde65a4e4ede04e72113a1b3ddae7637c05e3c

See more details on using hashes here.

File details

Details for the file pycleora-3.2.0-cp314-cp314-manylinux_2_12_i686.manylinux2010_i686.whl.

File metadata

File hashes

Hashes for pycleora-3.2.0-cp314-cp314-manylinux_2_12_i686.manylinux2010_i686.whl
Algorithm Hash digest
SHA256 1e3eb82d5e2d34608f6d9db3ccf3ce1cb36c6527a47cc1ce480e53a6e40bf8cf
MD5 8ce2f97a277756d8f114019203221210
BLAKE2b-256 e3f53dda6d71021e385808eb040948042287911d791f7990303145d235c2a78d

See more details on using hashes here.

File details

Details for the file pycleora-3.2.0-cp314-cp314-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pycleora-3.2.0-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 cdc80344cf319405403fd7f0c6e872f4c12319715ee756a056807bc2b5f70cd5
MD5 7f493a263e976c12d147645a42a754b7
BLAKE2b-256 a7987da0992a9d41351fd9371f06708e540d98fa49f45eab6596e0af38e14371

See more details on using hashes here.

File details

Details for the file pycleora-3.2.0-cp313-cp313-win_amd64.whl.

File metadata

File hashes

Hashes for pycleora-3.2.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 5734437977983b682a92e3dcb18675aa38a03968a633c5e47d30f16be5255d5e
MD5 aae6b8886cf8685f9a5a44ef0d7f6266
BLAKE2b-256 64311b0f1c185b70d0dad47853571f9a753ead49423ed99dd55984268034ada8

See more details on using hashes here.

File details

Details for the file pycleora-3.2.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pycleora-3.2.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 0c473847f07f7de1daa9a9caa4c1f2a3af651c6779ba38a69081ae6a11cf9c9f
MD5 5568b78c91a79e2b39590a5af68cd4c7
BLAKE2b-256 503d915f85a76e9f1578d65a99bdaee7eea90a3e10d0856cfa8f87529ec92ec1

See more details on using hashes here.

File details

Details for the file pycleora-3.2.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for pycleora-3.2.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 0e795905125ad2983907686cf5e8a89622a8ecf3cd5075a9940cd8e36206794c
MD5 e00ad4a6b568967f50a2073bef5399c5
BLAKE2b-256 b55f65d7b33ee400f0c5e2b3299a339fda031aceacc82fb94eb95a4bc27e14e9

See more details on using hashes here.

File details

Details for the file pycleora-3.2.0-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.whl.

File metadata

File hashes

Hashes for pycleora-3.2.0-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.whl
Algorithm Hash digest
SHA256 2710f4a9b94e8785d4fc532714d3564447957efee363cef09d2ba08df82d30e2
MD5 cf9f251598164a5405c206c665636cde
BLAKE2b-256 d39d38d64c7d85a373db17be0112a239d9e2d7d7c1214552fbf26781a962606b

See more details on using hashes here.

File details

Details for the file pycleora-3.2.0-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pycleora-3.2.0-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 15a0913ae7a858e8a16a25bbe10698d6c720f2d7a8dda1e171fc95f27c60f08e
MD5 3fafc6a02f7a1b3722d1090ac5b39ec7
BLAKE2b-256 ae1a873efb8cacf84d3ce1740b014439bd32c7d1b1c13601b2f59d66d89e795b

See more details on using hashes here.

File details

Details for the file pycleora-3.2.0-cp312-cp312-win_amd64.whl.

File metadata

File hashes

Hashes for pycleora-3.2.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 56586cfe2dcd7679703727c034aaf7754cdc4ef2e4054e2b14a9269ae40d246f
MD5 6e22a8c0b99da2356197f77b21d8aef9
BLAKE2b-256 b8fb63b54df1bf77102b3eb20e007e3d30ba4abe356ec6aec78f96fd7901f982

See more details on using hashes here.

File details

Details for the file pycleora-3.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pycleora-3.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 cf916b1f7dcfbbc6406d02028ef8c746c2bca19360eaab14cf0e50cb2d94b264
MD5 4ae05019b4aeb2eb66a5cba9fb7cd395
BLAKE2b-256 f3e06d033118be1fb339fdc0b73f0252970ff8bfd8b486009509bfe59df514ad

See more details on using hashes here.

File details

Details for the file pycleora-3.2.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for pycleora-3.2.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 f318d6840c6f0f518172ec94b401be587de7029a2ed1ea2eb08235a6329124cc
MD5 ea37dc7e2191c558da178239b106b407
BLAKE2b-256 f65ffecbeaa7cf9b66fb11ae8e2a6a4b4caeab6d44e3d748e32b41fcd712aee1

See more details on using hashes here.

File details

Details for the file pycleora-3.2.0-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.whl.

File metadata

File hashes

Hashes for pycleora-3.2.0-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.whl
Algorithm Hash digest
SHA256 e7b90498dda939053858c6ce11e5a85b3eeda1785562a3cf0eb3a3c80fa3481e
MD5 ce0e9b00e75d00304f90fca2221827eb
BLAKE2b-256 c9c7321af1d90648620afa41fe2234539cb40b864e329cee0dd70bf249ab3f01

See more details on using hashes here.

File details

Details for the file pycleora-3.2.0-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pycleora-3.2.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 39efbe1a04686e08e168002a35483752eb184bdb70bbb22e283485bbc7a1363b
MD5 b03e396242701accfd026f6c8a3d8fd7
BLAKE2b-256 ca464a83203990a643916717d2c19e0f2c1866657259e64e0cc8820df73c5e24

See more details on using hashes here.

File details

Details for the file pycleora-3.2.0-cp311-cp311-win_amd64.whl.

File metadata

File hashes

Hashes for pycleora-3.2.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 28eb8a9dab629b3f03d9789c723bc39841ee816a2b425f7cdabd7ab47591b6d8
MD5 62727c5100ccfca11726db778fa559ae
BLAKE2b-256 32ae3b4f40be9622e0c9130a65c2cf470a897fdcc34a47570f7c0a40eb1b75a6

See more details on using hashes here.

File details

Details for the file pycleora-3.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pycleora-3.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 d07817858a5fc558e2547b86c934f9f3fef1a78056299af7ca00f97e02dd810d
MD5 a2b1312285ebf9159ba02a04f3fe7b77
BLAKE2b-256 dcc9a2b22852e137b328f492340b8f3ee114a9a9b9c910d1fc262b12852cc84a

See more details on using hashes here.

File details

Details for the file pycleora-3.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for pycleora-3.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 f019c3ca6533a55ccef1fa982a6112f69ff6cbd593bdd93a393704176da0aa5e
MD5 2f457a9f6b0e8d01d121ad8798f5c395
BLAKE2b-256 b5cb9a17d7eb976fd364d7fe3bf8b4bf184d8444d182f0c7093ccf0c7c53726d

See more details on using hashes here.

File details

Details for the file pycleora-3.2.0-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.whl.

File metadata

File hashes

Hashes for pycleora-3.2.0-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.whl
Algorithm Hash digest
SHA256 5a0bc8f443658cabe86cbcea9c2c560fbe0b1fcbe8844b652607d93272a82fd7
MD5 3885278dbefe227fc9f2d14516f4f435
BLAKE2b-256 9329468cc9582a5ff4c180594e39bd69c102d274e13c9ca4813a19f5f7e92fb9

See more details on using hashes here.

File details

Details for the file pycleora-3.2.0-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pycleora-3.2.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 a5ad6e67dd84f77c72318093e546fc1c854df2855570b8813115c9af73a1d92b
MD5 1719ec0c84f1769ca8b5299015a8ac46
BLAKE2b-256 a71615e3c856303afeef580338dc6fdbd3289781fc843a19a63e4f9166682ccc

See more details on using hashes here.

File details

Details for the file pycleora-3.2.0-cp310-cp310-win_amd64.whl.

File metadata

File hashes

Hashes for pycleora-3.2.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 0582f4351875ced1160eac3289099818ce3ee0acf813faf342f37aa5630e7ae5
MD5 43e0e3ad1057877f74a1f4fc47ab6228
BLAKE2b-256 2ce56be069254487a7068ce202e4db491d2242691a3a8fc32581cadaab76679f

See more details on using hashes here.

File details

Details for the file pycleora-3.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pycleora-3.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 037f16d792e2b5dc093e6c7acb6659dde1bb7c4f085087de1c046b3de2fb230a
MD5 cad6b8a7fc2aa41d444e639316b2cd2a
BLAKE2b-256 077afa05569312a923f561393c0f54dedee9685e8ac31294eb98b9ecf8e102e3

See more details on using hashes here.

File details

Details for the file pycleora-3.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for pycleora-3.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 77556290316efcacc6425a3535c4207f0f0f5eb48dc77811de827efc8e628c93
MD5 2c5fe89eee4ab8dbcfaf6250c5577ec7
BLAKE2b-256 b99c2b58695bddc80c5533f524d2617b53fcf707cadaf5d8a7286cbcaf36617d

See more details on using hashes here.

File details

Details for the file pycleora-3.2.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl.

File metadata

File hashes

Hashes for pycleora-3.2.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl
Algorithm Hash digest
SHA256 eb35693729538313a3612a7f28b81b0cc689ca5ed8efdb34383e402b117fe62e
MD5 5e4980fa2f98222f82ce346b3049fad5
BLAKE2b-256 723df2532ee19e2967d008f2ca67cbb153fe82e14412edc2e8c50c12f5efecd8

See more details on using hashes here.

File details

Details for the file pycleora-3.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pycleora-3.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 83c427a665e3e7667055b7698899ebde4a90453394dc219aab80e4a08bc7d56e
MD5 b168098818097826e6de0a5cf2859084
BLAKE2b-256 83bc80fde15c84a2521e2c02a8367d6e7e07a44c3abdff68e9fe68af7367cf8c

See more details on using hashes here.

File details

Details for the file pycleora-3.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for pycleora-3.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 8d3a5b731f2073dba0dbca61b7e06348f383ad0855562398cd4a0baa2911e1c9
MD5 79bfad9e63c82717d70a9fb59a23b70d
BLAKE2b-256 428387cb7f617a3b2bb04581cb29f27129fb09429db9000a781e009c3ca25650

See more details on using hashes here.

File details

Details for the file pycleora-3.2.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl.

File metadata

File hashes

Hashes for pycleora-3.2.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl
Algorithm Hash digest
SHA256 1e60e92f5f11da743638393db837c7dfc0bd394c2facb173fb10d15ae3611ce3
MD5 ca63132fe6ac9f2116d23412a5938e1e
BLAKE2b-256 9b89f841cd627aca9e4a919cfaacb7a03e820b08b6cd532400f2df3b2bfc6b84

See more details on using hashes here.

File details

Details for the file pycleora-3.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pycleora-3.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 1def5a3f05b6bfecb4c0151f938070401d0e9859b8bf163e895db29ecc404b2c
MD5 36ec81f501a9c2ed050a6c01fc4b09b7
BLAKE2b-256 8ec0a987092968fb63d26d738b6c4863bb7b6d1be3e96d6e1bba091f856c17c0

See more details on using hashes here.

File details

Details for the file pycleora-3.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for pycleora-3.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 0f976d98c8b5cc1ca76225333259b6e0d02ad94dbbe4d4f55f50dc4a64689761
MD5 fff439bff784ff9b846645f5da53b798
BLAKE2b-256 4f13061a8753a17efeae884f48e82c2ab99c941e81939119ac1ec00d58a07dc5

See more details on using hashes here.

File details

Details for the file pycleora-3.2.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl.

File metadata

File hashes

Hashes for pycleora-3.2.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl
Algorithm Hash digest
SHA256 a47373cedc99ac242c62e70bcdec2c8efe95005b93e7793e0c70b4e59a6d8c12
MD5 2e289cd98286c8b56c5f57fbaeca93f6
BLAKE2b-256 3f9245b50b35e8affa6fc9758321cc176acd6c91c730eb6a1ddcc9f67fcd8829

See more details on using hashes here.

File details

Details for the file pycleora-3.2.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for pycleora-3.2.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 775c59c3093062d4dcb60490612317610ae7e95c2d8c8ec7e7ca96693d3c5335
MD5 f30b7926d60d3bec98997d9506731e0f
BLAKE2b-256 fbe0debad2bfc881de2b6902db751469e77c9b45a4d082cfd27118cef5d8bced

See more details on using hashes here.

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