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 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.1.1.tar.gz (538.2 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.1.1-cp313-cp313-win_amd64.whl (488.5 kB view details)

Uploaded CPython 3.13Windows x86-64

smsd-6.1.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (558.9 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

smsd-6.1.1-cp313-cp313-macosx_11_0_arm64.whl (502.7 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

smsd-6.1.1-cp312-cp312-win_amd64.whl (488.4 kB view details)

Uploaded CPython 3.12Windows x86-64

smsd-6.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (559.0 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

smsd-6.1.1-cp312-cp312-macosx_11_0_arm64.whl (502.7 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

smsd-6.1.1-cp311-cp311-win_amd64.whl (487.2 kB view details)

Uploaded CPython 3.11Windows x86-64

smsd-6.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (557.0 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

smsd-6.1.1-cp311-cp311-macosx_11_0_arm64.whl (502.6 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

smsd-6.1.1-cp310-cp310-win_amd64.whl (486.4 kB view details)

Uploaded CPython 3.10Windows x86-64

smsd-6.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (555.7 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

smsd-6.1.1-cp310-cp310-macosx_11_0_arm64.whl (501.5 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

File details

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

File metadata

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

File hashes

Hashes for smsd-6.1.1.tar.gz
Algorithm Hash digest
SHA256 7d922f52c026bbc68bff2027a4987383a8b9bd4ef129e9bb03966d0e026d01d4
MD5 f7d2cb7ed7246fc2f7492c32d668d885
BLAKE2b-256 1fec28bac4433dad8bd47145ba8be82e44a41c041db5636711fbe0c0ebdc71ed

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: smsd-6.1.1-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 488.5 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.1.1-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 81e6ca0cee52caa0913cccca2ac5a5039b11d993383ddb43fdc0c77b50264255
MD5 3d6266f715ff4a119f0f937840ff1177
BLAKE2b-256 71548df7ccd262a976104588f0aa7d2702a7714027b5642139d5091c67684550

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.1.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 57a8bf75d4c4d7cd276e98d5e76dbefcfdc8597be6545e0fc9ec5500ebb1be78
MD5 d1acc18739ba88d71dc6ba76dea66fb4
BLAKE2b-256 4f9d9c56b90569d5868b11b62b3dd8d3e1adfb6cda691795467c4bd414d2e6f1

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.1.1-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 42dfcdaf55e0777b3eee797bcd9783151f7222e1316d7a9261f2504da1c59b80
MD5 886cad3643b3da9412bfad0a7d594b34
BLAKE2b-256 abd1cbe159878efad056429eb34727b087584a752cb34aebdb72d3ee4216ca55

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: smsd-6.1.1-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 488.4 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.1.1-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 7a965956988eeb1ca40bf7248cabb2f92b6e7afe56a5e9a18cb4db716019b97e
MD5 ccfff2ed2b9f1d17438fb156d491397c
BLAKE2b-256 e7f917cea89c25014bae0a984501bd1337dbcb2685a4db56eca09ed298324cb3

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 24d8a5a0b554953a1240fcc17fecb326d6bf740e4ebf0d9b71dd4e7f6485928d
MD5 d19692d43133c7f01c7422cc80cdd003
BLAKE2b-256 8c20d4d356c39144a53e68a92f9cf50bf6ad0c7e33cc1d086c506d812b14f86a

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.1.1-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 a2e21989261c4453a6c54c0710734c6bde8e8e6fe89218e23b9b50c1e8cd5437
MD5 72c5854dbce387f2284f0c6a6406560f
BLAKE2b-256 38a49615300c88e400f90e0e75d46aaa3ccd2fc250fcf420a8d60c819d399598

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: smsd-6.1.1-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 487.2 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.1.1-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 3f5d4d498416a45e4a98b4a9fc1ff82ccacbab662533246f9399fbcee140782b
MD5 b144fe9661ea8383f8c65807057d64a4
BLAKE2b-256 084dc185879b27607b53d0d48bf3d7a54e5dd9febeef72ec1af87c8d0c66008b

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 732754d24ad73991122319b68a48de24977bdf863dc2f3ff5e924438f6e3f16e
MD5 d04135c25183a003199ac4c241950b8f
BLAKE2b-256 90e235236bd552260b3501784aa84fdd25069d79e6de882a2eaa03cf203099d8

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.1.1-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d384412ea99f083e3c721fd1f24f032ff678625ae78f9f0a79b5262ad8143c9d
MD5 7cf99b7a280a557bd75b687c225b0f8e
BLAKE2b-256 57a4aee2fc0be8bea354bca53dfc1fcc32d721d6a5e638e798c4aa130a3e3dee

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: smsd-6.1.1-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 486.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.1.1-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 3e77d8b57c52b21b457de7aac0b6fca190f53ea79dfadb00892e52e690b801c8
MD5 a717f739c6dd46c322fa7ef0cbfa1787
BLAKE2b-256 21c41b61c4c12457eb2faf12166758aa0601d4cd5ba1888dd450a13b38381c41

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 f4739e4cfe5c40a668415c9d2aff9061b4d73da48b0a9464f802c8cc2878d73e
MD5 7df1fabb0fb1a0e0c3fbf3f2e25e9ba8
BLAKE2b-256 e7094ce7e51c92f344204eee90480df5dcdeb264035f6276bc315bd955893ab9

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.1.1-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 be9d39ff989fbdc36f728083581354f7505457cfbee192cc2d0f360bbfe75dda
MD5 91e19c26e678d97079fa8a300377d5bf
BLAKE2b-256 872cd541533b31ca3197fd57b8fe95e5bfbd664cabbf21b51371a9da164ff906

See more details on using hashes here.

Provenance

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