A terminal spreadsheet powered by Python formulas
Project description
gridcalc
A programmable terminal spreadsheet for developers and technical users, with Excel-ish formulas, Python escape hatches, XLSX interop, goal seek, and LP/MIP solving.
Inspired by Serge Zaitsev's kalk.
pip install gridcalc
gridcalc budget.json
What it gives you
- Excel-compatible formulas (
=IF(A1>=B1, A1*0.05, 0)) and arrays (=SUM(A1:A10 * B1:B10)) without leaving the terminal. - Multi-sheet workbooks with cross-sheet refs (
=Sheet2!A1) and a proper dep graph. - Three formula modes per file: strict Excel, Excel-plus-
py.*, or full Pythonevalwith numpy/pandas. - xlsx interop via OpenXLSX C++ -- read every sheet's formulas + values; export with cached values.
- Linear & mixed-integer programming built in via lp_solve --
:opt max B4 vars A4:A5 st D4:D6solves an LP from cells in the sheet. Models persist in the workbook. - Goal-seek --
:goal B10 = 100 by A1adjusts a variable so a formula hits a target value. - Vim-style command line (
:w,:e,:q,/search,y/p, visual selection, undo), with system-clipboard copy/paste -- yank pushes values as TSV, paste pulls TSV in from other apps.
Try it on the provided examples:
gridcalc example_excel.json # sales report, named ranges, IF/MATCH
gridcalc example_hybrid.json # progressive tax via py.* + aggregations
gridcalc example.json # PYTHON: numpy/pandas, list-comprehensions
gridcalc example_multisheet.json # 3-sheet budget, cross-sheet formulas
gridcalc example_lp.json # LP/MIP demo -- type :opt to solve
gridcalc example_goal.json # goal-seek demo -- :goal B1 = 11 by A1
Install
Two options:
pip install gridcalc # core: zero third-party runtime deps
pip install 'gridcalc[extras]' # adds numpy, pandas, pygments
Or with uv: uv tool install 'gridcalc[extras]'.
The core install has zero third-party runtime dependencies on
Linux and macOS -- the full 300+ Excel function library (statistical
distributions, financial functions, LINEST/TREND regression, ...)
works on stdlib alone. (The 3.10 wheel pulls tomli for config-file
parsing; 3.11+ uses stdlib tomllib. On Windows only, windows-curses
is pulled in because curses is not in the Windows stdlib.)
The [extras] bundle enables, all at once:
np.array(...)in formulas; LAPACK-backed solvers; fasterLINEST.pd.DataFrame(...),:pd load/save, DataFrame cell display.- Pygments syntax-highlight in the load-time trust prompt.
Quick tour
Cells hold a number, a label (any non-=-prefixed string), or a formula
(prefixed with =). Arrow keys move; Enter commits and moves down;
Tab commits and moves right.
A B C
1 Revenue Cost Margin
2 1000 600 =(A2-B2)/A2*100 <- formula
3 1200 700 =(A3-B3)/A3*100
4 Total =SUM(B2:B3) =AVG(C2:C3)
Press : for the command line. The basics:
| Command | Purpose |
|---|---|
:w [file] |
save (extension .json or .xlsx) |
:o file |
open |
:q, :q! |
quit, force-quit |
:e |
edit the workbook's Python code block in $EDITOR |
u, Ctrl-R |
undo / redo |
v |
enter visual selection mode (then y yanks, p pastes) |
/text |
search (n/N to cycle matches) |
> |
go to a named cell (e.g. > AA10) |
A full command reference lives in the Reference section below.
Modes
Each workbook has one of three evaluation modes, controlling which formulas parse and what's reachable from them:
| Mode | Grammar | Python escape hatch | Sandbox | Use case |
|---|---|---|---|---|
EXCEL |
strict Excel | none | not needed (no eval) |
xlsx interop, untrusted files |
HYBRID |
Excel + py.* |
code-block functions reachable as py.foo(...) |
code blocks only | most new sheets |
PYTHON |
Python eval() |
full Python expressions | full AST sandbox | numpy/pandas-heavy work |
Switch with :mode <name> -- the change is refused if any current
formula doesn't parse in the target mode. Files without an explicit
mode field load as PYTHON (back-compat). :xlsx load switches to
EXCEL automatically.
Formulas
=A1 + B1 * 2 arithmetic, Excel precedence
=(A1 + A2) / 2 grouping
=2^10 exponent (PYTHON: ** also works)
=50% percent postfix -> 0.5
="hello " & A1 string concat
=IF(A1 > 0, "pos", "neg") conditionals
=IFERROR(B1/C1, 0) error catch -- #DIV/0!, #VALUE!, #N/A, ...
=SUM(A1:A10) range -> 1D array
=SUM(A1:A3 * B1:B3) element-wise array arithmetic
=LET(x, SUM(A1:A9), x/COUNT(A1:A9)) local bindings -- compute once, reuse
=FILTER(A1:A9, B1:B9 > 0) dynamic arrays: FILTER/SORT/UNIQUE
=SUM(revenue) named range
=py.margin(A1, B1) HYBRID: call a code-block function
Excel error values (#DIV/0!, #N/A, #NAME?, #REF!, #VALUE!,
#NUM!, #NULL!) propagate through arithmetic and are catchable with
IFERROR/IFNA.
Built-in functions (always available): SUM, AVG, MIN, MAX,
COUNT, ABS, SQRT, INT, plus everything in math (sin, cos,
log, pi, e, ...).
Excel-compatible library (auto-loaded in EXCEL/HYBRID): IF,
IFERROR, AND, OR, NOT, ROUND, AVERAGE, MEDIAN, SUMIF,
COUNTIF, AVERAGEIF, LET, VLOOKUP, HLOOKUP, XLOOKUP, XMATCH,
INDEX, MATCH, FILTER, SORT, UNIQUE, SEQUENCE, CONCATENATE,
LEFT, RIGHT, MID, LEN, TRIM, UPPER, LOWER, SUBSTITUTE,
and 280+ others. Dynamic-array functions return whole rows/columns and
compose (=INDEX(SORT(A1:B9), 1, 2)).
PYTHON-only extras: the math module, Python builtins (sum,
min, max, abs, len), list comprehensions, and -- when the
relevant extras are installed -- np.array(...), np.linalg, matrix
multiply (@), and pd.DataFrame(...).
Named ranges & custom functions
:name revenue A1:A12 Define a named range (workbook-global)
:names List
:unname revenue Remove
Used directly in formulas: =SUM(revenue), =MAX(revenue - costs).
Open the per-workbook Python code block with :e. Anything defined there
becomes callable from formulas:
def margin(rev, cost):
return (rev - cost) / rev * 100
In HYBRID: =py.margin(A1, B1). In PYTHON: =margin(A1, B1).
EXCEL mode forbids code blocks entirely.
Cell references
$A$1 fixes both; $A1 fixes the column; A$1 fixes the row.
References adjust automatically on insert/delete/replicate.
Multi-sheet workbooks
:sheet List sheets (active marked *)
:sheet Inputs Switch by name
:sheet 1 Switch by zero-based index
:sheet add Outputs Append (does not switch)
:sheet del Tmp Remove (refused if last sheet)
:sheet rename Old New Rename, rewriting `Old!` prefixes in formulas
:sheet move Inputs 0 Reorder
Reference cells on other sheets with Sheet!cell:
=Sheet2!A1
=SUM(Sheet2!A1:A10)
=Sheet1!A1 + Sheet2!B1
The dep graph is keyed on (sheet, col, row) so cross-sheet recalc
works transparently. Cross-sheet ranges (Sheet1!A1:Sheet2!B5) are
not supported (Excel doesn't either).
Optimization
:opt solves linear and mixed-integer programs defined by cells in the
active sheet, via a vendored copy of lp_solve 5.5.
Models are workbook-persistent: define once, save the file, re-run
on reopen.
:opt Run the saved 'default' model
:opt max|min <cell> vars <cells> st <cells> [bounds <spec>] [int <cells>] [bin <cells>]
Solve inline AND save as 'default'
:opt def <name> max|min <cell> ... Save under <name>; does not execute
:opt run [<name>] Execute a saved model
:opt list List saved models
:opt undef <name> Remove a saved model
The model is sheet-resident: an objective formula in one cell,
decision-variable cells holding values, and constraint cells holding
comparison formulas like =A1+A2<=10. The constraint cells keep
evaluating during recalc, so the sheet shows live feasibility
(TRUE/FALSE) before and after the solve.
A worked example (also at examples/example_lp.json):
| A | B | C | D | |
|---|---|---|---|---|
| 3 | Decision | Objective | Constraints | |
| 4 | 0 |
=3*A4+5*A5 |
=A4<=4 |
|
| 5 | 0 |
=2*A5<=12 |
||
| 6 | =3*A4+2*A5<=18 |
:opt max B4 vars A4:A5 st D4:D6
Status bar shows opt: OPTIMAL obj=36; A4 and A5 become 2.0
and 6.0; u rolls back.
Clauses (any order after st):
bounds A1=lo:hi, B2=lo:hi-- per-variable bounds.lo/hiacceptinf,+inf,-inf. Default is[0, +inf).int <cells>-- decision variables are integer-valued (branch-and-bound).bin <cells>-- decision variables are binary ({0,1}); bounds clamped to[0,1].
Cell lists everywhere accept ranges (A1:A5), comma-separated refs
(A1,A3,B5), or a mix.
Saved models live under "models": {<name>: ...} in the JSON file
and round-trip verbatim (the spec strings the user typed are stored,
not pre-resolved coords).
Programmatic access:
from gridcalc.engine import Grid
from gridcalc.opt import solve
g = Grid()
g.jsonload("examples/example_lp.json")
g.recalc()
r = solve(g, objective_cell=(1, 3), decision_vars=[(0, 3), (0, 4)],
constraint_cells=[(3, 3), (3, 4), (3, 5)], maximize=True)
print(r.status_name, r.objective, r.values)
Goal-seek
For 1-D what-if ("what input makes this output equal X?"), use :goal:
:goal <formula_cell> = <target> by <var_cell> [in <lo>:<hi>]
:goal B10 = 100 by A1 auto-bracket from A1's current value
:goal B10 = 0 by A1 in -50:50 explicit search bracket
Uses bisection over Grid.recalc(); converges in milliseconds at
spreadsheet scale. The variable cell must hold a value (not a formula).
On success the variable cell is overwritten; u rolls back. Unlike
:opt, goal-seek isn't persisted -- the three args fit on one line, so
retyping is faster than naming.
Formatting
:f b Toggle bold (also Ctrl-B)
:f u Toggle underline (also Ctrl-U)
:f i Toggle italic
:f bi Combine: bold + italic
:f $ Dollar (2 decimal places)
:f % Percentage (value*100, 2 decimals)
:f I Integer (truncate)
:f * Bar chart (asterisks proportional to value)
:f L | R | G | D Left / right / general / use-global-format
:f ,.2f Any Python format spec: 1,234.50
:f .1% 15.7%
:f .2e 1.23e+04
:gf <fmt> sets the workbook-wide default format. :width <n> sets
column width (4-40). Labels longer than the column width spill into
adjacent empty cells, Excel-style.
Import / export
| Command | Reads | Writes | Notes |
|---|---|---|---|
:csv save/load |
CSV | CSV | Plain text, fast |
:xlsx save/load |
.xlsx formulas + values |
EXCEL-mode: formulas + cached values; other modes: values only | :xlsx load switches to EXCEL |
:pd save/load |
CSV/TSV/Excel/JSON/Parquet | same | Uses pandas; row 1 as headers |
:xlsx load translates Excel formulas into gridcalc's EXCEL grammar
and reads every sheet. INDIRECT and 3D ranges (Sheet1:Sheet3!A1:B2)
are deliberately unsupported -- they'd defeat the static dep graph.
Functions outside the auto-loaded library produce #NAME?.
File format
JSON, v2. v1 (single sheet, top-level cells) still loads.
{
"version": 2,
"mode": "HYBRID",
"active": "Inputs",
"code": "def margin(rev, cost):\n return (rev - cost) / rev * 100\n",
"names": { "revenue": "A1:A12", "costs": "B1:B12" },
"models": { "default": { "sense": "max", "objective": "B4",
"vars": "A4:A5", "constraints": "D4:D6" } },
"sheets": [
{ "name": "Inputs", "cells": [["Rev","Cost"],[1000,600],[1200,700]] },
{ "name": "Summary","cells": [["Total","=SUM(Inputs!A2:A3)"]] }
],
"format": { "width": 10 }
}
- mode:
"EXCEL"|"HYBRID"|"PYTHON". Absent →PYTHON. - sheets (v2): each is
{name, cells}with a 2Dcellsarray. - active (v2): name of the sheet to focus on load.
- names: workbook-global named ranges (sheet-relative when used).
- models: persisted LP/MIP definitions (see Optimization).
- code: per-workbook Python module string, editable via
:e.
Configuration
Optional gridcalc.toml (lookup: $PWD then $XDG_CONFIG_HOME/gridcalc/):
sandbox = true # AST validation of formulas + code blocks
width = 12 # default column width
format = "G" # default cell format
[keys.grid]
next_sheet = ["Tab", "F4"]
prev_sheet = ["S-Tab", "F3"]
cursor_left = ["Left", "h"]
cursor_down = ["Down", "j"]
cursor_up = ["Up", "k"]
cursor_right= ["Right", "l"]
Every TUI context (grid, entry, visual, cmdline, search) is
rebindable. User bindings fire before the hardcoded fallback chain,
so Tab → next_sheet replaces the default cursor-right meaning. See
docs/keybindings.md for the keyspec grammar
(Tab, S-Tab, C-x, C-Right, F3, ...) and rejected combinations.
Command reference
File :w [file] :wq :q :q! :o file :e
Edit :b :clear :dr :dc :ir :ic :m :r
:sort [col] [desc] yank/paste: y/p (syncs system clipboard)
undo/redo: u / Ctrl-R
Format :f <spec> :gf <spec> :width <n> Ctrl-B / Ctrl-U
Search /pattern n N
Sheets :sheet [name|N|add|del|rename|move]
Names :name <n> [range] :names :unname <n>
Modes :mode [excel|hybrid|python]
Import/export :csv save/load :xlsx save/load :pd save/load
Optimization :opt :opt def :opt run :opt list :opt undef
:goal <cell> = <target> by <cell> [in <lo>:<hi>]
View :view E :tv/:th/:tb/:tn (lock title rows/cols)
Limitations
INDIRECTis unsupported (would defeat the static dep graph).LAMBDAand its higher-order helpers (MAP,REDUCE,BYROW, ...) are unsupported;LETis supported. Dynamic-array results are packed into their origin cell rather than spilling into neighbours.- xlsx export of formulas is EXCEL-mode only -- PYTHON/HYBRID
syntax (
**, list comprehensions,py.*) isn't strict Excel. - 3D range refs (
Sheet1:Sheet3!A1:B2) are unsupported (returnsnan). Workaround: expand manually with+. - Cross-sheet ranges (
Sheet1!A1:Sheet2!B5) are rejected at parse time -- Excel doesn't support them either. - xlsx dates and styles aren't read or written; date serials arrive as floats.
Development
make build # rebuild the C++ extensions (_core, _opt)
make test # unit tests
make test-tty # PTY-driven curses integration tests (slow, requires xterm-256color)
make lint # ruff check
make typecheck # mypy
make qa # lint + typecheck + test + format
make wheel # cpXX-cpXX wheel for current Python
make wheel-abi3 # single cp312-abi3 wheel (Python>=3.12)
make sdist # source distribution
make publish # upload to PyPI (after make check)
The abi3 build is gated on GRIDCALC_STABLE_ABI=ON (CMake) +
wheel.py-api=cp312 (scikit-build-core). Per-version wheels and the
abi3 wheel have separate CI workflows under .github/workflows/.
Prior Art
- sc-im: A ncurses spreadsheet program for terminal
- sheets: A terminal based spreadsheet tool
- rustxl: A fast, keyboard-driven spreadsheet with vim-style navigation and Excel-compatible formulas.
License
MIT
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
Built Distributions
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 gridcalc-0.2.0.tar.gz.
File metadata
- Download URL: gridcalc-0.2.0.tar.gz
- Upload date:
- Size: 1.1 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9621dbad033494b8f79275636cddbf983b34d0337e00dda28c19d194bb0f4090
|
|
| MD5 |
2e5dfcf9906325526a2d9d7f11a8f111
|
|
| BLAKE2b-256 |
6e22694c26ede2234ffb9a104001c3474c64fce195772504063bf60da7ee32a0
|
File details
Details for the file gridcalc-0.2.0-cp313-cp313-win_amd64.whl.
File metadata
- Download URL: gridcalc-0.2.0-cp313-cp313-win_amd64.whl
- Upload date:
- Size: 680.0 kB
- Tags: CPython 3.13, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f85876dbcd0e7ad4e53a7b00c60dc13ca4c2fac72c1111567804418c11c26431
|
|
| MD5 |
798dd9a6d3c968f54507f7f096691289
|
|
| BLAKE2b-256 |
fdaedbbc666799080eee66c36b9a3582f8cc6bf269c05427fa565ad207505d72
|
File details
Details for the file gridcalc-0.2.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.
File metadata
- Download URL: gridcalc-0.2.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 1.2 MB
- Tags: CPython 3.13, manylinux: glibc 2.27+ x86-64, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
60723174645c9936c041da2456c492eaaf8cea12b2c9cf769b8dc2633b3143e9
|
|
| MD5 |
b7942be08431bde3f657cec810ba15c1
|
|
| BLAKE2b-256 |
5bc3849267806457f128ee1bbdbcd3b86b9b09c161726bf9818a680d347272e6
|
File details
Details for the file gridcalc-0.2.0-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl.
File metadata
- Download URL: gridcalc-0.2.0-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
- Upload date:
- Size: 1.1 MB
- Tags: CPython 3.13, manylinux: glibc 2.26+ ARM64, manylinux: glibc 2.28+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cceabf862a4b4e025a5553c761e26832073409f2f9728cb0e503003db061d3f7
|
|
| MD5 |
c4f73bb23f2ba12d3fa9515fed85d766
|
|
| BLAKE2b-256 |
dc4689307a6a4638682e5d64312d2351aeb2e6d3b66cb3d849fb286806b30154
|
File details
Details for the file gridcalc-0.2.0-cp313-cp313-macosx_11_0_arm64.whl.
File metadata
- Download URL: gridcalc-0.2.0-cp313-cp313-macosx_11_0_arm64.whl
- Upload date:
- Size: 714.1 kB
- Tags: CPython 3.13, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d721358a9d0a328be0729f189ec7812987a27e93aeb382b41d97d2d3f2565529
|
|
| MD5 |
bf14a7d544f3b1a60b5a126c1507dcd6
|
|
| BLAKE2b-256 |
75b2becd2fa934d663f1145f666c7fae7ac484af0f90538f052f14b0f510c45f
|
File details
Details for the file gridcalc-0.2.0-cp313-cp313-macosx_10_15_x86_64.whl.
File metadata
- Download URL: gridcalc-0.2.0-cp313-cp313-macosx_10_15_x86_64.whl
- Upload date:
- Size: 779.0 kB
- Tags: CPython 3.13, macOS 10.15+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3b823d1eea3482a7673d5877f54c171937f3c18cf6952a753a153f8e7634f554
|
|
| MD5 |
6d97222243ee9417cdadd3c6a0afeb3c
|
|
| BLAKE2b-256 |
1bf20e68acda5059d3be1281f57ad49aa1ea31028c34958a5cccb8fe0929e7c9
|
File details
Details for the file gridcalc-0.2.0-cp312-cp312-win_amd64.whl.
File metadata
- Download URL: gridcalc-0.2.0-cp312-cp312-win_amd64.whl
- Upload date:
- Size: 680.1 kB
- Tags: CPython 3.12, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2e9f9f53a6d2167711a3b8b67b65d41a936124345d4b8142dc722364d848a292
|
|
| MD5 |
d9c7b08515d08021c6d15140ba758201
|
|
| BLAKE2b-256 |
b50a3767a301e1b92b597a7ab66150f9427d48ea6f94f8c139c7f898ab8d9672
|
File details
Details for the file gridcalc-0.2.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.
File metadata
- Download URL: gridcalc-0.2.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 1.2 MB
- Tags: CPython 3.12, manylinux: glibc 2.27+ x86-64, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c8884ac22c868234c0c9aaa439fc3dbe664bbf589b64e3a47638b23ec020047c
|
|
| MD5 |
d46050e25149c8ef6d798388d9eb038b
|
|
| BLAKE2b-256 |
a2f5137597638c5b6b91162ac4208095727c54a0f29b4abf330a4c540abb1237
|
File details
Details for the file gridcalc-0.2.0-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl.
File metadata
- Download URL: gridcalc-0.2.0-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
- Upload date:
- Size: 1.1 MB
- Tags: CPython 3.12, manylinux: glibc 2.26+ ARM64, manylinux: glibc 2.28+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ec5f48e3536799d9f5353f941093dca66db7a58e369f1bcfe9500573e238dcd8
|
|
| MD5 |
331781568d15bea5e7f5e7f85fed7825
|
|
| BLAKE2b-256 |
c864e0b2f8371dd71017ab4566baf884d77211d93275fe21428f7c060a9452c7
|
File details
Details for the file gridcalc-0.2.0-cp312-cp312-macosx_11_0_arm64.whl.
File metadata
- Download URL: gridcalc-0.2.0-cp312-cp312-macosx_11_0_arm64.whl
- Upload date:
- Size: 714.1 kB
- Tags: CPython 3.12, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ee28aed6370df3b258bf74479a456851a3aeb673959a0e7ff78ab22b8db1b6d6
|
|
| MD5 |
17145bd957bf256e0cbee9bf83a530c9
|
|
| BLAKE2b-256 |
02a19e1b9c4fbd7d2e0790e4a13653de5675e8a32ff3e0bfe3c03bb1d131c6e3
|
File details
Details for the file gridcalc-0.2.0-cp312-cp312-macosx_10_15_x86_64.whl.
File metadata
- Download URL: gridcalc-0.2.0-cp312-cp312-macosx_10_15_x86_64.whl
- Upload date:
- Size: 779.1 kB
- Tags: CPython 3.12, macOS 10.15+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
17b0e30440f0d5a14bae82754d00ce141c42c2e3a9a0706181df52bb3d72726c
|
|
| MD5 |
1912c34d8e34ba33e7e6d75e183c62dd
|
|
| BLAKE2b-256 |
4d361cce7d29f9583db4c2d741778085947f86fa917dea091acae4fec657e6fa
|
File details
Details for the file gridcalc-0.2.0-cp312-abi3-win_amd64.whl.
File metadata
- Download URL: gridcalc-0.2.0-cp312-abi3-win_amd64.whl
- Upload date:
- Size: 678.7 kB
- Tags: CPython 3.12+, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
89e95e8564ee567a85be590afde8ff082c801553238803bb846735044438efb1
|
|
| MD5 |
b7211c8f623ca70d1c9ea318356308c8
|
|
| BLAKE2b-256 |
95c8f113781f962250380e0878022f3312bb95d1b42a588d5137c3aa274ca1a0
|
File details
Details for the file gridcalc-0.2.0-cp312-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.
File metadata
- Download URL: gridcalc-0.2.0-cp312-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 1.2 MB
- Tags: CPython 3.12+, manylinux: glibc 2.27+ x86-64, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9bc0178b0320e423f45290aa5142e0be49d6dd3358f07defa3200cc9c2c83d82
|
|
| MD5 |
16806fe1ddef434e6e86c4c65996d546
|
|
| BLAKE2b-256 |
905aa7866c338bcef1c99927b63440b34886fd43f2dd66b1e9dcbce0d1513891
|
File details
Details for the file gridcalc-0.2.0-cp312-abi3-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl.
File metadata
- Download URL: gridcalc-0.2.0-cp312-abi3-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
- Upload date:
- Size: 1.1 MB
- Tags: CPython 3.12+, manylinux: glibc 2.26+ ARM64, manylinux: glibc 2.28+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
caf9ce756b33bd1fb229361043aa2747e8fae865b335b2cc52ae7b8589d024b4
|
|
| MD5 |
9a77665a3dc3ff850310980c585a34b0
|
|
| BLAKE2b-256 |
8e44ca8b9d1852c1df034dad68dcb52f38f05597571424c6967069dc52da4189
|
File details
Details for the file gridcalc-0.2.0-cp312-abi3-macosx_11_0_arm64.whl.
File metadata
- Download URL: gridcalc-0.2.0-cp312-abi3-macosx_11_0_arm64.whl
- Upload date:
- Size: 712.1 kB
- Tags: CPython 3.12+, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ee660055cc7ba528002eb56225267b11ea6784ac46db50111239fbd11a7523a8
|
|
| MD5 |
e3a270d71a6d7c35726c39651e046f64
|
|
| BLAKE2b-256 |
652e34505fcd7b0d96b61e9fa313d0e6b794fc33b0ecb22b6eeeed6d22adf804
|
File details
Details for the file gridcalc-0.2.0-cp312-abi3-macosx_10_15_x86_64.whl.
File metadata
- Download URL: gridcalc-0.2.0-cp312-abi3-macosx_10_15_x86_64.whl
- Upload date:
- Size: 776.8 kB
- Tags: CPython 3.12+, macOS 10.15+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
81b67fb5e65f3dd219dcd748aabc66886ba74ef33c911930f873a1546b225ffb
|
|
| MD5 |
9ca8bb05c74f08d739d06e372ced0ddd
|
|
| BLAKE2b-256 |
287717ba0dfb98622b03801b73844db527d8c294f20f867a9952b00f8093e1f6
|
File details
Details for the file gridcalc-0.2.0-cp311-cp311-win_amd64.whl.
File metadata
- Download URL: gridcalc-0.2.0-cp311-cp311-win_amd64.whl
- Upload date:
- Size: 681.5 kB
- Tags: CPython 3.11, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
357c0259382d1cf35313b22def3deadd34bc832e2efb688dad8668f60d57d2aa
|
|
| MD5 |
649f5d565e0385cb4cfd7b402f03ae3c
|
|
| BLAKE2b-256 |
13c6dd74768f188dba36b45364a5efbd4f803e86cfae91a90ec508a5fee08cbb
|
File details
Details for the file gridcalc-0.2.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.
File metadata
- Download URL: gridcalc-0.2.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 1.2 MB
- Tags: CPython 3.11, manylinux: glibc 2.27+ x86-64, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3a704520496efa7f9e7862077093d9f1e207595eec2396e52ddf9468676a02db
|
|
| MD5 |
1bba0a2bf9a58554e2ade25dd81f7e1b
|
|
| BLAKE2b-256 |
ea21c0b8de9738ea7aff903a94ab38ebb6a85def7d7df9e91a1ca00341acf96c
|
File details
Details for the file gridcalc-0.2.0-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl.
File metadata
- Download URL: gridcalc-0.2.0-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
- Upload date:
- Size: 1.1 MB
- Tags: CPython 3.11, manylinux: glibc 2.26+ ARM64, manylinux: glibc 2.28+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
65a767a3d573354acab41e8c39539b540ec72ff779721eb8f23533e135563053
|
|
| MD5 |
f76a43691d9feea7fb81040ec726a1a9
|
|
| BLAKE2b-256 |
526abf5c548a777eab9b50f588c88ba3ea9801074bea8a93b47e717e566c3f35
|
File details
Details for the file gridcalc-0.2.0-cp311-cp311-macosx_11_0_arm64.whl.
File metadata
- Download URL: gridcalc-0.2.0-cp311-cp311-macosx_11_0_arm64.whl
- Upload date:
- Size: 716.8 kB
- Tags: CPython 3.11, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5e5248b19ba3215f146d52d05dc6222326af7e3eb49d9963b6487572a8fc21c9
|
|
| MD5 |
dde895b5a5e92594da90c23bf48ceca9
|
|
| BLAKE2b-256 |
98948d25e3d258d87a135a35a4d907277820a072a03742e9fc8d4a10c4d5b9bb
|
File details
Details for the file gridcalc-0.2.0-cp311-cp311-macosx_10_15_x86_64.whl.
File metadata
- Download URL: gridcalc-0.2.0-cp311-cp311-macosx_10_15_x86_64.whl
- Upload date:
- Size: 781.0 kB
- Tags: CPython 3.11, macOS 10.15+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
56913520e548c89fbbd4297b2897b43cf75cf7ef4bffe3e35d767cd54b0632f5
|
|
| MD5 |
8e980d4dcac83e2c210239fea431b3ec
|
|
| BLAKE2b-256 |
37bc09e81174916f69af1cd577a19204b1eb5c5ecf0920360b1852f0c6a619d8
|
File details
Details for the file gridcalc-0.2.0-cp310-cp310-win_amd64.whl.
File metadata
- Download URL: gridcalc-0.2.0-cp310-cp310-win_amd64.whl
- Upload date:
- Size: 681.7 kB
- Tags: CPython 3.10, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
36369b20637ee0865544399eec2e4c153facc17256ca33092c3f5f3f9bcc9ec6
|
|
| MD5 |
72838df0272f364c5c5b60eea470d742
|
|
| BLAKE2b-256 |
cf0c4f1bdcae86339c44de63c0bd0df1e279057bb3ef4325162f47c99b841e37
|
File details
Details for the file gridcalc-0.2.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.
File metadata
- Download URL: gridcalc-0.2.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 1.2 MB
- Tags: CPython 3.10, manylinux: glibc 2.27+ x86-64, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5c194902bd456508f350349c468776dc9d251073e4392c547cf390d624549147
|
|
| MD5 |
381e8f76b29636204c1b65d8e0b29da4
|
|
| BLAKE2b-256 |
c7f55b2f5be7cc98b7950ca07d9d5d342797e4ca680287a935c8015962cb049d
|
File details
Details for the file gridcalc-0.2.0-cp310-cp310-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl.
File metadata
- Download URL: gridcalc-0.2.0-cp310-cp310-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
- Upload date:
- Size: 1.1 MB
- Tags: CPython 3.10, manylinux: glibc 2.26+ ARM64, manylinux: glibc 2.28+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
897ada2ebb0841de2cd6d64070673c37cf8030a31719d2b64e5b591916f2458b
|
|
| MD5 |
31ac9d39b716f48569816876d03fe4e3
|
|
| BLAKE2b-256 |
c9f478686f69a896ece39fc30d800ab3f8d332128fda82768a4ff7dcbafad87a
|
File details
Details for the file gridcalc-0.2.0-cp310-cp310-macosx_11_0_arm64.whl.
File metadata
- Download URL: gridcalc-0.2.0-cp310-cp310-macosx_11_0_arm64.whl
- Upload date:
- Size: 717.0 kB
- Tags: CPython 3.10, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e9c19e4af0d69fb066185449964f843b58c918245745d4fa4c93c54f4bb3b62b
|
|
| MD5 |
cb6d9633153f9fa7711c50cb7e5751d6
|
|
| BLAKE2b-256 |
852eeac58ddefda41116acb5ff98d2b1b7c0a27ca2ca732787f2582af49360d2
|
File details
Details for the file gridcalc-0.2.0-cp310-cp310-macosx_10_15_x86_64.whl.
File metadata
- Download URL: gridcalc-0.2.0-cp310-cp310-macosx_10_15_x86_64.whl
- Upload date:
- Size: 781.3 kB
- Tags: CPython 3.10, macOS 10.15+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fab59c21c8cd4835ef12f41040dfd940114ac21c5b0a0b9143c92143de092082
|
|
| MD5 |
494b54bd6e09beb0e157e4cb1bcc9b3d
|
|
| BLAKE2b-256 |
4a2c95bf8ec264b138dd50e85d6097cff05e2a6cf3317d197f016d57624ad1cf
|