Skip to main content

Fast substructure search, MCS, circular fingerprints, and molecular similarity with tautomer awareness and GPU acceleration

Project description

SMSD Pro — Molecular Graph Matching for Python

PyPI 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 15 transforms with pKa-informed weights, 6 solvents, pH-sensitive
Tautomer validation validate_tautomer_consistency() — proton conservation check

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)
Path fingerprint Graph-aware DFS path enumeration, tautomer-invariant
MCS fingerprint MCS-aware, uses chemical matching rules for path compatibility
Format conversions to_hex(), to_binary_string(), from_hex() — for database storage and REST APIs
Tanimoto similarity Works across all fingerprint types
Subset check fingerprint_subset() — fast substructure pre-screening

Infrastructure

Feature Description
Similarity screening RASCAL O(V+E) upper bound for fast pre-filtering
RDKit interop from_rdkit(), to_rdkit(), depict_mcs(), export_sdf()
Lenient parser Best-effort recovery from malformed SMILES
Batch operations OpenMP-parallel batch_substructure(), batch_mcs()
GPU acceleration CUDA + Apple Metal for domain init and RASCAL screening

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)

# Batch (OpenMP parallel)
results = smsd.batch_substructure(query, targets)
results = smsd.batch_mcs(query, targets)

# 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:5.9.0 on Maven Central
  • C++: Header-only, zero dependencies — GitHub
  • Web UI: Standalone with Ketcher molecule editor — Releases
  • Docker: docker run -p 7070:7070 ghcr.io/asad/smsd-web:v5.9.0

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.

License

Apache 2.0 — Copyright (c) 2018-2026 Syed Asad Rahman, BioInception PVT LTD. See NOTICE for attribution and trademark 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-5.10.0.tar.gz (467.3 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

smsd-5.10.0-cp313-cp313-win_amd64.whl (457.3 kB view details)

Uploaded CPython 3.13Windows x86-64

smsd-5.10.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (516.6 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

smsd-5.10.0-cp313-cp313-macosx_11_0_arm64.whl (467.9 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

smsd-5.10.0-cp312-cp312-win_amd64.whl (457.3 kB view details)

Uploaded CPython 3.12Windows x86-64

smsd-5.10.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (516.7 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

smsd-5.10.0-cp312-cp312-macosx_11_0_arm64.whl (467.8 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

smsd-5.10.0-cp311-cp311-win_amd64.whl (455.4 kB view details)

Uploaded CPython 3.11Windows x86-64

smsd-5.10.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (515.1 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

smsd-5.10.0-cp311-cp311-macosx_11_0_arm64.whl (467.7 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

smsd-5.10.0-cp310-cp310-win_amd64.whl (454.6 kB view details)

Uploaded CPython 3.10Windows x86-64

smsd-5.10.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (513.9 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

smsd-5.10.0-cp310-cp310-macosx_11_0_arm64.whl (466.4 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

File details

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

File metadata

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

File hashes

Hashes for smsd-5.10.0.tar.gz
Algorithm Hash digest
SHA256 8cd00d4ba2559e7ecb2c19c29f6e5aa4ae7eb8994e9f241d0eb0a53d52fb73ee
MD5 654fb4daf04de5b62d0c7456220c2f02
BLAKE2b-256 62e5284471a492e9381f27e2078a5ef44ca3055bb4837726c0c87208b263f8f6

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: smsd-5.10.0-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 457.3 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-5.10.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 f8331e9d7ca22eafaaccc7161e9f39b8e8d4e54209e7c5318516d02efce9b939
MD5 3db226c3ef80551f950f5fa2de71fab4
BLAKE2b-256 eb81affee8dcffc64122cf0f7096032fd51a276deac2f5a66513b568960da3f8

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-5.10.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 387d05b10a813647ac7e88b119b7e15eb6682c594450748afc8ceb9ac6383162
MD5 18eb9ef3770e27083ac0ce97ee42eca8
BLAKE2b-256 c41ef79925ff87baac5f60595e1098f8a1862951b0533bbc2be6a757210152cd

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-5.10.0-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 93dcdce5d1e985af65e4478086635aeb5327029455a400ac16ea184af11cb974
MD5 d1cf0bdcdfde791266888d7b5ffd184f
BLAKE2b-256 9dba99c9e460c5c57a8dc1dbbb1f0cf367ec4a175b471f39ebe2fa2929e8ba55

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: smsd-5.10.0-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 457.3 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-5.10.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 5b198dc6ea3a4d2a9bd33d1086aaf75fa852827465c609dfcd7cda2480d90222
MD5 49c4326f8f4ec758acd64d008f414737
BLAKE2b-256 9a3cf7f18e6e2ac2f1047d0d1e8f60ca6be990adb6219b0b4279cac68be06b38

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-5.10.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 9f1ee9071f3fb425ef88d3d83cb94832ed9e49223d685394d9ce39fe488be2b6
MD5 919f74268b1c71bfb901fccdbd99dbfd
BLAKE2b-256 aaa19a149de41e69fa3becb73f76daea78af8d20e72b7f1c02f21e8335bc93f0

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-5.10.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b9b66019e9bdac5bc333bafd18fd8f26e4be058131bdcb792500aaa4cbd28f77
MD5 1803a4211202d3806f9aff5a2f3a94ec
BLAKE2b-256 3f1deca6726af53ed24d9e2245087ff8765e84fd7cc5c06d78c6deb9f6b32bf0

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: smsd-5.10.0-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 455.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-5.10.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 d39a0e97336b4655d76a49dbd2c0f65a6aac695990cada3f6ae556bb4e84d6fb
MD5 1be565a55ea022f22d5d3880fb9b4157
BLAKE2b-256 30bf219052d2f303bb0bb3a83e59eb754a90e45cc0b3612a4443909a98fc7c4f

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-5.10.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 f199500c15e8b16eeb12e5429119e1ef607a9e6654e4fcfbd5e4ec512ffb02af
MD5 e77144dc6a3a0c2f25a2a46c7220e96f
BLAKE2b-256 69c2d4310cffb3f45c52d7b832b84c876f4a1b8b51ef0dece66b9a7aae2d3592

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-5.10.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 90284102273f8e28c5a1538b5f4ae483b9951d79df0be6973b7742cf38563237
MD5 8d83c733823ebd10e90e8ab115c83889
BLAKE2b-256 fa889c5259e97049b6fa4f5ab2a77ecac721be9cf5f94044cf753f767e5bc86d

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: smsd-5.10.0-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 454.6 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-5.10.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 8c140d3da4049dfa1be43d8e05086e645b2b0cf5c4751cd5017d69209f470d25
MD5 f7320205d7269f8547ba1e523217d2f3
BLAKE2b-256 4081ec3bd63bb7ab2de74b367f11daec8d07534cbac8e40766ab898f017bcb09

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-5.10.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 cdf384185e15d99694a6d7a0176d2af32fc6fe82bb0b9230b4449c6f712bbe7d
MD5 cf1b07ca48fdaa2f5634d5c901154a43
BLAKE2b-256 ad92ed8b6e66037c124f6e96445606717851e7b2ee8d6ba17ebaad73dc7caf67

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-5.10.0-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f72701322d8c249e8bca3c4ebb31d17d23f38fecb7d116be7ce9bf9f595f7fe6
MD5 4d378a9e75138d6dadea9383d6117ed4
BLAKE2b-256 d941f918459ae3898e94077ed45a12717ea5cc7415c8d01e1f123d7764039942

See more details on using hashes here.

Provenance

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