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 for Python

PyPI Downloads License Python

Python bindings for SMSD native graph matching, including substructure search, maximum common substructure (MCS), fingerprints, and molecular similarity. RDKit and CDK are not required for the core SMSD path.

Install

pip install smsd

Supported CPython versions: 3.9 through the latest stable release series. Current default test target: Python 3.12. The native SMSD path is CPU-first with optional GPU acceleration. RDKit remains optional for interop and depiction rather than a core dependency.

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 79 us 579 ms Complex ring system
Coronene self-match 6 us 712 us Symmetric PAH
Caffeine / Theophylline 17 us 373 us N-methyl difference
PEG-12 / PEG-16 39 us 2.1 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 with the native writer
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

Native MOL/SDF I/O

import smsd

g = smsd.read_molfile("input.mol")
mol_block = smsd.write_mol_block(g)
mol_block_v3000 = smsd.write_mol_block_v3000(g)
sdf_record = smsd.write_sdf_record(g)

smsd.write_molfile(g, "out_v2000.mol")
smsd.write_molfile(g, "out_v3000.mol", v3000=True)
smsd.write_molfile(g, "out.sdf", sdf=True)

The native writer preserves practical chemistry metadata in 6.10.2:

  • names, comments, and SDF properties
  • charges, isotopes, atom classes, and atom maps
  • R#/R<n> plus M RGP
  • practical V2000/V3000 stereo round-trip

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.10.2 on Maven Central
  • C++: Header-only, zero dependencies — GitHub

Citation

If you use SMSD Pro in your research, please cite:

Rahman SA. SMSD Pro: Coverage-Driven, Tautomer-Aware Maximum Common Substructure Search. ChemRxiv, 2025. DOI: 10.26434/chemrxiv.15001534

For the original SMSD toolkit, please also 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.10.2.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.10.2-cp313-cp313-win_amd64.whl (802.8 kB view details)

Uploaded CPython 3.13Windows x86-64

smsd-6.10.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (908.8 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

smsd-6.10.2-cp313-cp313-macosx_11_0_arm64.whl (856.7 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

smsd-6.10.2-cp312-cp312-win_amd64.whl (802.7 kB view details)

Uploaded CPython 3.12Windows x86-64

smsd-6.10.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (908.9 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

smsd-6.10.2-cp312-cp312-macosx_11_0_arm64.whl (856.6 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

smsd-6.10.2-cp311-cp311-win_amd64.whl (801.9 kB view details)

Uploaded CPython 3.11Windows x86-64

smsd-6.10.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (906.2 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

smsd-6.10.2-cp311-cp311-macosx_11_0_arm64.whl (855.8 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

smsd-6.10.2-cp310-cp310-win_amd64.whl (801.0 kB view details)

Uploaded CPython 3.10Windows x86-64

smsd-6.10.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (905.9 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

smsd-6.10.2-cp310-cp310-macosx_11_0_arm64.whl (854.7 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

File details

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

File metadata

  • Download URL: smsd-6.10.2.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.10.2.tar.gz
Algorithm Hash digest
SHA256 3b03b476732ac398e1ca8964871405090b63e8d403210ddfcde31527b3844903
MD5 176fd59c117bd81410453ad4efaa9ba9
BLAKE2b-256 a538f7bf98deb4e3e99d0692e1512340a44efcee7477276c773cac9623b83a5e

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: smsd-6.10.2-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 802.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.10.2-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 3981dddce58d68ec4934f9ce315fa901d645cbb26a5c5483f4944e46850a9e02
MD5 61261794a3cf56e4b611eeb295fb1a9a
BLAKE2b-256 a7bea1d291702ed85bfc4526d9ba50324836ee634415173a16d8aa7ff7a6e171

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.10.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 34522e4f6b8a37632ea48e12828a361099d1927d4e9f839ec7939e8f510fcd9e
MD5 29d8e3575d1950db107547a7f7a2a293
BLAKE2b-256 289ad3247b9386df2f5c97e66df4d40f76c3a60d32ec8322e5cfc785e95c002c

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.10.2-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 075a2ac090f00a9486f10375d5a45a40fe25141db76fe19e76a99b665c5f32cc
MD5 dbee7688ad27236e1df50e666e27889a
BLAKE2b-256 8a181366f9da5718fc79495b0b0e5df21196afe71f37e029b2c1efd631b53b6d

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: smsd-6.10.2-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 802.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.10.2-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 3422bd78224daef17b697d3569fdf6ef6f85e6b7a897ba255f203f3e13d7723c
MD5 fece91808057e0a14be38a89f6c25cbf
BLAKE2b-256 fd51f9b01844dd522c0c1097377598acf8313415596fa442e3f41babf28b7d8d

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.10.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 00a8b3fd6ee48b00f81d21d6ece13071333cdbb4213afb50345abe52215c8c8b
MD5 04753fc5ebeb4eb5f136c9b6d54ef252
BLAKE2b-256 eff52094b739c1141d60cfcdbf625f0bfd3e769c1893fe548ebcea7c03fc945a

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.10.2-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 2b40d3b593079dfedf4f50ed4b538b29f1c15d58b07f3e72d6b8ab19abb5a327
MD5 d84e94aa811e3f78651979ad41f6ab09
BLAKE2b-256 a856fdaa0c3d0d3670161367d3274e1c6fb6e67fae2e4281b48b3b55202408ee

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: smsd-6.10.2-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 801.9 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.10.2-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 46ea8a2efb801bab195f1e078bd56346a441c3b75e6722173d6aa24236e09893
MD5 2945cbb729e16101bf2165deb38e4ed3
BLAKE2b-256 4b6137e1025fb1b1849a12243a25217ed3051b56cb1c7b7f4b09354681734451

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.10.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 0618bdf072c6d493a20f22c0f519c7e02794f0d5075f4d110d3ed58c5c6c4c84
MD5 79901165cb5dd27079cd1ebd5a806691
BLAKE2b-256 7a39b3e3bf559e138fca4d9e24dd2ca7d6408cb70734550ad6230d57ee3d4cfd

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.10.2-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 4891fe26eaa3e943b93b80ecd14477034949597e1592196b69e8ece3329df3e6
MD5 61d5608afe6a61fda2700aa5fd3840b5
BLAKE2b-256 18dcff5a6842b07d1c5dff5e2da6f6e81740aafcbe8231f507d354ef9d782bcd

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: smsd-6.10.2-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 801.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.10.2-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 5309a84da6c1d48596386cc299e44bba6cf61cf1e825bc7de646001a3ab91dec
MD5 3b5525df2712154ba2d891a27c8a0782
BLAKE2b-256 c901b82a5db7e548d879ce2a4ba2c5de1a9669938273aac20d4644b64cc06132

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.10.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 fd43c0622e35f6f8a08901e8a5aa6b8d4966bdc960a1c013caaac6ff34146b6a
MD5 9e9490480b442052f0adfaa8e42b716e
BLAKE2b-256 2c95e8e5be90c01a3b15e4041886610677388c8a6b0f312c059fcfb0d37824bd

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.10.2-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 c0e1ff681f33715c61e029ced19ee03bc9abb29f96ffc70915a4feaf799ce4e9
MD5 7cf5d6a3d171b56145d7066b6232970e
BLAKE2b-256 a3526ccb75eee6f903f0ae369c5f6e30af5dd7490a5ff0af711bd40b7339e052

See more details on using hashes here.

Provenance

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