Skip to main content

Fast substructure search, MCS, circular fingerprints, and molecular similarity with tautomer awareness and GPU acceleration

Project description

SMSD Pro

SMSD Pro — Molecular Graph Matching for Python

PyPI Downloads License Python

Fast substructure search, maximum common substructure (MCS), circular fingerprints, and molecular similarity — with optional tautomer awareness and GPU acceleration. No RDKit or CDK required.

Install

pip install smsd

Quick Start

import smsd

# Substructure search
assert smsd.is_substructure(
    smsd.parse_smiles("c1ccccc1"),     # benzene
    smsd.parse_smiles("c1ccc(O)cc1"))  # phenol

# Maximum Common Substructure
mcs = smsd.mcs("c1ccccc1", "c1ccc2ccccc2c1")
print(f"MCS: {len(mcs)} atoms")  # 6

# Tautomer-aware MCS
mcs = smsd.mcs("CC(=O)C", "CC(O)=C", tautomer_aware=True)

# Circular fingerprint (ECFP4, tautomer-aware)
ecfp4 = smsd.circular_fingerprint("c1ccccc1", radius=2, fp_size=2048)

# Similarity
sim = smsd.similarity("c1ccccc1", "c1ccc(O)cc1")

Features

Search & Matching

Feature Description
Substructure search VF2++ with 3-level NLF pruning, GPU-accelerated domain init
MCS 11-level funnel: chain/tree DP → greedy → McSplit → BK → McGregor
SMARTS matching Full SMARTS support including X (total connectivity), D (degree), v (valence), R (ring count), r (ring size), x (ring connectivity), / \ (E/Z stereo), $() (recursive), logical AND/OR/NOT
Tautomer matching 30 transforms with pKa-informed weights, 6 solvents, pH-sensitive
Tautomer validation validate_tautomer_consistency() — proton conservation check
CIP R/S/E/Z assign_rs(), assign_ez() — full digraph-based stereo descriptors (IUPAC 2013)
MCS SMILES find_mcs_smiles() — extract MCS as canonical SMILES string
findAllMCS find_all_mcs() — top-N MCS enumeration with canonical dedup
SMARTS MCS find_mcs_smarts() — largest substructure matching a SMARTS pattern
R-group decomposition decompose_r_groups() — scaffold + R-group extraction

Fingerprints

Type Description
Circular ECFP Tautomer-aware structural invariants, configurable radius (2=ECFP4, 3=ECFP6, -1=whole molecule)
Circular FCFP Pharmacophoric invariants (H-bond donor/acceptor, ionisable, aromatic, hydrophobic)
Count-based ECFP/FCFP ecfp_counts() / fcfp_counts() — superior to binary for ML
Topological Torsion topological_torsion() — 4-atom path fingerprint (SOTA on peptides)
Path fingerprint Graph-aware DFS path enumeration, tautomer-invariant
MCS fingerprint MCS-aware, uses chemical matching rules for path compatibility
Similarity metrics tanimoto(), dice(), cosine(), soergel() — binary + count-vector
Format conversions to_hex(), to_binary_string(), from_hex() — for database storage and REST APIs
Subset check fingerprint_subset() — fast substructure pre-screening

Infrastructure

Feature Description
MatchResult mcs_result() — structured result: size, mapping, tanimoto
RDKit interop mcs_rdkit_native(), batch_mcs_rdkit(), from_rdkit() with correct indices
Similarity screening RASCAL O(V+E) upper bound for fast pre-filtering
Lenient parser Best-effort recovery from malformed SMILES
Batch operations OpenMP-parallel batch_substructure(), batch_mcs(), batch_mcs_rdkit()
Adaptive timeout min(30s, 500+n1*n2*2) based on molecule size
GPU acceleration CUDA + Apple Metal for domain init and RASCAL screening

Performance

Benchmarked alongside RDKit 2025.09.2 on the same machine, same Python process. Both toolkits excel at different tasks — use whichever fits your workflow, or both together.

Pair SMSD RDKit Notes
Morphine / Codeine 51 us 569 ms Complex ring system
Coronene self-match 6 us 780 us Symmetric PAH
Caffeine / Theophylline 17 us 564 us N-methyl difference
PEG-12 / PEG-16 1.6 ms 2.2 ms Linear polymer

Full data: benchmarks/results_python.tsv

Circular Fingerprint (Novel)

Tautomer-aware Morgan/ECFP — includes tautomer class in the atom invariant, so tautomeric forms of the same molecule produce more similar fingerprints.

ECFP vs FCFP: SMSD supports both fingerprint types (Rogers & Hahn 2010):

  • ECFP (Extended Connectivity): atom invariant = atomic number, degree, charge, ring, aromaticity, tautomer class. Best for structural similarity.
  • FCFP (Functional Class): atom invariant = pharmacophoric features (H-bond donor/acceptor, positive/negative ionisable, aromatic, hydrophobic). Best for activity-based similarity and SAR.
Name Radius Type SMSD call
ECFP2 1 Structural circular_fingerprint(mol, radius=1)
ECFP4 2 Structural circular_fingerprint(mol, radius=2)
ECFP6 3 Structural circular_fingerprint(mol, radius=3)
FCFP2 1 Pharmacophoric circular_fingerprint(mol, radius=1, mode="fcfp")
FCFP4 2 Pharmacophoric circular_fingerprint(mol, radius=2, mode="fcfp")
FCFP6 3 Pharmacophoric circular_fingerprint(mol, radius=3, mode="fcfp")
Whole -1 Either circular_fingerprint(mol, radius=-1)
import smsd

# ECFP4 (structural, recommended default)
ecfp4 = smsd.circular_fingerprint("c1ccccc1", radius=2, fp_size=2048)

# FCFP4 (pharmacophoric — H-bond donors/acceptors, ionisable, aromatic, hydrophobic)
fcfp4 = smsd.circular_fingerprint("c1ccccc1", radius=2, fp_size=2048, mode="fcfp")

# ECFP6 (radius 3, captures larger environments)
ecfp6 = smsd.circular_fingerprint("c1ccccc1", radius=3, fp_size=2048)

# ECFP2 (radius 1, fastest, less discriminating)
ecfp2 = smsd.circular_fingerprint("c1ccccc1", radius=1, fp_size=2048)

# Whole molecule (radius -1 = expand until convergence)
whole = smsd.circular_fingerprint("c1ccccc1", radius=-1, fp_size=2048)

# Tanimoto similarity (works with any fingerprint type)
sim = smsd.tanimoto(
    smsd.circular_fingerprint("c1ccccc1", radius=2),
    smsd.circular_fingerprint("c1ccc(O)cc1", radius=2))

Using with RDKit

SMSD works standalone or alongside RDKit. Use RDKit for parsing and drawing, SMSD for fast matching:

from rdkit import Chem
import smsd

mol1 = Chem.MolFromSmiles("c1ccccc1")
mol2 = Chem.MolFromSmiles("c1ccc(O)cc1")

# MCS with RDKit molecules
result = smsd.mcs_rdkit(mol1, mol2)

# Depict MCS with highlighted atoms (works in Jupyter)
img = smsd.depict_mcs("c1ccccc1", "c1ccc(O)cc1")

# Export to SDF
smsd.export_sdf([smsd.parse_smiles(s) for s in ["CCO", "c1ccccc1"]], "output.sdf")

# Convert between SMSD and RDKit
g = smsd.from_rdkit(mol1)
rdmol = smsd.to_rdkit(g)

RDKit is optional — pip install smsd works without it.

Solvent-Aware Tautomer Matching

import smsd

opts = smsd.ChemOptions.tautomer_profile()
opts.solvent = smsd.Solvent.DMSO       # adjust for DMSO
opts.with_ph(5.0)                       # adjust for pH 5.0

mcs = smsd.mcs("CC(=O)C", "CC(O)=C", chem=opts)

Supported solvents: AQUEOUS, DMSO, METHANOL, CHLOROFORM, ACETONITRILE, DIETHYL_ETHER

Platform & GPU Support

SMSD automatically dispatches to the best available compute backend:

Platform CPU GPU
macOS (Apple Silicon) OpenMP Metal (zero-copy unified memory)
macOS (Intel) OpenMP CPU fallback
Linux OpenMP CUDA (if available)
Windows OpenMP CUDA (if available)
import smsd

# Check GPU availability
if smsd.gpu_is_available():
    print(smsd.gpu_device_info())
    # e.g. "Metal GPU: Apple M2 Pro [OpenMP 5.0, 10 threads]"
    # e.g. "GPU: Tesla T4 [OpenMP 4.5, 8 threads]"

# GPU is used automatically for:
# - Domain initialization in VF2++ substructure search
# - RASCAL batch screening
# - NLF histogram computation

# CPU fallback is seamless — no code changes needed
results = smsd.batch_substructure(query, targets)  # uses GPU if available

API Reference

Core Functions

# Parsing
mol = smsd.parse_smiles("c1ccccc1")
smi = smsd.to_smiles(mol)

# Substructure
smsd.is_substructure(query, target)
mapping = smsd.find_substructure(query, target)

# MCS
mapping = smsd.find_mcs(mol1, mol2)
mapping = smsd.mcs("SMILES1", "SMILES2", tautomer_aware=True)

# Similarity
sim = smsd.similarity("SMILES1", "SMILES2")
ub = smsd.similarity_upper_bound(mol1, mol2)
hits = smsd.screen_targets(query, library, threshold=0.5)

# Fingerprints
fp = smsd.path_fingerprint(mol, path_length=7, fp_size=2048)
fp = smsd.circular_fingerprint(mol, radius=2, fp_size=2048)           # ECFP4
fp = smsd.circular_fingerprint(mol, radius=2, fp_size=2048, mode="fcfp")  # FCFP4
sim = smsd.tanimoto(fp1, fp2)
ok = smsd.fingerprint_subset(query_fp, target_fp)

# Format conversions (database storage, REST APIs)
hex_str = smsd.to_hex(fp, fp_size=2048)
fp_back = smsd.from_hex(hex_str)
bits    = smsd.to_binary_string(fp, fp_size=2048)

# Batch (OpenMP parallel)
results = smsd.batch_substructure(query, targets)
results = smsd.batch_mcs(query, targets)
fps     = smsd.batch_fingerprint(mols, path_length=7, fp_size=2048)
hits    = smsd.batch_fingerprint_screen(query_fp, target_fps)

# RASCAL pre-screen + exact MCS in one call
matches = smsd.screen_and_match(query, targets, threshold=0.5)

# GPU
smsd.gpu_is_available()
smsd.gpu_device_info()

Configuration

opts = smsd.ChemOptions()
opts.match_atom_type = True
opts.tautomer_aware = True
opts.ring_fusion_mode = smsd.RingFusionMode.STRICT
opts.match_bond_order = smsd.BondOrderMode.LOOSE

# Profiles
opts = smsd.ChemOptions.tautomer_profile()
opts = smsd.ChemOptions.profile("strict")

Complementary Strengths

SMSD is designed to work alongside existing toolkits, not replace them. Each toolkit brings unique strengths to the cheminformatics ecosystem:

Capability SMSD Pro RDKit CDK
Tautomer-aware circular FP Yes
pH/solvent-sensitive matching Yes
Multi-level MCS pipeline 11 levels FMCS MCSPlus
GPU acceleration CUDA + Metal
Descriptor calculation Extensive Extensive
Reaction handling Basic Comprehensive Comprehensive
3D conformers Yes Yes
Header-only C++ Yes

Recommended workflow: Use RDKit or CDK for parsing, descriptors, and 3D — use SMSD for MCS and substructure matching.

Also Available

  • Java: com.bioinceptionlabs:smsd:6.3.2 on Maven Central
  • C++: Header-only, zero dependencies — GitHub

Citation

If you use SMSD in your research, please cite:

Rahman SA, Bashton M, Holliday GL, Schrader R, Thornton JM. Small Molecule Subgraph Detector (SMSD) toolkit. Journal of Cheminformatics, 1:12, 2009. DOI: 10.1186/1758-2946-1-12

A machine-readable CITATION.cff is available for automated citation tools.

License

Apache 2.0 — Copyright (c) 2018-2026 Syed Asad Rahman, BioInception PVT LTD. See NOTICE for attribution, trademark, and novel algorithm terms.

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

smsd-6.3.2.tar.gz (587.8 kB view details)

Uploaded Source

Built Distributions

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

smsd-6.3.2-cp313-cp313-win_amd64.whl (572.2 kB view details)

Uploaded CPython 3.13Windows x86-64

smsd-6.3.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (652.4 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

smsd-6.3.2-cp313-cp313-macosx_11_0_arm64.whl (594.3 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

smsd-6.3.2-cp312-cp312-win_amd64.whl (572.2 kB view details)

Uploaded CPython 3.12Windows x86-64

smsd-6.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (652.3 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

smsd-6.3.2-cp312-cp312-macosx_11_0_arm64.whl (594.2 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

smsd-6.3.2-cp311-cp311-win_amd64.whl (571.0 kB view details)

Uploaded CPython 3.11Windows x86-64

smsd-6.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (648.9 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

smsd-6.3.2-cp311-cp311-macosx_11_0_arm64.whl (594.0 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

smsd-6.3.2-cp310-cp310-win_amd64.whl (570.0 kB view details)

Uploaded CPython 3.10Windows x86-64

smsd-6.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (648.3 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

smsd-6.3.2-cp310-cp310-macosx_11_0_arm64.whl (592.5 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

File details

Details for the file smsd-6.3.2.tar.gz.

File metadata

  • Download URL: smsd-6.3.2.tar.gz
  • Upload date:
  • Size: 587.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for smsd-6.3.2.tar.gz
Algorithm Hash digest
SHA256 58c1a8f80b49a72b94fd15d8519a62e04faf2d68fa2af2720a3ccc54f04d126f
MD5 72f192a767fef652fa4a4bc635420bdd
BLAKE2b-256 90c0c47d3fb1b58597c5185536d4ba7f2e013c15644ea6239adb3fc2a8c9a736

See more details on using hashes here.

Provenance

The following attestation bundles were made for smsd-6.3.2.tar.gz:

Publisher: python-publish.yml on asad/SMSD

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

File details

Details for the file smsd-6.3.2-cp313-cp313-win_amd64.whl.

File metadata

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

File hashes

Hashes for smsd-6.3.2-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 4bdb2483e60b23f83eeba6740dbfca325ab3bdf5cdc1913c8a205cc967f3afd5
MD5 c46b16453b4ce80abd4ad6bcdce939ca
BLAKE2b-256 6a6afd3fc7772ed9f3c3c3710895e616e1d759562accafc31247a88a7ec64022

See more details on using hashes here.

Provenance

The following attestation bundles were made for smsd-6.3.2-cp313-cp313-win_amd64.whl:

Publisher: python-publish.yml on asad/SMSD

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

File details

Details for the file smsd-6.3.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for smsd-6.3.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 1a2e64ac9b298a617edcff07a6e0b204e8d5f5c6c1100f82b1b74adfa783fbae
MD5 7d5810433826f672f8d78270fa6599a9
BLAKE2b-256 eaa688bff50e8c2ad52bb530e00ef011779a7a4596b35b83ad4da7e1cc3b164c

See more details on using hashes here.

Provenance

The following attestation bundles were made for smsd-6.3.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: python-publish.yml on asad/SMSD

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

File details

Details for the file smsd-6.3.2-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for smsd-6.3.2-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 7669a18e29811eee6c92e4f5d906595e84c9562b6599193351c038395fea07b4
MD5 7f39dba8d88435a7b1b4de0534b90083
BLAKE2b-256 6c19ee6e85b50dd6a00c568f2077dc3c1039610856859c97adea857b37c96628

See more details on using hashes here.

Provenance

The following attestation bundles were made for smsd-6.3.2-cp313-cp313-macosx_11_0_arm64.whl:

Publisher: python-publish.yml on asad/SMSD

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

File details

Details for the file smsd-6.3.2-cp312-cp312-win_amd64.whl.

File metadata

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

File hashes

Hashes for smsd-6.3.2-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 6a5ad976723cebf721ae9220fb96da34972bac118f532e7587b87c03ca9f9e4b
MD5 17766b24a560271447e5668790e88c40
BLAKE2b-256 36f8e5d0091c9321b0d3b234790657d954d000d22e8c326e4ade7191be777364

See more details on using hashes here.

Provenance

The following attestation bundles were made for smsd-6.3.2-cp312-cp312-win_amd64.whl:

Publisher: python-publish.yml on asad/SMSD

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

File details

Details for the file smsd-6.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for smsd-6.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 aa215688167386b1e635cd9914197d7a304b4cfeade6c018e83186666f0bcd4b
MD5 e93fab0038726c50e6330f89c7cb0f9e
BLAKE2b-256 4df86592aced549cfcacb388487866f64612b11f64f0d533f6036f18f22f559d

See more details on using hashes here.

Provenance

The following attestation bundles were made for smsd-6.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: python-publish.yml on asad/SMSD

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

File details

Details for the file smsd-6.3.2-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for smsd-6.3.2-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 0ac9300bd05e2f08c7875b6b6571a48c46db245e6c4c2cc792dfcab3c3dd39cd
MD5 293c93c03be23b55e194fe701c422afc
BLAKE2b-256 9826771cf73c54e1a2b54d7214504db83e194289fc5688d633f396e049845052

See more details on using hashes here.

Provenance

The following attestation bundles were made for smsd-6.3.2-cp312-cp312-macosx_11_0_arm64.whl:

Publisher: python-publish.yml on asad/SMSD

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

File details

Details for the file smsd-6.3.2-cp311-cp311-win_amd64.whl.

File metadata

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

File hashes

Hashes for smsd-6.3.2-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 e057d5794ab571298110a688efeca2c5feaeeccf348e8d56b36e9152fbc49071
MD5 123e22d39ddb81f5e5283e51b4a04795
BLAKE2b-256 a32a0a72648bfe6aadd7c2588401a79936a95f1e26b80432c836daf31596a9ee

See more details on using hashes here.

Provenance

The following attestation bundles were made for smsd-6.3.2-cp311-cp311-win_amd64.whl:

Publisher: python-publish.yml on asad/SMSD

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

File details

Details for the file smsd-6.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for smsd-6.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 3cef786aae35753e593804ef5a1f8aa940c6d13e95fd939e0044e3ef2adcca45
MD5 c0c92d08be346616b9fa63bdd02b048f
BLAKE2b-256 5449e1acdaadd751c06140bd0722fe2c45aaeca9d39fdf11dd7ee450fac05a29

See more details on using hashes here.

Provenance

The following attestation bundles were made for smsd-6.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: python-publish.yml on asad/SMSD

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

File details

Details for the file smsd-6.3.2-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for smsd-6.3.2-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 3b1dfc5c170761cab92efaad339e7083d4d7c27507add813e8527c209468dc97
MD5 c508926eb9c0803cbabacdcb9400d06d
BLAKE2b-256 0f21d754ac309fc40ad769bdabf7c94e7241c043f15cc89ffecf51bc59312023

See more details on using hashes here.

Provenance

The following attestation bundles were made for smsd-6.3.2-cp311-cp311-macosx_11_0_arm64.whl:

Publisher: python-publish.yml on asad/SMSD

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

File details

Details for the file smsd-6.3.2-cp310-cp310-win_amd64.whl.

File metadata

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

File hashes

Hashes for smsd-6.3.2-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 a7b45b71bb8521b689b4c139de7f5c63de9bab73365a58e7c6eab7b9213f583d
MD5 2232bd0fbd313ec571e667d2bfb1dc04
BLAKE2b-256 029a0bbf436d45dd28b250de647a666e6c4560098ea91484134d775c76e4bb5a

See more details on using hashes here.

Provenance

The following attestation bundles were made for smsd-6.3.2-cp310-cp310-win_amd64.whl:

Publisher: python-publish.yml on asad/SMSD

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

File details

Details for the file smsd-6.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for smsd-6.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 14a87b6ec294628e2a8ddc8c044251b618c19ae86480b0a0814bc5d9cfad57ef
MD5 cdab98e3659b3955b4f20cb3a3692eb5
BLAKE2b-256 c2ac72cc597e554f03ad8b9464255a2ad8cee0754f675e1c07e9057b494f2d45

See more details on using hashes here.

Provenance

The following attestation bundles were made for smsd-6.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: python-publish.yml on asad/SMSD

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

File details

Details for the file smsd-6.3.2-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for smsd-6.3.2-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 864959db9cf6a3be6a803d5381c456709d589fa7212e51b9229e119e3935e713
MD5 dd351767243a75a1d73fbda3f6e1dce5
BLAKE2b-256 9e9e46c86a1f59fe348462aa20dce0fd083447a88467268dfb912fa706e6bf65

See more details on using hashes here.

Provenance

The following attestation bundles were made for smsd-6.3.2-cp310-cp310-macosx_11_0_arm64.whl:

Publisher: python-publish.yml on asad/SMSD

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

Supported by

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