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

The Graph Embedding Engine

Cleora computes all possible random walks in a single matrix multiplication.
No negative sampling. No GPU. No noise. Just fast, deterministic, production-grade embeddings.

Website  ·  Documentation  ·  API Reference  ·  Benchmarks

pip install pycleora


#1 Accuracy. Every Dataset.
Tested on 5 canonical academic datasets against 7 competing algorithms — Cleora wins on accuracy on every single dataset,
and is the only algorithm that scales to every graph without crashing.

240x Faster Than GraphSAGE  ·  50x Less Memory Than NetMF  ·  ~5 MB Install  ·  0 GPUs Required


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}")

embed() defaults to feature_dim=256, num_iterations=40, and whitening after every propagation step.

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, whiten_embeddings
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)
    embeddings = whiten_embeddings(embeddings)

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 per-iteration whitening — 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 [10, 20, 30, 40]) 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 whitening after every iteration by default 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 + Whitened Propagation — Each iteration replaces every node's embedding with the L2-normalized average of its neighbors and then whitens the embedding space. The default configuration runs 40 iterations at 256 dimensions.
  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 default is 256. For larger production systems we often work from 1024 to 4096, but 256 is the baseline shipped by the library.

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

A: The default is 40 whitening-enhanced propagation steps. If you want more local, co-occurrence-style behavior you can dial that down manually; higher values bias more toward contextual similarity.

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 fewer Markov iterations than the default 40 often 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. The default configuration performs 40 such iterations with whitening after every step. 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.1.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.1-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (549.4 kB view details)

Uploaded PyPymanylinux: glibc 2.17+ x86-64

pycleora-3.2.1-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (537.2 kB view details)

Uploaded PyPymanylinux: glibc 2.17+ ARM64

pycleora-3.2.1-pp311-pypy311_pp73-manylinux_2_12_i686.manylinux2010_i686.whl (588.6 kB view details)

Uploaded PyPymanylinux: glibc 2.12+ i686

pycleora-3.2.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (537.2 kB view details)

Uploaded PyPymanylinux: glibc 2.17+ ARM64

pycleora-3.2.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (537.2 kB view details)

Uploaded PyPymanylinux: glibc 2.17+ ARM64

pycleora-3.2.1-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (537.9 kB view details)

Uploaded PyPymanylinux: glibc 2.17+ ARM64

pycleora-3.2.1-cp314-cp314-win_amd64.whl (418.8 kB view details)

Uploaded CPython 3.14Windows x86-64

pycleora-3.2.1-cp314-cp314-win32.whl (396.5 kB view details)

Uploaded CPython 3.14Windows x86

pycleora-3.2.1-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (548.8 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ x86-64

pycleora-3.2.1-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (537.0 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ ARM64

pycleora-3.2.1-cp314-cp314-manylinux_2_12_i686.manylinux2010_i686.whl (588.1 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.12+ i686

pycleora-3.2.1-cp314-cp314-macosx_11_0_arm64.whl (493.1 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

pycleora-3.2.1-cp313-cp313-win_amd64.whl (418.8 kB view details)

Uploaded CPython 3.13Windows x86-64

pycleora-3.2.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (548.8 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

pycleora-3.2.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (537.0 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ ARM64

pycleora-3.2.1-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.whl (588.1 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.12+ i686

pycleora-3.2.1-cp313-cp313-macosx_11_0_arm64.whl (493.1 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

pycleora-3.2.1-cp312-cp312-win_amd64.whl (418.8 kB view details)

Uploaded CPython 3.12Windows x86-64

pycleora-3.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (548.8 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

pycleora-3.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (537.0 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ARM64

pycleora-3.2.1-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.whl (588.1 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.12+ i686

pycleora-3.2.1-cp312-cp312-macosx_11_0_arm64.whl (493.1 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

pycleora-3.2.1-cp311-cp311-win_amd64.whl (418.8 kB view details)

Uploaded CPython 3.11Windows x86-64

pycleora-3.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (548.8 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

pycleora-3.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (537.0 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ARM64

pycleora-3.2.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.whl (588.1 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.12+ i686

pycleora-3.2.1-cp311-cp311-macosx_11_0_arm64.whl (493.1 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

pycleora-3.2.1-cp310-cp310-win_amd64.whl (418.8 kB view details)

Uploaded CPython 3.10Windows x86-64

pycleora-3.2.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (548.8 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

pycleora-3.2.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (537.0 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ ARM64

pycleora-3.2.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl (588.1 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.12+ i686

pycleora-3.2.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (548.8 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ x86-64

pycleora-3.2.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (537.2 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ ARM64

pycleora-3.2.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl (588.1 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.12+ i686

pycleora-3.2.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (549.4 kB view details)

Uploaded CPython 3.8manylinux: glibc 2.17+ x86-64

pycleora-3.2.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (537.5 kB view details)

Uploaded CPython 3.8manylinux: glibc 2.17+ ARM64

pycleora-3.2.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl (588.7 kB view details)

Uploaded CPython 3.8manylinux: glibc 2.12+ i686

pycleora-3.2.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (537.5 kB view details)

Uploaded CPython 3.7mmanylinux: glibc 2.17+ ARM64

File details

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

File metadata

  • Download URL: pycleora-3.2.1.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.1.tar.gz
Algorithm Hash digest
SHA256 8c7d174ce69e80f8ab666ca4f1da930495efa9d168d802dde9e86aed6d6c7794
MD5 5cf458aaeab42b642e4265b36a0f18a7
BLAKE2b-256 5ab9b0e38ec1b79dcee154a52ef0215dd80a4ba63d24862e726cbc377f601b33

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pycleora-3.2.1-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 edb5fbba9b4533c69f86f49f70cbd47ef74320fcd2cdb59d86e3292b1f210b96
MD5 3e687343835d946d0ff7b10edc3d69fa
BLAKE2b-256 0db02b3e11dc8e8c6f33fb4a99ad660557b9ec9920b7a4e595d8edc6d796bbfe

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pycleora-3.2.1-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 51eec064fd8abd92e7806f0d5c0a649f85962327ed7d0aa66671b6aec6b50ca9
MD5 443c0e2a0f4e0ad2b937d6359117e2ac
BLAKE2b-256 bbaaa1a4bd1acde5dea5c4d53a867cef8fbfc7d747ac1344d848d54bc212c136

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pycleora-3.2.1-pp311-pypy311_pp73-manylinux_2_12_i686.manylinux2010_i686.whl
Algorithm Hash digest
SHA256 38c79973904651aa6858cc19e143ddba00e05e1cd97794f1a97dfcc8ef794c59
MD5 94b1624504824faf6becad70b2b58db9
BLAKE2b-256 c3d60d8a7ae3e55489b2fb46c0b39a159d39608d48a5a735d8f18365b96beb65

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pycleora-3.2.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 5b36462ee7b465a77c6c514e1a44e38e65d5960fded71b35b1ef828c535a646e
MD5 6f820a2b8fd1eb2efd857f2d12a17d94
BLAKE2b-256 fbd35a35a6d593c3239d6d8fd2668d49299cd7de7be758069a47cad9410db0d4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pycleora-3.2.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 a60276b0cc65d8a72d0aae86a9121797ea74125de0bd07d4e1e0310d02246de0
MD5 70a49f06e7057dbc6a8bb8a26c26d07f
BLAKE2b-256 9194643af776bafe0aaa8c29adc03f70d35f4ff4ce37bf5f1ee7c513f34d1ebb

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pycleora-3.2.1-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 8e8391efe387fd4397f7972f8ce16b50d0267ef2a898092b0ab0a1862642f165
MD5 a4c5aa6b03b35bd6cf13c0e0d0e889bb
BLAKE2b-256 f06b8f98f3fad4155b45335d6f0d3e483c6803161dc09b4769925e7a963f5c92

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pycleora-3.2.1-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 bbf549b5ab4cefe9ce04bcf33e2447ea146532f411e6d69856d0e0cd35311df8
MD5 a1be2920b77749181e2e657b28f8a60c
BLAKE2b-256 14afd15d2b6b4f7ec96df117dd5d074389531f6e7b8630cd03b26d45adebb8ee

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pycleora-3.2.1-cp314-cp314-win32.whl
  • Upload date:
  • Size: 396.5 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.1-cp314-cp314-win32.whl
Algorithm Hash digest
SHA256 5d95bd6c2606baf244520dfd40ce12de3d0d7b5318bb927aef0a4850bdb8cf87
MD5 af5f08de6bb8f144c27925db1be04ad6
BLAKE2b-256 55840fbfe745a014736189114d3dbc0325a0b72f18943ca06060041d08dfe1b9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pycleora-3.2.1-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 e82c2bf9ef3df58d793842a490916fb5a0f649a35a61a8b03c2cabd1589873be
MD5 62f6f9daa904f515cae197d5b855aaf2
BLAKE2b-256 1c1186eece764a902294dfbba2c968172b14fe6151df79dffaaa8d1f54c00a0c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pycleora-3.2.1-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 8c3d4d5f816f530b612b278b98f3a1a39f2dedc5b3eeeff2d5f6cbc154f8100d
MD5 aa8788e27caaf1625524ea5b047afee8
BLAKE2b-256 39c3cb489bdeba67fc6931fac11f75c053e19bd2bcf4f8275944b3c13af7fa1c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pycleora-3.2.1-cp314-cp314-manylinux_2_12_i686.manylinux2010_i686.whl
Algorithm Hash digest
SHA256 dc4e02fac7d77825ea4561159092bcaa426f39ba2673b21ef00b3efef12dd1d9
MD5 678766581bb7ae548a264421a8c2a059
BLAKE2b-256 497bc334cb40dcbea7bdaf28d3e4189e11632eca4071926aa98158fd842ee86d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pycleora-3.2.1-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b3aaed4cf700fa971d9876271be76a8ed39ef1d5e6122934a10b151dd308b1de
MD5 b39ebc542dc1535994289caea3d339a0
BLAKE2b-256 19022e80de259c074c17beadde58754c953deb3a57abdf23b74e8ce018d69020

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pycleora-3.2.1-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 be7909028c70eaaa700d5edc4c433787bc4dc41b51eb759c4d053eb133bf59e3
MD5 0370a98a223a753622bfc294468a3cbb
BLAKE2b-256 383aa54a82459944e8e2e5bb2cc87c6ec55473d8c61964afc32db53916f3b044

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pycleora-3.2.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 37f7dd6cd001e812cee5aea6ec23b18e1ec3d196201f220bd0397128698ca557
MD5 5c15ab2d8f214cdc1c527303e2ec1706
BLAKE2b-256 8d239d9550086fb4a760351f88c79a8b18efe30925c88937e782096910e5e2e1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pycleora-3.2.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 f17e50b87e19fa01a9fc1d653ec0a5de7a5d1ce888247f3621b9cb7aa8bcba21
MD5 601b256ed1c680a5157db2d425284d01
BLAKE2b-256 baae05ee7de1a2918011e8f0e9f0d0c2ffc176e31cf6b968f29527ed2dab00fc

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pycleora-3.2.1-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.whl
Algorithm Hash digest
SHA256 d9b0ec9b6904c802ddd1dad1bd4b52df876822d8c30c43e7842c35c3c7622890
MD5 9fe3eadb18a84f0dbc45ef8f33e3ea67
BLAKE2b-256 d90e7b0547b9fab5b581c4c51ea79d8e01449a537071dd1d952dee8790c58dd3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pycleora-3.2.1-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 a3eab242ecb71b6a30950d993338d6567492aec22f9fd9fbf0be3731527b93ad
MD5 69bbae30ea06b37496ae304381ccfe84
BLAKE2b-256 2880ab7c5c6886f7f20d9eb1833c90e0641654e0b1798816fdebb40f96987edc

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pycleora-3.2.1-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 54324318b73028e4326d210dd12ca74d670c3215e40b0e5cd0a2aa27742f15e8
MD5 44804274caf0d78b8a22f1354beae1ea
BLAKE2b-256 8a40917a061dafafc63672aaa1e9b45eb892da5edb44a1b94ad498317254dd82

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pycleora-3.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 680ce71dda2c06ed35ec2f1e21669e0bfa33e9abe27ca9187c1879e8716166c6
MD5 c254c81623b8f79968685398c1393a25
BLAKE2b-256 e8ee13f418f2d2cebe659577f4acf84948664bf786ffd3af24c331f7f88a4ed8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pycleora-3.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 165a87bbecdf5433f5f37222fb21cd60db83d0cc7406ca320c15c11edb8ce3bc
MD5 142540bf20210c7dae6edb3931cf9a0e
BLAKE2b-256 b0ef86442b3697c0b1b2608424206d139bc1bb780e22eaa9655fcc4b5da0de7a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pycleora-3.2.1-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.whl
Algorithm Hash digest
SHA256 bfba4c2c8bace8a1edb056bf0e48d3e288e4cc52f3acf6ba13bab201460234e3
MD5 b99d359922023459c62144ad468de43b
BLAKE2b-256 cba99287fcbecd70133f8b8ec210554aea6614dee61c52285828feef488dca75

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pycleora-3.2.1-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 857dfb4d0f0993692bda2494317514e03e25601425ef5b371e02449eb36c6c58
MD5 151991fdf7b011bdd35c98dc8c15838b
BLAKE2b-256 78ca9f0c1d02a9143d871b18e7063f13907d7faa74000b6222f37e0c41e3fbaa

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pycleora-3.2.1-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 814b3986d6e6bcdadb7d2052c1275405a9fb7aa0ce272bd7b6cabc7cd946f5dd
MD5 74943db36d05afb35e53c8ef73db38b3
BLAKE2b-256 d5ab77e083bcb30a57d2ff78a783b51e59c609be872c8cfa096378fa91f502b1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pycleora-3.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 0837337943b871ff778a8567bcd59049b6190566a45c2e911f0b87f889de58ca
MD5 8f081dec35c645e0bf2fe0e2ac54ee28
BLAKE2b-256 f3929568b5050dca14f0c8c3a2d2677ba35dd832367bba0a97094032ab8ce88b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pycleora-3.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 26e1dc83bb30ff35f8eb6df7b6cf56eaf92f8f1475a02147a79da06e67fde881
MD5 ee9a46f047db25cb43adf11bec42a8d1
BLAKE2b-256 b917fb31fe5d40b630a51c4d47c6b503d7400fef0dfd6357ad640d8fe99f74e2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pycleora-3.2.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.whl
Algorithm Hash digest
SHA256 f11d41cdd8177410056c45b6e6d30716208b1420265d775b57c20816cb68eef6
MD5 6e0f8e82963975097b50fc9aa7d35e05
BLAKE2b-256 743b8908e32188f1d10701dc4fad4a6b962304b7c01a313dd93f961bc6960330

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pycleora-3.2.1-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 8b50c3f0982afe7a809a569b62d819defcc2a6e52e14faee65cc680a581b3e89
MD5 a85fa2e872f76316889fc2b80e63df4c
BLAKE2b-256 91bbb2ca8511c67709dd87d8c70490f405090640923faf136a803aee7582f862

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pycleora-3.2.1-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 10080cd9e1ac3c53b4d50160d6cf093cca46657a4b003a24ce8e98c4ab8c8ef5
MD5 25d7e8fdc10dd1075d4eca88e8110b72
BLAKE2b-256 c98188a2172e5f990e868fd8ddc0a78bd77d2b27ef88c4b6c6633d185224f75f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pycleora-3.2.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 f6c9e22bd5e2dbef7b4ae73fcb1a7a56066beb96d1b0ca2d0675ddc4f940fe60
MD5 4693d49a2a904e3a9826d0a8ab93011e
BLAKE2b-256 791c4fbda5050b7b39cffbd26e0a7b82a4b1045c592386ba137061659354ba92

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pycleora-3.2.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 88865233d26905f1997ce527c9b0aebc69d3a8ec854ea4d15548744dc74e7e35
MD5 f57baa0e029520ae5673ae5652170763
BLAKE2b-256 8806eafdfda1555febe3b6682e628ae079f4bd9fb9dab3d01fdb6246f16231ea

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pycleora-3.2.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl
Algorithm Hash digest
SHA256 3fce99803a43a8e454c1dab91001eaaa40e04674b404950f8ea01b57f75b0f9f
MD5 3a00c8190cde302afaa9ee0ca17c4f02
BLAKE2b-256 07a0cb227a9e46ebb01c50a8f21abffd454520c5996a2cbcce8503112b5c964d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pycleora-3.2.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 1a52099ffa84845b4fb4387c21de973401f27a5db088408962fc7b48d8ddb27d
MD5 a986ce731ee1a17fc3e8c896bd5e15e9
BLAKE2b-256 a530580d3bf3d95220abcd8762cc802b2557d9bb92417c238b99caff344afcbd

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pycleora-3.2.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 92cdc2882d3a7c4e6634baf83b90493be7f55453effd346966f095f82cef52b4
MD5 52db900b002c8bec99722065117c4ce6
BLAKE2b-256 2006340d254de5756af4087fc9189f656e91769af9c3b13f4dae691b5f81b514

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pycleora-3.2.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl
Algorithm Hash digest
SHA256 055df4de18cbc2d9f0e66ee150a355650bc431b7a8994d6d6c5dfe408d433a28
MD5 4188d6982a927d8c20b28b0a00ec821a
BLAKE2b-256 57c6b928356540107414150ef384c8c65ee40a2d8d417e752a0619c92862618d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pycleora-3.2.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 14107e7627824ca33be2560205c5b89a311107b249907dd9022583378fa0a8c7
MD5 f325df24681abb68f7c2274c356a953c
BLAKE2b-256 fddc8d9e78b4e404b7d80b95e05f19e264a3d4f7d086ba74587fc2da79e0c0ba

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pycleora-3.2.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 c6f9b17622f240c885ea9a7e5852c083e8bcfcac4b0915ca357b40f044d1d379
MD5 f66e2e62593efbe46150b015de9877c4
BLAKE2b-256 1fafd16a848f7d469188d55f7f23a0f6c0a3b425ecba8c54e21d44477d767e19

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pycleora-3.2.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl
Algorithm Hash digest
SHA256 514206d6fe87a96b1b73364899d6867c89e76a1c9a5152074d079c78e9696069
MD5 8c9183685b64d5e235aad6b922f709b1
BLAKE2b-256 cf2c21d087962333bdad08d275af652bbf4bce52f210c3215f32d32df200ec48

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pycleora-3.2.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 2c7b644f61875754b3cde14b0ef13bd35c98c427a8b105b77277fe0b9945c758
MD5 ce9f87f1ed4a63346ac376c26f4b6dce
BLAKE2b-256 e155020b95a61d7fcc9d44d2145379509adc98c6240943dab7a1c634ac20f1a0

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