Skip to main content

Fast CPU-only graph embedding library with Rust core. Supports Cleora, DeepWalk, Node2Vec, ProNE, GCN, 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=1024, num_iterations=4)

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(1024)

NUM_WALKS = 3   # 3-4 for co-occurrence, 7+ for contextual similarity

for i in range(NUM_WALKS):
    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 1024
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.0.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.0.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (548.4 kB view details)

Uploaded PyPymanylinux: glibc 2.17+ x86-64

pycleora-3.0.0-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (536.8 kB view details)

Uploaded PyPymanylinux: glibc 2.17+ ARM64

pycleora-3.0.0-pp311-pypy311_pp73-manylinux_2_12_i686.manylinux2010_i686.whl (588.1 kB view details)

Uploaded PyPymanylinux: glibc 2.12+ i686

pycleora-3.0.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (536.8 kB view details)

Uploaded PyPymanylinux: glibc 2.17+ ARM64

pycleora-3.0.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (536.8 kB view details)

Uploaded PyPymanylinux: glibc 2.17+ ARM64

pycleora-3.0.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (537.5 kB view details)

Uploaded PyPymanylinux: glibc 2.17+ ARM64

pycleora-3.0.0-cp314-cp314-win_amd64.whl (418.2 kB view details)

Uploaded CPython 3.14Windows x86-64

pycleora-3.0.0-cp314-cp314-win32.whl (396.2 kB view details)

Uploaded CPython 3.14Windows x86

pycleora-3.0.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (547.8 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ x86-64

pycleora-3.0.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (536.5 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ ARM64

pycleora-3.0.0-cp314-cp314-manylinux_2_12_i686.manylinux2010_i686.whl (587.6 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.12+ i686

pycleora-3.0.0-cp314-cp314-macosx_11_0_arm64.whl (492.4 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

pycleora-3.0.0-cp313-cp313-win_amd64.whl (418.2 kB view details)

Uploaded CPython 3.13Windows x86-64

pycleora-3.0.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (547.8 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

pycleora-3.0.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (536.5 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ ARM64

pycleora-3.0.0-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.whl (587.6 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.12+ i686

pycleora-3.0.0-cp313-cp313-macosx_11_0_arm64.whl (492.4 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

pycleora-3.0.0-cp312-cp312-win_amd64.whl (418.2 kB view details)

Uploaded CPython 3.12Windows x86-64

pycleora-3.0.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (547.8 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

pycleora-3.0.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (536.5 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ARM64

pycleora-3.0.0-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.whl (587.6 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.12+ i686

pycleora-3.0.0-cp312-cp312-macosx_11_0_arm64.whl (492.4 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

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

Uploaded CPython 3.11Windows x86-64

pycleora-3.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (547.8 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

pycleora-3.0.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (536.5 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ARM64

pycleora-3.0.0-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.whl (587.6 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.12+ i686

pycleora-3.0.0-cp311-cp311-macosx_11_0_arm64.whl (492.4 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

pycleora-3.0.0-cp310-cp310-win_amd64.whl (418.2 kB view details)

Uploaded CPython 3.10Windows x86-64

pycleora-3.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (547.8 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

pycleora-3.0.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (536.5 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ ARM64

pycleora-3.0.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl (587.6 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.12+ i686

pycleora-3.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (547.8 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ x86-64

pycleora-3.0.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.0.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl (587.6 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.12+ i686

pycleora-3.0.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (548.5 kB view details)

Uploaded CPython 3.8manylinux: glibc 2.17+ x86-64

pycleora-3.0.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (537.1 kB view details)

Uploaded CPython 3.8manylinux: glibc 2.17+ ARM64

pycleora-3.0.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl (588.2 kB view details)

Uploaded CPython 3.8manylinux: glibc 2.12+ i686

pycleora-3.0.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (537.2 kB view details)

Uploaded CPython 3.7mmanylinux: glibc 2.17+ ARM64

File details

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

File metadata

  • Download URL: pycleora-3.0.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.0.0.tar.gz
Algorithm Hash digest
SHA256 b423b3781d056d1f03abfd8fef11afbb05174cbfe7ec306fa434b031c784ae22
MD5 e7508da3962c3199a0e9c64dc10a6b55
BLAKE2b-256 b16fd4cadf54011be09e76e838a513b95774e8e3b1caa3399403d19e6eb9e30e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pycleora-3.0.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 60fa74b1f7bc6d4535ea61d0cc73e2f96b19d0861653f5966a58bccc6bf219f6
MD5 f33f8c513f6916bff7743ee3ad978e0c
BLAKE2b-256 ef1fc0c1c6bc5c7fa237aa90203631f13eae8c1e3f674031db9fee81d9ba4e8e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pycleora-3.0.0-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 987895341e9145b5c53b7b7b441fbd56226386de82f27b6f4f31b11fc4039874
MD5 e61fba0622b4e27f3f66e9132054d918
BLAKE2b-256 0d7dc7e7ccfa04189c9da635ee65af35ada9769743249c764cf59bec78bace9b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pycleora-3.0.0-pp311-pypy311_pp73-manylinux_2_12_i686.manylinux2010_i686.whl
Algorithm Hash digest
SHA256 50a9bf92bdc6d0cdfc63644ecb9e110af33e5b24d7d9524d1555103a15d3756c
MD5 f905747dd2582c96c4b6f744a353ba42
BLAKE2b-256 166090eadad52a8655f0de787d33eb9e1fd1ddb62c47f61f2720c0add6169bc5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pycleora-3.0.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 4d328bc6f3cf3b0f462b57d0aa8123671cc4c35e0a267f1db06a3cca3577c3c7
MD5 58566d2630f2f0ac1ca9e4b947f08f09
BLAKE2b-256 55d583edb277800fd9805d409333111414965d49e2782ceb597ee645c5c8904c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pycleora-3.0.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 b82a7498618d2e3f7f4b1238ce0261dbd1b4f9a1e58a1a87c0e9a27c07f61d3c
MD5 3d4d86a13e759544b17c8f827380f207
BLAKE2b-256 c14daa747a9ff3bdb36647d4db524216d6fdd7652cf891ee710517b4aa3e6e2a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pycleora-3.0.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 02658b30d3e31923490f363ee94d191b9fee0554db8c7f8e9976075ce319b893
MD5 3b782027464dd00427a31218cd01ad52
BLAKE2b-256 6576d78a909e4020b721ab4a1de01e8ce8e571e3d861763ea12153e56ff0643f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pycleora-3.0.0-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 df25ca1189b8ca353cb916804955ba9fa39c6cbecbd35a916d46b49a92672f74
MD5 bac3ae4e714c986db941a867527c499d
BLAKE2b-256 3ba485a3b4852d684398025a3564d4e51613f1d63d839aeef80d0a450d0de841

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for pycleora-3.0.0-cp314-cp314-win32.whl
Algorithm Hash digest
SHA256 6775768c2b83493f7c6f36f73ff8bb5747f583dd7479537a49ed702ac4f6445e
MD5 d799bd2480d5cd1e007364d2b65336cb
BLAKE2b-256 c18f612b0fa868eaee54cbddf2e5776ee37f30b19d25026183679adb9ec7bb63

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pycleora-3.0.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 966c1628df9ec69bf18ac95b0cc893a74a1ac4c3f8a0eac01b6fc524ec0262eb
MD5 2df5b1a09a752348585d5695684edc03
BLAKE2b-256 eb5d481571a3d6b89beb3bad172432255aa3877eda7bb4df4e0f1a70d60df182

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pycleora-3.0.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 94c966ab36e0cf7a3b28910cb08e9c083d326f8ba006f371df7565e3b402c880
MD5 b29b3d4e11679249d1b5f9e2addc76c3
BLAKE2b-256 63289a98569b0af8801077c6b8690f81195d3f5461ce19c80bc9cff3d358abd2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pycleora-3.0.0-cp314-cp314-manylinux_2_12_i686.manylinux2010_i686.whl
Algorithm Hash digest
SHA256 b07848c475d0a975ac83faded90a06177d443afd4d142abb7174021ef1194107
MD5 6e94e666f90a140c94900e179b7dc67c
BLAKE2b-256 c968b8273ecdc3d8eeca167e96740cac7b03cd252eaa10a90913935ddc0e1698

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pycleora-3.0.0-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 0a131b9ab99782ee695ec11a4c2208dbea1490520d031b474146c4ae7df6bdac
MD5 c0d986ac20442ec34914ea4403528096
BLAKE2b-256 508e19a5a703610c947e1e26668862e78a6148fcbc55522f24a0e9ba192c459c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pycleora-3.0.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 654af597232a49af335e0c09a3a77160829868ba78012126655f59f04ba26b66
MD5 8be9b1013c43b734d37158a0ed6111e3
BLAKE2b-256 4c13d6b507f366b7a939b43c52eefcef260a2621504837e516a1ef401ed63e63

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pycleora-3.0.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 12bd1ce790f670c2c1e2ecf4052930428d06425c16079b3eb52c2589a35c8ee6
MD5 eeaeeb43a069a8090024100aa4f656e7
BLAKE2b-256 fcf2b50da5426063fe91940697c06e327a2271539aacad059765e619e1c52849

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pycleora-3.0.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 e799c009e8f1caa547a7a084464fe911bae885b3710d684d456e852b08869718
MD5 5285859e304ae44b55fe0c877e5e7347
BLAKE2b-256 2774919b58c82a9cfd4c4f6c3e8691f367ccefcf0f665e9559465a7bba365201

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pycleora-3.0.0-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.whl
Algorithm Hash digest
SHA256 7a3daf8f958e66d242be59534309c10ed14ce7b41ab827caccf929d52b10ae75
MD5 3c446f0cf68291a767ca19069ccf84b7
BLAKE2b-256 fbd92976790a6b798d6cd3f0f72be54ff9e69b3914719402cb59e9811bc9b9ef

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pycleora-3.0.0-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d1cdb627c44e612ea12733285b60fcf9666087d41d619c9ff0269811c00ea52c
MD5 c4eba2ff1c426d8ec19d97190bdf3813
BLAKE2b-256 31379975f4171b3460d42b450ffadfd73d3e0c8f97496582250f3cfb125f21bb

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pycleora-3.0.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 c451926d9dd06e6471eb81d849842adeb89bd169371910bb4c018cd8d0f6a2fe
MD5 bf2497c07c578c54f4d2340debfcf5a2
BLAKE2b-256 befe5d21f3e68b178d79fd9a2ae06ba3838e4853e04bcc665b12ba369205d912

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pycleora-3.0.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 72d56130a77fe3439099d94577ec5a198c7c4f3f98b95bfcbc3a50ca34dd53d7
MD5 e590f3811af599a123d780a3a2bea848
BLAKE2b-256 fac400be66911472cbcb02b6ba25a43496eba5d75fd006f083248adb9b3b6ff2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pycleora-3.0.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 c5b918551de07a704ff8f0bad378a4eec9cf63c1713bfd2927d9c87925a4ad78
MD5 6f4476537779c496e2073cec57b6d931
BLAKE2b-256 40b3ee15e8d431e94e28e2cbde8fb85448e4be532b13478b2e97a8f3b7b3e783

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pycleora-3.0.0-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.whl
Algorithm Hash digest
SHA256 152fca2608293f935c8c2accb40322d4d868e8ee04f37ae6ed82c4f566d1e6ca
MD5 89bdfb99d9b6e6d5a3ae4f9024d712ac
BLAKE2b-256 6846ab866cd2a73858e2d1f2d207cc1b54121a5736e37a8242ce28ec5d75bd90

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pycleora-3.0.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 06b6d5871ea1322d55fb7f90e5672a1271a94f3f3a549d0bcc751cf6a94dfbbb
MD5 ca9c130d7d1c0c0b6d4859e1ff993c14
BLAKE2b-256 8f1b6058931d68d4edde528c793f332d4213bff9346aab9e804b540581fb120c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pycleora-3.0.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 f6c2aa01d2886d82a5327ce87b8200e163fe341e27f564008a45c6c0c238348e
MD5 2996764e13ec94568b0dd221a74537b8
BLAKE2b-256 b7ae2a11057c94f754f292b119f4805118d63f42f6a603dcb19cf1516264d0e6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pycleora-3.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 06942c10dd974be9d3ff8abe741a396c590883815674b750f36942faecdcc442
MD5 67494fccfd360b085babaa0394453b73
BLAKE2b-256 470f742cf2112a22a5fc59252f8e0c059dc6c5fc5dc2b59ad0fc3a8bc7c7e181

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pycleora-3.0.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 1a71fae561dd1fc58f657be6474ec7f4ff6be871552e2d9bc23174a574765a24
MD5 cb300c51b7c1a08e025f27caab45c786
BLAKE2b-256 c3c201d99a3ff789b9edd3d4830a5ff2d7f74cdee3f24acfe9952432c217a668

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pycleora-3.0.0-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.whl
Algorithm Hash digest
SHA256 ad61568a98e7dd275f02dc4e9ab256d1a270fed6918195d37c5ea99ea5a6cae2
MD5 4a717054cb5101504068de47a755a850
BLAKE2b-256 bc785c9e2607f11ffc07e8cadadac26322a0e59d05c5224305a672b564657ea6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pycleora-3.0.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 911902880da9676c8d0aaea19589226733473f4570c979d36bc99e659f30d02d
MD5 92f12065fab835cf1051fad83713e449
BLAKE2b-256 ed63ea369453122031e46ccbfb313d859e5f7d7ce703e4dcb6d2e3cce0f016da

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pycleora-3.0.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 913b182b7e21f1665e25cddde6a81e38133c8de45548814bb6ef2ed959ade353
MD5 c479f90f3bd963f22682b61ee2f7bc45
BLAKE2b-256 f371918a1f229723a594249ee0c37f19834a870e5450a31abe97dcd3b49cd6bc

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pycleora-3.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 a315d162caadd34354a37821abfc38bfa02ce9e1d782e812a5227de92c7da352
MD5 d54588d9a51d38e1f4955d9baf02f6d3
BLAKE2b-256 05e9eb9d15a459e35b681cfee3631ea8f7248559ba153669d870474f4d707f09

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pycleora-3.0.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 bad1ec1e788c1a4ced8c5347d1f7b6cf7b13c39025e675505be22fe545d56387
MD5 09ea0e327ebfa2b6def0381c55ca93a0
BLAKE2b-256 0d1af7524a86fd4fd941be93ed81ab74a8fa38f74e48156eaf3cd5c1d6c384a3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pycleora-3.0.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl
Algorithm Hash digest
SHA256 edb45ebb6ab694a4565124375acd47ea3923d509ecdf4f56a9d2c54c2f972ba9
MD5 05e7112fb705d7a737b9cbb301d777d9
BLAKE2b-256 2c76b6871f9cf2881d087a7b271a816350187ea5deae6719c2cb8d53cba8a1c0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pycleora-3.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 df8cd2845485cb1d676a519f1bd94a9fe15be5b799dc26e7c851df773185d188
MD5 70a1973b8f02689582d60da03b515cba
BLAKE2b-256 a4888a96e3ff9cfeac84c6bdb53db51933d5021263c9ecbbf246fc4cdc9aad85

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pycleora-3.0.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 485b4bf6dce757c12af6e4f47b5271b08ed88e25c54b7af91320b061d53d1426
MD5 a2612db10c719500c3c5e3fb41c3b69b
BLAKE2b-256 718c7ee719b7c3303fd85965e4905821bcfb377c4e4f4730478b523ca4fbf932

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pycleora-3.0.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl
Algorithm Hash digest
SHA256 9c3d09c05aefd3b469ae80f6263b4185d78c30566daa3cdd60be60fb847dcda0
MD5 2e46ad52f2121ca402c5704ec738a4ac
BLAKE2b-256 c4267a187c3871edc9001a77cda7779c97f7b2a8c83c4dd75429c3d8b7b362f0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pycleora-3.0.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 6546a29905394132659773ffe9aa6cce32186d1aa2cc381f742a9b3bf2908415
MD5 c16e5f7bd1237a09cbc1eaca162d2594
BLAKE2b-256 678859c20be7a1c40ea060d654766ac75bd7ce2350c6ddc398a5db8cb339da83

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pycleora-3.0.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 2c2dad68d52bd9da81cc8455c48597dff108cc63682c26633761e41550a35062
MD5 ef920ce2fbaf950fd7711dc41c94bccd
BLAKE2b-256 70af0f37f7778641f76f94640b07c4d8b9bc2eaab63569cc657729c2436f7fc3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pycleora-3.0.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl
Algorithm Hash digest
SHA256 5b6157fdb737d7254e17682f79b1f21473e1547fbaba5cf7774f8b96401d2bf8
MD5 118386115a815389e352fbfe49e98e20
BLAKE2b-256 76f80fec1da26686dea3e8340bf7fd19eb1866485adf7d96e61e20c2fbd91e04

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pycleora-3.0.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 0399870f1c30f755a3e15cb6025e1636a244c66d0d06cdad008c63822e9cef90
MD5 58b839eb30566f83f81d86c7e8e1b7b4
BLAKE2b-256 51d92c83ad96c4f3765b61815da912ca6f0c43119c345d85ebe30f1b2e149c38

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