Difference between revisions of "Analytica Release Notes/Changes in Patch Build 4.4.3"

Line 122: Line 122:
 
** Fixed a bug introduced in 4.4.1 and 4.4.2 where it was not using the index order correctly for table indexes in a non-canonical ordering.  So <code>MakeChangeInTable DT DetermTable(J,I) 1(2('value'))</code> would change cell <code>DT[@I=1,@J=2]</code> instead of cell <code>DT[@J=1,@I=1]</code>.
 
** Fixed a bug introduced in 4.4.1 and 4.4.2 where it was not using the index order correctly for table indexes in a non-canonical ordering.  So <code>MakeChangeInTable DT DetermTable(J,I) 1(2('value'))</code> would change cell <code>DT[@I=1,@J=2]</code> instead of cell <code>DT[@J=1,@I=1]</code>.
  
 +
* Removed the useless and non-functional built-in function <code>Q_MakeRect</code> -- a relict from an earlier era.
  
 
= Influence Diagrams =
 
= Influence Diagrams =

Revision as of 16:00, 23 August 2012

<< What's new in Analytica 4.4

This page is under construction

This page lists changes that have been incorporated into the 4.4.3 patch release since the 4.4.2 patch release. In pages like What's new in Analytica 4.4?, we usually only list enhancements, not small bug fixes like the ones listed here. But because this is a patch release, and its only purpose is to provide fixes to lots of small bugs, we list them here.

Highlights

  • Major internal refactorization of core code, related to file handling and streams.
  • Improved robustness to avoid data loss when file system errors occur while saving models.
  • Fundamental change to the way Tables are parsed. Increased stability and speed at load time.
  • New Proactively evaluate indexes preference, and changed this default to be off for new models. Turning this off may dramatically reduce model load time.
  • New Enlarge attribute & table fonts preference setting. Improved GUI layout and management when large fonts are used.
  • Improvements to handling of zero-length indexes.
  • Lots of bug fixes. See below.

Potential Backward Compatibility Considerations

  • We recommend that you turn off the Proactively Evaluate Indexes preference setting when you start using 4.4.3, but there is a small chance this could alter the starting random number generator seed. This would simply mean that you'd see slightly different numbers for random samples. This only happens if your model has a computed index that uses a random number or a random sample during its computation (which is a rare).
  • We have removed numerous archaic legacy attributes and commands. These are attributes and commands from the days of DEMOS (i.e., the 1980s), many of which were never functional in Analytica for Windows. If you are using a model from that era, or possibly from the Analytica 1.0 days, there is very a small chance it might use on of these and complain when the model is loaded, or certain buttons controls are run. Even in those cases, other than the error message, you are unlikely to notice any difference in computations. (to do: list them here)

File Saving and Loading

  • When variables with table definitions (Table, DetermTable, ProbTable and IntraTable) are first parsed (during the Checking phase of the model load), the parser no longer has to evaluate the table indexes. This has several consequences:
    • The parsing and evaluation phases are more distinct, rather than intertwined.
    • Many models load much faster, especially if you have ProactivelyEvaluate Index : 0 set.
    • Table indexes are evaluated later when you view or evaluate a table. Thus, evaluation time is shifted from load time to evaluation time (you can still force the evaluation of selected variables or indexes at load time by configuring Proactive Evaluation if you want).
    • When you view an edit table for the first time, the table index might need to be evaluated (particularly if they are computed indexes). So you may experience delays or evaluation error messages when you attempt to view an edit table. These would have happened at an earlier point in 4.4.2, when you first parsed the definition.
    • If a table index has an evaluation error, or is not a valid index (i.e., not a list), the variable with the table is now considered parsed, while formerly it would be cross-hatched, meaning it was considered unparsed.
  • When a Dynamic with a non-Time dynamic index is parsed (such as Dynamic[I](1,self[I-1]*1.2)), the dynamic index is no longer evaluated at parse time. Consequences:
    • Better separation between parsing and evaluation.
    • Faster load times, since the dynamic index isn't computed at parse time.
    • Dynamic[I](...) variables are considered parsed even when I is undefined or has an evaluation error. Previously, these would appear hatched (unparsed).
  • File saving is been made more robust to a wide variety of disk failures that might occur while saving a model file, reducing the changes of losing information as a result of disk or network failure/outage, disk full, media defects, etc.
  • When using Add Module... or Add Library... without merge, an error appears when an identifier collision occurs. We've added a Repeat for all checkbox, so you don't have keep answering the question for all identifier collisions.
  • When using Add Library... to reload a library and change it from linked to embedded at the time, it would sometimes end up as linked.
  • Model loading has three stages: Reading, Checking (aka parsing), and Evaluating. The last stage evaluates anything that is marked for Proactive Evaluation. There were some errors that would occur while proactively evaluating an object that would cause the entire Evaluating stage to abort, thus some variables or indexes that should have been evaluated at load time were not evaluated. If this happens in your model (which is very unlikely -- we saw it in only one model), you might actually see an increase in load time in 4.4.3 if those remaining objects take a long time to evaluate. Of course, we recommend turning off the Proactively evaluate indexes preference setting, which will avoid this.
  • A certain variable was cross-hatched after the model was loaded, but would parse without error when you pressed [!] or evaluated it. This was due to an interaction of table parsing, index evaluation, and a violated check condition that involved a dependency on an edit table not yet parsed.
  • The typescript command Save has been revived.
  • When an XML-format model file contains odd characters (e.g., ascii value less than 32) appearing as an XML "entity", e.g., &#x17;, the XML parser would treat this as malformed and would stop loading the model, causing parts of the model to be lost. The official XML standard actually does not allow entity characters below 32, but Analytica does allow these characters in text (which could appear in attributes). To prevent loss of information, Analytica's XML parser has been modified to recognize these entities as legal anyway.
  • A model file that begins with the UTF-8 prefix control characters "" would fail to load. These characters are sometimes (but rarely) inserted by text editors or other programs. Analytica will now skip over these if they are present.
  • A Chr(4) character in a model file would cause the load to abort, and a Chr(27) character would cause a message "do you want to continue reading?", as if an error had occurred. These characters could legitimately appear in a model file, so they are now accepted.
  • The Att_PrevIndexValues attribute was saved (and loaded) incorrectly in the XML model format when multi-line index elements are present. After reloading, an extra tilde would appear in the index item. The bug was on the saving side (the model file was wrong).

Instabilities

Numerous bugs have been fixed that could result in an application crash.

  • A crash when copying a certain module.
  • A crash when opening a model with a file path exceeding 260 characters.
  • A crash when configuring the email address in the Publish to Cloud... account tab.
  • Publish to Cloud... would hang when used to publish an encrypted (aka obfuscated) model.
  • A crash when copying from a discrete PDF result table.
  • A crash when you add items to an extremely long list, then close the object window while it is still working on the operation.
  • Graphics splotches and crash when an excessive number of windows are open simultaneously (e.g., on the order of 65 object windows or 150 diagrams).
  • A memory leak, which in rare cases also caused a crash, related to the use of text values, with many possible manifestations.
  • A crash when answering "yes" to a particular "out of domain bounds" range warning.
  • Odd behavior, including a blank window, and potential loss of data in edit table when viewing a huge table in expr view containing more than 16383 lines.
  • An internal bug that printed "unimplemented term type in print" to the typescript window when viewing a certain mid value.
  • Crash that occurred when executing a "SpliceIndex All" command in a button script in a particular model.
  • Crash that occurred when trying to save a particular model that had a TableCellDefault set to itself.
  • A crash that occurred while trying to view an edit table when a computed index (I1) has changed length and depends on a table, which itself depends on a computed index (I2) that has changed length.
  • A case where Analytica would hang (and would have to be terminated via task manager) when it ran out of memory while creating a graph.
  • A crash or an incorrectly reported "insufficient memory" error when evaluating or displaying a smoothed PDF of a result where the first and last values in the sample are NaN.
  • A crash after a node resize after hiding the hierarchy bar.
  • Crash (or false report of insufficient memory) when Kernel Density Estimation processes a sample consisting of many NaN values.
  • Intermittent crash when calling RunConsoleProcess.
  • Crash when declaring an alias object from the typescript window.
  • A copy/paste of an index, while the index is in an unspliced state, could in some cases cause the index to get into a bad state, such that later Analytica would hang when a Choice(I,1) is entered.
  • The AdeTest program (examples that come with ADE) would crash when receiving a result of «null» from GetAttribute.
  • An occassional intermittent crash when ADE terminates itself after the process monitored by CAEngine::MonitorProcess terminates.

Evaluation and Built-in Functions

  • A new NumberToText funtion has been added. This provides an alternative to ""&x (number-to-text coercion). It will be added to the User Guide and Definition menu as an "official" new function when 4.5 is released. (For now, it is a preliminary, behind-the-scenes, implementation, but documented here on the wiki).
  • The result of Floor(date) should be a date-time number, but a integer number was being returned instead.
  • Eliminated an inefficiency in Subscript in a certain case involving the subscripting of a local variable that is computed with If-Then-Else.
  • Eliminated an inefficiency in the evaluation of DetermTable. The inefficiency was triggered only with a particular combination of indexes, but when it did happen, it took much longer than If-Then-Else and consumed excessive memory.
  • Added a «default» parameter to JoinText to specify the result when all value are null, and hence there are no items to join. For example, JoinText(A,I,',',default:null) returns null if A contains only null values along I. This is particularly useful when joining along 2 dimensions, so you don't get extra commas. However, in other cases it is useful to rely on this being the empty string, "", since JoinText is a text function, so this default behavior has been left in place.
  • Added an option to JoinText to not ignore Null values. This is useful when you need to maintain column-correspondence.
    JoinText([1,Null,2],separator:",") → "1,2"
    JoinText([1,Null,2],separator:",",textForNull:"") → "1,,2"
  • A complex interaction between the evaluation of a Choice, a computed index and table splicing resulted in a certain Choice control displaying the option "Platform" but evaluated to a different value, "Choice". The choice index was computed, and depended on an unspliced Table, which had a table index that was also computed and unspliced.
  • When you define an index as [1,«null»,2], the second index element should be the value «null», but was incorrectly evaluating to be a handle to the system variable Null.
  • When you have a meta-only index with a cell that contains Domain of X, the corresponding Mid and IndexValue should be a handle (i.e., Handle(Domain of X)), not a parsed expression.
  • The SpreadsheetSetRange function returned a cryptic error, "Unknown error x800A03EC", when one of the cell values being supplied was a handle.
  • When you imported a 1-D array using SpreadsheetRange(...,howToIndex:8), the row index labels imported ok, but the cells didn't -- they had the row labels instead.
  • The function Concat was returning the wrong result for the following: Concat( A[I=[3,4] ], B, ,J). The result had an implicit index, whereas it should have been indexed by .K.
  • When GetFract is applied to a sample containing NaNs, there were several odd and inconsistent treatments with the ordering of values, and did not always match the ordering of Sort.
  • Internally, Analytica has three real-number data types: Floating point, fixed point, and integer. Abs(x) was previously returning a floating point result, but now returns a data type matching the data type of x.
  • The ReadFromURL function now supports HTTPS and proxy server settings automatically.
  • The functions Elasticity(y,x) and WhatIf(y,x) inherently produce nonsense results when a distribution function or random number is downstream of x and used in the computation of y. The nonsense is inherent to the use of finite differencing, but these functions will now detect this situation and issue a warning (provided, of course, that the Show Result Warnings preference is on).
  • Changes to the MakeChangesInTable:
    • it was not able to change a Table into a DetermTable when the Domain acts as Self Index preference is set.
    • Fixed a bug introduced in 4.4.1 and 4.4.2 where it was not using the index order correctly for table indexes in a non-canonical ordering. So MakeChangeInTable DT DetermTable(J,I) 1(2('value')) would change cell DT[@I=1,@J=2] instead of cell DT[@J=1,@I=1].
  • Removed the useless and non-functional built-in function Q_MakeRect -- a relict from an earlier era.

Influence Diagrams

  • Add Library... or Add Module... would sometimes position the new module node under existing nodes.
  • Help balloon linger over other windows, e.g., number format dialog, or over an external window.
  • Help balloon flickers when hovering over the node displaying the balloon.
  • Help balloons containing the special characters ≥ or ≤ display the wrong character.
  • Slight decrease in text margin for a text node so that a few additional pixels fit on each line before a line wrap.
  • The scalar result value in an output node was a few pixels too low relative to the label.
  • Diagram scroll bar is off after leaving maximized model
  • Numerous glitches fixed that were observed in a an extremely wide diagram (typically > 20 to 30 screen widths).
  • An Alias button is missing its bevel.
  • A certain button was not executing its script when pressed.
  • After a Select All, the reference node loses its solid handles, so you cannot distinguish it from the others.
  • Text nodes not resizing by proper increment. Snap to grid was constraining a text node size to a 2*grid size, whereas a 1*grid size is fine for a text node.
  • Text outside of node border disappears when moving nodes around on diagram (redraw issue).
  • An "Undo resizing" menu command had no effect on an input node button.
  • Change Image Format was not working for converting a particular EMF image to raster formats like PNG.
  • Node handles were slightly asymmetrical, probably related to one-pixel width changes to nodes in the 4.4.2 release.
  • A pulldown menu for a Choice input node is too narrow, with text outside of the menu and the form node, which looked bad.
  • A checkbox input node became small after adding units.
  • Node titles were not centered vertically after changing node font size.
  • When using a smaller print page size, the diagram scroll bar would get off and the diagram would go blank.
  • An arrow would disappear for no good reason, after entering a value into an edit table that violates a check attribute.
  • After renaming node, input/output/alias nodes don't update their titles (repaint issue).
  • Right click in input/output nodes doesn't work in browse mode.
  • A broken input node involving Choice(domain of X)
  • After an undo of a resize of a Table edit button, an input node is drawn in the wrong location.
  • A node title was not vertically centered in a legacy model when ClearType fonts is turned off.
  • A module node inherits its color from its parent, unless you've explicit set its color to something else. But there was no way outside of typescript to clear an explicit setting so that it would go back to inheriting from the parent. Now, it does this when you set it to the same color as the parent.

Tables

  • In some cases, when you request the result of a variable in a Dynamic loop, which at the time has been partially computed, it would display the partially computed result (with uncomputed cells blank), whereas it should have finished the remaining computation before showing the result.
  • When you export a table that contains Nulls, then re-import it, the cells would end up with the text '«null»', rather than the value of «null».

Graphing

User Interface

  • The object window, attribute pane, outliner, and table windows, have been updated to support larger fonts gracefully, so that things align, don't wrap poorly, fit the data being displayed, etc. A preference setting, Enlarge attribute & table fonts, has been explored on the Preference Dialog.
  • Some buttons were not selected when using the TAB key to tab through the Object Finder dialog.
  • The term obfuscate has been uniformly replaced by the term encrypt. For example, in Analytica Enterprise on the Save a Copy In... dialog, the checkbox now reads Lock and encrypt the copy.
  • Refined text in the crash recovery dialog.
  • The Integer number format was changed to show integers at full precision after 1e+15.
  • Expression Assist now shows indexes values when typing If In1= when the index In1 is a computed index that has already been computed. Previously, it only showed values when In1 was a literal list.

Example Models and Libraries

Typescript

Other Misc

  • Identifiers appearing to the left of an assignment operator in a script attribute were not updated when the identifier was renamed.

ADE

  • Increased the stack size in ADE to be the same as Analytica. Because of a smaller stack, some deeply nested computations that succeeded in Analytica experienced a stack overflow in ADE.
  • Sped up CAObject::DefTable when retrieving SubTables.
  • In AdeTest, the image isn't visible immediately when executing CAObject::PictureToStream
  • AdeTest retained a lock on the image file after using CAObject::PictureToFile
  • The return value of CAEngine::SaveModel is false after a successful save. On occurs when called via ActiveX automation (does not occur when using COM).
  • CAObject::DefinitionType returned 0 ("general expression") when it should have returned -1 ("definition does not parse").
  • Nested buttons, where one button script runs two or more other button scripts, failed to execute when the top bottom was launched via CAEngine::SendCommand.
  • CATable::IndexNames was returning the name of local indexes without the dot, e.g., "my_index" rather than ".my_index". CATable::IndexName(n) included the dot.
Comments


You are not allowed to post comments.