Difference between revisions of "Draw arrows to build models"

m
(TemplateInput and TemplateOutput)
Line 26: Line 26:
  
 
By using these methods, you can define functions that let you wire together complex models simply by drawing arrows between nodes -- without having to edit their definitions explicitly.
 
By using these methods, you can define functions that let you wire together complex models simply by drawing arrows between nodes -- without having to edit their definitions explicitly.
 +
 +
; Module templates: (''new to release 4.2''). When set up appropriate, modules can serve as templates that can be duplicated and then linked up with other variables and modules by drawing arrows, without having to edit variables internal to the module.  To do this, a primary input variable within the module is identified by placing its identifier inside the [[TemplateInput]] attribute of the module, and then defining this variable as a list or a call to a function with repeated parameters, as described above.  Drawing an arrow to a module that is set up in this fashion adds the new input to the input variable.  Similarly, the primary output of the module is identified by placing its identiifer in the [[TemplateOutput]] attribute of the module.  Then, drawing an arrow from the module to another variable or module is treated as if you were drawing the arrow from the primary output node.

Revision as of 20:20, 3 November 2008


These new and improved features let you build and modify model expressions just by drawing arrows between variables -- without typing:

Draw arrow from index into Table node
Suppose variable A defined as a Table (or a ProbTable, DetermTable) and you draw an arrow from Index I to node A: If I is not an index of A, it asks if you want to add I as an extra dimension of A. If yes, it adds I as a dimension, and copies the existing array value of A into each new element over I. If I is already an index of A, it asks if you want to remove it, and warn that doing so will lose data. If yes, it the new definition of A is the first slice over I of the old array.
Redraw or delete an arrow
If you draw an arrow from variable A to B and A is already in the definition of B, it asks if you want to remove A from the Definition of B. If yes, it puts comment brackets around A, {A}, in the definition of B, so you can see what was removed. The resulting definition will often not parse, so the node for B becomes cross-hatched. It does the same if you delete an arrow -- select the arrow and press the "delete" key.
Redraw a deleted arrow
If you delete an input to B as above, and then redraw an arrow from A to B, it restores the original definition by removing the comment brackets {A} around the variable, A.
Arrow into a list
If you draw an arrow from A to B, and B contains a list, enclosed in square brackets, such as
 B := Sum([X])
  • It adds A into the list (if it wasn't already in it)"
  B := Sum([X, A]) 
  • Or if you draw an arrow from a variable X into B that is already in the list, it removes the origin variable from the list:
 B := Sum([A])
Repeated parameters
If B uses a function whose first parameter is Repeated (ellipsis or "..."), it behaves much the same as an explicit list in square brackets. For example,
Function ObjList(vars: ... Variable)
B := Objlist(X)
   draw an arrow from A to B
B := Objlist(X, A)

Note: "Repeated" usually means one or more elements. If you remove the last input by redrawing an arrow from A to B, it replaces it by "expr", which will not parse. If you want zero or more elements, you should qualify the parameter with Optional along with "...", for example:

 Function ObjList(vars: ... Optional Variable)

By using these methods, you can define functions that let you wire together complex models simply by drawing arrows between nodes -- without having to edit their definitions explicitly.

Module templates
(new to release 4.2). When set up appropriate, modules can serve as templates that can be duplicated and then linked up with other variables and modules by drawing arrows, without having to edit variables internal to the module. To do this, a primary input variable within the module is identified by placing its identifier inside the TemplateInput attribute of the module, and then defining this variable as a list or a call to a function with repeated parameters, as described above. Drawing an arrow to a module that is set up in this fashion adds the new input to the input variable. Similarly, the primary output of the module is identified by placing its identiifer in the TemplateOutput attribute of the module. Then, drawing an arrow from the module to another variable or module is treated as if you were drawing the arrow from the primary output node.
Comments


You are not allowed to post comments.