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.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.6.1.tar.gz (654.2 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.1-cp313-cp313-win_amd64.whl (657.6 kB view details)

Uploaded CPython 3.13Windows x86-64

smsd-6.6.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (740.3 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

smsd-6.6.1-cp313-cp313-macosx_11_0_arm64.whl (687.4 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

smsd-6.6.1-cp312-cp312-win_amd64.whl (657.6 kB view details)

Uploaded CPython 3.12Windows x86-64

smsd-6.6.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (740.3 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

smsd-6.6.1-cp312-cp312-macosx_11_0_arm64.whl (687.3 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

smsd-6.6.1-cp311-cp311-win_amd64.whl (655.7 kB view details)

Uploaded CPython 3.11Windows x86-64

smsd-6.6.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (737.4 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

smsd-6.6.1-cp311-cp311-macosx_11_0_arm64.whl (687.0 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

smsd-6.6.1-cp310-cp310-win_amd64.whl (655.0 kB view details)

Uploaded CPython 3.10Windows x86-64

smsd-6.6.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (736.2 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

smsd-6.6.1-cp310-cp310-macosx_11_0_arm64.whl (685.9 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

File details

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

File metadata

  • Download URL: smsd-6.6.1.tar.gz
  • Upload date:
  • Size: 654.2 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.1.tar.gz
Algorithm Hash digest
SHA256 8c036f7b07c1b97d92c7a18bcf19a5e08fd64f0c8cffdd0c2edbc50f3a2a6c21
MD5 353941d2d9da1c937134ac424eaf45d6
BLAKE2b-256 92c31be74163064acaafb44b17e85da33f7871c522790a72406c144d19a3ab9e

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: smsd-6.6.1-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 657.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.6.1-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 1b24bff26768a3edeb0f1f612a59bed8ea22cfbab3c54419f64353914c90f713
MD5 345037e8419bedbcb9992ac9f8f786f2
BLAKE2b-256 d5db97b34b2e26852a01b343e4f8851d1b483f3042642219a6e9862cb6310872

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.6.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 5227f801efa8a1d750cb24c25ffe4e582d06b2265b703f1aa44c39a69298e14c
MD5 de21b60920c0655ddcd40da5d5f6ebd4
BLAKE2b-256 01e5cbe57a0b30c09dc94bbf6bcf44878ed25e97b6401c2066b7c71c5485146f

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.6.1-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 9c8d570c2f604480a8902232524676d4c0e8e4fbb19076cb2ab865ea54e74e59
MD5 dee60264eb86a72c513cc43b2d2b9586
BLAKE2b-256 95fa6c58e4920e458bfed9a4f11bbc7221bf5e728b9233f0dc2f7fb79192509e

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: smsd-6.6.1-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 657.6 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.1-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 8135052f1b85f6c5a8fbfaf826774aa40b322ee0bf96df297bae29ee2a887928
MD5 f54d42cc8fbc299ca8b75c27f838fbf6
BLAKE2b-256 6a349f0c6b95b1bbff9eed0eed82104f08b1e9c6d314e091b885f87f32b2a799

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.6.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 793293539703b77f2dcbac0af699825e8c0db1d01e6d24e51b034ee77f3bb0dd
MD5 97273d4f9e0a8079d6371e0152c1c806
BLAKE2b-256 382c9e7958c35004882dc4a3a7787b2adf26541da71b6d5bee5b3fd5694ed7aa

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.6.1-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 7f02e3651f9b25350522357322366373a4e9cdf186d1bb39116a899c78c9b994
MD5 03b27acde4fade9998e91f7949359de2
BLAKE2b-256 58c13347615131486d8b39f5811da5bdf74acaff337bcecdffbda1aafa790fd2

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: smsd-6.6.1-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 655.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.6.1-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 16ca41c0abafbdad4c0e8c496d71e4726cc027d4cd9d6667233e5163a30fab38
MD5 72b264642ebafa8e461f7a88b4358eab
BLAKE2b-256 6becb9162b33d2bc6609bf54219fd9ade3d4cfdeef4ab32b7baf0e618c001ff2

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.6.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 52adef568fa9309c041e7f2c4a6838190752e7d6c0c65efac4796ee3a78bfa6b
MD5 62f2bdffcf5f05910fbd451564cc1424
BLAKE2b-256 68374aa2616008548657aa24d8fe380caee3ea91de8d3366af2fe57a31842477

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.6.1-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 de775a32db637b84e4e82a06a2900b42f51ba8f596947431ffb46a9fc7273bed
MD5 e97cf1ad034abf7a5f0a35b5e1e7e038
BLAKE2b-256 e74e33d07156f30e0c04b33f5a4c34d6895b80313cba8049e8bf84a4419fc368

See more details on using hashes here.

Provenance

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

File metadata

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

File hashes

Hashes for smsd-6.6.1-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 e8d3ea28f9a778a90fd3e55dc1385b7e079432c86a755e795eb5b39921da3711
MD5 4780c3d9a943bad959621105f43328ac
BLAKE2b-256 2e9da326d064f5499d8320b62eafc8777ae3d521f6d59a558ce916977c7cbb30

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.6.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 757860bc3c4b06a92c8ea2cdb2621c6f6fe61aee8786ee62dc891acff2453332
MD5 6ef3591095bf25eb18af8c47b83a40c3
BLAKE2b-256 becaf115c53cfee6199da8dbbf0b22fc9d33ff667cae56a8495356973339fcc7

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.6.1-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 c6bc527602f71dbc11f5a9d1960d5996aa2ccbca809aafedc9ce9b921e23fe70
MD5 95eb82cb280b7fc1691f79fcb08c0d33
BLAKE2b-256 0421fd392d0cff4ae86294c9a49b16ac9fa4c689c1e6fa642ec5514b53bc3db4

See more details on using hashes here.

Provenance

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