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.3.3 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.3.3.tar.gz (595.5 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.3.3-cp313-cp313-win_amd64.whl (600.2 kB view details)

Uploaded CPython 3.13Windows x86-64

smsd-6.3.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (681.5 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

smsd-6.3.3-cp313-cp313-macosx_11_0_arm64.whl (626.4 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

smsd-6.3.3-cp312-cp312-win_amd64.whl (600.2 kB view details)

Uploaded CPython 3.12Windows x86-64

smsd-6.3.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (681.6 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

smsd-6.3.3-cp312-cp312-macosx_11_0_arm64.whl (626.4 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

smsd-6.3.3-cp311-cp311-win_amd64.whl (599.0 kB view details)

Uploaded CPython 3.11Windows x86-64

smsd-6.3.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (680.0 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

smsd-6.3.3-cp311-cp311-macosx_11_0_arm64.whl (626.2 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

smsd-6.3.3-cp310-cp310-win_amd64.whl (598.3 kB view details)

Uploaded CPython 3.10Windows x86-64

smsd-6.3.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (678.8 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

smsd-6.3.3-cp310-cp310-macosx_11_0_arm64.whl (625.0 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

File details

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

File metadata

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

File hashes

Hashes for smsd-6.3.3.tar.gz
Algorithm Hash digest
SHA256 45be6b7cb49ebc9d24cf3515408e3a63b8a5f45e4fc8f478d0461655f6f682d9
MD5 2bf574b955a7f9af3084ece58b7740a2
BLAKE2b-256 ae975294342804f834008a3391b1d79272d9d44cc5f60e67f0481976f1774fb5

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: smsd-6.3.3-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 600.2 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.3.3-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 5a38831e98aaf395e77651c70bdddab87db4031a9a4cfd99b02cbbf00daa5aab
MD5 a39f6510caccda9c751ffb9c18ec5ad9
BLAKE2b-256 6fd7e1ab8f7806903c841f9f7f4f6dd269f849d6f28ff8ca1d6347bea128ee13

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.3.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 777131c390e6ec36ae6bdc867780c5a2b09db37b9cabb62ff71bd29c9e33d503
MD5 f320fd4c3f2f442d06ee09e6f2c80759
BLAKE2b-256 dbdf38828534771d7cdaca5f8bcdf5099f570c426687358fa25b78981fc73492

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.3.3-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 a11d2ad4f2d798197de66eb402a80f49704a4ade26209c06abe31f7f763e28c9
MD5 04d94729d68a3ddfbab3847f48d046af
BLAKE2b-256 c2d3868e6c5cd495af95afccb0a7fb6b6626fcebbc07426a46abce50f9a7343b

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: smsd-6.3.3-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 600.2 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.3.3-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 a3e8cdc6872424a35b5b5179e1c416c00458e7e9fdac89eda50d7f55da2a1bbd
MD5 9539283a39f032a382ab0efe97b15e6d
BLAKE2b-256 6397c0f1093c596dbf8caf19cd934e32039cd4028ecb365765afc3672dcc38b3

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.3.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 8b15069285c9ff58f48585afd8130e21904bce7781c0bed705f77319cfde0086
MD5 b137b702c201a879723a865113d8cf0a
BLAKE2b-256 5f3ce034730c8a2aad135904dfff5f99ea472631d50edfc8d415d57f1c5a3896

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.3.3-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 c47a7974f4dce105b030237806b256722f9b8f13afc0171b14cb528405352529
MD5 4fa6dc7a82cdc969d0482a3f65d4c78d
BLAKE2b-256 18181dbe490009e21a5c71073f3ec814fa75c65849e256a7598bd60e76c6dfea

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: smsd-6.3.3-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 599.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.3.3-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 cb0cdde337c350e80491e3ad36e9af27626dc9d192e26f552bf5c20023db1838
MD5 9b1eadd00f2d4f983a0466ef0754b650
BLAKE2b-256 cedda737578d92c02646e47e3a4b02d87ccd40896b8517ae2ee8e2fed0023f8d

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.3.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 c0162f8f6f9c4dddb8451b64bcbc60fe00d8d601843f757538faaef33a5965f6
MD5 3c433e0e2576ae04b36d79d6be7b0880
BLAKE2b-256 4f6ca56bed9591180de0c625472fa9ec426def338bbbb771027dd9f162aa6793

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.3.3-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 ac068d621098cb5a3500b3f825ed81340ebb211260d67cf5530d0583350d2faf
MD5 b4a97739ff1d6d596d0fd4138cc56b3a
BLAKE2b-256 a9237cbf2d1b09617df416ba3662fe4720d1bb9bc736974057d708338ddba106

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: smsd-6.3.3-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 598.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.3.3-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 cd94cdd8d9ba057ac5acbe64f3ff5aa4a3534012c4e342f8c9afed978d5cc5ce
MD5 bc4d2bed475a5c77bb9e89cb94b22141
BLAKE2b-256 3b1e9bfa0ca4ff0a3dfdc30a903c9af8a04c44d92b31d99cf3163b8d8e7d2c9a

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.3.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 58c1fe9e6c2adf14c89a3bcdf75846596d9e93a9a5e5430b5a49888f63a65d7a
MD5 b845e85a969c163b146863e457528dc3
BLAKE2b-256 187157a6086c205bd76243735fc42373d6154059a8c84469396876fc7a4e17e4

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.3.3-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 56210d1734aafd3a28c4ba426bebfe01bd0e0f1ac1c645b21427bc3aefec0bfe
MD5 c69c38ce855bc6829a26cdf114843820
BLAKE2b-256 b0a09d6e37f9923d3af092c397d3cc4cca84f113f787fed35f234fedacd9070c

See more details on using hashes here.

Provenance

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