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.6.3 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.6.3.tar.gz (655.0 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.6.3-cp313-cp313-win_amd64.whl (658.2 kB view details)

Uploaded CPython 3.13Windows x86-64

smsd-6.6.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (741.2 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

smsd-6.6.3-cp313-cp313-macosx_11_0_arm64.whl (687.9 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

smsd-6.6.3-cp312-cp312-win_amd64.whl (658.2 kB view details)

Uploaded CPython 3.12Windows x86-64

smsd-6.6.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (741.0 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

smsd-6.6.3-cp312-cp312-macosx_11_0_arm64.whl (687.9 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

smsd-6.6.3-cp311-cp311-win_amd64.whl (656.4 kB view details)

Uploaded CPython 3.11Windows x86-64

smsd-6.6.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (738.0 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

smsd-6.6.3-cp311-cp311-macosx_11_0_arm64.whl (687.7 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

smsd-6.6.3-cp310-cp310-win_amd64.whl (655.7 kB view details)

Uploaded CPython 3.10Windows x86-64

smsd-6.6.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (736.9 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

smsd-6.6.3-cp310-cp310-macosx_11_0_arm64.whl (686.4 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

File details

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

File metadata

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

File hashes

Hashes for smsd-6.6.3.tar.gz
Algorithm Hash digest
SHA256 786c0624b6cf209b754ebb396b39f95193055eee335e4e203760327615892878
MD5 cc2edf9510f447a05537e527358bffc2
BLAKE2b-256 cd1d6d5e6fc4ff8a7515dd02abae956b09deb347f298b1607932511b729edcb6

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: smsd-6.6.3-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 658.2 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.6.3-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 5bc263f901a4b99c1bb5295904df2671875dd675a221b7d153f731195e7baaa6
MD5 d88bb4739051063532e1fdab046c4203
BLAKE2b-256 45f77a194388ea1c6cf1539207d475a19d001694e4d1ed4ab80f5d1efc85bad8

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.6.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 5b6c07fb4d7144a4f06b55c55ca5000db98c81ec3785c4e5c3301015a662b036
MD5 ce53b8f4e1a0fd92efecaa791cc70f18
BLAKE2b-256 d20da51a5e3999bb28e8659d00dd532feb46b1189eb7cc2205d70d5a848cfa5a

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.6.3-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 84c69706d39c5ed5d7d6ed51680110e45c05ceb88ba6b84595d8e68472e56631
MD5 5822cf93da2a0fc78f58e69fce346b6d
BLAKE2b-256 8891c6210e12655716c0b6f19c27e5ea38de02b166faced03b4baab82a7e9d8b

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: smsd-6.6.3-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 658.2 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.6.3-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 ee6113450eee79c412c0986c359ba9648fd78c7f79992fa4cae14fe4f0586ae5
MD5 ecfe455919cf72c1b005eed682ebc026
BLAKE2b-256 528eee746ce120cd13149580e01840a49e922bb4cfd8b3c01274b4ff0191adb9

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.6.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 155dc0474fde8a72236d1092619839fdf7cada0572fd1e3b774bc7dbeae4bb43
MD5 0769368f829ff22d685416ffc18ed04f
BLAKE2b-256 d93bb2b965d0cb41efa13c747712da4fe4d5beb60ed956c45f18613ad537e87d

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.6.3-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 2b0dcfa4a7b14ec271a49cbfd0ffb30c90955f364f334d12fcfdd2aaaf04d31f
MD5 007efd48f5eb352f12b6f7ed2ae1e5f3
BLAKE2b-256 4f1df50c3a07359857560adb2107f5d8066cab1c5b02bd1941127b4fba7edc76

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: smsd-6.6.3-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 656.4 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.6.3-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 4f18ad67058449d676a81136fd23428f6c34e939502c14d551b08a499bcbe3ea
MD5 31f3dd3a527b9dfaa2a0d73f2b8e342b
BLAKE2b-256 c5ce76cb3f3858ba77b3cf2121c32f0310c7c2fefbd7b8513b39655f9df077df

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.6.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 076af32dd38ef6d773dcc8271dc82d8f16088448c80309fb28569ca075a435bc
MD5 1d29d9b39830093bfe2f65d1fcf8dffb
BLAKE2b-256 eb2aec45bbdb379b5188920d01fab8364572c7f007c4370123ffb9b59fdfb421

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.6.3-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 3ab17fdc2986f0407ffd6c56449243ea2c2e52940818bf3f8c7011f6c510464b
MD5 e1a04069a753d021dad128ecbded8896
BLAKE2b-256 36eac23f101537cc2c9f5b04750b1f1ea903a67e38897c6c73d2ccbfebaf19af

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: smsd-6.6.3-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 655.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.6.3-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 b4c77759a6b7e19c02c9207fe6610006a5bf736a4ced9261d90d081f1cbce1bf
MD5 c28ea6d3d79528d3c539dcc9c36c78d1
BLAKE2b-256 0b355456f81075eb435448f2431cf8396e56646c310d7bf70cf58620d78416ce

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.6.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 edc2494efe1f2b1b7639ac273070e81592f673b8fd938ed79281b795b030ea9e
MD5 55c3e4f46100fec1754c557ab2fe3106
BLAKE2b-256 a4e279021c06fc6bc7689f8d73d0d58f6447bae580bca434f916ad01fb3477a2

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.6.3-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 590389e820cf0881c6038ffc1ecc88011915c6b80a6ed0d9b35a165a13188b5c
MD5 0fbebbda0894763bdb9c722ec1d1bfaf
BLAKE2b-256 d22ce2cc0c711cc4b97d45afe856816ddf0641126cc703a263d44000d7d478d6

See more details on using hashes here.

Provenance

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