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

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.2.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.2.1.tar.gz (576.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.2.1-cp313-cp313-win_amd64.whl (562.1 kB view details)

Uploaded CPython 3.13Windows x86-64

smsd-6.2.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (639.9 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

smsd-6.2.1-cp313-cp313-macosx_11_0_arm64.whl (583.5 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

smsd-6.2.1-cp312-cp312-win_amd64.whl (562.1 kB view details)

Uploaded CPython 3.12Windows x86-64

smsd-6.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (639.9 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

smsd-6.2.1-cp312-cp312-macosx_11_0_arm64.whl (583.4 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

smsd-6.2.1-cp311-cp311-win_amd64.whl (561.3 kB view details)

Uploaded CPython 3.11Windows x86-64

smsd-6.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (637.6 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

smsd-6.2.1-cp311-cp311-macosx_11_0_arm64.whl (583.1 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

smsd-6.2.1-cp310-cp310-win_amd64.whl (560.4 kB view details)

Uploaded CPython 3.10Windows x86-64

smsd-6.2.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (636.4 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

smsd-6.2.1-cp310-cp310-macosx_11_0_arm64.whl (582.0 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

File details

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

File metadata

  • Download URL: smsd-6.2.1.tar.gz
  • Upload date:
  • Size: 576.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.2.1.tar.gz
Algorithm Hash digest
SHA256 16a153902a8ad964e66c92815616689d7ed6e8a59eca19b22a5d038f6b8e5531
MD5 d8a758fcd1a2fad2e6f0c2af38d5305b
BLAKE2b-256 c367fbc6c5ff2cf8d8943896dab06e551ed27cd5ce9f00dfaab9ecb87e1fd3b1

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: smsd-6.2.1-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 562.1 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.2.1-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 6cda067916adad540fe9a1024f37c045a6384ea5f34c6cfebdf32a8a660aefcf
MD5 c26e547759b3e0c6cc68ec8816dbce0a
BLAKE2b-256 7bcee961edce9235fd9a0eae04a4d2b8eae6c1064751f490ac78030305ee2913

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.2.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 883d139d47a51d7da9ad12c3e5b6004e17607126828a9881696796ce6e553179
MD5 0c1559469e1be362cce61df429b21326
BLAKE2b-256 ac7217f38afe234e6cecb54709ec9ec8f54b8ec54eac35c56143e9ef8802ab65

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.2.1-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 e253f35fdc9f5f9f9d6501c7a4ecf252d7be20a8095961b28d0542f782c86e70
MD5 47400754544eb62a417cd8902c7bb1ea
BLAKE2b-256 77bcc6f610b5cdc6bace679c23718c469a510f10eb80d0b0edbff0bcb8fc88c8

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: smsd-6.2.1-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 562.1 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.2.1-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 cd6ed79a08811f7fa71f28e9eab363b9f20bcc0a41185b9a29dc71315803d14e
MD5 c26c9642b3367662f098a23ba916c43c
BLAKE2b-256 fe4e164c351a3fc5da7346c250ec10c355442582326864ed80cd0672c9ccd042

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 d8d0f8b972efeefba7e4c3dbd2ecfaac51cb2c69f89ea50a9bace03038c08a18
MD5 4bcd054b0ee977eb33ffb73e491ea130
BLAKE2b-256 65da345965ce6c92ea6704bddd944e4c5ba9fe202e760b3687709c89b99ee46a

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.2.1-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 70c336042d4e2eba632867702d3fb6abafbcf2a9552c22198ef45ef14805875d
MD5 bac8ec983bf96ec698baf5da1c2eab6c
BLAKE2b-256 f3db02c52ad4d8b7a7e91820bf7eddd7333705bfa78c0df41b5093124319947e

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: smsd-6.2.1-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 561.3 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.2.1-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 15fa2d7567e566a0ea63fba98a683eb341ffe93160478fd2786581742af37256
MD5 81e6c5be6f1c9b64c295bb8f1f36324b
BLAKE2b-256 d958b5255ceebc7823d9a0adadf4497631190db399f63ab7420d02818b511401

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 f68c92dc830971876715f1c627542e8348b4177df01c4db13c807e42b28835fa
MD5 720f5016053caabc8142e70dead029a1
BLAKE2b-256 e6881ad5c5f69464960d48c8e95b720d5c56e275fb481cf8a74dca4cd90293da

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.2.1-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 2e25b55bfa1610ebdd156e8c65bf6c8bf2d310fe78c0d7e2c3113e41fac75139
MD5 f7c76a391193de6a141f70009d2a4175
BLAKE2b-256 604fa6738160aeaba9352144b864c7df19e13d791ef0ef528937bd81745927e5

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: smsd-6.2.1-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 560.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.2.1-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 22fee974541c5969a51c3521a448f3d8eae2c950e860e3f44cf373f8d1f0bc1b
MD5 ea4316e3e46021124119e84f75e46d3a
BLAKE2b-256 952326cd5406b84ab065e492b87a6cceae7e427da98cc2d87270b932948da112

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.2.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 a60ebd2aa24d3b2e63d55edead20b4b083ef6c0fb356bc8a8033545441de514a
MD5 b476977ebd9433bbfef15882f12d14df
BLAKE2b-256 f90b9d2bea7b80e864e3793f944da938fd2501c837c813899576595c6fb8d4b7

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.2.1-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 91543f5078bb1db39bcce86e598ff09df597acb55ee39c1191f2859e313e8fdd
MD5 44f35ae3cdcbe546b75392f17f655f96
BLAKE2b-256 5d56c07eb273c77f8e3c4bcd92d2518cd88c1807ff5da0e8912db30716e8c478

See more details on using hashes here.

Provenance

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