diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..177523b --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,63 @@ +# Changelog + +All notable changes to `sem_cython12` are recorded in this file. + +The project follows [Semantic Versioning](https://semver.org/): a +release `MAJOR.MINOR.PATCH` increments + +- `MAJOR` on breaking API changes, +- `MINOR` on backwards-compatible feature additions, +- `PATCH` on backwards-compatible bug fixes. + +## [1.0.0] - 2026-05-09 + +First public release. + +### Included + +- Pre-compiled Linux x86_64 binary (`sem_core12.cpython-312-x86_64-linux-gnu.so`) + built with gcc 13.3, OpenMP-parallel (`libgomp`), `-O3 -ffast-math + -march=native`. +- Pre-compiled Windows AMD64 binary (`sem_core12.cp312-win_amd64.pyd`) + built with MSVC v14.50 (Visual Studio Build Tools 2026), + OpenMP-parallel (`vcomp`), `/O2 /openmp`. +- Python wrapper module `sem_cython12.wrapper` exposing the public + numerical API. +- Single runtime dependency: `numpy >= 1.23`. + +### API surface + +Configuration: +- `available()`, `backend()`, `get_num_threads()`, `set_num_threads(n)`. + +Distance and similarity: +- `batch_max_similarity(X_query, X_members, lam)` +- `concept_support_matrix(X_query, member_mats, lam)` +- `pairwise_distances(X)` +- `nn_distances(X)` + +Best-tradeoff filtering: +- `pareto_core_mask(S)` +- `one_sided_mask(S)` +- `non_redundant_witnesses(S)` + +Vector reduction: +- `extend_frontier_kernel(cur_centers, cur_radii, new_emb, cur_arity)` + +### Compatibility + +- CPython 3.12 (cp312) only in this release. Other Python versions + are not supported. +- Linux x86_64 with glibc 2.31 or newer (Ubuntu 20.04 LTS and later, + RHEL 9 and later, Debian 11 and later). +- Windows 10 / Windows 11 / Windows Server 2019+, AMD64 only. +- macOS binaries are not provided in this release. Contact + `sales@sevana.biz` if you need a macOS build. + +### Notes + +- Thread count defaults to roughly 50% of the host's logical cores. + Override via `sem_cython12.wrapper.set_num_threads(n)` or the + `SEM_NUM_THREADS` environment variable. +- The library performs no network I/O, opens no sockets, and writes + no files outside the calling process's working directory. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..5614dc5 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,50 @@ +# Contributing to sem_cython12 + +Thank you for your interest in `sem_cython12`. + +## Scope of this repository + +This repository distributes pre-built binaries and the public Python +wrapper only. The implementation source code is not published here +and external code contributions to the kernels are not accepted at +this time. + +## What you can contribute + +- **Bug reports.** Open an issue at + https://git.sevana.biz/vvs/sem_cython12/issues with: + - OS, CPU architecture, glibc version (Linux) or Windows build, + - Python version (`python --version`), + - NumPy version, + - a minimal reproducer (small array shapes preferred), + - the full traceback or observed vs. expected output. + +- **Documentation fixes.** Typos, broken links, unclear wording in + `README.md` or `CHANGELOG.md` are welcome via issue or pull request. + +- **Usage questions.** Use the issue tracker. Please search existing + issues first. + +## What is out of scope here + +- Pull requests modifying `sem_cython12/sem_core12*.so` or + `sem_cython12/sem_core12*.pyd` (binary artefacts, built from a + separate source tree). +- Pull requests adding new numerical functions to + `sem_cython12/wrapper.py` (the wrapper mirrors a closed kernel API). +- Algorithmic discussion of the underlying methods. + +## Security issues + +Do not file security issues on the public tracker. See +[`SECURITY.md`](./SECURITY.md). + +## Commercial inquiries + +For commercial licensing, custom builds (including macOS), or +integration support, contact `sales@sevana.biz`. + +## Code of conduct + +Be respectful and on-topic. Off-topic, abusive, or commercially +solicitous issues will be closed without comment. diff --git a/LICENSE b/LICENSE index 637b11d..98c35aa 100644 --- a/LICENSE +++ b/LICENSE @@ -173,18 +173,50 @@ written notice to you. The disclaimers in sections 4 and 5 survive termination. ================================================================ -7. NO TRANSFER OF OWNERSHIP +7. NO TRANSFER OF OWNERSHIP; PATENT AND TRADE MARK RESERVATION ================================================================ All right, title, and interest in and to the Software, including -all intellectual property rights therein, remain with the +all copyright, patent, patent application, trade secret, know-how, +and other intellectual property rights therein, remain with the Licensor. This licence does not transfer ownership of the Software, of any modification, or of any derivative work to the Licensee. +Without limiting the foregoing: + + (a) NO PATENT LICENCE IS GRANTED. This licence does not grant, + expressly, by implication, by estoppel, by exhaustion, or + otherwise, any rights under any patent, patent application, + or other patent-related right of the Licensor or its + affiliates. + + (b) The algorithms, methods, and techniques implemented in the + Software may be the subject of pending or future patent + applications by the Licensor. Any use of those algorithms, + methods, or techniques in a manner that would require a + patent licence is reserved and requires separate written + permission from the Licensor. + + (c) The marks "Similarity Induced Meaning", "SIM", and "SEM", + together with any abbreviations, slogans, or logos + associated with them, are intended trade marks of the + Licensor. This licence does not grant any right to use + those marks except for factual nominative reference (for + example, "this work uses the SIM/SEM apparatus") in a + context that does not suggest endorsement by, or + affiliation with, the Licensor. + + (d) "sem_cython12" is the technical name of this Software + distribution and is NOT claimed as a trade mark by the + Licensor. Any use of the technical name in derivative or + referencing works is unrestricted, subject to the rest of + this licence. + This licence does not grant you any rights to use the Licensor's name, trade marks, service marks, logos, or any other branding, -except as required by section 8 (Attribution). +except as required by section 8 (Attribution) and as permitted by +the factual-reference allowance in (c) above. ================================================================ 8. ATTRIBUTION @@ -210,7 +242,26 @@ shall be resolved in the competent courts of the Republic of Estonia, to whose jurisdiction both parties submit. ================================================================ -10. ENTIRE AGREEMENT +10. THIRD-PARTY COMPONENTS +================================================================ + +The Software depends at runtime on the following third-party +components, each of which is distributed under its own licence +and is not itself the subject of this licence: + + (a) NumPy (BSD 3-Clause licence) - used as a runtime + dependency for array data structures. + + (b) The OpenMP runtime supplied by the operating system or the + compiler toolchain (e.g., libgomp on Linux, vcomp on + Windows) - linked at compile time. + +The Licensor does not relicense any third-party component; users +must comply with the terms of each component's own licence in +addition to this licence. + +================================================================ +11. ENTIRE AGREEMENT ================================================================ This licence constitutes the entire agreement between you and the diff --git a/README.md b/README.md index 80d62ec..972fa7a 100644 --- a/README.md +++ b/README.md @@ -1,24 +1,37 @@ # sem_cython12 -OpenMP-parallel numerical kernel library for Python. Pre-built Linux -shared object included; no compilation required at install time. +OpenMP-parallel numerical kernel library for Python. Pre-built +Linux and Windows binaries included; no compilation required at +install time. ## Contents - `sem_cython12/sem_core12.cpython-312-x86_64-linux-gnu.so` - compiled extension (Linux, CPython 3.12, x86_64). +- `sem_cython12/sem_core12.cp312-win_amd64.pyd` - + compiled extension (Windows, CPython 3.12, AMD64). - `sem_cython12/wrapper.py` - Python API. - `sem_cython12/__init__.py` - package entry. -## Requirements +## Compatibility -- Linux x86_64. -- CPython 3.12. -- numpy >= 1.23 (see `requirements.txt`). -- A modern glibc + libgomp. Both ship with Ubuntu 20.04 LTS and - later. No other system libraries needed. +| Platform | Architecture | Python | Runtime requirements | +|-----------------|--------------|-----------|-----------------------------| +| Linux | x86_64 | CPython 3.12 | glibc >= 2.31, libgomp | +| Windows 10/11 | AMD64 | CPython 3.12 | vcomp (ships with Windows) | +| macOS | - | - | not provided (contact sales@sevana.biz) | -The Windows / macOS binaries are not included in this distribution. +Single Python dependency: `numpy >= 1.23` (see `requirements.txt`). + +## How the binaries were built + +- **Linux (`*.so`)**: gcc 13.3, OpenMP via `libgomp`, flags + `-O3 -ffast-math -march=native -fopenmp`. +- **Windows (`*.pyd`)**: MSVC v14.50 (Visual Studio Build Tools 2026), + OpenMP via `vcomp`, flags `/O2 /openmp`. + +Both binaries target CPython 3.12 (cp312) ABI. No other Python +version is supported in this release. ## Install @@ -118,6 +131,13 @@ and benefits most from larger `M` (reference set) at fixed `D`. (`libgomp`); avoid mixing with conda's `intel-openmp` in the same process if possible. +## Privacy / telemetry + +`sem_cython12` performs **no network I/O**, opens no sockets, and +writes no files outside the calling process's working directory. +There is no telemetry, no usage reporting, and no licence-server +check-in. All computation is in-process on local arrays. + ## Diagnostics `backend()` returns `'python-fallback'` only when the `.so` failed diff --git a/SECURITY.md b/SECURITY.md new file mode 100644 index 0000000..19bad7a --- /dev/null +++ b/SECURITY.md @@ -0,0 +1,53 @@ +# Security Policy + +## Supported versions + +Only the latest released version of `sem_cython12` receives security +fixes. The current supported line is `1.0.x`. + +| Version | Supported | +|---------|-----------| +| 1.0.x | yes | +| < 1.0 | no | + +## Reporting a vulnerability + +Please report suspected security vulnerabilities **privately**, not on +the public issue tracker. + +Email: **info@sevana.biz** + +Include in your report: + +- a description of the issue and its potential impact, +- the affected version(s) of `sem_cython12`, +- platform details (OS, architecture, Python version), +- a minimal reproducer if possible, +- whether the issue is already publicly known. + +## What to expect + +- **Acknowledgement** within **5 business days** of receipt. +- **Initial assessment** (severity, scope, reproducibility) within 15 + business days. +- **Coordinated disclosure**: we will work with you on a disclosure + timeline. We aim to release a fix or mitigation before public + disclosure. Default embargo is up to 90 days from acknowledgement, + extendable by mutual agreement for non-trivial fixes. +- **Credit**: with your permission, we will credit you in the + `CHANGELOG.md` entry for the fix. + +## Out of scope + +- Issues that require an attacker to already control the Python + process running `sem_cython12` (e.g. arbitrary pickle loading, + malicious NumPy arrays constructed in-process). +- Denial-of-service via deliberately huge input arrays. +- Vulnerabilities in third-party dependencies (NumPy, OpenMP runtime) + that are not specific to `sem_cython12`'s use of them; please report + those upstream. + +## No bug bounty + +`sem_cython12` does not currently operate a paid bug bounty programme. +Reports are appreciated and will be acknowledged in writing. diff --git a/sem_cython12/sem_core12.cp312-win_amd64.pyd b/sem_cython12/sem_core12.cp312-win_amd64.pyd new file mode 100644 index 0000000..4597e8e Binary files /dev/null and b/sem_cython12/sem_core12.cp312-win_amd64.pyd differ