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.1:

  • 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.1 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.1.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.1-cp313-cp313-win_amd64.whl (801.7 kB view details)

Uploaded CPython 3.13Windows x86-64

smsd-6.10.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (908.2 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

smsd-6.10.1-cp313-cp313-macosx_11_0_arm64.whl (855.6 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

smsd-6.10.1-cp312-cp312-win_amd64.whl (801.5 kB view details)

Uploaded CPython 3.12Windows x86-64

smsd-6.10.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (908.2 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

smsd-6.10.1-cp312-cp312-macosx_11_0_arm64.whl (855.6 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

smsd-6.10.1-cp311-cp311-win_amd64.whl (800.9 kB view details)

Uploaded CPython 3.11Windows x86-64

smsd-6.10.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (905.3 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

smsd-6.10.1-cp311-cp311-macosx_11_0_arm64.whl (854.6 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

smsd-6.10.1-cp310-cp310-win_amd64.whl (799.8 kB view details)

Uploaded CPython 3.10Windows x86-64

smsd-6.10.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (905.0 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

smsd-6.10.1-cp310-cp310-macosx_11_0_arm64.whl (853.7 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

File details

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

File metadata

  • Download URL: smsd-6.10.1.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.1.tar.gz
Algorithm Hash digest
SHA256 314542753278b39e87c73411f3e5292ac5531d65e8a6fede44824971578313f7
MD5 dc0440c513f181d6025d8c75892b88ed
BLAKE2b-256 4e4426502497126dbf43d30958f6f3ca996006dff157be11b4dc08a78813f4d3

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: smsd-6.10.1-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 801.7 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.1-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 9584e1232912e8707b0614ac605ebfbdb15d59ded49ad13081d0da7c5ccf7894
MD5 3b98901bd101487862c8b83a6bbe4ce9
BLAKE2b-256 04a8a7cb8f66bf50653da508ec5903f037854c5bd0fabac6dc15f660d173f899

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.10.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 55e349437a7f74c9e15c895a88ebd4ffd4aa41ac393e0df93b28b93c16d832ad
MD5 907d4d5c8ce14f2b7977895a48df33ef
BLAKE2b-256 c44b04495b1df1cf1d227da6ead1071b9e54e0f478e55a7d590adeb2d72fb3bd

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.10.1-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 4b4974d435f1842e02c652e88e001fd0b72f5d66038e838c08ed2f7cc235493f
MD5 34a1e833bca7e8cc81b372ad72904eb5
BLAKE2b-256 dc2d9c341956e32639b69038773a2c9fda8187e4ec1270bbbddd79669a91748c

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: smsd-6.10.1-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 801.5 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.1-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 c547ff650407513948ac6f00671b81dbc5728ab96ef5f954dbd25493409591b0
MD5 81a5cef56230f7d85c0f1de09602108b
BLAKE2b-256 724d2b5e168d4e0aefc5aafe1774581b758e41f2f70a3102eff88a6fb9554683

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.10.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 3a000157df1231eb66872b5f2797c55a4d00845f6fb1b79a16253a47d158cdab
MD5 10ab7b2f678526d89431f74259875c08
BLAKE2b-256 90b0b36946465e556de09f025eb9a576e0ff7a95ce732a88f42210af292c61b6

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.10.1-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 92d0ff7c9d8018c67a6b3c64d25a554d9392a63ab7a40d62d262db6ce263d27f
MD5 39e0484426cad71f5dbda0f7466d3b69
BLAKE2b-256 cb56e4dd1b312ae846c104ce6da4d3b39a19f3d45efd2b8255a0ee46e7c65606

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: smsd-6.10.1-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 800.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.1-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 645d0620169fabf6c76cd12bfa64ce13b943945f8ba64021469012b83037ab4e
MD5 610c978fece91ee2f40c256c937e99b1
BLAKE2b-256 81d4f720b11b2b0b824b44f185e0c7ca67ac5f9069218ce05cad6bbbda964d91

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.10.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 63e46f7cae744b86081326cfd557db5a166c118a971a98cf8310cbc065d17371
MD5 72b2ac08025de06bb6aafbdb87d1d636
BLAKE2b-256 db149cd2b3183266f0dbae6350f9c3df720836e294f648ee79a42a3c74259c5a

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.10.1-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 ceec10c537ed7e1ff4c07480dd90a3d2460d7fc2c5f6b26d0d56d411771ac1bd
MD5 8195dcda45e1d21fc694f0880ad442c4
BLAKE2b-256 7a7275b13386ccdf8d7e3fed1e7ced881cb32bd1282684ed62d0168cce979207

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: smsd-6.10.1-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 799.8 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.1-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 7b0966f9d1ef6346bf59c86b680714b5a26e01e79856b103cbce5e5a3b17cd77
MD5 83131d036481b44430648cf825504a50
BLAKE2b-256 a76aeaf09a0d7592f754916733fb3f6e304a90f985712171b9d72280dc2ba184

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.10.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 71ae8641b1bf85240fe872275ff2d1915c176dd3df8ddbc3a10a7e3d40731623
MD5 10b08be50f3e4ef26bf544c50197037c
BLAKE2b-256 f1bb3346f2bd95bc21dd992016c6cb3a1d21c79ae4ab32ba5d5815d2cd44fb54

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.10.1-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 520d201db328757a8e1435b72b384e89fe04095c90e0cd898d4af5974d294876
MD5 ad2f56915f31d9cdceb83ca1672e47b9
BLAKE2b-256 31e20707ae01e3b0f8449a11aa51248534eca379b0c090b02a4408abcea0c85b

See more details on using hashes here.

Provenance

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