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.0 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.0.tar.gz (652.7 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.0-cp313-cp313-win_amd64.whl (656.9 kB view details)

Uploaded CPython 3.13Windows x86-64

smsd-6.6.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (739.5 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

smsd-6.6.0-cp313-cp313-macosx_11_0_arm64.whl (686.1 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

smsd-6.6.0-cp312-cp312-win_amd64.whl (656.9 kB view details)

Uploaded CPython 3.12Windows x86-64

smsd-6.6.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (739.4 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

smsd-6.6.0-cp312-cp312-macosx_11_0_arm64.whl (686.1 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

smsd-6.6.0-cp311-cp311-win_amd64.whl (655.1 kB view details)

Uploaded CPython 3.11Windows x86-64

smsd-6.6.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (736.7 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

smsd-6.6.0-cp311-cp311-macosx_11_0_arm64.whl (686.0 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

smsd-6.6.0-cp310-cp310-win_amd64.whl (654.4 kB view details)

Uploaded CPython 3.10Windows x86-64

smsd-6.6.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (736.0 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

smsd-6.6.0-cp310-cp310-macosx_11_0_arm64.whl (684.8 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

File details

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

File metadata

  • Download URL: smsd-6.6.0.tar.gz
  • Upload date:
  • Size: 652.7 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.0.tar.gz
Algorithm Hash digest
SHA256 d73605245ceb3248b022534e5087c60c0adfb224619f573e5371c026223e2bfe
MD5 32256a4daf94239ecea91129c31c7488
BLAKE2b-256 c8ab6df54dbad028652e1181929004d602964a017a79a3641e183ca45b171f25

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: smsd-6.6.0-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 656.9 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.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 378981e8df59bace22aa3257d946327f890b9945a467a6f8d0160680526801ae
MD5 991f25a2943f8e2d0b538937c9794404
BLAKE2b-256 3f788df82ab1d94e4b321deae38c4884d58c47b51a1263df0ae8718bb7c9250d

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.6.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 ac8779fd19669d95b5aab9c3c08e58e8cfb3341588533dde55ad0a6e30510d31
MD5 fb34ce4e4a7888270f2b6a4d23a3c793
BLAKE2b-256 563660225e73dec24af211a292ba8d4b913c24f9de487279622465a84596d3f8

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.6.0-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 9e36383df51672f7a5cf68bd9bed5f4c84a17641a9c925e0802a5eedc7058b8f
MD5 8449c3ce0ba9d832d060d08337929155
BLAKE2b-256 5458615307f09fc045251953bfc13a6c8d7e02d2fc30c3d86b5414dddf0337b3

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: smsd-6.6.0-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 656.9 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.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 42833e5c2ef7676fc744fd8b65c7d3654f30dc88c21da61df1f672f6ba182423
MD5 4c3c0775814a6c47f610ed8238aa0e1c
BLAKE2b-256 4e370cb1ce505b5c1ebb3608ccbe0ea22172a0cd04e2c94b9fcde8435335da56

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.6.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 efb211a51d2136d438c8cf7db984db6553bacdbc969f2603a9ba554c802c62a1
MD5 74a91a94a56d8e719f451739ae79dae8
BLAKE2b-256 915e431242f748a12519fcc3d97df97f4dc49822d06b3c8232f3d9c76674e399

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.6.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 08b48bb163236f4958df26fc8b47083891cea51b606089511324a0a80a8d17aa
MD5 c2025e6bfcd65d2f1d7f274f6741285b
BLAKE2b-256 c672b3f3453637bcfab469c3c25ff675f13f3812e6ffb03e25cd2956e6ecbfe8

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: smsd-6.6.0-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 655.1 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.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 51a87fc8797a93605137a76b824047d38342d5d65db1d7c7c10aa131c7820ef5
MD5 3a3115690f60422328e809c903913e58
BLAKE2b-256 9c5466ee7d7a768679033aa26cd0d4ab5fff6a7ea59c654f3bc09b9e00ed05ba

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.6.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 ca59b7bc3f5778e451cbe28a7356d2b514e5b616fe0e09a656c937c76822a8be
MD5 a2f666d31a1db5e8771b525c5537fd38
BLAKE2b-256 50bd741c5f7585de910ff1c8561ef0b140d5983a2a3623838989111841e724d6

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.6.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 037b21d123ed445aafd7ad96bcfbc9b07d2caaec29f5ed50673dc7470c5fd06d
MD5 fbe510a168fdf34092de34ad10ba5d96
BLAKE2b-256 438ac6a8852e475a349d34048fa723aa6ce76aadda8d86bfd5ad6ba53f7b1647

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: smsd-6.6.0-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 654.4 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.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 2f152a7e4960552888d1a04da7e30e0f94f499a9d2a8e2fd9b53243796c23c29
MD5 1bbdb288951944bf7dbd0722cfec286a
BLAKE2b-256 b7b0f967845e9d95ab0929871dabb844c2fd023bcb987dc8f218d5dd374ce7d7

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.6.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 74aeb7cf035e7c2324dbfad0d99fe66fa1e272fce27856e03f606a89d8c108d3
MD5 70c7b8b67c9283701b742b01be0f82aa
BLAKE2b-256 c3893edc2bdb2c370b7645f1020bb3672b3332b032ff123c9f7170e45f67ef46

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.6.0-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 86019364403293c648a043c328ca9517ef5a4063cdb01a39a7a6e3cb3f587a5f
MD5 bd7307745d03361097959f4e7fbfd346
BLAKE2b-256 7a117ce32c34aba1efeb3e1bc88810d5e6c135452c5eeaa8389ad09c78202ae4

See more details on using hashes here.

Provenance

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