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.9.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.9.1 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.9.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.9.1-cp313-cp313-win_amd64.whl (801.6 kB view details)

Uploaded CPython 3.13Windows x86-64

smsd-6.9.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (908.1 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

smsd-6.9.1-cp313-cp313-macosx_11_0_arm64.whl (855.5 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

smsd-6.9.1-cp312-cp312-win_amd64.whl (801.4 kB view details)

Uploaded CPython 3.12Windows x86-64

smsd-6.9.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (908.1 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

smsd-6.9.1-cp312-cp312-macosx_11_0_arm64.whl (855.5 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

smsd-6.9.1-cp311-cp311-win_amd64.whl (800.7 kB view details)

Uploaded CPython 3.11Windows x86-64

smsd-6.9.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (905.2 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

smsd-6.9.1-cp311-cp311-macosx_11_0_arm64.whl (854.5 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

smsd-6.9.1-cp310-cp310-win_amd64.whl (799.7 kB view details)

Uploaded CPython 3.10Windows x86-64

smsd-6.9.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (904.9 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

smsd-6.9.1-cp310-cp310-macosx_11_0_arm64.whl (853.6 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

File details

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

File metadata

  • Download URL: smsd-6.9.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.9.1.tar.gz
Algorithm Hash digest
SHA256 14cd124e3193c5acd8d4d59f412a26ba75e929fbd8fe14fd400851657a688e8b
MD5 f7a179cc53261e343a53404966cb8051
BLAKE2b-256 617ebe6050ed114e53f7b8867ad1ba2e50fba1b0030e3a5f9aa1a982990ef9fe

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: smsd-6.9.1-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 801.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.9.1-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 fe14e613ca94b4d667edc420b937433538f5e3f1561b129e098e07f8aa8bb50d
MD5 d6e0a56f2a5ca360e36fc9e423213c6b
BLAKE2b-256 60f7eed373de3bebdd7011ed59d8dc550115348365b97ae15d9d7b55de43f96f

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.9.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 7414f0a0d2bbb9bc6172ce139370bc97e3d4f4862f8f808b5527305ad7ff3c46
MD5 f251b75017ed1acc23d960fee9931508
BLAKE2b-256 2a7fae52d5d4a7847ebdc129b2af8da5a441e1d3c43e0dfa5ca3b15819b562e2

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.9.1-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b1da145700a26b2d2958dc6a9b308e89278d6697c85e8f7511e9ac525063437d
MD5 864f0bd3a6d2207a97bf9fb948519efb
BLAKE2b-256 8ebbbf96a5d80d28ef3206785de7210503686d9fd8afa4163ee79cbd5b684305

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: smsd-6.9.1-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 801.4 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.9.1-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 48d99ca107d33f797c7d6984752c4dac477ab797e97cd96dd4399c5531dc7fc7
MD5 2ea0e21959df4c6c6fbf44f9e42cb694
BLAKE2b-256 9d0b7fbfe9e70568cceb27f1ac95acc463525a11835a73bd690bd1584ad7dd24

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.9.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 eca6dc589d4aecc0eb9e9104088787e35e7f9cdada48db823cf2dc5c85cd4938
MD5 be7fcf74aa36b29e764d322a5ab16dde
BLAKE2b-256 144c1510554f2e06f3b9e23e336f3d43ad8acdbb095f80764323d6f6da6c319e

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.9.1-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 8cb8fc846e09601eadbf699e3682645e8443df2f54b6d5fed75a537867ea71d1
MD5 97aaa313075468b60045ff803347cfed
BLAKE2b-256 8778f30d094f74574646c07b5a2f70073c1c7ad7d6038ab4dceedc427c580d39

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: smsd-6.9.1-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 800.7 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.9.1-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 417ed45ff8a440d5b3913d7de8eb4d46b42cfcf296e41a5536def06bb30d2a4e
MD5 e351e81df0ae39ff06cedd2a9f06c290
BLAKE2b-256 081c79b6682b97aa6457b2076c8bf81743e27635da67dcdaab4aba83364b87da

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.9.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 ecfdd70f8641956dffa687f352a88f5385433fb22893a2abc32ab9da98490534
MD5 222f758c6970d029342cb16a0d2742ef
BLAKE2b-256 70733baa0d16c0e2192b50f8c8648e0d10babf449e8f57031716848cf4d9afe8

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.9.1-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 9d5898d66898c17fdb0aa1ef528952f744dc1c1daf868f205e79f4a4e334b635
MD5 7ab38209b1be43f5db8c519c8b4ab8aa
BLAKE2b-256 f7b2938e41b97b8391ba16f7c39f908ae17e56f775a9826678d1d633f9f4c7da

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: smsd-6.9.1-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 799.7 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.9.1-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 c80feefe6d3a6d7870cc6f6a33e951d19f0c87f540bdf1155adc6beb701f32c6
MD5 2c69cdfc1b9285af6f778d761bde9836
BLAKE2b-256 c573a93812ec3aee7e85e154b87eb4045c093b499cfe47f1307927884e284cff

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.9.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 3261540806905d13298811a3cd8a75d9020a0875913c6f112367b86b028d44a9
MD5 1a9ebda468b0d99f34e5464f3a3359d6
BLAKE2b-256 f81e0a2e5f1ccbb50af4520951ff56d61c92e4ceafb558ddbaddbb2fea77aa4e

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.9.1-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 2e5ef9fe1b4a1fd2f0713339a63fe37cdc12f2c8363eba988eab7649ea70517d
MD5 b007eb0a5b558087b8d8dce69610cc7d
BLAKE2b-256 e77e3e0c5811f7c98d15cf23caf5ff3127ce24e49284e04cceaf5a6da7d43e20

See more details on using hashes here.

Provenance

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