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.0.tar.gz (537.9 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.0-cp313-cp313-win_amd64.whl (488.1 kB view details)

Uploaded CPython 3.13Windows x86-64

smsd-6.1.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (558.6 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

smsd-6.1.0-cp313-cp313-macosx_11_0_arm64.whl (502.4 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

smsd-6.1.0-cp312-cp312-win_amd64.whl (488.1 kB view details)

Uploaded CPython 3.12Windows x86-64

smsd-6.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (558.7 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

smsd-6.1.0-cp312-cp312-macosx_11_0_arm64.whl (502.4 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

smsd-6.1.0-cp311-cp311-win_amd64.whl (486.9 kB view details)

Uploaded CPython 3.11Windows x86-64

smsd-6.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (556.6 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

smsd-6.1.0-cp311-cp311-macosx_11_0_arm64.whl (502.3 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

smsd-6.1.0-cp310-cp310-win_amd64.whl (486.1 kB view details)

Uploaded CPython 3.10Windows x86-64

smsd-6.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (555.3 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

smsd-6.1.0-cp310-cp310-macosx_11_0_arm64.whl (501.2 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

File details

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

File metadata

  • Download URL: smsd-6.1.0.tar.gz
  • Upload date:
  • Size: 537.9 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.0.tar.gz
Algorithm Hash digest
SHA256 0581a46f399e94c7a17cdead48777e1bd369f9857857aa349d72ec562ba542d9
MD5 479261bfc73f1c8fbf4cfd9f0b86cdbf
BLAKE2b-256 ff87c46ab27f18250655900d1921e8d9d4e380a3950c8f3c4b0a50ba6950dd8a

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: smsd-6.1.0-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 488.1 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.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 c933b2abbf1fbe462a5113d3cd2e86129c1ffdf4ce584a8068f3a821b5131646
MD5 b7e0ddbd15cefd77e18b60f4c1c4f9e3
BLAKE2b-256 6e39e2829eb5b816eed714c7a9a9866b010264f40fa7914501fcb36a00748154

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.1.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 9ee8b903cc93c27cd7f39d56f3443d223a769846185837ae6af19b89e0580481
MD5 5e0b1d96abeba7a57a24836cf4257a34
BLAKE2b-256 c9641adc4c1efdeade83639f10a5b58062b0b30a78760acd63554d5f827e9385

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.1.0-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 83ccfa6de286ab40cb46879f786420b0825f1714dac10f705b730cb591c3f027
MD5 589dcce2ccbe40cf2f879f91f7db6358
BLAKE2b-256 cf211d3cb1d99e9518b6767ae93435b23c03ae27d2159cb1f408495489fc83e9

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: smsd-6.1.0-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 488.1 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.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 c4432330ae9516f8ae37a5cf468065c3b7a8c83ba58eb7795b3052eacae68e12
MD5 b9b934a18fe3ace59e63a422e0959ef6
BLAKE2b-256 6ef1eac958c02f71451bbcd4051af90fe471e31e834903633c6f8ed1fc276240

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 c881b6f080a2dec33c0def9664c8ce92133604ffeff22c79580a168586303d58
MD5 233a501582c401aa4f0ed551cc2130f4
BLAKE2b-256 63122f58e3d66b464fc59bdddc3ded3cdea6c2a8b4b9449dfafa86efa8205718

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.1.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 064ded441a099fc8184197536aa132ff72a2652c50e2221babfe34bc273e2010
MD5 60d2ce7249cab80afdcec097e8192ec3
BLAKE2b-256 4ba3a215a9f86e33ce6882c1bfea43ba1c02d25e59feb8051b2f7c364076eee8

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: smsd-6.1.0-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 486.9 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.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 d23a0256e6a53935e151f28c5d3407fba30ccd06abbeefab1141f4dc6b43fa89
MD5 b9500a129e3c83a6c7d1ede25b58ea42
BLAKE2b-256 7d845ef31a41e13224b2022eb5d5ab428b4abb833986701eed4a852cb97804f9

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 d858a7395e8adcac09afc68f354d122c8c6162cb1f5206c0210f5a8bc5ce41e8
MD5 83450112c31053d065bd0006f8254cc6
BLAKE2b-256 6c7b1612ef49fb21f37922fd84a9463dcac5eed589661457a1ccc0a028b75c9d

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.1.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 6a78174ea0fba26daf7fedeeb3b93e1a4d1db04da9216fda5cb7219758c32157
MD5 bdd294cc7d8772f566c4d360fb25c81f
BLAKE2b-256 ef0855520984516414ff8eeb7e82454c2d1eb52f5331b63f5232e6539eeda750

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: smsd-6.1.0-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 486.1 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.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 c9e30dd1734cc3a4b78898d4b30ffa60f45e480c0d6973d5ab66df1851199f6b
MD5 145515dac9138aef5d840eaae7df55e7
BLAKE2b-256 a0e09622574321595ba906c9123397ac07f85ab33262c6bd2b7619f092377bab

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 eebf6bbb9b776a53553cf6bd45c329a1b2eb36f0730b98bdd111786a3bd8b9bf
MD5 334fb3bec5a8f9d5810de2ca9bbcb8a1
BLAKE2b-256 7458854cd2e2a1390a81884a1d8aa61dea66b4fe6762c13ff61c19c49aa69278

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for smsd-6.1.0-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d1e26818fdf1a1e389c2f69685f186c883861ef3cf80e9fd9b5394521804e94f
MD5 2057e5c035d7043b6b552b6cba52655a
BLAKE2b-256 c0569f0a4a637156024ccd8472c262b7bf1e9746a2c9b9c55c21556ecb4844cc

See more details on using hashes here.

Provenance

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