Analytica 4.0 beta Release Notes

(Back to Beta Tester Page)

The following Release Notes apply to Build 4.0.0.42.

Installation Notes

  • You can install Analytica 4.0 beta while retaining an existing Analytica 3.1. Both can co-exist. After installing 4.0, the .ana file extension and OLE linking will use Analytica 4.0. So, a double-click on a model will run it in 4.0. If you want to run a model with 3.1, start up Analytica 3.1, and use the Open Model.. option from the File menu to select the model.
  • After installing 4.0, if you uninstall Analytica 3.0 or 3.1 it will wipe out the 4.0 registry tree. So, you will need to re-run the 4.0 installer.

Using Models from Analytica 3.1

Most models created in Analyica 3.1 should load and evaluate fine in 4.0. We hope beta testers will check that 4.0 works and gives the same results as 3.1 (unless there is a good reason why they should be different). There are two areas where you should expect results to be different:

  • Graphing: Some Graph Setup settings will not transfer to 4.0, because 4.0 offers different (and much richer) graphing options. For example, settings for axis ranges in 4.0 may attach to the Index rather than the graph. So, expect to do some tweaking of graphs -- and to enjoy the newoptions.
  • Multiplication of 0*NaN and 0*INF: Analytica 4.0 supports the IEEE 754 Binary Floating Point Arithmetic standard, so that 0*NaN or 0*INF return NaN. In 3.1, the result was zero. If your model took advantage of the old behavior to zero out NaNs or INFs, you may find many NaNs or Nulls in downstream results that were not there in 3.1. If you check Show result warnings in the Preference dialog, it will give a warning if your model relies on the old behavior, and help pinpoint where this occurrs.

See Changes in 4.0 that could impact 3.x models for a more comprehensive list.

Not Working

  • Printing and Print Preview are not working well. We advise not printing for now, and we do not need you to report bugs related to printing or previewing at this time.
  • There may be some problems saving models in XML format, especially related to system variable settings. For important stuff, it is safest to stick with the default Analytica file format for now.
  • Crash-recovery does not correctly recover "Add Linked Module" actions. Some problems after "Add Module". OLE links are not re-established. In the later two cases, saving the model after crash recovery, then reloading should fix. It is best to save after adding module or adding library, rather than relying on crash recovery.


Changes in 4.0.0.47

(since 4.0.0.43)

Minor bugs are not listed here.

Graphical User Interface

  • The way in which Analytica re-writes a definition when an input to a definition is removed, either because the arrow is deleted, or because the parent variable is deleted, has been changed. Formerly, Analytica would substitute "expr" in place of the identifier and surround the entire definition with FunctionOf(...). That was rather inconvenient and lost information about what the parent previously was. Now it may leave the definition alone (if the parent is deleted), may put the identifier in comment brackets (so the dependency is removed, but you can still see what was there formerly), or may substitute the actual value of the parent directly into the definition (if the Mid value of the parent has been cached and is a scalar).
  • When you draw or remove an arrow to a node with certain types of definitions, certain intelligent definition re-writes occur in these cases:
    • Target contains a list of identifiers: The parent is added (or removed) from the list.
    • A function call where the first parameter is a list of identifiers, e.g., Sum([A,B]): The parent is added or removed from the first parameter list.
    • A function call where the first parameter is an ellipsis parameter, e.g., ObjList(X:... optional Variable), and the target is ObjList(A,B,C): The parent is added to or removed from the list of parameters. Note: If you want to be able to remove the last parameters, allowing zero parameters, make sure your function declaration uses the optional qualifier (otherwise, a minimum of one parameter is required when calling the function).
    • A table, where an index is added (or removed) as a parent: You are presented with an option to add (or remove) the index as a table dimension.
  • When you move nodes into a module, but dropping the nodes on the module, or by using the "Move to Parent" action, the positioning of the nodes in the destination module take the side of the nodes into account, so they aren't so crammed up so tightly in the top-left corner.
  • Undo support was added for several actions:
    • Move Into Parent
    • Move node(s) using the arrow keys
  • A couple UI glitches fixed: Stray compute button, result windows immediately recomputing after invalidation.

Graphing

  • When the vertical axis displays the indepent variable (i.e., when swapXY is on), and when this axis is categorical, the ordering of labels has been reversed. When "reverse order" has not been checked, the first label now appears at the top.
  • The Stacked Bars option has been removed when the dependent axis (e.g., Y-axis) is categorical, where stacking doesn't make sense.
  • A slicer can now be set to "All" successfully in a stacked bar graph.
  • Export... appears on right mouse menu for a result graph. (This exports the graph as an image file).
  • On the Axis Ranges tab of the Graph Setup dialog, the label "# ticks" now reads "Approx. # ticks". This number gives Analytica a guideline for the maximum number of ticks, but the actual number is determined in such a fashion so that the numeric values on the ticks are nice round values. The new label hopefully makes it clearer that this isn't the exact # of ticks.
  • Pre-defined graph templates are now read-only, and the "Set Template" button is disabled when these are selected. We hope to include several additional pre-defined graph templates with Analytica before final release. There are current two (as placeholders). This should mean we're ready to add these. If you've created some nice graph templates for consideration, let us know.
  • Suppose you find a graph template that you like so well, you want to make that the default for your entire model. The following steps now work. With a graph displayed, bring up the "Graph Setup..." dialog. In the template box at the bottom, select the template (if not already selected), and optionally view the preview tab. Since this is what you like, change the template box to "Global Default". A question appears. You want the graph appearance to remain, so select "Yes". Now, since you want this appearance to apply to every object, exit the dialog by pressing "Set Default".

Engine

  • Formerly the expression X.I referred to the index I of Mid(X). This has been changed so that it now refers to the index I of X evaluated in context. So, for example, Sample(X.I) is now the same as Sample(X).I, while formerly it would have been Mid(X).I.
  • When an "Out of Memory" condition occurs, the error message indicates, when possible, which variable or user-defined function was being evaluated when the memory limit was hit. This can help pinpoint a variable that uses a large intermediate array during a computation.
  • There is now a new data type qualifier, Handle, which can be used when declaring parameters to user-defined functions. Handle is a data type qualifier similar to Number, Text or Reference; it is not an evaluation mode qualifier like the qualifiers Variable and Index. Thus, declaring (X:Handle) means that each atomic element of X is expected to be a Handle to an object. You could declare an array of handles, e.g., (X: Handle[I] ; I : Index ).
  • The function Handle can now be used to obtain a handle to a user-defined function. Formerly the expression Handle(F) would result in a syntax error, saying that a left-paren was expected after F.
  • The expression HandleFromIdentifier("_Caller") now returns the most recent variable or button on the call stack. This is a special form, where "_Caller" won't be confused with an existing identifier since identifiers can never begin with an underscore. This extension opens up some interesting possibilities for declarative meta-inference functions, whose functionality is based on the attributes of the object that calls them.

Profiling

Previous Beta Builds

Comments


You are not allowed to post comments.