Skip to content

Commit 23f17be

Browse files
sbryngelsonclaude
andcommitted
Add Constraints column to full table view and new range constraints
Add a dedicated Constraints column to the full table view instead of stuffing dependency info into the Description parenthetically. Reformat dependency text with backtick-wrapped param names and leading action (e.g. 'Requires `a_x`, `x_a`, `x_b` when enabled'). Add value labels to when_value conditions for readability. Add range constraints for dt, t_stop, t_save, cfl_target, cfl_max, weno_eps, R0ref, sigma, nb, num_source, num_probes, num_integrals, t_step_save, t_step_print. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent 7b8d1e4 commit 23f17be

2 files changed

Lines changed: 38 additions & 13 deletions

File tree

toolchain/mfc/params/definitions.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -547,10 +547,30 @@ def get_value_label(param_name: str, value: int) -> str:
547547
"value_labels": {1: "single", 2: "double"},
548548
},
549549

550+
# Time stepping (must be positive)
551+
"dt": {"min": 0},
552+
"t_stop": {"min": 0},
553+
"t_save": {"min": 0},
554+
"t_step_save": {"min": 1},
555+
"t_step_print": {"min": 1},
556+
"cfl_target": {"min": 0},
557+
"cfl_max": {"min": 0},
558+
559+
# WENO
560+
"weno_eps": {"min": 0},
561+
562+
# Physics (must be non-negative)
563+
"R0ref": {"min": 0},
564+
"sigma": {"min": 0},
565+
550566
# Counts (must be positive)
551567
"num_fluids": {"min": 1, "max": 10},
552568
"num_patches": {"min": 0, "max": 10},
553569
"num_ibs": {"min": 0, "max": 10},
570+
"num_source": {"min": 1},
571+
"num_probes": {"min": 1},
572+
"num_integrals": {"min": 1},
573+
"nb": {"min": 1},
554574
"m": {"min": 0},
555575
"n": {"min": 0},
556576
"p": {"min": 0},

toolchain/mfc/params/generators/docs_gen.py

Lines changed: 18 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -119,25 +119,30 @@ def _format_constraints(param) -> str:
119119
return ", ".join(parts)
120120

121121

122+
def _backtick_list(names: list) -> str:
123+
"""Format a list of parameter names with backticks."""
124+
return ", ".join(f"`{n}`" for n in names)
125+
126+
122127
def _format_requires_value(rv: Dict[str, list]) -> str:
123128
"""Format a requires_value dict with human-readable labels."""
124129
items = []
125130
for param, vals in rv.items():
126131
labeled = [f"{v} ({get_value_label(param, v)})" if get_value_label(param, v) != str(v) else str(v)
127132
for v in vals]
128-
items.append(f"{param} = {' or '.join(labeled)}")
133+
items.append(f"`{param}` = {' or '.join(labeled)}")
129134
return ", ".join(items)
130135

131136

132137
def _format_condition(trigger: str, condition: Dict[str, Any]) -> List[str]:
133138
"""Format a single condition dict into a list of description strings."""
134139
parts = []
135140
if "requires" in condition:
136-
parts.append(f"When {trigger}, requires: {', '.join(condition['requires'])}")
141+
parts.append(f"Requires {_backtick_list(condition['requires'])} when {trigger}")
137142
if "requires_value" in condition:
138-
parts.append(f"When {trigger}, requires {_format_requires_value(condition['requires_value'])}")
143+
parts.append(f"Requires {_format_requires_value(condition['requires_value'])} when {trigger}")
139144
if "recommends" in condition:
140-
parts.append(f"When {trigger}, recommends: {', '.join(condition['recommends'])}")
145+
parts.append(f"Recommends {_backtick_list(condition['recommends'])} when {trigger}")
141146
return parts
142147

143148

@@ -157,7 +162,9 @@ def _format_dependencies(param_name: str) -> str:
157162

158163
if "when_value" in dep:
159164
for val, condition in dep["when_value"].items():
160-
parts.extend(_format_condition(f"= {val}", condition))
165+
label = get_value_label(param_name, val)
166+
val_str = f"{val} ({label})" if label != str(val) else str(val)
167+
parts.extend(_format_condition(f"= {val_str}", condition))
161168

162169
return "; ".join(parts)
163170

@@ -309,23 +316,21 @@ def generate_parameter_docs() -> str: # pylint: disable=too-many-locals,too-man
309316
lines.append("")
310317
else:
311318
# Full table - no patterns to collapse
312-
lines.append("| Parameter | Type | Description |")
313-
lines.append("|-----------|------|-------------|")
319+
lines.append("| Parameter | Type | Description | Constraints |")
320+
lines.append("|-----------|------|-------------|-------------|")
314321

315322
for name, param in params:
316323
type_str = _type_to_str(param.param_type)
317324
desc = get_description(name) or ""
325+
# Truncate long descriptions
326+
if len(desc) > 80:
327+
desc = desc[:77] + "..."
318328
constraints = _format_constraints(param)
319329
deps = _format_dependencies(name)
320330
extra = "; ".join(filter(None, [constraints, deps]))
321-
if extra:
322-
desc = f"{desc} ({extra})" if desc else extra
323-
# Truncate long descriptions
324-
if len(desc) > 120:
325-
desc = desc[:117] + "..."
326331
# Escape % for Doxygen
327332
name_escaped = _escape_percent(name)
328-
lines.append(f"| `{name_escaped}` | {type_str} | {desc} |")
333+
lines.append(f"| `{name_escaped}` | {type_str} | {desc} | {extra} |")
329334

330335
lines.append("")
331336

0 commit comments

Comments
 (0)