Skip to main content

RunScope

A progress bar that doesn't lie. Calibrated ETAs and completion intelligence for long-running Python jobs.

from runscope import trange           # drop-in for tqdm

for i in trange(48000, key="terrain_analysis"):
    process(tile(i))
terrain_analysis  ▕████████░░░░░░░░░░░░▏ 38%  17,492/48,000
  47m elapsed · about 1h 20m left · done ~10:42 PM
  likely 1h 12m–1h 31m · confidence high

Ordinary progress bars assume the rest of your job looks like the part that already ran. That assumption breaks exactly when it matters — when the expensive work is at the end. RunScope gives you an honest range instead of a fake exact number, and it learns your recurring jobs so each run's estimate gets better than the last.


Install

pip install runscope        # free, local, zero dependencies

Use it

1. Wrap any loop

import runscope

for item in runscope.track(items, key="my_job"):
    process(item)

2. Drop-in for tqdm

from runscope import trange
for i in trange(10000, key="my_job"):
    ...

3. Tell it how "big" each item is (stronger estimates)

for path in runscope.track(files, key="ingest", weight=lambda p: p.stat().st_size):
    process(path)

4. Peek at the future for known-heterogeneous jobs

# checks a tiny representative sample of the REMAINING work up front, so a
# back-loaded job can't ambush you with a 3x longer runtime at the end
for item in runscope.track(items, key="my_job", weight=size_of, measure=True):
    process(item)

5. Instrument an existing script without editing it

runscope run train.py        # transparently upgrades tqdm bars in the script

How it works (you never have to think about this)

Three layers combine automatically:

Layer What it does When it kicks in
Now size-weighted estimate from the current run always
Memory learns how this job actually behaves and calibrates after ~3 runs of the same key
Peek samples a little of the remaining work to catch heavy tails measure=True

The key is what ties runs of the same job together so RunScope can learn. Use a stable name for recurring jobs (key="nightly_terrain").

Free vs Pro

  • Free: local calibrated ETAs, honest ranges, and per-job history on your machine. No account, no network, no dependencies.
  • Pro (coming): cloud history across machines, "today vs your last 20 runs," and push/Slack alerts when a job blows past its ETA or stalls.

What it's good at (and what it isn't)

RunScope is for enumerable work — loops over files, records, images, tiles, simulations, parameter grids, API calls. That covers a huge amount of scientific and data-processing work.

It does not try to predict the runtime of an arbitrary opaque operation with no sub-steps and no history. When there isn't enough information to estimate honestly, it tells you so instead of inventing a number. That restraint is on purpose.

The science

RunScope's estimators are not heuristics someone made up. They come from a research program (ETA-Proto) that tested dozens of ETA methods against a simple baseline under preregistered pass/fail gates and kept only what won by a required margin. The core finding: for enumerable jobs, a size-weighted estimate is very hard to beat — except by measuring a small sample of the unexecuted work, which cut remaining-time error 40–90% on hard, heterogeneous workloads. That measurement is the measure=True mode.

License

Apache-2.0.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

runscope-0.1.2.tar.gz (19.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

runscope-0.1.2-py3-none-any.whl (18.0 kB view details)

Uploaded Python 3

File details

Details for the file runscope-0.1.2.tar.gz.

File metadata

  • Download URL: runscope-0.1.2.tar.gz
  • Upload date:
  • Size: 19.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.13.5

File hashes

Hashes for runscope-0.1.2.tar.gz
Algorithm Hash digest
SHA256 2ebfb22fa4c40d34f591a0662567644fd28970017ca3a57f0349a961eac3037f
MD5 ac3d1fd7fd359754faad5915762053fd
BLAKE2b-256 c8b1d4882fe8896154d8dd8fe6f03854b92feee0a27f1c50e7ab7ff98dba5c5b

See more details on using hashes here.

File details

Details for the file runscope-0.1.2-py3-none-any.whl.

File metadata

  • Download URL: runscope-0.1.2-py3-none-any.whl
  • Upload date:
  • Size: 18.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.13.5

File hashes

Hashes for runscope-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 4ee711ca7a422db68903a67424968ae74f472baa6a1a1688bb015dbf900b0e12
MD5 4c1f3c14fabd3f2211accc3c112b80c3
BLAKE2b-256 a9d6ff1b952927a6248c0e49bf6880216d5d5f7daada6954e9c2c519a45f1876

See more details on using hashes here.

Release history Release notifications | RSS feed

0.1.8

2 files

0.1.7

2 files

0.1.6

2 files

0.1.5

2 files

0.1.4

2 files

0.1.3

2 files

This release

0.1.2 This release

2 files

0.1.0

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page