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.5.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.5.0.tar.gz (637.4 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.5.0-cp313-cp313-win_amd64.whl (639.6 kB view details)

Uploaded CPython 3.13Windows x86-64

smsd-6.5.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (725.6 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

smsd-6.5.0-cp313-cp313-macosx_11_0_arm64.whl (668.2 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

smsd-6.5.0-cp312-cp312-win_amd64.whl (639.6 kB view details)

Uploaded CPython 3.12Windows x86-64

smsd-6.5.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (725.7 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

smsd-6.5.0-cp312-cp312-macosx_11_0_arm64.whl (668.1 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

smsd-6.5.0-cp311-cp311-win_amd64.whl (638.6 kB view details)

Uploaded CPython 3.11Windows x86-64

smsd-6.5.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (722.7 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

smsd-6.5.0-cp311-cp311-macosx_11_0_arm64.whl (667.7 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

smsd-6.5.0-cp310-cp310-win_amd64.whl (637.5 kB view details)

Uploaded CPython 3.10Windows x86-64

smsd-6.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (721.6 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

smsd-6.5.0-cp310-cp310-macosx_11_0_arm64.whl (666.7 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

File details

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

File metadata

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

File hashes

Hashes for smsd-6.5.0.tar.gz
Algorithm Hash digest
SHA256 c249a913d3e66a2b119c0cb01304ca23b2a931356842fe4df1c0e294cc6f1705
MD5 9ebc908e525e7551c475d54b9fc38d3f
BLAKE2b-256 9746903f188d02c55243249198d95b67ab15734fc1efcf49daede9aef3fa9638

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: smsd-6.5.0-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 639.6 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.5.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 55dc9dff8b7f7c0ba0293c57b6473b9acb8109f40b5661d923022528827abc7b
MD5 6a15e2a4d64643f6e3385fc194d69d2a
BLAKE2b-256 d53e93ef8cb55d6980d7361f63512bc728826a1112e4f7f8e17917061e4f1cf3

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.5.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 279a7a6965b4cddb56d6d26f9c8226baee12f5c05371fd495efcf5e6a8c860ad
MD5 03ad32aea87b49950e3ee6ab42fdfdf9
BLAKE2b-256 4348be59a85f345658d8ba0a934c795e0e0000a88d2468ee510614ef4e9f6a40

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.5.0-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 1c468e89843b8e9a0e5e53e677c28490854a2b8c50cfb3d041135da03661c73c
MD5 366c5aca70638c9b23a66d3158fb3791
BLAKE2b-256 5cd4cfbf767d1b1bf4b82d3d2287e3fb457aff72c751f31ce08fe7e3ca540870

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: smsd-6.5.0-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 639.6 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.5.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 1b90c98fbe970008108ad4bf2cebe39f92cd57ac3204dd6ecd5ab551fb0b67f6
MD5 78659f6f3035ea9501c46bd33c26039a
BLAKE2b-256 5ae93ff9c26fb13286cdde03b9d13dbafdc00c0f2dcefb483ca589a92e6fc672

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.5.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 6a55f2c07a43adb1cf7cf2e5355229bb631a05ed4cdb99a2a0ad30b5d9da1409
MD5 6e3108f7ac9f2f80ee0a13f17c61c545
BLAKE2b-256 7a7132a348fb9bbdb3b30d052e4f991cb44d2da7f62e5bde84c0d6a868029ad4

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.5.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 15f7094f1a6ec2692eb6b6dc93dc311d8d83c65550021cb0922872ab5e7ae1a4
MD5 d39750c28a4dfd96776e2a135fa40c21
BLAKE2b-256 6c4899fdd7c80a077f833ca758965f4b3a6e5a1b6e51f2c4bff26f1957421088

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: smsd-6.5.0-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 638.6 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.5.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 cd72a5df7634eb56eb09fcf247cd0a1015bf4bc577c01960534ef451cfbefab6
MD5 3746185384d997c747a1e492efe79171
BLAKE2b-256 a03f61f7addf5ea0bf463ee2585395291fc78d7876ee2deb86db4124dfd8db87

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.5.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 35bbffc2946c670e8a9f67f8935fefe00f96597c885de56fe7adf9df8995b16e
MD5 826707fda414e7d8cc9340042529a555
BLAKE2b-256 79315742011d983da2d6183eafb126187af8e7f55d40e4334990ee60231e4c3c

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.5.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b60141a1123f89501ba62eba9a2116cf4e1b0e6237246016bf499c7d7cb7e9b2
MD5 09bf809ec1b1a9f9ad5872a7b784045f
BLAKE2b-256 08a2d906abfab6102d28cf24eab3914660f4a36985e6e6ea1c3f6fc617d0fd84

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: smsd-6.5.0-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 637.5 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.5.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 9d27379d7a30a55ac185ed11a4e51b8334159af6985173ce6f983fae4f7e4edd
MD5 8e3f7a10e580ebb6077000868d177b2b
BLAKE2b-256 28f5b7bf19607eb56bca6df6b07c18a4634702d89abbb3dd9b152278420a3696

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 586354e124d797ffed0ab5011f01ea13ad31bbfc2ba5e0379de20701d9e50da4
MD5 043561093f24e98d0c4ccaf154ed1777
BLAKE2b-256 742e4a9b2e387672a2215014f3e308235eb48d63d091c62f72b23760bdb0a410

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.5.0-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 155994a306341e705500fd7578157a087189d26413b04b907f69975b18f77f6a
MD5 ac25f1f8fcf1b93bca82284c74e94e78
BLAKE2b-256 b540df2980039f71438c9f003d28197e30c478e39f9a360a774517f0d3fcec00

See more details on using hashes here.

Provenance

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