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.8.0 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.8.0.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.8.0-cp313-cp313-win_amd64.whl (697.8 kB view details)

Uploaded CPython 3.13Windows x86-64

smsd-6.8.0-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.8.0-cp313-cp313-macosx_11_0_arm64.whl (731.8 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

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

Uploaded CPython 3.12Windows x86-64

smsd-6.8.0-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.8.0-cp312-cp312-macosx_11_0_arm64.whl (731.8 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

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

Uploaded CPython 3.11Windows x86-64

smsd-6.8.0-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.8.0-cp311-cp311-macosx_11_0_arm64.whl (731.4 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

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

Uploaded CPython 3.10Windows x86-64

smsd-6.8.0-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.8.0-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.8.0.tar.gz.

File metadata

  • Download URL: smsd-6.8.0.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.8.0.tar.gz
Algorithm Hash digest
SHA256 26dfbc57d89b9bff6c21d7406cb154706899c12e55acd55ad1f3de8d50795e19
MD5 d02ad180be6e8a105252969415841b79
BLAKE2b-256 7f9a23b382906d00289913a4302110d433385cb96ea59ab31ef8fb4ec21ab0b8

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: smsd-6.8.0-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.8.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 423b1284a82ff966a1cd6ca3050422289e929931f4e3bd2e43b409ceb534064b
MD5 45257e0cbaf54d6806d736676343d7d8
BLAKE2b-256 33519306cf16ab0a10f7f1221e68ebb539bc2880ba7e909f6e948eb24b72a821

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.8.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 0cd2b85d731198869f578ee8a78b01999d8cbbc605f738ca27b4fe3a6edb5569
MD5 1d05e50e7777597f9218657db6c0a7f5
BLAKE2b-256 7753ed8568b4c60f54d4cb3eb9e0edc801e6c42741ff14f01acae0fa9dbc3c41

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.8.0-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 79fee29223ee9c17de622cbb988a363e6cbe8b80c2ce1d7db7d81d0bcfabb6cc
MD5 4a376da47cd221b45b932ab0a9832f57
BLAKE2b-256 36a888cd80c3526409df2822236fcd0f86dd2154aad9d34cdcf3439f7ee45183

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: smsd-6.8.0-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.8.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 25c0f22942425555fb07bc15d9df33a0f3a340c12341fb0517024139b244b5be
MD5 5942d7115cb4c2f47b0138a14492156a
BLAKE2b-256 ab7e6d417e1f8f6d6f518478407755df5d87b7af7cece90246e5ab180554ff6e

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.8.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 a2871ee5ecd993dc25258de7823e38f98a526cd8b2ece46888148c063b53db5c
MD5 2ecccf8b0662a7477347579fa8b90b60
BLAKE2b-256 7bf72f7e83e1c92ea06ef6928fb3694c36b1405a88dd96749bbd202d1b0a8ef3

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.8.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b61cd5c1378115649863840651234eb9ce90d60074ce3dc16768adda18ea69cf
MD5 2334f3370af9bc25a0b60828d3aca433
BLAKE2b-256 6533bf61b11ff4d51b28b26dde1d56ecb5edda99174ab4fedc735ce983ecaaee

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: smsd-6.8.0-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.8.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 0f672acee157a8fa546e5e2228cf701e5f703258e7dab22dcbf72c0bcdae3b5f
MD5 9b4c92613bab38cb7b2cf0ec47405ce1
BLAKE2b-256 f588c345410f50e124ee35eaed1baf7575f9ea4f20f06b98c73778c9624767b6

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.8.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 0e6cc752d84e1e98f7e68b6eabd5ef782872bbcf8f2fe624a1505db6463b8ebb
MD5 ef4237d29c9c9751c43a6ab86ecca81c
BLAKE2b-256 b98e4775f0f589aa4ec25b8772e7c1725e2e31875852d05f1ca317ec9a9aef91

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.8.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 501a3d5920140295e1e9516cdf67476c9a0350c70b954cca0d9bfa24030b2f4f
MD5 066bb20398067b224b83b704588636d0
BLAKE2b-256 281230476defdc718cdb4c08d3b85e89d1569f391cdc4f2a643f4a2998d732d4

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: smsd-6.8.0-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.8.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 65b236facbd4d6aa2618911e1078c0ec7a9837610eab451488629861f0e5d0af
MD5 41e19baef2427fcbac0c1127bcb170ec
BLAKE2b-256 89bb688b726aeffe6cf6c37c9116202ba3c3dfba8dce32def204dde94778ffde

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.8.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 dc8738704dd99265ae03b3b73b0ee357827afe6d36c2d735c2bf84654bd1ca7f
MD5 83b11c1f8f29042d5052166fc2c7cb5a
BLAKE2b-256 9d6309b273c70f05920fc71ed1663022a71f9ceda2db8c7a497a3bda507d6162

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.8.0-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 7296cbd60a549eaef746c8409b0ad834903fa4f82b48509f7d16a736519a771e
MD5 427dd03a0e6f1c323f9a480b447c03f6
BLAKE2b-256 d72c6d8075671388c42d72b5ee4a9464055c1436fb6ca78af3f6fc8d2a080222

See more details on using hashes here.

Provenance

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