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
Force-directed layout force_directed_layout() for bond-crossing minimisation
SMACOF stress majorisation stress_majorisation() for optimal 2D embedding
Scaffold templates match_template() for 10 pre-computed common scaffolds
Reaction-aware MCS find_mcs(..., reaction_aware=True) or map_reaction_aware() post-filter
Ring perception compute_sssr(), layout_sssr() — clean SSSR APIs

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.6.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.6.2.tar.gz (654.9 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.6.2-cp313-cp313-win_amd64.whl (658.2 kB view details)

Uploaded CPython 3.13Windows x86-64

smsd-6.6.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (740.7 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

smsd-6.6.2-cp313-cp313-macosx_11_0_arm64.whl (687.9 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

smsd-6.6.2-cp312-cp312-win_amd64.whl (658.2 kB view details)

Uploaded CPython 3.12Windows x86-64

smsd-6.6.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (740.7 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

smsd-6.6.2-cp312-cp312-macosx_11_0_arm64.whl (687.8 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

smsd-6.6.2-cp311-cp311-win_amd64.whl (656.4 kB view details)

Uploaded CPython 3.11Windows x86-64

smsd-6.6.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (737.9 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

smsd-6.6.2-cp311-cp311-macosx_11_0_arm64.whl (687.7 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

smsd-6.6.2-cp310-cp310-win_amd64.whl (655.7 kB view details)

Uploaded CPython 3.10Windows x86-64

smsd-6.6.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (736.6 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

smsd-6.6.2-cp310-cp310-macosx_11_0_arm64.whl (686.4 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

File details

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

File metadata

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

File hashes

Hashes for smsd-6.6.2.tar.gz
Algorithm Hash digest
SHA256 ce14b5d53ad546719f8aadaab2d53aa3a6da469b70e95b5f607a3f1fbf7b5413
MD5 0be10ceddde12457c6eb2a130f71d942
BLAKE2b-256 bcdef0a8312d8069bec34498ffce507c1b87cab8b76719a3f7ae41f38ee0c68b

See more details on using hashes here.

Provenance

The following attestation bundles were made for smsd-6.6.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.6.2-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: smsd-6.6.2-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 658.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.6.2-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 cb61e33190f71357124fabbe9ee58fbb13aec2a62d47120268eb34ab87b13ae5
MD5 1e08f4e81f300311678b98d46559419e
BLAKE2b-256 e1a0b9e9310420d261bcb912926680927da2b995ba05fb98abc54abeee385632

See more details on using hashes here.

Provenance

The following attestation bundles were made for smsd-6.6.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.6.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for smsd-6.6.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 ed1e7ef2e39e686e95672dcaef197b7a8681831d717252c3f3185f787bfc1982
MD5 84488593959237d1ebcf3bd7a410248f
BLAKE2b-256 90a8b0fb5087ed93968dfe347c2be4975ab829057506e6cb937e0bf8613a5b26

See more details on using hashes here.

Provenance

The following attestation bundles were made for smsd-6.6.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.6.2-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for smsd-6.6.2-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 6010bf281ffb5286720588ca41c852a8844bef927df6ee2303d5b4fd5a835450
MD5 f852fdbb7eac3479b4ba6310923735d0
BLAKE2b-256 47ab41b347571f70b49f087eb0a7fe333657d23145013e8362598b21cdc6dc4a

See more details on using hashes here.

Provenance

The following attestation bundles were made for smsd-6.6.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.6.2-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: smsd-6.6.2-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 658.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.6.2-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 264d9368bcf4e35c15e272f723ebe1c3c4227631965298605283c27610200741
MD5 ffbdd1bd17be2266b8424c7ab4e10b5a
BLAKE2b-256 544b573249d350bb7000377818e6500e0a6a97a5b3121560d071e02722eab1c1

See more details on using hashes here.

Provenance

The following attestation bundles were made for smsd-6.6.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.6.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for smsd-6.6.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 e56182250684abc5cd459fab1126e76c498b18c12d6cdf2017db62c288caf7dc
MD5 c5ef39e0d7fba33f9f8faba55f254770
BLAKE2b-256 6e1f15715c2fd3f8127dd25f972a200da0f7c6b9cdf066998fe16b08bfeb61d8

See more details on using hashes here.

Provenance

The following attestation bundles were made for smsd-6.6.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.6.2-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for smsd-6.6.2-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 033cc2aa0370c26fcc4beba6e3a1ccb36c1ceb57df16d51896bc5be261632ff8
MD5 4f20564f3e7225bcb5f58655e81c513d
BLAKE2b-256 cf2fd0786253eb25d887776291e5d47ad1ec4aedf85db6bb72f5c63799f1584d

See more details on using hashes here.

Provenance

The following attestation bundles were made for smsd-6.6.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.6.2-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: smsd-6.6.2-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 656.4 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.6.2-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 ece856f50350c657dc606f33d75b5b4caae510f89ad5c1208e00b7f16c2b1909
MD5 65d0f3d46a21647599fedec1dbacf614
BLAKE2b-256 e3ccb85019cb2488896dd1eaabf0eed7778bbd12518d0e6fdff592ddb0a36475

See more details on using hashes here.

Provenance

The following attestation bundles were made for smsd-6.6.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.6.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for smsd-6.6.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 e6feadee3efc2f99d11c37514d274294d9d4c7e86dde0e4d45198d33d7c9d5d9
MD5 bbdbba6020f0721aba6263f740475279
BLAKE2b-256 02c14101701a76654edde3a76ef9be26f231d2fbeeaf01d7e52fc5c78fbdcd58

See more details on using hashes here.

Provenance

The following attestation bundles were made for smsd-6.6.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.6.2-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for smsd-6.6.2-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 02ccf5a6b202a32dbb3fd8043d4e7dbe097add7b1687b6953a3ddd8e7ee71e15
MD5 2edeae9de0115b80c7f382e17466ad18
BLAKE2b-256 aefb09234ee7488710a0cebf73ab0de2ef7c6b2985902992cccc8e73cc21dc1b

See more details on using hashes here.

Provenance

The following attestation bundles were made for smsd-6.6.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.6.2-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: smsd-6.6.2-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 655.7 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.6.2-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 b48e7bf5dd68803681f854347dcc3db2c53e73e4dcd676ac2ab283b181da7e72
MD5 9739207c98bfdfb81b5878af32a90430
BLAKE2b-256 b7b04c90496a48400bd0924b713efe1721c246dc24f03ecb38b863b9fbefb1ca

See more details on using hashes here.

Provenance

The following attestation bundles were made for smsd-6.6.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.6.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for smsd-6.6.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 4cef149f8e84dd09a2004e74b468a18e5d30dc8c40d5e7c710aa43cd4ba2cf37
MD5 d26a374019fc3ad5e130defbb2e5b59d
BLAKE2b-256 657ab314fdb0fd20fde9fb032e24053317a040381386867ab52fe49b62736f52

See more details on using hashes here.

Provenance

The following attestation bundles were made for smsd-6.6.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.6.2-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for smsd-6.6.2-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b28e4b300b2a4b14cd1c7b60d888fe8b27d00bc631c1f8cafd81d3717d057693
MD5 c2c2c7cca6f6203a426902ea70fea5f1
BLAKE2b-256 9c08914fcc155e3d47079d630bbfcb09840e77520f81afbbf90c6eff684dbb2e

See more details on using hashes here.

Provenance

The following attestation bundles were made for smsd-6.6.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