Draw arrows to build models
These new and improved features let you build and modify model expressions just by drawing arrows between variables -- without typing:
- If you draw an arrow from index I to variable A defined as a Table (or a ProbTable, DetermTable), if I is not an index of A, it will ask if you want to add I as an extra dimension of A. If I is already an index of A, it will ask if you want to remove it.
- If you draw an arrow from array A to B and A is already in the definition of B:
- Deleting arrows or input variables: If you delete an arrow from A to B (select and press "delete" key, or just redraw an arrow), Analytica changes the definition of B. It used to substitute "expr" in place of A and surround the entire definition with FunctionOf(...). That was inconvenient and lost information about the former input. Now, if the Mid value of A is a scalar (single number or text), it substitutes it into the definition of B. Otherwise, it replaces A by '{A}' (a comment). Or if you delete A, it doesn't change the definition of B, but B will no longer parse, and its node is cross-hatched.
- Auto definitions: If you draw an arrow from A to B:
- If B is a list of zero or more variables not including A, or if B is a function call whose first parameters is such a list, it adds A into the list. For example
B := Sum([X]) draw an arrow from A to B B := Sum([X, A])
- If B is a list of variables including A, or is a function whose first parameter is such a list, it removes A from the list. For example,
B := Sum([X, A]) draw an arrow from A to B B := Sum([X])
- If B uses a function whose first parameter is an ellipsis (repeating) variable, it similarly adds A (or removes A if it is already there). For example,
Function ObjList(vars: ... Optional Variable) B := Objlist(X) draw an arrow from A to B B := Objlist(X, A)
Note: If you want Objlist to have no parameters, you must use the Optional qualifier along with "..." -- otherwise, the function needs at least one parameter.
- If you draw an arrow from index I to and Edit table B, if B is not indexed by I, it askif you want to add I as an index. If so, it adds the index to the table, repeating the current value over each value of I. If B is already indexed by I, it will ask if you want to remove I as an index. If so, the new value of B will be the first slice of its old value over I. It will lose all other data.
- When you drag a nodes into a module, or use the "Move to Parent" action, the location of the node in the module is not so crammed up so tightly in the top-left corner.
- Undo also works for:
- Move Into Parent
- Move node(s) using the arrow keys
- A couple UI glitches fixed: Stray compute button, result windows immediately recomputing after invalidation.
Comments
Enable comment auto-refresher