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.7.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.7.3.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.7.3-cp313-cp313-win_amd64.whl (686.0 kB view details)

Uploaded CPython 3.13Windows x86-64

smsd-6.7.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (766.9 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

smsd-6.7.3-cp313-cp313-macosx_11_0_arm64.whl (717.0 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

smsd-6.7.3-cp312-cp312-win_amd64.whl (686.0 kB view details)

Uploaded CPython 3.12Windows x86-64

smsd-6.7.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (766.9 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

smsd-6.7.3-cp312-cp312-macosx_11_0_arm64.whl (716.9 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

smsd-6.7.3-cp311-cp311-win_amd64.whl (684.5 kB view details)

Uploaded CPython 3.11Windows x86-64

smsd-6.7.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (766.0 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

smsd-6.7.3-cp311-cp311-macosx_11_0_arm64.whl (716.7 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

smsd-6.7.3-cp310-cp310-win_amd64.whl (683.5 kB view details)

Uploaded CPython 3.10Windows x86-64

smsd-6.7.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (764.9 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

smsd-6.7.3-cp310-cp310-macosx_11_0_arm64.whl (715.6 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

File details

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

File metadata

  • Download URL: smsd-6.7.3.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.7.3.tar.gz
Algorithm Hash digest
SHA256 1ed12d01c33f492204eb4bb078e163f57e194df2f845b8d309d102da1cd70432
MD5 336d9629c0a131e533faff62f3dd2b79
BLAKE2b-256 7da4986d731ac8b319ec57593b8500a5b8a73c92b7bbaaab611815e744c7e478

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: smsd-6.7.3-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 686.0 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.7.3-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 62638c9e6fc53405b84cf789b22a523702083e7c2ed40d2478aa17cdf1dda966
MD5 f996aac602d612b9645ce0eb55c0b977
BLAKE2b-256 3ef1dc97389d6347f71ad2676611e3f92670fd38a8f079a7bbcda7c694fbed9e

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.7.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 9413f7b03d853925a9e9ec860cc11ce807a7f78111047dd2651dad534ce93157
MD5 4b85231de7d1467f841bcf846f97dc19
BLAKE2b-256 e4fc9b189fca0aaa8cb9fbf8cde3f1ccb87139a6ae3755c52e498b6719f57d80

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.7.3-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 132604fccfe2e9f453c1b8a7c7235caefe41678ca3b4261b192a329b58859c5f
MD5 617c7e24ed920223e98dfcab8876e256
BLAKE2b-256 7fdc52329d6b20e551ba63a63853df5ecef7aa8e0c3801ff39239c4977234d22

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: smsd-6.7.3-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 686.0 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.7.3-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 7305f75e46091315b3137cd8738a7adf83eae9295f4ec1a2e8a0d55402ef81b8
MD5 0220d8d8440a8288d3a9b93f802633c3
BLAKE2b-256 ed2dfa3b6513c9ab55ea96e12593ee073b8478eb4a72c38b9a4b0e57f79a5593

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.7.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 6cc5177b41aca7a83c0151127ccec03e3ca34ac1d2ca5dbc16bb22b218da6645
MD5 2d2477e0bc48c632bfeec1c624b82be5
BLAKE2b-256 3e9c71354c3aaf1615d41f318ddce324cc5298c4e4eb794771a3dec576833a5f

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.7.3-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f2d1678536bffd390a4c9ddc12e0d8da2e4966155e893f4d6f5d65e0fd5c1d77
MD5 ca03f09b6faaf2dbca26f0d552d46c58
BLAKE2b-256 9028078ee59aff14d3c2c0de352a7b1eb1ff15f3bcdbb6a6479b4588c11aab71

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: smsd-6.7.3-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 684.5 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.7.3-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 5cf8fbb448228a189079eda0d0daf95088be1ddf8e9ea90b25657f74a40cf4e5
MD5 77531293a5a1b6b9703fbf70fe477fb9
BLAKE2b-256 0bfc0a57660a85930eab81a62a59a64d73f98b694a8103374b26defb97662573

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.7.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 419ce689fd1dde4e675410ae9f5af95b7bcf34eacf41d7dab7c187ed33edce06
MD5 b842da4e8bd86985cd3014e2bc16a523
BLAKE2b-256 efe9624c9f72f5302864644ffcf39c7bb22b907ea90a54374a89b161af124113

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.7.3-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 c33497e0e8413ecd2808273560de257ba25e69c7b2c82cc3e5a7c6f05723ab5f
MD5 c296054a4c0f95e83fce915338280c61
BLAKE2b-256 5af017fa400911166cbd2fb442547ab8e0b23ce063c6e8ab622bac92defe153e

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: smsd-6.7.3-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 683.5 kB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for smsd-6.7.3-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 2e061becfeda10b346f9706b9286c60d372e4f9a145d75fa1dcd6037392e615a
MD5 39f56bb9245fa20eb57840f45c8ecfef
BLAKE2b-256 a07721d3b3c0e8662288e1ec6cd2688bed226c2ccc74266ccde9903b4e18faf0

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.7.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 eb2d9263147c7081ab0c3b46ee0ccb704c0b8e0a27ac878ad5fabaee97a34467
MD5 c1d6da658d9540af77566d4d637eeed6
BLAKE2b-256 bf18c2e2a3b78bd5d328a2ca4619d40aea9e62e31a0476b9ea11f2a12623fe21

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.7.3-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 fb2ff7adf883574151ddf1b13acab5d64840fe4092a4afba52b8597dc6cd6107
MD5 75f16e4f206695a8b641aed93e9db78b
BLAKE2b-256 4831f9cd6c9960c70a38556e994dec766e65aab065f95599d043a17df1e3a7ba

See more details on using hashes here.

Provenance

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