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.1 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.1.tar.gz (586.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-6.3.1-cp313-cp313-win_amd64.whl (571.8 kB view details)

Uploaded CPython 3.13Windows x86-64

smsd-6.3.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (652.0 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

smsd-6.3.1-cp313-cp313-macosx_11_0_arm64.whl (593.5 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

smsd-6.3.1-cp312-cp312-win_amd64.whl (571.9 kB view details)

Uploaded CPython 3.12Windows x86-64

smsd-6.3.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (651.8 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

smsd-6.3.1-cp312-cp312-macosx_11_0_arm64.whl (593.4 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

smsd-6.3.1-cp311-cp311-win_amd64.whl (570.6 kB view details)

Uploaded CPython 3.11Windows x86-64

smsd-6.3.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (648.6 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

smsd-6.3.1-cp311-cp311-macosx_11_0_arm64.whl (593.1 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

smsd-6.3.1-cp310-cp310-win_amd64.whl (569.6 kB view details)

Uploaded CPython 3.10Windows x86-64

smsd-6.3.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (647.3 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

smsd-6.3.1-cp310-cp310-macosx_11_0_arm64.whl (591.5 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

File details

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

File metadata

  • Download URL: smsd-6.3.1.tar.gz
  • Upload date:
  • Size: 586.3 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.1.tar.gz
Algorithm Hash digest
SHA256 2780fa4fc7ec42916020d4b461b25ddacb4d8ba3b50be7b7df3404f2e9e3326c
MD5 75b8d06d4273ec4d61cc9e226f3bba5d
BLAKE2b-256 9eea7e62a748822eb5960276fce9373c329079d6c219ac7e609d6309f6f58117

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: smsd-6.3.1-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 571.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.3.1-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 657a50c75babb3af10af686e34f18487dfd3b6926e0dbe124e6c70bcdd328f65
MD5 f4a5d1b964ec6b0f650613cd44c119c7
BLAKE2b-256 bb3f34cb8bd5b827bb1af51e7644015f0aff91fbbac47dac03e54afc7638ea4e

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.3.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 7a77d09fab38fa8a3b4b1fb9b7ead4b989ce263207bba7c94cf5b0744345a798
MD5 586aed2c93b146284e17fcf5d9f4eeda
BLAKE2b-256 fafc10bec8a377ec004f9f9c7ed58186e4a6a432f77c6e4fbcd101c0cb6ebadf

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.3.1-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 ef646430b9c64375a1f683ef0495d6676c79bc6cfa615415027db81d7312032d
MD5 c9c768c67ee356e779267f8ca6626c3f
BLAKE2b-256 f64496f3d7802304f30dd3ffdce5a7bd0be9b2d2261f86252e152e59d0d69d9d

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: smsd-6.3.1-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 571.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.3.1-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 30fd27fde4c937af7023781a98e14df2b7da559ddae6bf08779f3f59145bf237
MD5 bc91f6029cd8332c903569d495ab8c2d
BLAKE2b-256 e5ed854235627ec56b18215312e7a2ee6cdfe09dc3dca62a94c78629a7350fc8

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.3.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 b4996cbd0ebf23eb9791860a9387952ea00a4c7e8e80e0f138b9e70eacd2cee3
MD5 2dd91c48b56e02396b8dafb5a2cf99c5
BLAKE2b-256 9f200cf820f1699c0567bf75eaa63a6888f274a8c97643080b08f393443ba415

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.3.1-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 c92684639e20c185dfacd2509cc9a1ae1be3f04b0c5d461f2dd8aeb63c1d5957
MD5 029e538cc65fc14a52ee72d5a45c2574
BLAKE2b-256 4996c8ed5c65519239108989ab371f39b255d085382fc137db9a6d7e9a9b3fa2

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: smsd-6.3.1-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 570.6 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.1-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 154a20d783c77fdf88e46f767c7bcfab00461bfb4a003836325a0d5d8301a994
MD5 2785aa2a594a2d7045eade78cdedab42
BLAKE2b-256 2abb4a2e6bf73dd5174c8aa1dfd3af829f7d51f2d935a8249cd458563aacb289

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.3.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 1058ed8964c1e881624ebdaa9226499064e5471ece42f9e2a8cea8f20d1c1c01
MD5 243ecde2ec1a0c57e8f6f316efac27bb
BLAKE2b-256 da78863073c849f7969aceb7e612537b3c3d800cd662133f0be1041927be880b

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.3.1-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b0cb6763614cf0b1967aae4690b9b986d0522138e4e839b61328ddf2c6fd2d0e
MD5 53ba9bd2fa40006a3e61eeb5ed848419
BLAKE2b-256 0c8308b4553e6ef759474f64b2d8e2030fc771b3a6c013b5e3e2a0009d416874

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: smsd-6.3.1-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 569.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-6.3.1-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 3dfdb6d51057c6279339392f645865059a8b0a86fd32f713a411adace6422bea
MD5 a9e17960032cb712814aca7e995f7f0f
BLAKE2b-256 30db581645880da3091a4704cd6ff0c58911ec23650485e5d0f20f3d40376c38

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.3.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 13b902c4f3fe24464dc41a6a6ffd7f642c33693f879fa03df198c558fbdc0289
MD5 1a75bc16d5cf515968e57af67e9f42f4
BLAKE2b-256 54e53af0b5d0085ad96a4a440a09fbdd51526d592272c5ad17de3acf3b552632

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.3.1-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 e6dfba9284aa59e14bef9083ea20e8453460b2c68fab2a9b21c7c0f412de1782
MD5 32382ec0c8e9cb7211a124824ce9161c
BLAKE2b-256 483944b4384b9d7fb93cec058943093610af2952a707fe788de1f82586177129

See more details on using hashes here.

Provenance

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