NOAA-PMEL/PyFerret

Parsing bug with DEFINE AXIS

Closed this issue · 1 comments

This was reported as a Ferret issue, NOAA-PMEL/Ferret#1998 and the user closed it. However it is a bug.

A simplified version:

yes? let ts = "06-JAN-2016"
yes? let te = "12-NOV-2016"
yes? define axis/T="`ts`":"`te`":2/T0="`ts`"/units=hours taxis
 **ERROR: invalid command: delta values may only modify variable names
define axis/T="06-JAN-2016":"12-NOV-2016":2/T0="`ts`"/units=hours taxis

Most often we have recommended people do this kind of thing using symbols, so this may be a long-standing bug that hasn't been reported before. That would go like this:

yes? define symbol  ts = 06-JAN-2016
yes? define symbol te = 12-NOV-2016
yes? define axis/T="($ts)":"($te)":2/T0="($ts)"/units=hours taxis
 !-> define axis/T="06-JAN-2016":"12-NOV-2016":2/T0="06-JAN-2016"/units=hours taxis
yes? show axis taxis
 name       axis              # pts   start                end
 TAXIS     TIME              3733 r   06-JAN-2016 00:00    12-NOV-2016 00:00
T0 = 06-JAN-2016
   Axis span (to cell edges) = 7466

However what was done in that original report should work fine.

This is fixed in fer/gnl/eval_expr.F, and a new benchmark test is added.

The grave-accent syntax to evaluate a variable involves looking at the context of the expression. Here it was looking at parts of the command that are not involved in the expression ts, and treating the LO:HI:DELTA from the command as if it applied to the string variable ts. This information needs to be ignored for evaluating the variable.