labnotes 0.0.40__tar.gz → 0.0.42__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {labnotes-0.0.40 → labnotes-0.0.42}/PKG-INFO +1 -1
- {labnotes-0.0.40 → labnotes-0.0.42}/src/labnotes/context.md +4 -5
- {labnotes-0.0.40 → labnotes-0.0.42}/src/labnotes/models.py +1 -1
- {labnotes-0.0.40 → labnotes-0.0.42}/src/labnotes/runner/read_experiment_config.py +1 -1
- {labnotes-0.0.40 → labnotes-0.0.42}/src/labnotes/summarize_config.py +3 -3
- {labnotes-0.0.40 → labnotes-0.0.42}/.gitignore +0 -0
- {labnotes-0.0.40 → labnotes-0.0.42}/CHANGELOG.md +0 -0
- {labnotes-0.0.40 → labnotes-0.0.42}/MIGRATIONS.md +0 -0
- {labnotes-0.0.40 → labnotes-0.0.42}/README.md +0 -0
- {labnotes-0.0.40 → labnotes-0.0.42}/pyproject.toml +0 -0
- {labnotes-0.0.40 → labnotes-0.0.42}/src/labnotes/__init__.py +0 -0
- {labnotes-0.0.40 → labnotes-0.0.42}/src/labnotes/asset_url.py +0 -0
- {labnotes-0.0.40 → labnotes-0.0.42}/src/labnotes/cell_progress.py +0 -0
- {labnotes-0.0.40 → labnotes-0.0.42}/src/labnotes/check_counts.py +0 -0
- {labnotes-0.0.40 → labnotes-0.0.42}/src/labnotes/cli.py +0 -0
- {labnotes-0.0.40 → labnotes-0.0.42}/src/labnotes/context_guide.py +0 -0
- {labnotes-0.0.40 → labnotes-0.0.42}/src/labnotes/count_runs.py +0 -0
- {labnotes-0.0.40 → labnotes-0.0.42}/src/labnotes/create_app.py +0 -0
- {labnotes-0.0.40 → labnotes-0.0.42}/src/labnotes/create_experiment.py +0 -0
- {labnotes-0.0.40 → labnotes-0.0.42}/src/labnotes/data_html.py +0 -0
- {labnotes-0.0.40 → labnotes-0.0.42}/src/labnotes/default_config_text.py +0 -0
- {labnotes-0.0.40 → labnotes-0.0.42}/src/labnotes/default_counts.py +0 -0
- {labnotes-0.0.40 → labnotes-0.0.42}/src/labnotes/drain_watch.py +0 -0
- {labnotes-0.0.40 → labnotes-0.0.42}/src/labnotes/experiment_notes.py +0 -0
- {labnotes-0.0.40 → labnotes-0.0.42}/src/labnotes/experiment_progress.py +0 -0
- {labnotes-0.0.40 → labnotes-0.0.42}/src/labnotes/experiment_runs.py +0 -0
- {labnotes-0.0.40 → labnotes-0.0.42}/src/labnotes/experiments.py +0 -0
- {labnotes-0.0.40 → labnotes-0.0.42}/src/labnotes/format_value.py +0 -0
- {labnotes-0.0.40 → labnotes-0.0.42}/src/labnotes/init.py +0 -0
- {labnotes-0.0.40 → labnotes-0.0.42}/src/labnotes/list_experiments.py +0 -0
- {labnotes-0.0.40 → labnotes-0.0.42}/src/labnotes/list_runs.py +0 -0
- {labnotes-0.0.40 → labnotes-0.0.42}/src/labnotes/load_config.py +0 -0
- {labnotes-0.0.40 → labnotes-0.0.42}/src/labnotes/load_experiment.py +0 -0
- {labnotes-0.0.40 → labnotes-0.0.42}/src/labnotes/notebook_kernel.py +0 -0
- {labnotes-0.0.40 → labnotes-0.0.42}/src/labnotes/output_html.py +0 -0
- {labnotes-0.0.40 → labnotes-0.0.42}/src/labnotes/parse_run_view.py +0 -0
- {labnotes-0.0.40 → labnotes-0.0.42}/src/labnotes/pivot_cells.py +0 -0
- {labnotes-0.0.40 → labnotes-0.0.42}/src/labnotes/print_rows.py +0 -0
- {labnotes-0.0.40 → labnotes-0.0.42}/src/labnotes/python_blocks.py +0 -0
- {labnotes-0.0.40 → labnotes-0.0.42}/src/labnotes/read_config.py +0 -0
- {labnotes-0.0.40 → labnotes-0.0.42}/src/labnotes/read_path.py +0 -0
- {labnotes-0.0.40 → labnotes-0.0.42}/src/labnotes/render_markdown.py +0 -0
- {labnotes-0.0.40 → labnotes-0.0.42}/src/labnotes/runner/__init__.py +0 -0
- {labnotes-0.0.40 → labnotes-0.0.42}/src/labnotes/runner/describe_event.py +0 -0
- {labnotes-0.0.40 → labnotes-0.0.42}/src/labnotes/runner/execute_run.py +0 -0
- {labnotes-0.0.40 → labnotes-0.0.42}/src/labnotes/runner/hold_folder.py +0 -0
- {labnotes-0.0.40 → labnotes-0.0.42}/src/labnotes/runner/new_invocation_id.py +0 -0
- {labnotes-0.0.40 → labnotes-0.0.42}/src/labnotes/runner/new_run_id.py +0 -0
- {labnotes-0.0.40 → labnotes-0.0.42}/src/labnotes/runner/new_stamped_run_id.py +0 -0
- {labnotes-0.0.40 → labnotes-0.0.42}/src/labnotes/runner/param_args.py +0 -0
- {labnotes-0.0.40 → labnotes-0.0.42}/src/labnotes/runner/param_grid.py +0 -0
- {labnotes-0.0.40 → labnotes-0.0.42}/src/labnotes/runner/plan_runs.py +0 -0
- {labnotes-0.0.40 → labnotes-0.0.42}/src/labnotes/runner/run_experiment.py +0 -0
- {labnotes-0.0.40 → labnotes-0.0.42}/src/labnotes/runner/run_folder.py +0 -0
- {labnotes-0.0.40 → labnotes-0.0.42}/src/labnotes/runner/run_headless.py +0 -0
- {labnotes-0.0.40 → labnotes-0.0.42}/src/labnotes/runner/runs_parent.py +0 -0
- {labnotes-0.0.40 → labnotes-0.0.42}/src/labnotes/runner/shell_command.py +0 -0
- {labnotes-0.0.40 → labnotes-0.0.42}/src/labnotes/runner/start_experiment.py +0 -0
- {labnotes-0.0.40 → labnotes-0.0.42}/src/labnotes/runner/stop_then_kill.py +0 -0
- {labnotes-0.0.40 → labnotes-0.0.42}/src/labnotes/runner/wait_for_group.py +0 -0
- {labnotes-0.0.40 → labnotes-0.0.42}/src/labnotes/runner/write_run_json.py +0 -0
- {labnotes-0.0.40 → labnotes-0.0.42}/src/labnotes/saved_outputs.py +0 -0
- {labnotes-0.0.40 → labnotes-0.0.42}/src/labnotes/serve_app.py +0 -0
- {labnotes-0.0.40 → labnotes-0.0.42}/src/labnotes/server.py +0 -0
- {labnotes-0.0.40 → labnotes-0.0.42}/src/labnotes/sort_href.py +0 -0
- {labnotes-0.0.40 → labnotes-0.0.42}/src/labnotes/sql_quote.py +0 -0
- {labnotes-0.0.40 → labnotes-0.0.42}/src/labnotes/static/labnotes.css +0 -0
- {labnotes-0.0.40 → labnotes-0.0.42}/src/labnotes/static/row-link.js +0 -0
- {labnotes-0.0.40 → labnotes-0.0.42}/src/labnotes/static/run-cell.js +0 -0
- {labnotes-0.0.40 → labnotes-0.0.42}/src/labnotes/static/view-toggle.js +0 -0
- {labnotes-0.0.40 → labnotes-0.0.42}/src/labnotes/stop_idle_kernels.py +0 -0
- {labnotes-0.0.40 → labnotes-0.0.42}/src/labnotes/tables/__init__.py +0 -0
- {labnotes-0.0.40 → labnotes-0.0.42}/src/labnotes/tables/experiment_rows.py +0 -0
- {labnotes-0.0.40 → labnotes-0.0.42}/src/labnotes/tables/file_prefix.py +0 -0
- {labnotes-0.0.40 → labnotes-0.0.42}/src/labnotes/tables/iso_time.py +0 -0
- {labnotes-0.0.40 → labnotes-0.0.42}/src/labnotes/tables/list_experiment_runs.py +0 -0
- {labnotes-0.0.40 → labnotes-0.0.42}/src/labnotes/tables/open_tables.py +0 -0
- {labnotes-0.0.40 → labnotes-0.0.42}/src/labnotes/tables/path_glob.py +0 -0
- {labnotes-0.0.40 → labnotes-0.0.42}/src/labnotes/tables/path_pattern.py +0 -0
- {labnotes-0.0.40 → labnotes-0.0.42}/src/labnotes/tables/read_experiment.py +0 -0
- {labnotes-0.0.40 → labnotes-0.0.42}/src/labnotes/tables/read_file.py +0 -0
- {labnotes-0.0.40 → labnotes-0.0.42}/src/labnotes/tables/read_run.py +0 -0
- {labnotes-0.0.40 → labnotes-0.0.42}/src/labnotes/tables/summarize_experiments.py +0 -0
- {labnotes-0.0.40 → labnotes-0.0.42}/src/labnotes/templates/base.html +0 -0
- {labnotes-0.0.40 → labnotes-0.0.42}/src/labnotes/templates/experiment.html +0 -0
- {labnotes-0.0.40 → labnotes-0.0.42}/src/labnotes/templates/index.html +0 -0
- {labnotes-0.0.40 → labnotes-0.0.42}/src/labnotes/templates/macros.html +0 -0
- {labnotes-0.0.40 → labnotes-0.0.42}/src/labnotes/tui/__init__.py +0 -0
- {labnotes-0.0.40 → labnotes-0.0.42}/src/labnotes/tui/dim.py +0 -0
- {labnotes-0.0.40 → labnotes-0.0.42}/src/labnotes/tui/format_elapsed.py +0 -0
- {labnotes-0.0.40 → labnotes-0.0.42}/src/labnotes/tui/run_app.py +0 -0
- {labnotes-0.0.40 → labnotes-0.0.42}/src/labnotes/tui/run_tui.py +0 -0
- {labnotes-0.0.40 → labnotes-0.0.42}/testing-conventions.toml +0 -0
- {labnotes-0.0.40 → labnotes-0.0.42}/uv.lock +0 -0
|
@@ -56,11 +56,10 @@ effort = ["low", "high"]
|
|
|
56
56
|
`name` is optional: a display name for the experiment, shown in the live view
|
|
57
57
|
and as `display_name` in `experiments`. The folder name stays the key, so
|
|
58
58
|
renaming the experiment means editing `name`.
|
|
59
|
-
Each combination of `[params]` runs `repeats` times, round-robin
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
again, whatever is already on disk. The default is `mode = "fill"`.
|
|
59
|
+
Each combination of `[params]` runs `repeats` times (1 if omitted), round-robin, on every
|
|
60
|
+
`run`, whatever is already on disk. That is `mode = "adhoc"`, the default.
|
|
61
|
+
`mode = "fill"` counts what is there: only runs that count fill a combination,
|
|
62
|
+
so running again fills in what failed or never ran.
|
|
64
63
|
Each run gets a new run folder, named for the UTC time it was planned (`20261020-000429-brave-fox`), so folder listings sort by start. `command` runs in a shell from the root, with
|
|
65
64
|
`{run_dir}` replaced by the run folder's absolute path. Pass it to the
|
|
66
65
|
script so it writes its outputs there.
|
|
@@ -40,7 +40,7 @@ def read_experiment_config(path: Path) -> ExperimentConfig:
|
|
|
40
40
|
counts = values.get("counts", DEFAULT_COUNTS)
|
|
41
41
|
if not isinstance(counts, str) or not counts.strip():
|
|
42
42
|
raise ValueError(f"{path}: counts must be a SQL condition")
|
|
43
|
-
mode = values.get("mode", "
|
|
43
|
+
mode = values.get("mode", "adhoc")
|
|
44
44
|
if mode not in MODES:
|
|
45
45
|
raise ValueError(f"{path}: mode must be fill or adhoc")
|
|
46
46
|
return ExperimentConfig(command, repeats, params, name, counts, mode)
|
|
@@ -15,14 +15,14 @@ def summarize_config(config: dict[str, object] | None) -> dict[str, object]:
|
|
|
15
15
|
cells = prod(len(values) for values in varies.values())
|
|
16
16
|
command = config.get("command")
|
|
17
17
|
counts = config.get("counts")
|
|
18
|
-
|
|
18
|
+
fill = config.get("mode") == "fill"
|
|
19
19
|
return {
|
|
20
20
|
"fixed": {},
|
|
21
21
|
"varies": varies,
|
|
22
22
|
"cell_count": cells,
|
|
23
23
|
"runs_per_cell": repeats,
|
|
24
|
-
"target": cells * repeats if repeats is not None and
|
|
24
|
+
"target": cells * repeats if repeats is not None and fill else None,
|
|
25
25
|
"completed_run": counts if isinstance(counts, str) else DEFAULT_COUNTS,
|
|
26
|
-
"mode": "
|
|
26
|
+
"mode": "fill" if fill else "adhoc",
|
|
27
27
|
"other": {} if command is None else {"command": command},
|
|
28
28
|
}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|