A compilation of boilerplate scribbles
Project description
kochen
Primarily a library of personal scripts and handy boilerplate, for scientific environments.
This library is additionally designed for strong backward-compatibility: old scripts dependent on functionality in older library versions can still run, simply by performing a soft version pin in the script (whereas, traditionally, older versions of the library itself needs to be installed).
Licensed under GPLv2-or-later, because free software is best left open.
Installation
Requires Python 3.8+ (versions below 3.8 often fail with modern tooling as of 2025).
pip install kochen
The base installation has very minimal dependencies. To use certain submodules that introduce additional dependencies, specify them as an extra:
datautil: For data storage and parsing.fitutil: For curve fitting.mathutil: For general math manipulation.plotutil: For plotting.
pip install kochen[datautil,fitutil]
Or just install them all:
pip install kochen[all]
Versioning
This library implements soft-versioning by means of version pinning in the script itself (how cool is that!). This prints 'latest' without version pinning:
import kochen.sampleutil
print(kochen.sampleutil.foo())
and prints 'v0.2025.8' with version pinning, all without downgrading the library:
import kochen.sampleutil # v0.2025.8
print(kochen.sampleutil.foo())
Usage
Most of the useful functionality is parked in the following submodules:
datautil, mathutil, ipcutil, scriptutil.
import kochen.mathutil
kochen.mathutil.generate_simplex(...)
Some commonly used features are listed below.
ipcutil
Client/Server for proxying Python instances over TCP ports.
# server.py
from kochen.ipcutil import Server
from S15lib.instruments.powermeter import Powermeter
pm = Powermeter(...)
pm = Server(pm, address="192.168.1.2", port=3000)
pm.run()
# client.py
from kochen.ipcutil import Client
from S15lib.instruments.powermeter import Powermeter
pm = Client(Powermeter, address="192.168.1.2", port=3000)
print(pm.voltage)
datautil
Data logging and reconstruction:
from kochen.datautil import pprint
filename = "pv_curve.log"
pprint("volt_V", "power_W", "comment", out=filename)
pprint(1, 3, "first_line", out=filename)
pprint(1.5, 9, "second_line", out=filename)
# volt_V power_W comment
# 1 3 first_line
# 1.5 9 second_line
print(load(filename, schema=[float, float, str]))
# shape: (2, 3)
# ┌────────┬─────────┬─────────────┐
# │ volt_V ┆ power_W ┆ comment │
# │ --- ┆ --- ┆ --- │
# │ f64 ┆ f64 ┆ str │
# ╞════════╪═════════╪═════════════╡
# │ 1.0 ┆ 3.0 ┆ first_line │
# │ 1.5 ┆ 9.0 ┆ second_line │
# └────────┴─────────┴─────────────┘
Data aggregation:
from kochen.datautil import Collector
c = Collector()
c.indices, c.signals = (1, 2)
c.indices, c.signals = (3, 4)
c.indices, c.signals = (6, 7)
print(c.indices) # [1, 3, 6]
Cache backed by file:
import time
from kochen.datautil import filecache
@filecache(path="mycache", backend="json")
def initialize(duration):
time.sleep(duration)
return duration
print(initialize(1)) # 1 (sleeps for 1s)
print(initialize(1)) # 1 (no sleep)
with open("mycache") as f:
print(f.read()) # {"initialize": {"((1,), frozenset())": 1}}
template
Initialize a quick script boilerplate at MYSCRIPT.py:
python -m kochen.template MYSCRIPT
Others
Strong backward-compatibility?
Maybe not as strong as its proper definition implies (since it depends on the user properly deprecating functions in the first place), but it mostly does the job as advertised.
Unlike typical software engineering where application or library packages are created, one-off scripting is very common in scientific environments, since lots of prototyping and data exploration is performed. A common practice includes installing the latest library in the system Python (or more sanely, in a global virtual environment / conda), then using it to develop scripts. Superseding of old functions meant old scripts tend to fail to run, and hence the subsequent hesitation to upgrade the library/Python.
Allowing soft version pinning of the library should ideally fix this issue. See the versioning writeup to see how this is implemented, and the old design document for the initial conception and reasoning.
The alternative is of course to rely on PEP-723 which provides a consistent way to define inline script dependencies but requires compatible tooling to run scripts in said manner. This also came out after this library was created.
Why "kochen"?
The initial choice of library name boiler (since this was initially a boilerplate library) was unavailable on PyPI, and
so was the next choice scribbles.
The next obvious step is to pick something that is unlikely to clash with other packages, i.e. boiling in German,
kochen [ˈkɔxn], verb: (Flüssigkeit, Speise) to boil [intransitive verb]
Nothing to do with Simon B. Kochen of the well-known Kochen-Specker theorem.
Project details
Release history Release notifications | RSS feed
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 kochen-0.2026.5.tar.gz.
File metadata
- Download URL: kochen-0.2026.5.tar.gz
- Upload date:
- Size: 79.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a1fb19c873a512fd1cd2267ccfe4baffac7d917209ca3d9545b6771c0f534f53
|
|
| MD5 |
65eb7203f41ca81750719692e817728a
|
|
| BLAKE2b-256 |
da8e74f178e09e1a5ff6e38f4e3ecec80d3cff9f187184f213637a581f0432d9
|
Provenance
The following attestation bundles were made for kochen-0.2026.5.tar.gz:
Publisher:
release.yml on pyuxiang/kochen
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
kochen-0.2026.5.tar.gz -
Subject digest:
a1fb19c873a512fd1cd2267ccfe4baffac7d917209ca3d9545b6771c0f534f53 - Sigstore transparency entry: 791525054
- Sigstore integration time:
-
Permalink:
pyuxiang/kochen@0b33a341de7a370f265836dc88ba36613cd69446 -
Branch / Tag:
refs/tags/v0.2026.5 - Owner: https://github.com/pyuxiang
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@0b33a341de7a370f265836dc88ba36613cd69446 -
Trigger Event:
push
-
Statement type:
File details
Details for the file kochen-0.2026.5-py3-none-any.whl.
File metadata
- Download URL: kochen-0.2026.5-py3-none-any.whl
- Upload date:
- Size: 66.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9f8daa4cfb62745e458c45d432a1b78d523fcbf327a6f826a417df46a09eb760
|
|
| MD5 |
cdd5fa6e80d09533b947a850249713e2
|
|
| BLAKE2b-256 |
aaf563ba89d00b9295b49ba4aa61f569343f534350d6b7da5b65de7cd2cd87c7
|
Provenance
The following attestation bundles were made for kochen-0.2026.5-py3-none-any.whl:
Publisher:
release.yml on pyuxiang/kochen
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
kochen-0.2026.5-py3-none-any.whl -
Subject digest:
9f8daa4cfb62745e458c45d432a1b78d523fcbf327a6f826a417df46a09eb760 - Sigstore transparency entry: 791525058
- Sigstore integration time:
-
Permalink:
pyuxiang/kochen@0b33a341de7a370f265836dc88ba36613cd69446 -
Branch / Tag:
refs/tags/v0.2026.5 - Owner: https://github.com/pyuxiang
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@0b33a341de7a370f265836dc88ba36613cd69446 -
Trigger Event:
push
-
Statement type: