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.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.7.0.tar.gz (656.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.7.0-cp313-cp313-win_amd64.whl (658.8 kB view details)

Uploaded CPython 3.13Windows x86-64

smsd-6.7.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (741.3 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

smsd-6.7.0-cp313-cp313-macosx_11_0_arm64.whl (688.5 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

smsd-6.7.0-cp312-cp312-win_amd64.whl (658.8 kB view details)

Uploaded CPython 3.12Windows x86-64

smsd-6.7.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (741.3 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

smsd-6.7.0-cp312-cp312-macosx_11_0_arm64.whl (688.4 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

smsd-6.7.0-cp311-cp311-win_amd64.whl (657.0 kB view details)

Uploaded CPython 3.11Windows x86-64

smsd-6.7.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (738.5 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

smsd-6.7.0-cp311-cp311-macosx_11_0_arm64.whl (688.3 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

smsd-6.7.0-cp310-cp310-win_amd64.whl (656.3 kB view details)

Uploaded CPython 3.10Windows x86-64

smsd-6.7.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (737.2 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

smsd-6.7.0-cp310-cp310-macosx_11_0_arm64.whl (687.0 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

File details

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

File metadata

  • Download URL: smsd-6.7.0.tar.gz
  • Upload date:
  • Size: 656.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.7.0.tar.gz
Algorithm Hash digest
SHA256 b5906a2b86444d481d9abc60cb24b39c97607ac832107cd8ed09a321cdf9b296
MD5 0306a978970b0d7e4fe8e9e4f574c3d6
BLAKE2b-256 4cd96800f6fe7c570f6d1bea8cab251f3d04332f56c380c626fa92a2454bcfa5

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: smsd-6.7.0-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 658.8 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.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 adb57121ccc240d402ad9d9a1f70ef9f10a7a6a618ba0736458463a93f4f5d50
MD5 49637fa3b418879a511b799c61adf2b9
BLAKE2b-256 4798a412b497b83d2d9c6143a88c392685fd1fb7a0e08cab63c2e47ae0ca33ef

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.7.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 eabc4cdcf8b3e6b99689e1ba628ca4dba04e2dcd794ab97ef3bfc951fc89949a
MD5 d5dcd27af323df269246002eae38bdb3
BLAKE2b-256 9f060b5124744d123cf1e1e2b92fb95accda0e81f504c6554b4dc3ecaf44b790

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.7.0-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 77aafa8844ff29c0aec77aec947c5bc4bf41a2c9f8ab9f94e4c1bdd4128f9980
MD5 4cee0868a9af21f452b8161d80a0260e
BLAKE2b-256 6cd7aac3024a7ff46970b34c638b30d23a2901635669c420379ada4005a5732d

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: smsd-6.7.0-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 658.8 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.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 4d660d14376314deaf7e58bc757e6d894d4368a1be79e5bf1936d55846ab354f
MD5 f9a2205a689f0644c6bb96eab15cbdea
BLAKE2b-256 c470ffffd3b67cd14c380f3f19ec44572fca1d6a320e84ade0c1a3273c7ca2fd

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.7.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 77f93ba282787cb800595f293de3c61376b08c5c1235948b3986ff9644cdac20
MD5 a2eddee5a67604e2391ccd974f602684
BLAKE2b-256 e619e60e47a974cc50a67d427aae8d03db3c3ae4a20c80d709bc85f260f003e2

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.7.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 e8febd51d01412563d962f204cdfd800646db17448a1ddcdb04cadf8136b16b3
MD5 4c8caac70a654058b4b078e305fdb01b
BLAKE2b-256 4a6f049be1319cc616e2692a9926fe6622adcee22d2e210216b539f435b6af9f

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: smsd-6.7.0-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 657.0 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.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 45c5b691fc5b6fbdd6821bb367e4c6e0f6d605cfc7172415a7049649bb2f4aaf
MD5 33bf304b085ea4e3940fcb0576e5d7d7
BLAKE2b-256 b81c13ef3230561987cf32cbf90c3f21916ddf78f2b148084d22e1752208739f

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.7.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 90c267c1f58ecaa2b1325b71fa65cc022e2b699e07837fddcd68256683c9448d
MD5 e25b885c6af5dfb8cbab32a38d9067c9
BLAKE2b-256 b9dda4b024d7e721ea0d03c55ad4deb9c1dac47cd7a649621d1abd0df320b749

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.7.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f83f8bde9bbd70f73cee980708f5a78ab6e14ac1dadefc6b8d59fc726d8fad50
MD5 4738043f978d2167bbacc2811dfac10a
BLAKE2b-256 4cea6820eef7353d39d25d72e0262517c481b844eefa777edb0a8712f5160a91

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: smsd-6.7.0-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 656.3 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.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 b65c8d4476f75ea4d2f6220a4a32fe9fd78355d4973b1ff3b3e28b140d3dac46
MD5 4d8b851c4a42a6eb336c1e347fc7a1ce
BLAKE2b-256 f10b77a91433bbfce1f693f6c3dbec24388e48b5af46004f4d62f39cbd7636c9

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.7.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 1684588018c61644c336e98c3d2289510f21b879f6138b6eeee676707ab7a79d
MD5 b3bad76bfa18adfa675f49a58a977cf8
BLAKE2b-256 10e2c580ed3afaa725f3f3228a26ac6c3d290be696f36b1233f4c2d0c448ef42

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.7.0-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 2792d8c2aa551dbefab7ed79bb3a6bef04ee767ebc26da9321595e4f3c5c349a
MD5 d5ddeda5b3f1585cf0ffc16285949ceb
BLAKE2b-256 34223048195b43d9822ca79f5c840571769c83822eedf67a64f2eca3db728768

See more details on using hashes here.

Provenance

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