Structured INPUT availability#
Purpose#
Input item availability metadata describes when an INPUT parameter is applicable. It is used by documentation and tooling; it does not reject or alter a user’s INPUT based on this condition. Runtime diagnostics, if added, must define how explicitly supplied parameters whose conditions are false are handled.
Invariants#
The C++
Input_Itemregistration is the source of truth. YAML and Markdown are generated artifacts.Every non-empty registration is canonical.
set_availability()rejects syntax errors and non-canonical spelling.The AST is the stored representation; the exported string is serialized from it, so the two forms cannot diverge.
Every expression is a complete, independently evaluable predicate. It must include enclosing requirements rather than inheriting them implicitly from a referenced parameter.
After all INPUT items are registered, every referenced label, operator and literal is checked against machine-readable parameter type information.
Grammar and meaning#
expression := or-expression
or-expression := and-expression ("or" and-expression)*
and-expression := primary (("and" | ",") primary)*
primary := condition | "(" expression ")"
condition := parameter comparison value
| parameter "in" "[" value "," value ("," value)* "]"
| parameter "contains" value
comparison := "==" | "!=" | ">" | ">=" | "<" | "<="
value := token | '"' quoted-value '"'
and binds more tightly than or. == compares one complete value; double quotes delimit a complete value containing whitespace, such as relax_method=="cg 2". Two or more alternatives use in [...], while parameter contains value tests whether a vector contains one element, such as td_ttype contains 0. / is an ordinary value character, not another spelling of membership. Ordered comparisons require a numeric scalar.
A path that references a parameter must imply that parameter’s availability. Every and operand is required, while satisfying either branch of an or is sufficient. Repeated and or or groups are order-independent. Different leaf conditions are not related; for example, mode==a does not satisfy mode in [a, b].
Examples:
item.set_availability("basis_type==pw");
item.set_availability("vdw_method in [d2, d3_0]");
item.set_availability("td_ttype contains 2");
item.set_availability("esolver_type==sdft and method_sto==2");
Registration and validation workflow#
Parse and require canonical spelling in
set_availability().Finish registering all
Input_Itemobjects.Validate referenced parameter names, operator compatibility, literal values, and that every referenced parameter carries its own enclosing requirements on the referencing path.
Serialize the AST into
docs/parameters.yaml.Generate
docs/advanced/input_files/input-main.mdfrom that YAML.
Runtime evaluation is outside this metadata contract. Any implementation must define evaluation timing, treatment of defaults and reset values, and warning behavior for explicitly supplied parameters.