DSC filter syntax
This document specifically focus on the syntax of @FILTER
in dsc
(for users) and -c
option in dsc-query
(for developers).
For users
DSC filtering syntax, when applied in @FILTER
, selects parameter combinations to allow for only a subset of modules can stem from a module definition.
The basic structure for a filtering statement @FILTER
is
C_i = {parameter}_i {condition operator} {value}
C = C_1 {logic operator} C_2 {logic operator} ...
Where we support
- condition operators:
=, ==, >, <, >=, <=, !=, in
- logic operators:
AND
,OR
,NOT
, or derived compound logic, eg((NOT (a AND b) OR c) AND d)
Notice that in
logic will have to use []
, eg, in [1,2,3]
, not in (1,2,3)
because ()
is reserved for specifying order of operations (precedence). Misuse of ()
will lead to parser error.
Here is an example:
simulate: sim.R
n: 10, 20, 150, 200
@FILTER: n > 100
method: method.R
p1: 0.1, 0.9
p2: 0.2, 0.8
@FILTER: p1 < 0.5, p2 < 0.5
When multiple conditions are involved (separated by comma ,
), eg. p1 < 0.5, p2 < 0.5
above, they will be connected by the AND
logic. The setting after filter is:
simulate: sim.R
n: 150, 200
method: method.R
p1: 0.1
p2: 0.2
For more complex logic one might have to explictly use OR
, for example:
@FILTER: p1 < 0.5 OR p2 < 0.5
will only rule out the combination of (p1, p2) = (0.1, 0.2)
in the example above.
For developers
dsc-query
command can serve as the core to writing extension packages to explore DSC benchmark results. The command option is dsc-query -c
, which allows users to decide which specific pipeline instance to extract and explore. The syntax is similar to in @FILTER
except instead of {parameter}_i
, here we need to specify {module.parameter}_i
or {group.parameter}_i
. For example,
dsc_query ... -c "simulate.n > 100" "method.p1 < 0.5 OR method.p2 < 0.5"
Multiple conditions are connected by the AND
logic, that is, the above condition is simulate.n > 100 AND (method.p1 < 0.5 OR method.p2 < 0.5)
.