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 for Python

PyPI Downloads License Python

Python bindings for SMSD native graph matching, including substructure search, maximum common substructure (MCS), fingerprints, and molecular similarity. RDKit and CDK are not required for the core SMSD path.

Install

pip install smsd

Supported CPython versions: 3.9 through the latest stable release series. Current default test target: Python 3.12. The native SMSD path is CPU-first with optional GPU acceleration. RDKit remains optional for interop and depiction rather than a core dependency.

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
Force-directed layout force_directed_layout() for bond-crossing minimisation
SMACOF stress majorisation stress_majorisation() for optimal 2D embedding
Scaffold templates match_template() for 10 pre-computed common scaffolds
Reaction-aware MCS find_mcs(..., reaction_aware=True) or map_reaction_aware() post-filter
Ring perception compute_sssr(), layout_sssr() — clean SSSR APIs

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 with the native writer
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

Native MOL/SDF I/O

import smsd

g = smsd.read_molfile("input.mol")
mol_block = smsd.write_mol_block(g)
mol_block_v3000 = smsd.write_mol_block_v3000(g)
sdf_record = smsd.write_sdf_record(g)

smsd.write_molfile(g, "out_v2000.mol")
smsd.write_molfile(g, "out_v3000.mol", v3000=True)
smsd.write_molfile(g, "out.sdf", sdf=True)

The native writer preserves practical chemistry metadata in 6.9.0:

  • names, comments, and SDF properties
  • charges, isotopes, atom classes, and atom maps
  • R#/R<n> plus M RGP
  • practical V2000/V3000 stereo round-trip

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.9.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.9.0.tar.gz (2.5 MB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

smsd-6.9.0-cp313-cp313-win_amd64.whl (767.3 kB view details)

Uploaded CPython 3.13Windows x86-64

smsd-6.9.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (865.4 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

smsd-6.9.0-cp313-cp313-macosx_11_0_arm64.whl (816.4 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

smsd-6.9.0-cp312-cp312-win_amd64.whl (767.4 kB view details)

Uploaded CPython 3.12Windows x86-64

smsd-6.9.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (865.5 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

smsd-6.9.0-cp312-cp312-macosx_11_0_arm64.whl (816.4 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

smsd-6.9.0-cp311-cp311-win_amd64.whl (766.3 kB view details)

Uploaded CPython 3.11Windows x86-64

smsd-6.9.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (863.5 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

smsd-6.9.0-cp311-cp311-macosx_11_0_arm64.whl (816.0 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

smsd-6.9.0-cp310-cp310-win_amd64.whl (765.2 kB view details)

Uploaded CPython 3.10Windows x86-64

smsd-6.9.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (862.6 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

smsd-6.9.0-cp310-cp310-macosx_11_0_arm64.whl (814.9 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

File details

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

File metadata

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

File hashes

Hashes for smsd-6.9.0.tar.gz
Algorithm Hash digest
SHA256 076427c2206f7f552038a7bd24d91c1b23788520c8fb41a5782013ddced9423a
MD5 badd792e4f6fd2fe890c54134cc8bb36
BLAKE2b-256 0163fb734190835c57c73661843f25704c7c38c8614e3613e3bbc3e1a2bb384e

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: smsd-6.9.0-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 767.3 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.9.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 f305ff95a6f240dc45912b78a7b0d739301242d241a4fe3afef659b077a76720
MD5 def98311d23429707fc776e1e1e7753f
BLAKE2b-256 6c34f89bea5f0c64c8bdc17a1183679ac6e4d8b4faeb099729af405bccc42f46

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.9.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 10ec5b8095d6cf69dedad49393ff99e73c71328c3b922d8f01e64f1a79e3cd3c
MD5 53d58f0fb3bf93386e15ea66e45f8bfb
BLAKE2b-256 d0f5e6198707d900021cb5a5379657d374686a947b807386086bf15247bf182c

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.9.0-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 578bed61a0571ee3ef59adb7da1806a5d53ceca1ba6bb6ca5d4cc37a932a47e2
MD5 63315ecd51f776a828fc9a5eccc06a52
BLAKE2b-256 d57018e9e2225eb98c94afc94becd3b7036d124d12fa0fb91da844249ac2178c

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: smsd-6.9.0-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 767.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.9.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 ebf0ffe1a5bbce71cf54214e1afd5e54891b67d646835931122fc1ec24335333
MD5 d8c17bb953d1ae3cc56b53e0d00d0594
BLAKE2b-256 346a19ab6a82cf4420800ea67562dd2b881f750cd2a8f11790b614015b39f69f

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.9.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 f3592389397f87086a04ba3a981f9ea43ce616ac571bc1da9f667f5602243e63
MD5 16433c3442659f71de4a32547d1d4975
BLAKE2b-256 7ea0ffe10b85ab68fef8f51f661268fafd091e85118e6f05c7e79f1c78c9bd93

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.9.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 23c746b813b6031e719a005655e90608fdf214cc6630612f663f731f1f37d95c
MD5 d3ab9f53873e80d9229c058646d150ae
BLAKE2b-256 7c1d3c9b59e0b2872a59972688fa7007d89316c88abf1da2c2ca47fadfa94c13

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: smsd-6.9.0-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 766.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.9.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 48d81aa048a2255edb0dc54e22a7053ea0d0b36f2ace9bbde7232330ae94674b
MD5 cde6c68ee6ae48107b5ff1efe7caea12
BLAKE2b-256 a82e97cb8ecf03f73b498266dfa726b1bf680e75e1b589c50262c350a64de21e

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.9.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 4959d78947993385dac8bd7fa1e0f68259e847ae98ad6958cce1af63765036ae
MD5 4ce16b6ec552c256f244d17cf9db669e
BLAKE2b-256 118b4f9393da402bdb320724428248118ed81a6f6ee8bbc0588a0dea66bf7c44

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.9.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 07c95aa8b6011b196d80238ff8dcef796b1bc11fb82707202747a91e29b7ce31
MD5 0df1fa715342c30f4357228772118e6a
BLAKE2b-256 0d9efb564c752fb813ed3a09c12f3ff26e2a4025ff27c6b0d4f849aa41b98f0a

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: smsd-6.9.0-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 765.2 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.9.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 74238a1d5e3d225c70a7c7ceb96ac53836db909103f3f3c18a76b91c4fa8c698
MD5 75f76ba90b471ece3e3018828bf68d14
BLAKE2b-256 b8cc0cbeb4fd0515a18ccc6a3bb208288762146252f844adbeb7067cce66b471

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.9.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 62d6f57203c1734acf40ae417e702ff3ca153eb733d31c2dbefb6842155d54b2
MD5 d572d3e5b40e8a78fda570ff6481a9a1
BLAKE2b-256 aa4ffd2535684f139780ca301a7388778b3054577c0867a14c8872331da16492

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.9.0-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f0ae1ebe9903f7bb525b939723314cf773dc342e5d7cd14bef9c06dcb9e6cf69
MD5 60d1ffaf87b743c4ba873f4397071069
BLAKE2b-256 5578ba27a955abac37e91d598305a5c83fe19c3862d3f9185fefc918c9aa8442

See more details on using hashes here.

Provenance

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