fherma
Command line interface for the FHERMA kernel catalogue.
pipx install fherma # or: uv tool install fherma
A command line tool belongs in an environment of its own, and on macOS it has no
choice: Homebrew marks its Python as externally managed, so pip install into it
is refused. Inside a virtual environment pip install fherma is exactly right.
Either way that is the whole toolchain — fherma-lang comes with it as a
dependency, so the install leaves two commands on the path: fherma, and
fherma-lang for the language on its own. Check what you got:
$ fherma --version
fherma 0.1.0
fherma-lang 0.1.0
python 3.13.4
$ fherma doctor
✓ python 3.13.4
✓ fherma 0.1.0
✓ fherma-lang 0.1.0
✓ commands auth, testing
✓ profile default → https://api.fherma.io
• credentials no token
doctor is offline by default — the usual reason to run it is that something is
wrong, and a network timeout would bury the answer. Pass --online to check the
token as well. It exits non-zero only when the toolchain is actually broken; a
missing token is not broken, since scaffolding from a local signature never
needs one.
Tab completion, once:
fherma completion zsh >> ~/.zshrc # or bash, or fish
What it is for
A kernel in FHERMA is a computational problem; a specification is one precise statement of it. Before implementations can be submitted against a specification, it needs three functions — a generator, an oracle and a verifier — which say where test data comes from, what the right answer is, and how a verdict is reached.
This tool fetches the scaffold for those three, runs their checks locally, and sends them back.
Getting started
fherma auth login
fherma testing init polymult/rlwe@1.0.0
That writes a bundle:
polymult-rlwe-1.0.0/
├── fherma.toml generated — which specification this belongs to
├── fherma.py generated — Point, Inputs, Outputs, Stream, Tensor
├── README.md generated — the signature, and what to write
├── generate.py yours
├── oracle.py yours
├── verify.py yours, and usually unnecessary
├── vectors/ worked examples, for accepting the oracle
└── assets/ data files the three functions may read
fherma.py is derived from the specification's signature: the types are already
correct, so there is nothing to declare and nothing to get wrong. Write the two
function bodies; the third is usually unnecessary, since most verdicts are
exact equality and that is what the platform does when verify.py says nothing.
The generated files are rewritten by fherma testing init --update; yours never
are. Running the three locally — fherma testing check — is not in this
release.
Commands
fherma auth login · logout · whoami
fherma testing init · status
fherma doctor check the installation
fherma completion a script for bash, zsh or fish
Name a specification as kernel/spec@version; the version may be left off, and
the latest published one is used.
fherma testing init polymult/rlwe@1.0.0
fherma testing init polymult/rlwe --oracle --verifier # two of the three
fherma testing init --signature ./sig.fhk # no platform involved
The scaffold itself comes from fherma-lang
and is built in this process, so the platform is asked for one thing — the
signature — and --signature needs no network at all.
More arrive as the platform grows; fherma <group> --help lists what a group
can do.
Every command takes --json, because this output is read by CI and by the web
interface as well as by people. Exit codes are fixed: 0 success, 1 a check
did not pass, 2 a usage error, 3 not authorised, 4 the platform could not
be reached.
Profiles
fherma --profile staging auth login
Configuration lives in ~/.fherma/config.toml. FHERMA_URL and FHERMA_TOKEN
override it, so continuous integration never has to write a token to disk.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file fherma-0.2.0.tar.gz.
File metadata
- Download URL: fherma-0.2.0.tar.gz
- Upload date:
- Size: 30.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a663eebd7e2045eb1cbc4dafd836fa5ab1f960be8e676efc45c9bdac1289cac3
|
|
| MD5 |
f048654ac55ac63abcfbe2ea3cfbe1e7
|
|
| BLAKE2b-256 |
e11a6dc483ada986de3f716e5b19df5f5e6e07e61deef2bbd6acfdba83651e0d
|
Provenance
The following attestation bundles were made for fherma-0.2.0.tar.gz:
Publisher:
publish.yml on fairmath/fherma2
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
fherma-0.2.0.tar.gz -
Subject digest:
a663eebd7e2045eb1cbc4dafd836fa5ab1f960be8e676efc45c9bdac1289cac3 - Sigstore transparency entry: 2501317359
- Sigstore integration time:
-
Permalink:
fairmath/fherma2@d9f08fe1fe17be3c7ebb6f51f724cac28f658160 -
Branch / Tag:
refs/tags/cli-v0.2.0 - Owner: https://github.com/fairmath
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@d9f08fe1fe17be3c7ebb6f51f724cac28f658160 -
Trigger Event:
push
-
Statement type:
File details
Details for the file fherma-0.2.0-py3-none-any.whl.
File metadata
- Download URL: fherma-0.2.0-py3-none-any.whl
- Upload date:
- Size: 35.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fa3cd4aa9292c997a9dec6318a33d6142606364895860d0fab5ba6a7a8763381
|
|
| MD5 |
a77c631bdbbe6a02aadb1f50490bd604
|
|
| BLAKE2b-256 |
3ea59b6f4496d8fd21eb2b2f8a1ce8c4900becb7568fa17821b1441b653aaa2b
|
Provenance
The following attestation bundles were made for fherma-0.2.0-py3-none-any.whl:
Publisher:
publish.yml on fairmath/fherma2
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
fherma-0.2.0-py3-none-any.whl -
Subject digest:
fa3cd4aa9292c997a9dec6318a33d6142606364895860d0fab5ba6a7a8763381 - Sigstore transparency entry: 2501317378
- Sigstore integration time:
-
Permalink:
fairmath/fherma2@d9f08fe1fe17be3c7ebb6f51f724cac28f658160 -
Branch / Tag:
refs/tags/cli-v0.2.0 - Owner: https://github.com/fairmath
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@d9f08fe1fe17be3c7ebb6f51f724cac28f658160 -
Trigger Event:
push
-
Statement type: