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 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)

# 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.0.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.0.0.tar.gz (513.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.0.0-cp313-cp313-win_amd64.whl (454.0 kB view details)

Uploaded CPython 3.13Windows x86-64

smsd-6.0.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (518.7 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

smsd-6.0.0-cp313-cp313-macosx_11_0_arm64.whl (467.6 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

smsd-6.0.0-cp312-cp312-win_amd64.whl (454.0 kB view details)

Uploaded CPython 3.12Windows x86-64

smsd-6.0.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (518.7 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

smsd-6.0.0-cp312-cp312-macosx_11_0_arm64.whl (467.5 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

smsd-6.0.0-cp311-cp311-win_amd64.whl (452.7 kB view details)

Uploaded CPython 3.11Windows x86-64

smsd-6.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (516.7 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

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

Uploaded CPython 3.11macOS 11.0+ ARM64

smsd-6.0.0-cp310-cp310-win_amd64.whl (452.0 kB view details)

Uploaded CPython 3.10Windows x86-64

smsd-6.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (515.6 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

smsd-6.0.0-cp310-cp310-macosx_11_0_arm64.whl (466.2 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

File details

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

File metadata

  • Download URL: smsd-6.0.0.tar.gz
  • Upload date:
  • Size: 513.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.0.0.tar.gz
Algorithm Hash digest
SHA256 40c2c4abc65f6506918fad7d3ceaf2f8f0d27b2e745fab1c766e6a8e366f2a5b
MD5 951d4e9876610d88ba5459c7ba60df65
BLAKE2b-256 141a42d98660e990f8194f200839dbfc4ff1fa24dc61282383e8f02e083e5569

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: smsd-6.0.0-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 454.0 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.0.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 363a1d32e27d529af22d85ec5f8153bf2e107ee0fd3a5818ffa6950c4cfda58a
MD5 f0f4f9a7a8cb6a9ee4d2c286c74f9934
BLAKE2b-256 d7989da2e6a57c729c112a86f99ed34f7a0cec43874d972426e22be9ce56b4e9

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.0.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 4cd7bcf116426064d1780f28371b8f9ec8e83d209c0dc134d1f6c334f0e75179
MD5 e1c296816ac21b13afc019d786d9ddba
BLAKE2b-256 67f7cfbe75b1ebc4b3ac46e5e3e2eba57a47bbff40963fd9f4e825f13d28603e

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.0.0-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 086c808c3ab30b037be9798f6c0b4bc6f29f7699eeecf0acfe827bb9332a9be8
MD5 ee5c0e0914bf7116e32fed6edcceda6b
BLAKE2b-256 9cc2281cf5b553e23c0eaf29322d8373bbddc7ca0c56e0ebfd2e16ef2ff340bb

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: smsd-6.0.0-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 454.0 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.0.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 9a91827bc2f08cab1374fe560cd9dc1440830e1c88a661b224ff4286768df3c0
MD5 f9babee45375cbf88bc651923eced7dd
BLAKE2b-256 34b6c9e4a13852bce34954eaa19a3b434ed98d4a2e139305e8ef9dc49f87b713

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.0.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 cca36d5cc39beadfdbe214aa9527d8e626fc4265095d36584f2008ceba1beed6
MD5 64933eeae4f7f56a6f3c7b0cbd253a89
BLAKE2b-256 170d0300523c366d46a9cb1005dd2a55c14a83d2a8c03de4100430d1b1aa21df

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.0.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d1e115bee147d11b1f9b0444211377c82586531f78537568ebaf779af598635f
MD5 5bd0317de2caac8e5636b797743e36b4
BLAKE2b-256 ae0a02402ebfd8360fe1a482690cd794ed1458d3629aefc08564e1ce0a2cb1cb

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: smsd-6.0.0-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 452.7 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.0.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 bea81877ae670dd7b74ac9f44b3ba898b073b82956df2b69ccc7322ff24ed03a
MD5 8137a3eac1828900829bac1f7eefea95
BLAKE2b-256 883dca279c3010c8eca53396f65311b354fa1c465503723c6599a789f3474508

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 2572df9492c1ca0f525cfa276e53049fc876ba6942d11bdc2b79b97b5bb5c3e4
MD5 0cdffb5e2f155cd39e07b6ec43c9c121
BLAKE2b-256 86b00977d47a5552371d1fbe2052dd27308794105f6ca59065de43d408e976e8

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.0.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 74524df366b250ea334b51a5efffec79d0a4dae7756f7580ce3dfe3eabcfa561
MD5 cf7995bcbea047759af641e4364e1f4b
BLAKE2b-256 a3f8ec9141c3372d3c3f0c4b4263459b5421f482d9f20ba87d662eb197efd14c

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: smsd-6.0.0-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 452.0 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.0.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 5468315b5347067a4ddc43d716d3d2b3cd17a1b03dcd6d450afb28b53f6d324c
MD5 c9116cb12ae6e6b18f1c680ab04a71c4
BLAKE2b-256 eaa446ef69ec4bc86ccb7c1094b833cc7745135149c154d13c5fa5c4b12a8ead

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 4af59838b730358b90a3f2fb3fa57ca10617e7aeedb1d1c7f182ae89de0c3c43
MD5 fc3175b92a3c375e4a60adcf2f22434c
BLAKE2b-256 75fac5c7db3f59484eb3bf827ce5b8aa4ce31641be279e72b2d8cc15ca1835d8

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.0.0-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 74b5321f53e971415cef54d678aa7fc18f4b71c8a763aad5b23058b7a8798ed6
MD5 d7b9c4c6ec51e229d09459d15e1c1b13
BLAKE2b-256 37185c0f332a8d99fb8a49dce645d66d2a1e54450b1a0ab5aab25fcf4571e1f3

See more details on using hashes here.

Provenance

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