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.7.4 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.7.4.tar.gz (2.5 MB view details)

Uploaded Source

Built Distributions

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

smsd-6.7.4-cp313-cp313-win_amd64.whl (697.8 kB view details)

Uploaded CPython 3.13Windows x86-64

smsd-6.7.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (781.7 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

smsd-6.7.4-cp313-cp313-macosx_11_0_arm64.whl (731.8 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

smsd-6.7.4-cp312-cp312-win_amd64.whl (697.7 kB view details)

Uploaded CPython 3.12Windows x86-64

smsd-6.7.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (781.7 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

smsd-6.7.4-cp312-cp312-macosx_11_0_arm64.whl (731.8 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

smsd-6.7.4-cp311-cp311-win_amd64.whl (696.5 kB view details)

Uploaded CPython 3.11Windows x86-64

smsd-6.7.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (779.9 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

smsd-6.7.4-cp311-cp311-macosx_11_0_arm64.whl (731.4 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

smsd-6.7.4-cp310-cp310-win_amd64.whl (695.6 kB view details)

Uploaded CPython 3.10Windows x86-64

smsd-6.7.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (779.0 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

smsd-6.7.4-cp310-cp310-macosx_11_0_arm64.whl (730.1 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

File details

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

File metadata

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

File hashes

Hashes for smsd-6.7.4.tar.gz
Algorithm Hash digest
SHA256 2e19e4a92f6395f09742e1dcfa836d7d97f84c524666355bf0996ff5515846b6
MD5 db2c8ad474a16dd5f461aaf04406c5cb
BLAKE2b-256 01d72de4f809c2b36e52135963ee0a191561a7d4cbe872cb8617408ee83b6d5e

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: smsd-6.7.4-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 697.8 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.7.4-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 934af57f02383ab040a4434762ff59d3c3739c40868f8aec70800e604eaec2e4
MD5 058472c48e973549b6193e6331b3f5b9
BLAKE2b-256 22fd473934b25f9c847787d74d88cb7fe1ee570e794e5936178bfb6f17edcf1e

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.7.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 a51656f1386f85322afbaabd36e4d1a68d99d985484b2f6cfd87bba7ad52e0ea
MD5 bb3db76e75cf33ae23afc7669613f21d
BLAKE2b-256 601f178cbf9d6402eb845ab68fb4e624a4ae1f26ea265899e05cb203603fb104

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.7.4-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 39b707246cfd0a926d09321e373d99902dacdc3dc8ef2343477291e71deb0c36
MD5 1628977a4c9614c25ab7a88d6f756a58
BLAKE2b-256 21bc7455cb9e85b768783587704fd0046194c94947e1011e6ad15cfe4fe3262b

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: smsd-6.7.4-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 697.7 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.7.4-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 7a6bac360da7a0d0967e717bb6fa6dbcca028d509b3fbf37641c0b6e8a3c6a9c
MD5 b2f4d7c4834dce0c3309b5a620423ac7
BLAKE2b-256 a9000be7918db5d6fd7cb7613b90516d42e3ddae287c4c91cc19dc3b7984c792

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.7.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 240ae3aef05054335ce9bafcb754f69fc4a09af1b504fd571174ab8f632b8649
MD5 1e4462239e5b5cefcfba0ea4d6f1beb7
BLAKE2b-256 ca3e23e475df499b0204e4c0a60ab6edad2cf381e88767559ab06339264d2802

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.7.4-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 510b1db1e388ea71a9674127d291cf43ce7ed57b56c8a54d2091b43235594de8
MD5 ab52015265ab51fa13e891bd448b46c9
BLAKE2b-256 db24d8207ea9ecdf0f4921655d87adc7650a013de167c320633a7611c6a32c0e

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: smsd-6.7.4-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 696.5 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.7.4-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 534cd2e8cd40c91c660a94d6641c75d829f43e9c73b9a536aa0477c88ffc4a0d
MD5 ad1b4f4bae9262a623863234991f7180
BLAKE2b-256 ec633283549c411f08b3ab9115d4351c152a9febbac902f6b5c97c6fed623c93

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.7.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 b33ea72d9723b07a89f5f4dc63d60ca489f57e81f77a8f6dc01935fc6be4d356
MD5 9272072868df0952ff5fc8117549196e
BLAKE2b-256 fbcc964f96c6cd6eb3e65b599139acb3eb91e802bae502bf0bac5b97b8a1d966

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.7.4-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b64333a2b876635dc9f28604b4c333448e3096af9a6525c82ebf78e614c7529a
MD5 f2e1b514769c3a8f36df32e84e2f17ef
BLAKE2b-256 f412dee635ef35927a975f625078ff48ab30ab3c8f3de782ba3569643e6820f9

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: smsd-6.7.4-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 695.6 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.7.4-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 c3cd740669d1c3fd15bf0fd0c800df3181d4ee69a6e5bc6ec37a693939f1ddcc
MD5 1e55d352cf090d75af0ccf9651e1b999
BLAKE2b-256 8eb933fde8cb32a5e2b5e85811bf10e50480e0d75307c7f08b504b4747fce60a

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.7.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 ba24dcf564fc20d90a60aa99d96ac4664b7ce37705024e3601153dbcaa6a2c52
MD5 9a52196c500f19c4f65c35118298fbf0
BLAKE2b-256 d5fed4d641c999abc7f2f7bdd573d20fb66f6ca4164fb7a87b92167375541864

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.7.4-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 9a0a2b7732462e8673b4530b3829077f8e244d17bd23d64d00965b749f1ea10a
MD5 171f817dd1e7461b983438f003fc34a3
BLAKE2b-256 55534b26ebb129d9c8bf4e9e183927c15263c2e173d922bb934da91154e23520

See more details on using hashes here.

Provenance

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